diff --git a/core/composer.json b/core/composer.json
index b1547dfed462adee8589df07b77f48e25efda92f..09965aa40f17f142b4a77cdf73112964e36a5066 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -10,7 +10,7 @@
     "symfony/css-selector": "2.7.*",
     "symfony/dependency-injection": "2.7.*",
     "symfony/event-dispatcher": "2.7.*",
-    "symfony/http-foundation": "2.7.*",
+    "symfony/http-foundation": "~2.7.2",
     "symfony/http-kernel": "2.7.*",
     "symfony/routing": "2.7.*",
     "symfony/serializer": "2.7.*",
diff --git a/core/composer.lock b/core/composer.lock
index 2ce605c5e7e912e86e4ca1636fff2d43cecf45d7..e3f620ebfddc5e80b3996305cac43d8ef188c6f0 100644
--- a/core/composer.lock
+++ b/core/composer.lock
@@ -4,20 +4,20 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "6d065bd806544df5f446905bc3d6379f",
+    "hash": "bb574246b2b7f8f4631a83239065da4c",
     "packages": [
         {
             "name": "behat/mink",
-            "version": "v1.6.1",
+            "version": "v1.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/minkphp/Mink.git",
-                "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a"
+                "reference": "090900a0049c441f1e072bbd837db4079b2250c5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/Mink/zipball/8b68523a339ec991bcd638b39dc8f04f808da88a",
-                "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a",
+                "url": "https://api.github.com/repos/minkphp/Mink/zipball/090900a0049c441f1e072bbd837db4079b2250c5",
+                "reference": "090900a0049c441f1e072bbd837db4079b2250c5",
                 "shasum": ""
             },
             "require": {
@@ -37,8 +37,8 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Behat\\Mink\\": "src/"
+                "psr-0": {
+                    "Behat\\Mink": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -52,14 +52,14 @@
                     "homepage": "http://everzet.com"
                 }
             ],
-            "description": "Browser controller/emulator abstraction for PHP",
+            "description": "Web acceptance testing framework for PHP 5.3",
             "homepage": "http://mink.behat.org/",
             "keywords": [
                 "browser",
                 "testing",
                 "web"
             ],
-            "time": "2015-02-04 17:02:06"
+            "time": "2014-09-26 09:25:05"
         },
         {
             "name": "behat/mink-browserkit-driver",
@@ -126,7 +126,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
+                "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/7e9a7319cc0e8cf9d4d4c9e06e2020d3a31bd792",
                 "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
                 "shasum": ""
             },
@@ -166,20 +166,75 @@
                 "headless",
                 "testing"
             ],
-            "time": "2015-06-27 00:15:11"
+            "time": "2015-08-31 10:14:55"
+        },
+        {
+            "name": "dflydev/markdown",
+            "version": "v1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dflydev/dflydev-markdown.git",
+                "reference": "76501a808522dbe40a5a71d272bd08d54cbae03d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dflydev/dflydev-markdown/zipball/76501a808522dbe40a5a71d272bd08d54cbae03d",
+                "reference": "76501a808522dbe40a5a71d272bd08d54cbae03d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "dflydev\\markdown": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "New BSD License"
+            ],
+            "authors": [
+                {
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Michel Fortin",
+                    "homepage": "http://michelf.com"
+                },
+                {
+                    "name": "John Gruber",
+                    "homepage": "http://daringfireball.net"
+                }
+            ],
+            "description": "PHP Markdown & Extra",
+            "homepage": "http://github.com/dflydev/dflydev-markdown",
+            "keywords": [
+                "markdown"
+            ],
+            "abandoned": "michelf/php-markdown",
+            "time": "2012-01-02 23:11:32"
         },
         {
             "name": "doctrine/annotations",
-            "version": "v1.2.1",
+            "version": "v1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/annotations.git",
-                "reference": "6a6bec0670bb6e71a263b08bc1b98ea242928633"
+                "reference": "d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/6a6bec0670bb6e71a263b08bc1b98ea242928633",
-                "reference": "6a6bec0670bb6e71a263b08bc1b98ea242928633",
+                "url": "https://api.github.com/repos/doctrine/annotations/zipball/d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd",
+                "reference": "d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd",
                 "shasum": ""
             },
             "require": {
@@ -207,24 +262,29 @@
             ],
             "authors": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com",
+                    "homepage": "http://www.jwage.com/",
+                    "role": "Creator"
                 },
                 {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com",
+                    "homepage": "http://www.instaclick.com"
                 },
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
                 },
                 {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
                 },
                 {
                     "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "https://github.com/schmittjoh",
+                    "role": "Developer of wrapped JMSSerializerBundle"
                 }
             ],
             "description": "Docblock Annotations Parser",
@@ -234,38 +294,26 @@
                 "docblock",
                 "parser"
             ],
-            "time": "2014-09-25 16:45:30"
+            "time": "2014-07-06 15:52:21"
         },
         {
             "name": "doctrine/cache",
-            "version": "v1.3.1",
+            "version": "v1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/cache.git",
-                "reference": "cf483685798a72c93bf4206e3dd6358ea07d64e7"
+                "reference": "914abe4a49f2eae2b268073cca147b530da0308a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/cache/zipball/cf483685798a72c93bf4206e3dd6358ea07d64e7",
-                "reference": "cf483685798a72c93bf4206e3dd6358ea07d64e7",
+                "url": "https://api.github.com/repos/doctrine/cache/zipball/914abe4a49f2eae2b268073cca147b530da0308a",
+                "reference": "914abe4a49f2eae2b268073cca147b530da0308a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2"
             },
-            "conflict": {
-                "doctrine/common": ">2.2,<2.4"
-            },
-            "require-dev": {
-                "phpunit/phpunit": ">=3.7",
-                "satooshi/php-coveralls": "~0.6"
-            },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
             "autoload": {
                 "psr-0": {
                     "Doctrine\\Common\\Cache\\": "lib/"
@@ -277,24 +325,29 @@
             ],
             "authors": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com",
+                    "homepage": "http://www.jwage.com/",
+                    "role": "Creator"
                 },
                 {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com",
+                    "homepage": "http://www.instaclick.com"
                 },
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
                 },
                 {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
                 },
                 {
                     "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "https://github.com/schmittjoh",
+                    "role": "Developer of wrapped JMSSerializerBundle"
                 }
             ],
             "description": "Caching library offering an object-oriented API for many cache backends",
@@ -303,31 +356,26 @@
                 "cache",
                 "caching"
             ],
-            "time": "2014-09-17 14:24:04"
+            "time": "2013-01-10 22:43:46"
         },
         {
             "name": "doctrine/collections",
-            "version": "v1.2",
+            "version": "v1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/collections.git",
-                "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2"
+                "reference": "b1e6852b5e49e94ac818feca3b1a8689daefbffc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/collections/zipball/b99c5c46c87126201899afe88ec490a25eedd6a2",
-                "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2",
+                "url": "https://api.github.com/repos/doctrine/collections/zipball/b1e6852b5e49e94ac818feca3b1a8689daefbffc",
+                "reference": "b1e6852b5e49e94ac818feca3b1a8689daefbffc",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
             "autoload": {
                 "psr-0": {
                     "Doctrine\\Common\\Collections\\": "lib/"
@@ -371,7 +419,7 @@
                 "collections",
                 "iterator"
             ],
-            "time": "2014-02-03 23:07:43"
+            "time": "2013-01-12 16:36:50"
         },
         {
             "name": "doctrine/common",
@@ -457,12 +505,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/inflector.git",
-                "reference": "v1.0"
+                "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/doctrine/inflector/zipball/54b8333d2a5682afdc690060c1cf384ba9f47f08",
-                "reference": "v1.0",
+                "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08",
                 "shasum": ""
             },
             "require": {
@@ -482,7 +530,8 @@
                 {
                     "name": "Jonathan Wage",
                     "email": "jonwage@gmail.com",
-                    "homepage": "http://www.jwage.com/"
+                    "homepage": "http://www.jwage.com/",
+                    "role": "Creator"
                 },
                 {
                     "name": "Guilherme Blanco",
@@ -498,7 +547,7 @@
                     "email": "kontakt@beberlei.de"
                 },
                 {
-                    "name": "Johannes M. Schmitt",
+                    "name": "Johannes Schmitt",
                     "email": "schmittjoh@gmail.com",
                     "homepage": "https://github.com/schmittjoh",
                     "role": "Developer of wrapped JMSSerializerBundle"
@@ -516,20 +565,20 @@
         },
         {
             "name": "doctrine/instantiator",
-            "version": "1.0.4",
+            "version": "1.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119"
+                "reference": "26404e0c90565b614ee76b988b9bc8790d77f590"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119",
-                "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/26404e0c90565b614ee76b988b9bc8790d77f590",
+                "reference": "26404e0c90565b614ee76b988b9bc8790d77f590",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3,<8.0-DEV"
+                "php": "~5.3"
             },
             "require-dev": {
                 "athletic/athletic": "~0.1.8",
@@ -566,31 +615,26 @@
                 "constructor",
                 "instantiate"
             ],
-            "time": "2014-10-13 12:58:55"
+            "time": "2014-08-25 15:09:25"
         },
         {
             "name": "doctrine/lexer",
-            "version": "v1.0.1",
+            "version": "v1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+                "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/2f708a85bb3aab5d99dab8be435abd73e0b18acb",
+                "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
             "autoload": {
                 "psr-0": {
                     "Doctrine\\Common\\Lexer\\": "lib/"
@@ -602,16 +646,19 @@
             ],
             "authors": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com",
+                    "homepage": "http://www.instaclick.com"
                 },
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
                 },
                 {
                     "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "https://github.com/schmittjoh",
+                    "role": "Developer of wrapped JMSSerializerBundle"
                 }
             ],
             "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
@@ -620,7 +667,7 @@
                 "lexer",
                 "parser"
             ],
-            "time": "2014-09-09 13:34:57"
+            "time": "2013-01-12 18:59:04"
         },
         {
             "name": "easyrdf/easyrdf",
@@ -686,30 +733,29 @@
         },
         {
             "name": "egulias/email-validator",
-            "version": "1.2.9",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/egulias/EmailValidator.git",
-                "reference": "af864423f50ea59f96c87bb1eae147a70bcf67a1"
+                "reference": "bb530a193056992702df9f722e8814f57bdb13c2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/af864423f50ea59f96c87bb1eae147a70bcf67a1",
-                "reference": "af864423f50ea59f96c87bb1eae147a70bcf67a1",
+                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/bb530a193056992702df9f722e8814f57bdb13c2",
+                "reference": "bb530a193056992702df9f722e8814f57bdb13c2",
                 "shasum": ""
             },
             "require": {
-                "doctrine/lexer": "~1.0,>=1.0.1",
+                "doctrine/lexer": "~1.0",
                 "php": ">= 5.3.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4",
                 "satooshi/php-coveralls": "dev-master"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
@@ -730,12 +776,10 @@
             "homepage": "https://github.com/egulias/EmailValidator",
             "keywords": [
                 "email",
-                "emailvalidation",
-                "emailvalidator",
                 "validation",
                 "validator"
             ],
-            "time": "2015-06-22 21:07:51"
+            "time": "2014-07-06 17:21:29"
         },
         {
             "name": "fabpot/goutte",
@@ -796,7 +840,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d687700d601f8b5f19b99ffc1c0f6af835a3c7b7",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/33af93ab4b5e76df7a4c774910590f814a3e576c",
                 "reference": "1879fbe853b0c64d109e369c7aeff09849e62d1e",
                 "shasum": ""
             },
@@ -846,27 +890,27 @@
                 "rest",
                 "web service"
             ],
-            "time": "2015-07-10 20:04:21"
+            "time": "2015-09-01 23:14:13"
         },
         {
             "name": "guzzlehttp/promises",
-            "version": "1.0.2",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/promises.git",
-                "reference": "97fe7210def29451ec74923b27e552238defd75a"
+                "reference": "01abc3232138f330d8a1eaa808fcbdf9b4292f47"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/97fe7210def29451ec74923b27e552238defd75a",
-                "reference": "97fe7210def29451ec74923b27e552238defd75a",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/01abc3232138f330d8a1eaa808fcbdf9b4292f47",
+                "reference": "01abc3232138f330d8a1eaa808fcbdf9b4292f47",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
+                "phpunit/phpunit": "^4.0"
             },
             "type": "library",
             "extra": {
@@ -879,7 +923,7 @@
                     "GuzzleHttp\\Promise\\": "src/"
                 },
                 "files": [
-                    "src/functions_include.php"
+                    "src/functions.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -897,20 +941,20 @@
             "keywords": [
                 "promise"
             ],
-            "time": "2015-08-15 19:37:21"
+            "time": "2015-05-13 05:05:10"
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "1.2.0",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "4ef919b0cf3b1989523138b60163bbcb7ba1ff7e"
+                "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/4ef919b0cf3b1989523138b60163bbcb7ba1ff7e",
-                "reference": "4ef919b0cf3b1989523138b60163bbcb7ba1ff7e",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/af0e1758de355eb113917ad79c3c0e3604bce4bd",
+                "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd",
                 "shasum": ""
             },
             "require": {
@@ -934,7 +978,7 @@
                     "GuzzleHttp\\Psr7\\": "src/"
                 },
                 "files": [
-                    "src/functions_include.php"
+                    "src/functions.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -955,7 +999,7 @@
                 "stream",
                 "uri"
             ],
-            "time": "2015-08-15 19:32:36"
+            "time": "2015-06-24 19:55:15"
         },
         {
             "name": "masterminds/html5",
@@ -1024,30 +1068,22 @@
         },
         {
             "name": "mikey179/vfsStream",
-            "version": "v1.5.0",
+            "version": "v1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mikey179/vfsStream.git",
-                "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a"
+                "reference": "063fb10633f10c5ccbcac26227e94f46d9336f90"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/4dc0d2f622412f561f5b242b19b98068bbbc883a",
-                "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a",
+                "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/063fb10633f10c5ccbcac26227e94f46d9336f90",
+                "reference": "063fb10633f10c5ccbcac26227e94f46d9336f90",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.0"
             },
-            "require-dev": {
-                "phpunit/phpunit": "~4.5"
-            },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.5.x-dev"
-                }
-            },
             "autoload": {
                 "psr-0": {
                     "org\\bovigo\\vfs\\": "src/main/php"
@@ -1055,42 +1091,31 @@
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "BSD"
             ],
-            "authors": [
-                {
-                    "name": "Frank Kleine",
-                    "homepage": "http://frankkleine.de/",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Virtual file system to mock the real file system in unit tests.",
             "homepage": "http://vfs.bovigo.org/",
-            "time": "2015-03-29 11:19:49"
+            "time": "2013-04-01 10:41:02"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "2.0.4",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+                "reference": "66ae84e9d7c8ea85c979cb65977bd8e608baf0c5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
-                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66ae84e9d7c8ea85c979cb65977bd8e608baf0c5",
+                "reference": "66ae84e9d7c8ea85c979cb65977bd8e608baf0c5",
                 "shasum": ""
             },
             "require": {
+                "dflydev/markdown": "1.0.*",
                 "php": ">=5.3.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "suggest": {
-                "dflydev/markdown": "~1.0",
-                "erusev/parsedown": "~1.0"
+                "phpunit/phpunit": "3.7.*@stable"
             },
             "type": "library",
             "extra": {
@@ -1115,26 +1140,25 @@
                     "email": "mike.vanriel@naenius.com"
                 }
             ],
-            "time": "2015-02-03 12:10:50"
+            "time": "2013-08-07 11:04:22"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.4.0",
+            "version": "v1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5"
+                "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
-                "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/9ca52329bcdd1500de24427542577ebf3fc2f1c9",
+                "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "phpdocumentor/reflection-docblock": "~2.0",
-                "sebastian/comparator": "~1.1"
+                "doctrine/instantiator": "~1.0,>=1.0.2",
+                "phpdocumentor/reflection-docblock": "~2.0"
             },
             "require-dev": {
                 "phpspec/phpspec": "~2.0"
@@ -1142,7 +1166,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4.x-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
@@ -1166,7 +1190,7 @@
                 }
             ],
             "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
+            "homepage": "http://phpspec.org",
             "keywords": [
                 "Double",
                 "Dummy",
@@ -1175,20 +1199,20 @@
                 "spy",
                 "stub"
             ],
-            "time": "2015-03-27 19:31:25"
+            "time": "2014-11-17 16:23:49"
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "2.0.16",
+            "version": "2.0.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c"
+                "reference": "53603b3c995f5aab6b59c8e08c3a663d2cc810b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/934fd03eb6840508231a7f73eb8940cf32c3b66c",
-                "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/53603b3c995f5aab6b59c8e08c3a663d2cc810b7",
+                "reference": "53603b3c995f5aab6b59c8e08c3a663d2cc810b7",
                 "shasum": ""
             },
             "require": {
@@ -1201,7 +1225,7 @@
             },
             "require-dev": {
                 "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4"
+                "phpunit/phpunit": "~4.1"
             },
             "suggest": {
                 "ext-dom": "*",
@@ -1220,6 +1244,9 @@
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
             "license": [
                 "BSD-3-Clause"
             ],
@@ -1237,7 +1264,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-04-11 04:35:00"
+            "time": "2014-08-31 06:33:04"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -1332,25 +1359,25 @@
         },
         {
             "name": "phpunit/php-timer",
-            "version": "1.0.5",
+            "version": "1.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
+                "reference": "5175e9bb35fc9cc430973ed83a3d62531c3c8698"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
-                "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5175e9bb35fc9cc430973ed83a3d62531c3c8698",
+                "reference": "5175e9bb35fc9cc430973ed83a3d62531c3c8698",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.2.7"
             },
             "type": "library",
             "autoload": {
-                "classmap": [
-                    "PHP/"
+                "files": [
+                    "PHP/Timer/Autoload.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1368,24 +1395,24 @@
                 }
             ],
             "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "homepage": "http://www.phpunit.de/",
             "keywords": [
                 "timer"
             ],
-            "time": "2013-08-02 07:42:54"
+            "time": "2012-09-23 00:00:00"
         },
         {
             "name": "phpunit/php-token-stream",
-            "version": "1.4.1",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "eab81d02569310739373308137284e0158424330"
+                "reference": "f8d5d08c56de5cfd592b3340424a81733259a876"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330",
-                "reference": "eab81d02569310739373308137284e0158424330",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/f8d5d08c56de5cfd592b3340424a81733259a876",
+                "reference": "f8d5d08c56de5cfd592b3340424a81733259a876",
                 "shasum": ""
             },
             "require": {
@@ -1398,7 +1425,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "1.3-dev"
                 }
             },
             "autoload": {
@@ -1421,20 +1448,20 @@
             "keywords": [
                 "tokenizer"
             ],
-            "time": "2015-04-08 04:46:07"
+            "time": "2014-08-31 06:12:13"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "4.6.4",
+            "version": "4.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "163232991e652e6efed2f8470326fffa61e848e2"
+                "reference": "3797497862a4dedcd77c1615106c574ecdb3fad7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/163232991e652e6efed2f8470326fffa61e848e2",
-                "reference": "163232991e652e6efed2f8470326fffa61e848e2",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3797497862a4dedcd77c1615106c574ecdb3fad7",
+                "reference": "3797497862a4dedcd77c1615106c574ecdb3fad7",
                 "shasum": ""
             },
             "require": {
@@ -1473,6 +1500,9 @@
             "autoload": {
                 "classmap": [
                     "src/"
+                ],
+                "files": [
+                    "src/Framework/Assert/Functions.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1493,29 +1523,29 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-04-11 05:23:21"
+            "time": "2015-04-03 08:59:48"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.1",
+            "version": "2.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "74ffb87f527f24616f72460e54b595f508dccb5c"
+                "reference": "c63d2367247365f688544f0d500af90a11a44c65"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/74ffb87f527f24616f72460e54b595f508dccb5c",
-                "reference": "74ffb87f527f24616f72460e54b595f508dccb5c",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65",
+                "reference": "c63d2367247365f688544f0d500af90a11a44c65",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "~1.0,>=1.0.2",
+                "doctrine/instantiator": "~1.0,>=1.0.1",
                 "php": ">=5.3.3",
                 "phpunit/php-text-template": "~1.2"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "phpunit/phpunit": "~4.3"
             },
             "suggest": {
                 "ext-soap": "*"
@@ -1548,7 +1578,7 @@
                 "mock",
                 "xunit"
             ],
-            "time": "2015-04-02 05:36:41"
+            "time": "2014-10-03 05:12:11"
         },
         {
             "name": "psr/http-message",
@@ -1605,12 +1635,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "1.0.0"
+                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
-                "reference": "1.0.0",
+                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
                 "shasum": ""
             },
             "type": "library",
@@ -1639,25 +1669,25 @@
         },
         {
             "name": "sebastian/comparator",
-            "version": "1.1.1",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "1dd8869519a225f7f2b9eb663e225298fade819e"
+                "reference": "c484a80f97573ab934e37826dba0135a3301b26a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e",
-                "reference": "1dd8869519a225f7f2b9eb663e225298fade819e",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c484a80f97573ab934e37826dba0135a3301b26a",
+                "reference": "c484a80f97573ab934e37826dba0135a3301b26a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3",
-                "sebastian/diff": "~1.2",
-                "sebastian/exporter": "~1.2"
+                "sebastian/diff": "~1.1",
+                "sebastian/exporter": "~1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "phpunit/phpunit": "~4.1"
             },
             "type": "library",
             "extra": {
@@ -1699,20 +1729,20 @@
                 "compare",
                 "equality"
             ],
-            "time": "2015-01-29 16:28:08"
+            "time": "2014-11-16 21:32:38"
         },
         {
             "name": "sebastian/diff",
-            "version": "1.3.0",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
+                "reference": "5843509fed39dee4b356a306401e9dd1a931fec7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
-                "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7",
+                "reference": "5843509fed39dee4b356a306401e9dd1a931fec7",
                 "shasum": ""
             },
             "require": {
@@ -1724,7 +1754,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3-dev"
+                    "dev-master": "1.2-dev"
                 }
             },
             "autoload": {
@@ -1751,32 +1781,32 @@
             "keywords": [
                 "diff"
             ],
-            "time": "2015-02-22 15:13:53"
+            "time": "2014-08-15 10:29:00"
         },
         {
             "name": "sebastian/environment",
-            "version": "1.2.2",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e"
+                "reference": "0d9bf79554d2a999da194a60416c15cf461eb67d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e",
-                "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0d9bf79554d2a999da194a60416c15cf461eb67d",
+                "reference": "0d9bf79554d2a999da194a60416c15cf461eb67d",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "phpunit/phpunit": "~4.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
@@ -1801,7 +1831,7 @@
                 "environment",
                 "hhvm"
             ],
-            "time": "2015-01-01 10:01:08"
+            "time": "2014-10-22 06:38:05"
         },
         {
             "name": "sebastian/exporter",
@@ -1975,16 +2005,16 @@
         },
         {
             "name": "sebastian/version",
-            "version": "1.0.5",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4"
+                "reference": "16b021aed448b654ae05846e394e057e9a6f04cb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
-                "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/16b021aed448b654ae05846e394e057e9a6f04cb",
+                "reference": "16b021aed448b654ae05846e394e057e9a6f04cb",
                 "shasum": ""
             },
             "type": "library",
@@ -2006,29 +2036,29 @@
             ],
             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
             "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-02-24 06:35:25"
+            "time": "2013-01-05 14:27:32"
         },
         {
             "name": "stack/builder",
-            "version": "v1.0.2",
+            "version": "v1.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/stackphp/builder.git",
-                "reference": "b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7"
+                "reference": "ed6db737187e31cc1f4d17b45cbd73b0334232e9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stackphp/builder/zipball/b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7",
-                "reference": "b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7",
+                "url": "https://api.github.com/repos/stackphp/builder/zipball/ed6db737187e31cc1f4d17b45cbd73b0334232e9",
+                "reference": "ed6db737187e31cc1f4d17b45cbd73b0334232e9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0",
+                "php": ">=5.4.0",
                 "symfony/http-foundation": "~2.1",
                 "symfony/http-kernel": "~2.1"
             },
             "require-dev": {
-                "silex/silex": "~1.0"
+                "silex/silex": "1.0.*@dev"
             },
             "type": "library",
             "extra": {
@@ -2056,7 +2086,7 @@
             "keywords": [
                 "stack"
             ],
-            "time": "2014-01-28 19:42:24"
+            "time": "2013-08-02 13:05:55"
         },
         {
             "name": "symfony-cmf/routing",
@@ -2117,39 +2147,39 @@
         },
         {
             "name": "symfony/browser-kit",
-            "version": "v2.7.3",
+            "version": "v2.1.0",
+            "target-dir": "Symfony/Component/BrowserKit",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/BrowserKit.git",
-                "reference": "176905d3d74c2f99e6ab70f4f5a89460532495ae"
+                "reference": "6f2dc48d75ac9027bbea0f8e496f26613ad8b326"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/176905d3d74c2f99e6ab70f4f5a89460532495ae",
-                "reference": "176905d3d74c2f99e6ab70f4f5a89460532495ae",
+                "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/6f2dc48d75ac9027bbea0f8e496f26613ad8b326",
+                "reference": "6f2dc48d75ac9027bbea0f8e496f26613ad8b326",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9",
-                "symfony/dom-crawler": "~2.0,>=2.0.5"
+                "php": ">=5.3.3",
+                "symfony/dom-crawler": "2.1.*"
             },
             "require-dev": {
-                "symfony/css-selector": "~2.0,>=2.0.5",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/process": "~2.0,>=2.0.5"
+                "symfony/css-selector": "2.1.*",
+                "symfony/process": "2.1.*"
             },
             "suggest": {
-                "symfony/process": ""
+                "symfony/process": "v2.1.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.1-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\BrowserKit\\": ""
+                "psr-0": {
+                    "Symfony\\Component\\BrowserKit": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2159,29 +2189,31 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony BrowserKit Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-07-09 16:07:40"
+            "homepage": "http://symfony.com",
+            "time": "2012-08-22 13:48:41"
         },
         {
             "name": "symfony/class-loader",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/ClassLoader.git",
-                "reference": "2fccbc544997340808801a7410cdcb96dd12edc4"
+                "reference": "fa19598cb708b92d983b34aae313f57c217f9386"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/2fccbc544997340808801a7410cdcb96dd12edc4",
-                "reference": "2fccbc544997340808801a7410cdcb96dd12edc4",
+                "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/fa19598cb708b92d983b34aae313f57c217f9386",
+                "reference": "fa19598cb708b92d983b34aae313f57c217f9386",
                 "shasum": ""
             },
             "require": {
@@ -2218,20 +2250,20 @@
             ],
             "description": "Symfony ClassLoader Component",
             "homepage": "https://symfony.com",
-            "time": "2015-06-25 12:52:11"
+            "time": "2015-05-15 13:33:16"
         },
         {
             "name": "symfony/console",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Console.git",
-                "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e"
+                "reference": "7f0bec04961c61c961df0cb8c2ae88dbfd83f399"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/d6cf02fe73634c96677e428f840704bfbcaec29e",
-                "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/7f0bec04961c61c961df0cb8c2ae88dbfd83f399",
+                "reference": "7f0bec04961c61c961df0cb8c2ae88dbfd83f399",
                 "shasum": ""
             },
             "require": {
@@ -2275,11 +2307,11 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-28 15:18:12"
+            "time": "2015-05-29 16:22:24"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/CssSelector.git",
@@ -2332,30 +2364,27 @@
         },
         {
             "name": "symfony/debug",
-            "version": "v2.7.3",
+            "version": "v2.6.2",
+            "target-dir": "Symfony/Component/Debug",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Debug.git",
-                "reference": "9daa1bf9f7e615fa2fba30357e479a90141222e3"
+                "reference": "7213c8200d60728c9d4c56d5830aa2d80ae3d25d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Debug/zipball/9daa1bf9f7e615fa2fba30357e479a90141222e3",
-                "reference": "9daa1bf9f7e615fa2fba30357e479a90141222e3",
+                "url": "https://api.github.com/repos/symfony/Debug/zipball/7213c8200d60728c9d4c56d5830aa2d80ae3d25d",
+                "reference": "7213c8200d60728c9d4c56d5830aa2d80ae3d25d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9",
+                "php": ">=5.3.3",
                 "psr/log": "~1.0"
             },
-            "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-            },
             "require-dev": {
                 "symfony/class-loader": "~2.2",
                 "symfony/http-foundation": "~2.1",
-                "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2",
-                "symfony/phpunit-bridge": "~2.7"
+                "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2"
             },
             "suggest": {
                 "symfony/http-foundation": "",
@@ -2364,11 +2393,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
+                "psr-0": {
                     "Symfony\\Component\\Debug\\": ""
                 }
             },
@@ -2378,30 +2407,30 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 }
             ],
             "description": "Symfony Debug Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-07-09 16:07:40"
+            "homepage": "http://symfony.com",
+            "time": "2015-01-05 17:41:06"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/DependencyInjection.git",
-                "reference": "851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6"
+                "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6",
-                "reference": "851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6",
+                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
+                "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
                 "shasum": ""
             },
             "require": {
@@ -2448,41 +2477,41 @@
             ],
             "description": "Symfony DependencyInjection Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-28 14:07:07"
+            "time": "2015-05-29 14:44:44"
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v2.7.3",
+            "version": "v2.1.0",
+            "target-dir": "Symfony/Component/DomCrawler",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/DomCrawler.git",
-                "reference": "9dabece63182e95c42b06967a0d929a5df78bc35"
+                "reference": "4a2af1b8f83341b637e47a66c6b6798730038edc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/9dabece63182e95c42b06967a0d929a5df78bc35",
-                "reference": "9dabece63182e95c42b06967a0d929a5df78bc35",
+                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/4a2af1b8f83341b637e47a66c6b6798730038edc",
+                "reference": "4a2af1b8f83341b637e47a66c6b6798730038edc",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "symfony/css-selector": "~2.3",
-                "symfony/phpunit-bridge": "~2.7"
+                "symfony/css-selector": "2.1.*"
             },
             "suggest": {
-                "symfony/css-selector": ""
+                "symfony/css-selector": "v2.1.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.1-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
+                "psr-0": {
+                    "Symfony\\Component\\DomCrawler": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2492,29 +2521,31 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony DomCrawler Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-07-09 16:07:40"
+            "homepage": "http://symfony.com",
+            "time": "2012-08-28 07:54:42"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/EventDispatcher.git",
-                "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
+                "reference": "687039686d0e923429ba6e958d0baa920cd5d458"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
-                "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
+                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/687039686d0e923429ba6e958d0baa920cd5d458",
+                "reference": "687039686d0e923429ba6e958d0baa920cd5d458",
                 "shasum": ""
             },
             "require": {
@@ -2559,20 +2590,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2015-06-18 19:21:56"
+            "time": "2015-05-02 15:21:08"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v2.7.3",
+            "version": "v2.7.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpFoundation.git",
-                "reference": "863af6898081b34c65d42100c370b9f3c51b70ca"
+                "reference": "88903c0531b90d4ecd90282b18f08c0c77bde0b2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/863af6898081b34c65d42100c370b9f3c51b70ca",
-                "reference": "863af6898081b34c65d42100c370b9f3c51b70ca",
+                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/88903c0531b90d4ecd90282b18f08c0c77bde0b2",
+                "reference": "88903c0531b90d4ecd90282b18f08c0c77bde0b2",
                 "shasum": ""
             },
             "require": {
@@ -2612,27 +2643,27 @@
             ],
             "description": "Symfony HttpFoundation Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-22 10:11:00"
+            "time": "2015-07-09 16:07:40"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpKernel.git",
-                "reference": "405d3e7a59ff7a28ec469441326a0ac79065ea98"
+                "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/405d3e7a59ff7a28ec469441326a0ac79065ea98",
-                "reference": "405d3e7a59ff7a28ec469441326a0ac79065ea98",
+                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
+                "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.9",
                 "psr/log": "~1.0",
                 "symfony/debug": "~2.6,>=2.6.2",
-                "symfony/event-dispatcher": "~2.6,>=2.6.7",
+                "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
                 "symfony/http-foundation": "~2.5,>=2.5.4"
             },
             "conflict": {
@@ -2692,20 +2723,20 @@
             ],
             "description": "Symfony HttpKernel Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-31 13:24:45"
+            "time": "2015-05-30 16:52:28"
         },
         {
             "name": "symfony/process",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "48aeb0e48600321c272955132d7606ab0a49adb3"
+                "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/48aeb0e48600321c272955132d7606ab0a49adb3",
-                "reference": "48aeb0e48600321c272955132d7606ab0a49adb3",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
+                "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
                 "shasum": ""
             },
             "require": {
@@ -2741,7 +2772,7 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-01 11:25:50"
+            "time": "2015-05-15 13:33:16"
         },
         {
             "name": "symfony/psr-http-message-bridge",
@@ -2799,16 +2830,16 @@
         },
         {
             "name": "symfony/routing",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Routing.git",
-                "reference": "ea9134f277162b02e5f80ac058b75a77637b0d26"
+                "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Routing/zipball/ea9134f277162b02e5f80ac058b75a77637b0d26",
-                "reference": "ea9134f277162b02e5f80ac058b75a77637b0d26",
+                "url": "https://api.github.com/repos/symfony/Routing/zipball/6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
+                "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
                 "shasum": ""
             },
             "require": {
@@ -2866,20 +2897,20 @@
                 "uri",
                 "url"
             ],
-            "time": "2015-07-09 16:07:40"
+            "time": "2015-05-19 06:58:17"
         },
         {
             "name": "symfony/serializer",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Serializer.git",
-                "reference": "143d318457ecc298a846506acc8e80dea30d2548"
+                "reference": "634d3adf119396320fba4c14caa01390700e7f3b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Serializer/zipball/143d318457ecc298a846506acc8e80dea30d2548",
-                "reference": "143d318457ecc298a846506acc8e80dea30d2548",
+                "url": "https://api.github.com/repos/symfony/Serializer/zipball/634d3adf119396320fba4c14caa01390700e7f3b",
+                "reference": "634d3adf119396320fba4c14caa01390700e7f3b",
                 "shasum": ""
             },
             "require": {
@@ -2927,20 +2958,20 @@
             ],
             "description": "Symfony Serializer Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-22 19:42:44"
+            "time": "2015-05-29 14:44:44"
         },
         {
             "name": "symfony/translation",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Translation.git",
-                "reference": "c8dc34cc936152c609cdd722af317e4239d10dd6"
+                "reference": "cc1907bbeacfcc703c031b67545400d6e7d1eb79"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Translation/zipball/c8dc34cc936152c609cdd722af317e4239d10dd6",
-                "reference": "c8dc34cc936152c609cdd722af317e4239d10dd6",
+                "url": "https://api.github.com/repos/symfony/Translation/zipball/cc1907bbeacfcc703c031b67545400d6e7d1eb79",
+                "reference": "cc1907bbeacfcc703c031b67545400d6e7d1eb79",
                 "shasum": ""
             },
             "require": {
@@ -2988,20 +3019,20 @@
             ],
             "description": "Symfony Translation Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-09 16:07:40"
+            "time": "2015-05-29 14:44:44"
         },
         {
             "name": "symfony/validator",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Validator.git",
-                "reference": "646df03e635a8a232804274401449ccdf5f03cad"
+                "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Validator/zipball/646df03e635a8a232804274401449ccdf5f03cad",
-                "reference": "646df03e635a8a232804274401449ccdf5f03cad",
+                "url": "https://api.github.com/repos/symfony/Validator/zipball/3a5461a388ff8962790fd5a39e6e2da84ba1e824",
+                "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824",
                 "shasum": ""
             },
             "require": {
@@ -3058,20 +3089,20 @@
             ],
             "description": "Symfony Validator Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-31 06:49:15"
+            "time": "2015-05-29 14:44:44"
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.7.3",
+            "version": "v2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Yaml.git",
-                "reference": "71340e996171474a53f3d29111d046be4ad8a0ff"
+                "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/71340e996171474a53f3d29111d046be4ad8a0ff",
-                "reference": "71340e996171474a53f3d29111d046be4ad8a0ff",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3",
+                "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3",
                 "shasum": ""
             },
             "require": {
@@ -3107,7 +3138,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2015-07-28 14:07:07"
+            "time": "2015-05-02 15:21:08"
         },
         {
             "name": "twig/twig",
@@ -3222,17 +3253,22 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-escaper.git",
-                "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96"
+                "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97",
-                "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96",
+                "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
+            "require-dev": {
+                "fabpot/php-cs-fixer": "1.7.*",
+                "phpunit/phpunit": "~4.0",
+                "satooshi/php-coveralls": "dev-master"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -3242,19 +3278,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Escaper\\": ""
+                    "Zend\\Escaper\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zf2",
+            "homepage": "https://github.com/zendframework/zend-escaper",
             "keywords": [
                 "escaper",
                 "zf2"
             ],
-            "time": "2015-04-01 18:02:07"
+            "time": "2015-03-23 18:29:14"
         },
         {
             "name": "zendframework/zend-feed",
@@ -3262,12 +3298,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-feed.git",
-                "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5"
+                "reference": "0f59e560364f1f1fcb09a96874328ae3ff690db2"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/0f59e560364f1f1fcb09a96874328ae3ff690db2",
-                "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5",
+                "reference": "0f59e560364f1f1fcb09a96874328ae3ff690db2",
                 "shasum": ""
             },
             "require": {
@@ -3276,6 +3312,9 @@
                 "zendframework/zend-stdlib": "self.version"
             },
             "require-dev": {
+                "fabpot/php-cs-fixer": "1.7.*",
+                "phpunit/phpunit": "~4.0",
+                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-cache": "self.version",
                 "zendframework/zend-db": "self.version",
                 "zendframework/zend-http": "self.version",
@@ -3298,7 +3337,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Feed\\": ""
+                    "Zend\\Feed\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3306,12 +3345,12 @@
                 "BSD-3-Clause"
             ],
             "description": "provides functionality for consuming RSS and Atom feeds",
-            "homepage": "https://github.com/zendframework/zf2",
+            "homepage": "https://github.com/zendframework/zend-feed",
             "keywords": [
                 "feed",
                 "zf2"
             ],
-            "time": "2015-04-01 18:09:25"
+            "time": "2015-03-25 20:55:48"
         },
         {
             "name": "zendframework/zend-stdlib",
@@ -3319,18 +3358,21 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-stdlib.git",
-                "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030"
+                "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3"
             },
             "dist": {
                 "type": "zip",
                 "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3",
-                "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030",
+                "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.23"
             },
             "require-dev": {
+                "fabpot/php-cs-fixer": "1.7.*",
+                "phpunit/phpunit": "~4.0",
+                "satooshi/php-coveralls": "dev-master",
                 "zendframework/zend-eventmanager": "self.version",
                 "zendframework/zend-filter": "self.version",
                 "zendframework/zend-serializer": "self.version",
@@ -3351,19 +3393,19 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Zend\\Stdlib\\": ""
+                    "Zend\\Stdlib\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
             ],
-            "homepage": "https://github.com/zendframework/zf2",
+            "homepage": "https://github.com/zendframework/zend-stdlib",
             "keywords": [
                 "stdlib",
                 "zf2"
             ],
-            "time": "2015-04-01 18:09:29"
+            "time": "2015-03-25 20:55:48"
         }
     ],
     "packages-dev": [],
@@ -3374,7 +3416,7 @@
         "behat/mink-goutte-driver": 20
     },
     "prefer-stable": true,
-    "prefer-lowest": false,
+    "prefer-lowest": true,
     "platform": {
         "php": ">=5.5.9"
     },
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 329ff58c626d5fbe663e419131064941de1135ce..6f05be09ada3c0f1a66445313fc87317c4925968 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -20,6 +20,7 @@
 use Drupal\Core\Theme\ThemeSettings;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Render\Element;
+use Drupal\Core\Render\SafeString;
 
 /**
  * @defgroup content_flags Content markers
@@ -1241,7 +1242,8 @@ function template_preprocess_html(&$variables) {
   }
   if (!empty($variables['page']['#title'])) {
     $head_title = array(
-      'title' => trim(strip_tags($variables['page']['#title'])),
+      // Marking the title as safe since it has had the tags stripped.
+      'title' => SafeString::create(trim(strip_tags($variables['page']['#title']))),
       'name' => $site_config->get('name'),
     );
   }
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index da3e02a1f33e19149a062a8f636a1cda5f2bf31a..6cd063f4118ba84bbf06fb14467a61903ec31358 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -81,7 +81,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '8.0.0-dev';
+  const VERSION = '8.0.0-beta15';
 
   /**
    * Core API compatibility.
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BasicStringFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BasicStringFormatter.php
index c03b96d2018253711c8460594a9fceb73c706506..9d2b7306fc3e83d012cf3db4b8406c437e5274cf 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BasicStringFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/BasicStringFormatter.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
 
-use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Component\Utility\Html;
 use Drupal\Core\Field\FormatterBase;
 use Drupal\Core\Field\FieldItemListInterface;
 
@@ -37,7 +37,7 @@ public function viewElements(FieldItemListInterface $items) {
     foreach ($items as $delta => $item) {
       // The text value has no text format assigned to it, so the user input
       // should equal the output, including newlines.
-      $elements[$delta] = array('#markup' => nl2br(SafeMarkup::checkPlain($item->value)));
+      $elements[$delta] = array('#markup' => nl2br(Html::escape($item->value)));
     }
 
     return $elements;
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/LanguageFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/LanguageFormatter.php
index dea2989ad8b5c3641a200fc2fe13f294b7ee3690..e4b41b82b8866a31c05cc608f84fe45797041cb1 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/LanguageFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/LanguageFormatter.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemInterface;
@@ -123,7 +122,9 @@ protected function viewValue(FieldItemInterface $item) {
     // storage by LanguageManager::getLanguages()) or in its native language
     // name. That only depends on formatter settings and no language condition.
     $languages = $this->getSetting('native_language') ? $this->languageManager->getNativeLanguages(LanguageInterface::STATE_ALL) : $this->languageManager->getLanguages(LanguageInterface::STATE_ALL);
-    return $item->language && isset($languages[$item->language->getId()]) ? SafeMarkup::checkPlain($languages[$item->language->getId()]->getName()) : '';
+    return [
+      '#plain_text' => $item->language && isset($languages[$item->language->getId()]) ? $languages[$item->language->getId()]->getName() : ''
+    ];
   }
 
 }
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php
index 6276f9538c3ebadf19a67ebb579c2929c949f5c7..fd5c3bbb5027cc8f9aabc075a101b7bff31aeec2 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
 
-use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Component\Utility\Html;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\RevisionableInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
@@ -128,16 +128,16 @@ public function viewElements(FieldItemListInterface $items) {
     }
 
     foreach ($items as $delta => $item) {
-      $string = $this->viewValue($item);
+      $view_value = $this->viewValue($item);
       if ($url) {
         $elements[$delta] = [
           '#type' => 'link',
-          '#title' => $string,
+          '#title' => $view_value,
           '#url' => $url,
         ];
       }
       else {
-        $elements[$delta] = ['#markup' => $string];
+        $elements[$delta] = is_array($view_value) ? $view_value : ['#markup' => $view_value];
       }
     }
     return $elements;
@@ -149,13 +149,15 @@ public function viewElements(FieldItemListInterface $items) {
    * @param \Drupal\Core\Field\FieldItemInterface $item
    *   One field item.
    *
-   * @return string
-   *   The textual output generated.
+   * @return array
+   *   The textual output generated as a render array.
    */
   protected function viewValue(FieldItemInterface $item) {
     // The text value has no text format assigned to it, so the user input
     // should equal the output, including newlines.
-    return nl2br(SafeMarkup::checkPlain($item->value));
+    return [
+      '#markup' => nl2br(Html::escape($item->value))
+    ];
   }
 
 }
diff --git a/core/lib/Drupal/Core/Field/WidgetBase.php b/core/lib/Drupal/Core/Field/WidgetBase.php
index 0103071cd3113ae4ca648add6ec56b0b1e33a357..575daf925308cb72d29a26cd2b0d92bcacada3e1 100644
--- a/core/lib/Drupal/Core/Field/WidgetBase.php
+++ b/core/lib/Drupal/Core/Field/WidgetBase.php
@@ -10,7 +10,6 @@
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\SortArray;
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element;
 use Symfony\Component\Validator\ConstraintViolationInterface;
@@ -85,7 +84,7 @@ public function form(FieldItemListInterface $items, array &$form, FormStateInter
     if ($this->handlesMultipleValues() || isset($get_delta)) {
       $delta = isset($get_delta) ? $get_delta : 0;
       $element = array(
-        '#title' => SafeMarkup::checkPlain($this->fieldDefinition->getLabel()),
+        '#title' => $this->fieldDefinition->getLabel(),
         '#description' => FieldFilteredString::create(\Drupal::token()->replace($this->fieldDefinition->getDescription())),
       );
       $element = $this->formSingleElement($items, $delta, $element, $form, $form_state);
@@ -164,7 +163,7 @@ protected function formMultipleElements(FieldItemListInterface $items, array &$f
         break;
     }
 
-    $title = SafeMarkup::checkPlain($this->fieldDefinition->getLabel());
+    $title = $this->fieldDefinition->getLabel();
     $description = FieldFilteredString::create(\Drupal::token()->replace($this->fieldDefinition->getDescription()));
 
     $elements = array();
@@ -179,7 +178,7 @@ protected function formMultipleElements(FieldItemListInterface $items, array &$f
       // table.
       if ($is_multiple) {
         $element = [
-          '#title' => $title . ' ' . $this->t('(value @number)', ['@number' => $delta + 1]),
+          '#title' => $this->t('@title (value @number)', ['@title' => $title, '@number' => $delta + 1]),
           '#title_display' => 'invisible',
           '#description' => '',
         ];
diff --git a/core/modules/block/src/BlockViewBuilder.php b/core/modules/block/src/BlockViewBuilder.php
index 6e99faae00de324a85670de6065220cd6c56a0ea..9a582352343ef6f179adc3229fcd3d395b2e2857 100644
--- a/core/modules/block/src/BlockViewBuilder.php
+++ b/core/modules/block/src/BlockViewBuilder.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\block;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Block\MainContentBlockPluginInterface;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheableMetadata;
@@ -164,8 +163,6 @@ protected static function buildPreRenderableBlock($entity, ModuleHandlerInterfac
       '#block' => $entity,
     ];
 
-    $build['#configuration']['label'] = SafeMarkup::checkPlain($configuration['label']);
-
     // If an alter hook wants to modify the block contents, it can append
     // another #pre_render hook.
     $module_handler->alter(['block_view', "block_view_$base_id"], $build, $plugin);
diff --git a/core/modules/block/src/Controller/BlockLibraryController.php b/core/modules/block/src/Controller/BlockLibraryController.php
index 2a0148fda0f10a47473369a8de9df17c822faae2..972dd73155d7f07edde83592116ca811605d64ef 100644
--- a/core/modules/block/src/Controller/BlockLibraryController.php
+++ b/core/modules/block/src/Controller/BlockLibraryController.php
@@ -8,7 +8,6 @@
 namespace Drupal\block\Controller;
 
 use Drupal\Component\Serialization\Json;
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Block\BlockManagerInterface;
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
@@ -109,7 +108,7 @@ public function listBlocks(Request $request, $theme) {
         '#prefix' => '<div class="block-filter-text-source">',
         '#suffix' => '</div>',
       ];
-      $row['category']['data'] = SafeMarkup::checkPlain($plugin_definition['category']);
+      $row['category']['data'] = $plugin_definition['category'];
       $links['add'] = [
         'title' => $this->t('Place block'),
         'url' => Url::fromRoute('block.admin_add', ['plugin_id' => $plugin_id, 'theme' => $theme]),
diff --git a/core/modules/color/color.module b/core/modules/color/color.module
index fa9499b1011202d84a4d1eaf1bbde10f903e63b1..46ddce5f18edd31d9db0b4ee254536f5852c8e9c 100644
--- a/core/modules/color/color.module
+++ b/core/modules/color/color.module
@@ -8,7 +8,6 @@
 use Drupal\Core\Asset\CssOptimizer;
 use Drupal\Component\Utility\Bytes;
 use Drupal\Component\Utility\Environment;
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
@@ -251,7 +250,7 @@ function color_scheme_form($complete_form, FormStateInterface $form_state, $them
     if (isset($names[$name])) {
       $form['palette'][$name] = array(
         '#type' => 'textfield',
-        '#title' => SafeMarkup::checkPlain($names[$name]),
+        '#title' => $names[$name],
         '#value_callback' => 'color_palette_color_value',
         '#default_value' => $value,
         '#size' => 8,
diff --git a/core/modules/comment/src/CommentTypeListBuilder.php b/core/modules/comment/src/CommentTypeListBuilder.php
index 4f998718e9d580e9cda95a9205366ebfa85bc3a9..f8a34510266d74da01c54b61924c63371a691376 100644
--- a/core/modules/comment/src/CommentTypeListBuilder.php
+++ b/core/modules/comment/src/CommentTypeListBuilder.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\comment;
 
-use Drupal\Component\Utility\SafeMarkup;
-use Drupal\Component\Utility\Xss;
 use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
 use Drupal\Core\Entity\EntityInterface;
 
@@ -45,7 +43,7 @@ public function buildHeader() {
    * {@inheritdoc}
    */
   public function buildRow(EntityInterface $entity) {
-    $row['type'] = SafeMarkup::checkPlain($entity->label());
+    $row['type'] = $entity->label();
     $row['description']['data'] = ['#markup' => $entity->getDescription()];
     return $row + parent::buildRow($entity);
   }
diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationBlockListBuilder.php b/core/modules/config_translation/src/Controller/ConfigTranslationBlockListBuilder.php
index 74e276a9d591e823eb5d4878c50312412c43dfb9..c6e8a491639f3f3578468acd31b787abeb9c357b 100644
--- a/core/modules/config_translation/src/Controller/ConfigTranslationBlockListBuilder.php
+++ b/core/modules/config_translation/src/Controller/ConfigTranslationBlockListBuilder.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\config_translation\Controller;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
@@ -70,12 +69,12 @@ public function buildRow(EntityInterface $entity) {
     );
 
     $row['theme'] = array(
-      'data' => SafeMarkup::checkPlain($this->themes[$theme]->info['name']),
+      'data' => $this->themes[$theme]->info['name'],
       'class' => 'table-filter-text-source',
     );
 
     $row['category'] = array(
-      'data' => SafeMarkup::checkPlain($plugin_definition['category']),
+      'data' => $plugin_definition['category'],
       'class' => 'table-filter-text-source',
     );
 
diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php b/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php
index 1b2a08b6b036c3c3d9c25c77ee21a301cc7bde42..282d3eb4915d1061edb75007932248e69b6a7a53 100644
--- a/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php
+++ b/core/modules/config_translation/src/Controller/ConfigTranslationFieldListBuilder.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\config_translation\Controller;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
@@ -123,7 +122,7 @@ public function buildRow(EntityInterface $entity) {
     if ($this->displayBundle()) {
       $bundle = $entity->get('bundle');
       $row['bundle'] = array(
-        'data' => SafeMarkup::checkPlain($this->baseEntityBundles[$bundle]['label']),
+        'data' => $this->baseEntityBundles[$bundle]['label'],
         'class' => 'table-filter-text-source',
       );
     }
diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationMapperList.php b/core/modules/config_translation/src/Controller/ConfigTranslationMapperList.php
index e32714b975cd0a697ef66a05519d2337d96e079a..5c954526323d8713926d4562469b67abc5217b6e 100644
--- a/core/modules/config_translation/src/Controller/ConfigTranslationMapperList.php
+++ b/core/modules/config_translation/src/Controller/ConfigTranslationMapperList.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\config_translation\Controller;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\config_translation\ConfigMapperInterface;
 use Drupal\Core\Controller\ControllerBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -94,7 +93,7 @@ public function render() {
    *   A render array structure of fields for this mapper.
    */
   public function buildRow(ConfigMapperInterface $mapper) {
-    $row['label'] = SafeMarkup::checkPlain($mapper->getTypeLabel());
+    $row['label'] = $mapper->getTypeLabel();
     $row['operations']['data'] = $this->buildOperations($mapper);
     return $row;
   }
diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php
index 221b7d6680ea910a6106c7eed67a3a7c6dd1084e..eb5cf75c5aaa7f2c333c13a5da77bf7c538fa51e 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\config_translation\Tests;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\simpletest\WebTestBase;
 
@@ -103,7 +102,7 @@ public function testMapperListPage() {
       $base_url = 'admin/structure/config_test/manage/' . $test_entity->id();
       $this->drupalGet('admin/config/regional/config-translation/config_test');
       $this->assertLinkByHref($base_url . '/translate');
-      $this->assertText(SafeMarkup::checkPlain($test_entity->label()));
+      $this->assertEscaped($test_entity->label());
 
       // Make sure there is only a single 'Translate' operation for each
       // dropbutton.
diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
index 41840ad96b9669e1e816a570e7dbbb5b7216f630..e4a4e3fde2f944215d03cf9d9b3a37d34604ce4d 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
@@ -753,9 +753,9 @@ public function testFieldConfigTranslation() {
     $this->clickLink('Add');
 
     $this->assertText('Translatable field setting');
-    $this->assertRaw(SafeMarkup::checkPlain($translatable_field_setting));
+    $this->assertEscaped($translatable_field_setting);
     $this->assertText('Translatable storage setting');
-    $this->assertRaw(SafeMarkup::checkPlain($translatable_storage_setting));
+    $this->assertEscaped($translatable_storage_setting);
   }
 
   /**
diff --git a/core/modules/contact/src/Controller/ContactController.php b/core/modules/contact/src/Controller/ContactController.php
index 7233bb8747931871085369398defc763b79f8e4b..1abd33c58f362bfd7dd9b0c23b3ccccb1fdc6406 100644
--- a/core/modules/contact/src/Controller/ContactController.php
+++ b/core/modules/contact/src/Controller/ContactController.php
@@ -11,7 +11,6 @@
 use Drupal\contact\ContactFormInterface;
 use Drupal\Core\Render\RendererInterface;
 use Drupal\user\UserInterface;
-use Drupal\Component\Utility\SafeMarkup;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
@@ -87,7 +86,7 @@ public function contactSitePage(ContactFormInterface $contact_form = NULL) {
       ));
 
     $form = $this->entityFormBuilder()->getForm($message);
-    $form['#title'] = SafeMarkup::checkPlain($contact_form->label());
+    $form['#title'] = $contact_form->label();
     $form['#cache']['contexts'][] = 'user.permissions';
     $this->renderer->addCacheableDependency($form, $config);
     return $form;
diff --git a/core/modules/dblog/src/Controller/DbLogController.php b/core/modules/dblog/src/Controller/DbLogController.php
index 08d826bc0eab1c9d99d4490bc03d18a51954997b..eff66268aebc8b73bb083d7963aa20222fbcffb4 100644
--- a/core/modules/dblog/src/Controller/DbLogController.php
+++ b/core/modules/dblog/src/Controller/DbLogController.php
@@ -8,9 +8,7 @@
 namespace Drupal\dblog\Controller;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\Unicode;
-use Drupal\Component\Utility\Xss;
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Datetime\DateFormatter;
@@ -283,7 +281,7 @@ public function eventDetails($event_id) {
         ),
         array(
           array('data' => $this->t('Hostname'), 'header' => TRUE),
-          SafeMarkup::checkPlain($dblog->hostname),
+          $dblog->hostname,
         ),
         array(
           array('data' => $this->t('Operations'), 'header' => TRUE),
diff --git a/core/modules/field/src/Tests/String/UuidFormatterTest.php b/core/modules/field/src/Tests/String/UuidFormatterTest.php
index 2eaf7e9424664bf026092a32a7ddd1a0aaca7087..4d849cda8d168e9993dc39bd1bbad8ced22fc08e 100644
--- a/core/modules/field/src/Tests/String/UuidFormatterTest.php
+++ b/core/modules/field/src/Tests/String/UuidFormatterTest.php
@@ -51,7 +51,7 @@ public function testUuidStringFormatter() {
 
     $render_array = $uuid_field->view(['settings' => ['link_to_entity' => TRUE]]);
     $this->assertIdentical($render_array[0]['#type'], 'link');
-    $this->assertIdentical($render_array[0]['#title'], $entity->uuid());
+    $this->assertIdentical($render_array[0]['#title']['#markup'], $entity->uuid());
     $this->assertIdentical($render_array[0]['#url']->toString(), $entity->url());
   }
 
diff --git a/core/modules/field_ui/src/FieldConfigListBuilder.php b/core/modules/field_ui/src/FieldConfigListBuilder.php
index d3feac1257f0ab5881c52e123b1433ab46a58073..1dd2c7cc86c5ee46a0de1ce5d4adf11375ee5a26 100644
--- a/core/modules/field_ui/src/FieldConfigListBuilder.php
+++ b/core/modules/field_ui/src/FieldConfigListBuilder.php
@@ -8,7 +8,6 @@
 namespace Drupal\field_ui;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
@@ -131,7 +130,7 @@ public function buildRow(EntityInterface $field_config) {
     $row = array(
       'id' => Html::getClass($field_config->getName()),
       'data' => array(
-        'label' => SafeMarkup::checkPlain($field_config->getLabel()),
+        'label' => $field_config->getLabel(),
         'field_name' => $field_config->getName(),
         'field_type' => array(
           'data' => array(
diff --git a/core/modules/file/src/Plugin/Field/FieldFormatter/BaseFieldFileFormatterBase.php b/core/modules/file/src/Plugin/Field/FieldFormatter/BaseFieldFileFormatterBase.php
index 865471200a9ee64d8390e87d17ed931af51de015..31d5e0571f4a4180b5b84144c4fbcb7078c13959 100644
--- a/core/modules/file/src/Plugin/Field/FieldFormatter/BaseFieldFileFormatterBase.php
+++ b/core/modules/file/src/Plugin/Field/FieldFormatter/BaseFieldFileFormatterBase.php
@@ -56,17 +56,17 @@ public function viewElements(FieldItemListInterface $items) {
     }
 
     foreach ($items as $delta => $item) {
-      $string = $this->viewValue($item);
+      $view_value = $this->viewValue($item);
 
       if ($url) {
         $elements[$delta] = [
           '#type' => 'link',
-          '#title' => $string,
+          '#title' => $view_value,
           '#url' => Url::fromUri($url),
         ];
       }
       else {
-        $elements[$delta] = is_array($string) ? $string : ['#markup' => $string];
+        $elements[$delta] = is_array($view_value) ? $view_value : ['#markup' => $view_value];
       }
     }
 
diff --git a/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php b/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
index fb69d9cd9240eadb66b9be5900a79ba5cc429704..acba472018a67cc5b60dc496d90230c2f62cba48 100644
--- a/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
+++ b/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\file\Plugin\Field\FieldWidget;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldFilteredString;
@@ -119,7 +118,7 @@ protected function formMultipleElements(FieldItemListInterface $items, array &$f
         break;
     }
 
-    $title = SafeMarkup::checkPlain($this->fieldDefinition->getLabel());
+    $title = $this->fieldDefinition->getLabel();
     $description = FieldFilteredString::create($this->fieldDefinition->getDescription());
 
     $elements = array();
diff --git a/core/modules/filter/src/FilterFormatListBuilder.php b/core/modules/filter/src/FilterFormatListBuilder.php
index 5ae317e4f0fca958d070277b2e48712bdeaeba9c..685112a761974c2f7766960f287c167deb283bd8 100644
--- a/core/modules/filter/src/FilterFormatListBuilder.php
+++ b/core/modules/filter/src/FilterFormatListBuilder.php
@@ -98,10 +98,10 @@ public function buildRow(EntityInterface $entity) {
     if ($entity->isFallbackFormat()) {
       $fallback_choice = $this->configFactory->get('filter.settings')->get('always_show_fallback_choice');
       if ($fallback_choice) {
-        $roles_markup = $this->t('All roles may use this format');
+        $row['roles']['#markup'] = $this->t('All roles may use this format');
       }
       else {
-        $roles_markup = $this->t('This format is shown when no other formats are available');
+        $row['roles']['#markup'] = $this->t('This format is shown when no other formats are available');
       }
       // Emphasize the fallback role text since it is important to understand
       // how it works which configuring filter formats. Additionally, it is not
@@ -110,12 +110,14 @@ public function buildRow(EntityInterface $entity) {
       $row['roles']['#suffix'] = '</em>';
     }
     else {
-      $roles = array_map('\Drupal\Component\Utility\SafeMarkup::checkPlain', filter_get_roles_by_format($entity));
-      $roles_markup = $roles ? implode(', ', $roles) : $this->t('No roles may use this format');
+      $row['roles'] = [
+        '#theme' => 'item_list',
+        '#items' => filter_get_roles_by_format($entity),
+        '#empty' => $this->t('No roles may use this format'),
+        '#context' => ['list_style' => 'comma-list'],
+      ];
     }
 
-    $row['roles']['#markup'] = $roles_markup;
-
     return $row + parent::buildRow($entity);
   }
 
diff --git a/core/modules/filter/src/Plugin/Filter/FilterHtml.php b/core/modules/filter/src/Plugin/Filter/FilterHtml.php
index 63e3f5706ae516a1c2c0ca46871c2971b81512d7..4708cc6f1c386d7986161a3745959e6fdf37c384 100644
--- a/core/modules/filter/src/Plugin/Filter/FilterHtml.php
+++ b/core/modules/filter/src/Plugin/Filter/FilterHtml.php
@@ -149,7 +149,7 @@ public function tips($long = FALSE) {
           array('data' =>
             array(
               '#prefix' => '<code>',
-              '#markup' => Html::escape($tips[$tag][1]),
+              '#plain_text' => $tips[$tag][1],
               '#suffix' => '</code>'
             ),
             'class' => array('type')),
@@ -193,7 +193,7 @@ public function tips($long = FALSE) {
         array(
           'data' => array(
             '#prefix' => '<code>',
-            '#markup' => Html::escape($entity[1]),
+            '#plain_text' => $entity[1],
             '#suffix' => '</code>',
           ),
           'class' => array('type'),
diff --git a/core/modules/help/src/Controller/HelpController.php b/core/modules/help/src/Controller/HelpController.php
index 802f9d9c1a52108692eea42375772e5e3515fa84..4ebd4c8ef3b857018d4611468af3c003b690a168 100644
--- a/core/modules/help/src/Controller/HelpController.php
+++ b/core/modules/help/src/Controller/HelpController.php
@@ -12,7 +12,6 @@
 use Drupal\Core\Url;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-use Drupal\Component\Utility\SafeMarkup;
 
 /**
  * Controller routines for help routes.
@@ -115,7 +114,7 @@ public function helpPage($name) {
     $build = array();
     if ($this->moduleHandler()->implementsHook($name, 'help')) {
       $module_name =  $this->moduleHandler()->getName($name);
-      $build['#title'] = SafeMarkup::checkPlain($module_name);
+      $build['#title'] = $module_name;
 
       $temp = $this->moduleHandler()->invoke($name, 'help', array("help.page.$name", $this->routeMatch));
       if (empty($temp)) {
diff --git a/core/modules/language/src/Form/NegotiationConfigureForm.php b/core/modules/language/src/Form/NegotiationConfigureForm.php
index 938564e11a885166e02c484a676672fbcd14cf5f..7f230451577ad7863053f592d3625fec721aa549 100644
--- a/core/modules/language/src/Form/NegotiationConfigureForm.php
+++ b/core/modules/language/src/Form/NegotiationConfigureForm.php
@@ -8,7 +8,6 @@
 namespace Drupal\language\Form;
 
 use Drupal\Core\Block\BlockManagerInterface;
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Component\Utility\Xss;
 use Drupal\Core\Config\ConfigFactoryInterface;
@@ -277,22 +276,22 @@ protected function configureFormTable(array &$form, $type)  {
 
       if (isset($types[$type])) {
         $table_form['#language_negotiation_info'][$method_id] = $method;
-        $method_name = SafeMarkup::checkPlain($method['name']);
+        $method_name = $method['name'];
 
         $table_form['weight'][$method_id] = array(
           '#type' => 'weight',
-          '#title' => $this->t('Weight for !title language detection method', array('!title' => Unicode::strtolower($method_name))),
+          '#title' => $this->t('Weight for @title language detection method', array('@title' => Unicode::strtolower($method_name))),
           '#title_display' => 'invisible',
           '#default_value' => $weight,
           '#attributes' => array('class' => array("language-method-weight-$type")),
           '#delta' => 20,
         );
 
-        $table_form['title'][$method_id] = array('#markup' => $method_name);
+        $table_form['title'][$method_id] = array('#plain_text' => $method_name);
 
         $table_form['enabled'][$method_id] = array(
           '#type' => 'checkbox',
-          '#title' => $this->t('Enable !title language detection method', array('!title' => Unicode::strtolower($method_name))),
+          '#title' => $this->t('Enable @title language detection method', array('@title' => Unicode::strtolower($method_name))),
           '#title_display' => 'invisible',
           '#default_value' => $enabled,
         );
diff --git a/core/modules/locale/src/Form/TranslateEditForm.php b/core/modules/locale/src/Form/TranslateEditForm.php
index e9c5359d61d1ccec6035ffd758946d8bd4d79fff..dbd450a12e9a4421b5e95e92eb172ecec55e4822 100644
--- a/core/modules/locale/src/Form/TranslateEditForm.php
+++ b/core/modules/locale/src/Form/TranslateEditForm.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\locale\Form;
 
-use Drupal\Component\Utility\Html;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element;
 use Drupal\locale\SourceString;
@@ -73,7 +72,9 @@ public function buildForm(array $form, FormStateInterface $form_state) {
             '#type' => 'item',
             '#title' => $this->t('Source string (@language)', array('@language' => $this->t('Built-in English'))),
             '#title_display' => 'invisible',
-            '#markup' => '<span lang="en">' . Html::escape($source_array[0]) . '</span>',
+            '#plain_text' => $source_array[0],
+            '#preffix' => '<span lang="en">',
+            '#suffix' => '</span>',
           );
         }
         else {
@@ -82,13 +83,16 @@ public function buildForm(array $form, FormStateInterface $form_state) {
           $original_singular = [
             '#type' => 'item',
             '#title' => $this->t('Singular form'),
-            '#markup' => '<span lang="en">' . Html::escape($source_array[0]) . '</span>',
-            '#prefix' => '<span class="visually-hidden">' . $this->t('Source string (@language)', array('@language' => $this->t('Built-in English'))) . '</span>',
+            '#plain_text' => $source_array[0],
+            '#prefix' => '<span class="visually-hidden">' . $this->t('Source string (@language)', array('@language' => $this->t('Built-in English'))) . '</span><span lang="en">',
+            '#suffix' => '</span>',
           ];
           $original_plural = [
             '#type' => 'item',
             '#title' => $this->t('Plural form'),
-            '#markup' => '<span lang="en">' . Html::escape($source_array[1]) . '</span>',
+            '#plain_text' => $source_array[1],
+            '#preffix' => '<span lang="en">',
+            '#suffix' => '</span>',
           ];
           $form['strings'][$string->lid]['original'] = [
             $original_singular,
diff --git a/core/modules/locale/src/Form/TranslationStatusForm.php b/core/modules/locale/src/Form/TranslationStatusForm.php
index d2571399a74009715b78b5d4c9465374ec2f0d8b..f71ec525f33c780a8d2dc314a9d0573c17ab8325 100644
--- a/core/modules/locale/src/Form/TranslationStatusForm.php
+++ b/core/modules/locale/src/Form/TranslationStatusForm.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\locale\Form;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -82,7 +81,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
       // Build data options for the select table.
       foreach ($updates as $langcode => $update) {
-        $title = SafeMarkup::checkPlain($languages[$langcode]->getName());
+        $title = $languages[$langcode]->getName();
         $locale_translation_update_info = array('#theme' => 'locale_translation_update_info');
         foreach (array('updates', 'not_found') as $update_status) {
           if (isset($update[$update_status])) {
@@ -94,7 +93,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
             'class' => array('label'),
             'data' => array(
               '#title' => $title,
-              '#markup' => $title,
+              '#plain_text' => $title,
             ),
           ),
           'status' => array(
diff --git a/core/modules/node/src/NodeListBuilder.php b/core/modules/node/src/NodeListBuilder.php
index 7acbfc9296f6b7a82726ef0d8d7b86449f78369e..26f28763aebab56dc87ae1545217a09e5eb01ab1 100644
--- a/core/modules/node/src/NodeListBuilder.php
+++ b/core/modules/node/src/NodeListBuilder.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\node;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Datetime\DateFormatter;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityListBuilder;
@@ -119,7 +118,7 @@ public function buildRow(EntityInterface $entity) {
       '#suffix' => ' ' . drupal_render($mark),
       '#url' => $uri,
     );
-    $row['type'] = SafeMarkup::checkPlain(node_get_type_label($entity));
+    $row['type'] = node_get_type_label($entity);
     $row['author']['data'] = array(
       '#theme' => 'username',
       '#account' => $entity->getOwner(),
diff --git a/core/modules/node/src/NodeTypeForm.php b/core/modules/node/src/NodeTypeForm.php
index ff757f98b37921cb54fd5a1fce081a4349dd2040..24b47b3545e1d4a8c98a546aa0a02135e8dbe237 100644
--- a/core/modules/node/src/NodeTypeForm.php
+++ b/core/modules/node/src/NodeTypeForm.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Entity\EntityForm;
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
@@ -55,7 +54,7 @@ public function form(array $form, FormStateInterface $form_state) {
 
     $type = $this->entity;
     if ($this->operation == 'add') {
-      $form['#title'] = SafeMarkup::checkPlain($this->t('Add content type'));
+      $form['#title'] = $this->t('Add content type');
       $fields = $this->entityManager->getBaseFieldDefinitions('node');
       // Create a node with a fake bundle using the type's UUID so that we can
       // get the default values for workflow settings.
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index bab5cc953ec4d39f6fad8f4df14dc5fe9d73f9d7..ce5ddb66aefc3d996f5b35d8bb2632db768d7a2a 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\node\Plugin\Search;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Config\Config;
 use Drupal\Core\Database\Connection;
@@ -346,7 +345,7 @@ protected function prepareResults(StatementInterface $found) {
 
       $result = array(
         'link' => $node->url('canonical', array('absolute' => TRUE, 'language' => $language)),
-        'type' => SafeMarkup::checkPlain($type->label()),
+        'type' => $type->label(),
         'title' => $node->label(),
         'node' => $node,
         'extra' => $extra,
@@ -446,9 +445,15 @@ protected function indexNode(NodeInterface $node) {
       $build = $node_render->view($node, 'search_index', $language->getId());
 
       unset($build['#theme']);
-      $rendered = $this->renderer->renderPlain($build);
 
-      $text = '<h1>' . SafeMarkup::checkPlain($node->label($language->getId())) . '</h1>' . $rendered;
+      // Add the title to text so it is searchable.
+      $build['search_title'] = [
+        '#prefix' => '<h1>',
+        '#plain_text' => $node->label($language->getId()),
+        '#suffix' => '</h1>',
+        '#weight' => -1000
+      ];
+      $text = $this->renderer->renderPlain($build);
 
       // Fetch extra data normally not visible.
       $extra = $this->moduleHandler->invokeAll('node_update_index', array($node, $language->getId()));
diff --git a/core/modules/node/src/Tests/NodeTitleTest.php b/core/modules/node/src/Tests/NodeTitleTest.php
index ddf1fc62021c188510124266839c7438badefea4..40460a6a58a1ecadc68c67d83c88cae254626256 100644
--- a/core/modules/node/src/Tests/NodeTitleTest.php
+++ b/core/modules/node/src/Tests/NodeTitleTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\node\Tests;
 
 use Drupal\comment\Tests\CommentTestTrait;
+use Drupal\Component\Utility\Html;
 
 /**
  * Tests node title.
@@ -85,5 +86,22 @@ function testNodeTitle() {
     // Test that 0 appears in the template <h1>.
     $xpath = '//h1';
     $this->assertEqual(current($this->xpath($xpath)), 0, 'Node title is displayed as 0.', 'Node');
+
+    // Test edge case where node title contains special characters.
+    $edge_case_title = 'article\'s "title".';
+    $settings = array(
+      'title' => $edge_case_title,
+    );
+    $node = $this->drupalCreateNode($settings);
+    // Test that the title appears as <title>. The title will be escaped on the
+    // the page.
+    $edge_case_title_escaped = Html::escape($edge_case_title);
+    $this->drupalGet('node/' . $node->id());
+    $this->assertTitle($edge_case_title_escaped . ' | Drupal', 'Page title is equal to article\'s "title".', 'Node');
+
+    // Test that the title appears as <title> when reloading the node page.
+    $this->drupalGet('node/' . $node->id());
+    $this->assertTitle($edge_case_title_escaped . ' | Drupal', 'Page title is equal to article\'s "title".', 'Node');
+
   }
 }
diff --git a/core/modules/node/src/Tests/NodeTitleXSSTest.php b/core/modules/node/src/Tests/NodeTitleXSSTest.php
index f0e80eaf4f175282f3b056d7a4a55e67b9e273e5..70e4498e2f027577d7431c856a6ced45bdaf22ad 100644
--- a/core/modules/node/src/Tests/NodeTitleXSSTest.php
+++ b/core/modules/node/src/Tests/NodeTitleXSSTest.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\node\Tests;
 
+use Drupal\Component\Utility\Html;
+
 /**
  * Create a node with dangerous tags in its title and test that they are
  * escaped.
@@ -34,8 +36,8 @@ function testNodeTitleXSS() {
     $node = $this->drupalCreateNode($settings);
 
     $this->drupalGet('node/' . $node->id());
-    // assertTitle() decodes HTML-entities inside the <title> element.
-    $this->assertTitle($title . ' | Drupal', 'Title is displayed when viewing a node.');
+    // Titles should be escaped.
+    $this->assertTitle(Html::escape($title) . ' | Drupal', 'Title is displayed when viewing a node.');
     $this->assertNoRaw($xss, 'Harmful tags are escaped when viewing a node.');
 
     $this->drupalGet('node/' . $node->id() . '/edit');
diff --git a/core/modules/path/src/Form/EditForm.php b/core/modules/path/src/Form/EditForm.php
index fc85a42e095a099536915de7e3b8a017432cc14f..a1f4a771186791e8d37a479c0a8d4fdb223ed8fb 100644
--- a/core/modules/path/src/Form/EditForm.php
+++ b/core/modules/path/src/Form/EditForm.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\path\Form;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 
@@ -36,7 +35,7 @@ protected function buildPath($pid) {
   public function buildForm(array $form, FormStateInterface $form_state, $pid = NULL) {
     $form = parent::buildForm($form, $form_state, $pid);
 
-    $form['#title'] = SafeMarkup::checkPlain($this->path['alias']);
+    $form['#title'] = $this->path['alias'];
     $form['pid'] = array(
       '#type' => 'hidden',
       '#value' => $this->path['pid'],
diff --git a/core/modules/simpletest/src/AssertContentTrait.php b/core/modules/simpletest/src/AssertContentTrait.php
index c6019434fdb5445e7d45832eed296e07ddaa8103..eaf4b4195d100fbb819a5f31ba263f20c73d00f6 100644
--- a/core/modules/simpletest/src/AssertContentTrait.php
+++ b/core/modules/simpletest/src/AssertContentTrait.php
@@ -775,14 +775,19 @@ protected function assertTextPattern($pattern, $message = NULL, $group = 'Other'
    *   TRUE on pass, FALSE on fail.
    */
   protected function assertTitle($title, $message = '', $group = 'Other') {
-    $actual = (string) current($this->xpath('//title'));
-    if (!$message) {
-      $message = SafeMarkup::format('Page title @actual is equal to @expected.', array(
-        '@actual' => var_export($actual, TRUE),
-        '@expected' => var_export($title, TRUE),
-      ));
+    // Don't use xpath as it messes with HTML escaping.
+    preg_match('@<title>(.*)</title>@', $this->getRawContent(), $matches);
+    if (isset($matches[1])) {
+      $actual = $matches[1];
+      if (!$message) {
+        $message = SafeMarkup::format('Page title @actual is equal to @expected.', array(
+          '@actual' => var_export($actual, TRUE),
+          '@expected' => var_export($title, TRUE),
+        ));
+      }
+      return $this->assertEqual($actual, $title, $message, $group);
     }
-    return $this->assertEqual($actual, $title, $message, $group);
+    return $this->fail('No title element found on the page.');
   }
 
   /**
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index 289928f4d0fcfe15acf9cf1a7cfd37de58d1fb89..0a52d2f8c2a0993598e18b63bfdea2d9bc6747a4 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\system\Form;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\PreExistingConfigException;
 use Drupal\Core\Config\UnmetDependenciesException;
@@ -169,7 +168,7 @@ public function getFormId() {
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
     require_once DRUPAL_ROOT . '/core/includes/install.inc';
-    $distribution = SafeMarkup::checkPlain(drupal_install_profile_distribution_name());
+    $distribution = drupal_install_profile_distribution_name();
 
     // Include system.admin.inc so we can use the sort callbacks.
     $this->moduleHandler->loadInclude('system', 'inc', 'system.admin');
diff --git a/core/modules/system/src/Tests/System/PageTitleTest.php b/core/modules/system/src/Tests/System/PageTitleTest.php
index 369b55439f85645b1780416455810843ac50a5b3..56fa556b4876965661207302cc208fdf15224964 100644
--- a/core/modules/system/src/Tests/System/PageTitleTest.php
+++ b/core/modules/system/src/Tests/System/PageTitleTest.php
@@ -147,15 +147,6 @@ public function testRoutingTitle() {
     $this->drupalGet('test-page-cached-controller');
     $this->assertTitle('Cached title | Drupal');
     $this->assertRaw(Html::escape('<span>Cached title</span>') . '</h1>');
-
-    // Ensure that titles are cacheable and are escaped normally if the
-    // controller escapes them use Html::escape().
-    $this->drupalGet('test-page-cached-controller-safe');
-    $this->assertTitle('<span>Cached title</span> | Drupal');
-    $this->assertRaw(Html::escape('<span>Cached title</span>') . '</h1>');
-    $this->drupalGet('test-page-cached-controller-safe');
-    $this->assertTitle('<span>Cached title</span> | Drupal');
-    $this->assertRaw(Html::escape('<span>Cached title</span>') . '</h1>');
   }
 
 }
diff --git a/core/modules/system/tests/modules/database_test/src/Form/DatabaseTestForm.php b/core/modules/system/tests/modules/database_test/src/Form/DatabaseTestForm.php
index 342151e2295301c9eb93f68cd5f403adffb94bf6..73f39b1fa5d64aa631f86bb63db5569800339d1f 100644
--- a/core/modules/system/tests/modules/database_test/src/Form/DatabaseTestForm.php
+++ b/core/modules/system/tests/modules/database_test/src/Form/DatabaseTestForm.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\database_test\Form;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\user\Entity\User;
@@ -56,8 +55,8 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
     foreach (User::loadMultiple($uids) as $account) {
       $options[$account->id()] = array(
-        'title' => array('data' => array('#title' => SafeMarkup::checkPlain($account->getUsername()))),
-        'username' => SafeMarkup::checkPlain($account->getUsername()),
+        'title' => array('data' => array('#title' => $account->getUsername())),
+        'username' => $account->getUsername(),
         'status' =>  $account->isActive() ? t('active') : t('blocked'),
       );
     }
diff --git a/core/modules/system/tests/modules/form_test/src/FormTestArgumentsObject.php b/core/modules/system/tests/modules/form_test/src/FormTestArgumentsObject.php
index a7fa82ce2a016207dde7feec9811f4a004380358..9c347be09e45f44009cedef1c60b95e980951607 100644
--- a/core/modules/system/tests/modules/form_test/src/FormTestArgumentsObject.php
+++ b/core/modules/system/tests/modules/form_test/src/FormTestArgumentsObject.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\form_test;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 
@@ -38,7 +37,7 @@ public function buildForm(array $form, FormStateInterface $form_state, $arg = NU
 
     $form['bananas'] = array(
       '#type' => 'textfield',
-      '#default_value' => SafeMarkup::checkPlain($arg),
+      '#default_value' => $arg,
       '#title' => $this->t('Bananas'),
     );
 
diff --git a/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php b/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
index b0d4136b3d228c2c62a25b83e3422a7dc03ebe52..934e6a2be00b8166e499298d9a0126099ff659b8 100644
--- a/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
+++ b/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\test_page_test\Controller;
 
-use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Component\Utility\Html;
 
 /**
  * Defines a test controller for page titles.
@@ -54,19 +54,13 @@ public function dynamicTitle() {
   /**
    * Defines a controller with a cached render array.
    *
-   * @param bool $mark_safe
-   *   Whether or not to mark the title as safe use SafeMarkup::checkPlain.
-   *
    * @return array
    *   A render array
    */
-  public function controllerWithCache($mark_safe = FALSE) {
+  public function controllerWithCache() {
     $build = [];
     $build['#title'] = '<span>Cached title</span>';
-    if ($mark_safe) {
-      $build['#title'] = SafeMarkup::checkPlain($build['#title']);
-    }
-    $build['#cache']['keys'] = ['test_controller', 'with_title', $mark_safe];
+    $build['#cache']['keys'] = ['test_controller', 'with_title'];
 
     return $build;
   }
diff --git a/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml b/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
index 5330be824b36512670eb615f8c4f0411c3399661..240842349af3f3c7673f83892af455e0c2b17fbd 100644
--- a/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
+++ b/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
@@ -28,14 +28,6 @@ test_page_test.cached_controller:
   requirements:
     _access: 'TRUE'
 
-test_page_test.cached_controller.safe:
-  path: '/test-page-cached-controller-safe'
-  defaults:
-    _controller: '\Drupal\test_page_test\Controller\Test::controllerWithCache'
-    mark_safe: true
-  requirements:
-    _access: 'TRUE'
-
 test_page_test.dynamic_title:
   path: '/test-page-dynamic-title'
   defaults:
diff --git a/core/modules/tracker/tracker.pages.inc b/core/modules/tracker/tracker.pages.inc
index ffbf316fe9dcc1011092c63efb7a7a9a1285f1d5..47bd3efedb3abe6d97b60ba21bbbde21d14ad495 100644
--- a/core/modules/tracker/tracker.pages.inc
+++ b/core/modules/tracker/tracker.pages.inc
@@ -5,7 +5,6 @@
  * User page callbacks for tracker.module.
  */
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Cache\Cache;
 use Drupal\node\Entity\Node;
 
@@ -85,7 +84,7 @@ function tracker_page($account = NULL) {
       }
 
       $row = array(
-        'type' => SafeMarkup::checkPlain(node_get_type_label($node)),
+        'type' => node_get_type_label($node),
         'title' => array(
           'data' => array(
             '#type' => 'link',
diff --git a/core/modules/update/src/Form/UpdateManagerUpdate.php b/core/modules/update/src/Form/UpdateManagerUpdate.php
index f0f64ea32d557eb0c81d5f017bb93221e5542350..cafa4d13f95d4914eeb33f4e6a5483b732eed152 100644
--- a/core/modules/update/src/Form/UpdateManagerUpdate.php
+++ b/core/modules/update/src/Form/UpdateManagerUpdate.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\update\Form;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -115,14 +114,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
           $project_name = $this->l($project['title'], Url::fromUri($project['link']));
         }
         else {
-          $project_name = SafeMarkup::checkPlain($project['title']);
+          $project_name = $project['title'];
         }
       }
       elseif (!empty($project['info']['name'])) {
-        $project_name = SafeMarkup::checkPlain($project['info']['name']);
+        $project_name = $project['info']['name'];
       }
       else {
-        $project_name = SafeMarkup::checkPlain($name);
+        $project_name = $name;
       }
       if ($project['project_type'] == 'theme' || $project['project_type'] == 'theme-disabled') {
         $project_name .= ' ' . $this->t('(Theme)');
diff --git a/core/modules/user/src/Form/UserPermissionsForm.php b/core/modules/user/src/Form/UserPermissionsForm.php
index 0e0a01a5e0af4e1e78e5c4fc23446818026da1ee..e96efda0c3254ba55c882e2adbb9c97c13c267bb 100644
--- a/core/modules/user/src/Form/UserPermissionsForm.php
+++ b/core/modules/user/src/Form/UserPermissionsForm.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\user\Form;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -94,7 +93,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $admin_roles = array();
     foreach ($this->getRoles() as $role_name => $role) {
       // Retrieve role names for columns.
-      $role_names[$role_name] = SafeMarkup::checkPlain($role->label());
+      $role_names[$role_name] = $role->label();
       // Fetch permissions for the roles.
       $role_permissions[$role_name] = $role->getPermissions();
       $admin_roles[$role_name] = $role->isAdmin();
diff --git a/core/modules/user/src/Plugin/views/access/Permission.php b/core/modules/user/src/Plugin/views/access/Permission.php
index 0dc5165db57b963c92faf64e2d903c6f6645d1c0..fab8f882b020422587c5ef7ad844cb295bf1c59d 100644
--- a/core/modules/user/src/Plugin/views/access/Permission.php
+++ b/core/modules/user/src/Plugin/views/access/Permission.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\user\Plugin\views\access;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -121,7 +120,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     foreach ($permissions as $perm => $perm_item) {
       $provider = $perm_item['provider'];
       $display_name = $this->moduleHandler->getName($provider);
-      $perms[$display_name][$perm] = SafeMarkup::checkPlain(strip_tags($perm_item['title']));
+      $perms[$display_name][$perm] = strip_tags($perm_item['title']);
     }
 
     $form['perm'] = array(
diff --git a/core/modules/user/src/UserListBuilder.php b/core/modules/user/src/UserListBuilder.php
index 7575b867270d6caf0f5665925fa1ab647c281d59..85b52f2e24aab533528076e7149d4a3f3cb11cb1 100644
--- a/core/modules/user/src/UserListBuilder.php
+++ b/core/modules/user/src/UserListBuilder.php
@@ -138,7 +138,7 @@ public function buildRow(EntityInterface $entity) {
     );
     $row['status'] = $entity->isActive() ? $this->t('active') : $this->t('blocked');
 
-    $roles = array_map('\Drupal\Component\Utility\SafeMarkup::checkPlain', user_role_names(TRUE));
+    $roles = user_role_names(TRUE);
     unset($roles[RoleInterface::AUTHENTICATED_ID]);
     $users_roles = array();
     foreach ($entity->getRoles() as $role) {
diff --git a/core/modules/views/src/Plugin/views/display/Block.php b/core/modules/views/src/Plugin/views/display/Block.php
index 411c50ee24187f6af541be55c11f3dca5c1d3c63..08e44675244b7d41b87276dc79946ce04a4f174b 100644
--- a/core/modules/views/src/Plugin/views/display/Block.php
+++ b/core/modules/views/src/Plugin/views/display/Block.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\views\Plugin\views\display;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\views\Plugin\Block\ViewsBlock;
@@ -149,7 +148,7 @@ public function optionsSummary(&$categories, &$options) {
     if (empty($block_description)) {
       $block_description = $this->t('None');
     }
-    $block_category = SafeMarkup::checkPlain($this->getOption('block_category'));
+    $block_category = $this->getOption('block_category');
 
     $options['block_description'] = array(
       'category' => 'block',
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index f9ae57a0584a6119d4655c0a3a160c6c1fc28b50..534925c91324ad80f2d296821ad9059543b3b56e 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -1062,7 +1062,7 @@ public function getArgumentsTokens() {
       }
        // Use strip tags as there should never be HTML in the path.
        // However, we need to preserve special characters like " that
-       // were removed by SafeMarkup::checkPlain().
+       // were encoded by \Drupal\Component\Utility\Html::escape().
       $tokens["!$count"] = isset($this->view->args[$count - 1]) ? strip_tags(Html::decodeEntities($this->view->args[$count - 1])) : '';
     }
 
@@ -1394,7 +1394,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     if ($this->defaultableSections($section)) {
       views_ui_standard_display_dropdown($form, $form_state, $section);
     }
-    $form['#title'] = SafeMarkup::checkPlain($this->display['display_title']) . ': ';
+    $form['#title'] = $this->display['display_title'] . ': ';
 
     // Set the 'section' to highlight on the form.
     // If it's the item we're looking at is pulling from the default display,
diff --git a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
index d2e9fe895b28aba0ee892b58db74a539943b44c1..8c716f19a8742dbabe71609be3515a25d70e2f58 100644
--- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
+++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
@@ -766,7 +766,7 @@ public function groupForm(&$form, FormStateInterface $form_state) {
       $value = $this->options['group_info']['identifier'];
 
       $form[$value] = array(
-        '#title' => SafeMarkup::checkPlain($this->options['group_info']['label']),
+        '#title' => $this->options['group_info']['label'],
         '#type' => $this->options['group_info']['widget'],
         '#default_value' => $this->group_info,
         '#options' => $groups,
diff --git a/core/modules/views/src/Tests/SearchIntegrationTest.php b/core/modules/views/src/Tests/SearchIntegrationTest.php
index 2edd22da7ea12f55b5c7992f89e9891691d3b2e7..78c43ac359df9a9892cc733b74d0fddd85375e46 100644
--- a/core/modules/views/src/Tests/SearchIntegrationTest.php
+++ b/core/modules/views/src/Tests/SearchIntegrationTest.php
@@ -108,15 +108,16 @@ public function testSearchIntegration() {
       'type' => $type->id(),
     ];
     $this->drupalCreateNode($node);
-    $node['title'] = "Drupal's search rocks really rocks!";
+    $node['title'] = "Drupal's search rocks <em>really</em> rocks!";
     $this->drupalCreateNode($node);
     $this->cronRun();
     $this->drupalGet('test-arg/rocks');
     $xpath = '//div[@class="views-row"]//a';
     /** @var \SimpleXMLElement[] $results */
     $results = $this->xpath($xpath);
-    $this->assertEqual((string) $results[0], "Drupal's search rocks really rocks!");
+    $this->assertEqual((string) $results[0], "Drupal's search rocks <em>really</em> rocks!");
     $this->assertEqual((string) $results[1], "Drupal's search rocks.");
+    $this->assertEscaped("Drupal's search rocks <em>really</em> rocks!");
 
     // Test sorting with another set of titles.
     $node = [
diff --git a/core/modules/views_ui/src/Tests/XssTest.php b/core/modules/views_ui/src/Tests/XssTest.php
index 21080cbfcd3699cc51d82b38ba42fe70f03c4274..a8474347cd44b0549590502282dcbc26becf58b0 100644
--- a/core/modules/views_ui/src/Tests/XssTest.php
+++ b/core/modules/views_ui/src/Tests/XssTest.php
@@ -23,10 +23,10 @@ class XssTest extends UITestBase {
 
   public function testViewsUi() {
     $this->drupalGet('admin/structure/views');
-    $this->assertRaw('&lt;script&gt;alert(&quot;foo&quot;);&lt;/script&gt;, &lt;marquee&gt;test&lt;/marquee&gt;', 'The view tag is properly escaped.');
+    $this->assertEscaped('<script>alert("foo");</script>, <marquee>test</marquee>', 'The view tag is properly escaped.');
 
     $this->drupalGet('admin/structure/views/view/sa_contrib_2013_035');
-    $this->assertRaw('&amp;lt;marquee&amp;gt;test&amp;lt;/marquee&amp;gt;', 'Field admin label is properly escaped.');
+    $this->assertEscaped('<marquee>test</marquee>', 'Field admin label is properly escaped.');
 
     $this->drupalGet('admin/structure/views/nojs/handler/sa_contrib_2013_035/page_1/header/area');
     $this->assertRaw('[title] == &amp;lt;marquee&amp;gt;test&amp;lt;/marquee&amp;gt;', 'Token label is properly escaped.');
diff --git a/core/modules/views_ui/src/ViewEditForm.php b/core/modules/views_ui/src/ViewEditForm.php
index 05bc5fd7241d2cc88c79be9608e798315c592200..e13ae62f03de137eaba22052bfa4c55b71bd25b4 100644
--- a/core/modules/views_ui/src/ViewEditForm.php
+++ b/core/modules/views_ui/src/ViewEditForm.php
@@ -494,7 +494,7 @@ public function getDisplayDetails($view, $display) {
       $build['top']['display_title'] = array(
         '#theme' => 'views_ui_display_tab_setting',
         '#description' => $this->t('Display name'),
-        '#link' => $view->getExecutable()->displayHandlers->get($display['id'])->optionLink(SafeMarkup::checkPlain($display_title), 'display_title'),
+        '#link' => $view->getExecutable()->displayHandlers->get($display['id'])->optionLink($display_title, 'display_title'),
       );
     }
 
@@ -1060,7 +1060,7 @@ public function getFormBucket(ViewUI $view, $type, $display) {
         continue;
       }
 
-      $field_name = SafeMarkup::checkPlain($handler->adminLabel(TRUE));
+      $field_name = $handler->adminLabel(TRUE);
       if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) {
         $field_name = '(' . $relationships[$field['relationship']] . ') ' . $field_name;
       }
diff --git a/core/modules/views_ui/src/ViewListBuilder.php b/core/modules/views_ui/src/ViewListBuilder.php
index ece0acfdd3acb0ed701f7a80c9ad46619dd22df7..0d8125b81c99686232b7b86fe0c76ffd139be8b1 100644
--- a/core/modules/views_ui/src/ViewListBuilder.php
+++ b/core/modules/views_ui/src/ViewListBuilder.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\views_ui;
 
-use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
@@ -278,7 +277,7 @@ protected function getDisplayPaths(EntityInterface $view) {
           $all_paths[] = \Drupal::l('/' . $path, Url::fromUserInput('/' . $path));
         }
         else {
-          $all_paths[] = SafeMarkup::checkPlain('/' . $path);
+          $all_paths[] = '/' . $path;
         }
       }
     }
diff --git a/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php b/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php
index d4bc2b6bd1e78e6c5902437fcb6ce85bfd2409e5..4089d3a2e89d8486a5bb94fd346abfb62263f85a 100644
--- a/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php
+++ b/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Tests\views_ui\Unit;
 
+use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Tests\UnitTestCase;
@@ -165,7 +166,10 @@ public function testBuildRowEntityList() {
     $this->assertEquals($expected_displays, $row['data']['view_name']['data']['#displays']);
 
     $display_paths = $row['data']['path']['data']['#items'];
-    $this->assertEquals('/test_page, /&lt;object&gt;malformed_path&lt;/object&gt;, /&lt;script&gt;alert(&quot;placeholder_page/%&quot;)&lt;/script&gt;', implode(', ', $display_paths));
+    // These values will be escaped by Twig when rendered.
+    $this->assertEquals('/test_page, /<object>malformed_path</object>, /<script>alert("placeholder_page/%")</script>', implode(', ', $display_paths));
+    $this->assertFalse(SafeMarkup::isSafe('/<object>malformed_path</object>'), '/<script>alert("/<object>malformed_path</object> is not marked safe.');
+    $this->assertFalse(SafeMarkup::isSafe('/<script>alert("placeholder_page/%")'), '/<script>alert("/<script>alert("placeholder_page/%") is not marked safe.');
   }
 
 }
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 0755cf253c4b9032e453158f176ac721dfdc2cdd..47f7a86672f11c0a01f98542ad6d8d49d33bdd1a 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -175,6 +175,8 @@ function simpletest_script_help() {
               Specify the path and the extension
               (i.e. 'core/modules/user/user.test').
 
+  --directory Run all tests found within the specified file directory.
+
   --xml       <path>
 
               If provided, test results will be written as xml files to this path.
@@ -253,6 +255,7 @@ function simpletest_script_parse_args() {
     'module' => NULL,
     'class' => FALSE,
     'file' => FALSE,
+    'directory' => NULL,
     'color' => FALSE,
     'verbose' => FALSE,
     'keep-results' => FALSE,
@@ -836,6 +839,60 @@ function simpletest_script_get_test_list() {
         }
       }
     }
+    elseif ($args['directory']) {
+      // Extract test case class names from specified directory.
+      // Find all tests in the PSR-X structure; Drupal\$extension\Tests\*.php
+      // Since we do not want to hard-code too many structural file/directory
+      // assumptions about PSR-0/4 files and directories, we check for the
+      // minimal conditions only; i.e., a '*.php' file that has '/Tests/' in
+      // its path.
+      // Ignore anything from third party vendors.
+      $ignore = array('.', '..', 'vendor');
+      $files = [];
+      if ($args['directory'][0] === '/') {
+        $directory = $args['directory'];
+      }
+      else {
+        $directory = DRUPAL_ROOT . "/" . $args['directory'];
+      }
+      foreach (file_scan_directory($directory, '/\.php$/', $ignore) as $file) {
+        // '/Tests/' can be contained anywhere in the file's path (there can be
+        // sub-directories below /Tests), but must be contained literally.
+        // Case-insensitive to match all Simpletest and PHPUnit tests:
+        //   ./lib/Drupal/foo/Tests/Bar/Baz.php
+        //   ./foo/src/Tests/Bar/Baz.php
+        //   ./foo/tests/Drupal/foo/Tests/FooTest.php
+        //   ./foo/tests/src/FooTest.php
+        // $file->filename doesn't give us a directory, so we use $file->uri
+        // Strip the drupal root directory and trailing slash off the URI
+        $filename = substr($file->uri, strlen(DRUPAL_ROOT)+1);
+        if (stripos($filename, '/Tests/')) {
+          $files[$filename] = $filename;
+        }
+      }
+      foreach ($files as $file) {
+        $content = file_get_contents($file);
+        // Extract a potential namespace.
+        $namespace = FALSE;
+        if (preg_match('@^namespace ([^ ;]+)@m', $content, $matches)) {
+          $namespace = $matches[1];
+        }
+        // Extract all class names.
+        // Abstract classes are excluded on purpose.
+        preg_match_all('@^class ([^ ]+)@m', $content, $matches);
+        if (!$namespace) {
+          $test_list = array_merge($test_list, $matches[1]);
+        }
+        else {
+          foreach ($matches[1] as $class_name) {
+            $namespace_class = $namespace . '\\' . $class_name;
+            if (is_subclass_of($namespace_class, '\Drupal\simpletest\TestBase') || is_subclass_of($namespace_class, '\PHPUnit_Framework_TestCase')) {
+              $test_list[] = $namespace_class;
+            }
+          }
+        }
+      }
+    }
     else {
       $groups = simpletest_test_get_all();
       foreach ($args['test_names'] as $group_name) {
diff --git a/core/vendor/behat/mink/.travis.yml b/core/vendor/behat/mink/.travis.yml
index 4c0c786d4047c78aa7e09da898c7530aa4f34fee..74ea58cc9c115c37dd3614a9d620af0ab049a8f3 100644
--- a/core/vendor/behat/mink/.travis.yml
+++ b/core/vendor/behat/mink/.travis.yml
@@ -1,17 +1,12 @@
 language: php
 
-sudo: false
-
 php: [5.3, 5.4, 5.5, 5.6, hhvm]
 
-cache:
-  directories:
-    - $HOME/.composer/cache
-
-install:
-  - composer install
+before_script:
+  - composer install --dev --prefer-source
 
 script: phpunit -v --coverage-clover=coverage.clover
 
 after_script:
-  - wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover
+  - wget https://scrutinizer-ci.com/ocular.phar
+  - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
diff --git a/core/vendor/behat/mink/CHANGES.md b/core/vendor/behat/mink/CHANGES.md
index e21d5aff6f439db8aedb99c24c15dbcdeba4051d..3404cad5286e827b89392db90fb4462625626464 100644
--- a/core/vendor/behat/mink/CHANGES.md
+++ b/core/vendor/behat/mink/CHANGES.md
@@ -1,20 +1,3 @@
-1.6.1 / 2015-02-04
-==================
-
-Bug fixes:
-
-* Added a check for empty path in `WebAssert::cleanUrl()`
-
-Driver testsuite:
-
-* Added an extra test to ensure the right behavior for traversal
-
-Misc:
-
-* Changed the description in the composer.json
-* Switched the repository structure to use PSR-4
-* Updated URLs for the move to the new Github organization
-
 1.6.0 / 2014-09-26
 ==================
 
diff --git a/core/vendor/behat/mink/README.md b/core/vendor/behat/mink/README.md
index 2299506a60751255cf6e6790da1967efb17cd041..d87cf3a06ac06b2050b64a5b971cd46eb0e7a8f0 100644
--- a/core/vendor/behat/mink/README.md
+++ b/core/vendor/behat/mink/README.md
@@ -3,9 +3,9 @@ Mink
 [![Latest Stable Version](https://poser.pugx.org/behat/mink/v/stable.svg)](https://packagist.org/packages/behat/mink)
 [![Latest Unstable Version](https://poser.pugx.org/behat/mink/v/unstable.svg)](https://packagist.org/packages/behat/mink)
 [![Total Downloads](https://poser.pugx.org/behat/mink/downloads.svg)](https://packagist.org/packages/behat/mink)
-[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/minkphp/Mink/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/minkphp/Mink/?branch=master)
-[![Code Coverage](https://scrutinizer-ci.com/g/minkphp/Mink/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/minkphp/Mink/)
-[![Build Status](https://travis-ci.org/minkphp/Mink.svg?branch=master)](https://travis-ci.org/minkphp/Mink)
+[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/Behat/Mink/badges/quality-score.png?s=d4faf469d6b399df121deed6070390800722ada0)](https://scrutinizer-ci.com/g/Behat/Mink/)
+[![Code Coverage](https://scrutinizer-ci.com/g/Behat/Mink/badges/coverage.png?s=88ab1cee4e131f4ef595f17ae4837001ef2aec3b)](https://scrutinizer-ci.com/g/Behat/Mink/)
+[![Build Status](https://travis-ci.org/Behat/Mink.svg?branch=master)](https://travis-ci.org/Behat/Mink)
 [![SensioLabsInsight](https://insight.sensiolabs.com/projects/5bb8fab0-978f-428a-ae23-44ee4e129fbc/mini.png)](https://insight.sensiolabs.com/projects/5bb8fab0-978f-428a-ae23-44ee4e129fbc)
 [![License](https://poser.pugx.org/behat/mink/license.svg)](https://packagist.org/packages/behat/mink)
 
@@ -68,7 +68,5 @@ $> php composer.phar install
 Contributors
 ------------
 
-* Konstantin Kudryashov [everzet](https://github.com/everzet) [lead developer]
-* Christophe Coevoet [stof](https://github.com/stof) [lead developer]
-* Alexander Obuhovich [aik099](https://github.com/aik099) [lead developer]
-* Other [awesome developers](https://github.com/minkphp/Mink/graphs/contributors)
+* Konstantin Kudryashov [everzet](http://github.com/everzet) [lead developer]
+* Other [awesome developers](https://github.com/Behat/Mink/graphs/contributors)
diff --git a/core/vendor/behat/mink/composer.json b/core/vendor/behat/mink/composer.json
index 7a8723f072241fa62dad4be6303698df45dd43f6..0aeee7bfbe6fea7328414dad51fbc0d4e0548b85 100644
--- a/core/vendor/behat/mink/composer.json
+++ b/core/vendor/behat/mink/composer.json
@@ -1,6 +1,6 @@
 {
     "name":         "behat/mink",
-    "description":  "Browser controller/emulator abstraction for PHP",
+    "description":  "Web acceptance testing framework for PHP 5.3",
     "keywords":     ["web", "testing", "browser"],
     "homepage":     "http://mink.behat.org/",
     "type":         "library",
@@ -27,8 +27,8 @@
     },
 
     "autoload": {
-        "psr-4": {
-            "Behat\\Mink\\": "src/"
+        "psr-0": {
+            "Behat\\Mink": "src/"
         }
     },
 
diff --git a/core/vendor/behat/mink/driver-testsuite/README.md b/core/vendor/behat/mink/driver-testsuite/README.md
index f2af9a8f6b6eb6f1e5b3fba45cfda88a78b6ab0a..d21a7472a8364830ffe6f3b1155dac55d58eb4fc 100644
--- a/core/vendor/behat/mink/driver-testsuite/README.md
+++ b/core/vendor/behat/mink/driver-testsuite/README.md
@@ -16,7 +16,7 @@ The testsuite of a driver should be based as follow:
 
     "autoload-dev": {
         "psr-4": {
-            "Acme\\MyDriver\\Tests\\": "tests"
+            "Acme\MyDriver\Tests\\": "tests"
         }
     }
 }
@@ -34,18 +34,15 @@ The testsuite of a driver should be based as follow:
     </php>
 
     <testsuites>
-        <testsuite name="Functional tests">
+        <testsuite name="Driver test suite">
+            <directory>./tests/</directory><!-- if needed to add more tests -->
             <directory>vendor/behat/mink/driver-testsuite/tests</directory>
         </testsuite>
-        <!-- if needed to add more tests -->
-        <testsuite name="Driver tests">
-            <directory>./tests/</directory>
-        </testsuite>
     </testsuites>
 
     <filter>
         <whitelist>
-            <directory>./src</directory>
+            <directory>./src/Acme/MyDriver</directory>
         </whitelist>
     </filter>
 </phpunit>
diff --git a/core/vendor/behat/mink/driver-testsuite/tests/AbstractConfig.php b/core/vendor/behat/mink/driver-testsuite/tests/AbstractConfig.php
index f654297561f223aac4871e750df3de97a015f627..5d02df2c11ecea45a6cbbab8d06710a08c610e4a 100644
--- a/core/vendor/behat/mink/driver-testsuite/tests/AbstractConfig.php
+++ b/core/vendor/behat/mink/driver-testsuite/tests/AbstractConfig.php
@@ -26,7 +26,7 @@ public function mapRemoteFilePath($file)
             return $file;
         }
 
-        $pattern = '/^'.preg_quote($_SERVER['TEST_MACHINE_BASE_PATH'], '/').'/';
+        $pattern = '/^' . preg_quote($_SERVER['TEST_MACHINE_BASE_PATH'], '/') . '/';
         $basePath = $_SERVER['DRIVER_MACHINE_BASE_PATH'];
 
         return preg_replace($pattern, $basePath, $file, 1);
diff --git a/core/vendor/behat/mink/driver-testsuite/tests/Basic/ContentTest.php b/core/vendor/behat/mink/driver-testsuite/tests/Basic/ContentTest.php
index 6f516e814ae6147f231165c7fb7f3bffe0ca8ec5..e68e8d0ebb2ff605bf3b6553e179ace705c85b8d 100644
--- a/core/vendor/behat/mink/driver-testsuite/tests/Basic/ContentTest.php
+++ b/core/vendor/behat/mink/driver-testsuite/tests/Basic/ContentTest.php
@@ -28,7 +28,7 @@ public function testGetAttribute($attributeName, $attributeValue)
     {
         $this->getSession()->visit($this->pathTo('/index.html'));
 
-        $element = $this->getSession()->getPage()->findById('attr-elem['.$attributeName.']');
+        $element = $this->getSession()->getPage()->findById('attr-elem[' . $attributeName . ']');
 
         $this->assertNotNull($element);
         $this->assertSame($attributeValue, $element->getAttribute($attributeName));
diff --git a/core/vendor/behat/mink/driver-testsuite/tests/Basic/TraversingTest.php b/core/vendor/behat/mink/driver-testsuite/tests/Basic/TraversingTest.php
index 3bcb7ac01a635e92af4563683e4f6bc04d8d089f..b31f7fc954b377daff941b102c0a93a5c4accd4f 100644
--- a/core/vendor/behat/mink/driver-testsuite/tests/Basic/TraversingTest.php
+++ b/core/vendor/behat/mink/driver-testsuite/tests/Basic/TraversingTest.php
@@ -126,14 +126,4 @@ public function testDeepTraversing()
         $this->assertFalse($subUrl->has('css', 'em'));
         $this->assertEquals('deep', $subUrl->find('css', 'strong')->getText());
     }
-
-    public function testFindingChild()
-    {
-        $this->getSession()->visit($this->pathTo('/index.html'));
-
-        $form = $this->getSession()->getPage()->find('css', 'footer form');
-        $this->assertNotNull($form);
-
-        $this->assertCount(1, $form->findAll('css', 'input'), 'Elements are searched only in the element, not in all previous matches');
-    }
 }
diff --git a/core/vendor/behat/mink/driver-testsuite/tests/Form/GeneralTest.php b/core/vendor/behat/mink/driver-testsuite/tests/Form/GeneralTest.php
index f15f266e0151ba6c8722db64bb25b1320f3a10ad..263be70baef3b935737d9e4d91b80bdc3858b789 100644
--- a/core/vendor/behat/mink/driver-testsuite/tests/Form/GeneralTest.php
+++ b/core/vendor/behat/mink/driver-testsuite/tests/Form/GeneralTest.php
@@ -188,7 +188,7 @@ public function testAdvancedForm()
         $notes->setValue('new notes');
         $this->assertEquals('new notes', $notes->getValue());
 
-        $about->attachFile($this->mapRemoteFilePath(__DIR__.'/../../web-fixtures/some_file.txt'));
+        $about->attachFile($this->mapRemoteFilePath(__DIR__ . '/../../web-fixtures/some_file.txt'));
 
         $button = $page->findButton('Register');
         $this->assertNotNull($button);
diff --git a/core/vendor/behat/mink/driver-testsuite/tests/Form/RadioTest.php b/core/vendor/behat/mink/driver-testsuite/tests/Form/RadioTest.php
index b21ab7d61f19d81e9629f00ad5a6192cc8c9ceb1..39cd743a2a0bea58a659a6360042cc54ddc31f2a 100644
--- a/core/vendor/behat/mink/driver-testsuite/tests/Form/RadioTest.php
+++ b/core/vendor/behat/mink/driver-testsuite/tests/Form/RadioTest.php
@@ -75,7 +75,7 @@ public function testSetValueXPathEscaping()
         $session->visit($this->pathTo('/advanced_form.html'));
         $page = $session->getPage();
 
-        $sex = $page->find('xpath', '//*[@name = "sex"]'."\n|\n".'//*[@id = "sex"]');
+        $sex = $page->find('xpath', '//*[@name = "sex"]' . "\n|\n" . '//*[@id = "sex"]');
         $this->assertNotNull($sex, 'xpath with line ending works');
 
         $sex->setValue('m');
diff --git a/core/vendor/behat/mink/driver-testsuite/tests/Js/EventsTest.php b/core/vendor/behat/mink/driver-testsuite/tests/Js/EventsTest.php
index e49d83715fac60ab24d17a6872c1491701f8d5c7..00d084b47e0dfc25582aacfe24908b7fd27268e4 100644
--- a/core/vendor/behat/mink/driver-testsuite/tests/Js/EventsTest.php
+++ b/core/vendor/behat/mink/driver-testsuite/tests/Js/EventsTest.php
@@ -99,13 +99,13 @@ public function testKeyboardEvents($modifier, $eventProperties)
         $event  = $webAssert->elementExists('css', '.elements .text-event');
 
         $input1->keyDown('u', $modifier);
-        $this->assertEquals('key downed:'.$eventProperties, $event->getText());
+        $this->assertEquals('key downed:' . $eventProperties, $event->getText());
 
         $input2->keyPress('r', $modifier);
-        $this->assertEquals('key pressed:114 / '.$eventProperties, $event->getText());
+        $this->assertEquals('key pressed:114 / ' . $eventProperties, $event->getText());
 
         $input3->keyUp(78, $modifier);
-        $this->assertEquals('key upped:78 / '.$eventProperties, $event->getText());
+        $this->assertEquals('key upped:78 / ' . $eventProperties, $event->getText());
     }
 
     public function provideKeyboardEventsModifiers()
diff --git a/core/vendor/behat/mink/driver-testsuite/tests/TestCase.php b/core/vendor/behat/mink/driver-testsuite/tests/TestCase.php
index ea003ce5c47557b67c0b55af7f831cdb3b255fc0..22860f660819657f12e0947662acd5bd126cf4a9 100644
--- a/core/vendor/behat/mink/driver-testsuite/tests/TestCase.php
+++ b/core/vendor/behat/mink/driver-testsuite/tests/TestCase.php
@@ -132,7 +132,7 @@ protected function mapRemoteFilePath($file)
      */
     protected function pathTo($path)
     {
-        return rtrim(self::getConfig()->getWebFixturesUrl(), '/').'/'.ltrim($path, '/');
+        return rtrim(self::getConfig()->getWebFixturesUrl(), '/') . '/' . ltrim($path, '/');
     }
 
     /**
diff --git a/core/vendor/behat/mink/phpunit.xml.dist b/core/vendor/behat/mink/phpunit.xml.dist
index 6695433a05d1169d637a09f75b0394c58b8e0591..bf73a6958fe3f5f90eb5add9455ff13ee0bfcaea 100644
--- a/core/vendor/behat/mink/phpunit.xml.dist
+++ b/core/vendor/behat/mink/phpunit.xml.dist
@@ -9,7 +9,7 @@
 
     <filter>
         <whitelist>
-            <directory>./src</directory>
+            <directory>./src/Behat/Mink/</directory>
         </whitelist>
     </filter>
 </phpunit>
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Driver/CoreDriver.php b/core/vendor/behat/mink/src/Behat/Mink/Driver/CoreDriver.php
new file mode 100644
index 0000000000000000000000000000000000000000..248f291ea681291a2b9e54faf068339dedf9c4dd
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Driver/CoreDriver.php
@@ -0,0 +1,447 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Driver;
+
+use Behat\Mink\Exception\UnsupportedDriverActionException;
+use Behat\Mink\Session;
+
+/**
+ * Core driver.
+ * All other drivers should extend this class for future compatibility.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+abstract class CoreDriver implements DriverInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function setSession(Session $session)
+    {
+        throw new UnsupportedDriverActionException('Setting the session is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function start()
+    {
+        throw new UnsupportedDriverActionException('Starting the driver is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isStarted()
+    {
+        throw new UnsupportedDriverActionException('Checking the driver state is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function stop()
+    {
+        throw new UnsupportedDriverActionException('Stopping the driver is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function reset()
+    {
+        throw new UnsupportedDriverActionException('Resetting the driver is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function visit($url)
+    {
+        throw new UnsupportedDriverActionException('Visiting an url is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCurrentUrl()
+    {
+        throw new UnsupportedDriverActionException('Getting the current url is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getContent()
+    {
+        throw new UnsupportedDriverActionException('Getting the page content is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function find($xpath)
+    {
+        throw new UnsupportedDriverActionException('Finding elements is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getTagName($xpath)
+    {
+        throw new UnsupportedDriverActionException('Getting the tag name is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getText($xpath)
+    {
+        throw new UnsupportedDriverActionException('Getting the element text is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getHtml($xpath)
+    {
+        throw new UnsupportedDriverActionException('Getting the element inner HTML is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getOuterHtml($xpath)
+    {
+        throw new UnsupportedDriverActionException('Getting the element outer HTML is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getAttribute($xpath, $name)
+    {
+        throw new UnsupportedDriverActionException('Getting the element attribute is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getValue($xpath)
+    {
+        throw new UnsupportedDriverActionException('Getting the field value is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setValue($xpath, $value)
+    {
+        throw new UnsupportedDriverActionException('Setting the field value is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function check($xpath)
+    {
+        throw new UnsupportedDriverActionException('Checking a checkbox is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function uncheck($xpath)
+    {
+        throw new UnsupportedDriverActionException('Unchecking a checkbox is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isChecked($xpath)
+    {
+        throw new UnsupportedDriverActionException('Getting the state of a checkbox is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function selectOption($xpath, $value, $multiple = false)
+    {
+        throw new UnsupportedDriverActionException('Selecting an option is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function click($xpath)
+    {
+        throw new UnsupportedDriverActionException('Clicking on an element is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attachFile($xpath, $path)
+    {
+        throw new UnsupportedDriverActionException('Attaching a file in an input is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function reload()
+    {
+        throw new UnsupportedDriverActionException('Page reloading is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function forward()
+    {
+        throw new UnsupportedDriverActionException('Forward action is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function back()
+    {
+        throw new UnsupportedDriverActionException('Backward action is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setBasicAuth($user, $password)
+    {
+        throw new UnsupportedDriverActionException('Basic auth setup is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function switchToWindow($name = null)
+    {
+        throw new UnsupportedDriverActionException('Windows management is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function switchToIFrame($name = null)
+    {
+        throw new UnsupportedDriverActionException('iFrames management is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setRequestHeader($name, $value)
+    {
+        throw new UnsupportedDriverActionException('Request headers manipulation is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResponseHeaders()
+    {
+        throw new UnsupportedDriverActionException('Response headers are not available from %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setCookie($name, $value = null)
+    {
+        throw new UnsupportedDriverActionException('Cookies manipulation is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCookie($name)
+    {
+        throw new UnsupportedDriverActionException('Cookies are not available from %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getStatusCode()
+    {
+        throw new UnsupportedDriverActionException('Status code is not available from %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getScreenshot()
+    {
+        throw new UnsupportedDriverActionException('Screenshots are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getWindowNames()
+    {
+        throw new UnsupportedDriverActionException('Listing all window names is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getWindowName()
+    {
+        throw new UnsupportedDriverActionException('Listing this window name is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function doubleClick($xpath)
+    {
+        throw new UnsupportedDriverActionException('Double-clicking is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rightClick($xpath)
+    {
+        throw new UnsupportedDriverActionException('Right-clicking is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isVisible($xpath)
+    {
+        throw new UnsupportedDriverActionException('Element visibility check is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isSelected($xpath)
+    {
+        throw new UnsupportedDriverActionException('Element selection check is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function mouseOver($xpath)
+    {
+        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function focus($xpath)
+    {
+        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function blur($xpath)
+    {
+        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function keyPress($xpath, $char, $modifier = null)
+    {
+        throw new UnsupportedDriverActionException('Keyboard manipulations are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function keyDown($xpath, $char, $modifier = null)
+    {
+        throw new UnsupportedDriverActionException('Keyboard manipulations are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function keyUp($xpath, $char, $modifier = null)
+    {
+        throw new UnsupportedDriverActionException('Keyboard manipulations are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function dragTo($sourceXpath, $destinationXpath)
+    {
+        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function executeScript($script)
+    {
+        throw new UnsupportedDriverActionException('JS is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function evaluateScript($script)
+    {
+        throw new UnsupportedDriverActionException('JS is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function wait($timeout, $condition)
+    {
+        throw new UnsupportedDriverActionException('JS is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function resizeWindow($width, $height, $name = null)
+    {
+        throw new UnsupportedDriverActionException('Window resizing is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function maximizeWindow($name = null)
+    {
+        throw new UnsupportedDriverActionException('Window maximize is not supported by %s', $this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function submitForm($xpath)
+    {
+        throw new UnsupportedDriverActionException('Form submission is not supported by %s', $this);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Driver/DriverInterface.php b/core/vendor/behat/mink/src/Behat/Mink/Driver/DriverInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..831d408d06443eb98716bb63837d8adc712c3ae1
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Driver/DriverInterface.php
@@ -0,0 +1,637 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Driver;
+
+use Behat\Mink\Element\NodeElement;
+use Behat\Mink\Exception\DriverException;
+use Behat\Mink\Exception\UnsupportedDriverActionException;
+use Behat\Mink\Session;
+
+/**
+ * Driver interface.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+interface DriverInterface
+{
+    /**
+     * Sets driver's current session.
+     *
+     * @param Session $session
+     */
+    public function setSession(Session $session);
+
+    /**
+     * Starts driver.
+     *
+     * Once started, the driver should be ready to visit a page.
+     *
+     * Calling any action before visiting a page is an undefined behavior.
+     * The only supported method calls on a fresh driver are
+     * - visit()
+     * - setRequestHeader()
+     * - setBasicAuth()
+     * - reset()
+     * - stop()
+     *
+     * Calling start on a started driver is an undefined behavior. Driver
+     * implementations are free to handle it silently or to fail with an
+     * exception.
+     *
+     * @throws DriverException When the driver cannot be started
+     */
+    public function start();
+
+    /**
+     * Checks whether driver is started.
+     *
+     * @return Boolean
+     */
+    public function isStarted();
+
+    /**
+     * Stops driver.
+     *
+     * Once stopped, the driver should be started again before using it again.
+     *
+     * Calling any action on a stopped driver is an undefined behavior.
+     * The only supported method call after stopping a driver is starting it again.
+     *
+     * Calling stop on a stopped driver is an undefined behavior. Driver
+     * implementations are free to handle it silently or to fail with an
+     * exception.
+     *
+     * @throws DriverException When the driver cannot be closed
+     */
+    public function stop();
+
+    /**
+     * Resets driver state.
+     *
+     * This should reset cookies, request headers and basic authentication.
+     * When possible, the history should be reset as well, but this is not enforced
+     * as some implementations may not be able to reset it without restarting the
+     * driver entirely. Consumers requiring a clean history should restart the driver
+     * to enforce it.
+     *
+     * Once reset, the driver should be ready to visit a page.
+     * Calling any action before visiting a page is an undefined behavior.
+     * The only supported method calls on a fresh driver are
+     * - visit()
+     * - setRequestHeader()
+     * - setBasicAuth()
+     * - reset()
+     * - stop()
+     *
+     * Calling reset on a stopped driver is an undefined behavior.
+     */
+    public function reset();
+
+    /**
+     * Visit specified URL.
+     *
+     * @param string $url url of the page
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function visit($url);
+
+    /**
+     * Returns current URL address.
+     *
+     * @return string
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getCurrentUrl();
+
+    /**
+     * Reloads current page.
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function reload();
+
+    /**
+     * Moves browser forward 1 page.
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function forward();
+
+    /**
+     * Moves browser backward 1 page.
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function back();
+
+    /**
+     * Sets HTTP Basic authentication parameters
+     *
+     * @param string|Boolean $user     user name or false to disable authentication
+     * @param string         $password password
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function setBasicAuth($user, $password);
+
+    /**
+     * Switches to specific browser window.
+     *
+     * @param string $name window name (null for switching back to main window)
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function switchToWindow($name = null);
+
+    /**
+     * Switches to specific iFrame.
+     *
+     * @param string $name iframe name (null for switching back)
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function switchToIFrame($name = null);
+
+    /**
+     * Sets specific request header on client.
+     *
+     * @param string $name
+     * @param string $value
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function setRequestHeader($name, $value);
+
+    /**
+     * Returns last response headers.
+     *
+     * @return array
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getResponseHeaders();
+
+    /**
+     * Sets cookie.
+     *
+     * @param string $name
+     * @param string $value
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function setCookie($name, $value = null);
+
+    /**
+     * Returns cookie by name.
+     *
+     * @param string $name
+     *
+     * @return string|null
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getCookie($name);
+
+    /**
+     * Returns last response status code.
+     *
+     * @return integer
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getStatusCode();
+
+    /**
+     * Returns last response content.
+     *
+     * @return string
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getContent();
+
+    /**
+     * Capture a screenshot of the current window.
+     *
+     * @return string screenshot of MIME type image/* depending
+     *                on driver (e.g., image/png, image/jpeg)
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getScreenshot();
+
+    /**
+     * Return the names of all open windows.
+     *
+     * @return array array of all open windows
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getWindowNames();
+
+    /**
+     * Return the name of the currently active window.
+     *
+     * @return string the name of the current window
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getWindowName();
+
+    /**
+     * Finds elements with specified XPath query.
+     *
+     * @param string $xpath
+     *
+     * @return NodeElement[]
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function find($xpath);
+
+    /**
+     * Returns element's tag name by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @return string
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getTagName($xpath);
+
+    /**
+     * Returns element's text by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @return string
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getText($xpath);
+
+    /**
+     * Returns element's inner html by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @return string
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getHtml($xpath);
+
+    /**
+     * Returns element's outer html by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @return string
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getOuterHtml($xpath);
+
+    /**
+     * Returns element's attribute by it's XPath query.
+     *
+     * @param string $xpath
+     * @param string $name
+     *
+     * @return string|null
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function getAttribute($xpath, $name);
+
+    /**
+     * Returns element's value by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @return string|bool|array
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::getValue
+     */
+    public function getValue($xpath);
+
+    /**
+     * Sets element's value by it's XPath query.
+     *
+     * @param string            $xpath
+     * @param string|bool|array $value
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::setValue
+     */
+    public function setValue($xpath, $value);
+
+    /**
+     * Checks checkbox by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::check
+     */
+    public function check($xpath);
+
+    /**
+     * Unchecks checkbox by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::uncheck
+     */
+    public function uncheck($xpath);
+
+    /**
+     * Checks whether checkbox or radio button located by it's XPath query is checked.
+     *
+     * @param string $xpath
+     *
+     * @return Boolean
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::isChecked
+     */
+    public function isChecked($xpath);
+
+    /**
+     * Selects option from select field or value in radio group located by it's XPath query.
+     *
+     * @param string  $xpath
+     * @param string  $value
+     * @param Boolean $multiple
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::selectOption
+     */
+    public function selectOption($xpath, $value, $multiple = false);
+
+    /**
+     * Checks whether select option, located by it's XPath query, is selected.
+     *
+     * @param string $xpath
+     *
+     * @return Boolean
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::isSelected
+     */
+    public function isSelected($xpath);
+
+    /**
+     * Clicks button or link located by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function click($xpath);
+
+    /**
+     * Double-clicks button or link located by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function doubleClick($xpath);
+
+    /**
+     * Right-clicks button or link located by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function rightClick($xpath);
+
+    /**
+     * Attaches file path to file field located by it's XPath query.
+     *
+     * @param string $xpath
+     * @param string $path
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     *
+     * @see \Behat\Mink\Element\NodeElement::attachFile
+     */
+    public function attachFile($xpath, $path);
+
+    /**
+     * Checks whether element visible located by it's XPath query.
+     *
+     * @param string $xpath
+     *
+     * @return Boolean
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function isVisible($xpath);
+
+    /**
+     * Simulates a mouse over on the element.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function mouseOver($xpath);
+
+    /**
+     * Brings focus to element.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function focus($xpath);
+
+    /**
+     * Removes focus from element.
+     *
+     * @param string $xpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function blur($xpath);
+
+    /**
+     * Presses specific keyboard key.
+     *
+     * @param string         $xpath
+     * @param string|integer $char     could be either char ('b') or char-code (98)
+     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function keyPress($xpath, $char, $modifier = null);
+
+    /**
+     * Pressed down specific keyboard key.
+     *
+     * @param string         $xpath
+     * @param string|integer $char     could be either char ('b') or char-code (98)
+     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function keyDown($xpath, $char, $modifier = null);
+
+    /**
+     * Pressed up specific keyboard key.
+     *
+     * @param string         $xpath
+     * @param string|integer $char     could be either char ('b') or char-code (98)
+     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function keyUp($xpath, $char, $modifier = null);
+
+    /**
+     * Drag one element onto another.
+     *
+     * @param string $sourceXpath
+     * @param string $destinationXpath
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function dragTo($sourceXpath, $destinationXpath);
+
+    /**
+     * Executes JS script.
+     *
+     * @param string $script
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function executeScript($script);
+
+    /**
+     * Evaluates JS script.
+     *
+     * The "return" keyword is optional in the script passed as argument. Driver implementations
+     * must accept the expression both with and without the keyword.
+     *
+     * @param string $script
+     *
+     * @return mixed
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function evaluateScript($script);
+
+    /**
+     * Waits some time or until JS condition turns true.
+     *
+     * @param integer $timeout   timeout in milliseconds
+     * @param string  $condition JS condition
+     *
+     * @return boolean
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function wait($timeout, $condition);
+
+    /**
+     * Set the dimensions of the window.
+     *
+     * @param integer $width  set the window width, measured in pixels
+     * @param integer $height set the window height, measured in pixels
+     * @param string  $name   window name (null for the main window)
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function resizeWindow($width, $height, $name = null);
+
+    /**
+     * Maximize the window if it is not maximized already
+     *
+     * @param string $name window name (null for the main window)
+     *
+     * @throws UnsupportedDriverActionException When operation not supported by the driver
+     * @throws DriverException                  When the operation cannot be done
+     */
+    public function maximizeWindow($name = null);
+
+     /**
+      * Submits the form.
+      *
+      * @param string $xpath Xpath.
+      *
+      * @throws UnsupportedDriverActionException When operation not supported by the driver
+      * @throws DriverException                  When the operation cannot be done
+      *
+      * @see \Behat\Mink\Element\NodeElement::submitForm
+      */
+    public function submitForm($xpath);
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Element/DocumentElement.php b/core/vendor/behat/mink/src/Behat/Mink/Element/DocumentElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc6bc6e1b0763b4a8c958ee2b7fbc0396f5e22c7
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Element/DocumentElement.php
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Element;
+
+/**
+ * Document element.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class DocumentElement extends TraversableElement
+{
+    /**
+     * Returns XPath for handled element.
+     *
+     * @return string
+     */
+    public function getXpath()
+    {
+        return '//html';
+    }
+
+    /**
+     * Returns document content.
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return trim($this->getDriver()->getContent());
+    }
+
+    /**
+     * Check whether document has specified content.
+     *
+     * @param string $content
+     *
+     * @return Boolean
+     */
+    public function hasContent($content)
+    {
+        return $this->has('named', array(
+            'content', $this->getSelectorsHandler()->xpathLiteral($content)
+        ));
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Element/Element.php b/core/vendor/behat/mink/src/Behat/Mink/Element/Element.php
new file mode 100644
index 0000000000000000000000000000000000000000..07e1e119efd5098a7bc9e800ff3d9a30bae796c8
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Element/Element.php
@@ -0,0 +1,207 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Element;
+
+use Behat\Mink\Driver\DriverInterface;
+use Behat\Mink\Exception\ElementNotFoundException;
+use Behat\Mink\Selector\SelectorsHandler;
+use Behat\Mink\Selector\Xpath\Manipulator;
+use Behat\Mink\Session;
+
+/**
+ * Base element.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+abstract class Element implements ElementInterface
+{
+    /**
+     * @var Session
+     */
+    private $session;
+
+    /**
+     * Driver.
+     *
+     * @var DriverInterface
+     */
+    private $driver;
+
+    /**
+     * @var SelectorsHandler
+     */
+    private $selectorsHandler;
+
+    /**
+     * @var Manipulator
+     */
+    private $xpathManipulator;
+
+    /**
+     * Initialize element.
+     *
+     * @param Session $session
+     */
+    public function __construct(Session $session)
+    {
+        $this->xpathManipulator = new Manipulator();
+        $this->session = $session;
+
+        $this->driver = $session->getDriver();
+        $this->selectorsHandler = $session->getSelectorsHandler();
+    }
+
+    /**
+     * Returns element session.
+     *
+     * @return Session
+     *
+     * @deprecated Accessing the session from the element is deprecated as of 1.6 and will be impossible in 2.0.
+     */
+    public function getSession()
+    {
+        return $this->session;
+    }
+
+    /**
+     * Returns element's driver.
+     *
+     * @return DriverInterface
+     */
+    protected function getDriver()
+    {
+        return $this->driver;
+    }
+
+    /**
+     * Returns selectors handler.
+     *
+     * @return SelectorsHandler
+     */
+    protected function getSelectorsHandler()
+    {
+        return $this->selectorsHandler;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function has($selector, $locator)
+    {
+        return null !== $this->find($selector, $locator);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isValid()
+    {
+        return 1 === count($this->getDriver()->find($this->getXpath()));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function waitFor($timeout, $callback)
+    {
+        if (!is_callable($callback)) {
+            throw new \InvalidArgumentException('Given callback is not a valid callable');
+        }
+
+        $start = microtime(true);
+        $end = $start + $timeout;
+
+        do {
+            $result = call_user_func($callback, $this);
+
+            if ($result) {
+                break;
+            }
+
+            usleep(100000);
+        } while (microtime(true) < $end);
+
+        return $result;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function find($selector, $locator)
+    {
+        $items = $this->findAll($selector, $locator);
+
+        return count($items) ? current($items) : null;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function findAll($selector, $locator)
+    {
+        if ('named' === $selector) {
+            $items = $this->findAll('named_exact', $locator);
+            if (empty($items)) {
+                $items = $this->findAll('named_partial', $locator);
+            }
+
+            return $items;
+        }
+
+        $xpath = $this->getSelectorsHandler()->selectorToXpath($selector, $locator);
+        $xpath = $this->xpathManipulator->prepend($xpath, $this->getXpath());
+
+        return $this->getDriver()->find($xpath);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getText()
+    {
+        return $this->getDriver()->getText($this->getXpath());
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getHtml()
+    {
+        return $this->getDriver()->getHtml($this->getXpath());
+    }
+
+    /**
+     * Returns element outer html.
+     *
+     * @return string
+     */
+    public function getOuterHtml()
+    {
+        return $this->getDriver()->getOuterHtml($this->getXpath());
+    }
+
+    /**
+     * Builds an ElementNotFoundException
+     *
+     * This is an helper to build the ElementNotFoundException without
+     * needing to use the deprecated getSession accessor in child classes.
+     *
+     * @param string      $type
+     * @param string|null $selector
+     * @param string|null $locator
+     *
+     * @return ElementNotFoundException
+     */
+    protected function elementNotFound($type, $selector = null, $locator = null)
+    {
+        return new ElementNotFoundException($this->session, $type, $selector, $locator);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Element/ElementInterface.php b/core/vendor/behat/mink/src/Behat/Mink/Element/ElementInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c134b96fcd5da1c94bd3bcb93e99af5084d0cb1
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Element/ElementInterface.php
@@ -0,0 +1,114 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Element;
+
+use Behat\Mink\Session;
+
+/**
+ * Element interface.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+interface ElementInterface
+{
+    /**
+     * Returns XPath for handled element.
+     *
+     * @return string
+     */
+    public function getXpath();
+
+    /**
+     * Returns element's session.
+     *
+     * @return Session
+     *
+     * @deprecated Accessing the session from the element is deprecated as of 1.6 and will be impossible in 2.0.
+     */
+    public function getSession();
+
+    /**
+     * Checks whether element with specified selector exists inside the current element.
+     *
+     * @param string       $selector selector engine name
+     * @param string|array $locator  selector locator
+     *
+     * @return Boolean
+     *
+     * @see ElementInterface::findAll for the supported selectors
+     */
+    public function has($selector, $locator);
+
+    /**
+     * Checks if an element still exists in the DOM.
+     *
+     * @return boolean
+     */
+    public function isValid();
+
+    /**
+     * Waits for an element(-s) to appear and returns it.
+     *
+     * @param int|float $timeout  Maximal allowed waiting time in seconds.
+     * @param callable  $callback Callback, which result is both used as waiting condition and returned.
+     *                            Will receive reference to `this element` as first argument.
+     *
+     * @return mixed
+     * @throws \InvalidArgumentException When invalid callback given.
+     */
+    public function waitFor($timeout, $callback);
+
+    /**
+     * Finds first element with specified selector inside the current element.
+     *
+     * @param string       $selector selector engine name
+     * @param string|array $locator  selector locator
+     *
+     * @return NodeElement|null
+     *
+     * @see ElementInterface::findAll for the supported selectors
+     */
+    public function find($selector, $locator);
+
+    /**
+     * Finds all elements with specified selector inside the current element.
+     *
+     * Valid selector engines are named, xpath, css, named_partial and named_exact.
+     *
+     * 'named' is a pseudo selector engine which prefers an exact match but
+     * will return a partial match if no exact match is found.
+     * 'xpath' is a pseudo selector engine supported by SelectorsHandler.
+     *
+     * More selector engines can be registered in the SelectorsHandler.
+     *
+     * @param string       $selector selector engine name
+     * @param string|array $locator  selector locator
+     *
+     * @return NodeElement[]
+     *
+     * @see NamedSelector for the locators supported by the named selectors
+     */
+    public function findAll($selector, $locator);
+
+    /**
+     * Returns element text (inside tag).
+     *
+     * @return string
+     */
+    public function getText();
+
+    /**
+     * Returns element inner html.
+     *
+     * @return string
+     */
+    public function getHtml();
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Element/NodeElement.php b/core/vendor/behat/mink/src/Behat/Mink/Element/NodeElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f867ed0d0e4d8bd9c34a51597a9bd1fee6d2448
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Element/NodeElement.php
@@ -0,0 +1,352 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Element;
+
+use Behat\Mink\Session;
+use Behat\Mink\Exception\ElementNotFoundException;
+
+/**
+ * Page element node.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class NodeElement extends TraversableElement
+{
+    private $xpath;
+
+    /**
+     * Initializes node element.
+     *
+     * @param string  $xpath   element xpath
+     * @param Session $session session instance
+     */
+    public function __construct($xpath, Session $session)
+    {
+        $this->xpath = $xpath;
+
+        parent::__construct($session);
+    }
+
+    /**
+     * Returns XPath for handled element.
+     *
+     * @return string
+     */
+    public function getXpath()
+    {
+        return $this->xpath;
+    }
+
+    /**
+     * Returns parent element to the current one.
+     *
+     * @return NodeElement
+     */
+    public function getParent()
+    {
+        return $this->find('xpath', '..');
+    }
+
+    /**
+     * Returns current node tag name.
+     *
+     * The value is always returned in lowercase to allow an easy comparison.
+     *
+     * @return string
+     */
+    public function getTagName()
+    {
+        return strtolower($this->getDriver()->getTagName($this->getXpath()));
+    }
+
+    /**
+     * Returns the value of the form field or option element.
+     *
+     * For checkbox fields, the value is a boolean indicating whether the checkbox is checked.
+     * For radio buttons, the value is the value of the selected button in the radio group
+     *      or null if no button is selected.
+     * For single select boxes, the value is the value of the selected option.
+     * For multiple select boxes, the value is an array of selected option values.
+     * for file inputs, the return value is undefined given that browsers don't allow accessing
+     *      the value of file inputs for security reasons. Some drivers may allow accessing the
+     *      path of the file set in the field, but this is not required if it cannot be implemented.
+     * For textarea elements and all textual fields, the value is the content of the field.
+     * Form option elements, the value is the value of the option (the value attribute or the text
+     *      content if the attribute is not set).
+     *
+     * Calling this method on other elements than form fields or option elements is not allowed.
+     *
+     * @return string|bool|array
+     */
+    public function getValue()
+    {
+        return $this->getDriver()->getValue($this->getXpath());
+    }
+
+    /**
+     * Sets the value of the form field.
+     *
+     * Calling this method on other elements than form fields is not allowed.
+     *
+     * @param string|bool|array $value
+     *
+     * @see NodeElement::getValue for the format of the value for each type of field
+     */
+    public function setValue($value)
+    {
+        $this->getDriver()->setValue($this->getXpath(), $value);
+    }
+
+    /**
+     * Checks whether element has attribute with specified name.
+     *
+     * @param string $name
+     *
+     * @return Boolean
+     */
+    public function hasAttribute($name)
+    {
+        return null !== $this->getDriver()->getAttribute($this->getXpath(), $name);
+    }
+
+    /**
+     * Returns specified attribute value.
+     *
+     * @param string $name
+     *
+     * @return string|null
+     */
+    public function getAttribute($name)
+    {
+        return $this->getDriver()->getAttribute($this->getXpath(), $name);
+    }
+
+    /**
+     * Checks whether an element has a named CSS class
+     *
+     * @param string $className Name of the class
+     *
+     * @return boolean
+     */
+    public function hasClass($className)
+    {
+        if ($this->hasAttribute('class')) {
+            return in_array($className, explode(' ', $this->getAttribute('class')));
+        }
+
+        return false;
+    }
+
+    /**
+     * Clicks current node.
+     */
+    public function click()
+    {
+        $this->getDriver()->click($this->getXpath());
+    }
+
+    /**
+     * Presses current button.
+     */
+    public function press()
+    {
+        $this->click();
+    }
+
+    /**
+     * Double-clicks current node.
+     */
+    public function doubleClick()
+    {
+        $this->getDriver()->doubleClick($this->getXpath());
+    }
+
+    /**
+     * Right-clicks current node.
+     */
+    public function rightClick()
+    {
+        $this->getDriver()->rightClick($this->getXpath());
+    }
+
+    /**
+     * Checks current node if it's a checkbox field.
+     */
+    public function check()
+    {
+        $this->getDriver()->check($this->getXpath());
+    }
+
+    /**
+     * Unchecks current node if it's a checkbox field.
+     */
+    public function uncheck()
+    {
+        $this->getDriver()->uncheck($this->getXpath());
+    }
+
+    /**
+     * Checks whether current node is checked if it's a checkbox or radio field.
+     *
+     * Calling this method on any other elements is not allowed.
+     *
+     * @return Boolean
+     */
+    public function isChecked()
+    {
+        return (Boolean) $this->getDriver()->isChecked($this->getXpath());
+    }
+
+    /**
+     * Selects specified option for select field or specified radio button in the group
+     *
+     * If the current node is a select box, this selects the option found by its value or
+     * its text.
+     * If the current node is a radio button, this selects the radio button with the given
+     * value in the radio button group of the current node.
+     *
+     * Calling this method on any other elements is not allowed.
+     *
+     * @param string  $option
+     * @param Boolean $multiple whether the option should be added to the selection for multiple selects
+     *
+     * @throws ElementNotFoundException when the option is not found in the select box
+     */
+    public function selectOption($option, $multiple = false)
+    {
+        if ('select' !== $this->getTagName()) {
+            $this->getDriver()->selectOption($this->getXpath(), $option, $multiple);
+
+            return;
+        }
+
+        $opt = $this->find('named', array(
+            'option', $this->getSelectorsHandler()->xpathLiteral($option)
+        ));
+
+        if (null === $opt) {
+            throw $this->elementNotFound('select option', 'value|text', $option);
+        }
+
+        $this->getDriver()->selectOption($this->getXpath(), $opt->getValue(), $multiple);
+    }
+
+    /**
+     * Checks whether current node is selected if it's a option field.
+     *
+     * Calling this method on any other elements is not allowed.
+     *
+     * @return Boolean
+     */
+    public function isSelected()
+    {
+        return (Boolean) $this->getDriver()->isSelected($this->getXpath());
+    }
+
+    /**
+     * Attach file to current node if it's a file input.
+     *
+     * Calling this method on any other elements than file input is not allowed.
+     *
+     * @param string $path path to file (local)
+     */
+    public function attachFile($path)
+    {
+        $this->getDriver()->attachFile($this->getXpath(), $path);
+    }
+
+    /**
+     * Checks whether current node is visible on page.
+     *
+     * @return Boolean
+     */
+    public function isVisible()
+    {
+        return (Boolean) $this->getDriver()->isVisible($this->getXpath());
+    }
+
+    /**
+     * Simulates a mouse over on the element.
+     */
+    public function mouseOver()
+    {
+        $this->getDriver()->mouseOver($this->getXpath());
+    }
+
+    /**
+     * Drags current node onto other node.
+     *
+     * @param ElementInterface $destination other node
+     */
+    public function dragTo(ElementInterface $destination)
+    {
+        $this->getDriver()->dragTo($this->getXpath(), $destination->getXpath());
+    }
+
+    /**
+     * Brings focus to element.
+     */
+    public function focus()
+    {
+        $this->getDriver()->focus($this->getXpath());
+    }
+
+    /**
+     * Removes focus from element.
+     */
+    public function blur()
+    {
+        $this->getDriver()->blur($this->getXpath());
+    }
+
+    /**
+     * Presses specific keyboard key.
+     *
+     * @param string|integer $char     could be either char ('b') or char-code (98)
+     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
+     */
+    public function keyPress($char, $modifier = null)
+    {
+        $this->getDriver()->keyPress($this->getXpath(), $char, $modifier);
+    }
+
+    /**
+     * Pressed down specific keyboard key.
+     *
+     * @param string|integer $char     could be either char ('b') or char-code (98)
+     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
+     */
+    public function keyDown($char, $modifier = null)
+    {
+        $this->getDriver()->keyDown($this->getXpath(), $char, $modifier);
+    }
+
+    /**
+     * Pressed up specific keyboard key.
+     *
+     * @param string|integer $char     could be either char ('b') or char-code (98)
+     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
+     */
+    public function keyUp($char, $modifier = null)
+    {
+        $this->getDriver()->keyUp($this->getXpath(), $char, $modifier);
+    }
+
+    /**
+     * Submits the form.
+     *
+     * Calling this method on anything else than form elements is not allowed.
+     */
+    public function submit()
+    {
+        $this->getDriver()->submitForm($this->getXpath());
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Element/TraversableElement.php b/core/vendor/behat/mink/src/Behat/Mink/Element/TraversableElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..27843d2dd658a85cd5b328364093548661451d02
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Element/TraversableElement.php
@@ -0,0 +1,309 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Element;
+
+use Behat\Mink\Exception\ElementNotFoundException;
+
+/**
+ * Traversable element.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+abstract class TraversableElement extends Element
+{
+    /**
+     * Finds element by its id.
+     *
+     * @param string $id element id
+     *
+     * @return NodeElement|null
+     */
+    public function findById($id)
+    {
+        $id = $this->getSelectorsHandler()->xpathLiteral($id);
+
+        return $this->find('named', array('id', $id));
+    }
+
+    /**
+     * Checks whether element has a link with specified locator.
+     *
+     * @param string $locator link id, title, text or image alt
+     *
+     * @return Boolean
+     */
+    public function hasLink($locator)
+    {
+        return null !== $this->findLink($locator);
+    }
+
+    /**
+     * Finds link with specified locator.
+     *
+     * @param string $locator link id, title, text or image alt
+     *
+     * @return NodeElement|null
+     */
+    public function findLink($locator)
+    {
+        return $this->find('named', array(
+            'link', $this->getSelectorsHandler()->xpathLiteral($locator)
+        ));
+    }
+
+    /**
+     * Clicks link with specified locator.
+     *
+     * @param string $locator link id, title, text or image alt
+     *
+     * @throws ElementNotFoundException
+     */
+    public function clickLink($locator)
+    {
+        $link = $this->findLink($locator);
+
+        if (null === $link) {
+            throw $this->elementNotFound('link', 'id|title|alt|text', $locator);
+        }
+
+        $link->click();
+    }
+
+    /**
+     * Checks whether element has a button (input[type=submit|image|button|reset], button) with specified locator.
+     *
+     * @param string $locator button id, value or alt
+     *
+     * @return Boolean
+     */
+    public function hasButton($locator)
+    {
+        return null !== $this->findButton($locator);
+    }
+
+    /**
+     * Finds button (input[type=submit|image|button|reset], button) with specified locator.
+     *
+     * @param string $locator button id, value or alt
+     *
+     * @return NodeElement|null
+     */
+    public function findButton($locator)
+    {
+        return $this->find('named', array(
+            'button', $this->getSelectorsHandler()->xpathLiteral($locator)
+        ));
+    }
+
+    /**
+     * Presses button (input[type=submit|image|button|reset], button) with specified locator.
+     *
+     * @param string $locator button id, value or alt
+     *
+     * @throws ElementNotFoundException
+     */
+    public function pressButton($locator)
+    {
+        $button = $this->findButton($locator);
+
+        if (null === $button) {
+            throw $this->elementNotFound('button', 'id|name|title|alt|value', $locator);
+        }
+
+        $button->press();
+    }
+
+    /**
+     * Checks whether element has a field (input, textarea, select) with specified locator.
+     *
+     * @param string $locator input id, name or label
+     *
+     * @return Boolean
+     */
+    public function hasField($locator)
+    {
+        return null !== $this->findField($locator);
+    }
+
+    /**
+     * Finds field (input, textarea, select) with specified locator.
+     *
+     * @param string $locator input id, name or label
+     *
+     * @return NodeElement|null
+     */
+    public function findField($locator)
+    {
+        return $this->find('named', array(
+            'field', $this->getSelectorsHandler()->xpathLiteral($locator)
+        ));
+    }
+
+    /**
+     * Fills in field (input, textarea, select) with specified locator.
+     *
+     * @param string $locator input id, name or label
+     * @param string $value   value
+     *
+     * @throws ElementNotFoundException
+     *
+     * @see NodeElement::setValue
+     */
+    public function fillField($locator, $value)
+    {
+        $field = $this->findField($locator);
+
+        if (null === $field) {
+            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
+        }
+
+        $field->setValue($value);
+    }
+
+    /**
+     * Checks whether element has a checkbox with specified locator, which is checked.
+     *
+     * @param string $locator input id, name or label
+     *
+     * @return Boolean
+     *
+     * @see NodeElement::isChecked
+     */
+    public function hasCheckedField($locator)
+    {
+        $field = $this->findField($locator);
+
+        return null !== $field && $field->isChecked();
+    }
+
+    /**
+     * Checks whether element has a checkbox with specified locator, which is unchecked.
+     *
+     * @param string $locator input id, name or label
+     *
+     * @return Boolean
+     *
+     * @see NodeElement::isChecked
+     */
+    public function hasUncheckedField($locator)
+    {
+        $field = $this->findField($locator);
+
+        return null !== $field && !$field->isChecked();
+    }
+
+    /**
+     * Checks checkbox with specified locator.
+     *
+     * @param string $locator input id, name or label
+     *
+     * @throws ElementNotFoundException
+     */
+    public function checkField($locator)
+    {
+        $field = $this->findField($locator);
+
+        if (null === $field) {
+            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
+        }
+
+        $field->check();
+    }
+
+    /**
+     * Unchecks checkbox with specified locator.
+     *
+     * @param string $locator input id, name or label
+     *
+     * @throws ElementNotFoundException
+     */
+    public function uncheckField($locator)
+    {
+        $field = $this->findField($locator);
+
+        if (null === $field) {
+            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
+        }
+
+        $field->uncheck();
+    }
+
+    /**
+     * Checks whether element has a select field with specified locator.
+     *
+     * @param string $locator select id, name or label
+     *
+     * @return Boolean
+     */
+    public function hasSelect($locator)
+    {
+        return $this->has('named', array(
+            'select', $this->getSelectorsHandler()->xpathLiteral($locator)
+        ));
+    }
+
+    /**
+     * Selects option from select field with specified locator.
+     *
+     * @param string  $locator  input id, name or label
+     * @param string  $value    option value
+     * @param Boolean $multiple select multiple options
+     *
+     * @throws ElementNotFoundException
+     *
+     * @see NodeElement::selectOption
+     */
+    public function selectFieldOption($locator, $value, $multiple = false)
+    {
+        $field = $this->findField($locator);
+
+        if (null === $field) {
+            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
+        }
+
+        $field->selectOption($value, $multiple);
+    }
+
+    /**
+     * Checks whether element has a table with specified locator.
+     *
+     * @param string $locator table id or caption
+     *
+     * @return Boolean
+     */
+    public function hasTable($locator)
+    {
+        return $this->has('named', array(
+            'table', $this->getSelectorsHandler()->xpathLiteral($locator)
+        ));
+    }
+
+    /**
+     * Attach file to file field with specified locator.
+     *
+     * @param string $locator input id, name or label
+     * @param string $path    path to file
+     *
+     * @throws ElementNotFoundException
+     *
+     * @see NodeElement::attachFile
+     */
+    public function attachFileToField($locator, $path)
+    {
+        $field = $this->findField($locator);
+
+        if (null === $field) {
+            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
+        }
+
+        $field->attachFile($path);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/DriverException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/DriverException.php
new file mode 100644
index 0000000000000000000000000000000000000000..840f8bdeaeade1ad85f79ce3d24398b07b8a6f3d
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/DriverException.php
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+/**
+ * Exception thrown by drivers when they fail to perform an action.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class DriverException extends Exception
+{
+    /**
+     * Initializes exception.
+     *
+     * @param string          $message
+     * @param int             $code
+     * @param \Exception|null $previous
+     */
+    public function __construct($message, $code = 0, \Exception $previous = null)
+    {
+        parent::__construct($message, $code, $previous);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementException.php
new file mode 100644
index 0000000000000000000000000000000000000000..49d5c6c9d59d7be20990875766101d9d7fd0827d
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementException.php
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+use Behat\Mink\Element\Element;
+
+/**
+ * A standard way for elements to re-throw exceptions
+ *
+ * @deprecated This exception class is not used anymore in Mink 1.6 and will be removed in 2.0
+ *
+ * @author Chris Worfolk <xmeltrut@gmail.com>
+ */
+class ElementException extends Exception
+{
+    private $element;
+
+    /**
+     * Initialises exception.
+     *
+     * @param Element    $element   optional message
+     * @param \Exception $exception exception
+     */
+    public function __construct(Element $element, \Exception $exception)
+    {
+        $this->element = $element;
+
+        parent::__construct(sprintf("Exception thrown by %s\n%s", $element->getXpath(), $exception->getMessage()));
+    }
+
+    /**
+     * Override default toString so we don't send a full backtrace in verbose mode.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return $this->getMessage();
+    }
+
+    /**
+     * Get the element that caused the exception
+     *
+     * @return Element
+     */
+    public function getElement()
+    {
+        return $this->element;
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementHtmlException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementHtmlException.php
new file mode 100644
index 0000000000000000000000000000000000000000..99e2ea601dabb4549b7fa3b044e1ccd9a2060794
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementHtmlException.php
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+use Behat\Mink\Session;
+use Behat\Mink\Element\Element;
+
+/**
+ * Exception thrown when an expectation on the HTML of an element fails.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class ElementHtmlException extends ExpectationException
+{
+    /**
+     * Element instance.
+     *
+     * @var Element
+     */
+    protected $element;
+
+    /**
+     * Initializes exception.
+     *
+     * @param string     $message   optional message
+     * @param Session    $session   session instance
+     * @param Element    $element   element
+     * @param \Exception $exception expectation exception
+     */
+    public function __construct($message, Session $session, Element $element, \Exception $exception = null)
+    {
+        $this->element = $element;
+
+        parent::__construct($message, $session, $exception);
+    }
+
+    protected function getContext()
+    {
+        return $this->element->getOuterHtml();
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementNotFoundException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementNotFoundException.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d379a88c2a6d8507f45dc889c92d35e17e6d77e
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementNotFoundException.php
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+use Behat\Mink\Session;
+
+/**
+ * Exception thrown when an expected element is not found.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class ElementNotFoundException extends ExpectationException
+{
+    /**
+     * Initializes exception.
+     *
+     * @param Session $session  session instance
+     * @param string  $type     element type
+     * @param string  $selector element selector type
+     * @param string  $locator  element locator
+     */
+    public function __construct(Session $session, $type = null, $selector = null, $locator = null)
+    {
+        $message = '';
+
+        if (null !== $type) {
+            $message .= ucfirst($type);
+        } else {
+            $message .= 'Tag';
+        }
+
+        if (null !== $locator) {
+            if (null === $selector || in_array($selector, array('css', 'xpath'))) {
+                $selector = 'matching '.($selector ?: 'locator');
+            } else {
+                $selector = 'with '.$selector;
+            }
+            $message .= ' '.$selector.' "' . $locator . '"';
+        }
+
+        $message .= ' not found.';
+
+        parent::__construct($message, $session);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementTextException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementTextException.php
new file mode 100644
index 0000000000000000000000000000000000000000..5efff0fc91c92aa74aff9774df3b52c04dfde81f
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/ElementTextException.php
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+/**
+ * Exception thrown when an expectation on the text of an element fails.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class ElementTextException extends ElementHtmlException
+{
+    protected function getContext()
+    {
+        return $this->element->getText();
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/Exception.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..4662a5ba49bd01cc49c643f7d65ef0ce7b07ad65
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/Exception.php
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+/**
+ * Mink base exception class.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+abstract class Exception extends \Exception
+{
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/ExpectationException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/ExpectationException.php
new file mode 100644
index 0000000000000000000000000000000000000000..da1723cbf13e960cf3a3eeba8bfdb0e4d0aa899d
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/ExpectationException.php
@@ -0,0 +1,145 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+use Behat\Mink\Session;
+
+/**
+ * Exception thrown for failed expectations.
+ *
+ * Some specialized child classes are available to customize the error rendering.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class ExpectationException extends Exception
+{
+    private $session;
+
+    /**
+     * Initializes exception.
+     *
+     * @param string     $message   optional message
+     * @param Session    $session   session instance
+     * @param \Exception $exception expectation exception
+     */
+    public function __construct($message, Session $session, \Exception $exception = null)
+    {
+        $this->session = $session;
+
+        if (!$message && null !== $exception) {
+            $message = $exception->getMessage();
+        }
+
+        parent::__construct($message, 0, $exception);
+    }
+
+    /**
+     * Returns exception message with additional context info.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        try {
+            $pageText = $this->pipeString($this->trimString($this->getContext()) . "\n");
+            $string   = sprintf("%s\n\n%s%s", $this->getMessage(), $this->getResponseInfo(), $pageText);
+        } catch (\Exception $e) {
+            return $this->getMessage();
+        }
+
+        return $string;
+    }
+
+    /**
+     * Gets the context rendered for this exception
+     *
+     * @return string
+     */
+    protected function getContext()
+    {
+        return $this->trimBody($this->getSession()->getPage()->getContent());
+    }
+
+    /**
+     * Returns exception session.
+     *
+     * @return Session
+     */
+    protected function getSession()
+    {
+        return $this->session;
+    }
+
+    /**
+     * Prepends every line in a string with pipe (|).
+     *
+     * @param string $string
+     *
+     * @return string
+     */
+    protected function pipeString($string)
+    {
+        return '|  ' . strtr($string, array("\n" => "\n|  "));
+    }
+
+    /**
+     * Removes response header/footer, letting only <body /> content.
+     *
+     * @param string $string response content
+     *
+     * @return string
+     */
+    protected function trimBody($string)
+    {
+        $string = preg_replace(array('/^.*<body>/s', '/<\/body>.*$/s'), array('<body>', '</body>'), $string);
+
+        return $string;
+    }
+
+    /**
+     * Trims string to specified number of chars.
+     *
+     * @param string  $string response content
+     * @param integer $count  trim count
+     *
+     * @return string
+     */
+    protected function trimString($string, $count = 1000)
+    {
+        $string = trim($string);
+
+        if ($count < mb_strlen($string)) {
+            return mb_substr($string, 0, $count - 3) . '...';
+        }
+
+        return $string;
+    }
+
+    /**
+     * Returns response information string.
+     *
+     * @return string
+     */
+    protected function getResponseInfo()
+    {
+        $driver = basename(str_replace('\\', '/', get_class($this->session->getDriver())));
+
+        $info = '+--[ ';
+        try {
+            $info .= 'HTTP/1.1 '.$this->session->getStatusCode().' | ';
+        } catch (UnsupportedDriverActionException $e) {
+            // Ignore the status code when not supported
+        }
+        $info .= $this->session->getCurrentUrl().' | '.$driver." ]\n|\n";
+
+        return $info;
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/ResponseTextException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/ResponseTextException.php
new file mode 100644
index 0000000000000000000000000000000000000000..145ed6da05b1f91025ed7a9ec92cd7d0d5670900
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/ResponseTextException.php
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+/**
+ * Exception thrown when an expectation on the response text fails.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class ResponseTextException extends ExpectationException
+{
+    protected function getContext()
+    {
+        return $this->getSession()->getPage()->getText();
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Exception/UnsupportedDriverActionException.php b/core/vendor/behat/mink/src/Behat/Mink/Exception/UnsupportedDriverActionException.php
new file mode 100644
index 0000000000000000000000000000000000000000..d02969b6297e81fe542204bfe6f238f4fb8caad4
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Exception/UnsupportedDriverActionException.php
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Exception;
+
+use Behat\Mink\Driver\DriverInterface;
+
+/**
+ * Exception thrown by drivers when they don't support the requested action.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class UnsupportedDriverActionException extends DriverException
+{
+    /**
+     * Initializes exception.
+     *
+     * @param string          $template what is unsupported?
+     * @param DriverInterface $driver   driver instance
+     * @param \Exception      $previous previous exception
+     */
+    public function __construct($template, DriverInterface $driver, \Exception $previous = null)
+    {
+        $message = sprintf($template, get_class($driver));
+
+        parent::__construct($message, 0, $previous);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Mink.php b/core/vendor/behat/mink/src/Behat/Mink/Mink.php
new file mode 100644
index 0000000000000000000000000000000000000000..d1621b174438f87e6bd3fa25f1d3b73864f86b34
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Mink.php
@@ -0,0 +1,216 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink;
+
+/**
+ * Mink sessions manager.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class Mink
+{
+    private $defaultSessionName;
+
+    /**
+     * Sessions.
+     *
+     * @var Session[]
+     */
+    private $sessions = array();
+
+    /**
+     * Initializes manager.
+     *
+     * @param Session[] $sessions
+     */
+    public function __construct(array $sessions = array())
+    {
+        foreach ($sessions as $name => $session) {
+            $this->registerSession($name, $session);
+        }
+    }
+
+    /**
+     * Stops all started sessions.
+     */
+    public function __destruct()
+    {
+        $this->stopSessions();
+    }
+
+    /**
+     * Registers new session.
+     *
+     * @param string  $name
+     * @param Session $session
+     */
+    public function registerSession($name, Session $session)
+    {
+        $name = strtolower($name);
+
+        $this->sessions[$name] = $session;
+    }
+
+    /**
+     * Checks whether session with specified name is registered.
+     *
+     * @param string $name
+     *
+     * @return Boolean
+     */
+    public function hasSession($name)
+    {
+        return isset($this->sessions[strtolower($name)]);
+    }
+
+    /**
+     * Sets default session name to use.
+     *
+     * @param string $name name of the registered session
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setDefaultSessionName($name)
+    {
+        $name = strtolower($name);
+
+        if (!isset($this->sessions[$name])) {
+            throw new \InvalidArgumentException(sprintf('Session "%s" is not registered.', $name));
+        }
+
+        $this->defaultSessionName = $name;
+    }
+
+    /**
+     * Returns default session name or null if none.
+     *
+     * @return null|string
+     */
+    public function getDefaultSessionName()
+    {
+        return $this->defaultSessionName;
+    }
+
+    /**
+     * Returns registered session by it's name or active one and automatically starts it if required.
+     *
+     * @param string $name session name
+     *
+     * @return Session
+     *
+     * @throws \InvalidArgumentException If the named session is not registered
+     */
+    public function getSession($name = null)
+    {
+        $session = $this->locateSession($name);
+
+        // start session if needed
+        if (!$session->isStarted()) {
+            $session->start();
+        }
+
+        return $session;
+    }
+
+    /**
+     * Checks whether a named session (or the default session) has already been started
+     *
+     * @param string $name session name - if null then the default session will be checked
+     *
+     * @return bool whether the session has been started
+     *
+     * @throws \InvalidArgumentException If the named session is not registered
+     */
+    public function isSessionStarted($name = null)
+    {
+        $session = $this->locateSession($name);
+
+        return $session->isStarted();
+    }
+
+    /**
+     * Returns session asserter.
+     *
+     * @param Session|string $session session object or name
+     *
+     * @return WebAssert
+     */
+    public function assertSession($session = null)
+    {
+        if (!($session instanceof Session)) {
+            $session = $this->getSession($session);
+        }
+
+        return new WebAssert($session);
+    }
+
+    /**
+     * Resets all started sessions.
+     */
+    public function resetSessions()
+    {
+        foreach ($this->sessions as $session) {
+            if ($session->isStarted()) {
+                $session->reset();
+            }
+        }
+    }
+
+    /**
+     * Restarts all started sessions.
+     */
+    public function restartSessions()
+    {
+        foreach ($this->sessions as $session) {
+            if ($session->isStarted()) {
+                $session->restart();
+            }
+        }
+    }
+
+    /**
+     * Stops all started sessions.
+     */
+    public function stopSessions()
+    {
+        foreach ($this->sessions as $session) {
+            if ($session->isStarted()) {
+                $session->stop();
+            }
+        }
+    }
+
+    /**
+     * Returns the named or default session without starting it.
+     *
+     * @param string $name session name
+     *
+     * @return Session
+     *
+     * @throws \InvalidArgumentException If the named session is not registered
+     */
+    protected function locateSession($name = null)
+    {
+        $name = strtolower($name) ?: $this->defaultSessionName;
+
+        if (null === $name) {
+            throw new \InvalidArgumentException('Specify session name to get');
+        }
+
+        if (!isset($this->sessions[$name])) {
+            throw new \InvalidArgumentException(sprintf('Session "%s" is not registered.', $name));
+        }
+
+        $session = $this->sessions[$name];
+
+        return $session;
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/CssSelector.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/CssSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..363658635ca4e9d06d835a0b6165815bce314ed1
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/CssSelector.php
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector;
+
+use Symfony\Component\CssSelector\CssSelector as CSS;
+
+/**
+ * CSS selector engine. Transforms CSS to XPath.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class CssSelector implements SelectorInterface
+{
+    /**
+     * Translates CSS into XPath.
+     *
+     * @param string|array $locator current selector locator
+     *
+     * @return string
+     */
+    public function translateToXPath($locator)
+    {
+        if (!is_string($locator)) {
+            throw new \InvalidArgumentException('The CssSelector expects to get a string as locator');
+        }
+
+        return CSS::toXPath($locator);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/ExactNamedSelector.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/ExactNamedSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..03315a9cffa43fe152e5d4fac9ca7e2adcffdae0
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/ExactNamedSelector.php
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector;
+
+/**
+ * Exact match selector engine. Like the Named selector engine but ignores partial matches.
+ */
+class ExactNamedSelector extends NamedSelector
+{
+    public function __construct()
+    {
+        $this->registerReplacement('%tagTextMatch%', 'normalize-space(string(.)) = %locator%');
+        $this->registerReplacement('%valueMatch%', './@value = %locator%');
+        $this->registerReplacement('%titleMatch%', './@title = %locator%');
+        $this->registerReplacement('%altMatch%', './@alt = %locator%');
+        $this->registerReplacement('%relMatch%', './@rel = %locator%');
+        $this->registerReplacement('%labelAttributeMatch%', './@label = %locator%');
+
+        parent::__construct();
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/NamedSelector.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/NamedSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..4845f994f9e09368c95e1acfefecc874d3a156b8
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/NamedSelector.php
@@ -0,0 +1,238 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector;
+
+/**
+ * Named selectors engine. Uses registered XPath selectors to create new expressions.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class NamedSelector implements SelectorInterface
+{
+    private $replacements = array(
+        // simple replacements
+        '%lowercaseType%' => "translate(./@type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')",
+        '%lowercaseRole%' => "translate(./@role, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')",
+        '%tagTextMatch%' => 'contains(normalize-space(string(.)), %locator%)',
+        '%labelTextMatch%' => './@id = //label[%tagTextMatch%]/@for',
+        '%idMatch%' => './@id = %locator%',
+        '%valueMatch%' => 'contains(./@value, %locator%)',
+        '%idOrValueMatch%' => '(%idMatch% or %valueMatch%)',
+        '%idOrNameMatch%' => '(%idMatch% or ./@name = %locator%)',
+        '%placeholderMatch%' => './@placeholder = %locator%',
+        '%titleMatch%' => 'contains(./@title, %locator%)',
+        '%altMatch%' => 'contains(./@alt, %locator%)',
+        '%relMatch%' => 'contains(./@rel, %locator%)',
+        '%labelAttributeMatch%' => 'contains(./@label, %locator%)',
+
+        // complex replacements
+        '%inputTypeWithoutPlaceholderFilter%' => "%lowercaseType% = 'radio' or %lowercaseType% = 'checkbox' or %lowercaseType% = 'file'",
+        '%fieldFilterWithPlaceholder%' => 'self::input[not(%inputTypeWithoutPlaceholderFilter%)] | self::textarea',
+        '%fieldMatchWithPlaceholder%' => '(%idOrNameMatch% or %labelTextMatch% or %placeholderMatch%)',
+        '%fieldMatchWithoutPlaceholder%' => '(%idOrNameMatch% or %labelTextMatch%)',
+        '%fieldFilterWithoutPlaceholder%' => 'self::input[%inputTypeWithoutPlaceholderFilter%] | self::select',
+        '%buttonTypeFilter%' => "%lowercaseType% = 'submit' or %lowercaseType% = 'image' or %lowercaseType% = 'button' or %lowercaseType% = 'reset'",
+        '%notFieldTypeFilter%' => "not(%buttonTypeFilter% or %lowercaseType% = 'hidden')",
+        '%buttonMatch%' => '%idOrNameMatch% or %valueMatch% or %titleMatch%',
+        '%linkMatch%' => '(%idMatch% or %tagTextMatch% or %titleMatch% or %relMatch%)',
+        '%imgAltMatch%' => './/img[%altMatch%]',
+    );
+
+    private $selectors = array(
+        'fieldset' => <<<XPATH
+.//fieldset
+[(%idMatch% or .//legend[%tagTextMatch%])]
+XPATH
+
+        ,'field' => <<<XPATH
+.//*
+[%fieldFilterWithPlaceholder%][%notFieldTypeFilter%][%fieldMatchWithPlaceholder%]
+|
+.//label[%tagTextMatch%]//.//*[%fieldFilterWithPlaceholder%][%notFieldTypeFilter%]
+|
+.//*
+[%fieldFilterWithoutPlaceholder%][%notFieldTypeFilter%][%fieldMatchWithoutPlaceholder%]
+|
+.//label[%tagTextMatch%]//.//*[%fieldFilterWithoutPlaceholder%][%notFieldTypeFilter%]
+XPATH
+
+        ,'link' => <<<XPATH
+.//a
+[./@href][(%linkMatch% or %imgAltMatch%)]
+|
+.//*
+[%lowercaseRole% = 'link'][(%idOrValueMatch% or %titleMatch% or %tagTextMatch%)]
+XPATH
+
+        ,'button' => <<<XPATH
+.//input
+[%buttonTypeFilter%][(%buttonMatch%)]
+|
+.//input
+[%lowercaseType% = 'image'][%altMatch%]
+|
+.//button
+[(%buttonMatch% or %tagTextMatch%)]
+|
+.//*
+[%lowercaseRole% = 'button'][(%buttonMatch% or %tagTextMatch%)]
+XPATH
+
+        ,'link_or_button' => <<<XPATH
+.//a
+[./@href][(%linkMatch% or %imgAltMatch%)]
+|
+.//input
+[%buttonTypeFilter%][(%idOrValueMatch% or %titleMatch%)]
+|
+.//input
+[%lowercaseType% = 'image'][%altMatch%]
+|
+.//button
+[(%idOrValueMatch% or %titleMatch% or %tagTextMatch%)]
+|
+.//*
+[(%lowercaseRole% = 'button' or %lowercaseRole% = 'link')][(%idOrValueMatch% or %titleMatch% or %tagTextMatch%)]
+XPATH
+
+        ,'content' => <<<XPATH
+./descendant-or-self::*
+[%tagTextMatch%]
+XPATH
+
+        ,'select' => <<<XPATH
+.//select
+[%fieldMatchWithoutPlaceholder%]
+|
+.//label[%tagTextMatch%]//.//select
+XPATH
+
+        ,'checkbox' => <<<XPATH
+.//input
+[%lowercaseType% = 'checkbox'][%fieldMatchWithoutPlaceholder%]
+|
+.//label[%tagTextMatch%]//.//input[%lowercaseType% = 'checkbox']
+XPATH
+
+        ,'radio' => <<<XPATH
+.//input
+[%lowercaseType% = 'radio'][%fieldMatchWithoutPlaceholder%]
+|
+.//label[%tagTextMatch%]//.//input[%lowercaseType% = 'radio']
+XPATH
+
+        ,'file' => <<<XPATH
+.//input
+[%lowercaseType% = 'file'][%fieldMatchWithoutPlaceholder%]
+|
+.//label[%tagTextMatch%]//.//input[%lowercaseType% = 'file']
+XPATH
+
+        ,'optgroup' => <<<XPATH
+.//optgroup
+[%labelAttributeMatch%]
+XPATH
+
+        ,'option' => <<<XPATH
+.//option
+[(./@value = %locator% or %tagTextMatch%)]
+XPATH
+
+        ,'table' => <<<XPATH
+.//table
+[(%idMatch% or .//caption[%tagTextMatch%])]
+XPATH
+        ,'id' => <<<XPATH
+.//*[%idMatch%]
+XPATH
+    ,'id_or_name' => <<<XPATH
+.//*[%idOrNameMatch%]
+XPATH
+    );
+
+    /**
+     * Creates selector instance.
+     */
+    public function __construct()
+    {
+        foreach ($this->replacements as $from => $to) {
+            $this->replacements[$from] = strtr($to, $this->replacements);
+        }
+
+        foreach ($this->selectors as $alias => $selector) {
+            $this->selectors[$alias] = strtr($selector, $this->replacements);
+        }
+    }
+
+    /**
+     * Registers new XPath selector with specified name.
+     *
+     * @param string $name  name for selector
+     * @param string $xpath xpath expression
+     */
+    public function registerNamedXpath($name, $xpath)
+    {
+        $this->selectors[$name] = $xpath;
+    }
+
+    /**
+     * Translates provided locator into XPath.
+     *
+     * @param string|array $locator selector name or array of (selector_name, locator)
+     *
+     * @return string
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function translateToXPath($locator)
+    {
+        if (2 < count($locator)) {
+            throw new \InvalidArgumentException('NamedSelector expects array(name, locator) as argument');
+        }
+
+        if (2 == count($locator)) {
+            $selector   = $locator[0];
+            $locator    = $locator[1];
+        } else {
+            $selector   = (string) $locator;
+            $locator    = null;
+        }
+
+        if (!isset($this->selectors[$selector])) {
+            throw new \InvalidArgumentException(sprintf(
+                'Unknown named selector provided: "%s". Expected one of (%s)',
+                $selector,
+                implode(', ', array_keys($this->selectors))
+            ));
+        }
+
+        $xpath = $this->selectors[$selector];
+
+        if (null !== $locator) {
+            $xpath = strtr($xpath, array('%locator%' => $locator));
+        }
+
+        return $xpath;
+    }
+
+    /**
+     * Registers a replacement in the list of replacements
+     *
+     * This method must be called in the constructor before calling the parent constructor.
+     *
+     * @param string $from
+     * @param string $to
+     */
+    protected function registerReplacement($from, $to)
+    {
+        $this->replacements[$from] = $to;
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/PartialNamedSelector.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/PartialNamedSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..b864a2265db1ef9e8b1d1afb8e534271c9597c99
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/PartialNamedSelector.php
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector;
+
+/**
+ * Named selectors engine. Uses registered XPath selectors to create new expressions.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class PartialNamedSelector extends NamedSelector
+{
+    public function __construct()
+    {
+        $this->registerReplacement('%tagTextMatch%', 'contains(normalize-space(string(.)), %locator%)');
+        $this->registerReplacement('%valueMatch%', 'contains(./@value, %locator%)');
+        $this->registerReplacement('%titleMatch%', 'contains(./@title, %locator%)');
+        $this->registerReplacement('%altMatch%', 'contains(./@alt, %locator%)');
+        $this->registerReplacement('%relMatch%', 'contains(./@rel, %locator%)');
+        $this->registerReplacement('%labelAttributeMatch%', 'contains(./@label, %locator%)');
+
+        parent::__construct();
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/SelectorInterface.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/SelectorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4f5f17942fedef18602924e7bb4b59f75daba66
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/SelectorInterface.php
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector;
+
+/**
+ * Mink selector engine interface.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+interface SelectorInterface
+{
+    /**
+     * Translates provided locator into XPath.
+     *
+     * @param string|array $locator current selector locator
+     *
+     * @return string
+     */
+    public function translateToXPath($locator);
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/SelectorsHandler.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/SelectorsHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..a19de675158a46af3e11d4839706b2e2dc5318f1
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/SelectorsHandler.php
@@ -0,0 +1,125 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector;
+
+use Behat\Mink\Selector\Xpath\Escaper;
+
+/**
+ * Selectors handler.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class SelectorsHandler
+{
+    private $selectors;
+    private $escaper;
+
+    /**
+     * Initializes selectors handler.
+     *
+     * @param SelectorInterface[] $selectors default selectors to register
+     */
+    public function __construct(array $selectors = array())
+    {
+        $this->escaper = new Escaper();
+
+        $this->registerSelector('named_partial', new PartialNamedSelector());
+        $this->registerSelector('named_exact', new ExactNamedSelector());
+        $this->registerSelector('css', new CssSelector());
+
+        foreach ($selectors as $name => $selector) {
+            $this->registerSelector($name, $selector);
+        }
+    }
+
+    /**
+     * Registers new selector engine with specified name.
+     *
+     * @param string            $name     selector engine name
+     * @param SelectorInterface $selector selector engine instance
+     */
+    public function registerSelector($name, SelectorInterface $selector)
+    {
+        $this->selectors[$name] = $selector;
+    }
+
+    /**
+     * Checks whether selector with specified name is registered on handler.
+     *
+     * @param string $name selector engine name
+     *
+     * @return Boolean
+     */
+    public function isSelectorRegistered($name)
+    {
+        return isset($this->selectors[$name]);
+    }
+
+    /**
+     * Returns selector engine with specified name.
+     *
+     * @param string $name selector engine name
+     *
+     * @return SelectorInterface
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function getSelector($name)
+    {
+        if ('named' === $name) {
+            trigger_error(
+                'Using the "named" selector directly from the handler is deprecated as of 1.6 and will be removed in 2.0.'
+                .' Use the "named_partial" or use the "named" selector through the Element API instead.',
+                E_USER_DEPRECATED
+            );
+            $name = 'named_partial';
+        }
+
+        if (!$this->isSelectorRegistered($name)) {
+            throw new \InvalidArgumentException("Selector \"$name\" is not registered.");
+        }
+
+        return $this->selectors[$name];
+    }
+
+    /**
+     * Translates selector with specified name to XPath.
+     *
+     * @param string       $selector selector engine name (registered)
+     * @param string|array $locator  selector locator (an array or a string depending of the selector being used)
+     *
+     * @return string
+     */
+    public function selectorToXpath($selector, $locator)
+    {
+        if ('xpath' === $selector) {
+            if (!is_string($locator)) {
+                throw new \InvalidArgumentException('The xpath selector expects to get a string as locator');
+            }
+
+            return $locator;
+        }
+
+        return $this->getSelector($selector)->translateToXPath($locator);
+    }
+
+    /**
+     * Translates string to XPath literal.
+     *
+     * @param string $s
+     *
+     * @return string
+     */
+    public function xpathLiteral($s)
+    {
+        return $this->escaper->escapeLiteral($s);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/Xpath/Escaper.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/Xpath/Escaper.php
new file mode 100644
index 0000000000000000000000000000000000000000..be3500018dc97ed5dadcb54398b1f2a947c60a3a
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/Xpath/Escaper.php
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector\Xpath;
+
+/**
+ * XPath escaper.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class Escaper
+{
+    /**
+     * Escapes the string as a XPath literal.
+     *
+     * @param string $s
+     *
+     * @return string
+     */
+    public function escapeLiteral($s)
+    {
+        if (false === strpos($s, "'")) {
+            return sprintf("'%s'", $s);
+        }
+
+        if (false === strpos($s, '"')) {
+            return sprintf('"%s"', $s);
+        }
+
+        $string = $s;
+        $parts = array();
+        while (true) {
+            if (false !== $pos = strpos($string, "'")) {
+                $parts[] = sprintf("'%s'", substr($string, 0, $pos));
+                $parts[] = "\"'\"";
+                $string = substr($string, $pos + 1);
+            } else {
+                $parts[] = "'$string'";
+                break;
+            }
+        }
+
+        return sprintf("concat(%s)", implode($parts, ','));
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Selector/Xpath/Manipulator.php b/core/vendor/behat/mink/src/Behat/Mink/Selector/Xpath/Manipulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..617b314535d2579a8879c229d075145fadcc4706
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Selector/Xpath/Manipulator.php
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink\Selector\Xpath;
+
+/**
+ * XPath manipulation utility.
+ *
+ * @author Graham Bates
+ * @author Christophe Coevoet <stof@notk.org>
+ */
+class Manipulator
+{
+    /**
+     * Regex to find union operators not inside brackets.
+     */
+    const UNION_PATTERN = '/\|(?![^\[]*\])/';
+
+    /**
+     * Prepends the XPath prefix to the given XPath.
+     *
+     * The returned XPath will match elements matching the XPath inside an element
+     * matching the prefix.
+     *
+     * @param string $xpath
+     * @param string $prefix
+     *
+     * @return string
+     */
+    public function prepend($xpath, $prefix)
+    {
+        $expressions = array();
+
+        // If the xpath prefix contains a union we need to wrap it in parentheses.
+        if (preg_match(self::UNION_PATTERN, $prefix)) {
+            $prefix = '(' . $prefix . ')';
+        }
+
+        // Split any unions into individual expressions.
+        foreach (preg_split(self::UNION_PATTERN, $xpath) as $expression) {
+            $expression = trim($expression);
+            $parenthesis = '';
+
+            // If the union is inside some braces, we need to preserve the opening braces and apply
+            // the prefix only inside it.
+            if (preg_match('/^[\(\s*]+/', $expression, $matches)) {
+                $parenthesis = $matches[0];
+                $expression = substr($expression, strlen($parenthesis));
+            }
+
+            // add prefix before element selector
+            if (0 === strpos($expression, '/')) {
+                $expression = $prefix . $expression;
+            } else {
+                $expression = $prefix . '/' . $expression;
+            }
+            $expressions[] = $parenthesis . $expression;
+        }
+
+        return implode(' | ', $expressions);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/Session.php b/core/vendor/behat/mink/src/Behat/Mink/Session.php
new file mode 100644
index 0000000000000000000000000000000000000000..c67f7f9b4e1865087cbb0bd85284d8f28c3291b3
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/Session.php
@@ -0,0 +1,352 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink;
+
+use Behat\Mink\Driver\DriverInterface;
+use Behat\Mink\Selector\SelectorsHandler;
+use Behat\Mink\Element\DocumentElement;
+
+/**
+ * Mink session.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class Session
+{
+    private $driver;
+    private $page;
+    private $selectorsHandler;
+
+    /**
+     * Initializes session.
+     *
+     * @param DriverInterface  $driver
+     * @param SelectorsHandler $selectorsHandler
+     */
+    public function __construct(DriverInterface $driver, SelectorsHandler $selectorsHandler = null)
+    {
+        $driver->setSession($this);
+
+        if (null === $selectorsHandler) {
+            $selectorsHandler = new SelectorsHandler();
+        }
+
+        $this->driver           = $driver;
+        $this->selectorsHandler = $selectorsHandler;
+        $this->page             = new DocumentElement($this);
+    }
+
+    /**
+     * Checks whether session (driver) was started.
+     *
+     * @return Boolean
+     */
+    public function isStarted()
+    {
+        return $this->driver->isStarted();
+    }
+
+    /**
+     * Starts session driver.
+     *
+     * Calling any action before visiting a page is an undefined behavior.
+     * The only supported method calls on a fresh driver are
+     * - visit()
+     * - setRequestHeader()
+     * - setBasicAuth()
+     * - reset()
+     * - stop()
+     */
+    public function start()
+    {
+        $this->driver->start();
+    }
+
+    /**
+     * Stops session driver.
+     */
+    public function stop()
+    {
+        $this->driver->stop();
+    }
+
+    /**
+     * Restart session driver.
+     */
+    public function restart()
+    {
+        $this->driver->stop();
+        $this->driver->start();
+    }
+
+    /**
+     * Reset session driver state.
+     *
+     * Calling any action before visiting a page is an undefined behavior.
+     * The only supported method calls on a fresh driver are
+     * - visit()
+     * - setRequestHeader()
+     * - setBasicAuth()
+     * - reset()
+     * - stop()
+     */
+    public function reset()
+    {
+        $this->driver->reset();
+    }
+
+    /**
+     * Returns session driver.
+     *
+     * @return DriverInterface
+     */
+    public function getDriver()
+    {
+        return $this->driver;
+    }
+
+    /**
+     * Returns page element.
+     *
+     * @return DocumentElement
+     */
+    public function getPage()
+    {
+        return $this->page;
+    }
+
+    /**
+     * Returns selectors handler.
+     *
+     * @return SelectorsHandler
+     */
+    public function getSelectorsHandler()
+    {
+        return $this->selectorsHandler;
+    }
+
+    /**
+     * Visit specified URL.
+     *
+     * @param string $url url of the page
+     */
+    public function visit($url)
+    {
+        $this->driver->visit($url);
+    }
+
+    /**
+     * Sets HTTP Basic authentication parameters
+     *
+     * @param string|Boolean $user     user name or false to disable authentication
+     * @param string         $password password
+     */
+    public function setBasicAuth($user, $password = '')
+    {
+        $this->driver->setBasicAuth($user, $password);
+    }
+
+    /**
+     * Sets specific request header.
+     *
+     * @param string $name
+     * @param string $value
+     */
+    public function setRequestHeader($name, $value)
+    {
+        $this->driver->setRequestHeader($name, $value);
+    }
+
+    /**
+     * Returns all response headers.
+     *
+     * @return array
+     */
+    public function getResponseHeaders()
+    {
+        return $this->driver->getResponseHeaders();
+    }
+
+    /**
+     * Sets cookie.
+     *
+     * @param string $name
+     * @param string $value
+     */
+    public function setCookie($name, $value = null)
+    {
+        $this->driver->setCookie($name, $value);
+    }
+
+    /**
+     * Returns cookie by name.
+     *
+     * @param string $name
+     *
+     * @return string|null
+     */
+    public function getCookie($name)
+    {
+        return $this->driver->getCookie($name);
+    }
+
+    /**
+     * Returns response status code.
+     *
+     * @return integer
+     */
+    public function getStatusCode()
+    {
+        return $this->driver->getStatusCode();
+    }
+
+    /**
+     * Returns current URL address.
+     *
+     * @return string
+     */
+    public function getCurrentUrl()
+    {
+        return $this->driver->getCurrentUrl();
+    }
+
+    /**
+     * Capture a screenshot of the current window.
+     *
+     * @return string screenshot of MIME type image/* depending
+     *                on driver (e.g., image/png, image/jpeg)
+     */
+    public function getScreenshot()
+    {
+        return $this->driver->getScreenshot();
+    }
+
+    /**
+     * Return the names of all open windows
+     *
+     * @return array Array of all open window's names.
+     */
+    public function getWindowNames()
+    {
+        return $this->driver->getWindowNames();
+    }
+
+    /**
+     * Return the name of the currently active window
+     *
+     * @return string The name of the current window.
+     */
+    public function getWindowName()
+    {
+        return $this->driver->getWindowName();
+    }
+
+    /**
+     * Reloads current session page.
+     */
+    public function reload()
+    {
+        $this->driver->reload();
+    }
+
+    /**
+     * Moves backward 1 page in history.
+     */
+    public function back()
+    {
+        $this->driver->back();
+    }
+
+    /**
+     * Moves forward 1 page in history.
+     */
+    public function forward()
+    {
+        $this->driver->forward();
+    }
+
+    /**
+     * Switches to specific browser window.
+     *
+     * @param string $name window name (null for switching back to main window)
+     */
+    public function switchToWindow($name = null)
+    {
+        $this->driver->switchToWindow($name);
+    }
+
+    /**
+     * Switches to specific iFrame.
+     *
+     * @param string $name iframe name (null for switching back)
+     */
+    public function switchToIFrame($name = null)
+    {
+        $this->driver->switchToIFrame($name);
+    }
+
+    /**
+     * Execute JS in browser.
+     *
+     * @param string $script javascript
+     */
+    public function executeScript($script)
+    {
+        $this->driver->executeScript($script);
+    }
+
+    /**
+     * Execute JS in browser and return it's response.
+     *
+     * @param string $script javascript
+     *
+     * @return string
+     */
+    public function evaluateScript($script)
+    {
+        return $this->driver->evaluateScript($script);
+    }
+
+    /**
+     * Waits some time or until JS condition turns true.
+     *
+     * @param integer $time      time in milliseconds
+     * @param string  $condition JS condition
+     *
+     * @return boolean
+     */
+    public function wait($time, $condition = 'false')
+    {
+        return $this->driver->wait($time, $condition);
+    }
+
+    /**
+     * Set the dimensions of the window.
+     *
+     * @param integer $width  set the window width, measured in pixels
+     * @param integer $height set the window height, measured in pixels
+     * @param string  $name   window name (null for the main window)
+     */
+    public function resizeWindow($width, $height, $name = null)
+    {
+        $this->driver->resizeWindow($width, $height, $name);
+    }
+
+    /**
+     * Maximize the window if it is not maximized already
+     *
+     * @param string $name window name (null for the main window)
+     */
+    public function maximizeWindow($name = null)
+    {
+        $this->driver->maximizeWindow($name);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Behat/Mink/WebAssert.php b/core/vendor/behat/mink/src/Behat/Mink/WebAssert.php
new file mode 100644
index 0000000000000000000000000000000000000000..8cb3659793f7478f53b3272904ae587414fe6b3f
--- /dev/null
+++ b/core/vendor/behat/mink/src/Behat/Mink/WebAssert.php
@@ -0,0 +1,748 @@
+<?php
+
+/*
+ * This file is part of the Mink package.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Mink;
+
+use Behat\Mink\Element\Element;
+use Behat\Mink\Element\ElementInterface;
+use Behat\Mink\Element\NodeElement;
+use Behat\Mink\Element\TraversableElement;
+use Behat\Mink\Exception\ElementNotFoundException;
+use Behat\Mink\Exception\ExpectationException;
+use Behat\Mink\Exception\ResponseTextException;
+use Behat\Mink\Exception\ElementHtmlException;
+use Behat\Mink\Exception\ElementTextException;
+
+/**
+ * Mink web assertions tool.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+class WebAssert
+{
+    protected $session;
+
+    /**
+     * Initializes assertion engine.
+     *
+     * @param Session $session
+     */
+    public function __construct(Session $session)
+    {
+        $this->session = $session;
+    }
+
+    /**
+     * Checks that current session address is equals to provided one.
+     *
+     * @param string $page
+     *
+     * @throws ExpectationException
+     */
+    public function addressEquals($page)
+    {
+        $expected = $this->cleanUrl($page);
+        $actual   = $this->getCurrentUrlPath();
+
+        $this->assert($actual === $expected, sprintf('Current page is "%s", but "%s" expected.', $actual, $expected));
+    }
+
+    /**
+     * Checks that current session address is not equals to provided one.
+     *
+     * @param string $page
+     *
+     * @throws ExpectationException
+     */
+    public function addressNotEquals($page)
+    {
+        $expected = $this->cleanUrl($page);
+        $actual   = $this->getCurrentUrlPath();
+
+        $this->assert($actual !== $expected, sprintf('Current page is "%s", but should not be.', $actual));
+    }
+
+    /**
+     * Checks that current session address matches regex.
+     *
+     * @param string $regex
+     *
+     * @throws ExpectationException
+     */
+    public function addressMatches($regex)
+    {
+        $actual = $this->getCurrentUrlPath();
+        $message = sprintf('Current page "%s" does not match the regex "%s".', $actual, $regex);
+
+        $this->assert((bool) preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that specified cookie exists and its value equals to a given one
+     *
+     * @param string $name  cookie name
+     * @param string $value cookie value
+     *
+     * @throws ExpectationException
+     */
+    public function cookieEquals($name, $value)
+    {
+        $this->cookieExists($name);
+
+        $actualValue = $this->session->getCookie($name);
+        $message = sprintf('Cookie "%s" value is "%s", but should be "%s".', $name, $actualValue, $value);
+
+        $this->assert($actualValue == $value, $message);
+    }
+
+    /**
+     * Checks that specified cookie exists
+     *
+     * @param string $name cookie name
+     *
+     * @throws ExpectationException
+     */
+    public function cookieExists($name)
+    {
+        $message = sprintf('Cookie "%s" is not set, but should be.', $name);
+        $this->assert($this->session->getCookie($name) !== null, $message);
+    }
+
+    /**
+     * Checks that current response code equals to provided one.
+     *
+     * @param integer $code
+     *
+     * @throws ExpectationException
+     */
+    public function statusCodeEquals($code)
+    {
+        $actual = $this->session->getStatusCode();
+        $message = sprintf('Current response status code is %d, but %d expected.', $actual, $code);
+
+        $this->assert(intval($code) === intval($actual), $message);
+    }
+
+    /**
+     * Checks that current response code not equals to provided one.
+     *
+     * @param integer $code
+     *
+     * @throws ExpectationException
+     */
+    public function statusCodeNotEquals($code)
+    {
+        $actual = $this->session->getStatusCode();
+        $message = sprintf('Current response status code is %d, but should not be.', $actual);
+
+        $this->assert(intval($code) !== intval($actual), $message);
+    }
+
+    /**
+     * Checks that current page contains text.
+     *
+     * @param string $text
+     *
+     * @throws ResponseTextException
+     */
+    public function pageTextContains($text)
+    {
+        $actual = $this->session->getPage()->getText();
+        $actual = preg_replace('/\s+/u', ' ', $actual);
+        $regex  = '/'.preg_quote($text, '/').'/ui';
+        $message = sprintf('The text "%s" was not found anywhere in the text of the current page.', $text);
+
+        $this->assertResponseText((bool) preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that current page does not contains text.
+     *
+     * @param string $text
+     *
+     * @throws ResponseTextException
+     */
+    public function pageTextNotContains($text)
+    {
+        $actual = $this->session->getPage()->getText();
+        $actual = preg_replace('/\s+/u', ' ', $actual);
+        $regex  = '/'.preg_quote($text, '/').'/ui';
+        $message = sprintf('The text "%s" appears in the text of this page, but it should not.', $text);
+
+        $this->assertResponseText(!preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that current page text matches regex.
+     *
+     * @param string $regex
+     *
+     * @throws ResponseTextException
+     */
+    public function pageTextMatches($regex)
+    {
+        $actual = $this->session->getPage()->getText();
+        $message = sprintf('The pattern %s was not found anywhere in the text of the current page.', $regex);
+
+        $this->assertResponseText((bool) preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that current page text does not matches regex.
+     *
+     * @param string $regex
+     *
+     * @throws ResponseTextException
+     */
+    public function pageTextNotMatches($regex)
+    {
+        $actual = $this->session->getPage()->getText();
+        $message = sprintf('The pattern %s was found in the text of the current page, but it should not.', $regex);
+
+        $this->assertResponseText(!preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that page HTML (response content) contains text.
+     *
+     * @param string $text
+     *
+     * @throws ExpectationException
+     */
+    public function responseContains($text)
+    {
+        $actual = $this->session->getPage()->getContent();
+        $regex  = '/'.preg_quote($text, '/').'/ui';
+        $message = sprintf('The string "%s" was not found anywhere in the HTML response of the current page.', $text);
+
+        $this->assert((bool) preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that page HTML (response content) does not contains text.
+     *
+     * @param string $text
+     *
+     * @throws ExpectationException
+     */
+    public function responseNotContains($text)
+    {
+        $actual = $this->session->getPage()->getContent();
+        $regex  = '/'.preg_quote($text, '/').'/ui';
+        $message = sprintf('The string "%s" appears in the HTML response of this page, but it should not.', $text);
+
+        $this->assert(!preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that page HTML (response content) matches regex.
+     *
+     * @param string $regex
+     *
+     * @throws ExpectationException
+     */
+    public function responseMatches($regex)
+    {
+        $actual = $this->session->getPage()->getContent();
+        $message = sprintf('The pattern %s was not found anywhere in the HTML response of the page.', $regex);
+
+        $this->assert((bool) preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that page HTML (response content) does not matches regex.
+     *
+     * @param $regex
+     *
+     * @throws ExpectationException
+     */
+    public function responseNotMatches($regex)
+    {
+        $actual = $this->session->getPage()->getContent();
+        $message = sprintf('The pattern %s was found in the HTML response of the page, but it should not.', $regex);
+
+        $this->assert(!preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that there is specified number of specific elements on the page.
+     *
+     * @param string           $selectorType element selector type (css, xpath)
+     * @param string|array     $selector     element selector
+     * @param integer          $count        expected count
+     * @param ElementInterface $container    document to check against
+     *
+     * @throws ExpectationException
+     */
+    public function elementsCount($selectorType, $selector, $count, ElementInterface $container = null)
+    {
+        $container = $container ?: $this->session->getPage();
+        $nodes = $container->findAll($selectorType, $selector);
+
+        $message = sprintf(
+            '%d %s found on the page, but should be %d.',
+            count($nodes),
+            $this->getMatchingElementRepresentation($selectorType, $selector, count($nodes) !== 1),
+            $count
+        );
+
+        $this->assert(intval($count) === count($nodes), $message);
+    }
+
+    /**
+     * Checks that specific element exists on the current page.
+     *
+     * @param string           $selectorType element selector type (css, xpath)
+     * @param string|array     $selector     element selector
+     * @param ElementInterface $container    document to check against
+     *
+     * @return NodeElement
+     *
+     * @throws ElementNotFoundException
+     */
+    public function elementExists($selectorType, $selector, ElementInterface $container = null)
+    {
+        $container = $container ?: $this->session->getPage();
+        $node = $container->find($selectorType, $selector);
+
+        if (null === $node) {
+            if (is_array($selector)) {
+                $selector = implode(' ', $selector);
+            }
+
+            throw new ElementNotFoundException($this->session, 'element', $selectorType, $selector);
+        }
+
+        return $node;
+    }
+
+    /**
+     * Checks that specific element does not exists on the current page.
+     *
+     * @param string           $selectorType element selector type (css, xpath)
+     * @param string|array     $selector     element selector
+     * @param ElementInterface $container    document to check against
+     *
+     * @throws ExpectationException
+     */
+    public function elementNotExists($selectorType, $selector, ElementInterface $container = null)
+    {
+        $container = $container ?: $this->session->getPage();
+        $node = $container->find($selectorType, $selector);
+
+        $message = sprintf(
+            'An %s appears on this page, but it should not.',
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assert(null === $node, $message);
+    }
+
+    /**
+     * Checks that specific element contains text.
+     *
+     * @param string       $selectorType element selector type (css, xpath)
+     * @param string|array $selector     element selector
+     * @param string       $text         expected text
+     *
+     * @throws ElementTextException
+     */
+    public function elementTextContains($selectorType, $selector, $text)
+    {
+        $element = $this->elementExists($selectorType, $selector);
+        $actual  = $element->getText();
+        $regex   = '/'.preg_quote($text, '/').'/ui';
+
+        $message = sprintf(
+            'The text "%s" was not found in the text of the %s.',
+            $text,
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assertElementText((bool) preg_match($regex, $actual), $message, $element);
+    }
+
+    /**
+     * Checks that specific element does not contains text.
+     *
+     * @param string       $selectorType element selector type (css, xpath)
+     * @param string|array $selector     element selector
+     * @param string       $text         expected text
+     *
+     * @throws ElementTextException
+     */
+    public function elementTextNotContains($selectorType, $selector, $text)
+    {
+        $element = $this->elementExists($selectorType, $selector);
+        $actual  = $element->getText();
+        $regex   = '/'.preg_quote($text, '/').'/ui';
+
+        $message = sprintf(
+            'The text "%s" appears in the text of the %s, but it should not.',
+            $text,
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assertElementText(!preg_match($regex, $actual), $message, $element);
+    }
+
+    /**
+     * Checks that specific element contains HTML.
+     *
+     * @param string       $selectorType element selector type (css, xpath)
+     * @param string|array $selector     element selector
+     * @param string       $html         expected text
+     *
+     * @throws ElementHtmlException
+     */
+    public function elementContains($selectorType, $selector, $html)
+    {
+        $element = $this->elementExists($selectorType, $selector);
+        $actual  = $element->getHtml();
+        $regex   = '/'.preg_quote($html, '/').'/ui';
+
+        $message = sprintf(
+            'The string "%s" was not found in the HTML of the %s.',
+            $html,
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assertElement((bool) preg_match($regex, $actual), $message, $element);
+    }
+
+    /**
+     * Checks that specific element does not contains HTML.
+     *
+     * @param string       $selectorType element selector type (css, xpath)
+     * @param string|array $selector     element selector
+     * @param string       $html         expected text
+     *
+     * @throws ElementHtmlException
+     */
+    public function elementNotContains($selectorType, $selector, $html)
+    {
+        $element = $this->elementExists($selectorType, $selector);
+        $actual  = $element->getHtml();
+        $regex   = '/'.preg_quote($html, '/').'/ui';
+
+        $message = sprintf(
+            'The string "%s" appears in the HTML of the %s, but it should not.',
+            $html,
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assertElement(!preg_match($regex, $actual), $message, $element);
+    }
+
+    /**
+     * Checks that an attribute exists in an element.
+     *
+     * @param string       $selectorType
+     * @param string|array $selector
+     * @param string       $attribute
+     *
+     * @return NodeElement
+     *
+     * @throws ElementHtmlException
+     */
+    public function elementAttributeExists($selectorType, $selector, $attribute)
+    {
+        $element = $this->elementExists($selectorType, $selector);
+
+        $message = sprintf(
+            'The attribute "%s" was not found in the %s.',
+            $attribute,
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assertElement($element->hasAttribute($attribute), $message, $element);
+
+        return $element;
+    }
+
+    /**
+     * Checks that an attribute of a specific elements contains text.
+     *
+     * @param string       $selectorType
+     * @param string|array $selector
+     * @param string       $attribute
+     * @param string       $text
+     *
+     * @throws ElementHtmlException
+     */
+    public function elementAttributeContains($selectorType, $selector, $attribute, $text)
+    {
+        $element = $this->elementAttributeExists($selectorType, $selector, $attribute);
+        $actual  = $element->getAttribute($attribute);
+        $regex   = '/'.preg_quote($text, '/').'/ui';
+
+        $message = sprintf(
+            'The text "%s" was not found in the attribute "%s" of the %s.',
+            $text,
+            $attribute,
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assertElement((bool) preg_match($regex, $actual), $message, $element);
+    }
+
+    /**
+     * Checks that an attribute of a specific elements does not contain text.
+     *
+     * @param string       $selectorType
+     * @param string|array $selector
+     * @param string       $attribute
+     * @param string       $text
+     *
+     * @throws ElementHtmlException
+     */
+    public function elementAttributeNotContains($selectorType, $selector, $attribute, $text)
+    {
+        $element = $this->elementAttributeExists($selectorType, $selector, $attribute);
+        $actual  = $element->getAttribute($attribute);
+        $regex   = '/'.preg_quote($text, '/').'/ui';
+
+        $message = sprintf(
+            'The text "%s" was found in the attribute "%s" of the %s.',
+            $text,
+            $attribute,
+            $this->getMatchingElementRepresentation($selectorType, $selector)
+        );
+
+        $this->assertElement(!preg_match($regex, $actual), $message, $element);
+    }
+
+    /**
+     * Checks that specific field exists on the current page.
+     *
+     * @param string             $field     field id|name|label|value
+     * @param TraversableElement $container document to check against
+     *
+     * @return NodeElement
+     *
+     * @throws ElementNotFoundException
+     */
+    public function fieldExists($field, TraversableElement $container = null)
+    {
+        $container = $container ?: $this->session->getPage();
+        $node = $container->findField($field);
+
+        if (null === $node) {
+            throw new ElementNotFoundException($this->session, 'form field', 'id|name|label|value', $field);
+        }
+
+        return $node;
+    }
+
+    /**
+     * Checks that specific field does not exists on the current page.
+     *
+     * @param string             $field     field id|name|label|value
+     * @param TraversableElement $container document to check against
+     *
+     * @throws ExpectationException
+     */
+    public function fieldNotExists($field, TraversableElement $container = null)
+    {
+        $container = $container ?: $this->session->getPage();
+        $node = $container->findField($field);
+
+        $this->assert(null === $node, sprintf('A field "%s" appears on this page, but it should not.', $field));
+    }
+
+    /**
+     * Checks that specific field have provided value.
+     *
+     * @param string             $field     field id|name|label|value
+     * @param string             $value     field value
+     * @param TraversableElement $container document to check against
+     *
+     * @throws ExpectationException
+     */
+    public function fieldValueEquals($field, $value, TraversableElement $container = null)
+    {
+        $node   = $this->fieldExists($field, $container);
+        $actual = $node->getValue();
+        $regex  = '/^'.preg_quote($value, '/').'$/ui';
+
+        $message = sprintf('The field "%s" value is "%s", but "%s" expected.', $field, $actual, $value);
+
+        $this->assert((bool) preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that specific field have provided value.
+     *
+     * @param string             $field     field id|name|label|value
+     * @param string             $value     field value
+     * @param TraversableElement $container document to check against
+     *
+     * @throws ExpectationException
+     */
+    public function fieldValueNotEquals($field, $value, TraversableElement $container = null)
+    {
+        $node   = $this->fieldExists($field, $container);
+        $actual = $node->getValue();
+        $regex  = '/^'.preg_quote($value, '/').'$/ui';
+
+        $message = sprintf('The field "%s" value is "%s", but it should not be.', $field, $actual);
+
+        $this->assert(!preg_match($regex, $actual), $message);
+    }
+
+    /**
+     * Checks that specific checkbox is checked.
+     *
+     * @param string             $field     field id|name|label|value
+     * @param TraversableElement $container document to check against
+     *
+     * @throws ExpectationException
+     */
+    public function checkboxChecked($field, TraversableElement $container = null)
+    {
+        $node = $this->fieldExists($field, $container);
+
+        $this->assert($node->isChecked(), sprintf('Checkbox "%s" is not checked, but it should be.', $field));
+    }
+
+    /**
+     * Checks that specific checkbox is unchecked.
+     *
+     * @param string             $field     field id|name|label|value
+     * @param TraversableElement $container document to check against
+     *
+     * @throws ExpectationException
+     */
+    public function checkboxNotChecked($field, TraversableElement $container = null)
+    {
+        $node = $this->fieldExists($field, $container);
+
+        $this->assert(!$node->isChecked(), sprintf('Checkbox "%s" is checked, but it should not be.', $field));
+    }
+
+    /**
+     * Gets current url of the page.
+     *
+     * @return string
+     */
+    protected function getCurrentUrlPath()
+    {
+        return $this->cleanUrl($this->session->getCurrentUrl());
+    }
+
+    /**
+     * Trims scriptname from the URL.
+     *
+     * @param string $url
+     *
+     * @return string
+     */
+    protected function cleanUrl($url)
+    {
+        $parts = parse_url($url);
+        $fragment = empty($parts['fragment']) ? '' : '#' . $parts['fragment'];
+
+        return preg_replace('/^\/[^\.\/]+\.php/', '', $parts['path']) . $fragment;
+    }
+
+    /**
+     * Asserts a condition.
+     *
+     * @param bool   $condition
+     * @param string $message   Failure message
+     *
+     * @throws ExpectationException when the condition is not fulfilled
+     */
+    private function assert($condition, $message)
+    {
+        if ($condition) {
+            return;
+        }
+
+        throw new ExpectationException($message, $this->session);
+    }
+
+    /**
+     * Asserts a condition involving the response text.
+     *
+     * @param bool   $condition
+     * @param string $message   Failure message
+     *
+     * @throws ResponseTextException when the condition is not fulfilled
+     */
+    private function assertResponseText($condition, $message)
+    {
+        if ($condition) {
+            return;
+        }
+
+        throw new ResponseTextException($message, $this->session);
+    }
+
+    /**
+     * Asserts a condition on an element.
+     *
+     * @param bool    $condition
+     * @param string  $message   Failure message
+     * @param Element $element
+     *
+     * @throws ElementHtmlException when the condition is not fulfilled
+     */
+    private function assertElement($condition, $message, Element $element)
+    {
+        if ($condition) {
+            return;
+        }
+
+        throw new ElementHtmlException($message, $this->session, $element);
+    }
+
+    /**
+     * Asserts a condition involving the text of an element.
+     *
+     * @param bool    $condition
+     * @param string  $message   Failure message
+     * @param Element $element
+     *
+     * @throws ElementTextException when the condition is not fulfilled
+     */
+    private function assertElementText($condition, $message, Element $element)
+    {
+        if ($condition) {
+            return;
+        }
+
+        throw new ElementTextException($message, $this->session, $element);
+    }
+
+    /**
+     * @param string       $selectorType
+     * @param string|array $selector
+     * @param boolean      $plural
+     *
+     * @return string
+     */
+    private function getMatchingElementRepresentation($selectorType, $selector, $plural = false)
+    {
+        $pluralization = $plural ? 's' : '';
+
+        if (in_array($selectorType, array('named', 'named_exact', 'named_partial'))
+            && is_array($selector) && 2 === count($selector)
+        ) {
+            return sprintf('%s%s matching locator "%s"', $selector[0], $pluralization, $selector[1]);
+        }
+
+        if (is_array($selector)) {
+            $selector = implode(' ', $selector);
+        }
+
+        return sprintf('element%s matching %s "%s"', $pluralization, $selectorType, $selector);
+    }
+}
diff --git a/core/vendor/behat/mink/src/Driver/CoreDriver.php b/core/vendor/behat/mink/src/Driver/CoreDriver.php
deleted file mode 100644
index 248f291ea681291a2b9e54faf068339dedf9c4dd..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Driver/CoreDriver.php
+++ /dev/null
@@ -1,447 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Driver;
-
-use Behat\Mink\Exception\UnsupportedDriverActionException;
-use Behat\Mink\Session;
-
-/**
- * Core driver.
- * All other drivers should extend this class for future compatibility.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-abstract class CoreDriver implements DriverInterface
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function setSession(Session $session)
-    {
-        throw new UnsupportedDriverActionException('Setting the session is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function start()
-    {
-        throw new UnsupportedDriverActionException('Starting the driver is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isStarted()
-    {
-        throw new UnsupportedDriverActionException('Checking the driver state is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function stop()
-    {
-        throw new UnsupportedDriverActionException('Stopping the driver is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function reset()
-    {
-        throw new UnsupportedDriverActionException('Resetting the driver is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function visit($url)
-    {
-        throw new UnsupportedDriverActionException('Visiting an url is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getCurrentUrl()
-    {
-        throw new UnsupportedDriverActionException('Getting the current url is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getContent()
-    {
-        throw new UnsupportedDriverActionException('Getting the page content is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function find($xpath)
-    {
-        throw new UnsupportedDriverActionException('Finding elements is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getTagName($xpath)
-    {
-        throw new UnsupportedDriverActionException('Getting the tag name is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getText($xpath)
-    {
-        throw new UnsupportedDriverActionException('Getting the element text is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHtml($xpath)
-    {
-        throw new UnsupportedDriverActionException('Getting the element inner HTML is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getOuterHtml($xpath)
-    {
-        throw new UnsupportedDriverActionException('Getting the element outer HTML is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getAttribute($xpath, $name)
-    {
-        throw new UnsupportedDriverActionException('Getting the element attribute is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getValue($xpath)
-    {
-        throw new UnsupportedDriverActionException('Getting the field value is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setValue($xpath, $value)
-    {
-        throw new UnsupportedDriverActionException('Setting the field value is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function check($xpath)
-    {
-        throw new UnsupportedDriverActionException('Checking a checkbox is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function uncheck($xpath)
-    {
-        throw new UnsupportedDriverActionException('Unchecking a checkbox is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isChecked($xpath)
-    {
-        throw new UnsupportedDriverActionException('Getting the state of a checkbox is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function selectOption($xpath, $value, $multiple = false)
-    {
-        throw new UnsupportedDriverActionException('Selecting an option is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function click($xpath)
-    {
-        throw new UnsupportedDriverActionException('Clicking on an element is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function attachFile($xpath, $path)
-    {
-        throw new UnsupportedDriverActionException('Attaching a file in an input is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function reload()
-    {
-        throw new UnsupportedDriverActionException('Page reloading is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function forward()
-    {
-        throw new UnsupportedDriverActionException('Forward action is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function back()
-    {
-        throw new UnsupportedDriverActionException('Backward action is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setBasicAuth($user, $password)
-    {
-        throw new UnsupportedDriverActionException('Basic auth setup is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function switchToWindow($name = null)
-    {
-        throw new UnsupportedDriverActionException('Windows management is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function switchToIFrame($name = null)
-    {
-        throw new UnsupportedDriverActionException('iFrames management is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setRequestHeader($name, $value)
-    {
-        throw new UnsupportedDriverActionException('Request headers manipulation is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getResponseHeaders()
-    {
-        throw new UnsupportedDriverActionException('Response headers are not available from %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setCookie($name, $value = null)
-    {
-        throw new UnsupportedDriverActionException('Cookies manipulation is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getCookie($name)
-    {
-        throw new UnsupportedDriverActionException('Cookies are not available from %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getStatusCode()
-    {
-        throw new UnsupportedDriverActionException('Status code is not available from %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getScreenshot()
-    {
-        throw new UnsupportedDriverActionException('Screenshots are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getWindowNames()
-    {
-        throw new UnsupportedDriverActionException('Listing all window names is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getWindowName()
-    {
-        throw new UnsupportedDriverActionException('Listing this window name is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function doubleClick($xpath)
-    {
-        throw new UnsupportedDriverActionException('Double-clicking is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function rightClick($xpath)
-    {
-        throw new UnsupportedDriverActionException('Right-clicking is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isVisible($xpath)
-    {
-        throw new UnsupportedDriverActionException('Element visibility check is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isSelected($xpath)
-    {
-        throw new UnsupportedDriverActionException('Element selection check is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function mouseOver($xpath)
-    {
-        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function focus($xpath)
-    {
-        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function blur($xpath)
-    {
-        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function keyPress($xpath, $char, $modifier = null)
-    {
-        throw new UnsupportedDriverActionException('Keyboard manipulations are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function keyDown($xpath, $char, $modifier = null)
-    {
-        throw new UnsupportedDriverActionException('Keyboard manipulations are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function keyUp($xpath, $char, $modifier = null)
-    {
-        throw new UnsupportedDriverActionException('Keyboard manipulations are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function dragTo($sourceXpath, $destinationXpath)
-    {
-        throw new UnsupportedDriverActionException('Mouse manipulations are not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function executeScript($script)
-    {
-        throw new UnsupportedDriverActionException('JS is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function evaluateScript($script)
-    {
-        throw new UnsupportedDriverActionException('JS is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function wait($timeout, $condition)
-    {
-        throw new UnsupportedDriverActionException('JS is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function resizeWindow($width, $height, $name = null)
-    {
-        throw new UnsupportedDriverActionException('Window resizing is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function maximizeWindow($name = null)
-    {
-        throw new UnsupportedDriverActionException('Window maximize is not supported by %s', $this);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function submitForm($xpath)
-    {
-        throw new UnsupportedDriverActionException('Form submission is not supported by %s', $this);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Driver/DriverInterface.php b/core/vendor/behat/mink/src/Driver/DriverInterface.php
deleted file mode 100644
index 8357caa8b905bd38249de468562fa6d3f2c26a1c..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Driver/DriverInterface.php
+++ /dev/null
@@ -1,637 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Driver;
-
-use Behat\Mink\Element\NodeElement;
-use Behat\Mink\Exception\DriverException;
-use Behat\Mink\Exception\UnsupportedDriverActionException;
-use Behat\Mink\Session;
-
-/**
- * Driver interface.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-interface DriverInterface
-{
-    /**
-     * Sets driver's current session.
-     *
-     * @param Session $session
-     */
-    public function setSession(Session $session);
-
-    /**
-     * Starts driver.
-     *
-     * Once started, the driver should be ready to visit a page.
-     *
-     * Calling any action before visiting a page is an undefined behavior.
-     * The only supported method calls on a fresh driver are
-     * - visit()
-     * - setRequestHeader()
-     * - setBasicAuth()
-     * - reset()
-     * - stop()
-     *
-     * Calling start on a started driver is an undefined behavior. Driver
-     * implementations are free to handle it silently or to fail with an
-     * exception.
-     *
-     * @throws DriverException When the driver cannot be started
-     */
-    public function start();
-
-    /**
-     * Checks whether driver is started.
-     *
-     * @return Boolean
-     */
-    public function isStarted();
-
-    /**
-     * Stops driver.
-     *
-     * Once stopped, the driver should be started again before using it again.
-     *
-     * Calling any action on a stopped driver is an undefined behavior.
-     * The only supported method call after stopping a driver is starting it again.
-     *
-     * Calling stop on a stopped driver is an undefined behavior. Driver
-     * implementations are free to handle it silently or to fail with an
-     * exception.
-     *
-     * @throws DriverException When the driver cannot be closed
-     */
-    public function stop();
-
-    /**
-     * Resets driver state.
-     *
-     * This should reset cookies, request headers and basic authentication.
-     * When possible, the history should be reset as well, but this is not enforced
-     * as some implementations may not be able to reset it without restarting the
-     * driver entirely. Consumers requiring a clean history should restart the driver
-     * to enforce it.
-     *
-     * Once reset, the driver should be ready to visit a page.
-     * Calling any action before visiting a page is an undefined behavior.
-     * The only supported method calls on a fresh driver are
-     * - visit()
-     * - setRequestHeader()
-     * - setBasicAuth()
-     * - reset()
-     * - stop()
-     *
-     * Calling reset on a stopped driver is an undefined behavior.
-     */
-    public function reset();
-
-    /**
-     * Visit specified URL.
-     *
-     * @param string $url url of the page
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function visit($url);
-
-    /**
-     * Returns current URL address.
-     *
-     * @return string
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getCurrentUrl();
-
-    /**
-     * Reloads current page.
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function reload();
-
-    /**
-     * Moves browser forward 1 page.
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function forward();
-
-    /**
-     * Moves browser backward 1 page.
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function back();
-
-    /**
-     * Sets HTTP Basic authentication parameters
-     *
-     * @param string|Boolean $user     user name or false to disable authentication
-     * @param string         $password password
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function setBasicAuth($user, $password);
-
-    /**
-     * Switches to specific browser window.
-     *
-     * @param string $name window name (null for switching back to main window)
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function switchToWindow($name = null);
-
-    /**
-     * Switches to specific iFrame.
-     *
-     * @param string $name iframe name (null for switching back)
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function switchToIFrame($name = null);
-
-    /**
-     * Sets specific request header on client.
-     *
-     * @param string $name
-     * @param string $value
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function setRequestHeader($name, $value);
-
-    /**
-     * Returns last response headers.
-     *
-     * @return array
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getResponseHeaders();
-
-    /**
-     * Sets cookie.
-     *
-     * @param string $name
-     * @param string $value
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function setCookie($name, $value = null);
-
-    /**
-     * Returns cookie by name.
-     *
-     * @param string $name
-     *
-     * @return string|null
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getCookie($name);
-
-    /**
-     * Returns last response status code.
-     *
-     * @return integer
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getStatusCode();
-
-    /**
-     * Returns last response content.
-     *
-     * @return string
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getContent();
-
-    /**
-     * Capture a screenshot of the current window.
-     *
-     * @return string screenshot of MIME type image/* depending
-     *                on driver (e.g., image/png, image/jpeg)
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getScreenshot();
-
-    /**
-     * Return the names of all open windows.
-     *
-     * @return array array of all open windows
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getWindowNames();
-
-    /**
-     * Return the name of the currently active window.
-     *
-     * @return string the name of the current window
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getWindowName();
-
-    /**
-     * Finds elements with specified XPath query.
-     *
-     * @param string $xpath
-     *
-     * @return NodeElement[]
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function find($xpath);
-
-    /**
-     * Returns element's tag name by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @return string
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getTagName($xpath);
-
-    /**
-     * Returns element's text by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @return string
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getText($xpath);
-
-    /**
-     * Returns element's inner html by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @return string
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getHtml($xpath);
-
-    /**
-     * Returns element's outer html by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @return string
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getOuterHtml($xpath);
-
-    /**
-     * Returns element's attribute by it's XPath query.
-     *
-     * @param string $xpath
-     * @param string $name
-     *
-     * @return string|null
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function getAttribute($xpath, $name);
-
-    /**
-     * Returns element's value by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @return string|bool|array
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::getValue
-     */
-    public function getValue($xpath);
-
-    /**
-     * Sets element's value by it's XPath query.
-     *
-     * @param string            $xpath
-     * @param string|bool|array $value
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::setValue
-     */
-    public function setValue($xpath, $value);
-
-    /**
-     * Checks checkbox by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::check
-     */
-    public function check($xpath);
-
-    /**
-     * Unchecks checkbox by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::uncheck
-     */
-    public function uncheck($xpath);
-
-    /**
-     * Checks whether checkbox or radio button located by it's XPath query is checked.
-     *
-     * @param string $xpath
-     *
-     * @return Boolean
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::isChecked
-     */
-    public function isChecked($xpath);
-
-    /**
-     * Selects option from select field or value in radio group located by it's XPath query.
-     *
-     * @param string  $xpath
-     * @param string  $value
-     * @param Boolean $multiple
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::selectOption
-     */
-    public function selectOption($xpath, $value, $multiple = false);
-
-    /**
-     * Checks whether select option, located by it's XPath query, is selected.
-     *
-     * @param string $xpath
-     *
-     * @return Boolean
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::isSelected
-     */
-    public function isSelected($xpath);
-
-    /**
-     * Clicks button or link located by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function click($xpath);
-
-    /**
-     * Double-clicks button or link located by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function doubleClick($xpath);
-
-    /**
-     * Right-clicks button or link located by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function rightClick($xpath);
-
-    /**
-     * Attaches file path to file field located by it's XPath query.
-     *
-     * @param string $xpath
-     * @param string $path
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::attachFile
-     */
-    public function attachFile($xpath, $path);
-
-    /**
-     * Checks whether element visible located by it's XPath query.
-     *
-     * @param string $xpath
-     *
-     * @return Boolean
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function isVisible($xpath);
-
-    /**
-     * Simulates a mouse over on the element.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function mouseOver($xpath);
-
-    /**
-     * Brings focus to element.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function focus($xpath);
-
-    /**
-     * Removes focus from element.
-     *
-     * @param string $xpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function blur($xpath);
-
-    /**
-     * Presses specific keyboard key.
-     *
-     * @param string         $xpath
-     * @param string|integer $char     could be either char ('b') or char-code (98)
-     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function keyPress($xpath, $char, $modifier = null);
-
-    /**
-     * Pressed down specific keyboard key.
-     *
-     * @param string         $xpath
-     * @param string|integer $char     could be either char ('b') or char-code (98)
-     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function keyDown($xpath, $char, $modifier = null);
-
-    /**
-     * Pressed up specific keyboard key.
-     *
-     * @param string         $xpath
-     * @param string|integer $char     could be either char ('b') or char-code (98)
-     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function keyUp($xpath, $char, $modifier = null);
-
-    /**
-     * Drag one element onto another.
-     *
-     * @param string $sourceXpath
-     * @param string $destinationXpath
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function dragTo($sourceXpath, $destinationXpath);
-
-    /**
-     * Executes JS script.
-     *
-     * @param string $script
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function executeScript($script);
-
-    /**
-     * Evaluates JS script.
-     *
-     * The "return" keyword is optional in the script passed as argument. Driver implementations
-     * must accept the expression both with and without the keyword.
-     *
-     * @param string $script
-     *
-     * @return mixed
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function evaluateScript($script);
-
-    /**
-     * Waits some time or until JS condition turns true.
-     *
-     * @param integer $timeout   timeout in milliseconds
-     * @param string  $condition JS condition
-     *
-     * @return boolean
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function wait($timeout, $condition);
-
-    /**
-     * Set the dimensions of the window.
-     *
-     * @param integer $width  set the window width, measured in pixels
-     * @param integer $height set the window height, measured in pixels
-     * @param string  $name   window name (null for the main window)
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function resizeWindow($width, $height, $name = null);
-
-    /**
-     * Maximize the window if it is not maximized already
-     *
-     * @param string $name window name (null for the main window)
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     */
-    public function maximizeWindow($name = null);
-
-    /**
-     * Submits the form.
-     *
-     * @param string $xpath Xpath.
-     *
-     * @throws UnsupportedDriverActionException When operation not supported by the driver
-     * @throws DriverException                  When the operation cannot be done
-     *
-     * @see \Behat\Mink\Element\NodeElement::submitForm
-     */
-    public function submitForm($xpath);
-}
diff --git a/core/vendor/behat/mink/src/Element/DocumentElement.php b/core/vendor/behat/mink/src/Element/DocumentElement.php
deleted file mode 100644
index edde3c35392bd138520130faa0efeb22c77d6cb4..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Element/DocumentElement.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Element;
-
-/**
- * Document element.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class DocumentElement extends TraversableElement
-{
-    /**
-     * Returns XPath for handled element.
-     *
-     * @return string
-     */
-    public function getXpath()
-    {
-        return '//html';
-    }
-
-    /**
-     * Returns document content.
-     *
-     * @return string
-     */
-    public function getContent()
-    {
-        return trim($this->getDriver()->getContent());
-    }
-
-    /**
-     * Check whether document has specified content.
-     *
-     * @param string $content
-     *
-     * @return Boolean
-     */
-    public function hasContent($content)
-    {
-        return $this->has('named', array(
-            'content', $this->getSelectorsHandler()->xpathLiteral($content),
-        ));
-    }
-}
diff --git a/core/vendor/behat/mink/src/Element/Element.php b/core/vendor/behat/mink/src/Element/Element.php
deleted file mode 100644
index 07e1e119efd5098a7bc9e800ff3d9a30bae796c8..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Element/Element.php
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Element;
-
-use Behat\Mink\Driver\DriverInterface;
-use Behat\Mink\Exception\ElementNotFoundException;
-use Behat\Mink\Selector\SelectorsHandler;
-use Behat\Mink\Selector\Xpath\Manipulator;
-use Behat\Mink\Session;
-
-/**
- * Base element.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-abstract class Element implements ElementInterface
-{
-    /**
-     * @var Session
-     */
-    private $session;
-
-    /**
-     * Driver.
-     *
-     * @var DriverInterface
-     */
-    private $driver;
-
-    /**
-     * @var SelectorsHandler
-     */
-    private $selectorsHandler;
-
-    /**
-     * @var Manipulator
-     */
-    private $xpathManipulator;
-
-    /**
-     * Initialize element.
-     *
-     * @param Session $session
-     */
-    public function __construct(Session $session)
-    {
-        $this->xpathManipulator = new Manipulator();
-        $this->session = $session;
-
-        $this->driver = $session->getDriver();
-        $this->selectorsHandler = $session->getSelectorsHandler();
-    }
-
-    /**
-     * Returns element session.
-     *
-     * @return Session
-     *
-     * @deprecated Accessing the session from the element is deprecated as of 1.6 and will be impossible in 2.0.
-     */
-    public function getSession()
-    {
-        return $this->session;
-    }
-
-    /**
-     * Returns element's driver.
-     *
-     * @return DriverInterface
-     */
-    protected function getDriver()
-    {
-        return $this->driver;
-    }
-
-    /**
-     * Returns selectors handler.
-     *
-     * @return SelectorsHandler
-     */
-    protected function getSelectorsHandler()
-    {
-        return $this->selectorsHandler;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function has($selector, $locator)
-    {
-        return null !== $this->find($selector, $locator);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isValid()
-    {
-        return 1 === count($this->getDriver()->find($this->getXpath()));
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function waitFor($timeout, $callback)
-    {
-        if (!is_callable($callback)) {
-            throw new \InvalidArgumentException('Given callback is not a valid callable');
-        }
-
-        $start = microtime(true);
-        $end = $start + $timeout;
-
-        do {
-            $result = call_user_func($callback, $this);
-
-            if ($result) {
-                break;
-            }
-
-            usleep(100000);
-        } while (microtime(true) < $end);
-
-        return $result;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function find($selector, $locator)
-    {
-        $items = $this->findAll($selector, $locator);
-
-        return count($items) ? current($items) : null;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function findAll($selector, $locator)
-    {
-        if ('named' === $selector) {
-            $items = $this->findAll('named_exact', $locator);
-            if (empty($items)) {
-                $items = $this->findAll('named_partial', $locator);
-            }
-
-            return $items;
-        }
-
-        $xpath = $this->getSelectorsHandler()->selectorToXpath($selector, $locator);
-        $xpath = $this->xpathManipulator->prepend($xpath, $this->getXpath());
-
-        return $this->getDriver()->find($xpath);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getText()
-    {
-        return $this->getDriver()->getText($this->getXpath());
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHtml()
-    {
-        return $this->getDriver()->getHtml($this->getXpath());
-    }
-
-    /**
-     * Returns element outer html.
-     *
-     * @return string
-     */
-    public function getOuterHtml()
-    {
-        return $this->getDriver()->getOuterHtml($this->getXpath());
-    }
-
-    /**
-     * Builds an ElementNotFoundException
-     *
-     * This is an helper to build the ElementNotFoundException without
-     * needing to use the deprecated getSession accessor in child classes.
-     *
-     * @param string      $type
-     * @param string|null $selector
-     * @param string|null $locator
-     *
-     * @return ElementNotFoundException
-     */
-    protected function elementNotFound($type, $selector = null, $locator = null)
-    {
-        return new ElementNotFoundException($this->session, $type, $selector, $locator);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Element/ElementInterface.php b/core/vendor/behat/mink/src/Element/ElementInterface.php
deleted file mode 100644
index 8c134b96fcd5da1c94bd3bcb93e99af5084d0cb1..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Element/ElementInterface.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Element;
-
-use Behat\Mink\Session;
-
-/**
- * Element interface.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-interface ElementInterface
-{
-    /**
-     * Returns XPath for handled element.
-     *
-     * @return string
-     */
-    public function getXpath();
-
-    /**
-     * Returns element's session.
-     *
-     * @return Session
-     *
-     * @deprecated Accessing the session from the element is deprecated as of 1.6 and will be impossible in 2.0.
-     */
-    public function getSession();
-
-    /**
-     * Checks whether element with specified selector exists inside the current element.
-     *
-     * @param string       $selector selector engine name
-     * @param string|array $locator  selector locator
-     *
-     * @return Boolean
-     *
-     * @see ElementInterface::findAll for the supported selectors
-     */
-    public function has($selector, $locator);
-
-    /**
-     * Checks if an element still exists in the DOM.
-     *
-     * @return boolean
-     */
-    public function isValid();
-
-    /**
-     * Waits for an element(-s) to appear and returns it.
-     *
-     * @param int|float $timeout  Maximal allowed waiting time in seconds.
-     * @param callable  $callback Callback, which result is both used as waiting condition and returned.
-     *                            Will receive reference to `this element` as first argument.
-     *
-     * @return mixed
-     * @throws \InvalidArgumentException When invalid callback given.
-     */
-    public function waitFor($timeout, $callback);
-
-    /**
-     * Finds first element with specified selector inside the current element.
-     *
-     * @param string       $selector selector engine name
-     * @param string|array $locator  selector locator
-     *
-     * @return NodeElement|null
-     *
-     * @see ElementInterface::findAll for the supported selectors
-     */
-    public function find($selector, $locator);
-
-    /**
-     * Finds all elements with specified selector inside the current element.
-     *
-     * Valid selector engines are named, xpath, css, named_partial and named_exact.
-     *
-     * 'named' is a pseudo selector engine which prefers an exact match but
-     * will return a partial match if no exact match is found.
-     * 'xpath' is a pseudo selector engine supported by SelectorsHandler.
-     *
-     * More selector engines can be registered in the SelectorsHandler.
-     *
-     * @param string       $selector selector engine name
-     * @param string|array $locator  selector locator
-     *
-     * @return NodeElement[]
-     *
-     * @see NamedSelector for the locators supported by the named selectors
-     */
-    public function findAll($selector, $locator);
-
-    /**
-     * Returns element text (inside tag).
-     *
-     * @return string
-     */
-    public function getText();
-
-    /**
-     * Returns element inner html.
-     *
-     * @return string
-     */
-    public function getHtml();
-}
diff --git a/core/vendor/behat/mink/src/Element/NodeElement.php b/core/vendor/behat/mink/src/Element/NodeElement.php
deleted file mode 100644
index 8e43546267a0bdbb217782954f99c984688656cb..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Element/NodeElement.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Element;
-
-use Behat\Mink\Session;
-use Behat\Mink\Exception\ElementNotFoundException;
-
-/**
- * Page element node.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class NodeElement extends TraversableElement
-{
-    private $xpath;
-
-    /**
-     * Initializes node element.
-     *
-     * @param string  $xpath   element xpath
-     * @param Session $session session instance
-     */
-    public function __construct($xpath, Session $session)
-    {
-        $this->xpath = $xpath;
-
-        parent::__construct($session);
-    }
-
-    /**
-     * Returns XPath for handled element.
-     *
-     * @return string
-     */
-    public function getXpath()
-    {
-        return $this->xpath;
-    }
-
-    /**
-     * Returns parent element to the current one.
-     *
-     * @return NodeElement
-     */
-    public function getParent()
-    {
-        return $this->find('xpath', '..');
-    }
-
-    /**
-     * Returns current node tag name.
-     *
-     * The value is always returned in lowercase to allow an easy comparison.
-     *
-     * @return string
-     */
-    public function getTagName()
-    {
-        return strtolower($this->getDriver()->getTagName($this->getXpath()));
-    }
-
-    /**
-     * Returns the value of the form field or option element.
-     *
-     * For checkbox fields, the value is a boolean indicating whether the checkbox is checked.
-     * For radio buttons, the value is the value of the selected button in the radio group
-     *      or null if no button is selected.
-     * For single select boxes, the value is the value of the selected option.
-     * For multiple select boxes, the value is an array of selected option values.
-     * for file inputs, the return value is undefined given that browsers don't allow accessing
-     *      the value of file inputs for security reasons. Some drivers may allow accessing the
-     *      path of the file set in the field, but this is not required if it cannot be implemented.
-     * For textarea elements and all textual fields, the value is the content of the field.
-     * Form option elements, the value is the value of the option (the value attribute or the text
-     *      content if the attribute is not set).
-     *
-     * Calling this method on other elements than form fields or option elements is not allowed.
-     *
-     * @return string|bool|array
-     */
-    public function getValue()
-    {
-        return $this->getDriver()->getValue($this->getXpath());
-    }
-
-    /**
-     * Sets the value of the form field.
-     *
-     * Calling this method on other elements than form fields is not allowed.
-     *
-     * @param string|bool|array $value
-     *
-     * @see NodeElement::getValue for the format of the value for each type of field
-     */
-    public function setValue($value)
-    {
-        $this->getDriver()->setValue($this->getXpath(), $value);
-    }
-
-    /**
-     * Checks whether element has attribute with specified name.
-     *
-     * @param string $name
-     *
-     * @return Boolean
-     */
-    public function hasAttribute($name)
-    {
-        return null !== $this->getDriver()->getAttribute($this->getXpath(), $name);
-    }
-
-    /**
-     * Returns specified attribute value.
-     *
-     * @param string $name
-     *
-     * @return string|null
-     */
-    public function getAttribute($name)
-    {
-        return $this->getDriver()->getAttribute($this->getXpath(), $name);
-    }
-
-    /**
-     * Checks whether an element has a named CSS class
-     *
-     * @param string $className Name of the class
-     *
-     * @return boolean
-     */
-    public function hasClass($className)
-    {
-        if ($this->hasAttribute('class')) {
-            return in_array($className, explode(' ', $this->getAttribute('class')));
-        }
-
-        return false;
-    }
-
-    /**
-     * Clicks current node.
-     */
-    public function click()
-    {
-        $this->getDriver()->click($this->getXpath());
-    }
-
-    /**
-     * Presses current button.
-     */
-    public function press()
-    {
-        $this->click();
-    }
-
-    /**
-     * Double-clicks current node.
-     */
-    public function doubleClick()
-    {
-        $this->getDriver()->doubleClick($this->getXpath());
-    }
-
-    /**
-     * Right-clicks current node.
-     */
-    public function rightClick()
-    {
-        $this->getDriver()->rightClick($this->getXpath());
-    }
-
-    /**
-     * Checks current node if it's a checkbox field.
-     */
-    public function check()
-    {
-        $this->getDriver()->check($this->getXpath());
-    }
-
-    /**
-     * Unchecks current node if it's a checkbox field.
-     */
-    public function uncheck()
-    {
-        $this->getDriver()->uncheck($this->getXpath());
-    }
-
-    /**
-     * Checks whether current node is checked if it's a checkbox or radio field.
-     *
-     * Calling this method on any other elements is not allowed.
-     *
-     * @return Boolean
-     */
-    public function isChecked()
-    {
-        return (Boolean) $this->getDriver()->isChecked($this->getXpath());
-    }
-
-    /**
-     * Selects specified option for select field or specified radio button in the group
-     *
-     * If the current node is a select box, this selects the option found by its value or
-     * its text.
-     * If the current node is a radio button, this selects the radio button with the given
-     * value in the radio button group of the current node.
-     *
-     * Calling this method on any other elements is not allowed.
-     *
-     * @param string  $option
-     * @param Boolean $multiple whether the option should be added to the selection for multiple selects
-     *
-     * @throws ElementNotFoundException when the option is not found in the select box
-     */
-    public function selectOption($option, $multiple = false)
-    {
-        if ('select' !== $this->getTagName()) {
-            $this->getDriver()->selectOption($this->getXpath(), $option, $multiple);
-
-            return;
-        }
-
-        $opt = $this->find('named', array(
-            'option', $this->getSelectorsHandler()->xpathLiteral($option),
-        ));
-
-        if (null === $opt) {
-            throw $this->elementNotFound('select option', 'value|text', $option);
-        }
-
-        $this->getDriver()->selectOption($this->getXpath(), $opt->getValue(), $multiple);
-    }
-
-    /**
-     * Checks whether current node is selected if it's a option field.
-     *
-     * Calling this method on any other elements is not allowed.
-     *
-     * @return Boolean
-     */
-    public function isSelected()
-    {
-        return (Boolean) $this->getDriver()->isSelected($this->getXpath());
-    }
-
-    /**
-     * Attach file to current node if it's a file input.
-     *
-     * Calling this method on any other elements than file input is not allowed.
-     *
-     * @param string $path path to file (local)
-     */
-    public function attachFile($path)
-    {
-        $this->getDriver()->attachFile($this->getXpath(), $path);
-    }
-
-    /**
-     * Checks whether current node is visible on page.
-     *
-     * @return Boolean
-     */
-    public function isVisible()
-    {
-        return (Boolean) $this->getDriver()->isVisible($this->getXpath());
-    }
-
-    /**
-     * Simulates a mouse over on the element.
-     */
-    public function mouseOver()
-    {
-        $this->getDriver()->mouseOver($this->getXpath());
-    }
-
-    /**
-     * Drags current node onto other node.
-     *
-     * @param ElementInterface $destination other node
-     */
-    public function dragTo(ElementInterface $destination)
-    {
-        $this->getDriver()->dragTo($this->getXpath(), $destination->getXpath());
-    }
-
-    /**
-     * Brings focus to element.
-     */
-    public function focus()
-    {
-        $this->getDriver()->focus($this->getXpath());
-    }
-
-    /**
-     * Removes focus from element.
-     */
-    public function blur()
-    {
-        $this->getDriver()->blur($this->getXpath());
-    }
-
-    /**
-     * Presses specific keyboard key.
-     *
-     * @param string|integer $char     could be either char ('b') or char-code (98)
-     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
-     */
-    public function keyPress($char, $modifier = null)
-    {
-        $this->getDriver()->keyPress($this->getXpath(), $char, $modifier);
-    }
-
-    /**
-     * Pressed down specific keyboard key.
-     *
-     * @param string|integer $char     could be either char ('b') or char-code (98)
-     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
-     */
-    public function keyDown($char, $modifier = null)
-    {
-        $this->getDriver()->keyDown($this->getXpath(), $char, $modifier);
-    }
-
-    /**
-     * Pressed up specific keyboard key.
-     *
-     * @param string|integer $char     could be either char ('b') or char-code (98)
-     * @param string         $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta')
-     */
-    public function keyUp($char, $modifier = null)
-    {
-        $this->getDriver()->keyUp($this->getXpath(), $char, $modifier);
-    }
-
-    /**
-     * Submits the form.
-     *
-     * Calling this method on anything else than form elements is not allowed.
-     */
-    public function submit()
-    {
-        $this->getDriver()->submitForm($this->getXpath());
-    }
-}
diff --git a/core/vendor/behat/mink/src/Element/TraversableElement.php b/core/vendor/behat/mink/src/Element/TraversableElement.php
deleted file mode 100644
index 0621af3e55d99609577713c18084b8a12e5e9625..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Element/TraversableElement.php
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Element;
-
-use Behat\Mink\Exception\ElementNotFoundException;
-
-/**
- * Traversable element.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-abstract class TraversableElement extends Element
-{
-    /**
-     * Finds element by its id.
-     *
-     * @param string $id element id
-     *
-     * @return NodeElement|null
-     */
-    public function findById($id)
-    {
-        $id = $this->getSelectorsHandler()->xpathLiteral($id);
-
-        return $this->find('named', array('id', $id));
-    }
-
-    /**
-     * Checks whether element has a link with specified locator.
-     *
-     * @param string $locator link id, title, text or image alt
-     *
-     * @return Boolean
-     */
-    public function hasLink($locator)
-    {
-        return null !== $this->findLink($locator);
-    }
-
-    /**
-     * Finds link with specified locator.
-     *
-     * @param string $locator link id, title, text or image alt
-     *
-     * @return NodeElement|null
-     */
-    public function findLink($locator)
-    {
-        return $this->find('named', array(
-            'link', $this->getSelectorsHandler()->xpathLiteral($locator),
-        ));
-    }
-
-    /**
-     * Clicks link with specified locator.
-     *
-     * @param string $locator link id, title, text or image alt
-     *
-     * @throws ElementNotFoundException
-     */
-    public function clickLink($locator)
-    {
-        $link = $this->findLink($locator);
-
-        if (null === $link) {
-            throw $this->elementNotFound('link', 'id|title|alt|text', $locator);
-        }
-
-        $link->click();
-    }
-
-    /**
-     * Checks whether element has a button (input[type=submit|image|button|reset], button) with specified locator.
-     *
-     * @param string $locator button id, value or alt
-     *
-     * @return Boolean
-     */
-    public function hasButton($locator)
-    {
-        return null !== $this->findButton($locator);
-    }
-
-    /**
-     * Finds button (input[type=submit|image|button|reset], button) with specified locator.
-     *
-     * @param string $locator button id, value or alt
-     *
-     * @return NodeElement|null
-     */
-    public function findButton($locator)
-    {
-        return $this->find('named', array(
-            'button', $this->getSelectorsHandler()->xpathLiteral($locator),
-        ));
-    }
-
-    /**
-     * Presses button (input[type=submit|image|button|reset], button) with specified locator.
-     *
-     * @param string $locator button id, value or alt
-     *
-     * @throws ElementNotFoundException
-     */
-    public function pressButton($locator)
-    {
-        $button = $this->findButton($locator);
-
-        if (null === $button) {
-            throw $this->elementNotFound('button', 'id|name|title|alt|value', $locator);
-        }
-
-        $button->press();
-    }
-
-    /**
-     * Checks whether element has a field (input, textarea, select) with specified locator.
-     *
-     * @param string $locator input id, name or label
-     *
-     * @return Boolean
-     */
-    public function hasField($locator)
-    {
-        return null !== $this->findField($locator);
-    }
-
-    /**
-     * Finds field (input, textarea, select) with specified locator.
-     *
-     * @param string $locator input id, name or label
-     *
-     * @return NodeElement|null
-     */
-    public function findField($locator)
-    {
-        return $this->find('named', array(
-            'field', $this->getSelectorsHandler()->xpathLiteral($locator),
-        ));
-    }
-
-    /**
-     * Fills in field (input, textarea, select) with specified locator.
-     *
-     * @param string $locator input id, name or label
-     * @param string $value   value
-     *
-     * @throws ElementNotFoundException
-     *
-     * @see NodeElement::setValue
-     */
-    public function fillField($locator, $value)
-    {
-        $field = $this->findField($locator);
-
-        if (null === $field) {
-            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
-        }
-
-        $field->setValue($value);
-    }
-
-    /**
-     * Checks whether element has a checkbox with specified locator, which is checked.
-     *
-     * @param string $locator input id, name or label
-     *
-     * @return Boolean
-     *
-     * @see NodeElement::isChecked
-     */
-    public function hasCheckedField($locator)
-    {
-        $field = $this->findField($locator);
-
-        return null !== $field && $field->isChecked();
-    }
-
-    /**
-     * Checks whether element has a checkbox with specified locator, which is unchecked.
-     *
-     * @param string $locator input id, name or label
-     *
-     * @return Boolean
-     *
-     * @see NodeElement::isChecked
-     */
-    public function hasUncheckedField($locator)
-    {
-        $field = $this->findField($locator);
-
-        return null !== $field && !$field->isChecked();
-    }
-
-    /**
-     * Checks checkbox with specified locator.
-     *
-     * @param string $locator input id, name or label
-     *
-     * @throws ElementNotFoundException
-     */
-    public function checkField($locator)
-    {
-        $field = $this->findField($locator);
-
-        if (null === $field) {
-            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
-        }
-
-        $field->check();
-    }
-
-    /**
-     * Unchecks checkbox with specified locator.
-     *
-     * @param string $locator input id, name or label
-     *
-     * @throws ElementNotFoundException
-     */
-    public function uncheckField($locator)
-    {
-        $field = $this->findField($locator);
-
-        if (null === $field) {
-            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
-        }
-
-        $field->uncheck();
-    }
-
-    /**
-     * Checks whether element has a select field with specified locator.
-     *
-     * @param string $locator select id, name or label
-     *
-     * @return Boolean
-     */
-    public function hasSelect($locator)
-    {
-        return $this->has('named', array(
-            'select', $this->getSelectorsHandler()->xpathLiteral($locator),
-        ));
-    }
-
-    /**
-     * Selects option from select field with specified locator.
-     *
-     * @param string  $locator  input id, name or label
-     * @param string  $value    option value
-     * @param Boolean $multiple select multiple options
-     *
-     * @throws ElementNotFoundException
-     *
-     * @see NodeElement::selectOption
-     */
-    public function selectFieldOption($locator, $value, $multiple = false)
-    {
-        $field = $this->findField($locator);
-
-        if (null === $field) {
-            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
-        }
-
-        $field->selectOption($value, $multiple);
-    }
-
-    /**
-     * Checks whether element has a table with specified locator.
-     *
-     * @param string $locator table id or caption
-     *
-     * @return Boolean
-     */
-    public function hasTable($locator)
-    {
-        return $this->has('named', array(
-            'table', $this->getSelectorsHandler()->xpathLiteral($locator),
-        ));
-    }
-
-    /**
-     * Attach file to file field with specified locator.
-     *
-     * @param string $locator input id, name or label
-     * @param string $path    path to file
-     *
-     * @throws ElementNotFoundException
-     *
-     * @see NodeElement::attachFile
-     */
-    public function attachFileToField($locator, $path)
-    {
-        $field = $this->findField($locator);
-
-        if (null === $field) {
-            throw $this->elementNotFound('form field', 'id|name|label|value', $locator);
-        }
-
-        $field->attachFile($path);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/DriverException.php b/core/vendor/behat/mink/src/Exception/DriverException.php
deleted file mode 100644
index 840f8bdeaeade1ad85f79ce3d24398b07b8a6f3d..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/DriverException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-/**
- * Exception thrown by drivers when they fail to perform an action.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class DriverException extends Exception
-{
-    /**
-     * Initializes exception.
-     *
-     * @param string          $message
-     * @param int             $code
-     * @param \Exception|null $previous
-     */
-    public function __construct($message, $code = 0, \Exception $previous = null)
-    {
-        parent::__construct($message, $code, $previous);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/ElementException.php b/core/vendor/behat/mink/src/Exception/ElementException.php
deleted file mode 100644
index 49d5c6c9d59d7be20990875766101d9d7fd0827d..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/ElementException.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-use Behat\Mink\Element\Element;
-
-/**
- * A standard way for elements to re-throw exceptions
- *
- * @deprecated This exception class is not used anymore in Mink 1.6 and will be removed in 2.0
- *
- * @author Chris Worfolk <xmeltrut@gmail.com>
- */
-class ElementException extends Exception
-{
-    private $element;
-
-    /**
-     * Initialises exception.
-     *
-     * @param Element    $element   optional message
-     * @param \Exception $exception exception
-     */
-    public function __construct(Element $element, \Exception $exception)
-    {
-        $this->element = $element;
-
-        parent::__construct(sprintf("Exception thrown by %s\n%s", $element->getXpath(), $exception->getMessage()));
-    }
-
-    /**
-     * Override default toString so we don't send a full backtrace in verbose mode.
-     *
-     * @return string
-     */
-    public function __toString()
-    {
-        return $this->getMessage();
-    }
-
-    /**
-     * Get the element that caused the exception
-     *
-     * @return Element
-     */
-    public function getElement()
-    {
-        return $this->element;
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/ElementHtmlException.php b/core/vendor/behat/mink/src/Exception/ElementHtmlException.php
deleted file mode 100644
index 99e2ea601dabb4549b7fa3b044e1ccd9a2060794..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/ElementHtmlException.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-use Behat\Mink\Session;
-use Behat\Mink\Element\Element;
-
-/**
- * Exception thrown when an expectation on the HTML of an element fails.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class ElementHtmlException extends ExpectationException
-{
-    /**
-     * Element instance.
-     *
-     * @var Element
-     */
-    protected $element;
-
-    /**
-     * Initializes exception.
-     *
-     * @param string     $message   optional message
-     * @param Session    $session   session instance
-     * @param Element    $element   element
-     * @param \Exception $exception expectation exception
-     */
-    public function __construct($message, Session $session, Element $element, \Exception $exception = null)
-    {
-        $this->element = $element;
-
-        parent::__construct($message, $session, $exception);
-    }
-
-    protected function getContext()
-    {
-        return $this->element->getOuterHtml();
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/ElementNotFoundException.php b/core/vendor/behat/mink/src/Exception/ElementNotFoundException.php
deleted file mode 100644
index 95fd5f0b8739a1e8d11de245b4dcbe36fb4b9ae2..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/ElementNotFoundException.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-use Behat\Mink\Session;
-
-/**
- * Exception thrown when an expected element is not found.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class ElementNotFoundException extends ExpectationException
-{
-    /**
-     * Initializes exception.
-     *
-     * @param Session $session  session instance
-     * @param string  $type     element type
-     * @param string  $selector element selector type
-     * @param string  $locator  element locator
-     */
-    public function __construct(Session $session, $type = null, $selector = null, $locator = null)
-    {
-        $message = '';
-
-        if (null !== $type) {
-            $message .= ucfirst($type);
-        } else {
-            $message .= 'Tag';
-        }
-
-        if (null !== $locator) {
-            if (null === $selector || in_array($selector, array('css', 'xpath'))) {
-                $selector = 'matching '.($selector ?: 'locator');
-            } else {
-                $selector = 'with '.$selector;
-            }
-            $message .= ' '.$selector.' "'.$locator.'"';
-        }
-
-        $message .= ' not found.';
-
-        parent::__construct($message, $session);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/ElementTextException.php b/core/vendor/behat/mink/src/Exception/ElementTextException.php
deleted file mode 100644
index 5efff0fc91c92aa74aff9774df3b52c04dfde81f..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/ElementTextException.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-/**
- * Exception thrown when an expectation on the text of an element fails.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class ElementTextException extends ElementHtmlException
-{
-    protected function getContext()
-    {
-        return $this->element->getText();
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/Exception.php b/core/vendor/behat/mink/src/Exception/Exception.php
deleted file mode 100644
index 4662a5ba49bd01cc49c643f7d65ef0ce7b07ad65..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/Exception.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-/**
- * Mink base exception class.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-abstract class Exception extends \Exception
-{
-}
diff --git a/core/vendor/behat/mink/src/Exception/ExpectationException.php b/core/vendor/behat/mink/src/Exception/ExpectationException.php
deleted file mode 100644
index 25034d1e73e6f8e96f3a7fe3a54bcdf94d12361d..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/ExpectationException.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-use Behat\Mink\Session;
-
-/**
- * Exception thrown for failed expectations.
- *
- * Some specialized child classes are available to customize the error rendering.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class ExpectationException extends Exception
-{
-    private $session;
-
-    /**
-     * Initializes exception.
-     *
-     * @param string     $message   optional message
-     * @param Session    $session   session instance
-     * @param \Exception $exception expectation exception
-     */
-    public function __construct($message, Session $session, \Exception $exception = null)
-    {
-        $this->session = $session;
-
-        if (!$message && null !== $exception) {
-            $message = $exception->getMessage();
-        }
-
-        parent::__construct($message, 0, $exception);
-    }
-
-    /**
-     * Returns exception message with additional context info.
-     *
-     * @return string
-     */
-    public function __toString()
-    {
-        try {
-            $pageText = $this->pipeString($this->trimString($this->getContext())."\n");
-            $string   = sprintf("%s\n\n%s%s", $this->getMessage(), $this->getResponseInfo(), $pageText);
-        } catch (\Exception $e) {
-            return $this->getMessage();
-        }
-
-        return $string;
-    }
-
-    /**
-     * Gets the context rendered for this exception
-     *
-     * @return string
-     */
-    protected function getContext()
-    {
-        return $this->trimBody($this->getSession()->getPage()->getContent());
-    }
-
-    /**
-     * Returns exception session.
-     *
-     * @return Session
-     */
-    protected function getSession()
-    {
-        return $this->session;
-    }
-
-    /**
-     * Prepends every line in a string with pipe (|).
-     *
-     * @param string $string
-     *
-     * @return string
-     */
-    protected function pipeString($string)
-    {
-        return '|  '.strtr($string, array("\n" => "\n|  "));
-    }
-
-    /**
-     * Removes response header/footer, letting only <body /> content.
-     *
-     * @param string $string response content
-     *
-     * @return string
-     */
-    protected function trimBody($string)
-    {
-        $string = preg_replace(array('/^.*<body>/s', '/<\/body>.*$/s'), array('<body>', '</body>'), $string);
-
-        return $string;
-    }
-
-    /**
-     * Trims string to specified number of chars.
-     *
-     * @param string  $string response content
-     * @param integer $count  trim count
-     *
-     * @return string
-     */
-    protected function trimString($string, $count = 1000)
-    {
-        $string = trim($string);
-
-        if ($count < mb_strlen($string)) {
-            return mb_substr($string, 0, $count - 3).'...';
-        }
-
-        return $string;
-    }
-
-    /**
-     * Returns response information string.
-     *
-     * @return string
-     */
-    protected function getResponseInfo()
-    {
-        $driver = basename(str_replace('\\', '/', get_class($this->session->getDriver())));
-
-        $info = '+--[ ';
-        try {
-            $info .= 'HTTP/1.1 '.$this->session->getStatusCode().' | ';
-        } catch (UnsupportedDriverActionException $e) {
-            // Ignore the status code when not supported
-        }
-        $info .= $this->session->getCurrentUrl().' | '.$driver." ]\n|\n";
-
-        return $info;
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/ResponseTextException.php b/core/vendor/behat/mink/src/Exception/ResponseTextException.php
deleted file mode 100644
index 145ed6da05b1f91025ed7a9ec92cd7d0d5670900..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/ResponseTextException.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-/**
- * Exception thrown when an expectation on the response text fails.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class ResponseTextException extends ExpectationException
-{
-    protected function getContext()
-    {
-        return $this->getSession()->getPage()->getText();
-    }
-}
diff --git a/core/vendor/behat/mink/src/Exception/UnsupportedDriverActionException.php b/core/vendor/behat/mink/src/Exception/UnsupportedDriverActionException.php
deleted file mode 100644
index d02969b6297e81fe542204bfe6f238f4fb8caad4..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Exception/UnsupportedDriverActionException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Exception;
-
-use Behat\Mink\Driver\DriverInterface;
-
-/**
- * Exception thrown by drivers when they don't support the requested action.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class UnsupportedDriverActionException extends DriverException
-{
-    /**
-     * Initializes exception.
-     *
-     * @param string          $template what is unsupported?
-     * @param DriverInterface $driver   driver instance
-     * @param \Exception      $previous previous exception
-     */
-    public function __construct($template, DriverInterface $driver, \Exception $previous = null)
-    {
-        $message = sprintf($template, get_class($driver));
-
-        parent::__construct($message, 0, $previous);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Mink.php b/core/vendor/behat/mink/src/Mink.php
deleted file mode 100644
index d1621b174438f87e6bd3fa25f1d3b73864f86b34..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Mink.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink;
-
-/**
- * Mink sessions manager.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class Mink
-{
-    private $defaultSessionName;
-
-    /**
-     * Sessions.
-     *
-     * @var Session[]
-     */
-    private $sessions = array();
-
-    /**
-     * Initializes manager.
-     *
-     * @param Session[] $sessions
-     */
-    public function __construct(array $sessions = array())
-    {
-        foreach ($sessions as $name => $session) {
-            $this->registerSession($name, $session);
-        }
-    }
-
-    /**
-     * Stops all started sessions.
-     */
-    public function __destruct()
-    {
-        $this->stopSessions();
-    }
-
-    /**
-     * Registers new session.
-     *
-     * @param string  $name
-     * @param Session $session
-     */
-    public function registerSession($name, Session $session)
-    {
-        $name = strtolower($name);
-
-        $this->sessions[$name] = $session;
-    }
-
-    /**
-     * Checks whether session with specified name is registered.
-     *
-     * @param string $name
-     *
-     * @return Boolean
-     */
-    public function hasSession($name)
-    {
-        return isset($this->sessions[strtolower($name)]);
-    }
-
-    /**
-     * Sets default session name to use.
-     *
-     * @param string $name name of the registered session
-     *
-     * @throws \InvalidArgumentException
-     */
-    public function setDefaultSessionName($name)
-    {
-        $name = strtolower($name);
-
-        if (!isset($this->sessions[$name])) {
-            throw new \InvalidArgumentException(sprintf('Session "%s" is not registered.', $name));
-        }
-
-        $this->defaultSessionName = $name;
-    }
-
-    /**
-     * Returns default session name or null if none.
-     *
-     * @return null|string
-     */
-    public function getDefaultSessionName()
-    {
-        return $this->defaultSessionName;
-    }
-
-    /**
-     * Returns registered session by it's name or active one and automatically starts it if required.
-     *
-     * @param string $name session name
-     *
-     * @return Session
-     *
-     * @throws \InvalidArgumentException If the named session is not registered
-     */
-    public function getSession($name = null)
-    {
-        $session = $this->locateSession($name);
-
-        // start session if needed
-        if (!$session->isStarted()) {
-            $session->start();
-        }
-
-        return $session;
-    }
-
-    /**
-     * Checks whether a named session (or the default session) has already been started
-     *
-     * @param string $name session name - if null then the default session will be checked
-     *
-     * @return bool whether the session has been started
-     *
-     * @throws \InvalidArgumentException If the named session is not registered
-     */
-    public function isSessionStarted($name = null)
-    {
-        $session = $this->locateSession($name);
-
-        return $session->isStarted();
-    }
-
-    /**
-     * Returns session asserter.
-     *
-     * @param Session|string $session session object or name
-     *
-     * @return WebAssert
-     */
-    public function assertSession($session = null)
-    {
-        if (!($session instanceof Session)) {
-            $session = $this->getSession($session);
-        }
-
-        return new WebAssert($session);
-    }
-
-    /**
-     * Resets all started sessions.
-     */
-    public function resetSessions()
-    {
-        foreach ($this->sessions as $session) {
-            if ($session->isStarted()) {
-                $session->reset();
-            }
-        }
-    }
-
-    /**
-     * Restarts all started sessions.
-     */
-    public function restartSessions()
-    {
-        foreach ($this->sessions as $session) {
-            if ($session->isStarted()) {
-                $session->restart();
-            }
-        }
-    }
-
-    /**
-     * Stops all started sessions.
-     */
-    public function stopSessions()
-    {
-        foreach ($this->sessions as $session) {
-            if ($session->isStarted()) {
-                $session->stop();
-            }
-        }
-    }
-
-    /**
-     * Returns the named or default session without starting it.
-     *
-     * @param string $name session name
-     *
-     * @return Session
-     *
-     * @throws \InvalidArgumentException If the named session is not registered
-     */
-    protected function locateSession($name = null)
-    {
-        $name = strtolower($name) ?: $this->defaultSessionName;
-
-        if (null === $name) {
-            throw new \InvalidArgumentException('Specify session name to get');
-        }
-
-        if (!isset($this->sessions[$name])) {
-            throw new \InvalidArgumentException(sprintf('Session "%s" is not registered.', $name));
-        }
-
-        $session = $this->sessions[$name];
-
-        return $session;
-    }
-}
diff --git a/core/vendor/behat/mink/src/Selector/CssSelector.php b/core/vendor/behat/mink/src/Selector/CssSelector.php
deleted file mode 100644
index 363658635ca4e9d06d835a0b6165815bce314ed1..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/CssSelector.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector;
-
-use Symfony\Component\CssSelector\CssSelector as CSS;
-
-/**
- * CSS selector engine. Transforms CSS to XPath.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class CssSelector implements SelectorInterface
-{
-    /**
-     * Translates CSS into XPath.
-     *
-     * @param string|array $locator current selector locator
-     *
-     * @return string
-     */
-    public function translateToXPath($locator)
-    {
-        if (!is_string($locator)) {
-            throw new \InvalidArgumentException('The CssSelector expects to get a string as locator');
-        }
-
-        return CSS::toXPath($locator);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Selector/ExactNamedSelector.php b/core/vendor/behat/mink/src/Selector/ExactNamedSelector.php
deleted file mode 100644
index 03315a9cffa43fe152e5d4fac9ca7e2adcffdae0..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/ExactNamedSelector.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector;
-
-/**
- * Exact match selector engine. Like the Named selector engine but ignores partial matches.
- */
-class ExactNamedSelector extends NamedSelector
-{
-    public function __construct()
-    {
-        $this->registerReplacement('%tagTextMatch%', 'normalize-space(string(.)) = %locator%');
-        $this->registerReplacement('%valueMatch%', './@value = %locator%');
-        $this->registerReplacement('%titleMatch%', './@title = %locator%');
-        $this->registerReplacement('%altMatch%', './@alt = %locator%');
-        $this->registerReplacement('%relMatch%', './@rel = %locator%');
-        $this->registerReplacement('%labelAttributeMatch%', './@label = %locator%');
-
-        parent::__construct();
-    }
-}
diff --git a/core/vendor/behat/mink/src/Selector/NamedSelector.php b/core/vendor/behat/mink/src/Selector/NamedSelector.php
deleted file mode 100644
index 4845f994f9e09368c95e1acfefecc874d3a156b8..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/NamedSelector.php
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector;
-
-/**
- * Named selectors engine. Uses registered XPath selectors to create new expressions.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class NamedSelector implements SelectorInterface
-{
-    private $replacements = array(
-        // simple replacements
-        '%lowercaseType%' => "translate(./@type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')",
-        '%lowercaseRole%' => "translate(./@role, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')",
-        '%tagTextMatch%' => 'contains(normalize-space(string(.)), %locator%)',
-        '%labelTextMatch%' => './@id = //label[%tagTextMatch%]/@for',
-        '%idMatch%' => './@id = %locator%',
-        '%valueMatch%' => 'contains(./@value, %locator%)',
-        '%idOrValueMatch%' => '(%idMatch% or %valueMatch%)',
-        '%idOrNameMatch%' => '(%idMatch% or ./@name = %locator%)',
-        '%placeholderMatch%' => './@placeholder = %locator%',
-        '%titleMatch%' => 'contains(./@title, %locator%)',
-        '%altMatch%' => 'contains(./@alt, %locator%)',
-        '%relMatch%' => 'contains(./@rel, %locator%)',
-        '%labelAttributeMatch%' => 'contains(./@label, %locator%)',
-
-        // complex replacements
-        '%inputTypeWithoutPlaceholderFilter%' => "%lowercaseType% = 'radio' or %lowercaseType% = 'checkbox' or %lowercaseType% = 'file'",
-        '%fieldFilterWithPlaceholder%' => 'self::input[not(%inputTypeWithoutPlaceholderFilter%)] | self::textarea',
-        '%fieldMatchWithPlaceholder%' => '(%idOrNameMatch% or %labelTextMatch% or %placeholderMatch%)',
-        '%fieldMatchWithoutPlaceholder%' => '(%idOrNameMatch% or %labelTextMatch%)',
-        '%fieldFilterWithoutPlaceholder%' => 'self::input[%inputTypeWithoutPlaceholderFilter%] | self::select',
-        '%buttonTypeFilter%' => "%lowercaseType% = 'submit' or %lowercaseType% = 'image' or %lowercaseType% = 'button' or %lowercaseType% = 'reset'",
-        '%notFieldTypeFilter%' => "not(%buttonTypeFilter% or %lowercaseType% = 'hidden')",
-        '%buttonMatch%' => '%idOrNameMatch% or %valueMatch% or %titleMatch%',
-        '%linkMatch%' => '(%idMatch% or %tagTextMatch% or %titleMatch% or %relMatch%)',
-        '%imgAltMatch%' => './/img[%altMatch%]',
-    );
-
-    private $selectors = array(
-        'fieldset' => <<<XPATH
-.//fieldset
-[(%idMatch% or .//legend[%tagTextMatch%])]
-XPATH
-
-        ,'field' => <<<XPATH
-.//*
-[%fieldFilterWithPlaceholder%][%notFieldTypeFilter%][%fieldMatchWithPlaceholder%]
-|
-.//label[%tagTextMatch%]//.//*[%fieldFilterWithPlaceholder%][%notFieldTypeFilter%]
-|
-.//*
-[%fieldFilterWithoutPlaceholder%][%notFieldTypeFilter%][%fieldMatchWithoutPlaceholder%]
-|
-.//label[%tagTextMatch%]//.//*[%fieldFilterWithoutPlaceholder%][%notFieldTypeFilter%]
-XPATH
-
-        ,'link' => <<<XPATH
-.//a
-[./@href][(%linkMatch% or %imgAltMatch%)]
-|
-.//*
-[%lowercaseRole% = 'link'][(%idOrValueMatch% or %titleMatch% or %tagTextMatch%)]
-XPATH
-
-        ,'button' => <<<XPATH
-.//input
-[%buttonTypeFilter%][(%buttonMatch%)]
-|
-.//input
-[%lowercaseType% = 'image'][%altMatch%]
-|
-.//button
-[(%buttonMatch% or %tagTextMatch%)]
-|
-.//*
-[%lowercaseRole% = 'button'][(%buttonMatch% or %tagTextMatch%)]
-XPATH
-
-        ,'link_or_button' => <<<XPATH
-.//a
-[./@href][(%linkMatch% or %imgAltMatch%)]
-|
-.//input
-[%buttonTypeFilter%][(%idOrValueMatch% or %titleMatch%)]
-|
-.//input
-[%lowercaseType% = 'image'][%altMatch%]
-|
-.//button
-[(%idOrValueMatch% or %titleMatch% or %tagTextMatch%)]
-|
-.//*
-[(%lowercaseRole% = 'button' or %lowercaseRole% = 'link')][(%idOrValueMatch% or %titleMatch% or %tagTextMatch%)]
-XPATH
-
-        ,'content' => <<<XPATH
-./descendant-or-self::*
-[%tagTextMatch%]
-XPATH
-
-        ,'select' => <<<XPATH
-.//select
-[%fieldMatchWithoutPlaceholder%]
-|
-.//label[%tagTextMatch%]//.//select
-XPATH
-
-        ,'checkbox' => <<<XPATH
-.//input
-[%lowercaseType% = 'checkbox'][%fieldMatchWithoutPlaceholder%]
-|
-.//label[%tagTextMatch%]//.//input[%lowercaseType% = 'checkbox']
-XPATH
-
-        ,'radio' => <<<XPATH
-.//input
-[%lowercaseType% = 'radio'][%fieldMatchWithoutPlaceholder%]
-|
-.//label[%tagTextMatch%]//.//input[%lowercaseType% = 'radio']
-XPATH
-
-        ,'file' => <<<XPATH
-.//input
-[%lowercaseType% = 'file'][%fieldMatchWithoutPlaceholder%]
-|
-.//label[%tagTextMatch%]//.//input[%lowercaseType% = 'file']
-XPATH
-
-        ,'optgroup' => <<<XPATH
-.//optgroup
-[%labelAttributeMatch%]
-XPATH
-
-        ,'option' => <<<XPATH
-.//option
-[(./@value = %locator% or %tagTextMatch%)]
-XPATH
-
-        ,'table' => <<<XPATH
-.//table
-[(%idMatch% or .//caption[%tagTextMatch%])]
-XPATH
-        ,'id' => <<<XPATH
-.//*[%idMatch%]
-XPATH
-    ,'id_or_name' => <<<XPATH
-.//*[%idOrNameMatch%]
-XPATH
-    );
-
-    /**
-     * Creates selector instance.
-     */
-    public function __construct()
-    {
-        foreach ($this->replacements as $from => $to) {
-            $this->replacements[$from] = strtr($to, $this->replacements);
-        }
-
-        foreach ($this->selectors as $alias => $selector) {
-            $this->selectors[$alias] = strtr($selector, $this->replacements);
-        }
-    }
-
-    /**
-     * Registers new XPath selector with specified name.
-     *
-     * @param string $name  name for selector
-     * @param string $xpath xpath expression
-     */
-    public function registerNamedXpath($name, $xpath)
-    {
-        $this->selectors[$name] = $xpath;
-    }
-
-    /**
-     * Translates provided locator into XPath.
-     *
-     * @param string|array $locator selector name or array of (selector_name, locator)
-     *
-     * @return string
-     *
-     * @throws \InvalidArgumentException
-     */
-    public function translateToXPath($locator)
-    {
-        if (2 < count($locator)) {
-            throw new \InvalidArgumentException('NamedSelector expects array(name, locator) as argument');
-        }
-
-        if (2 == count($locator)) {
-            $selector   = $locator[0];
-            $locator    = $locator[1];
-        } else {
-            $selector   = (string) $locator;
-            $locator    = null;
-        }
-
-        if (!isset($this->selectors[$selector])) {
-            throw new \InvalidArgumentException(sprintf(
-                'Unknown named selector provided: "%s". Expected one of (%s)',
-                $selector,
-                implode(', ', array_keys($this->selectors))
-            ));
-        }
-
-        $xpath = $this->selectors[$selector];
-
-        if (null !== $locator) {
-            $xpath = strtr($xpath, array('%locator%' => $locator));
-        }
-
-        return $xpath;
-    }
-
-    /**
-     * Registers a replacement in the list of replacements
-     *
-     * This method must be called in the constructor before calling the parent constructor.
-     *
-     * @param string $from
-     * @param string $to
-     */
-    protected function registerReplacement($from, $to)
-    {
-        $this->replacements[$from] = $to;
-    }
-}
diff --git a/core/vendor/behat/mink/src/Selector/PartialNamedSelector.php b/core/vendor/behat/mink/src/Selector/PartialNamedSelector.php
deleted file mode 100644
index b864a2265db1ef9e8b1d1afb8e534271c9597c99..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/PartialNamedSelector.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector;
-
-/**
- * Named selectors engine. Uses registered XPath selectors to create new expressions.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class PartialNamedSelector extends NamedSelector
-{
-    public function __construct()
-    {
-        $this->registerReplacement('%tagTextMatch%', 'contains(normalize-space(string(.)), %locator%)');
-        $this->registerReplacement('%valueMatch%', 'contains(./@value, %locator%)');
-        $this->registerReplacement('%titleMatch%', 'contains(./@title, %locator%)');
-        $this->registerReplacement('%altMatch%', 'contains(./@alt, %locator%)');
-        $this->registerReplacement('%relMatch%', 'contains(./@rel, %locator%)');
-        $this->registerReplacement('%labelAttributeMatch%', 'contains(./@label, %locator%)');
-
-        parent::__construct();
-    }
-}
diff --git a/core/vendor/behat/mink/src/Selector/SelectorInterface.php b/core/vendor/behat/mink/src/Selector/SelectorInterface.php
deleted file mode 100644
index e4f5f17942fedef18602924e7bb4b59f75daba66..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/SelectorInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector;
-
-/**
- * Mink selector engine interface.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-interface SelectorInterface
-{
-    /**
-     * Translates provided locator into XPath.
-     *
-     * @param string|array $locator current selector locator
-     *
-     * @return string
-     */
-    public function translateToXPath($locator);
-}
diff --git a/core/vendor/behat/mink/src/Selector/SelectorsHandler.php b/core/vendor/behat/mink/src/Selector/SelectorsHandler.php
deleted file mode 100644
index a19de675158a46af3e11d4839706b2e2dc5318f1..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/SelectorsHandler.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector;
-
-use Behat\Mink\Selector\Xpath\Escaper;
-
-/**
- * Selectors handler.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class SelectorsHandler
-{
-    private $selectors;
-    private $escaper;
-
-    /**
-     * Initializes selectors handler.
-     *
-     * @param SelectorInterface[] $selectors default selectors to register
-     */
-    public function __construct(array $selectors = array())
-    {
-        $this->escaper = new Escaper();
-
-        $this->registerSelector('named_partial', new PartialNamedSelector());
-        $this->registerSelector('named_exact', new ExactNamedSelector());
-        $this->registerSelector('css', new CssSelector());
-
-        foreach ($selectors as $name => $selector) {
-            $this->registerSelector($name, $selector);
-        }
-    }
-
-    /**
-     * Registers new selector engine with specified name.
-     *
-     * @param string            $name     selector engine name
-     * @param SelectorInterface $selector selector engine instance
-     */
-    public function registerSelector($name, SelectorInterface $selector)
-    {
-        $this->selectors[$name] = $selector;
-    }
-
-    /**
-     * Checks whether selector with specified name is registered on handler.
-     *
-     * @param string $name selector engine name
-     *
-     * @return Boolean
-     */
-    public function isSelectorRegistered($name)
-    {
-        return isset($this->selectors[$name]);
-    }
-
-    /**
-     * Returns selector engine with specified name.
-     *
-     * @param string $name selector engine name
-     *
-     * @return SelectorInterface
-     *
-     * @throws \InvalidArgumentException
-     */
-    public function getSelector($name)
-    {
-        if ('named' === $name) {
-            trigger_error(
-                'Using the "named" selector directly from the handler is deprecated as of 1.6 and will be removed in 2.0.'
-                .' Use the "named_partial" or use the "named" selector through the Element API instead.',
-                E_USER_DEPRECATED
-            );
-            $name = 'named_partial';
-        }
-
-        if (!$this->isSelectorRegistered($name)) {
-            throw new \InvalidArgumentException("Selector \"$name\" is not registered.");
-        }
-
-        return $this->selectors[$name];
-    }
-
-    /**
-     * Translates selector with specified name to XPath.
-     *
-     * @param string       $selector selector engine name (registered)
-     * @param string|array $locator  selector locator (an array or a string depending of the selector being used)
-     *
-     * @return string
-     */
-    public function selectorToXpath($selector, $locator)
-    {
-        if ('xpath' === $selector) {
-            if (!is_string($locator)) {
-                throw new \InvalidArgumentException('The xpath selector expects to get a string as locator');
-            }
-
-            return $locator;
-        }
-
-        return $this->getSelector($selector)->translateToXPath($locator);
-    }
-
-    /**
-     * Translates string to XPath literal.
-     *
-     * @param string $s
-     *
-     * @return string
-     */
-    public function xpathLiteral($s)
-    {
-        return $this->escaper->escapeLiteral($s);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Selector/Xpath/Escaper.php b/core/vendor/behat/mink/src/Selector/Xpath/Escaper.php
deleted file mode 100644
index be3500018dc97ed5dadcb54398b1f2a947c60a3a..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/Xpath/Escaper.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector\Xpath;
-
-/**
- * XPath escaper.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class Escaper
-{
-    /**
-     * Escapes the string as a XPath literal.
-     *
-     * @param string $s
-     *
-     * @return string
-     */
-    public function escapeLiteral($s)
-    {
-        if (false === strpos($s, "'")) {
-            return sprintf("'%s'", $s);
-        }
-
-        if (false === strpos($s, '"')) {
-            return sprintf('"%s"', $s);
-        }
-
-        $string = $s;
-        $parts = array();
-        while (true) {
-            if (false !== $pos = strpos($string, "'")) {
-                $parts[] = sprintf("'%s'", substr($string, 0, $pos));
-                $parts[] = "\"'\"";
-                $string = substr($string, $pos + 1);
-            } else {
-                $parts[] = "'$string'";
-                break;
-            }
-        }
-
-        return sprintf("concat(%s)", implode($parts, ','));
-    }
-}
diff --git a/core/vendor/behat/mink/src/Selector/Xpath/Manipulator.php b/core/vendor/behat/mink/src/Selector/Xpath/Manipulator.php
deleted file mode 100644
index 116650a5b5106096df72f871f44bb440655ca3e9..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Selector/Xpath/Manipulator.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink\Selector\Xpath;
-
-/**
- * XPath manipulation utility.
- *
- * @author Graham Bates
- * @author Christophe Coevoet <stof@notk.org>
- */
-class Manipulator
-{
-    /**
-     * Regex to find union operators not inside brackets.
-     */
-    const UNION_PATTERN = '/\|(?![^\[]*\])/';
-
-    /**
-     * Prepends the XPath prefix to the given XPath.
-     *
-     * The returned XPath will match elements matching the XPath inside an element
-     * matching the prefix.
-     *
-     * @param string $xpath
-     * @param string $prefix
-     *
-     * @return string
-     */
-    public function prepend($xpath, $prefix)
-    {
-        $expressions = array();
-
-        // If the xpath prefix contains a union we need to wrap it in parentheses.
-        if (preg_match(self::UNION_PATTERN, $prefix)) {
-            $prefix = '('.$prefix.')';
-        }
-
-        // Split any unions into individual expressions.
-        foreach (preg_split(self::UNION_PATTERN, $xpath) as $expression) {
-            $expression = trim($expression);
-            $parenthesis = '';
-
-            // If the union is inside some braces, we need to preserve the opening braces and apply
-            // the prefix only inside it.
-            if (preg_match('/^[\(\s*]+/', $expression, $matches)) {
-                $parenthesis = $matches[0];
-                $expression = substr($expression, strlen($parenthesis));
-            }
-
-            // add prefix before element selector
-            if (0 === strpos($expression, '/')) {
-                $expression = $prefix.$expression;
-            } else {
-                $expression = $prefix.'/'.$expression;
-            }
-            $expressions[] = $parenthesis.$expression;
-        }
-
-        return implode(' | ', $expressions);
-    }
-}
diff --git a/core/vendor/behat/mink/src/Session.php b/core/vendor/behat/mink/src/Session.php
deleted file mode 100644
index c67f7f9b4e1865087cbb0bd85284d8f28c3291b3..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/Session.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink;
-
-use Behat\Mink\Driver\DriverInterface;
-use Behat\Mink\Selector\SelectorsHandler;
-use Behat\Mink\Element\DocumentElement;
-
-/**
- * Mink session.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class Session
-{
-    private $driver;
-    private $page;
-    private $selectorsHandler;
-
-    /**
-     * Initializes session.
-     *
-     * @param DriverInterface  $driver
-     * @param SelectorsHandler $selectorsHandler
-     */
-    public function __construct(DriverInterface $driver, SelectorsHandler $selectorsHandler = null)
-    {
-        $driver->setSession($this);
-
-        if (null === $selectorsHandler) {
-            $selectorsHandler = new SelectorsHandler();
-        }
-
-        $this->driver           = $driver;
-        $this->selectorsHandler = $selectorsHandler;
-        $this->page             = new DocumentElement($this);
-    }
-
-    /**
-     * Checks whether session (driver) was started.
-     *
-     * @return Boolean
-     */
-    public function isStarted()
-    {
-        return $this->driver->isStarted();
-    }
-
-    /**
-     * Starts session driver.
-     *
-     * Calling any action before visiting a page is an undefined behavior.
-     * The only supported method calls on a fresh driver are
-     * - visit()
-     * - setRequestHeader()
-     * - setBasicAuth()
-     * - reset()
-     * - stop()
-     */
-    public function start()
-    {
-        $this->driver->start();
-    }
-
-    /**
-     * Stops session driver.
-     */
-    public function stop()
-    {
-        $this->driver->stop();
-    }
-
-    /**
-     * Restart session driver.
-     */
-    public function restart()
-    {
-        $this->driver->stop();
-        $this->driver->start();
-    }
-
-    /**
-     * Reset session driver state.
-     *
-     * Calling any action before visiting a page is an undefined behavior.
-     * The only supported method calls on a fresh driver are
-     * - visit()
-     * - setRequestHeader()
-     * - setBasicAuth()
-     * - reset()
-     * - stop()
-     */
-    public function reset()
-    {
-        $this->driver->reset();
-    }
-
-    /**
-     * Returns session driver.
-     *
-     * @return DriverInterface
-     */
-    public function getDriver()
-    {
-        return $this->driver;
-    }
-
-    /**
-     * Returns page element.
-     *
-     * @return DocumentElement
-     */
-    public function getPage()
-    {
-        return $this->page;
-    }
-
-    /**
-     * Returns selectors handler.
-     *
-     * @return SelectorsHandler
-     */
-    public function getSelectorsHandler()
-    {
-        return $this->selectorsHandler;
-    }
-
-    /**
-     * Visit specified URL.
-     *
-     * @param string $url url of the page
-     */
-    public function visit($url)
-    {
-        $this->driver->visit($url);
-    }
-
-    /**
-     * Sets HTTP Basic authentication parameters
-     *
-     * @param string|Boolean $user     user name or false to disable authentication
-     * @param string         $password password
-     */
-    public function setBasicAuth($user, $password = '')
-    {
-        $this->driver->setBasicAuth($user, $password);
-    }
-
-    /**
-     * Sets specific request header.
-     *
-     * @param string $name
-     * @param string $value
-     */
-    public function setRequestHeader($name, $value)
-    {
-        $this->driver->setRequestHeader($name, $value);
-    }
-
-    /**
-     * Returns all response headers.
-     *
-     * @return array
-     */
-    public function getResponseHeaders()
-    {
-        return $this->driver->getResponseHeaders();
-    }
-
-    /**
-     * Sets cookie.
-     *
-     * @param string $name
-     * @param string $value
-     */
-    public function setCookie($name, $value = null)
-    {
-        $this->driver->setCookie($name, $value);
-    }
-
-    /**
-     * Returns cookie by name.
-     *
-     * @param string $name
-     *
-     * @return string|null
-     */
-    public function getCookie($name)
-    {
-        return $this->driver->getCookie($name);
-    }
-
-    /**
-     * Returns response status code.
-     *
-     * @return integer
-     */
-    public function getStatusCode()
-    {
-        return $this->driver->getStatusCode();
-    }
-
-    /**
-     * Returns current URL address.
-     *
-     * @return string
-     */
-    public function getCurrentUrl()
-    {
-        return $this->driver->getCurrentUrl();
-    }
-
-    /**
-     * Capture a screenshot of the current window.
-     *
-     * @return string screenshot of MIME type image/* depending
-     *                on driver (e.g., image/png, image/jpeg)
-     */
-    public function getScreenshot()
-    {
-        return $this->driver->getScreenshot();
-    }
-
-    /**
-     * Return the names of all open windows
-     *
-     * @return array Array of all open window's names.
-     */
-    public function getWindowNames()
-    {
-        return $this->driver->getWindowNames();
-    }
-
-    /**
-     * Return the name of the currently active window
-     *
-     * @return string The name of the current window.
-     */
-    public function getWindowName()
-    {
-        return $this->driver->getWindowName();
-    }
-
-    /**
-     * Reloads current session page.
-     */
-    public function reload()
-    {
-        $this->driver->reload();
-    }
-
-    /**
-     * Moves backward 1 page in history.
-     */
-    public function back()
-    {
-        $this->driver->back();
-    }
-
-    /**
-     * Moves forward 1 page in history.
-     */
-    public function forward()
-    {
-        $this->driver->forward();
-    }
-
-    /**
-     * Switches to specific browser window.
-     *
-     * @param string $name window name (null for switching back to main window)
-     */
-    public function switchToWindow($name = null)
-    {
-        $this->driver->switchToWindow($name);
-    }
-
-    /**
-     * Switches to specific iFrame.
-     *
-     * @param string $name iframe name (null for switching back)
-     */
-    public function switchToIFrame($name = null)
-    {
-        $this->driver->switchToIFrame($name);
-    }
-
-    /**
-     * Execute JS in browser.
-     *
-     * @param string $script javascript
-     */
-    public function executeScript($script)
-    {
-        $this->driver->executeScript($script);
-    }
-
-    /**
-     * Execute JS in browser and return it's response.
-     *
-     * @param string $script javascript
-     *
-     * @return string
-     */
-    public function evaluateScript($script)
-    {
-        return $this->driver->evaluateScript($script);
-    }
-
-    /**
-     * Waits some time or until JS condition turns true.
-     *
-     * @param integer $time      time in milliseconds
-     * @param string  $condition JS condition
-     *
-     * @return boolean
-     */
-    public function wait($time, $condition = 'false')
-    {
-        return $this->driver->wait($time, $condition);
-    }
-
-    /**
-     * Set the dimensions of the window.
-     *
-     * @param integer $width  set the window width, measured in pixels
-     * @param integer $height set the window height, measured in pixels
-     * @param string  $name   window name (null for the main window)
-     */
-    public function resizeWindow($width, $height, $name = null)
-    {
-        $this->driver->resizeWindow($width, $height, $name);
-    }
-
-    /**
-     * Maximize the window if it is not maximized already
-     *
-     * @param string $name window name (null for the main window)
-     */
-    public function maximizeWindow($name = null)
-    {
-        $this->driver->maximizeWindow($name);
-    }
-}
diff --git a/core/vendor/behat/mink/src/WebAssert.php b/core/vendor/behat/mink/src/WebAssert.php
deleted file mode 100644
index 127c3c14b349e93acdba3719e4731c0aace6bf26..0000000000000000000000000000000000000000
--- a/core/vendor/behat/mink/src/WebAssert.php
+++ /dev/null
@@ -1,749 +0,0 @@
-<?php
-
-/*
- * This file is part of the Mink package.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Behat\Mink;
-
-use Behat\Mink\Element\Element;
-use Behat\Mink\Element\ElementInterface;
-use Behat\Mink\Element\NodeElement;
-use Behat\Mink\Element\TraversableElement;
-use Behat\Mink\Exception\ElementNotFoundException;
-use Behat\Mink\Exception\ExpectationException;
-use Behat\Mink\Exception\ResponseTextException;
-use Behat\Mink\Exception\ElementHtmlException;
-use Behat\Mink\Exception\ElementTextException;
-
-/**
- * Mink web assertions tool.
- *
- * @author Konstantin Kudryashov <ever.zet@gmail.com>
- */
-class WebAssert
-{
-    protected $session;
-
-    /**
-     * Initializes assertion engine.
-     *
-     * @param Session $session
-     */
-    public function __construct(Session $session)
-    {
-        $this->session = $session;
-    }
-
-    /**
-     * Checks that current session address is equals to provided one.
-     *
-     * @param string $page
-     *
-     * @throws ExpectationException
-     */
-    public function addressEquals($page)
-    {
-        $expected = $this->cleanUrl($page);
-        $actual   = $this->getCurrentUrlPath();
-
-        $this->assert($actual === $expected, sprintf('Current page is "%s", but "%s" expected.', $actual, $expected));
-    }
-
-    /**
-     * Checks that current session address is not equals to provided one.
-     *
-     * @param string $page
-     *
-     * @throws ExpectationException
-     */
-    public function addressNotEquals($page)
-    {
-        $expected = $this->cleanUrl($page);
-        $actual   = $this->getCurrentUrlPath();
-
-        $this->assert($actual !== $expected, sprintf('Current page is "%s", but should not be.', $actual));
-    }
-
-    /**
-     * Checks that current session address matches regex.
-     *
-     * @param string $regex
-     *
-     * @throws ExpectationException
-     */
-    public function addressMatches($regex)
-    {
-        $actual = $this->getCurrentUrlPath();
-        $message = sprintf('Current page "%s" does not match the regex "%s".', $actual, $regex);
-
-        $this->assert((bool) preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that specified cookie exists and its value equals to a given one
-     *
-     * @param string $name  cookie name
-     * @param string $value cookie value
-     *
-     * @throws ExpectationException
-     */
-    public function cookieEquals($name, $value)
-    {
-        $this->cookieExists($name);
-
-        $actualValue = $this->session->getCookie($name);
-        $message = sprintf('Cookie "%s" value is "%s", but should be "%s".', $name, $actualValue, $value);
-
-        $this->assert($actualValue == $value, $message);
-    }
-
-    /**
-     * Checks that specified cookie exists
-     *
-     * @param string $name cookie name
-     *
-     * @throws ExpectationException
-     */
-    public function cookieExists($name)
-    {
-        $message = sprintf('Cookie "%s" is not set, but should be.', $name);
-        $this->assert($this->session->getCookie($name) !== null, $message);
-    }
-
-    /**
-     * Checks that current response code equals to provided one.
-     *
-     * @param integer $code
-     *
-     * @throws ExpectationException
-     */
-    public function statusCodeEquals($code)
-    {
-        $actual = $this->session->getStatusCode();
-        $message = sprintf('Current response status code is %d, but %d expected.', $actual, $code);
-
-        $this->assert(intval($code) === intval($actual), $message);
-    }
-
-    /**
-     * Checks that current response code not equals to provided one.
-     *
-     * @param integer $code
-     *
-     * @throws ExpectationException
-     */
-    public function statusCodeNotEquals($code)
-    {
-        $actual = $this->session->getStatusCode();
-        $message = sprintf('Current response status code is %d, but should not be.', $actual);
-
-        $this->assert(intval($code) !== intval($actual), $message);
-    }
-
-    /**
-     * Checks that current page contains text.
-     *
-     * @param string $text
-     *
-     * @throws ResponseTextException
-     */
-    public function pageTextContains($text)
-    {
-        $actual = $this->session->getPage()->getText();
-        $actual = preg_replace('/\s+/u', ' ', $actual);
-        $regex  = '/'.preg_quote($text, '/').'/ui';
-        $message = sprintf('The text "%s" was not found anywhere in the text of the current page.', $text);
-
-        $this->assertResponseText((bool) preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that current page does not contains text.
-     *
-     * @param string $text
-     *
-     * @throws ResponseTextException
-     */
-    public function pageTextNotContains($text)
-    {
-        $actual = $this->session->getPage()->getText();
-        $actual = preg_replace('/\s+/u', ' ', $actual);
-        $regex  = '/'.preg_quote($text, '/').'/ui';
-        $message = sprintf('The text "%s" appears in the text of this page, but it should not.', $text);
-
-        $this->assertResponseText(!preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that current page text matches regex.
-     *
-     * @param string $regex
-     *
-     * @throws ResponseTextException
-     */
-    public function pageTextMatches($regex)
-    {
-        $actual = $this->session->getPage()->getText();
-        $message = sprintf('The pattern %s was not found anywhere in the text of the current page.', $regex);
-
-        $this->assertResponseText((bool) preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that current page text does not matches regex.
-     *
-     * @param string $regex
-     *
-     * @throws ResponseTextException
-     */
-    public function pageTextNotMatches($regex)
-    {
-        $actual = $this->session->getPage()->getText();
-        $message = sprintf('The pattern %s was found in the text of the current page, but it should not.', $regex);
-
-        $this->assertResponseText(!preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that page HTML (response content) contains text.
-     *
-     * @param string $text
-     *
-     * @throws ExpectationException
-     */
-    public function responseContains($text)
-    {
-        $actual = $this->session->getPage()->getContent();
-        $regex  = '/'.preg_quote($text, '/').'/ui';
-        $message = sprintf('The string "%s" was not found anywhere in the HTML response of the current page.', $text);
-
-        $this->assert((bool) preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that page HTML (response content) does not contains text.
-     *
-     * @param string $text
-     *
-     * @throws ExpectationException
-     */
-    public function responseNotContains($text)
-    {
-        $actual = $this->session->getPage()->getContent();
-        $regex  = '/'.preg_quote($text, '/').'/ui';
-        $message = sprintf('The string "%s" appears in the HTML response of this page, but it should not.', $text);
-
-        $this->assert(!preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that page HTML (response content) matches regex.
-     *
-     * @param string $regex
-     *
-     * @throws ExpectationException
-     */
-    public function responseMatches($regex)
-    {
-        $actual = $this->session->getPage()->getContent();
-        $message = sprintf('The pattern %s was not found anywhere in the HTML response of the page.', $regex);
-
-        $this->assert((bool) preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that page HTML (response content) does not matches regex.
-     *
-     * @param $regex
-     *
-     * @throws ExpectationException
-     */
-    public function responseNotMatches($regex)
-    {
-        $actual = $this->session->getPage()->getContent();
-        $message = sprintf('The pattern %s was found in the HTML response of the page, but it should not.', $regex);
-
-        $this->assert(!preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that there is specified number of specific elements on the page.
-     *
-     * @param string           $selectorType element selector type (css, xpath)
-     * @param string|array     $selector     element selector
-     * @param integer          $count        expected count
-     * @param ElementInterface $container    document to check against
-     *
-     * @throws ExpectationException
-     */
-    public function elementsCount($selectorType, $selector, $count, ElementInterface $container = null)
-    {
-        $container = $container ?: $this->session->getPage();
-        $nodes = $container->findAll($selectorType, $selector);
-
-        $message = sprintf(
-            '%d %s found on the page, but should be %d.',
-            count($nodes),
-            $this->getMatchingElementRepresentation($selectorType, $selector, count($nodes) !== 1),
-            $count
-        );
-
-        $this->assert(intval($count) === count($nodes), $message);
-    }
-
-    /**
-     * Checks that specific element exists on the current page.
-     *
-     * @param string           $selectorType element selector type (css, xpath)
-     * @param string|array     $selector     element selector
-     * @param ElementInterface $container    document to check against
-     *
-     * @return NodeElement
-     *
-     * @throws ElementNotFoundException
-     */
-    public function elementExists($selectorType, $selector, ElementInterface $container = null)
-    {
-        $container = $container ?: $this->session->getPage();
-        $node = $container->find($selectorType, $selector);
-
-        if (null === $node) {
-            if (is_array($selector)) {
-                $selector = implode(' ', $selector);
-            }
-
-            throw new ElementNotFoundException($this->session, 'element', $selectorType, $selector);
-        }
-
-        return $node;
-    }
-
-    /**
-     * Checks that specific element does not exists on the current page.
-     *
-     * @param string           $selectorType element selector type (css, xpath)
-     * @param string|array     $selector     element selector
-     * @param ElementInterface $container    document to check against
-     *
-     * @throws ExpectationException
-     */
-    public function elementNotExists($selectorType, $selector, ElementInterface $container = null)
-    {
-        $container = $container ?: $this->session->getPage();
-        $node = $container->find($selectorType, $selector);
-
-        $message = sprintf(
-            'An %s appears on this page, but it should not.',
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assert(null === $node, $message);
-    }
-
-    /**
-     * Checks that specific element contains text.
-     *
-     * @param string       $selectorType element selector type (css, xpath)
-     * @param string|array $selector     element selector
-     * @param string       $text         expected text
-     *
-     * @throws ElementTextException
-     */
-    public function elementTextContains($selectorType, $selector, $text)
-    {
-        $element = $this->elementExists($selectorType, $selector);
-        $actual  = $element->getText();
-        $regex   = '/'.preg_quote($text, '/').'/ui';
-
-        $message = sprintf(
-            'The text "%s" was not found in the text of the %s.',
-            $text,
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assertElementText((bool) preg_match($regex, $actual), $message, $element);
-    }
-
-    /**
-     * Checks that specific element does not contains text.
-     *
-     * @param string       $selectorType element selector type (css, xpath)
-     * @param string|array $selector     element selector
-     * @param string       $text         expected text
-     *
-     * @throws ElementTextException
-     */
-    public function elementTextNotContains($selectorType, $selector, $text)
-    {
-        $element = $this->elementExists($selectorType, $selector);
-        $actual  = $element->getText();
-        $regex   = '/'.preg_quote($text, '/').'/ui';
-
-        $message = sprintf(
-            'The text "%s" appears in the text of the %s, but it should not.',
-            $text,
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assertElementText(!preg_match($regex, $actual), $message, $element);
-    }
-
-    /**
-     * Checks that specific element contains HTML.
-     *
-     * @param string       $selectorType element selector type (css, xpath)
-     * @param string|array $selector     element selector
-     * @param string       $html         expected text
-     *
-     * @throws ElementHtmlException
-     */
-    public function elementContains($selectorType, $selector, $html)
-    {
-        $element = $this->elementExists($selectorType, $selector);
-        $actual  = $element->getHtml();
-        $regex   = '/'.preg_quote($html, '/').'/ui';
-
-        $message = sprintf(
-            'The string "%s" was not found in the HTML of the %s.',
-            $html,
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assertElement((bool) preg_match($regex, $actual), $message, $element);
-    }
-
-    /**
-     * Checks that specific element does not contains HTML.
-     *
-     * @param string       $selectorType element selector type (css, xpath)
-     * @param string|array $selector     element selector
-     * @param string       $html         expected text
-     *
-     * @throws ElementHtmlException
-     */
-    public function elementNotContains($selectorType, $selector, $html)
-    {
-        $element = $this->elementExists($selectorType, $selector);
-        $actual  = $element->getHtml();
-        $regex   = '/'.preg_quote($html, '/').'/ui';
-
-        $message = sprintf(
-            'The string "%s" appears in the HTML of the %s, but it should not.',
-            $html,
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assertElement(!preg_match($regex, $actual), $message, $element);
-    }
-
-    /**
-     * Checks that an attribute exists in an element.
-     *
-     * @param string       $selectorType
-     * @param string|array $selector
-     * @param string       $attribute
-     *
-     * @return NodeElement
-     *
-     * @throws ElementHtmlException
-     */
-    public function elementAttributeExists($selectorType, $selector, $attribute)
-    {
-        $element = $this->elementExists($selectorType, $selector);
-
-        $message = sprintf(
-            'The attribute "%s" was not found in the %s.',
-            $attribute,
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assertElement($element->hasAttribute($attribute), $message, $element);
-
-        return $element;
-    }
-
-    /**
-     * Checks that an attribute of a specific elements contains text.
-     *
-     * @param string       $selectorType
-     * @param string|array $selector
-     * @param string       $attribute
-     * @param string       $text
-     *
-     * @throws ElementHtmlException
-     */
-    public function elementAttributeContains($selectorType, $selector, $attribute, $text)
-    {
-        $element = $this->elementAttributeExists($selectorType, $selector, $attribute);
-        $actual  = $element->getAttribute($attribute);
-        $regex   = '/'.preg_quote($text, '/').'/ui';
-
-        $message = sprintf(
-            'The text "%s" was not found in the attribute "%s" of the %s.',
-            $text,
-            $attribute,
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assertElement((bool) preg_match($regex, $actual), $message, $element);
-    }
-
-    /**
-     * Checks that an attribute of a specific elements does not contain text.
-     *
-     * @param string       $selectorType
-     * @param string|array $selector
-     * @param string       $attribute
-     * @param string       $text
-     *
-     * @throws ElementHtmlException
-     */
-    public function elementAttributeNotContains($selectorType, $selector, $attribute, $text)
-    {
-        $element = $this->elementAttributeExists($selectorType, $selector, $attribute);
-        $actual  = $element->getAttribute($attribute);
-        $regex   = '/'.preg_quote($text, '/').'/ui';
-
-        $message = sprintf(
-            'The text "%s" was found in the attribute "%s" of the %s.',
-            $text,
-            $attribute,
-            $this->getMatchingElementRepresentation($selectorType, $selector)
-        );
-
-        $this->assertElement(!preg_match($regex, $actual), $message, $element);
-    }
-
-    /**
-     * Checks that specific field exists on the current page.
-     *
-     * @param string             $field     field id|name|label|value
-     * @param TraversableElement $container document to check against
-     *
-     * @return NodeElement
-     *
-     * @throws ElementNotFoundException
-     */
-    public function fieldExists($field, TraversableElement $container = null)
-    {
-        $container = $container ?: $this->session->getPage();
-        $node = $container->findField($field);
-
-        if (null === $node) {
-            throw new ElementNotFoundException($this->session, 'form field', 'id|name|label|value', $field);
-        }
-
-        return $node;
-    }
-
-    /**
-     * Checks that specific field does not exists on the current page.
-     *
-     * @param string             $field     field id|name|label|value
-     * @param TraversableElement $container document to check against
-     *
-     * @throws ExpectationException
-     */
-    public function fieldNotExists($field, TraversableElement $container = null)
-    {
-        $container = $container ?: $this->session->getPage();
-        $node = $container->findField($field);
-
-        $this->assert(null === $node, sprintf('A field "%s" appears on this page, but it should not.', $field));
-    }
-
-    /**
-     * Checks that specific field have provided value.
-     *
-     * @param string             $field     field id|name|label|value
-     * @param string             $value     field value
-     * @param TraversableElement $container document to check against
-     *
-     * @throws ExpectationException
-     */
-    public function fieldValueEquals($field, $value, TraversableElement $container = null)
-    {
-        $node   = $this->fieldExists($field, $container);
-        $actual = $node->getValue();
-        $regex  = '/^'.preg_quote($value, '/').'$/ui';
-
-        $message = sprintf('The field "%s" value is "%s", but "%s" expected.', $field, $actual, $value);
-
-        $this->assert((bool) preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that specific field have provided value.
-     *
-     * @param string             $field     field id|name|label|value
-     * @param string             $value     field value
-     * @param TraversableElement $container document to check against
-     *
-     * @throws ExpectationException
-     */
-    public function fieldValueNotEquals($field, $value, TraversableElement $container = null)
-    {
-        $node   = $this->fieldExists($field, $container);
-        $actual = $node->getValue();
-        $regex  = '/^'.preg_quote($value, '/').'$/ui';
-
-        $message = sprintf('The field "%s" value is "%s", but it should not be.', $field, $actual);
-
-        $this->assert(!preg_match($regex, $actual), $message);
-    }
-
-    /**
-     * Checks that specific checkbox is checked.
-     *
-     * @param string             $field     field id|name|label|value
-     * @param TraversableElement $container document to check against
-     *
-     * @throws ExpectationException
-     */
-    public function checkboxChecked($field, TraversableElement $container = null)
-    {
-        $node = $this->fieldExists($field, $container);
-
-        $this->assert($node->isChecked(), sprintf('Checkbox "%s" is not checked, but it should be.', $field));
-    }
-
-    /**
-     * Checks that specific checkbox is unchecked.
-     *
-     * @param string             $field     field id|name|label|value
-     * @param TraversableElement $container document to check against
-     *
-     * @throws ExpectationException
-     */
-    public function checkboxNotChecked($field, TraversableElement $container = null)
-    {
-        $node = $this->fieldExists($field, $container);
-
-        $this->assert(!$node->isChecked(), sprintf('Checkbox "%s" is checked, but it should not be.', $field));
-    }
-
-    /**
-     * Gets current url of the page.
-     *
-     * @return string
-     */
-    protected function getCurrentUrlPath()
-    {
-        return $this->cleanUrl($this->session->getCurrentUrl());
-    }
-
-    /**
-     * Trims scriptname from the URL.
-     *
-     * @param string $url
-     *
-     * @return string
-     */
-    protected function cleanUrl($url)
-    {
-        $parts = parse_url($url);
-        $fragment = empty($parts['fragment']) ? '' : '#'.$parts['fragment'];
-        $path = empty($parts['path']) ? '/' : $parts['path'];
-
-        return preg_replace('/^\/[^\.\/]+\.php/', '', $path).$fragment;
-    }
-
-    /**
-     * Asserts a condition.
-     *
-     * @param bool   $condition
-     * @param string $message   Failure message
-     *
-     * @throws ExpectationException when the condition is not fulfilled
-     */
-    private function assert($condition, $message)
-    {
-        if ($condition) {
-            return;
-        }
-
-        throw new ExpectationException($message, $this->session);
-    }
-
-    /**
-     * Asserts a condition involving the response text.
-     *
-     * @param bool   $condition
-     * @param string $message   Failure message
-     *
-     * @throws ResponseTextException when the condition is not fulfilled
-     */
-    private function assertResponseText($condition, $message)
-    {
-        if ($condition) {
-            return;
-        }
-
-        throw new ResponseTextException($message, $this->session);
-    }
-
-    /**
-     * Asserts a condition on an element.
-     *
-     * @param bool    $condition
-     * @param string  $message   Failure message
-     * @param Element $element
-     *
-     * @throws ElementHtmlException when the condition is not fulfilled
-     */
-    private function assertElement($condition, $message, Element $element)
-    {
-        if ($condition) {
-            return;
-        }
-
-        throw new ElementHtmlException($message, $this->session, $element);
-    }
-
-    /**
-     * Asserts a condition involving the text of an element.
-     *
-     * @param bool    $condition
-     * @param string  $message   Failure message
-     * @param Element $element
-     *
-     * @throws ElementTextException when the condition is not fulfilled
-     */
-    private function assertElementText($condition, $message, Element $element)
-    {
-        if ($condition) {
-            return;
-        }
-
-        throw new ElementTextException($message, $this->session, $element);
-    }
-
-    /**
-     * @param string       $selectorType
-     * @param string|array $selector
-     * @param boolean      $plural
-     *
-     * @return string
-     */
-    private function getMatchingElementRepresentation($selectorType, $selector, $plural = false)
-    {
-        $pluralization = $plural ? 's' : '';
-
-        if (in_array($selectorType, array('named', 'named_exact', 'named_partial'))
-            && is_array($selector) && 2 === count($selector)
-        ) {
-            return sprintf('%s%s matching locator "%s"', $selector[0], $pluralization, $selector[1]);
-        }
-
-        if (is_array($selector)) {
-            $selector = implode(' ', $selector);
-        }
-
-        return sprintf('element%s matching %s "%s"', $pluralization, $selectorType, $selector);
-    }
-}
diff --git a/core/vendor/behat/mink/tests/Element/DocumentElementTest.php b/core/vendor/behat/mink/tests/Element/DocumentElementTest.php
index bacd06d8d60baf29eeebdf688322e496c1c966da..bb42b685f8ad52a93170f8c403de3cac0f44b3d6 100644
--- a/core/vendor/behat/mink/tests/Element/DocumentElementTest.php
+++ b/core/vendor/behat/mink/tests/Element/DocumentElementTest.php
@@ -33,8 +33,8 @@ public function testFindAll()
             ->expects($this->exactly(2))
             ->method('find')
             ->will($this->returnValueMap(array(
-                array('//html/'.$xpath, array(2, 3, 4)),
-                array('//html/'.$css, array(1, 2)),
+                array('//html/' . $xpath, array(2, 3, 4)),
+                array('//html/' . $css, array(1, 2)),
             )));
 
         $this->selectors
diff --git a/core/vendor/behat/mink/tests/Element/ElementTest.php b/core/vendor/behat/mink/tests/Element/ElementTest.php
index a8c8a8ca90dfa8c1d8614b69721d08ea0cb26e0a..1f9240a13c143b717974e3ebaf362166c93a60f2 100644
--- a/core/vendor/behat/mink/tests/Element/ElementTest.php
+++ b/core/vendor/behat/mink/tests/Element/ElementTest.php
@@ -64,7 +64,7 @@ protected function mockNamedFinder($xpath, array $results, $locator, $times = 2)
         $this->driver
             ->expects($this->exactly($times))
             ->method('find')
-            ->with('//html'.$xpath)
+            ->with('//html' . $xpath)
             ->will($returnValue);
 
         $this->selectors
diff --git a/core/vendor/behat/mink/tests/Exception/ExpectationExceptionTest.php b/core/vendor/behat/mink/tests/Exception/ExpectationExceptionTest.php
index 466bcca63eceee4e79432b849e025d63ebb68fd9..23e53bc77da9ab396f5f3af2dc7e1dbf2cbede7a 100644
--- a/core/vendor/behat/mink/tests/Exception/ExpectationExceptionTest.php
+++ b/core/vendor/behat/mink/tests/Exception/ExpectationExceptionTest.php
@@ -56,48 +56,6 @@ public function testExceptionToString()
         $this->assertEquals($expected, $exception->__toString());
     }
 
-    public function testBigContent()
-    {
-        $driver = $this->getMock('Behat\Mink\Driver\DriverInterface');
-        $page = $this->getPageMock();
-
-        $session = $this->getSessionMock();
-        $session->expects($this->any())
-            ->method('getDriver')
-            ->will($this->returnValue($driver));
-        $session->expects($this->any())
-            ->method('getPage')
-            ->will($this->returnValue($page));
-        $session->expects($this->any())
-            ->method('getStatusCode')
-            ->will($this->returnValue(200));
-        $session->expects($this->any())
-            ->method('getCurrentUrl')
-            ->will($this->returnValue('http://localhost/test'));
-
-        $body = str_repeat('a', 1001 - strlen('<body></body>'));
-
-        $html = sprintf("<html><head><title>Hello</title></head>\n<body>%s</body></html>", $body);
-        $page->expects($this->any())
-            ->method('getContent')
-            ->will($this->returnValue($html));
-
-        $expected = <<<'TXT'
-Expectation failure
-
-+--[ HTTP/1.1 200 | http://localhost/test | %s ]
-|
-|  <body>%s</b...
-|
-TXT;
-
-        $expected = sprintf($expected.'  ', get_class($driver), $body);
-
-        $exception = new ExpectationException('Expectation failure', $session);
-
-        $this->assertEquals($expected, $exception->__toString());
-    }
-
     public function testExceptionWhileRenderingString()
     {
         $session = $this->getSessionMock();
diff --git a/core/vendor/behat/mink/tests/Selector/NamedSelectorTest.php b/core/vendor/behat/mink/tests/Selector/NamedSelectorTest.php
index e0de1bc226dc1d17366f737309f4c36e73cc6981..1ce2faa4ea2feb4490dd4c3922a5885c8f783408 100644
--- a/core/vendor/behat/mink/tests/Selector/NamedSelectorTest.php
+++ b/core/vendor/behat/mink/tests/Selector/NamedSelectorTest.php
@@ -38,9 +38,8 @@ public function testSelectors($fixtureFile, $selector, $locator, $expectedExactC
             ? $expectedPartialCount
             : $expectedExactCount;
 
-        // Don't use "loadHTMLFile" due HHVM 3.3.0 issue.
         $dom = new \DOMDocument('1.0', 'UTF-8');
-        $dom->loadHTML(file_get_contents(__DIR__.'/fixtures/'.$fixtureFile));
+        $dom->loadHTMLFile(__DIR__.'/fixtures/'.$fixtureFile);
 
         // Escape the locator as Mink 1.x expects the caller of the NamedSelector to handle it
         $selectorsHandler = new SelectorsHandler();
diff --git a/core/vendor/behat/mink/tests/Selector/SelectorsHandlerTest.php b/core/vendor/behat/mink/tests/Selector/SelectorsHandlerTest.php
index a20d3d9db7f5019e01f0b389e3060d2516c424a8..8bcb37997824df89e3ffad2e273813b68a3e1d58 100644
--- a/core/vendor/behat/mink/tests/Selector/SelectorsHandlerTest.php
+++ b/core/vendor/behat/mink/tests/Selector/SelectorsHandlerTest.php
@@ -77,16 +77,4 @@ public function testXpathLiteral()
 
         $this->assertEquals("'some simple string'", $handler->xpathLiteral('some simple string'));
     }
-
-    public function testBcLayer()
-    {
-        $selector = $this->getMockBuilder('Behat\Mink\Selector\SelectorInterface')->getMock();
-        $handler = new SelectorsHandler();
-
-        $handler->registerSelector('named_partial', $selector);
-
-        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
-
-        $this->assertSame($selector, $handler->getSelector('named'));
-    }
 }
diff --git a/core/vendor/behat/mink/tests/SessionTest.php b/core/vendor/behat/mink/tests/SessionTest.php
index 9e6796db993a4d0f09638abe319dfa86e139675d..b000ba69b5a780be25942f2b91e42c1da5e43de5 100644
--- a/core/vendor/behat/mink/tests/SessionTest.php
+++ b/core/vendor/behat/mink/tests/SessionTest.php
@@ -21,9 +21,9 @@ class SessionTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->driver = $this->getMockBuilder('Behat\Mink\Driver\DriverInterface')->getMock();
+        $this->driver           = $this->getMockBuilder('Behat\Mink\Driver\DriverInterface')->getMock();
         $this->selectorsHandler = $this->getMockBuilder('Behat\Mink\Selector\SelectorsHandler')->getMock();
-        $this->session = new Session($this->driver, $this->selectorsHandler);
+        $this->session  = new Session($this->driver, $this->selectorsHandler);
     }
 
     public function testGetDriver()
@@ -41,13 +41,6 @@ public function testGetSelectorsHandler()
         $this->assertSame($this->selectorsHandler, $this->session->getSelectorsHandler());
     }
 
-    public function testInstantiateWithoutOptionalDeps()
-    {
-        $session = new Session($this->driver);
-
-        $this->assertInstanceOf('Behat\Mink\Selector\SelectorsHandler', $session->getSelectorsHandler());
-    }
-
     public function testIsStarted()
     {
         $this->driver->expects($this->once())
diff --git a/core/vendor/behat/mink/tests/WebAssertTest.php b/core/vendor/behat/mink/tests/WebAssertTest.php
index c3bd3cf11c1f66116487218b41f8b09193a043b9..9ce5d22fc53f89c88e0245e841ca2f69419687c9 100644
--- a/core/vendor/behat/mink/tests/WebAssertTest.php
+++ b/core/vendor/behat/mink/tests/WebAssertTest.php
@@ -2,7 +2,6 @@
 
 namespace Behat\Mink\Tests;
 
-use Behat\Mink\Exception\ExpectationException;
 use Behat\Mink\WebAssert;
 
 class WebAssertTest extends \PHPUnit_Framework_TestCase
@@ -21,7 +20,7 @@ public function setUp()
         $this->session = $this->getMockBuilder('Behat\\Mink\\Session')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->assert = new WebAssert($this->session);
+        $this->assert  = new WebAssert($this->session);
     }
 
     public function testAddressEquals()
@@ -41,17 +40,6 @@ public function testAddressEquals()
         );
     }
 
-    public function testAddressEqualsEmptyPath()
-    {
-        $this->session
-            ->expects($this->once())
-            ->method('getCurrentUrl')
-            ->willReturn('http://example.com')
-        ;
-
-        $this->assertCorrectAssertion('addressEquals', array('/'));
-    }
-
     public function testAddressNotEquals()
     {
         $this->session
@@ -86,6 +74,9 @@ public function testAddressMatches()
         );
     }
 
+    /**
+     * @covers Behat\Mink\WebAssert::cookieEquals
+     */
     public function testCookieEquals()
     {
         $this->session->
@@ -107,6 +98,9 @@ public function testCookieEquals()
         );
     }
 
+    /**
+     * @covers Behat\Mink\WebAssert::cookieExists
+     */
     public function testCookieExists()
     {
         $this->session->
@@ -1107,25 +1101,21 @@ public function testCheckboxNotChecked()
         );
     }
 
-    private function assertCorrectAssertion($assertion, $arguments)
+    protected function assertCorrectAssertion($assertion, $arguments)
     {
         try {
             call_user_func_array(array($this->assert, $assertion), $arguments);
-        } catch (ExpectationException $e) {
+        } catch (\Exception $e) {
             $this->fail('Correct assertion should not throw an exception: '.$e->getMessage());
         }
     }
 
-    private function assertWrongAssertion($assertion, $arguments, $exceptionClass, $exceptionMessage)
+    protected function assertWrongAssertion($assertion, $arguments, $exceptionClass, $exceptionMessage)
     {
-        if ('Behat\Mink\Exception\ExpectationException' !== $exceptionClass && !is_subclass_of($exceptionClass, 'Behat\Mink\Exception\ExpectationException')) {
-            throw new \LogicException('Wrong expected exception for the failed assertion. It should be a Behat\Mink\Exception\ExpectationException.');
-        }
-
         try {
             call_user_func_array(array($this->assert, $assertion), $arguments);
             $this->fail('Wrong assertion should throw an exception');
-        } catch (ExpectationException $e) {
+        } catch (\Exception $e) {
             $this->assertInstanceOf($exceptionClass, $e);
             $this->assertSame($exceptionMessage, $e->getMessage());
         }
diff --git a/core/vendor/composer/LICENSE b/core/vendor/composer/LICENSE
deleted file mode 100644
index c8d57af8b2788b6908cbfabc50c35970f40d7cc6..0000000000000000000000000000000000000000
--- a/core/vendor/composer/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-
-Copyright (c) 2015 Nils Adermann, Jordi Boggiano
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
diff --git a/core/vendor/composer/autoload_classmap.php b/core/vendor/composer/autoload_classmap.php
index e66d49b53e4f7ef6e792b34eeaba078aa67496ef..014199966dec3f9d0a8c671ee25af9d9e6a97770 100644
--- a/core/vendor/composer/autoload_classmap.php
+++ b/core/vendor/composer/autoload_classmap.php
@@ -212,7 +212,6 @@
     'PHP_CodeCoverage_Report_XML_Totals' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Totals.php',
     'PHP_CodeCoverage_Util' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage/Util.php',
     'PHP_CodeCoverage_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage/Util/InvalidArgumentHelper.php',
-    'PHP_Timer' => $vendorDir . '/phpunit/php-timer/PHP/Timer.php',
     'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
@@ -297,7 +296,6 @@
     'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_IN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
@@ -314,10 +312,6 @@
     'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_JOIN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_LAMBDA_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_LAMBDA_CP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_LAMBDA_OP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
@@ -360,7 +354,6 @@
     'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_SHAPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
@@ -378,9 +371,6 @@
     'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_TYPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_TYPELIST_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
-    'PHP_Token_TYPELIST_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
     'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php
index 693fec9c345d6b9829b31468cf1a093feead24d5..152c7175378e3640039a1b53678c9e9fad38bdf1 100644
--- a/core/vendor/composer/autoload_files.php
+++ b/core/vendor/composer/autoload_files.php
@@ -6,8 +6,10 @@
 $baseDir = dirname($vendorDir);
 
 return array(
-    $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
-    $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
+    $vendorDir . '/phpunit/php-timer/PHP/Timer/Autoload.php',
+    $vendorDir . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
+    $vendorDir . '/guzzlehttp/psr7/src/functions.php',
+    $vendorDir . '/guzzlehttp/promises/src/functions.php',
     $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
     $baseDir . '/lib/Drupal.php',
 );
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 63f4b704af3ea04ffdc73a26c59f9b9b9c16f80a..eab7fe3dc9b83c0f2626934164bc8714d118fd80 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -8,7 +8,11 @@
 return array(
     'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src'),
     'org\\bovigo\\vfs\\' => array($vendorDir . '/mikey179/vfsStream/src/main/php'),
+    'dflydev\\markdown' => array($vendorDir . '/dflydev/markdown/src'),
     'Twig_' => array($vendorDir . '/twig/twig/lib'),
+    'Symfony\\Component\\DomCrawler' => array($vendorDir . '/symfony/dom-crawler'),
+    'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'),
+    'Symfony\\Component\\BrowserKit' => array($vendorDir . '/symfony/browser-kit'),
     'Stack' => array($vendorDir . '/stack/builder/src'),
     'Psr\\Log\\' => array($vendorDir . '/psr/log'),
     'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'),
@@ -22,4 +26,5 @@
     'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib'),
     'Doctrine\\Common\\' => array($vendorDir . '/doctrine/common/lib'),
     'Behat\\Mink\\Driver' => array($vendorDir . '/behat/mink-browserkit-driver/src'),
+    'Behat\\Mink' => array($vendorDir . '/behat/mink/src'),
 );
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index aeaabc1b58a915196ff5cbeb4c5b02cc01fe965c..6bcc627ddbc038aea11fdb22cfcc56fc5f15e9a6 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -6,9 +6,9 @@
 $baseDir = dirname($vendorDir);
 
 return array(
-    'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib'),
-    'Zend\\Feed\\' => array($vendorDir . '/zendframework/zend-feed'),
-    'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper'),
+    'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib/src'),
+    'Zend\\Feed\\' => array($vendorDir . '/zendframework/zend-feed/src'),
+    'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper/src'),
     'Zend\\Diactoros\\' => array($vendorDir . '/zendframework/zend-diactoros/src'),
     'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
     'Symfony\\Component\\Validator\\' => array($vendorDir . '/symfony/validator'),
@@ -19,13 +19,10 @@
     'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
     'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
     'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
-    'Symfony\\Component\\DomCrawler\\' => array($vendorDir . '/symfony/dom-crawler'),
     'Symfony\\Component\\DependencyInjection\\' => array($vendorDir . '/symfony/dependency-injection'),
-    'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'),
     'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
     'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
     'Symfony\\Component\\ClassLoader\\' => array($vendorDir . '/symfony/class-loader'),
-    'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'),
     'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
     'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'),
     'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
@@ -38,5 +35,4 @@
     'Drupal\\Core\\' => array($baseDir . '/lib/Drupal/Core'),
     'Drupal\\Component\\' => array($baseDir . '/lib/Drupal/Component'),
     'Behat\\Mink\\Driver\\' => array($vendorDir . '/behat/mink-goutte-driver/src'),
-    'Behat\\Mink\\' => array($vendorDir . '/behat/mink/src'),
 );
diff --git a/core/vendor/composer/include_paths.php b/core/vendor/composer/include_paths.php
index 9490138755bfd4e613c295ca589fbfc196f2c79e..7da94df3bbce3866e1c6ad990179dabf6c3142e7 100644
--- a/core/vendor/composer/include_paths.php
+++ b/core/vendor/composer/include_paths.php
@@ -8,4 +8,5 @@
 return array(
     $vendorDir . '/phpunit/php-text-template',
     $vendorDir . '/phpunit/php-timer',
+    $vendorDir . '/phpunit/php-code-coverage',
 );
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index e406431a18d75cbc9fc46373ed4259dbc34b6828..3b0c471f0c28744cd6935f37ee09c3ab8292747f 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -1,98 +1,92 @@
 [
     {
-        "name": "doctrine/inflector",
-        "version": "v1.0",
-        "version_normalized": "1.0.0.0",
+        "name": "twig/twig",
+        "version": "v1.20.0",
+        "version_normalized": "1.20.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/doctrine/inflector.git",
-            "reference": "v1.0"
+            "url": "https://github.com/twigphp/Twig.git",
+            "reference": "1ea4e5f81c6d005fe84d0b38e1c4f1955eb86844"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/doctrine/inflector/zipball/54b8333d2a5682afdc690060c1cf384ba9f47f08",
-            "reference": "v1.0",
+            "url": "https://api.github.com/repos/twigphp/Twig/zipball/1ea4e5f81c6d005fe84d0b38e1c4f1955eb86844",
+            "reference": "1ea4e5f81c6d005fe84d0b38e1c4f1955eb86844",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.2"
+            "php": ">=5.2.7"
         },
-        "time": "2013-01-10 21:49:15",
+        "time": "2015-08-12 15:56:39",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.20-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Doctrine\\Common\\Inflector\\": "lib/"
+                "Twig_": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Jonathan Wage",
-                "email": "jonwage@gmail.com",
-                "homepage": "http://www.jwage.com/"
-            },
-            {
-                "name": "Guilherme Blanco",
-                "email": "guilhermeblanco@gmail.com",
-                "homepage": "http://www.instaclick.com"
-            },
-            {
-                "name": "Roman Borschel",
-                "email": "roman@code-factory.org"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com",
+                "homepage": "http://fabien.potencier.org",
+                "role": "Lead Developer"
             },
             {
-                "name": "Benjamin Eberlei",
-                "email": "kontakt@beberlei.de"
+                "name": "Armin Ronacher",
+                "email": "armin.ronacher@active-4.com",
+                "role": "Project Founder"
             },
             {
-                "name": "Johannes M. Schmitt",
-                "email": "schmittjoh@gmail.com",
-                "homepage": "https://github.com/schmittjoh",
-                "role": "Developer of wrapped JMSSerializerBundle"
+                "name": "Twig Team",
+                "homepage": "http://twig.sensiolabs.org/contributors",
+                "role": "Contributors"
             }
         ],
-        "description": "Common String Manipulations with regard to casing and singular/plural rules.",
-        "homepage": "http://www.doctrine-project.org",
+        "description": "Twig, the flexible, fast, and secure template language for PHP",
+        "homepage": "http://twig.sensiolabs.org",
         "keywords": [
-            "inflection",
-            "pluarlize",
-            "singuarlize",
-            "string"
+            "templating"
         ]
     },
     {
-        "name": "doctrine/collections",
-        "version": "v1.2",
-        "version_normalized": "1.2.0.0",
+        "name": "psr/http-message",
+        "version": "1.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/doctrine/collections.git",
-            "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2"
+            "url": "https://github.com/php-fig/http-message.git",
+            "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/doctrine/collections/zipball/b99c5c46c87126201899afe88ec490a25eedd6a2",
-            "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2",
+            "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+            "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.2"
+            "php": ">=5.3.0"
         },
-        "time": "2014-02-03 23:07:43",
+        "time": "2015-05-04 20:22:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.2.x-dev"
+                "dev-master": "1.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Doctrine\\Common\\Collections\\": "lib/"
+            "psr-4": {
+                "Psr\\Http\\Message\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -101,76 +95,60 @@
         ],
         "authors": [
             {
-                "name": "Jonathan Wage",
-                "email": "jonwage@gmail.com",
-                "homepage": "http://www.jwage.com/",
-                "role": "Creator"
-            },
-            {
-                "name": "Guilherme Blanco",
-                "email": "guilhermeblanco@gmail.com",
-                "homepage": "http://www.instaclick.com"
-            },
-            {
-                "name": "Roman Borschel",
-                "email": "roman@code-factory.org"
-            },
-            {
-                "name": "Benjamin Eberlei",
-                "email": "kontakt@beberlei.de"
-            },
-            {
-                "name": "Johannes Schmitt",
-                "email": "schmittjoh@gmail.com",
-                "homepage": "https://github.com/schmittjoh",
-                "role": "Developer of wrapped JMSSerializerBundle"
+                "name": "PHP-FIG",
+                "homepage": "http://www.php-fig.org/"
             }
         ],
-        "description": "Collections Abstraction library",
-        "homepage": "http://www.doctrine-project.org",
+        "description": "Common interface for HTTP messages",
         "keywords": [
-            "array",
-            "collections",
-            "iterator"
+            "http",
+            "http-message",
+            "psr",
+            "psr-7",
+            "request",
+            "response"
         ]
     },
     {
-        "name": "doctrine/cache",
-        "version": "v1.3.1",
-        "version_normalized": "1.3.1.0",
+        "name": "guzzlehttp/psr7",
+        "version": "1.1.0",
+        "version_normalized": "1.1.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/doctrine/cache.git",
-            "reference": "cf483685798a72c93bf4206e3dd6358ea07d64e7"
+            "url": "https://github.com/guzzle/psr7.git",
+            "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/doctrine/cache/zipball/cf483685798a72c93bf4206e3dd6358ea07d64e7",
-            "reference": "cf483685798a72c93bf4206e3dd6358ea07d64e7",
+            "url": "https://api.github.com/repos/guzzle/psr7/zipball/af0e1758de355eb113917ad79c3c0e3604bce4bd",
+            "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.2"
+            "php": ">=5.4.0",
+            "psr/http-message": "~1.0"
         },
-        "conflict": {
-            "doctrine/common": ">2.2,<2.4"
+        "provide": {
+            "psr/http-message-implementation": "1.0"
         },
         "require-dev": {
-            "phpunit/phpunit": ">=3.7",
-            "satooshi/php-coveralls": "~0.6"
+            "phpunit/phpunit": "~4.0"
         },
-        "time": "2014-09-17 14:24:04",
+        "time": "2015-06-24 19:55:15",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.4.x-dev"
+                "dev-master": "1.0-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Doctrine\\Common\\Cache\\": "lib/"
-            }
+            "psr-4": {
+                "GuzzleHttp\\Psr7\\": "src/"
+            },
+            "files": [
+                "src/functions.php"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -178,68 +156,55 @@
         ],
         "authors": [
             {
-                "name": "Roman Borschel",
-                "email": "roman@code-factory.org"
-            },
-            {
-                "name": "Benjamin Eberlei",
-                "email": "kontakt@beberlei.de"
-            },
-            {
-                "name": "Guilherme Blanco",
-                "email": "guilhermeblanco@gmail.com"
-            },
-            {
-                "name": "Jonathan Wage",
-                "email": "jonwage@gmail.com"
-            },
-            {
-                "name": "Johannes Schmitt",
-                "email": "schmittjoh@gmail.com"
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
             }
         ],
-        "description": "Caching library offering an object-oriented API for many cache backends",
-        "homepage": "http://www.doctrine-project.org",
+        "description": "PSR-7 message implementation",
         "keywords": [
-            "cache",
-            "caching"
+            "http",
+            "message",
+            "stream",
+            "uri"
         ]
     },
     {
-        "name": "doctrine/annotations",
-        "version": "v1.2.1",
-        "version_normalized": "1.2.1.0",
+        "name": "guzzlehttp/promises",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/doctrine/annotations.git",
-            "reference": "6a6bec0670bb6e71a263b08bc1b98ea242928633"
+            "url": "https://github.com/guzzle/promises.git",
+            "reference": "01abc3232138f330d8a1eaa808fcbdf9b4292f47"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/doctrine/annotations/zipball/6a6bec0670bb6e71a263b08bc1b98ea242928633",
-            "reference": "6a6bec0670bb6e71a263b08bc1b98ea242928633",
+            "url": "https://api.github.com/repos/guzzle/promises/zipball/01abc3232138f330d8a1eaa808fcbdf9b4292f47",
+            "reference": "01abc3232138f330d8a1eaa808fcbdf9b4292f47",
             "shasum": ""
         },
         "require": {
-            "doctrine/lexer": "1.*",
-            "php": ">=5.3.2"
+            "php": ">=5.5.0"
         },
         "require-dev": {
-            "doctrine/cache": "1.*",
-            "phpunit/phpunit": "4.*"
+            "phpunit/phpunit": "^4.0"
         },
-        "time": "2014-09-25 16:45:30",
+        "time": "2015-05-13 05:05:10",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.3.x-dev"
+                "dev-master": "1.0-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Doctrine\\Common\\Annotations\\": "lib/"
-            }
+            "psr-4": {
+                "GuzzleHttp\\Promise\\": "src/"
+            },
+            "files": [
+                "src/functions.php"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -247,116 +212,116 @@
         ],
         "authors": [
             {
-                "name": "Roman Borschel",
-                "email": "roman@code-factory.org"
-            },
-            {
-                "name": "Benjamin Eberlei",
-                "email": "kontakt@beberlei.de"
-            },
-            {
-                "name": "Guilherme Blanco",
-                "email": "guilhermeblanco@gmail.com"
-            },
-            {
-                "name": "Jonathan Wage",
-                "email": "jonwage@gmail.com"
-            },
-            {
-                "name": "Johannes Schmitt",
-                "email": "schmittjoh@gmail.com"
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
             }
         ],
-        "description": "Docblock Annotations Parser",
-        "homepage": "http://www.doctrine-project.org",
+        "description": "Guzzle promises library",
         "keywords": [
-            "annotations",
-            "docblock",
-            "parser"
+            "promise"
         ]
     },
     {
-        "name": "phpunit/php-text-template",
-        "version": "1.2.0",
-        "version_normalized": "1.2.0.0",
+        "name": "guzzlehttp/guzzle",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-text-template.git",
-            "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
+            "url": "https://github.com/guzzle/guzzle.git",
+            "reference": "1879fbe853b0c64d109e369c7aeff09849e62d1e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
-            "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/33af93ab4b5e76df7a4c774910590f814a3e576c",
+            "reference": "1879fbe853b0c64d109e369c7aeff09849e62d1e",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "guzzlehttp/promises": "~1.0",
+            "guzzlehttp/psr7": "~1.1",
+            "php": ">=5.5.0"
         },
-        "time": "2014-01-30 17:20:04",
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "~4.0",
+            "psr/log": "~1.0"
+        },
+        "time": "2015-09-01 23:14:13",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "6.0-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "Text/"
-            ]
+            "files": [
+                "src/functions_include.php"
+            ],
+            "psr-4": {
+                "GuzzleHttp\\": "src/"
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
-        "include-path": [
-            ""
-        ],
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
             }
         ],
-        "description": "Simple template engine.",
-        "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+        "description": "Guzzle is a PHP HTTP client library",
+        "homepage": "http://guzzlephp.org/",
         "keywords": [
-            "template"
+            "client",
+            "curl",
+            "framework",
+            "http",
+            "http client",
+            "rest",
+            "web service"
         ]
     },
     {
-        "name": "doctrine/instantiator",
-        "version": "1.0.4",
-        "version_normalized": "1.0.4.0",
+        "name": "symfony/dom-crawler",
+        "version": "v2.1.0",
+        "version_normalized": "2.1.0.0",
+        "target-dir": "Symfony/Component/DomCrawler",
         "source": {
             "type": "git",
-            "url": "https://github.com/doctrine/instantiator.git",
-            "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119"
+            "url": "https://github.com/symfony/DomCrawler.git",
+            "reference": "4a2af1b8f83341b637e47a66c6b6798730038edc"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119",
-            "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119",
+            "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/4a2af1b8f83341b637e47a66c6b6798730038edc",
+            "reference": "4a2af1b8f83341b637e47a66c6b6798730038edc",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3,<8.0-DEV"
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "athletic/athletic": "~0.1.8",
-            "ext-pdo": "*",
-            "ext-phar": "*",
-            "phpunit/phpunit": "~4.0",
-            "squizlabs/php_codesniffer": "2.0.*@ALPHA"
+            "symfony/css-selector": "2.1.*"
+        },
+        "suggest": {
+            "symfony/css-selector": "v2.1.0"
         },
-        "time": "2014-10-13 12:58:55",
+        "time": "2012-08-28 07:54:42",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0.x-dev"
+                "dev-master": "2.1-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Doctrine\\Instantiator\\": "src"
+                "Symfony\\Component\\DomCrawler": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -365,85 +330,112 @@
         ],
         "authors": [
             {
-                "name": "Marco Pivetta",
-                "email": "ocramius@gmail.com",
-                "homepage": "http://ocramius.github.com/"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com",
+                "homepage": "http://fabien.potencier.org",
+                "role": "Lead Developer"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
             }
         ],
-        "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-        "homepage": "https://github.com/doctrine/instantiator",
-        "keywords": [
-            "constructor",
-            "instantiate"
-        ]
+        "description": "Symfony DomCrawler Component",
+        "homepage": "http://symfony.com"
     },
     {
-        "name": "phpunit/php-timer",
-        "version": "1.0.5",
-        "version_normalized": "1.0.5.0",
+        "name": "symfony/css-selector",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-timer.git",
-            "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
+            "url": "https://github.com/symfony/CssSelector.git",
+            "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
-            "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092",
+            "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.9"
+        },
+        "require-dev": {
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2013-08-02 07:42:54",
+        "time": "2015-05-15 13:33:16",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.7-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "PHP/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\CssSelector\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
-        "include-path": [
-            ""
-        ],
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Jean-FranÃ§ois Simon",
+                "email": "jeanfrancois.simon@sensiolabs.com"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Utility class for timing",
-        "homepage": "https://github.com/sebastianbergmann/php-timer/",
-        "keywords": [
-            "timer"
-        ]
+        "description": "Symfony CssSelector Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "psr/log",
-        "version": "1.0.0",
-        "version_normalized": "1.0.0.0",
+        "name": "symfony/browser-kit",
+        "version": "v2.1.0",
+        "version_normalized": "2.1.0.0",
+        "target-dir": "Symfony/Component/BrowserKit",
         "source": {
             "type": "git",
-            "url": "https://github.com/php-fig/log.git",
-            "reference": "1.0.0"
+            "url": "https://github.com/symfony/BrowserKit.git",
+            "reference": "6f2dc48d75ac9027bbea0f8e496f26613ad8b326"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
-            "reference": "1.0.0",
+            "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/6f2dc48d75ac9027bbea0f8e496f26613ad8b326",
+            "reference": "6f2dc48d75ac9027bbea0f8e496f26613ad8b326",
             "shasum": ""
         },
-        "time": "2012-12-21 11:40:51",
+        "require": {
+            "php": ">=5.3.3",
+            "symfony/dom-crawler": "2.1.*"
+        },
+        "require-dev": {
+            "symfony/css-selector": "2.1.*",
+            "symfony/process": "2.1.*"
+        },
+        "suggest": {
+            "symfony/process": "v2.1.0"
+        },
+        "time": "2012-08-22 13:48:41",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.1-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Psr\\Log\\": ""
+                "Symfony\\Component\\BrowserKit": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -452,51 +444,52 @@
         ],
         "authors": [
             {
-                "name": "PHP-FIG",
-                "homepage": "http://www.php-fig.org/"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com",
+                "homepage": "http://fabien.potencier.org",
+                "role": "Lead Developer"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
             }
         ],
-        "description": "Common interface for logging libraries",
-        "keywords": [
-            "log",
-            "psr",
-            "psr-3"
-        ]
+        "description": "Symfony BrowserKit Component",
+        "homepage": "http://symfony.com"
     },
     {
-        "name": "stack/builder",
-        "version": "v1.0.2",
-        "version_normalized": "1.0.2.0",
+        "name": "fabpot/goutte",
+        "version": "v3.1.0",
+        "version_normalized": "3.1.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/stackphp/builder.git",
-            "reference": "b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7"
+            "url": "https://github.com/FriendsOfPHP/Goutte.git",
+            "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/stackphp/builder/zipball/b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7",
-            "reference": "b4af43e7b7f3f7fac919ff475b29f7c5dc7b23b7",
+            "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/d9a5a28782d30e9f4e20176caea58a1d459f2c71",
+            "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0",
-            "symfony/http-foundation": "~2.1",
-            "symfony/http-kernel": "~2.1"
-        },
-        "require-dev": {
-            "silex/silex": "~1.0"
+            "guzzlehttp/guzzle": "^6.0",
+            "php": ">=5.5.0",
+            "symfony/browser-kit": "~2.1",
+            "symfony/css-selector": "~2.1",
+            "symfony/dom-crawler": "~2.1"
         },
-        "time": "2014-01-28 19:42:24",
-        "type": "library",
+        "time": "2015-06-24 16:11:31",
+        "type": "application",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0-dev"
+                "dev-master": "3.1-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Stack": "src"
+            "psr-4": {
+                "Goutte\\": "Goutte"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -505,56 +498,57 @@
         ],
         "authors": [
             {
-                "name": "Igor Wiedler",
-                "email": "igor@wiedler.ch",
-                "homepage": "http://wiedler.ch/igor/"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             }
         ],
-        "description": "Builder for stack middlewares based on HttpKernelInterface.",
+        "description": "A simple PHP Web Scraper",
+        "homepage": "https://github.com/FriendsOfPHP/Goutte",
         "keywords": [
-            "stack"
+            "scraper"
         ]
     },
     {
-        "name": "symfony-cmf/routing",
-        "version": "1.3.0",
-        "version_normalized": "1.3.0.0",
+        "name": "symfony/event-dispatcher",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony-cmf/Routing.git",
-            "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6"
+            "url": "https://github.com/symfony/EventDispatcher.git",
+            "reference": "687039686d0e923429ba6e958d0baa920cd5d458"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/8e87981d72c6930a27585dcd3119f3199f6cb2a6",
-            "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6",
+            "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/687039686d0e923429ba6e958d0baa920cd5d458",
+            "reference": "687039686d0e923429ba6e958d0baa920cd5d458",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "psr/log": "~1.0",
-            "symfony/http-kernel": "~2.2",
-            "symfony/routing": "~2.2"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "symfony/config": "~2.2",
-            "symfony/dependency-injection": "~2.0@stable",
-            "symfony/event-dispatcher": "~2.1"
+            "psr/log": "~1.0",
+            "symfony/config": "~2.0,>=2.0.5",
+            "symfony/dependency-injection": "~2.6",
+            "symfony/expression-language": "~2.6",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/stopwatch": "~2.3"
         },
         "suggest": {
-            "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ~2.1"
+            "symfony/dependency-injection": "",
+            "symfony/http-kernel": ""
         },
-        "time": "2014-10-20 20:55:17",
+        "time": "2015-05-02 15:21:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.3-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Symfony\\Cmf\\Component\\Routing\\": ""
+                "Symfony\\Component\\EventDispatcher\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -563,227 +557,81 @@
         ],
         "authors": [
             {
-                "name": "Symfony CMF Community",
-                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
-        "homepage": "http://cmf.symfony.com",
-        "keywords": [
-            "database",
-            "routing"
-        ]
+        "description": "Symfony EventDispatcher Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "easyrdf/easyrdf",
-        "version": "0.9.0",
-        "version_normalized": "0.9.0.0",
+        "name": "symfony/process",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/njh/easyrdf.git",
-            "reference": "bb9fd99768d23af0c5b7b55cec5baddc201272b8"
+            "url": "https://github.com/symfony/Process.git",
+            "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/njh/easyrdf/zipball/bb9fd99768d23af0c5b7b55cec5baddc201272b8",
-            "reference": "bb9fd99768d23af0c5b7b55cec5baddc201272b8",
+            "url": "https://api.github.com/repos/symfony/Process/zipball/e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
+            "reference": "e0a82b58e36afc60f8e79b8bc85a22bb064077c1",
             "shasum": ""
         },
         "require": {
-            "ext-mbstring": "*",
-            "ext-pcre": "*",
-            "php": ">=5.2.8"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~3.5",
-            "sami/sami": "~1.4",
-            "squizlabs/php_codesniffer": "~1.4.3"
-        },
-        "suggest": {
-            "ml/json-ld": "~1.0"
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2014-11-07 18:02:16",
+        "time": "2015-05-15 13:33:16",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.7-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "EasyRdf_": "lib/"
+            "psr-4": {
+                "Symfony\\Component\\Process\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Nicholas Humfrey",
-                "email": "njh@aelius.com",
-                "homepage": "http://www.aelius.com/njh/",
-                "role": "Developer"
-            },
-            {
-                "name": "Alexey Zakhlestin",
-                "email": "indeyets@gmail.com",
-                "role": "Developer"
-            }
-        ],
-        "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
-        "homepage": "http://www.easyrdf.org/",
-        "keywords": [
-            "Linked Data",
-            "RDF",
-            "Semantic Web",
-            "Turtle",
-            "rdfa",
-            "sparql"
-        ]
-    },
-    {
-        "name": "sebastian/global-state",
-        "version": "1.0.0",
-        "version_normalized": "1.0.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/sebastianbergmann/global-state.git",
-            "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
-            "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "~4.2"
-        },
-        "suggest": {
-            "ext-uopz": "*"
-        },
-        "time": "2014-10-06 09:23:50",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "classmap": [
-                "src/"
-            ]
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "authors": [
-            {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
-            }
-        ],
-        "description": "Snapshotting of global state",
-        "homepage": "http://www.github.com/sebastianbergmann/global-state",
-        "keywords": [
-            "global state"
-        ]
-    },
-    {
-        "name": "doctrine/common",
-        "version": "v2.4.2",
-        "version_normalized": "2.4.2.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/doctrine/common.git",
-            "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/doctrine/common/zipball/5db6ab40e4c531f14dad4ca96a394dfce5d4255b",
-            "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b",
-            "shasum": ""
-        },
-        "require": {
-            "doctrine/annotations": "1.*",
-            "doctrine/cache": "1.*",
-            "doctrine/collections": "1.*",
-            "doctrine/inflector": "1.*",
-            "doctrine/lexer": "1.*",
-            "php": ">=5.3.2"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "~3.7"
-        },
-        "time": "2014-05-21 19:28:51",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.4.x-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Doctrine\\Common\\": "lib/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Jonathan Wage",
-                "email": "jonwage@gmail.com",
-                "homepage": "http://www.jwage.com/",
-                "role": "Creator"
-            },
-            {
-                "name": "Guilherme Blanco",
-                "email": "guilhermeblanco@gmail.com",
-                "homepage": "http://www.instaclick.com"
-            },
-            {
-                "name": "Roman Borschel",
-                "email": "roman@code-factory.org"
-            },
-            {
-                "name": "Benjamin Eberlei",
-                "email": "kontakt@beberlei.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Johannes Schmitt",
-                "email": "schmittjoh@gmail.com",
-                "homepage": "https://github.com/schmittjoh",
-                "role": "Developer of wrapped JMSSerializerBundle"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Common Library for Doctrine projects",
-        "homepage": "http://www.doctrine-project.org",
-        "keywords": [
-            "annotations",
-            "collections",
-            "eventmanager",
-            "persistence",
-            "spl"
-        ]
+        "description": "Symfony Process Component",
+        "homepage": "https://symfony.com"
     },
     {
         "name": "behat/mink",
-        "version": "v1.6.1",
-        "version_normalized": "1.6.1.0",
+        "version": "v1.6.0",
+        "version_normalized": "1.6.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/minkphp/Mink.git",
-            "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a"
+            "reference": "090900a0049c441f1e072bbd837db4079b2250c5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/minkphp/Mink/zipball/8b68523a339ec991bcd638b39dc8f04f808da88a",
-            "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a",
+            "url": "https://api.github.com/repos/minkphp/Mink/zipball/090900a0049c441f1e072bbd837db4079b2250c5",
+            "reference": "090900a0049c441f1e072bbd837db4079b2250c5",
             "shasum": ""
         },
         "require": {
@@ -796,7 +644,7 @@
             "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": "2015-02-04 17:02:06",
+        "time": "2014-09-26 09:25:05",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -805,8 +653,8 @@
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Behat\\Mink\\": "src/"
+            "psr-0": {
+                "Behat\\Mink": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -820,7 +668,7 @@
                 "homepage": "http://everzet.com"
             }
         ],
-        "description": "Browser controller/emulator abstraction for PHP",
+        "description": "Web acceptance testing framework for PHP 5.3",
         "homepage": "http://mink.behat.org/",
         "keywords": [
             "browser",
@@ -886,40 +734,37 @@
         ]
     },
     {
-        "name": "masterminds/html5",
-        "version": "2.1.0",
-        "version_normalized": "2.1.0.0",
+        "name": "behat/mink-goutte-driver",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
         "source": {
             "type": "git",
-            "url": "https://github.com/Masterminds/html5-php.git",
-            "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704"
+            "url": "https://github.com/minkphp/MinkGoutteDriver.git",
+            "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
-            "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
+            "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/7e9a7319cc0e8cf9d4d4c9e06e2020d3a31bd792",
+            "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
             "shasum": ""
         },
         "require": {
-            "ext-libxml": "*",
-            "php": ">=5.3.0"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "4.*",
-            "sami/sami": "~2.0",
-            "satooshi/php-coveralls": "0.6.*"
+            "behat/mink": "~1.6@dev",
+            "behat/mink-browserkit-driver": "~1.2@dev",
+            "fabpot/goutte": "~1.0.4|~2.0|~3.1",
+            "php": ">=5.3.1"
         },
-        "time": "2015-02-09 16:26:00",
-        "type": "library",
+        "time": "2015-08-31 10:14:55",
+        "type": "mink-driver",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.1-dev"
+                "dev-master": "1.1.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Masterminds\\": "src"
+                "Behat\\Mink\\Driver\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -928,555 +773,587 @@
         ],
         "authors": [
             {
-                "name": "Matt Butcher",
-                "email": "technosophos@gmail.com"
-            },
-            {
-                "name": "Asmir Mustafic",
-                "email": "goetas@gmail.com"
-            },
-            {
-                "name": "Matt Farina",
-                "email": "matt@mattfarina.com"
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
             }
         ],
-        "description": "An HTML5 parser and serializer.",
-        "homepage": "http://masterminds.github.io/html5-php",
+        "description": "Goutte driver for Mink framework",
+        "homepage": "http://mink.behat.org/",
         "keywords": [
-            "HTML5",
-            "dom",
-            "html",
-            "parser",
-            "querypath",
-            "serializer",
-            "xml"
+            "browser",
+            "goutte",
+            "headless",
+            "testing"
         ]
     },
     {
-        "name": "zendframework/zend-stdlib",
-        "version": "2.4.0",
-        "version_normalized": "2.4.0.0",
+        "name": "symfony/psr-http-message-bridge",
+        "version": "v0.2",
+        "version_normalized": "0.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zend-stdlib.git",
-            "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030"
+            "url": "https://github.com/symfony/psr-http-message-bridge.git",
+            "reference": "dc7e308e1dc2898a46776e2221a643cb08315453"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3",
-            "reference": "eab586f4c18af3fa63c977611939f1f4a3cf1030",
+            "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/dc7e308e1dc2898a46776e2221a643cb08315453",
+            "reference": "dc7e308e1dc2898a46776e2221a643cb08315453",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.23"
+            "php": ">=5.3.3",
+            "psr/http-message": "~1.0",
+            "symfony/http-foundation": "~2.3|~3.0"
         },
         "require-dev": {
-            "zendframework/zend-eventmanager": "self.version",
-            "zendframework/zend-filter": "self.version",
-            "zendframework/zend-serializer": "self.version",
-            "zendframework/zend-servicemanager": "self.version"
+            "symfony/phpunit-bridge": "~2.7|~3.0"
         },
         "suggest": {
-            "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
-            "zendframework/zend-filter": "To support naming strategy hydrator usage",
-            "zendframework/zend-serializer": "Zend\\Serializer component",
-            "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
-        },
-        "time": "2015-04-01 18:09:29",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.3-dev",
-                "dev-develop": "2.4-dev"
-            }
+            "zendframework/zend-diactoros": "To use the Zend Diactoros factory"
         },
+        "time": "2015-05-29 17:57:12",
+        "type": "symfony-bridge",
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Zend\\Stdlib\\": ""
+                "Symfony\\Bridge\\PsrHttpMessage\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
-        "homepage": "https://github.com/zendframework/zf2",
-        "keywords": [
-            "stdlib",
-            "zf2"
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "PSR HTTP message bridge",
+        "homepage": "http://symfony.com",
+        "keywords": [
+            "http",
+            "http-message",
+            "psr-7"
         ]
     },
     {
-        "name": "zendframework/zend-escaper",
-        "version": "2.4.0",
-        "version_normalized": "2.4.0.0",
+        "name": "zendframework/zend-diactoros",
+        "version": "1.1.0",
+        "version_normalized": "1.1.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zend-escaper.git",
-            "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96"
+            "url": "https://github.com/zendframework/zend-diactoros.git",
+            "reference": "df65f70fc36f24d51a90ad706a09cd9b74fc4dd8"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97",
-            "reference": "65b3328627362b0be1d5e9067bc846511d1fbc96",
+            "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/df65f70fc36f24d51a90ad706a09cd9b74fc4dd8",
+            "reference": "df65f70fc36f24d51a90ad706a09cd9b74fc4dd8",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.23"
+            "php": ">=5.4",
+            "psr/http-message": "~1.0"
+        },
+        "provide": {
+            "psr/http-message-implementation": "~1.0.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.6",
+            "squizlabs/php_codesniffer": "^2.3.1"
         },
-        "time": "2015-04-01 18:02:07",
+        "time": "2015-06-24 20:42:54",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3-dev",
-                "dev-develop": "2.4-dev"
+                "dev-master": "1.0-dev",
+                "dev-develop": "1.1-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Zend\\Escaper\\": ""
+                "Zend\\Diactoros\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "BSD-2-Clause"
         ],
-        "homepage": "https://github.com/zendframework/zf2",
+        "description": "PSR HTTP Message implementations",
+        "homepage": "https://github.com/zendframework/zend-diactoros",
         "keywords": [
-            "escaper",
-            "zf2"
+            "http",
+            "psr",
+            "psr-7"
         ]
     },
     {
-        "name": "zendframework/zend-feed",
-        "version": "2.4.0",
-        "version_normalized": "2.4.0.0",
+        "name": "symfony/class-loader",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zend-feed.git",
-            "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5"
+            "url": "https://github.com/symfony/ClassLoader.git",
+            "reference": "fa19598cb708b92d983b34aae313f57c217f9386"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/0f59e560364f1f1fcb09a96874328ae3ff690db2",
-            "reference": "aca2b42ecf06d94c621e3c3be8e95d61d3a79bf5",
+            "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/fa19598cb708b92d983b34aae313f57c217f9386",
+            "reference": "fa19598cb708b92d983b34aae313f57c217f9386",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.23",
-            "zendframework/zend-escaper": "self.version",
-            "zendframework/zend-stdlib": "self.version"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "zendframework/zend-cache": "self.version",
-            "zendframework/zend-db": "self.version",
-            "zendframework/zend-http": "self.version",
-            "zendframework/zend-servicemanager": "self.version",
-            "zendframework/zend-validator": "self.version"
-        },
-        "suggest": {
-            "zendframework/zend-cache": "Zend\\Cache component",
-            "zendframework/zend-db": "Zend\\Db component",
-            "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
-            "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
-            "zendframework/zend-validator": "Zend\\Validator component"
+            "symfony/finder": "~2.0,>=2.0.5",
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-04-01 18:09:25",
+        "time": "2015-05-15 13:33:16",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3-dev",
-                "dev-develop": "2.4-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Zend\\Feed\\": ""
+                "Symfony\\Component\\ClassLoader\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
-        "description": "provides functionality for consuming RSS and Atom feeds",
-        "homepage": "https://github.com/zendframework/zf2",
-        "keywords": [
-            "feed",
-            "zf2"
-        ]
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony ClassLoader Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/version",
-        "version": "1.0.5",
-        "version_normalized": "1.0.5.0",
+        "name": "symfony/console",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/version.git",
-            "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4"
+            "url": "https://github.com/symfony/Console.git",
+            "reference": "7f0bec04961c61c961df0cb8c2ae88dbfd83f399"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
-            "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
+            "url": "https://api.github.com/repos/symfony/Console/zipball/7f0bec04961c61c961df0cb8c2ae88dbfd83f399",
+            "reference": "7f0bec04961c61c961df0cb8c2ae88dbfd83f399",
             "shasum": ""
         },
-        "time": "2015-02-24 06:35:25",
+        "require": {
+            "php": ">=5.3.9"
+        },
+        "require-dev": {
+            "psr/log": "~1.0",
+            "symfony/event-dispatcher": "~2.1",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/process": "~2.1"
+        },
+        "suggest": {
+            "psr/log": "For using the console logger",
+            "symfony/event-dispatcher": "",
+            "symfony/process": ""
+        },
+        "time": "2015-05-29 16:22:24",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.7-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Console\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-        "homepage": "https://github.com/sebastianbergmann/version"
+        "description": "Symfony Console Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/recursion-context",
-        "version": "1.0.0",
-        "version_normalized": "1.0.0.0",
+        "name": "symfony/dependency-injection",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/recursion-context.git",
-            "reference": "3989662bbb30a29d20d9faa04a846af79b276252"
+            "url": "https://github.com/symfony/DependencyInjection.git",
+            "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
-            "reference": "3989662bbb30a29d20d9faa04a846af79b276252",
+            "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
+            "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.9"
+        },
+        "conflict": {
+            "symfony/expression-language": "<2.6"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "symfony/config": "~2.2",
+            "symfony/expression-language": "~2.6",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/yaml": "~2.1"
         },
-        "time": "2015-01-24 09:48:32",
+        "suggest": {
+            "symfony/config": "",
+            "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
+            "symfony/yaml": ""
+        },
+        "time": "2015-05-29 14:44:44",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\DependencyInjection\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Jeff Welch",
-                "email": "whatthejeff@gmail.com"
-            },
-            {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Adam Harvey",
-                "email": "aharvey@php.net"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Provides functionality to recursively process PHP variables",
-        "homepage": "http://www.github.com/sebastianbergmann/recursion-context"
+        "description": "Symfony DependencyInjection Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/exporter",
-        "version": "1.2.0",
-        "version_normalized": "1.2.0.0",
+        "name": "symfony/serializer",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/exporter.git",
-            "reference": "84839970d05254c73cde183a721c7af13aede943"
+            "url": "https://github.com/symfony/Serializer.git",
+            "reference": "634d3adf119396320fba4c14caa01390700e7f3b"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943",
-            "reference": "84839970d05254c73cde183a721c7af13aede943",
+            "url": "https://api.github.com/repos/symfony/Serializer/zipball/634d3adf119396320fba4c14caa01390700e7f3b",
+            "reference": "634d3adf119396320fba4c14caa01390700e7f3b",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "sebastian/recursion-context": "~1.0"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "doctrine/annotations": "~1.0",
+            "doctrine/cache": "~1.0",
+            "symfony/config": "~2.2",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/property-access": "~2.3",
+            "symfony/yaml": "~2.0"
         },
-        "time": "2015-01-27 07:23:06",
+        "suggest": {
+            "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
+            "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
+            "symfony/config": "For using the XML mapping loader.",
+            "symfony/property-access": "For using the ObjectNormalizer.",
+            "symfony/yaml": "For using the default YAML mapping loader."
+        },
+        "time": "2015-05-29 14:44:44",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.2.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Serializer\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Jeff Welch",
-                "email": "whatthejeff@gmail.com"
-            },
-            {
-                "name": "Volker Dusch",
-                "email": "github@wallbash.com"
-            },
-            {
-                "name": "Bernhard Schussek",
-                "email": "bschussek@2bepublished.at"
-            },
-            {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Adam Harvey",
-                "email": "aharvey@php.net"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Provides the functionality to export PHP variables for visualization",
-        "homepage": "http://www.github.com/sebastianbergmann/exporter",
-        "keywords": [
-            "export",
-            "exporter"
-        ]
+        "description": "Symfony Serializer Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/environment",
-        "version": "1.2.2",
-        "version_normalized": "1.2.2.0",
+        "name": "symfony/translation",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/environment.git",
-            "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e"
+            "url": "https://github.com/symfony/Translation.git",
+            "reference": "cc1907bbeacfcc703c031b67545400d6e7d1eb79"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e",
-            "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e",
+            "url": "https://api.github.com/repos/symfony/Translation/zipball/cc1907bbeacfcc703c031b67545400d6e7d1eb79",
+            "reference": "cc1907bbeacfcc703c031b67545400d6e7d1eb79",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.9"
+        },
+        "conflict": {
+            "symfony/config": "<2.7"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "psr/log": "~1.0",
+            "symfony/config": "~2.7",
+            "symfony/intl": "~2.3",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/yaml": "~2.2"
+        },
+        "suggest": {
+            "psr/log": "To use logging capability in translator",
+            "symfony/config": "",
+            "symfony/yaml": ""
         },
-        "time": "2015-01-01 10:01:08",
+        "time": "2015-05-29 14:44:44",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.3.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Translation\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Provides functionality to handle HHVM/PHP environments",
-        "homepage": "http://www.github.com/sebastianbergmann/environment",
-        "keywords": [
-            "Xdebug",
-            "environment",
-            "hhvm"
-        ]
+        "description": "Symfony Translation Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/diff",
-        "version": "1.3.0",
-        "version_normalized": "1.3.0.0",
+        "name": "symfony/validator",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/diff.git",
-            "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
+            "url": "https://github.com/symfony/Validator.git",
+            "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
-            "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
+            "url": "https://api.github.com/repos/symfony/Validator/zipball/3a5461a388ff8962790fd5a39e6e2da84ba1e824",
+            "reference": "3a5461a388ff8962790fd5a39e6e2da84ba1e824",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.9",
+            "symfony/translation": "~2.4"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.2"
+            "doctrine/annotations": "~1.0",
+            "doctrine/cache": "~1.0",
+            "egulias/email-validator": "~1.2,>=1.2.1",
+            "symfony/config": "~2.2",
+            "symfony/expression-language": "~2.4",
+            "symfony/http-foundation": "~2.1",
+            "symfony/intl": "~2.3",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/property-access": "~2.3",
+            "symfony/yaml": "~2.0,>=2.0.5"
+        },
+        "suggest": {
+            "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
+            "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
+            "egulias/email-validator": "Strict (RFC compliant) email validation",
+            "symfony/config": "",
+            "symfony/expression-language": "For using the 2.4 Expression validator",
+            "symfony/http-foundation": "",
+            "symfony/intl": "",
+            "symfony/property-access": "For using the 2.4 Validator API",
+            "symfony/yaml": ""
         },
-        "time": "2015-02-22 15:13:53",
+        "time": "2015-05-29 14:44:44",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.3-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Validator\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Kore Nordmann",
-                "email": "mail@kore-nordmann.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             },
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Diff implementation",
-        "homepage": "http://www.github.com/sebastianbergmann/diff",
-        "keywords": [
-            "diff"
-        ]
+        "description": "Symfony Validator Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "sebastian/comparator",
-        "version": "1.1.1",
-        "version_normalized": "1.1.1.0",
+        "name": "doctrine/lexer",
+        "version": "v1.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/comparator.git",
-            "reference": "1dd8869519a225f7f2b9eb663e225298fade819e"
+            "url": "https://github.com/doctrine/lexer.git",
+            "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e",
-            "reference": "1dd8869519a225f7f2b9eb663e225298fade819e",
+            "url": "https://api.github.com/repos/doctrine/lexer/zipball/2f708a85bb3aab5d99dab8be435abd73e0b18acb",
+            "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "sebastian/diff": "~1.2",
-            "sebastian/exporter": "~1.2"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "~4.4"
+            "php": ">=5.3.2"
         },
-        "time": "2015-01-29 16:28:08",
+        "time": "2013-01-12 18:59:04",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.1.x-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-0": {
+                "Doctrine\\Common\\Lexer\\": "lib/"
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Jeff Welch",
-                "email": "whatthejeff@gmail.com"
-            },
-            {
-                "name": "Volker Dusch",
-                "email": "github@wallbash.com"
+                "name": "Guilherme Blanco",
+                "email": "guilhermeblanco@gmail.com",
+                "homepage": "http://www.instaclick.com"
             },
             {
-                "name": "Bernhard Schussek",
-                "email": "bschussek@2bepublished.at"
+                "name": "Roman Borschel",
+                "email": "roman@code-factory.org"
             },
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Johannes Schmitt",
+                "email": "schmittjoh@gmail.com",
+                "homepage": "https://github.com/schmittjoh",
+                "role": "Developer of wrapped JMSSerializerBundle"
             }
         ],
-        "description": "Provides the functionality to compare PHP values for equality",
-        "homepage": "http://www.github.com/sebastianbergmann/comparator",
+        "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
+        "homepage": "http://www.doctrine-project.org",
         "keywords": [
-            "comparator",
-            "compare",
-            "equality"
+            "lexer",
+            "parser"
         ]
     },
     {
-        "name": "phpdocumentor/reflection-docblock",
-        "version": "2.0.4",
-        "version_normalized": "2.0.4.0",
+        "name": "doctrine/annotations",
+        "version": "v1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-            "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+            "url": "https://github.com/doctrine/annotations.git",
+            "reference": "d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
-            "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+            "url": "https://api.github.com/repos/doctrine/annotations/zipball/d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd",
+            "reference": "d9b1a37e9351ddde1f19f09a02e3d6ee92e82efd",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "doctrine/lexer": "1.*",
+            "php": ">=5.3.2"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.0"
-        },
-        "suggest": {
-            "dflydev/markdown": "~1.0",
-            "erusev/parsedown": "~1.0"
+            "doctrine/cache": "1.*",
+            "phpunit/phpunit": "4.*"
         },
-        "time": "2015-02-03 12:10:50",
+        "time": "2014-07-06 15:52:21",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "dev-master": "1.3.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "phpDocumentor": [
-                    "src/"
-                ]
+                "Doctrine\\Common\\Annotations\\": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -1485,45 +1362,63 @@
         ],
         "authors": [
             {
-                "name": "Mike van Riel",
-                "email": "mike.vanriel@naenius.com"
+                "name": "Jonathan Wage",
+                "email": "jonwage@gmail.com",
+                "homepage": "http://www.jwage.com/",
+                "role": "Creator"
+            },
+            {
+                "name": "Guilherme Blanco",
+                "email": "guilhermeblanco@gmail.com",
+                "homepage": "http://www.instaclick.com"
+            },
+            {
+                "name": "Roman Borschel",
+                "email": "roman@code-factory.org"
+            },
+            {
+                "name": "Benjamin Eberlei",
+                "email": "kontakt@beberlei.de"
+            },
+            {
+                "name": "Johannes Schmitt",
+                "email": "schmittjoh@gmail.com",
+                "homepage": "https://github.com/schmittjoh",
+                "role": "Developer of wrapped JMSSerializerBundle"
             }
+        ],
+        "description": "Docblock Annotations Parser",
+        "homepage": "http://www.doctrine-project.org",
+        "keywords": [
+            "annotations",
+            "docblock",
+            "parser"
         ]
     },
     {
-        "name": "phpspec/prophecy",
-        "version": "1.4.0",
-        "version_normalized": "1.4.0.0",
+        "name": "doctrine/collections",
+        "version": "v1.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/phpspec/prophecy.git",
-            "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5"
+            "url": "https://github.com/doctrine/collections.git",
+            "reference": "b1e6852b5e49e94ac818feca3b1a8689daefbffc"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
-            "reference": "8724cd239f8ef4c046f55a3b18b4d91cc7f3e4c5",
+            "url": "https://api.github.com/repos/doctrine/collections/zipball/b1e6852b5e49e94ac818feca3b1a8689daefbffc",
+            "reference": "b1e6852b5e49e94ac818feca3b1a8689daefbffc",
             "shasum": ""
         },
         "require": {
-            "doctrine/instantiator": "^1.0.2",
-            "phpdocumentor/reflection-docblock": "~2.0",
-            "sebastian/comparator": "~1.1"
-        },
-        "require-dev": {
-            "phpspec/phpspec": "~2.0"
+            "php": ">=5.3.2"
         },
-        "time": "2015-03-27 19:31:25",
+        "time": "2013-01-12 16:36:50",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.4.x-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Prophecy\\": "src/"
+                "Doctrine\\Common\\Collections\\": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -1532,353 +1427,596 @@
         ],
         "authors": [
             {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
+                "name": "Jonathan Wage",
+                "email": "jonwage@gmail.com",
+                "homepage": "http://www.jwage.com/",
+                "role": "Creator"
             },
             {
-                "name": "Marcello Duarte",
-                "email": "marcello.duarte@gmail.com"
-            }
-        ],
-        "description": "Highly opinionated mocking framework for PHP 5.3+",
-        "homepage": "https://github.com/phpspec/prophecy",
-        "keywords": [
-            "Double",
-            "Dummy",
-            "fake",
-            "mock",
-            "spy",
-            "stub"
-        ]
-    },
+                "name": "Guilherme Blanco",
+                "email": "guilhermeblanco@gmail.com",
+                "homepage": "http://www.instaclick.com"
+            },
+            {
+                "name": "Roman Borschel",
+                "email": "roman@code-factory.org"
+            },
+            {
+                "name": "Benjamin Eberlei",
+                "email": "kontakt@beberlei.de"
+            },
+            {
+                "name": "Johannes Schmitt",
+                "email": "schmittjoh@gmail.com",
+                "homepage": "https://github.com/schmittjoh",
+                "role": "Developer of wrapped JMSSerializerBundle"
+            }
+        ],
+        "description": "Collections Abstraction library",
+        "homepage": "http://www.doctrine-project.org",
+        "keywords": [
+            "array",
+            "collections",
+            "iterator"
+        ]
+    },
     {
-        "name": "phpunit/phpunit-mock-objects",
-        "version": "2.3.1",
-        "version_normalized": "2.3.1.0",
+        "name": "doctrine/cache",
+        "version": "v1.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-            "reference": "74ffb87f527f24616f72460e54b595f508dccb5c"
+            "url": "https://github.com/doctrine/cache.git",
+            "reference": "914abe4a49f2eae2b268073cca147b530da0308a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/74ffb87f527f24616f72460e54b595f508dccb5c",
-            "reference": "74ffb87f527f24616f72460e54b595f508dccb5c",
+            "url": "https://api.github.com/repos/doctrine/cache/zipball/914abe4a49f2eae2b268073cca147b530da0308a",
+            "reference": "914abe4a49f2eae2b268073cca147b530da0308a",
             "shasum": ""
         },
         "require": {
-            "doctrine/instantiator": "~1.0,>=1.0.2",
-            "php": ">=5.3.3",
-            "phpunit/php-text-template": "~1.2"
+            "php": ">=5.3.2"
         },
-        "require-dev": {
-            "phpunit/phpunit": "~4.4"
+        "time": "2013-01-10 22:43:46",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Doctrine\\Common\\Cache\\": "lib/"
+            }
         },
-        "suggest": {
-            "ext-soap": "*"
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jonathan Wage",
+                "email": "jonwage@gmail.com",
+                "homepage": "http://www.jwage.com/",
+                "role": "Creator"
+            },
+            {
+                "name": "Guilherme Blanco",
+                "email": "guilhermeblanco@gmail.com",
+                "homepage": "http://www.instaclick.com"
+            },
+            {
+                "name": "Roman Borschel",
+                "email": "roman@code-factory.org"
+            },
+            {
+                "name": "Benjamin Eberlei",
+                "email": "kontakt@beberlei.de"
+            },
+            {
+                "name": "Johannes Schmitt",
+                "email": "schmittjoh@gmail.com",
+                "homepage": "https://github.com/schmittjoh",
+                "role": "Developer of wrapped JMSSerializerBundle"
+            }
+        ],
+        "description": "Caching library offering an object-oriented API for many cache backends",
+        "homepage": "http://www.doctrine-project.org",
+        "keywords": [
+            "cache",
+            "caching"
+        ]
+    },
+    {
+        "name": "doctrine/inflector",
+        "version": "v1.0",
+        "version_normalized": "1.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/doctrine/inflector.git",
+            "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/doctrine/inflector/zipball/54b8333d2a5682afdc690060c1cf384ba9f47f08",
+            "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2"
+        },
+        "time": "2013-01-10 21:49:15",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Doctrine\\Common\\Inflector\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jonathan Wage",
+                "email": "jonwage@gmail.com",
+                "homepage": "http://www.jwage.com/",
+                "role": "Creator"
+            },
+            {
+                "name": "Guilherme Blanco",
+                "email": "guilhermeblanco@gmail.com",
+                "homepage": "http://www.instaclick.com"
+            },
+            {
+                "name": "Roman Borschel",
+                "email": "roman@code-factory.org"
+            },
+            {
+                "name": "Benjamin Eberlei",
+                "email": "kontakt@beberlei.de"
+            },
+            {
+                "name": "Johannes Schmitt",
+                "email": "schmittjoh@gmail.com",
+                "homepage": "https://github.com/schmittjoh",
+                "role": "Developer of wrapped JMSSerializerBundle"
+            }
+        ],
+        "description": "Common String Manipulations with regard to casing and singular/plural rules.",
+        "homepage": "http://www.doctrine-project.org",
+        "keywords": [
+            "inflection",
+            "pluarlize",
+            "singuarlize",
+            "string"
+        ]
+    },
+    {
+        "name": "doctrine/common",
+        "version": "v2.4.2",
+        "version_normalized": "2.4.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/doctrine/common.git",
+            "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/doctrine/common/zipball/5db6ab40e4c531f14dad4ca96a394dfce5d4255b",
+            "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b",
+            "shasum": ""
+        },
+        "require": {
+            "doctrine/annotations": "1.*",
+            "doctrine/cache": "1.*",
+            "doctrine/collections": "1.*",
+            "doctrine/inflector": "1.*",
+            "doctrine/lexer": "1.*",
+            "php": ">=5.3.2"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~3.7"
         },
-        "time": "2015-04-02 05:36:41",
+        "time": "2014-05-21 19:28:51",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.3.x-dev"
+                "dev-master": "2.4.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-0": {
+                "Doctrine\\Common\\": "lib/"
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Jonathan Wage",
+                "email": "jonwage@gmail.com",
+                "homepage": "http://www.jwage.com/",
+                "role": "Creator"
+            },
+            {
+                "name": "Guilherme Blanco",
+                "email": "guilhermeblanco@gmail.com",
+                "homepage": "http://www.instaclick.com"
+            },
+            {
+                "name": "Roman Borschel",
+                "email": "roman@code-factory.org"
+            },
+            {
+                "name": "Benjamin Eberlei",
+                "email": "kontakt@beberlei.de"
+            },
+            {
+                "name": "Johannes Schmitt",
+                "email": "schmittjoh@gmail.com",
+                "homepage": "https://github.com/schmittjoh",
+                "role": "Developer of wrapped JMSSerializerBundle"
             }
         ],
-        "description": "Mock Object library for PHPUnit",
-        "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+        "description": "Common Library for Doctrine projects",
+        "homepage": "http://www.doctrine-project.org",
         "keywords": [
-            "mock",
-            "xunit"
+            "annotations",
+            "collections",
+            "eventmanager",
+            "persistence",
+            "spl"
         ]
     },
     {
-        "name": "phpunit/php-token-stream",
-        "version": "1.4.1",
-        "version_normalized": "1.4.1.0",
+        "name": "psr/log",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-            "reference": "eab81d02569310739373308137284e0158424330"
+            "url": "https://github.com/php-fig/log.git",
+            "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+            "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+            "shasum": ""
+        },
+        "time": "2012-12-21 11:40:51",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Psr\\Log\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "PHP-FIG",
+                "homepage": "http://www.php-fig.org/"
+            }
+        ],
+        "description": "Common interface for logging libraries",
+        "keywords": [
+            "log",
+            "psr",
+            "psr-3"
+        ]
+    },
+    {
+        "name": "symfony/debug",
+        "version": "v2.6.2",
+        "version_normalized": "2.6.2.0",
+        "target-dir": "Symfony/Component/Debug",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Debug.git",
+            "reference": "7213c8200d60728c9d4c56d5830aa2d80ae3d25d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330",
-            "reference": "eab81d02569310739373308137284e0158424330",
+            "url": "https://api.github.com/repos/symfony/Debug/zipball/7213c8200d60728c9d4c56d5830aa2d80ae3d25d",
+            "reference": "7213c8200d60728c9d4c56d5830aa2d80ae3d25d",
             "shasum": ""
         },
         "require": {
-            "ext-tokenizer": "*",
-            "php": ">=5.3.3"
+            "php": ">=5.3.3",
+            "psr/log": "~1.0"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.2"
+            "symfony/class-loader": "~2.2",
+            "symfony/http-foundation": "~2.1",
+            "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2"
+        },
+        "suggest": {
+            "symfony/http-foundation": "",
+            "symfony/http-kernel": ""
         },
-        "time": "2015-04-08 04:46:07",
+        "time": "2015-01-05 17:41:06",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.4-dev"
+                "dev-master": "2.6-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-0": {
+                "Symfony\\Component\\Debug\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de"
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             }
         ],
-        "description": "Wrapper around PHP's tokenizer extension.",
-        "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-        "keywords": [
-            "tokenizer"
-        ]
+        "description": "Symfony Debug Component",
+        "homepage": "http://symfony.com"
     },
     {
-        "name": "phpunit/php-file-iterator",
-        "version": "1.4.0",
-        "version_normalized": "1.4.0.0",
+        "name": "symfony/http-kernel",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
+            "url": "https://github.com/symfony/HttpKernel.git",
+            "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
-            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
+            "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
+            "reference": "74acbb7ef9c4aae0620d3250b9b990d2fff28d16",
             "shasum": ""
         },
-        "require": {
-            "php": ">=5.3.3"
+        "require": {
+            "php": ">=5.3.9",
+            "psr/log": "~1.0",
+            "symfony/debug": "~2.6,>=2.6.2",
+            "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
+            "symfony/http-foundation": "~2.5,>=2.5.4"
+        },
+        "conflict": {
+            "symfony/config": "<2.7"
+        },
+        "require-dev": {
+            "symfony/browser-kit": "~2.3",
+            "symfony/class-loader": "~2.1",
+            "symfony/config": "~2.7",
+            "symfony/console": "~2.3",
+            "symfony/css-selector": "~2.0,>=2.0.5",
+            "symfony/dependency-injection": "~2.2",
+            "symfony/dom-crawler": "~2.0,>=2.0.5",
+            "symfony/expression-language": "~2.4",
+            "symfony/finder": "~2.0,>=2.0.5",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/process": "~2.0,>=2.0.5",
+            "symfony/routing": "~2.2",
+            "symfony/stopwatch": "~2.3",
+            "symfony/templating": "~2.2",
+            "symfony/translation": "~2.0,>=2.0.5",
+            "symfony/var-dumper": "~2.6"
+        },
+        "suggest": {
+            "symfony/browser-kit": "",
+            "symfony/class-loader": "",
+            "symfony/config": "",
+            "symfony/console": "",
+            "symfony/dependency-injection": "",
+            "symfony/finder": "",
+            "symfony/var-dumper": ""
         },
-        "time": "2015-04-02 05:19:05",
+        "time": "2015-05-30 16:52:28",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.4.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\HttpKernel\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-        "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-        "keywords": [
-            "filesystem",
-            "iterator"
-        ]
+        "description": "Symfony HttpKernel Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "phpunit/php-code-coverage",
-        "version": "2.0.16",
-        "version_normalized": "2.0.16.0",
+        "name": "symfony/routing",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-            "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c"
+            "url": "https://github.com/symfony/Routing.git",
+            "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/934fd03eb6840508231a7f73eb8940cf32c3b66c",
-            "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c",
+            "url": "https://api.github.com/repos/symfony/Routing/zipball/6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
+            "reference": "6f0333fb8b89cf6f8fd9d6740c5e83b73d9c95b9",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "phpunit/php-file-iterator": "~1.3",
-            "phpunit/php-text-template": "~1.2",
-            "phpunit/php-token-stream": "~1.3",
-            "sebastian/environment": "~1.0",
-            "sebastian/version": "~1.0"
+            "php": ">=5.3.9"
+        },
+        "conflict": {
+            "symfony/config": "<2.7"
         },
         "require-dev": {
-            "ext-xdebug": ">=2.1.4",
-            "phpunit/phpunit": "~4"
+            "doctrine/annotations": "~1.0",
+            "doctrine/common": "~2.2",
+            "psr/log": "~1.0",
+            "symfony/config": "~2.7",
+            "symfony/expression-language": "~2.4",
+            "symfony/http-foundation": "~2.3",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/yaml": "~2.0,>=2.0.5"
         },
         "suggest": {
-            "ext-dom": "*",
-            "ext-xdebug": ">=2.2.1",
-            "ext-xmlwriter": "*"
+            "doctrine/annotations": "For using the annotation loader",
+            "symfony/config": "For using the all-in-one router or any loader",
+            "symfony/expression-language": "For using expression matching",
+            "symfony/yaml": "For using the YAML loader"
         },
-        "time": "2015-04-11 04:35:00",
+        "time": "2015-05-19 06:58:17",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Component\\Routing\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sb@sebastian-bergmann.de",
-                "role": "lead"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-        "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+        "description": "Symfony Routing Component",
+        "homepage": "https://symfony.com",
         "keywords": [
-            "coverage",
-            "testing",
-            "xunit"
+            "router",
+            "routing",
+            "uri",
+            "url"
         ]
     },
     {
-        "name": "phpunit/phpunit",
-        "version": "4.6.4",
-        "version_normalized": "4.6.4.0",
+        "name": "symfony-cmf/routing",
+        "version": "1.3.0",
+        "version_normalized": "1.3.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/sebastianbergmann/phpunit.git",
-            "reference": "163232991e652e6efed2f8470326fffa61e848e2"
+            "url": "https://github.com/symfony-cmf/Routing.git",
+            "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/163232991e652e6efed2f8470326fffa61e848e2",
-            "reference": "163232991e652e6efed2f8470326fffa61e848e2",
+            "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/8e87981d72c6930a27585dcd3119f3199f6cb2a6",
+            "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6",
             "shasum": ""
         },
         "require": {
-            "ext-dom": "*",
-            "ext-json": "*",
-            "ext-pcre": "*",
-            "ext-reflection": "*",
-            "ext-spl": "*",
             "php": ">=5.3.3",
-            "phpspec/prophecy": "~1.3,>=1.3.1",
-            "phpunit/php-code-coverage": "~2.0,>=2.0.11",
-            "phpunit/php-file-iterator": "~1.4",
-            "phpunit/php-text-template": "~1.2",
-            "phpunit/php-timer": "~1.0",
-            "phpunit/phpunit-mock-objects": "~2.3",
-            "sebastian/comparator": "~1.1",
-            "sebastian/diff": "~1.2",
-            "sebastian/environment": "~1.2",
-            "sebastian/exporter": "~1.2",
-            "sebastian/global-state": "~1.0",
-            "sebastian/version": "~1.0",
-            "symfony/yaml": "~2.1|~3.0"
+            "psr/log": "~1.0",
+            "symfony/http-kernel": "~2.2",
+            "symfony/routing": "~2.2"
+        },
+        "require-dev": {
+            "symfony/config": "~2.2",
+            "symfony/dependency-injection": "~2.0@stable",
+            "symfony/event-dispatcher": "~2.1"
         },
         "suggest": {
-            "phpunit/php-invoker": "~1.1"
+            "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ~2.1"
         },
-        "time": "2015-04-11 05:23:21",
-        "bin": [
-            "phpunit"
-        ],
+        "time": "2014-10-20 20:55:17",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "4.6.x-dev"
+                "dev-master": "1.3-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "classmap": [
-                "src/"
-            ]
+            "psr-4": {
+                "Symfony\\Cmf\\Component\\Routing\\": ""
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Sebastian Bergmann",
-                "email": "sebastian@phpunit.de",
-                "role": "lead"
+                "name": "Symfony CMF Community",
+                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
             }
         ],
-        "description": "The PHP Unit Testing framework.",
-        "homepage": "https://phpunit.de/",
+        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
+        "homepage": "http://cmf.symfony.com",
         "keywords": [
-            "phpunit",
-            "testing",
-            "xunit"
+            "database",
+            "routing"
         ]
     },
     {
-        "name": "mikey179/vfsStream",
-        "version": "v1.5.0",
-        "version_normalized": "1.5.0.0",
+        "name": "easyrdf/easyrdf",
+        "version": "0.9.0",
+        "version_normalized": "0.9.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/mikey179/vfsStream.git",
-            "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a"
+            "url": "https://github.com/njh/easyrdf.git",
+            "reference": "bb9fd99768d23af0c5b7b55cec5baddc201272b8"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/4dc0d2f622412f561f5b242b19b98068bbbc883a",
-            "reference": "4dc0d2f622412f561f5b242b19b98068bbbc883a",
+            "url": "https://api.github.com/repos/njh/easyrdf/zipball/bb9fd99768d23af0c5b7b55cec5baddc201272b8",
+            "reference": "bb9fd99768d23af0c5b7b55cec5baddc201272b8",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0"
+            "ext-mbstring": "*",
+            "ext-pcre": "*",
+            "php": ">=5.2.8"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.5"
+            "phpunit/phpunit": "~3.5",
+            "sami/sami": "~1.4",
+            "squizlabs/php_codesniffer": "~1.4.3"
         },
-        "time": "2015-03-29 11:19:49",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.5.x-dev"
-            }
+        "suggest": {
+            "ml/json-ld": "~1.0"
         },
+        "time": "2014-11-07 18:02:16",
+        "type": "library",
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "org\\bovigo\\vfs\\": "src/main/php"
+                "EasyRdf_": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -1887,367 +2025,372 @@
         ],
         "authors": [
             {
-                "name": "Frank Kleine",
-                "homepage": "http://frankkleine.de/",
+                "name": "Nicholas Humfrey",
+                "email": "njh@aelius.com",
+                "homepage": "http://www.aelius.com/njh/",
+                "role": "Developer"
+            },
+            {
+                "name": "Alexey Zakhlestin",
+                "email": "indeyets@gmail.com",
                 "role": "Developer"
             }
         ],
-        "description": "Virtual file system to mock the real file system in unit tests.",
-        "homepage": "http://vfs.bovigo.org/"
+        "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
+        "homepage": "http://www.easyrdf.org/",
+        "keywords": [
+            "Linked Data",
+            "RDF",
+            "Semantic Web",
+            "Turtle",
+            "rdfa",
+            "sparql"
+        ]
     },
     {
-        "name": "doctrine/lexer",
-        "version": "v1.0.1",
-        "version_normalized": "1.0.1.0",
+        "name": "sebastian/version",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/doctrine/lexer.git",
-            "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+            "url": "https://github.com/sebastianbergmann/version.git",
+            "reference": "16b021aed448b654ae05846e394e057e9a6f04cb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-            "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+            "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/16b021aed448b654ae05846e394e057e9a6f04cb",
+            "reference": "16b021aed448b654ae05846e394e057e9a6f04cb",
             "shasum": ""
         },
-        "require": {
-            "php": ">=5.3.2"
-        },
-        "time": "2014-09-09 13:34:57",
+        "time": "2013-01-05 14:27:32",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.0.x-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Doctrine\\Common\\Lexer\\": "lib/"
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Roman Borschel",
-                "email": "roman@code-factory.org"
-            },
-            {
-                "name": "Guilherme Blanco",
-                "email": "guilhermeblanco@gmail.com"
-            },
+            "BSD-3-Clause"
+        ],
+        "authors": [
             {
-                "name": "Johannes Schmitt",
-                "email": "schmittjoh@gmail.com"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de",
+                "role": "lead"
             }
         ],
-        "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-        "homepage": "http://www.doctrine-project.org",
-        "keywords": [
-            "lexer",
-            "parser"
-        ]
+        "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+        "homepage": "https://github.com/sebastianbergmann/version"
     },
     {
-        "name": "psr/http-message",
-        "version": "1.0",
+        "name": "sebastian/global-state",
+        "version": "1.0.0",
         "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/php-fig/http-message.git",
-            "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
+            "url": "https://github.com/sebastianbergmann/global-state.git",
+            "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
-            "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+            "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
+            "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0"
+            "php": ">=5.3.3"
         },
-        "time": "2015-05-04 20:22:00",
+        "require-dev": {
+            "phpunit/phpunit": "~4.2"
+        },
+        "suggest": {
+            "ext-uopz": "*"
+        },
+        "time": "2014-10-06 09:23:50",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0.x-dev"
+                "dev-master": "1.0-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Psr\\Http\\Message\\": "src/"
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "PHP-FIG",
-                "homepage": "http://www.php-fig.org/"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Common interface for HTTP messages",
+        "description": "Snapshotting of global state",
+        "homepage": "http://www.github.com/sebastianbergmann/global-state",
         "keywords": [
-            "http",
-            "http-message",
-            "psr",
-            "psr-7",
-            "request",
-            "response"
+            "global state"
         ]
     },
     {
-        "name": "symfony/psr-http-message-bridge",
-        "version": "v0.2",
-        "version_normalized": "0.2.0.0",
+        "name": "sebastian/recursion-context",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/psr-http-message-bridge.git",
-            "reference": "dc7e308e1dc2898a46776e2221a643cb08315453"
+            "url": "https://github.com/sebastianbergmann/recursion-context.git",
+            "reference": "3989662bbb30a29d20d9faa04a846af79b276252"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/dc7e308e1dc2898a46776e2221a643cb08315453",
-            "reference": "dc7e308e1dc2898a46776e2221a643cb08315453",
+            "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
+            "reference": "3989662bbb30a29d20d9faa04a846af79b276252",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3",
-            "psr/http-message": "~1.0",
-            "symfony/http-foundation": "~2.3|~3.0"
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "symfony/phpunit-bridge": "~2.7|~3.0"
+            "phpunit/phpunit": "~4.4"
         },
-        "suggest": {
-            "zendframework/zend-diactoros": "To use the Zend Diactoros factory"
+        "time": "2015-01-24 09:48:32",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
         },
-        "time": "2015-05-29 17:57:12",
-        "type": "symfony-bridge",
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Bridge\\PsrHttpMessage\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Jeff Welch",
+                "email": "whatthejeff@gmail.com"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
+            },
+            {
+                "name": "Adam Harvey",
+                "email": "aharvey@php.net"
             }
         ],
-        "description": "PSR HTTP message bridge",
-        "homepage": "http://symfony.com",
-        "keywords": [
-            "http",
-            "http-message",
-            "psr-7"
-        ]
+        "description": "Provides functionality to recursively process PHP variables",
+        "homepage": "http://www.github.com/sebastianbergmann/recursion-context"
     },
     {
-        "name": "zendframework/zend-diactoros",
-        "version": "1.1.0",
-        "version_normalized": "1.1.0.0",
+        "name": "sebastian/exporter",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/zendframework/zend-diactoros.git",
-            "reference": "df65f70fc36f24d51a90ad706a09cd9b74fc4dd8"
+            "url": "https://github.com/sebastianbergmann/exporter.git",
+            "reference": "84839970d05254c73cde183a721c7af13aede943"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/df65f70fc36f24d51a90ad706a09cd9b74fc4dd8",
-            "reference": "df65f70fc36f24d51a90ad706a09cd9b74fc4dd8",
+            "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943",
+            "reference": "84839970d05254c73cde183a721c7af13aede943",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.4",
-            "psr/http-message": "~1.0"
-        },
-        "provide": {
-            "psr/http-message-implementation": "~1.0.0"
+            "php": ">=5.3.3",
+            "sebastian/recursion-context": "~1.0"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.6",
-            "squizlabs/php_codesniffer": "^2.3.1"
+            "phpunit/phpunit": "~4.4"
         },
-        "time": "2015-06-24 20:42:54",
+        "time": "2015-01-27 07:23:06",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0-dev",
-                "dev-develop": "1.1-dev"
+                "dev-master": "1.2.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Zend\\Diactoros\\": "src/"
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-2-Clause"
+            "BSD-3-Clause"
         ],
-        "description": "PSR HTTP Message implementations",
-        "homepage": "https://github.com/zendframework/zend-diactoros",
+        "authors": [
+            {
+                "name": "Jeff Welch",
+                "email": "whatthejeff@gmail.com"
+            },
+            {
+                "name": "Volker Dusch",
+                "email": "github@wallbash.com"
+            },
+            {
+                "name": "Bernhard Schussek",
+                "email": "bschussek@2bepublished.at"
+            },
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
+            },
+            {
+                "name": "Adam Harvey",
+                "email": "aharvey@php.net"
+            }
+        ],
+        "description": "Provides the functionality to export PHP variables for visualization",
+        "homepage": "http://www.github.com/sebastianbergmann/exporter",
         "keywords": [
-            "http",
-            "psr",
-            "psr-7"
+            "export",
+            "exporter"
         ]
     },
     {
-        "name": "guzzlehttp/guzzle",
-        "version": "dev-master",
-        "version_normalized": "9999999-dev",
+        "name": "sebastian/environment",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/guzzle/guzzle.git",
-            "reference": "1879fbe853b0c64d109e369c7aeff09849e62d1e"
+            "url": "https://github.com/sebastianbergmann/environment.git",
+            "reference": "0d9bf79554d2a999da194a60416c15cf461eb67d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d687700d601f8b5f19b99ffc1c0f6af835a3c7b7",
-            "reference": "1879fbe853b0c64d109e369c7aeff09849e62d1e",
+            "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0d9bf79554d2a999da194a60416c15cf461eb67d",
+            "reference": "0d9bf79554d2a999da194a60416c15cf461eb67d",
             "shasum": ""
         },
         "require": {
-            "guzzlehttp/promises": "~1.0",
-            "guzzlehttp/psr7": "~1.1",
-            "php": ">=5.5.0"
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "ext-curl": "*",
-            "phpunit/phpunit": "~4.0",
-            "psr/log": "~1.0"
+            "phpunit/phpunit": "~4.3"
         },
-        "time": "2015-07-10 20:04:21",
+        "time": "2014-10-22 06:38:05",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "6.0-dev"
+                "dev-master": "1.2.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "files": [
-                "src/functions_include.php"
-            ],
-            "psr-4": {
-                "GuzzleHttp\\": "src/"
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Guzzle is a PHP HTTP client library",
-        "homepage": "http://guzzlephp.org/",
+        "description": "Provides functionality to handle HHVM/PHP environments",
+        "homepage": "http://www.github.com/sebastianbergmann/environment",
         "keywords": [
-            "client",
-            "curl",
-            "framework",
-            "http",
-            "http client",
-            "rest",
-            "web service"
+            "Xdebug",
+            "environment",
+            "hhvm"
         ]
     },
     {
-        "name": "fabpot/goutte",
-        "version": "v3.1.0",
-        "version_normalized": "3.1.0.0",
+        "name": "sebastian/diff",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/FriendsOfPHP/Goutte.git",
-            "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71"
+            "url": "https://github.com/sebastianbergmann/diff.git",
+            "reference": "5843509fed39dee4b356a306401e9dd1a931fec7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/d9a5a28782d30e9f4e20176caea58a1d459f2c71",
-            "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71",
+            "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7",
+            "reference": "5843509fed39dee4b356a306401e9dd1a931fec7",
             "shasum": ""
         },
         "require": {
-            "guzzlehttp/guzzle": "^6.0",
-            "php": ">=5.5.0",
-            "symfony/browser-kit": "~2.1",
-            "symfony/css-selector": "~2.1",
-            "symfony/dom-crawler": "~2.1"
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.2"
         },
-        "time": "2015-06-24 16:11:31",
-        "type": "application",
+        "time": "2014-08-15 10:29:00",
+        "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "3.1-dev"
+                "dev-master": "1.2-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Goutte\\": "Goutte"
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Kore Nordmann",
+                "email": "mail@kore-nordmann.de"
+            },
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "A simple PHP Web Scraper",
-        "homepage": "https://github.com/FriendsOfPHP/Goutte",
+        "description": "Diff implementation",
+        "homepage": "http://www.github.com/sebastianbergmann/diff",
         "keywords": [
-            "scraper"
+            "diff"
         ]
     },
     {
-        "name": "behat/mink-goutte-driver",
-        "version": "dev-master",
-        "version_normalized": "9999999-dev",
+        "name": "sebastian/comparator",
+        "version": "1.1.0",
+        "version_normalized": "1.1.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/minkphp/MinkGoutteDriver.git",
-            "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd"
+            "url": "https://github.com/sebastianbergmann/comparator.git",
+            "reference": "c484a80f97573ab934e37826dba0135a3301b26a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
-            "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
+            "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c484a80f97573ab934e37826dba0135a3301b26a",
+            "reference": "c484a80f97573ab934e37826dba0135a3301b26a",
             "shasum": ""
         },
         "require": {
-            "behat/mink": "~1.6@dev",
-            "behat/mink-browserkit-driver": "~1.2@dev",
-            "fabpot/goutte": "~1.0.4|~2.0|~3.1",
-            "php": ">=5.3.1"
+            "php": ">=5.3.3",
+            "sebastian/diff": "~1.1",
+            "sebastian/exporter": "~1.0"
         },
-        "time": "2015-06-27 00:15:11",
-        "type": "mink-driver",
+        "require-dev": {
+            "phpunit/phpunit": "~4.1"
+        },
+        "time": "2014-11-16 21:32:38",
+        "type": "library",
         "extra": {
             "branch-alias": {
                 "dev-master": "1.1.x-dev"
@@ -2255,64 +2398,72 @@
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Behat\\Mink\\Driver\\": "src/"
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
+                "name": "Jeff Welch",
+                "email": "whatthejeff@gmail.com"
+            },
+            {
+                "name": "Volker Dusch",
+                "email": "github@wallbash.com"
+            },
+            {
+                "name": "Bernhard Schussek",
+                "email": "bschussek@2bepublished.at"
+            },
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Goutte driver for Mink framework",
-        "homepage": "http://mink.behat.org/",
+        "description": "Provides the functionality to compare PHP values for equality",
+        "homepage": "http://www.github.com/sebastianbergmann/comparator",
         "keywords": [
-            "browser",
-            "goutte",
-            "headless",
-            "testing"
+            "comparator",
+            "compare",
+            "equality"
         ]
     },
     {
-        "name": "egulias/email-validator",
-        "version": "1.2.9",
-        "version_normalized": "1.2.9.0",
+        "name": "symfony/yaml",
+        "version": "v2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/egulias/EmailValidator.git",
-            "reference": "af864423f50ea59f96c87bb1eae147a70bcf67a1"
+            "url": "https://github.com/symfony/Yaml.git",
+            "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/af864423f50ea59f96c87bb1eae147a70bcf67a1",
-            "reference": "af864423f50ea59f96c87bb1eae147a70bcf67a1",
+            "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3",
+            "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3",
             "shasum": ""
         },
         "require": {
-            "doctrine/lexer": "~1.0,>=1.0.1",
-            "php": ">= 5.3.3"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.4",
-            "satooshi/php-coveralls": "dev-master"
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-06-22 21:07:51",
+        "time": "2015-05-02 15:21:08",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Egulias\\": "src/"
+            "psr-4": {
+                "Symfony\\Component\\Yaml\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2321,170 +2472,165 @@
         ],
         "authors": [
             {
-                "name": "Eduardo Gulias Davis"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "A library for validating emails",
-        "homepage": "https://github.com/egulias/EmailValidator",
-        "keywords": [
-            "email",
-            "emailvalidation",
-            "emailvalidator",
-            "validation",
-            "validator"
-        ]
+        "description": "Symfony Yaml Component",
+        "homepage": "https://symfony.com"
     },
     {
-        "name": "twig/twig",
-        "version": "v1.20.0",
-        "version_normalized": "1.20.0.0",
+        "name": "doctrine/instantiator",
+        "version": "1.0.2",
+        "version_normalized": "1.0.2.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/twigphp/Twig.git",
-            "reference": "1ea4e5f81c6d005fe84d0b38e1c4f1955eb86844"
+            "url": "https://github.com/doctrine/instantiator.git",
+            "reference": "26404e0c90565b614ee76b988b9bc8790d77f590"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/twigphp/Twig/zipball/1ea4e5f81c6d005fe84d0b38e1c4f1955eb86844",
-            "reference": "1ea4e5f81c6d005fe84d0b38e1c4f1955eb86844",
+            "url": "https://api.github.com/repos/doctrine/instantiator/zipball/26404e0c90565b614ee76b988b9bc8790d77f590",
+            "reference": "26404e0c90565b614ee76b988b9bc8790d77f590",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.2.7"
+            "php": "~5.3"
         },
-        "time": "2015-08-12 15:56:39",
+        "require-dev": {
+            "athletic/athletic": "~0.1.8",
+            "ext-pdo": "*",
+            "ext-phar": "*",
+            "phpunit/phpunit": "~4.0",
+            "squizlabs/php_codesniffer": "2.0.*@ALPHA"
+        },
+        "time": "2014-08-25 15:09:25",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.20-dev"
+                "dev-master": "1.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Twig_": "lib/"
+                "Doctrine\\Instantiator\\": "src"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "BSD-3-Clause"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com",
-                "homepage": "http://fabien.potencier.org",
-                "role": "Lead Developer"
-            },
-            {
-                "name": "Armin Ronacher",
-                "email": "armin.ronacher@active-4.com",
-                "role": "Project Founder"
-            },
-            {
-                "name": "Twig Team",
-                "homepage": "http://twig.sensiolabs.org/contributors",
-                "role": "Contributors"
+                "name": "Marco Pivetta",
+                "email": "ocramius@gmail.com",
+                "homepage": "http://ocramius.github.com/"
             }
         ],
-        "description": "Twig, the flexible, fast, and secure template language for PHP",
-        "homepage": "http://twig.sensiolabs.org",
+        "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+        "homepage": "https://github.com/doctrine/instantiator",
         "keywords": [
-            "templating"
+            "constructor",
+            "instantiate"
         ]
     },
     {
-        "name": "symfony/class-loader",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "dflydev/markdown",
+        "version": "v1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/ClassLoader.git",
-            "reference": "2fccbc544997340808801a7410cdcb96dd12edc4"
+            "url": "https://github.com/dflydev/dflydev-markdown.git",
+            "reference": "76501a808522dbe40a5a71d272bd08d54cbae03d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/2fccbc544997340808801a7410cdcb96dd12edc4",
-            "reference": "2fccbc544997340808801a7410cdcb96dd12edc4",
+            "url": "https://api.github.com/repos/dflydev/dflydev-markdown/zipball/76501a808522dbe40a5a71d272bd08d54cbae03d",
+            "reference": "76501a808522dbe40a5a71d272bd08d54cbae03d",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
-        },
-        "require-dev": {
-            "symfony/finder": "~2.0,>=2.0.5",
-            "symfony/phpunit-bridge": "~2.7"
+            "php": ">=5.3"
         },
-        "time": "2015-06-25 12:52:11",
+        "time": "2012-01-02 23:11:32",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.7-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\ClassLoader\\": ""
+            "psr-0": {
+                "dflydev\\markdown": "src"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "New BSD License"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Dragonfly Development Inc.",
+                "email": "info@dflydev.com",
+                "homepage": "http://dflydev.com"
             },
             {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Beau Simensen",
+                "email": "beau@dflydev.com",
+                "homepage": "http://beausimensen.com"
+            },
+            {
+                "name": "Michel Fortin",
+                "homepage": "http://michelf.com"
+            },
+            {
+                "name": "John Gruber",
+                "homepage": "http://daringfireball.net"
             }
         ],
-        "description": "Symfony ClassLoader Component",
-        "homepage": "https://symfony.com"
+        "description": "PHP Markdown & Extra",
+        "homepage": "http://github.com/dflydev/dflydev-markdown",
+        "keywords": [
+            "markdown"
+        ],
+        "abandoned": "michelf/php-markdown"
     },
     {
-        "name": "symfony/console",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpdocumentor/reflection-docblock",
+        "version": "2.0.0",
+        "version_normalized": "2.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Console.git",
-            "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e"
+            "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+            "reference": "66ae84e9d7c8ea85c979cb65977bd8e608baf0c5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Console/zipball/d6cf02fe73634c96677e428f840704bfbcaec29e",
-            "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e",
+            "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66ae84e9d7c8ea85c979cb65977bd8e608baf0c5",
+            "reference": "66ae84e9d7c8ea85c979cb65977bd8e608baf0c5",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
+            "dflydev/markdown": "1.0.*",
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "psr/log": "~1.0",
-            "symfony/event-dispatcher": "~2.1",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/process": "~2.1"
+            "phpunit/phpunit": "3.7.*@stable"
         },
-        "suggest": {
-            "psr/log": "For using the console logger",
-            "symfony/event-dispatcher": "",
-            "symfony/process": ""
-        },
-        "time": "2015-07-28 15:18:12",
+        "time": "2013-08-07 11:04:22",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "2.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\Console\\": ""
+            "psr-0": {
+                "phpDocumentor": [
+                    "src/"
+                ]
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2493,49 +2639,44 @@
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Mike van Riel",
+                "email": "mike.vanriel@naenius.com"
             }
-        ],
-        "description": "Symfony Console Component",
-        "homepage": "https://symfony.com"
+        ]
     },
     {
-        "name": "symfony/css-selector",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpspec/prophecy",
+        "version": "v1.3.1",
+        "version_normalized": "1.3.1.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/CssSelector.git",
-            "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092"
+            "url": "https://github.com/phpspec/prophecy.git",
+            "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092",
-            "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092",
+            "url": "https://api.github.com/repos/phpspec/prophecy/zipball/9ca52329bcdd1500de24427542577ebf3fc2f1c9",
+            "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
+            "doctrine/instantiator": "~1.0,>=1.0.2",
+            "phpdocumentor/reflection-docblock": "~2.0"
         },
         "require-dev": {
-            "symfony/phpunit-bridge": "~2.7"
+            "phpspec/phpspec": "~2.0"
         },
-        "time": "2015-05-15 13:33:16",
+        "time": "2014-11-17 16:23:49",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "1.2.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\CssSelector\\": ""
+            "psr-0": {
+                "Prophecy\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -2544,751 +2685,651 @@
         ],
         "authors": [
             {
-                "name": "Jean-FranÃ§ois Simon",
-                "email": "jeanfrancois.simon@sensiolabs.com"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
             },
             {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Marcello Duarte",
+                "email": "marcello.duarte@gmail.com"
             }
         ],
-        "description": "Symfony CssSelector Component",
-        "homepage": "https://symfony.com"
+        "description": "Highly opinionated mocking framework for PHP 5.3+",
+        "homepage": "http://phpspec.org",
+        "keywords": [
+            "Double",
+            "Dummy",
+            "fake",
+            "mock",
+            "spy",
+            "stub"
+        ]
     },
     {
-        "name": "symfony/dependency-injection",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpunit/php-text-template",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/DependencyInjection.git",
-            "reference": "851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6"
+            "url": "https://github.com/sebastianbergmann/php-text-template.git",
+            "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6",
-            "reference": "851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+            "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
-        },
-        "conflict": {
-            "symfony/expression-language": "<2.6"
-        },
-        "require-dev": {
-            "symfony/config": "~2.2",
-            "symfony/expression-language": "~2.6",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/yaml": "~2.1"
-        },
-        "suggest": {
-            "symfony/config": "",
-            "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
-            "symfony/yaml": ""
+            "php": ">=5.3.3"
         },
-        "time": "2015-07-28 14:07:07",
+        "time": "2014-01-30 17:20:04",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.7-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\DependencyInjection\\": ""
-            }
+            "classmap": [
+                "Text/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            ""
+        ],
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony DependencyInjection Component",
-        "homepage": "https://symfony.com"
+        "description": "Simple template engine.",
+        "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+        "keywords": [
+            "template"
+        ]
     },
     {
-        "name": "symfony/debug",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpunit/phpunit-mock-objects",
+        "version": "2.3.0",
+        "version_normalized": "2.3.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Debug.git",
-            "reference": "9daa1bf9f7e615fa2fba30357e479a90141222e3"
+            "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+            "reference": "c63d2367247365f688544f0d500af90a11a44c65"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Debug/zipball/9daa1bf9f7e615fa2fba30357e479a90141222e3",
-            "reference": "9daa1bf9f7e615fa2fba30357e479a90141222e3",
+            "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65",
+            "reference": "c63d2367247365f688544f0d500af90a11a44c65",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9",
-            "psr/log": "~1.0"
-        },
-        "conflict": {
-            "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+            "doctrine/instantiator": "~1.0,>=1.0.1",
+            "php": ">=5.3.3",
+            "phpunit/php-text-template": "~1.2"
         },
         "require-dev": {
-            "symfony/class-loader": "~2.2",
-            "symfony/http-foundation": "~2.1",
-            "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2",
-            "symfony/phpunit-bridge": "~2.7"
+            "phpunit/phpunit": "~4.3"
         },
         "suggest": {
-            "symfony/http-foundation": "",
-            "symfony/http-kernel": ""
+            "ext-soap": "*"
         },
-        "time": "2015-07-09 16:07:40",
+        "time": "2014-10-03 05:12:11",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "2.3.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\Debug\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony Debug Component",
-        "homepage": "https://symfony.com"
+        "description": "Mock Object library for PHPUnit",
+        "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+        "keywords": [
+            "mock",
+            "xunit"
+        ]
     },
     {
-        "name": "symfony/http-foundation",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpunit/php-timer",
+        "version": "1.0.3",
+        "version_normalized": "1.0.3.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/HttpFoundation.git",
-            "reference": "863af6898081b34c65d42100c370b9f3c51b70ca"
+            "url": "https://github.com/sebastianbergmann/php-timer.git",
+            "reference": "5175e9bb35fc9cc430973ed83a3d62531c3c8698"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/863af6898081b34c65d42100c370b9f3c51b70ca",
-            "reference": "863af6898081b34c65d42100c370b9f3c51b70ca",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5175e9bb35fc9cc430973ed83a3d62531c3c8698",
+            "reference": "5175e9bb35fc9cc430973ed83a3d62531c3c8698",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
-        },
-        "require-dev": {
-            "symfony/expression-language": "~2.4",
-            "symfony/phpunit-bridge": "~2.7"
+            "php": ">=5.2.7"
         },
-        "time": "2015-07-22 10:11:00",
+        "time": "2012-09-23 00:00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.7-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\HttpFoundation\\": ""
-            },
-            "classmap": [
-                "Resources/stubs"
+            "files": [
+                "PHP/Timer/Autoload.php"
             ]
         },
         "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            ""
+        ],
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony HttpFoundation Component",
-        "homepage": "https://symfony.com"
+        "description": "Utility class for timing",
+        "homepage": "http://www.phpunit.de/",
+        "keywords": [
+            "timer"
+        ]
     },
     {
-        "name": "symfony/event-dispatcher",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpunit/php-token-stream",
+        "version": "1.3.0",
+        "version_normalized": "1.3.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/EventDispatcher.git",
-            "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
+            "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+            "reference": "f8d5d08c56de5cfd592b3340424a81733259a876"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
-            "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/f8d5d08c56de5cfd592b3340424a81733259a876",
+            "reference": "f8d5d08c56de5cfd592b3340424a81733259a876",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
+            "ext-tokenizer": "*",
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "psr/log": "~1.0",
-            "symfony/config": "~2.0,>=2.0.5",
-            "symfony/dependency-injection": "~2.6",
-            "symfony/expression-language": "~2.6",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/stopwatch": "~2.3"
-        },
-        "suggest": {
-            "symfony/dependency-injection": "",
-            "symfony/http-kernel": ""
+            "phpunit/phpunit": "~4.2"
         },
-        "time": "2015-06-18 19:21:56",
+        "time": "2014-08-31 06:12:13",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "1.3-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\EventDispatcher\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de"
             }
         ],
-        "description": "Symfony EventDispatcher Component",
-        "homepage": "https://symfony.com"
+        "description": "Wrapper around PHP's tokenizer extension.",
+        "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+        "keywords": [
+            "tokenizer"
+        ]
     },
     {
-        "name": "symfony/http-kernel",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpunit/php-file-iterator",
+        "version": "1.4.0",
+        "version_normalized": "1.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/HttpKernel.git",
-            "reference": "405d3e7a59ff7a28ec469441326a0ac79065ea98"
+            "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/405d3e7a59ff7a28ec469441326a0ac79065ea98",
-            "reference": "405d3e7a59ff7a28ec469441326a0ac79065ea98",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
+            "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9",
-            "psr/log": "~1.0",
-            "symfony/debug": "~2.6,>=2.6.2",
-            "symfony/event-dispatcher": "~2.6,>=2.6.7",
-            "symfony/http-foundation": "~2.5,>=2.5.4"
-        },
-        "conflict": {
-            "symfony/config": "<2.7"
-        },
-        "require-dev": {
-            "symfony/browser-kit": "~2.3",
-            "symfony/class-loader": "~2.1",
-            "symfony/config": "~2.7",
-            "symfony/console": "~2.3",
-            "symfony/css-selector": "~2.0,>=2.0.5",
-            "symfony/dependency-injection": "~2.2",
-            "symfony/dom-crawler": "~2.0,>=2.0.5",
-            "symfony/expression-language": "~2.4",
-            "symfony/finder": "~2.0,>=2.0.5",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/process": "~2.0,>=2.0.5",
-            "symfony/routing": "~2.2",
-            "symfony/stopwatch": "~2.3",
-            "symfony/templating": "~2.2",
-            "symfony/translation": "~2.0,>=2.0.5",
-            "symfony/var-dumper": "~2.6"
-        },
-        "suggest": {
-            "symfony/browser-kit": "",
-            "symfony/class-loader": "",
-            "symfony/config": "",
-            "symfony/console": "",
-            "symfony/dependency-injection": "",
-            "symfony/finder": "",
-            "symfony/var-dumper": ""
+            "php": ">=5.3.3"
         },
-        "time": "2015-07-31 13:24:45",
+        "time": "2015-04-02 05:19:05",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "1.4.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\HttpKernel\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony HttpKernel Component",
-        "homepage": "https://symfony.com"
+        "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+        "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+        "keywords": [
+            "filesystem",
+            "iterator"
+        ]
     },
     {
-        "name": "symfony/routing",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpunit/php-code-coverage",
+        "version": "2.0.11",
+        "version_normalized": "2.0.11.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Routing.git",
-            "reference": "ea9134f277162b02e5f80ac058b75a77637b0d26"
+            "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+            "reference": "53603b3c995f5aab6b59c8e08c3a663d2cc810b7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Routing/zipball/ea9134f277162b02e5f80ac058b75a77637b0d26",
-            "reference": "ea9134f277162b02e5f80ac058b75a77637b0d26",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/53603b3c995f5aab6b59c8e08c3a663d2cc810b7",
+            "reference": "53603b3c995f5aab6b59c8e08c3a663d2cc810b7",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
-        },
-        "conflict": {
-            "symfony/config": "<2.7"
+            "php": ">=5.3.3",
+            "phpunit/php-file-iterator": "~1.3",
+            "phpunit/php-text-template": "~1.2",
+            "phpunit/php-token-stream": "~1.3",
+            "sebastian/environment": "~1.0",
+            "sebastian/version": "~1.0"
         },
         "require-dev": {
-            "doctrine/annotations": "~1.0",
-            "doctrine/common": "~2.2",
-            "psr/log": "~1.0",
-            "symfony/config": "~2.7",
-            "symfony/expression-language": "~2.4",
-            "symfony/http-foundation": "~2.3",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/yaml": "~2.0,>=2.0.5"
+            "ext-xdebug": ">=2.1.4",
+            "phpunit/phpunit": "~4.1"
         },
         "suggest": {
-            "doctrine/annotations": "For using the annotation loader",
-            "symfony/config": "For using the all-in-one router or any loader",
-            "symfony/expression-language": "For using expression matching",
-            "symfony/yaml": "For using the YAML loader"
+            "ext-dom": "*",
+            "ext-xdebug": ">=2.2.1",
+            "ext-xmlwriter": "*"
         },
-        "time": "2015-07-09 16:07:40",
+        "time": "2014-08-31 06:33:04",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "2.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\Routing\\": ""
-            }
+            "classmap": [
+                "src/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            ""
+        ],
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony Routing Component",
-        "homepage": "https://symfony.com",
+        "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+        "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
         "keywords": [
-            "router",
-            "routing",
-            "uri",
-            "url"
+            "coverage",
+            "testing",
+            "xunit"
         ]
     },
     {
-        "name": "symfony/serializer",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "phpunit/phpunit",
+        "version": "4.6.0",
+        "version_normalized": "4.6.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Serializer.git",
-            "reference": "143d318457ecc298a846506acc8e80dea30d2548"
+            "url": "https://github.com/sebastianbergmann/phpunit.git",
+            "reference": "3797497862a4dedcd77c1615106c574ecdb3fad7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Serializer/zipball/143d318457ecc298a846506acc8e80dea30d2548",
-            "reference": "143d318457ecc298a846506acc8e80dea30d2548",
+            "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3797497862a4dedcd77c1615106c574ecdb3fad7",
+            "reference": "3797497862a4dedcd77c1615106c574ecdb3fad7",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
-        },
-        "require-dev": {
-            "doctrine/annotations": "~1.0",
-            "doctrine/cache": "~1.0",
-            "symfony/config": "~2.2",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/property-access": "~2.3",
-            "symfony/yaml": "~2.0"
+            "ext-dom": "*",
+            "ext-json": "*",
+            "ext-pcre": "*",
+            "ext-reflection": "*",
+            "ext-spl": "*",
+            "php": ">=5.3.3",
+            "phpspec/prophecy": "~1.3,>=1.3.1",
+            "phpunit/php-code-coverage": "~2.0,>=2.0.11",
+            "phpunit/php-file-iterator": "~1.4",
+            "phpunit/php-text-template": "~1.2",
+            "phpunit/php-timer": "~1.0",
+            "phpunit/phpunit-mock-objects": "~2.3",
+            "sebastian/comparator": "~1.1",
+            "sebastian/diff": "~1.2",
+            "sebastian/environment": "~1.2",
+            "sebastian/exporter": "~1.2",
+            "sebastian/global-state": "~1.0",
+            "sebastian/version": "~1.0",
+            "symfony/yaml": "~2.1|~3.0"
         },
         "suggest": {
-            "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
-            "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
-            "symfony/config": "For using the XML mapping loader.",
-            "symfony/property-access": "For using the ObjectNormalizer.",
-            "symfony/yaml": "For using the default YAML mapping loader."
+            "phpunit/php-invoker": "~1.1"
         },
-        "time": "2015-07-22 19:42:44",
+        "time": "2015-04-03 08:59:48",
+        "bin": [
+            "phpunit"
+        ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "4.6.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\Serializer\\": ""
-            }
+            "classmap": [
+                "src/"
+            ],
+            "files": [
+                "src/Framework/Assert/Functions.php"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de",
+                "role": "lead"
             }
         ],
-        "description": "Symfony Serializer Component",
-        "homepage": "https://symfony.com"
+        "description": "The PHP Unit Testing framework.",
+        "homepage": "https://phpunit.de/",
+        "keywords": [
+            "phpunit",
+            "testing",
+            "xunit"
+        ]
     },
     {
-        "name": "symfony/translation",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "zendframework/zend-stdlib",
+        "version": "2.4.0",
+        "version_normalized": "2.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Translation.git",
-            "reference": "c8dc34cc936152c609cdd722af317e4239d10dd6"
+            "url": "https://github.com/zendframework/zend-stdlib.git",
+            "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Translation/zipball/c8dc34cc936152c609cdd722af317e4239d10dd6",
-            "reference": "c8dc34cc936152c609cdd722af317e4239d10dd6",
+            "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3",
+            "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
-        },
-        "conflict": {
-            "symfony/config": "<2.7"
+            "php": ">=5.3.23"
         },
         "require-dev": {
-            "psr/log": "~1.0",
-            "symfony/config": "~2.7",
-            "symfony/intl": "~2.3",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/yaml": "~2.2"
+            "fabpot/php-cs-fixer": "1.7.*",
+            "phpunit/phpunit": "~4.0",
+            "satooshi/php-coveralls": "dev-master",
+            "zendframework/zend-eventmanager": "self.version",
+            "zendframework/zend-filter": "self.version",
+            "zendframework/zend-serializer": "self.version",
+            "zendframework/zend-servicemanager": "self.version"
         },
         "suggest": {
-            "psr/log": "To use logging capability in translator",
-            "symfony/config": "",
-            "symfony/yaml": ""
+            "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
+            "zendframework/zend-filter": "To support naming strategy hydrator usage",
+            "zendframework/zend-serializer": "Zend\\Serializer component",
+            "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
         },
-        "time": "2015-07-09 16:07:40",
+        "time": "2015-03-25 20:55:48",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Symfony\\Component\\Translation\\": ""
+                "Zend\\Stdlib\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
-            }
+            "BSD-3-Clause"
         ],
-        "description": "Symfony Translation Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://github.com/zendframework/zend-stdlib",
+        "keywords": [
+            "stdlib",
+            "zf2"
+        ]
     },
     {
-        "name": "symfony/validator",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "zendframework/zend-escaper",
+        "version": "2.4.0",
+        "version_normalized": "2.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Validator.git",
-            "reference": "646df03e635a8a232804274401449ccdf5f03cad"
+            "url": "https://github.com/zendframework/zend-escaper.git",
+            "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Validator/zipball/646df03e635a8a232804274401449ccdf5f03cad",
-            "reference": "646df03e635a8a232804274401449ccdf5f03cad",
+            "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97",
+            "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9",
-            "symfony/translation": "~2.4"
+            "php": ">=5.3.23"
         },
         "require-dev": {
-            "doctrine/annotations": "~1.0",
-            "doctrine/cache": "~1.0",
-            "egulias/email-validator": "~1.2,>=1.2.1",
-            "symfony/config": "~2.2",
-            "symfony/expression-language": "~2.4",
-            "symfony/http-foundation": "~2.1",
-            "symfony/intl": "~2.3",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/property-access": "~2.3",
-            "symfony/yaml": "~2.0,>=2.0.5"
-        },
-        "suggest": {
-            "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
-            "doctrine/cache": "For using the default cached annotation reader and metadata cache.",
-            "egulias/email-validator": "Strict (RFC compliant) email validation",
-            "symfony/config": "",
-            "symfony/expression-language": "For using the 2.4 Expression validator",
-            "symfony/http-foundation": "",
-            "symfony/intl": "",
-            "symfony/property-access": "For using the 2.4 Validator API",
-            "symfony/yaml": ""
+            "fabpot/php-cs-fixer": "1.7.*",
+            "phpunit/phpunit": "~4.0",
+            "satooshi/php-coveralls": "dev-master"
         },
-        "time": "2015-07-31 06:49:15",
+        "time": "2015-03-23 18:29:14",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\Validator\\": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+            "psr-4": {
+                "Zend\\Escaper\\": "src/"
             }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
         ],
-        "description": "Symfony Validator Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://github.com/zendframework/zend-escaper",
+        "keywords": [
+            "escaper",
+            "zf2"
+        ]
     },
     {
-        "name": "symfony/process",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "zendframework/zend-feed",
+        "version": "2.4.0",
+        "version_normalized": "2.4.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Process.git",
-            "reference": "48aeb0e48600321c272955132d7606ab0a49adb3"
+            "url": "https://github.com/zendframework/zend-feed.git",
+            "reference": "0f59e560364f1f1fcb09a96874328ae3ff690db2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Process/zipball/48aeb0e48600321c272955132d7606ab0a49adb3",
-            "reference": "48aeb0e48600321c272955132d7606ab0a49adb3",
+            "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/0f59e560364f1f1fcb09a96874328ae3ff690db2",
+            "reference": "0f59e560364f1f1fcb09a96874328ae3ff690db2",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
+            "php": ">=5.3.23",
+            "zendframework/zend-escaper": "self.version",
+            "zendframework/zend-stdlib": "self.version"
         },
         "require-dev": {
-            "symfony/phpunit-bridge": "~2.7"
+            "fabpot/php-cs-fixer": "1.7.*",
+            "phpunit/phpunit": "~4.0",
+            "satooshi/php-coveralls": "dev-master",
+            "zendframework/zend-cache": "self.version",
+            "zendframework/zend-db": "self.version",
+            "zendframework/zend-http": "self.version",
+            "zendframework/zend-servicemanager": "self.version",
+            "zendframework/zend-validator": "self.version"
+        },
+        "suggest": {
+            "zendframework/zend-cache": "Zend\\Cache component",
+            "zendframework/zend-db": "Zend\\Db component",
+            "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
+            "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
+            "zendframework/zend-validator": "Zend\\Validator component"
         },
-        "time": "2015-07-01 11:25:50",
+        "time": "2015-03-25 20:55:48",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Symfony\\Component\\Process\\": ""
+                "Zend\\Feed\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
-            }
+            "BSD-3-Clause"
         ],
-        "description": "Symfony Process Component",
-        "homepage": "https://symfony.com"
+        "description": "provides functionality for consuming RSS and Atom feeds",
+        "homepage": "https://github.com/zendframework/zend-feed",
+        "keywords": [
+            "feed",
+            "zf2"
+        ]
     },
     {
-        "name": "symfony/yaml",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "mikey179/vfsStream",
+        "version": "v1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Yaml.git",
-            "reference": "71340e996171474a53f3d29111d046be4ad8a0ff"
+            "url": "https://github.com/mikey179/vfsStream.git",
+            "reference": "063fb10633f10c5ccbcac26227e94f46d9336f90"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Yaml/zipball/71340e996171474a53f3d29111d046be4ad8a0ff",
-            "reference": "71340e996171474a53f3d29111d046be4ad8a0ff",
+            "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/063fb10633f10c5ccbcac26227e94f46d9336f90",
+            "reference": "063fb10633f10c5ccbcac26227e94f46d9336f90",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
-        },
-        "require-dev": {
-            "symfony/phpunit-bridge": "~2.7"
+            "php": ">=5.3.0"
         },
-        "time": "2015-07-28 14:07:07",
+        "time": "2013-04-01 10:41:02",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.7-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\Yaml\\": ""
+            "psr-0": {
+                "org\\bovigo\\vfs\\": "src/main/php"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD"
         ],
-        "authors": [
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
-            }
-        ],
-        "description": "Symfony Yaml Component",
-        "homepage": "https://symfony.com"
+        "homepage": "http://vfs.bovigo.org/"
     },
     {
-        "name": "symfony/dom-crawler",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "stack/builder",
+        "version": "v1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/DomCrawler.git",
-            "reference": "9dabece63182e95c42b06967a0d929a5df78bc35"
+            "url": "https://github.com/stackphp/builder.git",
+            "reference": "ed6db737187e31cc1f4d17b45cbd73b0334232e9"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/9dabece63182e95c42b06967a0d929a5df78bc35",
-            "reference": "9dabece63182e95c42b06967a0d929a5df78bc35",
+            "url": "https://api.github.com/repos/stackphp/builder/zipball/ed6db737187e31cc1f4d17b45cbd73b0334232e9",
+            "reference": "ed6db737187e31cc1f4d17b45cbd73b0334232e9",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9"
+            "php": ">=5.4.0",
+            "symfony/http-foundation": "~2.1",
+            "symfony/http-kernel": "~2.1"
         },
         "require-dev": {
-            "symfony/css-selector": "~2.3",
-            "symfony/phpunit-bridge": "~2.7"
-        },
-        "suggest": {
-            "symfony/css-selector": ""
+            "silex/silex": "1.0.*@dev"
         },
-        "time": "2015-07-09 16:07:40",
+        "time": "2013-08-02 13:05:55",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "1.0-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\DomCrawler\\": ""
+            "psr-0": {
+                "Stack": "src"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -3297,55 +3338,49 @@
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Igor Wiedler",
+                "email": "igor@wiedler.ch",
+                "homepage": "http://wiedler.ch/igor/"
             }
         ],
-        "description": "Symfony DomCrawler Component",
-        "homepage": "https://symfony.com"
+        "description": "Builder for stack middlewares based on HttpKernelInterface.",
+        "keywords": [
+            "stack"
+        ]
     },
     {
-        "name": "symfony/browser-kit",
-        "version": "v2.7.3",
-        "version_normalized": "2.7.3.0",
+        "name": "egulias/email-validator",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/BrowserKit.git",
-            "reference": "176905d3d74c2f99e6ab70f4f5a89460532495ae"
+            "url": "https://github.com/egulias/EmailValidator.git",
+            "reference": "bb530a193056992702df9f722e8814f57bdb13c2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/176905d3d74c2f99e6ab70f4f5a89460532495ae",
-            "reference": "176905d3d74c2f99e6ab70f4f5a89460532495ae",
+            "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/bb530a193056992702df9f722e8814f57bdb13c2",
+            "reference": "bb530a193056992702df9f722e8814f57bdb13c2",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.9",
-            "symfony/dom-crawler": "~2.0,>=2.0.5"
+            "doctrine/lexer": "~1.0",
+            "php": ">= 5.3.3"
         },
         "require-dev": {
-            "symfony/css-selector": "~2.0,>=2.0.5",
-            "symfony/phpunit-bridge": "~2.7",
-            "symfony/process": "~2.0,>=2.0.5"
-        },
-        "suggest": {
-            "symfony/process": ""
+            "satooshi/php-coveralls": "dev-master"
         },
-        "time": "2015-07-09 16:07:40",
+        "time": "2014-07-06 17:21:29",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.7-dev"
+                "dev-master": "1.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-4": {
-                "Symfony\\Component\\BrowserKit\\": ""
+            "psr-0": {
+                "Egulias\\": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -3354,53 +3389,53 @@
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "https://symfony.com/contributors"
+                "name": "Eduardo Gulias Davis"
             }
         ],
-        "description": "Symfony BrowserKit Component",
-        "homepage": "https://symfony.com"
+        "description": "A library for validating emails",
+        "homepage": "https://github.com/egulias/EmailValidator",
+        "keywords": [
+            "email",
+            "validation",
+            "validator"
+        ]
     },
     {
-        "name": "guzzlehttp/promises",
-        "version": "1.0.2",
-        "version_normalized": "1.0.2.0",
+        "name": "masterminds/html5",
+        "version": "2.1.0",
+        "version_normalized": "2.1.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/guzzle/promises.git",
-            "reference": "97fe7210def29451ec74923b27e552238defd75a"
+            "url": "https://github.com/Masterminds/html5-php.git",
+            "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/promises/zipball/97fe7210def29451ec74923b27e552238defd75a",
-            "reference": "97fe7210def29451ec74923b27e552238defd75a",
+            "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
+            "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.5.0"
+            "ext-libxml": "*",
+            "php": ">=5.3.0"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.0"
+            "phpunit/phpunit": "4.*",
+            "sami/sami": "~2.0",
+            "satooshi/php-coveralls": "0.6.*"
         },
-        "time": "2015-08-15 19:37:21",
+        "time": "2015-02-09 16:26:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0-dev"
+                "dev-master": "2.1-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "GuzzleHttp\\Promise\\": "src/"
-            },
-            "files": [
-                "src/functions_include.php"
-            ]
+                "Masterminds\\": "src"
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -3408,55 +3443,66 @@
         ],
         "authors": [
             {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
+                "name": "Matt Butcher",
+                "email": "technosophos@gmail.com"
+            },
+            {
+                "name": "Asmir Mustafic",
+                "email": "goetas@gmail.com"
+            },
+            {
+                "name": "Matt Farina",
+                "email": "matt@mattfarina.com"
             }
         ],
-        "description": "Guzzle promises library",
+        "description": "An HTML5 parser and serializer.",
+        "homepage": "http://masterminds.github.io/html5-php",
         "keywords": [
-            "promise"
+            "HTML5",
+            "dom",
+            "html",
+            "parser",
+            "querypath",
+            "serializer",
+            "xml"
         ]
     },
     {
-        "name": "guzzlehttp/psr7",
-        "version": "1.2.0",
-        "version_normalized": "1.2.0.0",
+        "name": "symfony/http-foundation",
+        "version": "v2.7.2",
+        "version_normalized": "2.7.2.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/guzzle/psr7.git",
-            "reference": "4ef919b0cf3b1989523138b60163bbcb7ba1ff7e"
+            "url": "https://github.com/symfony/HttpFoundation.git",
+            "reference": "88903c0531b90d4ecd90282b18f08c0c77bde0b2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/psr7/zipball/4ef919b0cf3b1989523138b60163bbcb7ba1ff7e",
-            "reference": "4ef919b0cf3b1989523138b60163bbcb7ba1ff7e",
+            "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/88903c0531b90d4ecd90282b18f08c0c77bde0b2",
+            "reference": "88903c0531b90d4ecd90282b18f08c0c77bde0b2",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.4.0",
-            "psr/http-message": "~1.0"
-        },
-        "provide": {
-            "psr/http-message-implementation": "1.0"
+            "php": ">=5.3.9"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.0"
+            "symfony/expression-language": "~2.4",
+            "symfony/phpunit-bridge": "~2.7"
         },
-        "time": "2015-08-15 19:32:36",
+        "time": "2015-07-09 16:07:40",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "GuzzleHttp\\Psr7\\": "src/"
+                "Symfony\\Component\\HttpFoundation\\": ""
             },
-            "files": [
-                "src/functions_include.php"
+            "classmap": [
+                "Resources/stubs"
             ]
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -3465,17 +3511,15 @@
         ],
         "authors": [
             {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "PSR-7 message implementation",
-        "keywords": [
-            "http",
-            "message",
-            "stream",
-            "uri"
-        ]
+        "description": "Symfony HttpFoundation Component",
+        "homepage": "https://symfony.com"
     }
 ]
diff --git a/core/vendor/dflydev/markdown/.gitignore b/core/vendor/dflydev/markdown/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..7579f74311d35aae05dd0f0a54537ea7a0034e89
--- /dev/null
+++ b/core/vendor/dflydev/markdown/.gitignore
@@ -0,0 +1,2 @@
+vendor
+composer.lock
diff --git a/core/vendor/dflydev/markdown/.travis.yml b/core/vendor/dflydev/markdown/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7f5133125e98996aee4a09d43a4b151cbc460b32
--- /dev/null
+++ b/core/vendor/dflydev/markdown/.travis.yml
@@ -0,0 +1,7 @@
+language: php
+php:
+  - 5.3
+  - 5.4
+before_script:
+  - wget -nc http://getcomposer.org/composer.phar
+  - php composer.phar update
diff --git a/core/vendor/dflydev/markdown/LICENSE b/core/vendor/dflydev/markdown/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..6308cae55bd17673b277a09ccaf34f03069dbe92
--- /dev/null
+++ b/core/vendor/dflydev/markdown/LICENSE
@@ -0,0 +1,40 @@
+PHP Markdown & Extra
+Copyright (c) 2011, Dragonfly Development Inc 
+All rights reserved. 
+
+Based on PHP Markdown & Extra  
+Copyright (c) 2004-2009 Michel Fortin  
+<http://michelf.com/>  
+All rights reserved.
+
+Based on Markdown  
+Copyright (c) 2003-2006 John Gruber   
+<http://daringfireball.net/>   
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer in the
+  documentation and/or other materials provided with the distribution.
+
+* Neither the name "Markdown" nor the names of its contributors may
+  be used to endorse or promote products derived from this software
+  without specific prior written permission.
+
+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.
diff --git a/core/vendor/dflydev/markdown/README.md b/core/vendor/dflydev/markdown/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..18144c4d0b676ecb58a7a3928edef815154e9dc5
--- /dev/null
+++ b/core/vendor/dflydev/markdown/README.md
@@ -0,0 +1,93 @@
+PHP Markdown & Extra
+====================
+
+An updated and stripped version of the original [PHP Markdown](http://michelf.com/projects/php-markdown/)
+by [Michel Fortin](http://michelf.com/). Works quite well with PSR-0
+autoloaders and is [Composer](http://packagist.org/) friendly.
+
+
+Changes from the official PHP Markdown & Extra
+----------------------------------------------
+
+The initial pass at updating PHP Markdown & Extra left the core of
+the code more or less intact but the changes to the organization
+and naming were quite substantial. This effectively makes this package
+a hard fork from Markdown 1.0.1n and MarkdownExtra 1.2.4.
+
+Updated in the following ways:
+
+ * Moved parser classes into their own files
+ * Using PHP 5.3 namespaces
+ * Following [PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) standards
+ * Replaced `@define` configuration variables with class `const` variables
+ * Integrated with [Travis CI](http://travis-ci.org/)
+ * Made [Composer](http://packagist.org/) friendly
+
+Stripped in the following ways:
+
+ * No more embedded plugin code (WordPress, bBlog, etc.)
+ * No more top level function calls (`Markdown()`, etc.)
+
+
+Requirements
+------------
+
+ * PHP 5.3+
+
+
+Usage
+-----
+
+Simple usage for the standard Markdown ([details](http://michelf.com/projects/php-markdown/)) parser:
+
+    <?php
+    use dflydev\markdown\Markdown;
+
+    $markdownParser = new MarkdownParser();
+
+    // Will return <h1>Hello World</h1>
+    $markdownParser->transformMarkdown("#Hello World");
+
+Simple usage for the Markdown Extra ([details](http://michelf.com/projects/php-markdown/extra/)) parser:
+
+    <?php
+    use dflydev\markdown\MarkdownExtra;
+
+    $markdownParser = new MarkdownExtraParser();
+
+    // Will return <h1>Hello World</h1>
+    $markdownParser->transformMarkdown("#Hello World");
+
+
+License
+-------
+
+This library is licensed under the New BSD License - see the LICENSE file for details.
+
+
+Community
+---------
+
+If you have questions or want to help out, join us in the
+[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.
+
+
+Not Invented Here
+-----------------
+
+The original [PHP Markdown](http://michelf.com/projects/php-markdown/) was
+quite excellent but was not as easy to use as it could be in more modern PHP
+applications. Having started to use [Composer](http://packagist.org/) for a
+few newer applications that needed to transform Markdown, I decided to strip
+and update the original PHP Markdown so that it could be more easily managed
+by the likes of Composer.
+
+All of the initial work done for this library (which I can only assume
+was quite substantial after having looked at the code) was done by
+[Michel Fortin](http://michelf.com/) during the original port from Perl to
+PHP.
+
+If you do not need to install PHP Markdown by way of Composer or need to
+leverage PSR-0 autoloading, I suggest you continue to use the official and
+likely more stable and well used original version of
+[PHP Markdown](http://michelf.com/projects/php-markdown/)
\ No newline at end of file
diff --git a/core/vendor/dflydev/markdown/composer.json b/core/vendor/dflydev/markdown/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..1516899a44b4ad44db129456c0a536b530de1bcc
--- /dev/null
+++ b/core/vendor/dflydev/markdown/composer.json
@@ -0,0 +1,34 @@
+{
+    "name": "dflydev/markdown",
+    "type": "library",
+    "description": "PHP Markdown & Extra",
+    "homepage": "http://github.com/dflydev/dflydev-markdown",
+    "keywords": ["markdown"],
+    "license": "New BSD License",
+    "authors": [
+        {
+            "name": "Dragonfly Development Inc.",
+            "email": "info@dflydev.com",
+            "homepage": "http://dflydev.com"
+        },
+        {
+            "name": "Beau Simensen",
+            "email": "beau@dflydev.com",
+            "homepage": "http://beausimensen.com"
+        },
+        {
+            "name": "Michel Fortin",
+            "homepage": "http://michelf.com"
+        },
+        {
+            "name": "John Gruber",
+            "homepage": "http://daringfireball.net"
+        }
+    ],
+    "require": {
+        "php": ">=5.3"
+    },
+    "autoload": {
+        "psr-0": { "dflydev\\markdown": "src" }
+    }
+}
diff --git a/core/vendor/dflydev/markdown/phpunit.xml.dist b/core/vendor/dflydev/markdown/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..5f092edcf713549a8b1393f9f8362d333d994ae1
--- /dev/null
+++ b/core/vendor/dflydev/markdown/phpunit.xml.dist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+         bootstrap="tests/bootstrap.php"
+>
+    <testsuites>
+        <testsuite name="dflydev-markdown Test Suite">
+            <directory>./tests/dflydev/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./src/dflydev/</directory>
+            <exclude>
+                <directory>./src/dflydev/*/resources</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
+
diff --git a/core/vendor/dflydev/markdown/src/dflydev/markdown/IMarkdownParser.php b/core/vendor/dflydev/markdown/src/dflydev/markdown/IMarkdownParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..72cb5126aeb5f9bc865e583e5e8c81716b3c32cd
--- /dev/null
+++ b/core/vendor/dflydev/markdown/src/dflydev/markdown/IMarkdownParser.php
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is a part of the PHP Markdown library.
+ *
+ * (c) Dragonfly Development Inc.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace dflydev\markdown;
+
+interface IMarkdownParser {
+
+    /**
+     * Transform Markdown text to HTML.
+     * @param string $text
+     * @return string
+     */
+    public function transformMarkdown($text);
+    
+    /**
+     * Configure parser
+     * @param string $key
+     * @param mixed $value
+     */
+    public function configureMarkdownParser($key, $value);
+
+}
\ No newline at end of file
diff --git a/core/vendor/dflydev/markdown/src/dflydev/markdown/MarkdownExtraParser.php b/core/vendor/dflydev/markdown/src/dflydev/markdown/MarkdownExtraParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..23c231b125e8db015e9e400d536becc3a3582b31
--- /dev/null
+++ b/core/vendor/dflydev/markdown/src/dflydev/markdown/MarkdownExtraParser.php
@@ -0,0 +1,1351 @@
+<?php
+
+/*
+ * This file is a part of the PHP Markdown library.
+ *
+ * (c) Dragonfly Development Inc.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace dflydev\markdown;
+
+#
+# Global default settings:
+#
+
+# Optional class attribute for footnote links and backlinks.
+@define( 'MARKDOWN_FN_LINK_CLASS',         "" );
+@define( 'MARKDOWN_FN_BACKLINK_CLASS',     "" );
+
+class MarkdownExtraParser extends MarkdownParser {
+
+    /**
+     * Default title attribute for footnote links
+     * @var string
+     */
+    const DEFAULT_FOOTNOTE_LINK_TITLE = "";
+    
+    /**
+     * Default class attribute for footnote links
+     * @var string
+     */
+    const DEFAULT_FOOTNOTE_LINK_CLASS = "";
+    
+    /**
+     * Default title attribute for footnote backlinks
+     * @var string
+     */
+    const DEFAULT_FOOTNOTE_BACKLINK_TITLE = "";
+
+    /**
+     * Default class attribute for footnote backlinks
+     * @var string
+     */
+    const DEFAULT_FOOTNOTE_BACKLINK_CLASS = "";
+    
+    /**
+     * Configuration key for changing the title attribute for footnote links
+     * @var string
+     */
+    const CONFIG_FOOTNOTE_LINK_TITLE = 'config.footnoteLinkTitleAttribute';
+
+    /**
+     * Configuration key for changing the class attribute for footnote links
+     * @var string
+     */
+    const CONFIG_FOOTNOTE_LINK_CLASS = 'config.footnoteLinkClassAttribute';
+    
+    /**
+     * Configuration key for changing the title attribute for footnote backlinks
+     * @var string
+     */
+    const CONFIG_FOOTNOTE_BACKLINK_TITLE = 'config.footnoteBacklinkTitleAttribute';
+    
+    /**
+     * Configuration key for changing the class attribute for footnote backlinks
+     * @var string
+     */
+    const CONFIG_FOOTNOTE_BACKLINK_CLASS = 'config.footnoteBacklinkClassAttribute';
+    
+    # Prefix for footnote ids.
+	var $fn_id_prefix = "";
+	
+	# Optional title attribute for footnote links and backlinks.
+	var $fn_link_title = self::DEFAULT_FOOTNOTE_LINK_TITLE;
+	var $fn_backlink_title = self::DEFAULT_FOOTNOTE_BACKLINK_TITLE;
+	
+	# Optional class attribute for footnote links and backlinks.
+	var $fn_link_class = self::DEFAULT_FOOTNOTE_LINK_CLASS;
+	var $fn_backlink_class = self::DEFAULT_FOOTNOTE_BACKLINK_CLASS;
+	
+	# Predefined abbreviations.
+	var $predef_abbr = array();
+
+
+	function __construct() {
+	#
+	# Constructor function. Initialize the parser object.
+	#
+		# Add extra escapable characters before parent constructor 
+		# initialize the table.
+		$this->escape_chars .= ':|';
+		
+		# Insert extra document, block, and span transformations. 
+		# Parent constructor will do the sorting.
+		$this->document_gamut += array(
+			"doFencedCodeBlocks" => 5,
+			"stripFootnotes"     => 15,
+			"stripAbbreviations" => 25,
+			"appendFootnotes"    => 50,
+			);
+		$this->block_gamut += array(
+			"doFencedCodeBlocks" => 5,
+			"doTables"           => 15,
+			"doDefLists"         => 45,
+			);
+		$this->span_gamut += array(
+			"doFootnotes"        => 5,
+			"doAbbreviations"    => 70,
+			);
+		
+		parent::__construct();
+	}
+
+	/**
+	 * (non-PHPdoc)
+	 * @see dflydev\markdown.IMarkdownParser::configureMarkdownParser()
+	 */
+	public function configureMarkdownParser($key, $value)
+	{
+	    switch($key) {
+	        case self::CONFIG_FOOTNOTE_LINK_TITLE:
+	            $this->fn_link_title = $value;
+	            break;
+	        case self::CONFIG_FOOTNOTE_LINK_CLASS:
+	            $this->fn_link_class = $value;
+	            break;
+	        case self::CONFIG_FOOTNOTE_BACKLINK_TITLE:
+	            $this->fn_backlink_title = $value;
+	            break;
+	        case self::CONFIG_FOOTNOTE_BACKLINK_CLASS:
+	            $this->fn_backlink_class = $value;
+	            break;
+            default:
+	            // Try to handle this in our parent.
+	            parent::configureMarkdownParser($key, $value);
+	            break;
+	    }
+	    //
+	}	
+	
+	# Extra variables used during extra transformations.
+	var $footnotes = array();
+	var $footnotes_ordered = array();
+	var $abbr_desciptions = array();
+	var $abbr_word_re = '';
+	
+	# Give the current footnote number.
+	var $footnote_counter = 1;
+	
+	
+	function setup() {
+	#
+	# Setting up Extra-specific variables.
+	#
+		parent::setup();
+		
+		$this->footnotes = array();
+		$this->footnotes_ordered = array();
+		$this->abbr_desciptions = array();
+		$this->abbr_word_re = '';
+		$this->footnote_counter = 1;
+		
+		foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
+			if ($this->abbr_word_re)
+				$this->abbr_word_re .= '|';
+			$this->abbr_word_re .= preg_quote($abbr_word);
+			$this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
+		}
+	}
+	
+	function teardown() {
+	#
+	# Clearing Extra-specific variables.
+	#
+		$this->footnotes = array();
+		$this->footnotes_ordered = array();
+		$this->abbr_desciptions = array();
+		$this->abbr_word_re = '';
+		
+		parent::teardown();
+	}
+	
+	
+	### HTML Block Parser ###
+	
+	# Tags that are always treated as block tags:
+	var $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend';
+	
+	# Tags treated as block tags only if the opening tag is alone on it's line:
+	var $context_block_tags_re = 'script|noscript|math|ins|del';
+	
+	# Tags where markdown="1" default to span mode:
+	var $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
+	
+	# Tags which must not have their contents modified, no matter where 
+	# they appear:
+	var $clean_tags_re = 'script|math';
+	
+	# Tags that do not need to be closed.
+	var $auto_close_tags_re = 'hr|img';
+	
+
+	function hashHTMLBlocks($text) {
+	#
+	# Hashify HTML Blocks and "clean tags".
+	#
+	# We only want to do this for block-level HTML tags, such as headers,
+	# lists, and tables. That's because we still want to wrap <p>s around
+	# "paragraphs" that are wrapped in non-block-level tags, such as anchors,
+	# phrase emphasis, and spans. The list of tags we're looking for is
+	# hard-coded.
+	#
+	# This works by calling _HashHTMLBlocks_InMarkdown, which then calls
+	# _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1" 
+	# attribute is found whitin a tag, _HashHTMLBlocks_InHTML calls back
+	#  _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
+	# These two functions are calling each other. It's recursive!
+	#
+		#
+		# Call the HTML-in-Markdown hasher.
+		#
+		list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
+		
+		return $text;
+	}
+	function _hashHTMLBlocks_inMarkdown($text, $indent = 0, 
+										$enclosing_tag_re = '', $span = false)
+	{
+	#
+	# Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags.
+	#
+	# *   $indent is the number of space to be ignored when checking for code 
+	#     blocks. This is important because if we don't take the indent into 
+	#     account, something like this (which looks right) won't work as expected:
+	#
+	#     <div>
+	#         <div markdown="1">
+	#         Hello World.  <-- Is this a Markdown code block or text?
+	#         </div>  <-- Is this a Markdown code block or a real tag?
+	#     <div>
+	#
+	#     If you don't like this, just don't indent the tag on which
+	#     you apply the markdown="1" attribute.
+	#
+	# *   If $enclosing_tag_re is not empty, stops at the first unmatched closing 
+	#     tag with that name. Nested tags supported.
+	#
+	# *   If $span is true, text inside must treated as span. So any double 
+	#     newline will be replaced by a single newline so that it does not create 
+	#     paragraphs.
+	#
+	# Returns an array of that form: ( processed text , remaining text )
+	#
+		if ($text === '') return array('', '');
+
+		# Regex to check for the presense of newlines around a block tag.
+		$newline_before_re = '/(?:^\n?|\n\n)*$/';
+		$newline_after_re = 
+			'{
+				^						# Start of text following the tag.
+				(?>[ ]*<!--.*?-->)?		# Optional comment.
+				[ ]*\n					# Must be followed by newline.
+			}xs';
+		
+		# Regex to match any tag.
+		$block_tag_re =
+			'{
+				(					# $2: Capture hole tag.
+					</?					# Any opening or closing tag.
+						(?>				# Tag name.
+							'.$this->block_tags_re.'			|
+							'.$this->context_block_tags_re.'	|
+							'.$this->clean_tags_re.'        	|
+							(?!\s)'.$enclosing_tag_re.'
+						)
+						(?:
+							(?=[\s"\'/a-zA-Z0-9])	# Allowed characters after tag name.
+							(?>
+								".*?"		|	# Double quotes (can contain `>`)
+								\'.*?\'   	|	# Single quotes (can contain `>`)
+								.+?				# Anything but quotes and `>`.
+							)*?
+						)?
+					>					# End of tag.
+				|
+					<!--    .*?     -->	# HTML Comment
+				|
+					<\?.*?\?> | <%.*?%>	# Processing instruction
+				|
+					<!\[CDATA\[.*?\]\]>	# CData Block
+				|
+					# Code span marker
+					`+
+				'. ( !$span ? ' # If not in span.
+				|
+					# Indented code block
+					(?: ^[ ]*\n | ^ | \n[ ]*\n )
+					[ ]{'.($indent+4).'}[^\n]* \n
+					(?>
+						(?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n
+					)*
+				|
+					# Fenced code block marker
+					(?> ^ | \n )
+					[ ]{'.($indent).'}~~~+[ ]*\n
+				' : '' ). ' # End (if not is span).
+				)
+			}xs';
+
+		
+		$depth = 0;		# Current depth inside the tag tree.
+		$parsed = "";	# Parsed text that will be returned.
+
+		#
+		# Loop through every tag until we find the closing tag of the parent
+		# or loop until reaching the end of text if no parent tag specified.
+		#
+		do {
+			#
+			# Split the text using the first $tag_match pattern found.
+			# Text before  pattern will be first in the array, text after
+			# pattern will be at the end, and between will be any catches made 
+			# by the pattern.
+			#
+			$parts = preg_split($block_tag_re, $text, 2, 
+								PREG_SPLIT_DELIM_CAPTURE);
+			
+			# If in Markdown span mode, add a empty-string span-level hash 
+			# after each newline to prevent triggering any block element.
+			if ($span) {
+				$void = $this->hashPart("", ':');
+				$newline = "$void\n";
+				$parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
+			}
+			
+			$parsed .= $parts[0]; # Text before current tag.
+			
+			# If end of $text has been reached. Stop loop.
+			if (count($parts) < 3) {
+				$text = "";
+				break;
+			}
+			
+			$tag  = $parts[1]; # Tag to handle.
+			$text = $parts[2]; # Remaining text after current tag.
+			$tag_re = preg_quote($tag); # For use in a regular expression.
+			
+			#
+			# Check for: Code span marker
+			#
+			if ($tag{0} == "`") {
+				# Find corresponding end marker.
+				$tag_re = preg_quote($tag);
+				if (preg_match('{^(?>.+?|\n(?!\n))*?(?<!`)'.$tag_re.'(?!`)}',
+					$text, $matches))
+				{
+					# End marker found: pass text unchanged until marker.
+					$parsed .= $tag . $matches[0];
+					$text = substr($text, strlen($matches[0]));
+				}
+				else {
+					# Unmatched marker: just skip it.
+					$parsed .= $tag;
+				}
+			}
+			#
+			# Check for: Indented code block.
+			#
+			else if ($tag{0} == "\n" || $tag{0} == " ") {
+				# Indented code block: pass it unchanged, will be handled 
+				# later.
+				$parsed .= $tag;
+			}
+			#
+			# Check for: Fenced code block marker.
+			#
+			else if ($tag{0} == "~") {
+				# Fenced code block marker: find matching end marker.
+				$tag_re = preg_quote(trim($tag));
+				if (preg_match('{^(?>.*\n)+?'.$tag_re.' *\n}', $text, 
+					$matches)) 
+				{
+					# End marker found: pass text unchanged until marker.
+					$parsed .= $tag . $matches[0];
+					$text = substr($text, strlen($matches[0]));
+				}
+				else {
+					# No end marker: just skip it.
+					$parsed .= $tag;
+				}
+			}
+			#
+			# Check for: Opening Block level tag or
+			#            Opening Context Block tag (like ins and del) 
+			#               used as a block tag (tag is alone on it's line).
+			#
+			else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
+				(	preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
+					preg_match($newline_before_re, $parsed) &&
+					preg_match($newline_after_re, $text)	)
+				)
+			{
+				# Need to parse tag and following text using the HTML parser.
+				list($block_text, $text) = 
+					$this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
+				
+				# Make sure it stays outside of any paragraph by adding newlines.
+				$parsed .= "\n\n$block_text\n\n";
+			}
+			#
+			# Check for: Clean tag (like script, math)
+			#            HTML Comments, processing instructions.
+			#
+			else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) ||
+				$tag{1} == '!' || $tag{1} == '?')
+			{
+				# Need to parse tag and following text using the HTML parser.
+				# (don't check for markdown attribute)
+				list($block_text, $text) = 
+					$this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
+				
+				$parsed .= $block_text;
+			}
+			#
+			# Check for: Tag with same name as enclosing tag.
+			#
+			else if ($enclosing_tag_re !== '' &&
+				# Same name as enclosing tag.
+				preg_match('{^</?(?:'.$enclosing_tag_re.')\b}', $tag))
+			{
+				#
+				# Increase/decrease nested tag count.
+				#
+				if ($tag{1} == '/')						$depth--;
+				else if ($tag{strlen($tag)-2} != '/')	$depth++;
+
+				if ($depth < 0) {
+					#
+					# Going out of parent element. Clean up and break so we
+					# return to the calling function.
+					#
+					$text = $tag . $text;
+					break;
+				}
+				
+				$parsed .= $tag;
+			}
+			else {
+				$parsed .= $tag;
+			}
+		} while ($depth >= 0);
+		
+		return array($parsed, $text);
+	}
+	function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
+	#
+	# Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
+	#
+	# *   Calls $hash_method to convert any blocks.
+	# *   Stops when the first opening tag closes.
+	# *   $md_attr indicate if the use of the `markdown="1"` attribute is allowed.
+	#     (it is not inside clean tags)
+	#
+	# Returns an array of that form: ( processed text , remaining text )
+	#
+		if ($text === '') return array('', '');
+		
+		# Regex to match `markdown` attribute inside of a tag.
+		$markdown_attr_re = '
+			{
+				\s*			# Eat whitespace before the `markdown` attribute
+				markdown
+				\s*=\s*
+				(?>
+					(["\'])		# $1: quote delimiter		
+					(.*?)		# $2: attribute value
+					\1			# matching delimiter	
+				|
+					([^\s>]*)	# $3: unquoted attribute value
+				)
+				()				# $4: make $3 always defined (avoid warnings)
+			}xs';
+		
+		# Regex to match any tag.
+		$tag_re = '{
+				(					# $2: Capture hole tag.
+					</?					# Any opening or closing tag.
+						[\w:$]+			# Tag name.
+						(?:
+							(?=[\s"\'/a-zA-Z0-9])	# Allowed characters after tag name.
+							(?>
+								".*?"		|	# Double quotes (can contain `>`)
+								\'.*?\'   	|	# Single quotes (can contain `>`)
+								.+?				# Anything but quotes and `>`.
+							)*?
+						)?
+					>					# End of tag.
+				|
+					<!--    .*?     -->	# HTML Comment
+				|
+					<\?.*?\?> | <%.*?%>	# Processing instruction
+				|
+					<!\[CDATA\[.*?\]\]>	# CData Block
+				)
+			}xs';
+		
+		$original_text = $text;		# Save original text in case of faliure.
+		
+		$depth		= 0;	# Current depth inside the tag tree.
+		$block_text	= "";	# Temporary text holder for current text.
+		$parsed		= "";	# Parsed text that will be returned.
+
+		#
+		# Get the name of the starting tag.
+		# (This pattern makes $base_tag_name_re safe without quoting.)
+		#
+		if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
+			$base_tag_name_re = $matches[1];
+
+		#
+		# Loop through every tag until we find the corresponding closing tag.
+		#
+		do {
+			#
+			# Split the text using the first $tag_match pattern found.
+			# Text before  pattern will be first in the array, text after
+			# pattern will be at the end, and between will be any catches made 
+			# by the pattern.
+			#
+			$parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
+			
+			if (count($parts) < 3) {
+				#
+				# End of $text reached with unbalenced tag(s).
+				# In that case, we return original text unchanged and pass the
+				# first character as filtered to prevent an infinite loop in the 
+				# parent function.
+				#
+				return array($original_text{0}, substr($original_text, 1));
+			}
+			
+			$block_text .= $parts[0]; # Text before current tag.
+			$tag         = $parts[1]; # Tag to handle.
+			$text        = $parts[2]; # Remaining text after current tag.
+			
+			#
+			# Check for: Auto-close tag (like <hr/>)
+			#			 Comments and Processing Instructions.
+			#
+			if (preg_match('{^</?(?:'.$this->auto_close_tags_re.')\b}', $tag) ||
+				$tag{1} == '!' || $tag{1} == '?')
+			{
+				# Just add the tag to the block as if it was text.
+				$block_text .= $tag;
+			}
+			else {
+				#
+				# Increase/decrease nested tag count. Only do so if
+				# the tag's name match base tag's.
+				#
+				if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
+					if ($tag{1} == '/')						$depth--;
+					else if ($tag{strlen($tag)-2} != '/')	$depth++;
+				}
+				
+				#
+				# Check for `markdown="1"` attribute and handle it.
+				#
+				if ($md_attr && 
+					preg_match($markdown_attr_re, $tag, $attr_m) &&
+					preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
+				{
+					# Remove `markdown` attribute from opening tag.
+					$tag = preg_replace($markdown_attr_re, '', $tag);
+					
+					# Check if text inside this tag must be parsed in span mode.
+					$this->mode = $attr_m[2] . $attr_m[3];
+					$span_mode = $this->mode == 'span' || $this->mode != 'block' &&
+						preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
+					
+					# Calculate indent before tag.
+					if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) {
+						$strlen = $this->utf8_strlen;
+						$indent = $strlen($matches[1], 'UTF-8');
+					} else {
+						$indent = 0;
+					}
+					
+					# End preceding block with this tag.
+					$block_text .= $tag;
+					$parsed .= $this->$hash_method($block_text);
+					
+					# Get enclosing tag name for the ParseMarkdown function.
+					# (This pattern makes $tag_name_re safe without quoting.)
+					preg_match('/^<([\w:$]*)\b/', $tag, $matches);
+					$tag_name_re = $matches[1];
+					
+					# Parse the content using the HTML-in-Markdown parser.
+					list ($block_text, $text)
+						= $this->_hashHTMLBlocks_inMarkdown($text, $indent, 
+							$tag_name_re, $span_mode);
+					
+					# Outdent markdown text.
+					if ($indent > 0) {
+						$block_text = preg_replace("/^[ ]{1,$indent}/m", "", 
+													$block_text);
+					}
+					
+					# Append tag content to parsed text.
+					if (!$span_mode)	$parsed .= "\n\n$block_text\n\n";
+					else				$parsed .= "$block_text";
+					
+					# Start over a new block.
+					$block_text = "";
+				}
+				else $block_text .= $tag;
+			}
+			
+		} while ($depth > 0);
+		
+		#
+		# Hash last block text that wasn't processed inside the loop.
+		#
+		$parsed .= $this->$hash_method($block_text);
+		
+		return array($parsed, $text);
+	}
+
+
+	function hashClean($text) {
+	#
+	# Called whenever a tag must be hashed when a function insert a "clean" tag
+	# in $text, it pass through this function and is automaticaly escaped, 
+	# blocking invalid nested overlap.
+	#
+		return $this->hashPart($text, 'C');
+	}
+
+
+	function doHeaders($text) {
+	#
+	# Redefined to add id attribute support.
+	#
+		# Setext-style headers:
+		#	  Header 1  {#header1}
+		#	  ========
+		#  
+		#	  Header 2  {#header2}
+		#	  --------
+		#
+		$text = preg_replace_callback(
+			'{
+				(^.+?)								# $1: Header text
+				(?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})?	# $2: Id attribute
+				[ ]*\n(=+|-+)[ ]*\n+				# $3: Header footer
+			}mx',
+			array(&$this, '_doHeaders_callback_setext'), $text);
+
+		# atx-style headers:
+		#	# Header 1        {#header1}
+		#	## Header 2       {#header2}
+		#	## Header 2 with closing hashes ##  {#header3}
+		#	...
+		#	###### Header 6   {#header2}
+		#
+		$text = preg_replace_callback('{
+				^(\#{1,6})	# $1 = string of #\'s
+				[ ]*
+				(.+?)		# $2 = Header text
+				[ ]*
+				\#*			# optional closing #\'s (not counted)
+				(?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # id attribute
+				[ ]*
+				\n+
+			}xm',
+			array(&$this, '_doHeaders_callback_atx'), $text);
+
+		return $text;
+	}
+	function _doHeaders_attr($attr) {
+		if (empty($attr))  return "";
+		return " id=\"$attr\"";
+	}
+	function _doHeaders_callback_setext($matches) {
+		if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
+			return $matches[0];
+		$level = $matches[3]{0} == '=' ? 1 : 2;
+		$attr  = $this->_doHeaders_attr($id =& $matches[2]);
+		$block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
+		return "\n" . $this->hashBlock($block) . "\n\n";
+	}
+	function _doHeaders_callback_atx($matches) {
+		$level = strlen($matches[1]);
+		$attr  = $this->_doHeaders_attr($id =& $matches[3]);
+		$block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
+		return "\n" . $this->hashBlock($block) . "\n\n";
+	}
+
+
+	function doTables($text) {
+	#
+	# Form HTML tables.
+	#
+		$less_than_tab = $this->tab_width - 1;
+		#
+		# Find tables with leading pipe.
+		#
+		#	| Header 1 | Header 2
+		#	| -------- | --------
+		#	| Cell 1   | Cell 2
+		#	| Cell 3   | Cell 4
+		#
+		$text = preg_replace_callback('
+			{
+				^							# Start of a line
+				[ ]{0,'.$less_than_tab.'}	# Allowed whitespace.
+				[|]							# Optional leading pipe (present)
+				(.+) \n						# $1: Header row (at least one pipe)
+				
+				[ ]{0,'.$less_than_tab.'}	# Allowed whitespace.
+				[|] ([ ]*[-:]+[-| :]*) \n	# $2: Header underline
+				
+				(							# $3: Cells
+					(?>
+						[ ]*				# Allowed whitespace.
+						[|] .* \n			# Row content.
+					)*
+				)
+				(?=\n|\Z)					# Stop at final double newline.
+			}xm',
+			array(&$this, '_doTable_leadingPipe_callback'), $text);
+		
+		#
+		# Find tables without leading pipe.
+		#
+		#	Header 1 | Header 2
+		#	-------- | --------
+		#	Cell 1   | Cell 2
+		#	Cell 3   | Cell 4
+		#
+		$text = preg_replace_callback('
+			{
+				^							# Start of a line
+				[ ]{0,'.$less_than_tab.'}	# Allowed whitespace.
+				(\S.*[|].*) \n				# $1: Header row (at least one pipe)
+				
+				[ ]{0,'.$less_than_tab.'}	# Allowed whitespace.
+				([-:]+[ ]*[|][-| :]*) \n	# $2: Header underline
+				
+				(							# $3: Cells
+					(?>
+						.* [|] .* \n		# Row content
+					)*
+				)
+				(?=\n|\Z)					# Stop at final double newline.
+			}xm',
+			array(&$this, '_DoTable_callback'), $text);
+
+		return $text;
+	}
+	function _doTable_leadingPipe_callback($matches) {
+		$head		= $matches[1];
+		$underline	= $matches[2];
+		$content	= $matches[3];
+		
+		# Remove leading pipe for each row.
+		$content	= preg_replace('/^ *[|]/m', '', $content);
+		
+		return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
+	}
+	function _doTable_callback($matches) {
+		$head		= $matches[1];
+		$underline	= $matches[2];
+		$content	= $matches[3];
+
+		# Remove any tailing pipes for each line.
+		$head		= preg_replace('/[|] *$/m', '', $head);
+		$underline	= preg_replace('/[|] *$/m', '', $underline);
+		$content	= preg_replace('/[|] *$/m', '', $content);
+		
+		# Reading alignement from header underline.
+		$separators	= preg_split('/ *[|] */', $underline);
+		foreach ($separators as $n => $s) {
+			if (preg_match('/^ *-+: *$/', $s))		$attr[$n] = ' align="right"';
+			else if (preg_match('/^ *:-+: *$/', $s))$attr[$n] = ' align="center"';
+			else if (preg_match('/^ *:-+ *$/', $s))	$attr[$n] = ' align="left"';
+			else									$attr[$n] = '';
+		}
+		
+		# Parsing span elements, including code spans, character escapes, 
+		# and inline HTML tags, so that pipes inside those gets ignored.
+		$head		= $this->parseSpan($head);
+		$headers	= preg_split('/ *[|] */', $head);
+		$col_count	= count($headers);
+		
+		# Write column headers.
+		$text = "<table>\n";
+		$text .= "<thead>\n";
+		$text .= "<tr>\n";
+		foreach ($headers as $n => $header)
+			$text .= "  <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
+		$text .= "</tr>\n";
+		$text .= "</thead>\n";
+		
+		# Split content by row.
+		$rows = explode("\n", trim($content, "\n"));
+		
+		$text .= "<tbody>\n";
+		foreach ($rows as $row) {
+			# Parsing span elements, including code spans, character escapes, 
+			# and inline HTML tags, so that pipes inside those gets ignored.
+			$row = $this->parseSpan($row);
+			
+			# Split row by cell.
+			$row_cells = preg_split('/ *[|] */', $row, $col_count);
+			$row_cells = array_pad($row_cells, $col_count, '');
+			
+			$text .= "<tr>\n";
+			foreach ($row_cells as $n => $cell)
+				$text .= "  <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
+			$text .= "</tr>\n";
+		}
+		$text .= "</tbody>\n";
+		$text .= "</table>";
+		
+		return $this->hashBlock($text) . "\n";
+	}
+
+	
+	function doDefLists($text) {
+	#
+	# Form HTML definition lists.
+	#
+		$less_than_tab = $this->tab_width - 1;
+
+		# Re-usable pattern to match any entire dl list:
+		$whole_list_re = '(?>
+			(								# $1 = whole list
+			  (								# $2
+				[ ]{0,'.$less_than_tab.'}
+				((?>.*\S.*\n)+)				# $3 = defined term
+				\n?
+				[ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+			  )
+			  (?s:.+?)
+			  (								# $4
+				  \z
+				|
+				  \n{2,}
+				  (?=\S)
+				  (?!						# Negative lookahead for another term
+					[ ]{0,'.$less_than_tab.'}
+					(?: \S.*\n )+?			# defined term
+					\n?
+					[ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+				  )
+				  (?!						# Negative lookahead for another definition
+					[ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+				  )
+			  )
+			)
+		)'; // mx
+
+		$text = preg_replace_callback('{
+				(?>\A\n?|(?<=\n\n))
+				'.$whole_list_re.'
+			}mx',
+			array(&$this, '_doDefLists_callback'), $text);
+
+		return $text;
+	}
+	function _doDefLists_callback($matches) {
+		# Re-usable patterns to match list item bullets and number markers:
+		$list = $matches[1];
+		
+		# Turn double returns into triple returns, so that we can make a
+		# paragraph for the last item in a list, if necessary:
+		$result = trim($this->processDefListItems($list));
+		$result = "<dl>\n" . $result . "\n</dl>";
+		return $this->hashBlock($result) . "\n\n";
+	}
+
+
+	function processDefListItems($list_str) {
+	#
+	#	Process the contents of a single definition list, splitting it
+	#	into individual term and definition list items.
+	#
+		$less_than_tab = $this->tab_width - 1;
+		
+		# trim trailing blank lines:
+		$list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
+
+		# Process definition terms.
+		$list_str = preg_replace_callback('{
+			(?>\A\n?|\n\n+)					# leading line
+			(								# definition terms = $1
+				[ ]{0,'.$less_than_tab.'}	# leading whitespace
+				(?![:][ ]|[ ])				# negative lookahead for a definition 
+											#   mark (colon) or more whitespace.
+				(?> \S.* \n)+?				# actual term (not whitespace).	
+			)			
+			(?=\n?[ ]{0,3}:[ ])				# lookahead for following line feed 
+											#   with a definition mark.
+			}xm',
+			array(&$this, '_processDefListItems_callback_dt'), $list_str);
+
+		# Process actual definitions.
+		$list_str = preg_replace_callback('{
+			\n(\n+)?						# leading line = $1
+			(								# marker space = $2
+				[ ]{0,'.$less_than_tab.'}	# whitespace before colon
+				[:][ ]+						# definition mark (colon)
+			)
+			((?s:.+?))						# definition text = $3
+			(?= \n+ 						# stop at next definition mark,
+				(?:							# next term or end of text
+					[ ]{0,'.$less_than_tab.'} [:][ ]	|
+					<dt> | \z
+				)						
+			)					
+			}xm',
+			array(&$this, '_processDefListItems_callback_dd'), $list_str);
+
+		return $list_str;
+	}
+	function _processDefListItems_callback_dt($matches) {
+		$terms = explode("\n", trim($matches[1]));
+		$text = '';
+		foreach ($terms as $term) {
+			$term = $this->runSpanGamut(trim($term));
+			$text .= "\n<dt>" . $term . "</dt>";
+		}
+		return $text . "\n";
+	}
+	function _processDefListItems_callback_dd($matches) {
+		$leading_line	= $matches[1];
+		$marker_space	= $matches[2];
+		$def			= $matches[3];
+
+		if ($leading_line || preg_match('/\n{2,}/', $def)) {
+			# Replace marker with the appropriate whitespace indentation
+			$def = str_repeat(' ', strlen($marker_space)) . $def;
+			$def = $this->runBlockGamut($this->outdent($def . "\n\n"));
+			$def = "\n". $def ."\n";
+		}
+		else {
+			$def = rtrim($def);
+			$def = $this->runSpanGamut($this->outdent($def));
+		}
+
+		return "\n<dd>" . $def . "</dd>\n";
+	}
+
+
+	function doFencedCodeBlocks($text) {
+	#
+	# Adding the fenced code block syntax to regular Markdown:
+	#
+	# ~~~
+	# Code block
+	# ~~~
+	#
+		$less_than_tab = $this->tab_width;
+		
+		$text = preg_replace_callback('{
+				(?:\n|\A)
+				# 1: Opening marker
+				(
+					~{3,} # Marker: three tilde or more.
+				)
+				[ ]* \n # Whitespace and newline following marker.
+				
+				# 2: Content
+				(
+					(?>
+						(?!\1 [ ]* \n)	# Not a closing marker.
+						.*\n+
+					)+
+				)
+				
+				# Closing marker.
+				\1 [ ]* \n
+			}xm',
+			array(&$this, '_doFencedCodeBlocks_callback'), $text);
+
+		return $text;
+	}
+	function _doFencedCodeBlocks_callback($matches) {
+		$codeblock = $matches[2];
+		$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
+		$codeblock = preg_replace_callback('/^\n+/',
+			array(&$this, '_doFencedCodeBlocks_newlines'), $codeblock);
+		$codeblock = "<pre><code>$codeblock</code></pre>";
+		return "\n\n".$this->hashBlock($codeblock)."\n\n";
+	}
+	function _doFencedCodeBlocks_newlines($matches) {
+		return str_repeat("<br$this->empty_element_suffix", 
+			strlen($matches[0]));
+	}
+
+
+	#
+	# Redefining emphasis markers so that emphasis by underscore does not
+	# work in the middle of a word.
+	#
+	var $em_relist = array(
+		''  => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S|$)(?![.,:;]\s)',
+		'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
+		'_' => '(?<=\S|^)(?<!_)_(?![a-zA-Z0-9_])',
+		);
+	var $strong_relist = array(
+		''   => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S|$)(?![.,:;]\s)',
+		'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
+		'__' => '(?<=\S|^)(?<!_)__(?![a-zA-Z0-9_])',
+		);
+	var $em_strong_relist = array(
+		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S|$)(?![.,:;]\s)',
+		'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
+		'___' => '(?<=\S|^)(?<!_)___(?![a-zA-Z0-9_])',
+		);
+
+
+	function formParagraphs($text) {
+	#
+	#	Params:
+	#		$text - string to process with html <p> tags
+	#
+		# Strip leading and trailing lines:
+		$text = preg_replace('/\A\n+|\n+\z/', '', $text);
+		
+		$grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
+
+		#
+		# Wrap <p> tags and unhashify HTML blocks
+		#
+		foreach ($grafs as $key => $value) {
+			$value = trim($this->runSpanGamut($value));
+			
+			# Check if this should be enclosed in a paragraph.
+			# Clean tag hashes & block tag hashes are left alone.
+			$is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value);
+			
+			if ($is_p) {
+				$value = "<p>$value</p>";
+			}
+			$grafs[$key] = $value;
+		}
+		
+		# Join grafs in one text, then unhash HTML tags. 
+		$text = implode("\n\n", $grafs);
+		
+		# Finish by removing any tag hashes still present in $text.
+		$text = $this->unhash($text);
+		
+		return $text;
+	}
+	
+	
+	### Footnotes
+	
+	function stripFootnotes($text) {
+	#
+	# Strips link definitions from text, stores the URLs and titles in
+	# hash references.
+	#
+		$less_than_tab = $this->tab_width - 1;
+
+		# Link defs are in the form: [^id]: url "optional title"
+		$text = preg_replace_callback('{
+			^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?:	# note_id = $1
+			  [ ]*
+			  \n?					# maybe *one* newline
+			(						# text = $2 (no blank lines allowed)
+				(?:					
+					.+				# actual text
+				|
+					\n				# newlines but 
+					(?!\[\^.+?\]:\s)# negative lookahead for footnote marker.
+					(?!\n+[ ]{0,3}\S)# ensure line is not blank and followed 
+									# by non-indented content
+				)*
+			)		
+			}xm',
+			array(&$this, '_stripFootnotes_callback'),
+			$text);
+		return $text;
+	}
+	function _stripFootnotes_callback($matches) {
+		$note_id = $this->fn_id_prefix . $matches[1];
+		$this->footnotes[$note_id] = $this->outdent($matches[2]);
+		return ''; # String that will replace the block
+	}
+
+
+	function doFootnotes($text) {
+	#
+	# Replace footnote references in $text [^id] with a special text-token 
+	# which will be replaced by the actual footnote marker in appendFootnotes.
+	#
+		if (!$this->in_anchor) {
+			$text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text);
+		}
+		return $text;
+	}
+
+	
+	function appendFootnotes($text) {
+	#
+	# Append footnote list to text.
+	#
+		$text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', 
+			array(&$this, '_appendFootnotes_callback'), $text);
+	
+		if (!empty($this->footnotes_ordered)) {
+			$text .= "\n\n";
+			$text .= "<div class=\"footnotes\">\n";
+			$text .= "<hr". $this->empty_element_suffix ."\n";
+			$text .= "<ol>\n\n";
+			
+			$attr = " rev=\"footnote\"";
+			if ($this->fn_backlink_class != "") {
+				$class = $this->fn_backlink_class;
+				$class = $this->encodeAttribute($class);
+				$attr .= " class=\"$class\"";
+			}
+			if ($this->fn_backlink_title != "") {
+				$title = $this->fn_backlink_title;
+				$title = $this->encodeAttribute($title);
+				$attr .= " title=\"$title\"";
+			}
+			$num = 0;
+			
+			while (!empty($this->footnotes_ordered)) {
+				$footnote = reset($this->footnotes_ordered);
+				$note_id = key($this->footnotes_ordered);
+				unset($this->footnotes_ordered[$note_id]);
+				
+				$footnote .= "\n"; # Need to append newline before parsing.
+				$footnote = $this->runBlockGamut("$footnote\n");				
+				$footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', 
+					array(&$this, '_appendFootnotes_callback'), $footnote);
+				
+				$attr = str_replace("%%", ++$num, $attr);
+				$note_id = $this->encodeAttribute($note_id);
+				
+				# Add backlink to last paragraph; create new paragraph if needed.
+				$backlink = "<a href=\"#fnref:$note_id\"$attr>&#8617;</a>";
+				if (preg_match('{</p>$}', $footnote)) {
+					$footnote = substr($footnote, 0, -4) . "&#160;$backlink</p>";
+				} else {
+					$footnote .= "\n\n<p>$backlink</p>";
+				}
+				
+				$text .= "<li id=\"fn:$note_id\">\n";
+				$text .= $footnote . "\n";
+				$text .= "</li>\n\n";
+			}
+			
+			$text .= "</ol>\n";
+			$text .= "</div>";
+		}
+		return $text;
+	}
+	function _appendFootnotes_callback($matches) {
+		$node_id = $this->fn_id_prefix . $matches[1];
+		
+		# Create footnote marker only if it has a corresponding footnote *and*
+		# the footnote hasn't been used by another marker.
+		if (isset($this->footnotes[$node_id])) {
+			# Transfert footnote content to the ordered list.
+			$this->footnotes_ordered[$node_id] = $this->footnotes[$node_id];
+			unset($this->footnotes[$node_id]);
+			
+			$num = $this->footnote_counter++;
+			$attr = " rel=\"footnote\"";
+			if ($this->fn_link_class != "") {
+				$class = $this->fn_link_class;
+				$class = $this->encodeAttribute($class);
+				$attr .= " class=\"$class\"";
+			}
+			if ($this->fn_link_title != "") {
+				$title = $this->fn_link_title;
+				$title = $this->encodeAttribute($title);
+				$attr .= " title=\"$title\"";
+			}
+			
+			$attr = str_replace("%%", $num, $attr);
+			$node_id = $this->encodeAttribute($node_id);
+			
+			return
+				"<sup id=\"fnref:$node_id\">".
+				"<a href=\"#fn:$node_id\"$attr>$num</a>".
+				"</sup>";
+		}
+		
+		return "[^".$matches[1]."]";
+	}
+		
+	
+	### Abbreviations ###
+	
+	function stripAbbreviations($text) {
+	#
+	# Strips abbreviations from text, stores titles in hash references.
+	#
+		$less_than_tab = $this->tab_width - 1;
+
+		# Link defs are in the form: [id]*: url "optional title"
+		$text = preg_replace_callback('{
+			^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?:	# abbr_id = $1
+			(.*)					# text = $2 (no blank lines allowed)	
+			}xm',
+			array(&$this, '_stripAbbreviations_callback'),
+			$text);
+		return $text;
+	}
+	function _stripAbbreviations_callback($matches) {
+		$abbr_word = $matches[1];
+		$abbr_desc = $matches[2];
+		if ($this->abbr_word_re)
+			$this->abbr_word_re .= '|';
+		$this->abbr_word_re .= preg_quote($abbr_word);
+		$this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
+		return ''; # String that will replace the block
+	}
+	
+	
+	function doAbbreviations($text) {
+	#
+	# Find defined abbreviations in text and wrap them in <abbr> elements.
+	#
+		if ($this->abbr_word_re) {
+			// cannot use the /x modifier because abbr_word_re may 
+			// contain significant spaces:
+			$text = preg_replace_callback('{'.
+				'(?<![\w\x1A])'.
+				'(?:'.$this->abbr_word_re.')'.
+				'(?![\w\x1A])'.
+				'}', 
+				array(&$this, '_doAbbreviations_callback'), $text);
+		}
+		return $text;
+	}
+	function _doAbbreviations_callback($matches) {
+		$abbr = $matches[0];
+		if (isset($this->abbr_desciptions[$abbr])) {
+			$desc = $this->abbr_desciptions[$abbr];
+			if (empty($desc)) {
+				return $this->hashPart("<abbr>$abbr</abbr>");
+			} else {
+				$desc = $this->encodeAttribute($desc);
+				return $this->hashPart("<abbr title=\"$desc\">$abbr</abbr>");
+			}
+		} else {
+			return $matches[0];
+		}
+	}
+
+}
+
+
+/*
+
+PHP Markdown Extra
+==================
+
+Description
+-----------
+
+This is a PHP port of the original Markdown formatter written in Perl 
+by John Gruber. This special "Extra" version of PHP Markdown features 
+further enhancements to the syntax for making additional constructs 
+such as tables and definition list.
+
+Markdown is a text-to-HTML filter; it translates an easy-to-read /
+easy-to-write structured text format into HTML. Markdown's text format
+is most similar to that of plain text email, and supports features such
+as headers, *emphasis*, code blocks, blockquotes, and links.
+
+Markdown's syntax is designed not as a generic markup language, but
+specifically to serve as a front-end to (X)HTML. You can use span-level
+HTML tags anywhere in a Markdown document, and you can use block level
+HTML tags (like <div> and <table> as well).
+
+For more information about Markdown's syntax, see:
+
+<http://daringfireball.net/projects/markdown/>
+
+
+Bugs
+----
+
+To file bug reports please send email to:
+
+<michel.fortin@michelf.com>
+
+Please include with your report: (1) the example input; (2) the output you
+expected; (3) the output Markdown actually produced.
+
+
+Version History
+--------------- 
+
+See the readme file for detailed release notes for this version.
+
+
+Copyright and License
+---------------------
+
+PHP Markdown & Extra  
+Copyright (c) 2004-2009 Michel Fortin  
+<http://michelf.com/>  
+All rights reserved.
+
+Based on Markdown  
+Copyright (c) 2003-2006 John Gruber   
+<http://daringfireball.net/>   
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+*	Redistributions of source code must retain the above copyright notice,
+	this list of conditions and the following disclaimer.
+
+*	Redistributions in binary form must reproduce the above copyright
+	notice, this list of conditions and the following disclaimer in the
+	documentation and/or other materials provided with the distribution.
+
+*	Neither the name "Markdown" nor the names of its contributors may
+	be used to endorse or promote products derived from this software
+	without specific prior written permission.
+
+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.
+
+*/
+?>
\ No newline at end of file
diff --git a/core/vendor/dflydev/markdown/src/dflydev/markdown/MarkdownParser.php b/core/vendor/dflydev/markdown/src/dflydev/markdown/MarkdownParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..f3d3976da125535d9ca2e0925638ef2f9484e278
--- /dev/null
+++ b/core/vendor/dflydev/markdown/src/dflydev/markdown/MarkdownParser.php
@@ -0,0 +1,1527 @@
+<?php
+
+/*
+ * This file is a part of the PHP Markdown library.
+ *
+ * (c) Dragonfly Development Inc.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace dflydev\markdown;
+
+#
+# Global default settings:
+#
+
+class MarkdownParser implements IMarkdownParser {
+
+    /**
+     * Default suffix for empty elements
+     * @var string
+     */
+    const DEFAULT_EMPTY_ELEMENT_SUFFIX = " />";
+    
+    /**
+     * Default tab width for code blocks
+     * @var integer
+     */
+    const DEFAULT_TAB_WIDTH = 4;
+    
+    /**
+     * Configuration key for changing the empty element suffix
+     * @var string
+     */
+    const CONFIG_EMPTY_ELEMENT_SUFFIX = 'config.emptyElementSuffix';
+    
+    /**
+     * Configuration key for changing the tab width for code blocks
+     * @var string
+     */
+    const CONFIG_TAB_WIDTH = 'config.tabWidth';
+
+	# Regex to match balanced [brackets].
+	# Needed to insert a maximum bracked depth while converting to PHP.
+	var $nested_brackets_depth = 6;
+	var $nested_brackets_re;
+	
+	var $nested_url_parenthesis_depth = 4;
+	var $nested_url_parenthesis_re;
+
+	# Table of hash values for escaped characters:
+	var $escape_chars = '\`*_{}[]()>#+-.!';
+	var $escape_chars_re;
+
+	# Change to ">" for HTML output.
+	var $empty_element_suffix = self::DEFAULT_EMPTY_ELEMENT_SUFFIX;
+	var $tab_width = self::DEFAULT_TAB_WIDTH;
+	
+	# Change to `true` to disallow markup or entities.
+	var $no_markup = false;
+	var $no_entities = false;
+	
+	# Predefined urls and titles for reference links and images.
+	var $predef_urls = array();
+	var $predef_titles = array();
+
+
+	function __construct()
+	{
+	#
+	# Constructor function. Initialize appropriate member variables.
+	#
+		$this->_initDetab();
+		$this->prepareItalicsAndBold();
+	
+		$this->nested_brackets_re = 
+			str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth).
+			str_repeat('\])*', $this->nested_brackets_depth);
+	
+		$this->nested_url_parenthesis_re = 
+			str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth).
+			str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth);
+		
+		$this->escape_chars_re = '['.preg_quote($this->escape_chars).']';
+		
+		# Sort document, block, and span gamut in ascendent priority order.
+		asort($this->document_gamut);
+		asort($this->block_gamut);
+		asort($this->span_gamut);
+	}
+	
+	/**
+	 * (non-PHPdoc)
+	 * @see dflydev\markdown.IMarkdownParser::configureMarkdownParser()
+	 */
+	public function configureMarkdownParser($key, $value)
+	{
+	    switch($key) {
+	        case self::CONFIG_TAB_WIDTH:
+	            $this->tab_width = $value;
+	            break;
+	        case self::CONFIG_EMPTY_ELEMENT_SUFFIX:
+	            $this->empty_element_suffix = $value;
+	            break;
+	        default:
+	            // TODO: Warning?
+	            break;
+	    }
+	    //
+	}
+
+	/**
+	 * (non-PHPdoc)
+	 * @see dflydev\markdown.IMarkdownParser::transformMarkdown()
+	 */
+	public function transformMarkdown($text)
+	{
+	    return $this->transform($text);
+	}
+
+
+	# Internal hashes used during transformation.
+	var $urls = array();
+	var $titles = array();
+	var $html_hashes = array();
+	
+	# Status flag to avoid invalid nesting.
+	var $in_anchor = false;
+	
+	
+	function setup() {
+	#
+	# Called before the transformation process starts to setup parser 
+	# states.
+	#
+		# Clear global hashes.
+		$this->urls = $this->predef_urls;
+		$this->titles = $this->predef_titles;
+		$this->html_hashes = array();
+		
+		$in_anchor = false;
+	}
+	
+	function teardown() {
+	#
+	# Called after the transformation process to clear any variable 
+	# which may be taking up memory unnecessarly.
+	#
+		$this->urls = array();
+		$this->titles = array();
+		$this->html_hashes = array();
+	}
+
+
+	function transform($text) {
+	#
+	# Main function. Performs some preprocessing on the input text
+	# and pass it through the document gamut.
+	#
+		$this->setup();
+	
+		# Remove UTF-8 BOM and marker character in input, if present.
+		$text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text);
+
+		# Standardize line endings:
+		#   DOS to Unix and Mac to Unix
+		$text = preg_replace('{\r\n?}', "\n", $text);
+
+		# Make sure $text ends with a couple of newlines:
+		$text .= "\n\n";
+
+		# Convert all tabs to spaces.
+		$text = $this->detab($text);
+
+		# Turn block-level HTML blocks into hash entries
+		$text = $this->hashHTMLBlocks($text);
+
+		# Strip any lines consisting only of spaces and tabs.
+		# This makes subsequent regexen easier to write, because we can
+		# match consecutive blank lines with /\n+/ instead of something
+		# contorted like /[ ]*\n+/ .
+		$text = preg_replace('/^[ ]+$/m', '', $text);
+
+		# Run document gamut methods.
+		foreach ($this->document_gamut as $method => $priority) {
+			$text = $this->$method($text);
+		}
+		
+		$this->teardown();
+
+		return $text . "\n";
+	}
+	
+	var $document_gamut = array(
+		# Strip link definitions, store in hashes.
+		"stripLinkDefinitions" => 20,
+		
+		"runBasicBlockGamut"   => 30,
+		);
+
+
+	function stripLinkDefinitions($text) {
+	#
+	# Strips link definitions from text, stores the URLs and titles in
+	# hash references.
+	#
+		$less_than_tab = $this->tab_width - 1;
+
+		# Link defs are in the form: ^[id]: url "optional title"
+		$text = preg_replace_callback('{
+							^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?:	# id = $1
+							  [ ]*
+							  \n?				# maybe *one* newline
+							  [ ]*
+							(?:
+							  <(.+?)>			# url = $2
+							|
+							  (\S+?)			# url = $3
+							)
+							  [ ]*
+							  \n?				# maybe one newline
+							  [ ]*
+							(?:
+								(?<=\s)			# lookbehind for whitespace
+								["(]
+								(.*?)			# title = $4
+								[")]
+								[ ]*
+							)?	# title is optional
+							(?:\n+|\Z)
+			}xm',
+			array(&$this, '_stripLinkDefinitions_callback'),
+			$text);
+		return $text;
+	}
+	function _stripLinkDefinitions_callback($matches) {
+		$link_id = strtolower($matches[1]);
+		$url = $matches[2] == '' ? $matches[3] : $matches[2];
+		$this->urls[$link_id] = $url;
+		$this->titles[$link_id] =& $matches[4];
+		return ''; # String that will replace the block
+	}
+
+
+	function hashHTMLBlocks($text) {
+		if ($this->no_markup)  return $text;
+
+		$less_than_tab = $this->tab_width - 1;
+
+		# Hashify HTML blocks:
+		# We only want to do this for block-level HTML tags, such as headers,
+		# lists, and tables. That's because we still want to wrap <p>s around
+		# "paragraphs" that are wrapped in non-block-level tags, such as anchors,
+		# phrase emphasis, and spans. The list of tags we're looking for is
+		# hard-coded:
+		#
+		# *  List "a" is made of tags which can be both inline or block-level.
+		#    These will be treated block-level when the start tag is alone on 
+		#    its line, otherwise they're not matched here and will be taken as 
+		#    inline later.
+		# *  List "b" is made of tags which are always block-level;
+		#
+		$block_tags_a_re = 'ins|del';
+		$block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
+						   'script|noscript|form|fieldset|iframe|math';
+
+		# Regular expression for the content of a block tag.
+		$nested_tags_level = 4;
+		$attr = '
+			(?>				# optional tag attributes
+			  \s			# starts with whitespace
+			  (?>
+				[^>"/]+		# text outside quotes
+			  |
+				/+(?!>)		# slash not followed by ">"
+			  |
+				"[^"]*"		# text inside double quotes (tolerate ">")
+			  |
+				\'[^\']*\'	# text inside single quotes (tolerate ">")
+			  )*
+			)?	
+			';
+		$content =
+			str_repeat('
+				(?>
+				  [^<]+			# content without tag
+				|
+				  <\2			# nested opening tag
+					'.$attr.'	# attributes
+					(?>
+					  />
+					|
+					  >', $nested_tags_level).	# end of opening tag
+					  '.*?'.					# last level nested tag content
+			str_repeat('
+					  </\2\s*>	# closing nested tag
+					)
+				  |				
+					<(?!/\2\s*>	# other tags with a different name
+				  )
+				)*',
+				$nested_tags_level);
+		$content2 = str_replace('\2', '\3', $content);
+
+		# First, look for nested blocks, e.g.:
+		# 	<div>
+		# 		<div>
+		# 		tags for inner block must be indented.
+		# 		</div>
+		# 	</div>
+		#
+		# The outermost tags must start at the left margin for this to match, and
+		# the inner nested divs must be indented.
+		# We need to do this before the next, more liberal match, because the next
+		# match will start at the first `<div>` and stop at the first `</div>`.
+		$text = preg_replace_callback('{(?>
+			(?>
+				(?<=\n\n)		# Starting after a blank line
+				|				# or
+				\A\n?			# the beginning of the doc
+			)
+			(						# save in $1
+
+			  # Match from `\n<tag>` to `</tag>\n`, handling nested tags 
+			  # in between.
+					
+						[ ]{0,'.$less_than_tab.'}
+						<('.$block_tags_b_re.')# start tag = $2
+						'.$attr.'>			# attributes followed by > and \n
+						'.$content.'		# content, support nesting
+						</\2>				# the matching end tag
+						[ ]*				# trailing spaces/tabs
+						(?=\n+|\Z)	# followed by a newline or end of document
+
+			| # Special version for tags of group a.
+
+						[ ]{0,'.$less_than_tab.'}
+						<('.$block_tags_a_re.')# start tag = $3
+						'.$attr.'>[ ]*\n	# attributes followed by >
+						'.$content2.'		# content, support nesting
+						</\3>				# the matching end tag
+						[ ]*				# trailing spaces/tabs
+						(?=\n+|\Z)	# followed by a newline or end of document
+					
+			| # Special case just for <hr />. It was easier to make a special 
+			  # case than to make the other regex more complicated.
+			
+						[ ]{0,'.$less_than_tab.'}
+						<(hr)				# start tag = $2
+						'.$attr.'			# attributes
+						/?>					# the matching end tag
+						[ ]*
+						(?=\n{2,}|\Z)		# followed by a blank line or end of document
+			
+			| # Special case for standalone HTML comments:
+			
+					[ ]{0,'.$less_than_tab.'}
+					(?s:
+						<!-- .*? -->
+					)
+					[ ]*
+					(?=\n{2,}|\Z)		# followed by a blank line or end of document
+			
+			| # PHP and ASP-style processor instructions (<? and <%)
+			
+					[ ]{0,'.$less_than_tab.'}
+					(?s:
+						<([?%])			# $2
+						.*?
+						\2>
+					)
+					[ ]*
+					(?=\n{2,}|\Z)		# followed by a blank line or end of document
+					
+			)
+			)}Sxmi',
+			array(&$this, '_hashHTMLBlocks_callback'),
+			$text);
+
+		return $text;
+	}
+	function _hashHTMLBlocks_callback($matches) {
+		$text = $matches[1];
+		$key  = $this->hashBlock($text);
+		return "\n\n$key\n\n";
+	}
+	
+	
+	function hashPart($text, $boundary = 'X') {
+	#
+	# Called whenever a tag must be hashed when a function insert an atomic 
+	# element in the text stream. Passing $text to through this function gives
+	# a unique text-token which will be reverted back when calling unhash.
+	#
+	# The $boundary argument specify what character should be used to surround
+	# the token. By convension, "B" is used for block elements that needs not
+	# to be wrapped into paragraph tags at the end, ":" is used for elements
+	# that are word separators and "X" is used in the general case.
+	#
+		# Swap back any tag hash found in $text so we do not have to `unhash`
+		# multiple times at the end.
+		$text = $this->unhash($text);
+		
+		# Then hash the block.
+		static $i = 0;
+		$key = "$boundary\x1A" . ++$i . $boundary;
+		$this->html_hashes[$key] = $text;
+		return $key; # String that will replace the tag.
+	}
+
+
+	function hashBlock($text) {
+	#
+	# Shortcut function for hashPart with block-level boundaries.
+	#
+		return $this->hashPart($text, 'B');
+	}
+
+
+	var $block_gamut = array(
+	#
+	# These are all the transformations that form block-level
+	# tags like paragraphs, headers, and list items.
+	#
+		"doHeaders"         => 10,
+		"doHorizontalRules" => 20,
+		
+		"doLists"           => 40,
+		"doCodeBlocks"      => 50,
+		"doBlockQuotes"     => 60,
+		);
+
+	function runBlockGamut($text) {
+	#
+	# Run block gamut tranformations.
+	#
+		# We need to escape raw HTML in Markdown source before doing anything 
+		# else. This need to be done for each block, and not only at the 
+		# begining in the Markdown function since hashed blocks can be part of
+		# list items and could have been indented. Indented blocks would have 
+		# been seen as a code block in a previous pass of hashHTMLBlocks.
+		$text = $this->hashHTMLBlocks($text);
+		
+		return $this->runBasicBlockGamut($text);
+	}
+	
+	function runBasicBlockGamut($text) {
+	#
+	# Run block gamut tranformations, without hashing HTML blocks. This is 
+	# useful when HTML blocks are known to be already hashed, like in the first
+	# whole-document pass.
+	#
+		foreach ($this->block_gamut as $method => $priority) {
+			$text = $this->$method($text);
+		}
+		
+		# Finally form paragraph and restore hashed blocks.
+		$text = $this->formParagraphs($text);
+
+		return $text;
+	}
+	
+	
+	function doHorizontalRules($text) {
+		# Do Horizontal Rules:
+		return preg_replace(
+			'{
+				^[ ]{0,3}	# Leading space
+				([-*_])		# $1: First marker
+				(?>			# Repeated marker group
+					[ ]{0,2}	# Zero, one, or two spaces.
+					\1			# Marker character
+				){2,}		# Group repeated at least twice
+				[ ]*		# Tailing spaces
+				$			# End of line.
+			}mx',
+			"\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n", 
+			$text);
+	}
+
+
+	var $span_gamut = array(
+	#
+	# These are all the transformations that occur *within* block-level
+	# tags like paragraphs, headers, and list items.
+	#
+		# Process character escapes, code spans, and inline HTML
+		# in one shot.
+		"parseSpan"           => -30,
+
+		# Process anchor and image tags. Images must come first,
+		# because ![foo][f] looks like an anchor.
+		"doImages"            =>  10,
+		"doAnchors"           =>  20,
+		
+		# Make links out of things like `<http://example.com/>`
+		# Must come after doAnchors, because you can use < and >
+		# delimiters in inline links like [this](<url>).
+		"doAutoLinks"         =>  30,
+		"encodeAmpsAndAngles" =>  40,
+
+		"doItalicsAndBold"    =>  50,
+		"doHardBreaks"        =>  60,
+		);
+
+	function runSpanGamut($text) {
+	#
+	# Run span gamut tranformations.
+	#
+		foreach ($this->span_gamut as $method => $priority) {
+			$text = $this->$method($text);
+		}
+
+		return $text;
+	}
+	
+	
+	function doHardBreaks($text) {
+		# Do hard breaks:
+		return preg_replace_callback('/ {2,}\n/', 
+			array(&$this, '_doHardBreaks_callback'), $text);
+	}
+	function _doHardBreaks_callback($matches) {
+		return $this->hashPart("<br$this->empty_element_suffix\n");
+	}
+
+
+	function doAnchors($text) {
+	#
+	# Turn Markdown link shortcuts into XHTML <a> tags.
+	#
+		if ($this->in_anchor) return $text;
+		$this->in_anchor = true;
+		
+		#
+		# First, handle reference-style links: [link text] [id]
+		#
+		$text = preg_replace_callback('{
+			(					# wrap whole match in $1
+			  \[
+				('.$this->nested_brackets_re.')	# link text = $2
+			  \]
+
+			  [ ]?				# one optional space
+			  (?:\n[ ]*)?		# one optional newline followed by spaces
+
+			  \[
+				(.*?)		# id = $3
+			  \]
+			)
+			}xs',
+			array(&$this, '_doAnchors_reference_callback'), $text);
+
+		#
+		# Next, inline-style links: [link text](url "optional title")
+		#
+		$text = preg_replace_callback('{
+			(				# wrap whole match in $1
+			  \[
+				('.$this->nested_brackets_re.')	# link text = $2
+			  \]
+			  \(			# literal paren
+				[ \n]*
+				(?:
+					<(.+?)>	# href = $3
+				|
+					('.$this->nested_url_parenthesis_re.')	# href = $4
+				)
+				[ \n]*
+				(			# $5
+				  ([\'"])	# quote char = $6
+				  (.*?)		# Title = $7
+				  \6		# matching quote
+				  [ \n]*	# ignore any spaces/tabs between closing quote and )
+				)?			# title is optional
+			  \)
+			)
+			}xs',
+			array(&$this, '_doAnchors_inline_callback'), $text);
+
+		#
+		# Last, handle reference-style shortcuts: [link text]
+		# These must come last in case you've also got [link text][1]
+		# or [link text](/foo)
+		#
+		$text = preg_replace_callback('{
+			(					# wrap whole match in $1
+			  \[
+				([^\[\]]+)		# link text = $2; can\'t contain [ or ]
+			  \]
+			)
+			}xs',
+			array(&$this, '_doAnchors_reference_callback'), $text);
+
+		$this->in_anchor = false;
+		return $text;
+	}
+	function _doAnchors_reference_callback($matches) {
+		$whole_match =  $matches[1];
+		$link_text   =  $matches[2];
+		$link_id     =& $matches[3];
+
+		if ($link_id == "") {
+			# for shortcut links like [this][] or [this].
+			$link_id = $link_text;
+		}
+		
+		# lower-case and turn embedded newlines into spaces
+		$link_id = strtolower($link_id);
+		$link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
+
+		if (isset($this->urls[$link_id])) {
+			$url = $this->urls[$link_id];
+			$url = $this->encodeAttribute($url);
+			
+			$result = "<a href=\"$url\"";
+			if ( isset( $this->titles[$link_id] ) ) {
+				$title = $this->titles[$link_id];
+				$title = $this->encodeAttribute($title);
+				$result .=  " title=\"$title\"";
+			}
+		
+			$link_text = $this->runSpanGamut($link_text);
+			$result .= ">$link_text</a>";
+			$result = $this->hashPart($result);
+		}
+		else {
+			$result = $whole_match;
+		}
+		return $result;
+	}
+	function _doAnchors_inline_callback($matches) {
+		$whole_match	=  $matches[1];
+		$link_text		=  $this->runSpanGamut($matches[2]);
+		$url			=  $matches[3] == '' ? $matches[4] : $matches[3];
+		$title			=& $matches[7];
+
+		$url = $this->encodeAttribute($url);
+
+		$result = "<a href=\"$url\"";
+		if (isset($title)) {
+			$title = $this->encodeAttribute($title);
+			$result .=  " title=\"$title\"";
+		}
+		
+		$link_text = $this->runSpanGamut($link_text);
+		$result .= ">$link_text</a>";
+
+		return $this->hashPart($result);
+	}
+
+
+	function doImages($text) {
+	#
+	# Turn Markdown image shortcuts into <img> tags.
+	#
+		#
+		# First, handle reference-style labeled images: ![alt text][id]
+		#
+		$text = preg_replace_callback('{
+			(				# wrap whole match in $1
+			  !\[
+				('.$this->nested_brackets_re.')		# alt text = $2
+			  \]
+
+			  [ ]?				# one optional space
+			  (?:\n[ ]*)?		# one optional newline followed by spaces
+
+			  \[
+				(.*?)		# id = $3
+			  \]
+
+			)
+			}xs', 
+			array(&$this, '_doImages_reference_callback'), $text);
+
+		#
+		# Next, handle inline images:  ![alt text](url "optional title")
+		# Don't forget: encode * and _
+		#
+		$text = preg_replace_callback('{
+			(				# wrap whole match in $1
+			  !\[
+				('.$this->nested_brackets_re.')		# alt text = $2
+			  \]
+			  \s?			# One optional whitespace character
+			  \(			# literal paren
+				[ \n]*
+				(?:
+					<(\S*)>	# src url = $3
+				|
+					('.$this->nested_url_parenthesis_re.')	# src url = $4
+				)
+				[ \n]*
+				(			# $5
+				  ([\'"])	# quote char = $6
+				  (.*?)		# title = $7
+				  \6		# matching quote
+				  [ \n]*
+				)?			# title is optional
+			  \)
+			)
+			}xs',
+			array(&$this, '_doImages_inline_callback'), $text);
+
+		return $text;
+	}
+	function _doImages_reference_callback($matches) {
+		$whole_match = $matches[1];
+		$alt_text    = $matches[2];
+		$link_id     = strtolower($matches[3]);
+
+		if ($link_id == "") {
+			$link_id = strtolower($alt_text); # for shortcut links like ![this][].
+		}
+
+		$alt_text = $this->encodeAttribute($alt_text);
+		if (isset($this->urls[$link_id])) {
+			$url = $this->encodeAttribute($this->urls[$link_id]);
+			$result = "<img src=\"$url\" alt=\"$alt_text\"";
+			if (isset($this->titles[$link_id])) {
+				$title = $this->titles[$link_id];
+				$title = $this->encodeAttribute($title);
+				$result .=  " title=\"$title\"";
+			}
+			$result .= $this->empty_element_suffix;
+			$result = $this->hashPart($result);
+		}
+		else {
+			# If there's no such link ID, leave intact:
+			$result = $whole_match;
+		}
+
+		return $result;
+	}
+	function _doImages_inline_callback($matches) {
+		$whole_match	= $matches[1];
+		$alt_text		= $matches[2];
+		$url			= $matches[3] == '' ? $matches[4] : $matches[3];
+		$title			=& $matches[7];
+
+		$alt_text = $this->encodeAttribute($alt_text);
+		$url = $this->encodeAttribute($url);
+		$result = "<img src=\"$url\" alt=\"$alt_text\"";
+		if (isset($title)) {
+			$title = $this->encodeAttribute($title);
+			$result .=  " title=\"$title\""; # $title already quoted
+		}
+		$result .= $this->empty_element_suffix;
+
+		return $this->hashPart($result);
+	}
+
+
+	function doHeaders($text) {
+		# Setext-style headers:
+		#	  Header 1
+		#	  ========
+		#  
+		#	  Header 2
+		#	  --------
+		#
+		$text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
+			array(&$this, '_doHeaders_callback_setext'), $text);
+
+		# atx-style headers:
+		#	# Header 1
+		#	## Header 2
+		#	## Header 2 with closing hashes ##
+		#	...
+		#	###### Header 6
+		#
+		$text = preg_replace_callback('{
+				^(\#{1,6})	# $1 = string of #\'s
+				[ ]*
+				(.+?)		# $2 = Header text
+				[ ]*
+				\#*			# optional closing #\'s (not counted)
+				\n+
+			}xm',
+			array(&$this, '_doHeaders_callback_atx'), $text);
+
+		return $text;
+	}
+	function _doHeaders_callback_setext($matches) {
+		# Terrible hack to check we haven't found an empty list item.
+		if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
+			return $matches[0];
+		
+		$level = $matches[2]{0} == '=' ? 1 : 2;
+		$block = "<h$level>".$this->runSpanGamut($matches[1])."</h$level>";
+		return "\n" . $this->hashBlock($block) . "\n\n";
+	}
+	function _doHeaders_callback_atx($matches) {
+		$level = strlen($matches[1]);
+		$block = "<h$level>".$this->runSpanGamut($matches[2])."</h$level>";
+		return "\n" . $this->hashBlock($block) . "\n\n";
+	}
+
+
+	function doLists($text) {
+	#
+	# Form HTML ordered (numbered) and unordered (bulleted) lists.
+	#
+		$less_than_tab = $this->tab_width - 1;
+
+		# Re-usable patterns to match list item bullets and number markers:
+		$marker_ul_re  = '[*+-]';
+		$marker_ol_re  = '\d+[.]';
+		$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
+
+		$markers_relist = array(
+			$marker_ul_re => $marker_ol_re,
+			$marker_ol_re => $marker_ul_re,
+			);
+
+		foreach ($markers_relist as $marker_re => $other_marker_re) {
+			# Re-usable pattern to match any entirel ul or ol list:
+			$whole_list_re = '
+				(								# $1 = whole list
+				  (								# $2
+					([ ]{0,'.$less_than_tab.'})	# $3 = number of spaces
+					('.$marker_re.')			# $4 = first list item marker
+					[ ]+
+				  )
+				  (?s:.+?)
+				  (								# $5
+					  \z
+					|
+					  \n{2,}
+					  (?=\S)
+					  (?!						# Negative lookahead for another list item marker
+						[ ]*
+						'.$marker_re.'[ ]+
+					  )
+					|
+					  (?=						# Lookahead for another kind of list
+					    \n
+						\3						# Must have the same indentation
+						'.$other_marker_re.'[ ]+
+					  )
+				  )
+				)
+			'; // mx
+			
+			# We use a different prefix before nested lists than top-level lists.
+			# See extended comment in _ProcessListItems().
+		
+			if ($this->list_level) {
+				$text = preg_replace_callback('{
+						^
+						'.$whole_list_re.'
+					}mx',
+					array(&$this, '_doLists_callback'), $text);
+			}
+			else {
+				$text = preg_replace_callback('{
+						(?:(?<=\n)\n|\A\n?) # Must eat the newline
+						'.$whole_list_re.'
+					}mx',
+					array(&$this, '_doLists_callback'), $text);
+			}
+		}
+
+		return $text;
+	}
+	function _doLists_callback($matches) {
+		# Re-usable patterns to match list item bullets and number markers:
+		$marker_ul_re  = '[*+-]';
+		$marker_ol_re  = '\d+[.]';
+		$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
+		
+		$list = $matches[1];
+		$list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
+		
+		$marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
+		
+		$list .= "\n";
+		$result = $this->processListItems($list, $marker_any_re);
+		
+		$result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
+		return "\n". $result ."\n\n";
+	}
+
+	var $list_level = 0;
+
+	function processListItems($list_str, $marker_any_re) {
+	#
+	#	Process the contents of a single ordered or unordered list, splitting it
+	#	into individual list items.
+	#
+		# The $this->list_level global keeps track of when we're inside a list.
+		# Each time we enter a list, we increment it; when we leave a list,
+		# we decrement. If it's zero, we're not in a list anymore.
+		#
+		# We do this because when we're not inside a list, we want to treat
+		# something like this:
+		#
+		#		I recommend upgrading to version
+		#		8. Oops, now this line is treated
+		#		as a sub-list.
+		#
+		# As a single paragraph, despite the fact that the second line starts
+		# with a digit-period-space sequence.
+		#
+		# Whereas when we're inside a list (or sub-list), that line will be
+		# treated as the start of a sub-list. What a kludge, huh? This is
+		# an aspect of Markdown's syntax that's hard to parse perfectly
+		# without resorting to mind-reading. Perhaps the solution is to
+		# change the syntax rules such that sub-lists must start with a
+		# starting cardinal number; e.g. "1." or "a.".
+		
+		$this->list_level++;
+
+		# trim trailing blank lines:
+		$list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
+
+		$list_str = preg_replace_callback('{
+			(\n)?							# leading line = $1
+			(^[ ]*)							# leading whitespace = $2
+			('.$marker_any_re.'				# list marker and space = $3
+				(?:[ ]+|(?=\n))	# space only required if item is not empty
+			)
+			((?s:.*?))						# list item text   = $4
+			(?:(\n+(?=\n))|\n)				# tailing blank line = $5
+			(?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n))))
+			}xm',
+			array(&$this, '_processListItems_callback'), $list_str);
+
+		$this->list_level--;
+		return $list_str;
+	}
+	function _processListItems_callback($matches) {
+		$item = $matches[4];
+		$leading_line =& $matches[1];
+		$leading_space =& $matches[2];
+		$marker_space = $matches[3];
+		$tailing_blank_line =& $matches[5];
+
+		if ($leading_line || $tailing_blank_line || 
+			preg_match('/\n{2,}/', $item))
+		{
+			# Replace marker with the appropriate whitespace indentation
+			$item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
+			$item = $this->runBlockGamut($this->outdent($item)."\n");
+		}
+		else {
+			# Recursion for sub-lists:
+			$item = $this->doLists($this->outdent($item));
+			$item = preg_replace('/\n+$/', '', $item);
+			$item = $this->runSpanGamut($item);
+		}
+
+		return "<li>" . $item . "</li>\n";
+	}
+
+
+	function doCodeBlocks($text) {
+	#
+	#	Process Markdown `<pre><code>` blocks.
+	#
+		$text = preg_replace_callback('{
+				(?:\n\n|\A\n?)
+				(	            # $1 = the code block -- one or more lines, starting with a space/tab
+				  (?>
+					[ ]{'.$this->tab_width.'}  # Lines must start with a tab or a tab-width of spaces
+					.*\n+
+				  )+
+				)
+				((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z)	# Lookahead for non-space at line-start, or end of doc
+			}xm',
+			array(&$this, '_doCodeBlocks_callback'), $text);
+
+		return $text;
+	}
+	function _doCodeBlocks_callback($matches) {
+		$codeblock = $matches[1];
+
+		$codeblock = $this->outdent($codeblock);
+		$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
+
+		# trim leading newlines and trailing newlines
+		$codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
+
+		$codeblock = "<pre><code>$codeblock\n</code></pre>";
+		return "\n\n".$this->hashBlock($codeblock)."\n\n";
+	}
+
+
+	function makeCodeSpan($code) {
+	#
+	# Create a code span markup for $code. Called from handleSpanToken.
+	#
+		$code = htmlspecialchars(trim($code), ENT_NOQUOTES);
+		return $this->hashPart("<code>$code</code>");
+	}
+
+
+	var $em_relist = array(
+		''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![.,:;]\s)',
+		'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
+		'_' => '(?<=\S|^)(?<!_)_(?!_)',
+		);
+	var $strong_relist = array(
+		''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![.,:;]\s)',
+		'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
+		'__' => '(?<=\S|^)(?<!_)__(?!_)',
+		);
+	var $em_strong_relist = array(
+		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![.,:;]\s)',
+		'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
+		'___' => '(?<=\S|^)(?<!_)___(?!_)',
+		);
+	var $em_strong_prepared_relist;
+	
+	function prepareItalicsAndBold() {
+	#
+	# Prepare regular expressions for searching emphasis tokens in any
+	# context.
+	#
+		foreach ($this->em_relist as $em => $em_re) {
+			foreach ($this->strong_relist as $strong => $strong_re) {
+				# Construct list of allowed token expressions.
+				$token_relist = array();
+				if (isset($this->em_strong_relist["$em$strong"])) {
+					$token_relist[] = $this->em_strong_relist["$em$strong"];
+				}
+				$token_relist[] = $em_re;
+				$token_relist[] = $strong_re;
+				
+				# Construct master expression from list.
+				$token_re = '{('. implode('|', $token_relist) .')}';
+				$this->em_strong_prepared_relist["$em$strong"] = $token_re;
+			}
+		}
+	}
+	
+	function doItalicsAndBold($text) {
+		$token_stack = array('');
+		$text_stack = array('');
+		$em = '';
+		$strong = '';
+		$tree_char_em = false;
+		
+		while (1) {
+			#
+			# Get prepared regular expression for seraching emphasis tokens
+			# in current context.
+			#
+			$token_re = $this->em_strong_prepared_relist["$em$strong"];
+			
+			#
+			# Each loop iteration search for the next emphasis token. 
+			# Each token is then passed to handleSpanToken.
+			#
+			$parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
+			$text_stack[0] .= $parts[0];
+			$token =& $parts[1];
+			$text =& $parts[2];
+			
+			if (empty($token)) {
+				# Reached end of text span: empty stack without emitting.
+				# any more emphasis.
+				while ($token_stack[0]) {
+					$text_stack[1] .= array_shift($token_stack);
+					$text_stack[0] .= array_shift($text_stack);
+				}
+				break;
+			}
+			
+			$token_len = strlen($token);
+			if ($tree_char_em) {
+				# Reached closing marker while inside a three-char emphasis.
+				if ($token_len == 3) {
+					# Three-char closing marker, close em and strong.
+					array_shift($token_stack);
+					$span = array_shift($text_stack);
+					$span = $this->runSpanGamut($span);
+					$span = "<strong><em>$span</em></strong>";
+					$text_stack[0] .= $this->hashPart($span);
+					$em = '';
+					$strong = '';
+				} else {
+					# Other closing marker: close one em or strong and
+					# change current token state to match the other
+					$token_stack[0] = str_repeat($token{0}, 3-$token_len);
+					$tag = $token_len == 2 ? "strong" : "em";
+					$span = $text_stack[0];
+					$span = $this->runSpanGamut($span);
+					$span = "<$tag>$span</$tag>";
+					$text_stack[0] = $this->hashPart($span);
+					$$tag = ''; # $$tag stands for $em or $strong
+				}
+				$tree_char_em = false;
+			} else if ($token_len == 3) {
+				if ($em) {
+					# Reached closing marker for both em and strong.
+					# Closing strong marker:
+					for ($i = 0; $i < 2; ++$i) {
+						$shifted_token = array_shift($token_stack);
+						$tag = strlen($shifted_token) == 2 ? "strong" : "em";
+						$span = array_shift($text_stack);
+						$span = $this->runSpanGamut($span);
+						$span = "<$tag>$span</$tag>";
+						$text_stack[0] .= $this->hashPart($span);
+						$$tag = ''; # $$tag stands for $em or $strong
+					}
+				} else {
+					# Reached opening three-char emphasis marker. Push on token 
+					# stack; will be handled by the special condition above.
+					$em = $token{0};
+					$strong = "$em$em";
+					array_unshift($token_stack, $token);
+					array_unshift($text_stack, '');
+					$tree_char_em = true;
+				}
+			} else if ($token_len == 2) {
+				if ($strong) {
+					# Unwind any dangling emphasis marker:
+					if (strlen($token_stack[0]) == 1) {
+						$text_stack[1] .= array_shift($token_stack);
+						$text_stack[0] .= array_shift($text_stack);
+					}
+					# Closing strong marker:
+					array_shift($token_stack);
+					$span = array_shift($text_stack);
+					$span = $this->runSpanGamut($span);
+					$span = "<strong>$span</strong>";
+					$text_stack[0] .= $this->hashPart($span);
+					$strong = '';
+				} else {
+					array_unshift($token_stack, $token);
+					array_unshift($text_stack, '');
+					$strong = $token;
+				}
+			} else {
+				# Here $token_len == 1
+				if ($em) {
+					if (strlen($token_stack[0]) == 1) {
+						# Closing emphasis marker:
+						array_shift($token_stack);
+						$span = array_shift($text_stack);
+						$span = $this->runSpanGamut($span);
+						$span = "<em>$span</em>";
+						$text_stack[0] .= $this->hashPart($span);
+						$em = '';
+					} else {
+						$text_stack[0] .= $token;
+					}
+				} else {
+					array_unshift($token_stack, $token);
+					array_unshift($text_stack, '');
+					$em = $token;
+				}
+			}
+		}
+		return $text_stack[0];
+	}
+
+
+	function doBlockQuotes($text) {
+		$text = preg_replace_callback('/
+			  (								# Wrap whole match in $1
+				(?>
+				  ^[ ]*>[ ]?			# ">" at the start of a line
+					.+\n					# rest of the first line
+				  (.+\n)*					# subsequent consecutive lines
+				  \n*						# blanks
+				)+
+			  )
+			/xm',
+			array(&$this, '_doBlockQuotes_callback'), $text);
+
+		return $text;
+	}
+	function _doBlockQuotes_callback($matches) {
+		$bq = $matches[1];
+		# trim one level of quoting - trim whitespace-only lines
+		$bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
+		$bq = $this->runBlockGamut($bq);		# recurse
+
+		$bq = preg_replace('/^/m', "  ", $bq);
+		# These leading spaces cause problem with <pre> content, 
+		# so we need to fix that:
+		$bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx', 
+			array(&$this, '_doBlockQuotes_callback2'), $bq);
+
+		return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
+	}
+	function _doBlockQuotes_callback2($matches) {
+		$pre = $matches[1];
+		$pre = preg_replace('/^  /m', '', $pre);
+		return $pre;
+	}
+
+
+	function formParagraphs($text) {
+	#
+	#	Params:
+	#		$text - string to process with html <p> tags
+	#
+		# Strip leading and trailing lines:
+		$text = preg_replace('/\A\n+|\n+\z/', '', $text);
+
+		$grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
+
+		#
+		# Wrap <p> tags and unhashify HTML blocks
+		#
+		foreach ($grafs as $key => $value) {
+			if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
+				# Is a paragraph.
+				$value = $this->runSpanGamut($value);
+				$value = preg_replace('/^([ ]*)/', "<p>", $value);
+				$value .= "</p>";
+				$grafs[$key] = $this->unhash($value);
+			}
+			else {
+				# Is a block.
+				# Modify elements of @grafs in-place...
+				$graf = $value;
+				$block = $this->html_hashes[$graf];
+				$graf = $block;
+//				if (preg_match('{
+//					\A
+//					(							# $1 = <div> tag
+//					  <div  \s+
+//					  [^>]*
+//					  \b
+//					  markdown\s*=\s*  ([\'"])	#	$2 = attr quote char
+//					  1
+//					  \2
+//					  [^>]*
+//					  >
+//					)
+//					(							# $3 = contents
+//					.*
+//					)
+//					(</div>)					# $4 = closing tag
+//					\z
+//					}xs', $block, $matches))
+//				{
+//					list(, $div_open, , $div_content, $div_close) = $matches;
+//
+//					# We can't call Markdown(), because that resets the hash;
+//					# that initialization code should be pulled into its own sub, though.
+//					$div_content = $this->hashHTMLBlocks($div_content);
+//					
+//					# Run document gamut methods on the content.
+//					foreach ($this->document_gamut as $method => $priority) {
+//						$div_content = $this->$method($div_content);
+//					}
+//
+//					$div_open = preg_replace(
+//						'{\smarkdown\s*=\s*([\'"]).+?\1}', '', $div_open);
+//
+//					$graf = $div_open . "\n" . $div_content . "\n" . $div_close;
+//				}
+				$grafs[$key] = $graf;
+			}
+		}
+
+		return implode("\n\n", $grafs);
+	}
+
+
+	function encodeAttribute($text) {
+	#
+	# Encode text for a double-quoted HTML attribute. This function
+	# is *not* suitable for attributes enclosed in single quotes.
+	#
+		$text = $this->encodeAmpsAndAngles($text);
+		$text = str_replace('"', '&quot;', $text);
+		return $text;
+	}
+	
+	
+	function encodeAmpsAndAngles($text) {
+	#
+	# Smart processing for ampersands and angle brackets that need to 
+	# be encoded. Valid character entities are left alone unless the
+	# no-entities mode is set.
+	#
+		if ($this->no_entities) {
+			$text = str_replace('&', '&amp;', $text);
+		} else {
+			# Ampersand-encoding based entirely on Nat Irons's Amputator
+			# MT plugin: <http://bumppo.net/projects/amputator/>
+			$text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/', 
+								'&amp;', $text);;
+		}
+		# Encode remaining <'s
+		$text = str_replace('<', '&lt;', $text);
+
+		return $text;
+	}
+
+
+	function doAutoLinks($text) {
+		$text = preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i', 
+			array(&$this, '_doAutoLinks_url_callback'), $text);
+
+		# Email addresses: <address@domain.foo>
+		$text = preg_replace_callback('{
+			<
+			(?:mailto:)?
+			(
+				(?:
+					[-!#$%&\'*+/=?^_`.{|}~\w\x80-\xFF]+
+				|
+					".*?"
+				)
+				\@
+				(?:
+					[-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
+				|
+					\[[\d.a-fA-F:]+\]	# IPv4 & IPv6
+				)
+			)
+			>
+			}xi',
+			array(&$this, '_doAutoLinks_email_callback'), $text);
+
+		return $text;
+	}
+	function _doAutoLinks_url_callback($matches) {
+		$url = $this->encodeAttribute($matches[1]);
+		$link = "<a href=\"$url\">$url</a>";
+		return $this->hashPart($link);
+	}
+	function _doAutoLinks_email_callback($matches) {
+		$address = $matches[1];
+		$link = $this->encodeEmailAddress($address);
+		return $this->hashPart($link);
+	}
+
+
+	function encodeEmailAddress($addr) {
+	#
+	#	Input: an email address, e.g. "foo@example.com"
+	#
+	#	Output: the email address as a mailto link, with each character
+	#		of the address encoded as either a decimal or hex entity, in
+	#		the hopes of foiling most address harvesting spam bots. E.g.:
+	#
+	#	  <p><a href="&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x66;o&#111;
+	#        &#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;&#101;&#46;&#x63;&#111;
+	#        &#x6d;">&#x66;o&#111;&#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;
+	#        &#101;&#46;&#x63;&#111;&#x6d;</a></p>
+	#
+	#	Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
+	#   With some optimizations by Milian Wolff.
+	#
+		$addr = "mailto:" . $addr;
+		$chars = preg_split('/(?<!^)(?!$)/', $addr);
+		$seed = (int)abs(crc32($addr) / strlen($addr)); # Deterministic seed.
+		
+		foreach ($chars as $key => $char) {
+			$ord = ord($char);
+			# Ignore non-ascii chars.
+			if ($ord < 128) {
+				$r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
+				# roughly 10% raw, 45% hex, 45% dec
+				# '@' *must* be encoded. I insist.
+				if ($r > 90 && $char != '@') /* do nothing */;
+				else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
+				else              $chars[$key] = '&#'.$ord.';';
+			}
+		}
+		
+		$addr = implode('', $chars);
+		$text = implode('', array_slice($chars, 7)); # text without `mailto:`
+		$addr = "<a href=\"$addr\">$text</a>";
+
+		return $addr;
+	}
+
+
+	function parseSpan($str) {
+	#
+	# Take the string $str and parse it into tokens, hashing embeded HTML,
+	# escaped characters and handling code spans.
+	#
+		$output = '';
+		
+		$span_re = '{
+				(
+					\\\\'.$this->escape_chars_re.'
+				|
+					(?<![`\\\\])
+					`+						# code span marker
+			'.( $this->no_markup ? '' : '
+				|
+					<!--    .*?     -->		# comment
+				|
+					<\?.*?\?> | <%.*?%>		# processing instruction
+				|
+					<[/!$]?[-a-zA-Z0-9:_]+	# regular tags
+					(?>
+						\s
+						(?>[^"\'>]+|"[^"]*"|\'[^\']*\')*
+					)?
+					>
+			').'
+				)
+				}xs';
+
+		while (1) {
+			#
+			# Each loop iteration seach for either the next tag, the next 
+			# openning code span marker, or the next escaped character. 
+			# Each token is then passed to handleSpanToken.
+			#
+			$parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
+			
+			# Create token from text preceding tag.
+			if ($parts[0] != "") {
+				$output .= $parts[0];
+			}
+			
+			# Check if we reach the end.
+			if (isset($parts[1])) {
+				$output .= $this->handleSpanToken($parts[1], $parts[2]);
+				$str = $parts[2];
+			}
+			else {
+				break;
+			}
+		}
+		
+		return $output;
+	}
+	
+	
+	function handleSpanToken($token, &$str) {
+	#
+	# Handle $token provided by parseSpan by determining its nature and 
+	# returning the corresponding value that should replace it.
+	#
+		switch ($token{0}) {
+			case "\\":
+				return $this->hashPart("&#". ord($token{1}). ";");
+			case "`":
+				# Search for end marker in remaining text.
+				if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm', 
+					$str, $matches))
+				{
+					$str = $matches[2];
+					$codespan = $this->makeCodeSpan($matches[1]);
+					return $this->hashPart($codespan);
+				}
+				return $token; // return as text since no ending marker found.
+			default:
+				return $this->hashPart($token);
+		}
+	}
+
+
+	function outdent($text) {
+	#
+	# Remove one level of line-leading tabs or spaces
+	#
+		return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
+	}
+
+
+	# String length function for detab. `_initDetab` will create a function to 
+	# hanlde UTF-8 if the default function does not exist.
+	var $utf8_strlen = 'mb_strlen';
+	
+	function detab($text) {
+	#
+	# Replace tabs with the appropriate amount of space.
+	#
+		# For each line we separate the line in blocks delemited by
+		# tab characters. Then we reconstruct every line by adding the 
+		# appropriate number of space between each blocks.
+		
+		$text = preg_replace_callback('/^.*\t.*$/m',
+			array(&$this, '_detab_callback'), $text);
+
+		return $text;
+	}
+	function _detab_callback($matches) {
+		$line = $matches[0];
+		$strlen = $this->utf8_strlen; # strlen function for UTF-8.
+		
+		# Split in blocks.
+		$blocks = explode("\t", $line);
+		# Add each blocks to the line.
+		$line = $blocks[0];
+		unset($blocks[0]); # Do not add first block twice.
+		foreach ($blocks as $block) {
+			# Calculate amount of space, insert spaces, insert block.
+			$amount = $this->tab_width - 
+				$strlen($line, 'UTF-8') % $this->tab_width;
+			$line .= str_repeat(" ", $amount) . $block;
+		}
+		return $line;
+	}
+	function _initDetab() {
+	#
+	# Check for the availability of the function in the `utf8_strlen` property
+	# (initially `mb_strlen`). If the function is not available, create a 
+	# function that will loosely count the number of UTF-8 characters with a
+	# regular expression.
+	#
+		if (function_exists($this->utf8_strlen)) return;
+		$this->utf8_strlen = create_function('$text', 'return preg_match_all(
+			"/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/", 
+			$text, $m);');
+	}
+
+
+	function unhash($text) {
+	#
+	# Swap back in all the tags hashed by _HashHTMLBlocks.
+	#
+		return preg_replace_callback('/(.)\x1A[0-9]+\1/', 
+			array(&$this, '_unhash_callback'), $text);
+	}
+	function _unhash_callback($matches) {
+		return $this->html_hashes[$matches[0]];
+	}
+
+}
diff --git a/core/vendor/dflydev/markdown/tests/bootstrap.php b/core/vendor/dflydev/markdown/tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f8f442b2f5b09b92221ac885f197228b4484d9a
--- /dev/null
+++ b/core/vendor/dflydev/markdown/tests/bootstrap.php
@@ -0,0 +1,12 @@
+<?php
+/*
+ * This file is a part of the PHP Markdown library.
+ *
+ * (c) Dragonfly Development Inc.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+$loader = require dirname(__DIR__).'/vendor/.composer/autoload.php';
+$loader->add('dflydev\\tests\\markdown', 'tests');
diff --git a/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/AbstractParserTest.php b/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/AbstractParserTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ee87b8ae7961a248b40bab859237291ae5f5c9ab
--- /dev/null
+++ b/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/AbstractParserTest.php
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ * This file is a part of the PHP Markdown library.
+ *
+ * (c) Dragonfly Development Inc.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace dflydev\tests\markdown;
+
+abstract class AbstractParserTest extends \PHPUnit_Framework_TestCase
+{
+    
+    /**
+     * Create a markdown parser.
+     * @return \dflydev\markdown\IMarkdownParser
+     */
+    abstract public function createParser();
+
+    /**
+     * Configure a Markdown parser for a specific tab width
+     * @param \dflydev\markdown\IMarkdownParser $markdownParser
+     */
+    abstract public function configureTabWidth(\dflydev\markdown\IMarkdownParser $markdownParser, $width);
+
+    /**
+     * Simple test to ensure that parser can be created and most basic of
+     * Markdown can be transformed.
+     */
+    public function testCreate()
+    {
+        $markdownParser = $this->createParser();
+        $html = $markdownParser->transformMarkdown('#Hello World');
+        $this->assertEquals("<h1>Hello World</h1>\n", $html, 'Simple H1 works');
+    }
+
+    /**
+     * Test tab width for code blocks
+     */
+    public function testTabWidth()
+    {
+        $markdownParser = $this->createParser();
+        $html = $markdownParser->transformMarkdown('    Hello World');
+        $this->assertEquals("<pre><code>Hello World\n</code></pre>\n", $html, 'Default 4 space tab code block works');
+        $this->configureTabWidth($markdownParser, 6);
+        $html = $markdownParser->transformMarkdown('    Hello World');
+        $this->assertEquals("<p>Hello World</p>\n", $html, 'Default 4 space tab code block not triggered when tab width set to 6');
+        $html = $markdownParser->transformMarkdown('      Hello World');
+        $this->assertEquals("<pre><code>Hello World\n</code></pre>\n", $html, 'Setting 6 space tab code block works');
+    }
+
+}
diff --git a/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/MarkdownExtraParserTest.php b/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/MarkdownExtraParserTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fb37c82c62726d7df086c9c8c823f7105a3e062a
--- /dev/null
+++ b/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/MarkdownExtraParserTest.php
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is a part of the PHP Markdown library.
+ *
+ * (c) Dragonfly Development Inc.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace dflydev\tests\markdown;
+
+class MarkdownExtraParserTest extends AbstractParserTest
+{
+
+    /**
+     * (non-PHPdoc)
+     * @see dflydev\tests\markdown.AbstractParserTest::createParser()
+     */
+    public function createParser()
+    {
+        return new \dflydev\markdown\MarkdownExtraParser();
+    }
+
+    /**
+     * (non-PHPdoc)
+     * @see dflydev\tests\markdown.AbstractParserTest::configureTabWidth()
+     */
+    public function configureTabWidth(\dflydev\markdown\IMarkdownParser $markdownParser, $width)
+    {
+        $markdownParser->configureMarkdownParser(\dflydev\markdown\MarkdownExtraParser::CONFIG_TAB_WIDTH, $width);
+    }
+    
+}
diff --git a/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/MarkdownParserTest.php b/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/MarkdownParserTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3445ee86e9dc5c1d99e72d6641b78b048297187
--- /dev/null
+++ b/core/vendor/dflydev/markdown/tests/dflydev/tests/markdown/MarkdownParserTest.php
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is a part of the PHP Markdown library.
+ *
+ * (c) Dragonfly Development Inc.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace dflydev\tests\markdown;
+
+class MarkdownParserTest extends AbstractParserTest
+{
+
+    /**
+     * (non-PHPdoc)
+     * @see dflydev\tests\markdown.AbstractParserTest::createParser()
+     */
+    public function createParser()
+    {
+        return new \dflydev\markdown\MarkdownParser();
+    }
+    
+    /**
+     * (non-PHPdoc)
+     * @see dflydev\tests\markdown.AbstractParserTest::configureTabWidth()
+     */
+    public function configureTabWidth(\dflydev\markdown\IMarkdownParser $markdownParser, $width)
+    {
+        $markdownParser->configureMarkdownParser(\dflydev\markdown\MarkdownParser::CONFIG_TAB_WIDTH, $width);
+    }
+
+}
diff --git a/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php
index d06fe663c26964be98aba634890638e246eada84..a7537cb05bbbf208980eb90a8e122b393d153336 100644
--- a/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php
+++ b/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php
@@ -184,14 +184,4 @@ public static function optimizerPlusSaveComments()
             "You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1."
         );
     }
-
-    /**
-     * @return AnnotationException
-     */
-    public static function optimizerPlusLoadComments()
-    {
-        return new self(
-            "You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1."
-        );
-    }
 }
diff --git a/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php
index d55996067b01da2189e481bbc9b5a33748b756d9..c6645a24c84a1d274466687801649f59210eec45 100644
--- a/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php
+++ b/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php
@@ -162,15 +162,6 @@ public function __construct()
             throw AnnotationException::optimizerPlusSaveComments();
         }
 
-
-        if (extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.load_comments') === "0" || ini_get('opcache.load_comments') === "0")) {
-            throw AnnotationException::optimizerPlusLoadComments();
-        }
-
-        if (extension_loaded('Zend OPcache') && ini_get('opcache.load_comments') == 0) {
-            throw AnnotationException::optimizerPlusLoadComments();
-        }
-
         AnnotationRegistry::registerFile(__DIR__ . '/Annotation/IgnoreAnnotation.php');
 
         $this->parser    = new DocParser;
diff --git a/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php
index db668460ee14e06ff41748b17ae8aa44ceae5979..c245fa7bb627ec687df477760c8a3c183a93a2e6 100644
--- a/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php
+++ b/core/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php
@@ -354,8 +354,6 @@ private function findInitialTokenPosition($input)
 
             $pos++;
         }
-
-        return null;
     }
 
     /**
@@ -845,7 +843,16 @@ private function MethodCall()
      */
     private function Values()
     {
-        $values = array($this->Value());
+        $values = array();
+
+        // Handle the case of a single array as value, i.e. @Foo({....})
+        if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) {
+            $values['value'] = $this->Value();
+
+            return $values;
+        }
+
+        $values[] = $this->Value();
 
         while ($this->lexer->isNextToken(DocLexer::T_COMMA)) {
             $this->match(DocLexer::T_COMMA);
diff --git a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php
index 7d670a99e25066ee4369a5772ce152588b378835..a7191d3a75c40910798a3054fb23d79ff1b7b331 100644
--- a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php
+++ b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php
@@ -2,6 +2,7 @@
 
 namespace Doctrine\Tests\Common\Annotations;
 
+use Doctrine\Common\Annotations\Annotation\IgnoreAnnotation;
 use Doctrine\Common\Annotations\DocParser;
 use Doctrine\Common\Annotations\AnnotationRegistry;
 use Doctrine\Common\Annotations\Annotation\Target;
@@ -97,28 +98,6 @@ public function testBasicAnnotations()
         $this->assertNull($annot->value);
    }
 
-    public function testDefaultValueAnnotations()
-    {
-        $parser = $this->createTestParser();
-
-        // Array as first value
-        $result = $parser->parse('@Name({"key1"="value1"})');
-        $annot = $result[0];
-
-        $this->assertTrue($annot instanceof Name);
-        $this->assertTrue(is_array($annot->value));
-        $this->assertEquals('value1', $annot->value['key1']);
-
-        // Array as first value and additional values
-        $result = $parser->parse('@Name({"key1"="value1"}, foo="bar")');
-        $annot = $result[0];
-
-        $this->assertTrue($annot instanceof Name);
-        $this->assertTrue(is_array($annot->value));
-        $this->assertEquals('value1', $annot->value['key1']);
-        $this->assertEquals('bar', $annot->foo);
-    }
-
     public function testNamespacedAnnotations()
     {
         $parser = new DocParser;
diff --git a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithValidAnnotationTarget.php b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithValidAnnotationTarget.php
index 9011622dbc28df260a0803c9d7aff9e62a1dde66..ada78382c036248ce48575d9a32b921b8d82bb65 100644
--- a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithValidAnnotationTarget.php
+++ b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithValidAnnotationTarget.php
@@ -5,6 +5,7 @@
 use Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetClass;
 use Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll;
 use Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetPropertyMethod;
+use Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetNestedAnnotation;
 
 /**
  * @AnnotationTargetClass("Some data")
@@ -37,4 +38,4 @@ public function someFunction()
      */
     public $nested;
 
-}
+}
\ No newline at end of file
diff --git a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/EqualNamespacesPerFileWithClassAsLast.php b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/EqualNamespacesPerFileWithClassAsLast.php
index af6d897dd8b93d07255ce4aa9b2c0f561d67e251..87f1dbf57538fdde49146c3ca39c18e4864a12b3 100644
--- a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/EqualNamespacesPerFileWithClassAsLast.php
+++ b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/EqualNamespacesPerFileWithClassAsLast.php
@@ -9,4 +9,4 @@
 use Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Route;
 use Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Template;
 
-class EqualNamespacesPerFileWithClassAsLast {}
+class EqualNamespacesPerFileWithClassAsLast {}
\ No newline at end of file
diff --git a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/NamespacedSingleClassLOC1000.php b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/NamespacedSingleClassLOC1000.php
index ff04122f259ee60ea6b04c33f9334e5010f60717..5e16dd031829b11a52e9e1d3c198b381f2aec8ed 100644
--- a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/NamespacedSingleClassLOC1000.php
+++ b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/NamespacedSingleClassLOC1000.php
@@ -2,6 +2,10 @@
 
 namespace Doctrine\Tests\Common\Annotations\Fixtures;
 
+use ReflectionClass, ReflectionProperty, ReflectionMethod;
+use Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Secure;
+use Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Route;
+
 class NamespacedSingleClassLOC1000
 {
     const TEST1 = 1234567890;
@@ -1002,4 +1006,4 @@ public function test39()
 
         return $val;
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php
index 5e163b4299d77332d2950c522d868e192201ad47..134adbc12d9131a37c7728c3b4c5bc0f7bf31b17 100644
--- a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php
+++ b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php
@@ -1,5 +1,8 @@
 <?php
 
+use Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Secure;
+use Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Route;
+
 class SingleClassLOC1000
 {
     const TEST1 = 1234567890;
@@ -1000,4 +1003,4 @@ public function test39()
 
         return $val;
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/TestInit.php b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/TestInit.php
index e433ae1872675daf942d9636aa6d5cfc48828605..07d74e6780a98673716e47b9288a86e19f24211d 100644
--- a/core/vendor/doctrine/annotations/tests/Doctrine/Tests/TestInit.php
+++ b/core/vendor/doctrine/annotations/tests/Doctrine/Tests/TestInit.php
@@ -2,6 +2,8 @@
 /*
  * This file bootstraps the test environment.
  */
+namespace Doctrine\Tests;
+
 error_reporting(E_ALL | E_STRICT);
 
 // register silently failing autoloader
diff --git a/core/vendor/doctrine/cache/.coveralls.yml b/core/vendor/doctrine/cache/.coveralls.yml
deleted file mode 100644
index 0c082336063962b929699aee563aa668c8f46604..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/.coveralls.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-# for php-coveralls
-service_name: travis-ci
-src_dir: lib
-coverage_clover: build/logs/clover.xml
diff --git a/core/vendor/doctrine/cache/.gitignore b/core/vendor/doctrine/cache/.gitignore
index ca2302312b4be0b1cd665ff506436a2b8bce1d0d..48b8bf9072d8716346ec810e5a1808305c97d50f 100644
--- a/core/vendor/doctrine/cache/.gitignore
+++ b/core/vendor/doctrine/cache/.gitignore
@@ -1,4 +1 @@
 vendor/
-build/
-phpunit.xml
-composer.lock
\ No newline at end of file
diff --git a/core/vendor/doctrine/cache/.travis.yml b/core/vendor/doctrine/cache/.travis.yml
index 28ec9b9b095e125255ef7f1c4bf5278ee4a9564c..478e5d65d2e53aff1bd7aef68e160d9195d35e14 100644
--- a/core/vendor/doctrine/cache/.travis.yml
+++ b/core/vendor/doctrine/cache/.travis.yml
@@ -3,29 +3,6 @@ language: php
 php:
   - 5.3
   - 5.4
-  - 5.5
-  - 5.6
-  - hhvm
-
-services:
-    - riak
-    - mongodb
-    - memcached
-    - redis-server
 
 before_script:
-    - sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then pecl install riak-beta; fi"
-    - sh -c "if [[ $TRAVIS_PHP_VERSION != 'hhvm' && `php-config --vernum` -ge 50500 ]] ; then pecl config-set preferred_state beta; printf "yes\n" | pecl install apcu ; else echo 'extension="apc.so"' >> ./tests/travis/php.ini ;fi"
-    - composer self-update
     - composer --prefer-source --dev install
-    - sh -c "if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then phpenv config-add ./tests/travis/php.ini; fi"
-
-script:
-    - ./vendor/bin/phpunit -c ./tests/travis/phpunit.travis.xml -v
-
-after_script:
-    - php vendor/bin/coveralls -v
-
-matrix:
-  allow_failures:
-    - php: hhvm
diff --git a/core/vendor/doctrine/cache/README.md b/core/vendor/doctrine/cache/README.md
index 94f80a30ee959b10151b0811763896847ae1393a..68a10873078a8bdc61f7200f8fe6aa5c21bc40ed 100644
--- a/core/vendor/doctrine/cache/README.md
+++ b/core/vendor/doctrine/cache/README.md
@@ -1,14 +1,3 @@
 # Doctrine Cache
 
-Master: [![Build Status](https://secure.travis-ci.org/doctrine/cache.png?branch=master)](http://travis-ci.org/doctrine/cache) [![Coverage Status](https://coveralls.io/repos/doctrine/cache/badge.png?branch=master)](https://coveralls.io/r/doctrine/cache?branch=master)
-
-[![Latest Stable Version](https://poser.pugx.org/doctrine/cache/v/stable.png)](https://packagist.org/packages/doctrine/cache) [![Total Downloads](https://poser.pugx.org/doctrine/cache/downloads.png)](https://packagist.org/packages/doctrine/cache)
-
 Cache component extracted from the Doctrine Common project.
-
-## Changelog
-
-### v1.2
-
-* Added support for MongoDB as Cache Provider
-* Fix namespace version reset
diff --git a/core/vendor/doctrine/cache/build.properties b/core/vendor/doctrine/cache/build.properties
deleted file mode 100644
index 2d98c360aae2c117551ed77f376962f5a1597f37..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/build.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# Version class and file
-project.version_class = Doctrine\\Common\\Cache\\Version
-project.version_file = lib/Doctrine/Common/Cache/Version.php
diff --git a/core/vendor/doctrine/cache/build.xml b/core/vendor/doctrine/cache/build.xml
deleted file mode 100644
index a7c52e3cf3c047d3aecf8e6ae5cb8ffbcb65b626..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/build.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0"?>
-<project name="DoctrineCommonCache" default="build" basedir=".">
-    <property file="build.properties" />
-
-    <target name="php">
-        <exec executable="which" outputproperty="php_executable">
-            <arg value="php" />
-        </exec>
-    </target>
-
-    <target name="prepare">
-        <mkdir dir="build" />
-    </target>
-
-    <target name="build" depends="check-git-checkout-clean,prepare,php,composer">
-        <exec executable="${php_executable}">
-            <arg value="build/composer.phar" />
-            <arg value="archive" />
-            <arg value="--dir=build" />
-        </exec>
-    </target>
-
-    <target name="composer" depends="php,composer-check,composer-download">
-        <exec executable="${php_executable}">
-            <arg value="build/composer.phar" />
-            <arg value="install" />
-        </exec>
-    </target>
-
-    <target name="composer-check" depends="prepare">
-        <available file="build/composer.phar" property="composer.present"/>
-    </target>
-
-    <target name="composer-download" unless="composer.present">
-        <exec executable="wget">
-            <arg value="-Obuild/composer.phar" />
-            <arg value="http://getcomposer.org/composer.phar" />
-        </exec>
-    </target>
-
-    <target name="make-release" depends="check-git-checkout-clean,prepare,php">
-        <replace file="${project.version_file}" token="-DEV" value="" failOnNoReplacements="true" />
-        <exec executable="git" failonerror="true" outputproperty="current_git_branch">
-            <arg value="rev-parse" />
-            <arg value="--abbrev-ref" />
-            <arg value="HEAD" />
-        </exec>
-        <exec executable="${php_executable}" outputproperty="doctrine.current_version" failonerror="true">
-            <arg value="-r" />
-            <arg value="require_once '${project.version_file}';echo ${project.version_class}::VERSION;" />
-        </exec>
-        <exec executable="${php_executable}" outputproperty="doctrine.next_version" failonerror="true">
-            <arg value="-r" />
-            <arg value="$parts = explode('.', str_ireplace(array('-DEV', '-ALPHA', '-BETA'), '', '${doctrine.current_version}'));
-                if (count($parts) != 3) {
-                    throw new \InvalidArgumentException('Version is assumed in format x.y.z, ${doctrine.current_version} given');
-                }
-                if ('${current_git_branch}' === 'master') {
-                    $parts[1]++;
-                } else {
-                    $parts[2]++;
-                }
-                echo implode('.', $parts);
-            " />
-        </exec>
-
-        <git-commit file="${project.version_file}" message="Release ${doctrine.current_version}" />
-        <git-tag version="${doctrine.current_version}" />
-        <replace file="${project.version_file}" token="${doctrine.current_version}" value="${doctrine.next_version}-DEV" />
-        <git-commit file="${project.version_file}" message="Bump version to ${doctrine.next_version}" />
-    </target>
-
-    <target name="check-git-checkout-clean">
-        <exec executable="git" failonerror="true">
-            <arg value="diff-index" />
-            <arg value="--quiet" />
-            <arg value="HEAD" />
-        </exec>
-    </target>
-
-    <macrodef name="git-commit">
-        <attribute name="file" default="NOT SET"/>
-        <attribute name="message" default="NOT SET"/>
-
-        <sequential>
-            <exec executable="git">
-                <arg value="add" />
-                <arg value="@{file}" />
-            </exec>
-            <exec executable="git">
-                <arg value="commit" />
-                <arg value="-m" />
-                <arg value="@{message}" />
-            </exec>
-        </sequential>
-    </macrodef>
-
-    <macrodef name="git-tag">
-        <attribute name="version" default="NOT SET" />
-
-        <sequential>
-            <exec executable="git">
-                <arg value="tag" />
-                <arg value="-m" />
-                <arg value="v@{version}" />
-                <arg value="v@{version}" />
-            </exec>
-        </sequential>
-    </macrodef>
-</project>
diff --git a/core/vendor/doctrine/cache/composer.json b/core/vendor/doctrine/cache/composer.json
index 25b9de8f5309e22884db3cac88c726b6dbee5f29..5c907c9186da0d49c011d2c45e796ca36eb80c72 100644
--- a/core/vendor/doctrine/cache/composer.json
+++ b/core/vendor/doctrine/cache/composer.json
@@ -15,19 +15,7 @@
     "require": {
         "php": ">=5.3.2"
     },
-    "require-dev": {
-        "phpunit/phpunit":         ">=3.7",
-        "satooshi/php-coveralls":  "~0.6"
-    },
-    "conflict": {
-        "doctrine/common": ">2.2,<2.4"
-    },
     "autoload": {
         "psr-0": { "Doctrine\\Common\\Cache\\": "lib/" }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.4.x-dev"
-        }
     }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ApcCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ApcCache.php
index 1f19db675b20b47eb0c7815633247bb9a07c8451..2d0cd23afdd2b72bbd8c34c957e101d8b32c26ad 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ApcCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ApcCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -22,13 +23,14 @@
 /**
  * APC cache provider.
  *
- * @link   www.doctrine-project.org
- * @since  2.0
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author David Abdemoulaie <dave@hobodave.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.0
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  David Abdemoulaie <dave@hobodave.com>
  */
 class ApcCache extends CacheProvider
 {
@@ -80,19 +82,12 @@ protected function doGetStats()
         $info = apc_cache_info();
         $sma  = apc_sma_info();
 
-        // @TODO - Temporary fix @see https://github.com/krakjoe/apcu/pull/42
-        if (PHP_VERSION_ID >= 50500) {
-            $info['num_hits']   = isset($info['num_hits'])   ? $info['num_hits']   : $info['nhits'];
-            $info['num_misses'] = isset($info['num_misses']) ? $info['num_misses'] : $info['nmisses'];
-            $info['start_time'] = isset($info['start_time']) ? $info['start_time'] : $info['stime'];
-        }
-
         return array(
-            Cache::STATS_HITS             => $info['num_hits'],
-            Cache::STATS_MISSES           => $info['num_misses'],
-            Cache::STATS_UPTIME           => $info['start_time'],
-            Cache::STATS_MEMORY_USAGE     => $info['mem_size'],
-            Cache::STATS_MEMORY_AVAILABLE => $sma['avail_mem'],
+            Cache::STATS_HITS              => $info['num_hits'],
+            Cache::STATS_MISSES            => $info['num_misses'],
+            Cache::STATS_UPTIME            => $info['start_time'],
+            Cache::STATS_MEMORY_USAGE      => $info['mem_size'],
+            Cache::STATS_MEMORY_AVAILIABLE => $sma['avail_mem'],
         );
     }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ArrayCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ArrayCache.php
index e8243775cd06035bea058194cc8e884bf38a65db..a7a70aad51ce7c781e7365d72fc5014d15804543 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ArrayCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ArrayCache.php
@@ -1,5 +1,7 @@
 <?php
 /*
+ *  $Id$
+ *
  * 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
@@ -22,13 +24,14 @@
 /**
  * Array cache driver.
  *
- * @link   www.doctrine-project.org
- * @since  2.0
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author David Abdemoulaie <dave@hobodave.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.0
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  David Abdemoulaie <dave@hobodave.com>
  */
 class ArrayCache extends CacheProvider
 {
@@ -42,7 +45,7 @@ class ArrayCache extends CacheProvider
      */
     protected function doFetch($id)
     {
-        return $this->doContains($id) ? $this->data[$id] : false;
+        return (isset($this->data[$id])) ? $this->data[$id] : false;
     }
 
     /**
@@ -50,7 +53,7 @@ protected function doFetch($id)
      */
     protected function doContains($id)
     {
-        return isset($this->data[$id]) || array_key_exists($id, $this->data);
+        return isset($this->data[$id]);
     }
 
     /**
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php
index 0785f263b7ab9df958952cbeb04ef07668e1240e..d4e86f4739aac99c5fc232c7ecbaadcb486aed6b 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php
@@ -1,5 +1,7 @@
 <?php
 /*
+ *  $Id$
+ *
  * 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
@@ -22,42 +24,35 @@
 /**
  * Interface for cache drivers.
  *
- * @link   www.doctrine-project.org
- * @since  2.0
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.0
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  Fabio B. Silva <fabio.bat.silva@gmail.com>
  */
 interface Cache
 {
-    const STATS_HITS             = 'hits';
-    const STATS_MISSES           = 'misses';
-    const STATS_UPTIME           = 'uptime';
-    const STATS_MEMORY_USAGE     = 'memory_usage';
-    const STATS_MEMORY_AVAILABLE = 'memory_available';
-    /**
-     * Only for backward compatibility (may be removed in next major release)
-     *
-     * @deprecated
-     */
-    const STATS_MEMORY_AVAILIABLE = 'memory_available';
+    const STATS_HITS    = 'hits';
+    const STATS_MISSES  = 'misses';
+    const STATS_UPTIME  = 'uptime';
+    const STATS_MEMORY_USAGE        = 'memory_usage';
+    const STATS_MEMORY_AVAILIABLE   = 'memory_available';
 
     /**
      * Fetches an entry from the cache.
      *
-     * @param string $id The id of the cache entry to fetch.
-     *
+     * @param string $id cache id The id of the cache entry to fetch.
      * @return mixed The cached data or FALSE, if no cache entry exists for the given id.
      */
     function fetch($id);
 
     /**
-     * Tests if an entry exists in the cache.
-     *
-     * @param string $id The cache id of the entry to check for.
+     * Test if an entry exists in the cache.
      *
+     * @param string $id cache id The cache id of the entry to check for.
      * @return boolean TRUE if a cache entry exists for the given cache id, FALSE otherwise.
      */
     function contains($id);
@@ -65,11 +60,9 @@ function contains($id);
     /**
      * Puts data into the cache.
      *
-     * @param string $id       The cache id.
-     * @param mixed  $data     The cache entry/data.
-     * @param int    $lifeTime The cache lifetime.
-     *                         If != 0, sets a specific lifetime for this cache entry (0 => infinite lifeTime).
-     *
+     * @param string $id The cache id.
+     * @param mixed $data The cache entry/data.
+     * @param int $lifeTime The lifetime. If != 0, sets a specific lifetime for this cache entry (0 => infinite lifeTime).
      * @return boolean TRUE if the entry was successfully stored in the cache, FALSE otherwise.
      */
     function save($id, $data, $lifeTime = 0);
@@ -77,14 +70,13 @@ function save($id, $data, $lifeTime = 0);
     /**
      * Deletes a cache entry.
      *
-     * @param string $id The cache id.
-     *
+     * @param string $id cache id
      * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise.
      */
     function delete($id);
 
     /**
-     * Retrieves cached information from the data store.
+     * Retrieves cached information from data store
      *
      * The server's statistics array has the following values:
      *
@@ -103,9 +95,8 @@ function delete($id);
      * - <b>memory_available</b>
      * Memory allowed to use for storage.
      *
-     * @since 2.2
-     *
-     * @return array|null An associative array with server's statistics if available, NULL otherwise.
+     * @since   2.2
+     * @return  array Associative array with server's statistics if available, NULL otherwise.
      */
     function getStats();
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php
index f896bc70823b216a56d0620c8547c1c0e2b430dd..4221a62e593078109ae2edb8344d8464ab556b63 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -22,46 +23,40 @@
 /**
  * Base class for cache provider implementations.
  *
- * @since  2.2
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
+ * @since   2.2
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  Fabio B. Silva <fabio.bat.silva@gmail.com>
  */
 abstract class CacheProvider implements Cache
 {
     const DOCTRINE_NAMESPACE_CACHEKEY = 'DoctrineNamespaceCacheKey[%s]';
 
     /**
-     * The namespace to prefix all cache ids with.
-     *
-     * @var string
+     * @var string The namespace to prefix all cache ids with
      */
     private $namespace = '';
 
     /**
-     * The namespace version.
-     *
-     * @var integer|null
+     * @var string The namespace version
      */
     private $namespaceVersion;
 
     /**
-     * Sets the namespace to prefix all cache ids with.
+     * Set the namespace to prefix all cache ids with.
      *
      * @param string $namespace
-     *
      * @return void
      */
     public function setNamespace($namespace)
     {
-        $this->namespace        = (string) $namespace;
-        $this->namespaceVersion = null;
+        $this->namespace = (string) $namespace;
     }
 
     /**
-     * Retrieves the namespace that prefixes all cache ids.
+     * Retrieve the namespace that prefixes all cache ids.
      *
      * @return string
      */
@@ -111,7 +106,7 @@ public function getStats()
     }
 
     /**
-     * Flushes all cache entries.
+     * Deletes all cache entries.
      *
      * @return boolean TRUE if the cache entries were successfully flushed, FALSE otherwise.
      */
@@ -121,7 +116,7 @@ public function flushAll()
     }
 
     /**
-     * Deletes all cache entries.
+     * Delete all cache entries.
      *
      * @return boolean TRUE if the cache entries were successfully deleted, FALSE otherwise.
      */
@@ -136,11 +131,10 @@ public function deleteAll()
     }
 
     /**
-     * Prefixes the passed id with the configured namespace value.
+     * Prefix the passed id with the configured namespace value
      *
-     * @param string $id The id to namespace.
-     *
-     * @return string The namespaced id.
+     * @param string $id  The id to namespace
+     * @return string $id The namespaced id
      */
     private function getNamespacedId($id)
     {
@@ -150,9 +144,9 @@ private function getNamespacedId($id)
     }
 
     /**
-     * Returns the namespace cache key.
+     * Namespace cache key
      *
-     * @return string
+     * @return string $namespaceCacheKey
      */
     private function getNamespaceCacheKey()
     {
@@ -160,9 +154,9 @@ private function getNamespaceCacheKey()
     }
 
     /**
-     * Returns the namespace version.
+     * Namespace version
      *
-     * @return integer
+     * @return string $namespaceVersion
      */
     private function getNamespaceVersion()
     {
@@ -187,17 +181,15 @@ private function getNamespaceVersion()
     /**
      * Fetches an entry from the cache.
      *
-     * @param string $id The id of the cache entry to fetch.
-     *
-     * @return string|boolean The cached data or FALSE, if no cache entry exists for the given id.
+     * @param string $id cache id The id of the cache entry to fetch.
+     * @return string The cached data or FALSE, if no cache entry exists for the given id.
      */
     abstract protected function doFetch($id);
 
     /**
-     * Tests if an entry exists in the cache.
-     *
-     * @param string $id The cache id of the entry to check for.
+     * Test if an entry exists in the cache.
      *
+     * @param string $id cache id The cache id of the entry to check for.
      * @return boolean TRUE if a cache entry exists for the given cache id, FALSE otherwise.
      */
     abstract protected function doContains($id);
@@ -205,37 +197,35 @@ private function getNamespaceVersion()
     /**
      * Puts data into the cache.
      *
-     * @param string $id       The cache id.
-     * @param string $data     The cache entry/data.
-     * @param int    $lifeTime The lifetime. If != 0, sets a specific lifetime for this
-     *                           cache entry (0 => infinite lifeTime).
+     * @param string $id The cache id.
+     * @param string $data The cache entry/data.
+     * @param bool|int $lifeTime The lifetime. If != false, sets a specific lifetime for this
+     *                           cache entry (null => infinite lifeTime).
      *
      * @return boolean TRUE if the entry was successfully stored in the cache, FALSE otherwise.
      */
-    abstract protected function doSave($id, $data, $lifeTime = 0);
+    abstract protected function doSave($id, $data, $lifeTime = false);
 
     /**
      * Deletes a cache entry.
      *
-     * @param string $id The cache id.
-     *
+     * @param string $id cache id
      * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise.
      */
     abstract protected function doDelete($id);
 
     /**
-     * Flushes all cache entries.
+     * Deletes all cache entries.
      *
      * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise.
      */
     abstract protected function doFlush();
 
-    /**
-     * Retrieves cached information from the data store.
-     *
-     * @since 2.2
+     /**
+     * Retrieves cached information from data store
      *
-     * @return array|null An associative array with server's statistics if available, NULL otherwise.
+     * @since   2.2
+     * @return  array An associative array with server's statistics if available, NULL otherwise.
      */
     abstract protected function doGetStats();
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CouchbaseCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CouchbaseCache.php
index c21691df96290b96eaa77e9c0faab5646c228a6a..f0e5f9072aca14bca11cc59df3a05e25d34d3968 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CouchbaseCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CouchbaseCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -24,14 +25,16 @@
 /**
  * Couchbase cache provider.
  *
- * @link   www.doctrine-project.org
- * @since  2.4
- * @author Michael Nitschinger <michael@nitschinger.at>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.4
+ * @author  Michael Nitschinger <michael@nitschinger.at>
  */
 class CouchbaseCache extends CacheProvider
 {
+
     /**
-     * @var Couchbase|null
+     * @var Couchbase
      */
     private $couchbase;
 
@@ -39,8 +42,6 @@ class CouchbaseCache extends CacheProvider
      * Sets the Couchbase instance to use.
      *
      * @param Couchbase $couchbase
-     *
-     * @return void
      */
     public function setCouchbase(Couchbase $couchbase)
     {
@@ -50,7 +51,7 @@ public function setCouchbase(Couchbase $couchbase)
     /**
      * Gets the Couchbase instance used by the cache.
      *
-     * @return Couchbase|null
+     * @return Couchbase
      */
     public function getCouchbase()
     {
@@ -114,8 +115,9 @@ protected function doGetStats()
             Cache::STATS_HITS   => $stats['get_hits'],
             Cache::STATS_MISSES => $stats['get_misses'],
             Cache::STATS_UPTIME => $stats['uptime'],
-            Cache::STATS_MEMORY_USAGE     => $stats['bytes'],
-            Cache::STATS_MEMORY_AVAILABLE => $stats['limit_maxbytes'],
+            Cache::STATS_MEMORY_USAGE       => $stats['bytes'],
+            Cache::STATS_MEMORY_AVAILIABLE  => $stats['limit_maxbytes'],
         );
     }
+
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php
index d91d0bc6d6aa47218b2f5d3f0e9bcdf2f4c23e34..da650b4c6e6b47faf62a49fc6a8465c8160d51f0 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -22,30 +23,26 @@
 /**
  * Base file cache driver.
  *
- * @since  2.3
- * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
+ * @since   2.3
+ * @author  Fabio B. Silva <fabio.bat.silva@gmail.com>
  */
 abstract class FileCache extends CacheProvider
 {
     /**
-     * The cache directory.
-     *
-     * @var string
+     * @var string Cache directory.
      */
     protected $directory;
 
     /**
-     * The cache file extension.
-     *
-     * @var string|null
+     * @var string Cache file extension.
      */
     protected $extension;
 
     /**
-     * Constructor.
+     * Constructor
      *
-     * @param string      $directory The cache directory.
-     * @param string|null $extension The cache file extension.
+     * @param string $directory Cache directory.
+     * @param string $directory Cache file extension.
      *
      * @throws \InvalidArgumentException
      */
@@ -71,7 +68,7 @@ public function __construct($directory, $extension = null)
 
     /**
      * Gets the cache directory.
-     *
+     * 
      * @return string
      */
     public function getDirectory()
@@ -81,8 +78,8 @@ public function getDirectory()
 
     /**
      * Gets the cache file extension.
-     *
-     * @return string|null
+     * 
+     * @return string
      */
     public function getExtension()
     {
@@ -90,16 +87,12 @@ public function getExtension()
     }
 
     /**
-     * @param string $id
-     *
      * @return string
      */
     protected function getFilename($id)
     {
-        $hash = hash('sha256', $id);
-        $path = implode(str_split($hash, 16), DIRECTORY_SEPARATOR);
+        $path = implode(str_split(md5($id), 12), DIRECTORY_SEPARATOR);
         $path = $this->directory . DIRECTORY_SEPARATOR . $path;
-        $id   = preg_replace('@[\\\/:"*?<>|]+@', '', $id);
 
         return $path . DIRECTORY_SEPARATOR . $id . $this->extension;
     }
@@ -117,7 +110,12 @@ protected function doDelete($id)
      */
     protected function doFlush()
     {
-        foreach ($this->getIterator() as $name => $file) {
+        $pattern  = '/^.+\\' . $this->extension . '$/i';
+        $iterator = new \RecursiveDirectoryIterator($this->directory);
+        $iterator = new \RecursiveIteratorIterator($iterator);
+        $iterator = new \RegexIterator($iterator, $pattern);
+
+        foreach ($iterator as $name => $file) {
             @unlink($name);
         }
 
@@ -129,30 +127,6 @@ protected function doFlush()
      */
     protected function doGetStats()
     {
-        $usage = 0;
-        foreach ($this->getIterator() as $file) {
-            $usage += $file->getSize();
-        }
-
-        $free = disk_free_space($this->directory);
-
-        return array(
-            Cache::STATS_HITS               => null,
-            Cache::STATS_MISSES             => null,
-            Cache::STATS_UPTIME             => null,
-            Cache::STATS_MEMORY_USAGE       => $usage,
-            Cache::STATS_MEMORY_AVAILABLE   => $free,
-        );
-    }
-
-    /**
-     * @return \Iterator
-     */
-    private function getIterator()
-    {
-        $pattern = '/^.+\\' . $this->extension . '$/i';
-        $iterator = new \RecursiveDirectoryIterator($this->directory);
-        $iterator = new \RecursiveIteratorIterator($iterator);
-        return new \RegexIterator($iterator, $pattern);
+        return null;
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php
index 07eda8e87423a465cafcecfc816f0d227dddca20..a431438e2f5d72f13bd08a7c4d4c726085836b42 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -22,8 +23,8 @@
 /**
  * Filesystem cache driver.
  *
- * @since  2.3
- * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
+ * @since   2.3
+ * @author  Fabio B. Silva <fabio.bat.silva@gmail.com>
  */
 class FilesystemCache extends FileCache
 {
@@ -105,21 +106,9 @@ protected function doSave($id, $data, $lifeTime = 0)
         $filepath   = pathinfo($filename, PATHINFO_DIRNAME);
 
         if ( ! is_dir($filepath)) {
-            if (false === @mkdir($filepath, 0777, true) && !is_dir($filepath)) {
-                return false;
-            }
-        } elseif ( ! is_writable($filepath)) {
-            return false;
-        }
-
-        $tmpFile = tempnam($filepath, basename($filename));
-
-        if ((file_put_contents($tmpFile, $lifeTime . PHP_EOL . $data) !== false) && @rename($tmpFile, $filename)) {
-            @chmod($filename, 0666 & ~umask());
-
-            return true;
+            mkdir($filepath, 0777, true);
         }
 
-        return false;
+        return file_put_contents($filename, $lifeTime . PHP_EOL . $data);
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache.php
index f839a6591832a485180d0cd3ada01253c6a9b495..5687b965f1d5f3ad1cdbabea38d53e8a460fa2ba 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -24,18 +25,19 @@
 /**
  * Memcache cache provider.
  *
- * @link   www.doctrine-project.org
- * @since  2.0
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author David Abdemoulaie <dave@hobodave.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.0
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  David Abdemoulaie <dave@hobodave.com>
  */
 class MemcacheCache extends CacheProvider
 {
     /**
-     * @var Memcache|null
+     * @var Memcache
      */
     private $memcache;
 
@@ -43,8 +45,6 @@ class MemcacheCache extends CacheProvider
      * Sets the memcache instance to use.
      *
      * @param Memcache $memcache
-     *
-     * @return void
      */
     public function setMemcache(Memcache $memcache)
     {
@@ -54,7 +54,7 @@ public function setMemcache(Memcache $memcache)
     /**
      * Gets the memcache instance used by the cache.
      *
-     * @return Memcache|null
+     * @return Memcache
      */
     public function getMemcache()
     {
@@ -114,8 +114,8 @@ protected function doGetStats()
             Cache::STATS_HITS   => $stats['get_hits'],
             Cache::STATS_MISSES => $stats['get_misses'],
             Cache::STATS_UPTIME => $stats['uptime'],
-            Cache::STATS_MEMORY_USAGE     => $stats['bytes'],
-            Cache::STATS_MEMORY_AVAILABLE => $stats['limit_maxbytes'],
+            Cache::STATS_MEMORY_USAGE       => $stats['bytes'],
+            Cache::STATS_MEMORY_AVAILIABLE  => $stats['limit_maxbytes'],
         );
     }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcachedCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcachedCache.php
index f7e5500a1c949030f3b4bf410b45f4df3dbe01e1..75f1345550affbdd9c4f2f3486ed7759d88d8fbd 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcachedCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcachedCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -24,18 +25,19 @@
 /**
  * Memcached cache provider.
  *
- * @link   www.doctrine-project.org
- * @since  2.2
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author David Abdemoulaie <dave@hobodave.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.2
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  David Abdemoulaie <dave@hobodave.com>
  */
 class MemcachedCache extends CacheProvider
 {
     /**
-     * @var Memcached|null
+     * @var Memcached
      */
     private $memcached;
 
@@ -43,8 +45,6 @@ class MemcachedCache extends CacheProvider
      * Sets the memcache instance to use.
      *
      * @param Memcached $memcached
-     *
-     * @return void
      */
     public function setMemcached(Memcached $memcached)
     {
@@ -54,7 +54,7 @@ public function setMemcached(Memcached $memcached)
     /**
      * Gets the memcached instance used by the cache.
      *
-     * @return Memcached|null
+     * @return Memcached
      */
     public function getMemcached()
     {
@@ -117,8 +117,8 @@ protected function doGetStats()
             Cache::STATS_HITS   => $stats['get_hits'],
             Cache::STATS_MISSES => $stats['get_misses'],
             Cache::STATS_UPTIME => $stats['uptime'],
-            Cache::STATS_MEMORY_USAGE     => $stats['bytes'],
-            Cache::STATS_MEMORY_AVAILABLE => $stats['limit_maxbytes'],
+            Cache::STATS_MEMORY_USAGE       => $stats['bytes'],
+            Cache::STATS_MEMORY_AVAILIABLE  => $stats['limit_maxbytes'],
         );
     }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MongoDBCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MongoDBCache.php
deleted file mode 100644
index 0c7ac0a093941a409b99493d270aaf6a1d2a558a..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/MongoDBCache.php
+++ /dev/null
@@ -1,191 +0,0 @@
-<?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. For more information, see
- * <http://www.doctrine-project.org>.
- */
-
-namespace Doctrine\Common\Cache;
-
-use MongoBinData;
-use MongoCollection;
-use MongoDate;
-
-/**
- * MongoDB cache provider.
- *
- * @since  1.1
- * @author Jeremy Mikola <jmikola@gmail.com>
- */
-class MongoDBCache extends CacheProvider
-{
-    /**
-     * The data field will store the serialized PHP value.
-     */
-    const DATA_FIELD = 'd';
-
-    /**
-     * The expiration field will store a MongoDate value indicating when the
-     * cache entry should expire.
-     *
-     * With MongoDB 2.2+, entries can be automatically deleted by MongoDB by
-     * indexing this field wit the "expireAfterSeconds" option equal to zero.
-     * This will direct MongoDB to regularly query for and delete any entries
-     * whose date is older than the current time. Entries without a date value
-     * in this field will be ignored.
-     *
-     * The cache provider will also check dates on its own, in case expired
-     * entries are fetched before MongoDB's TTLMonitor pass can expire them.
-     *
-     * @see http://docs.mongodb.org/manual/tutorial/expire-data/
-     */
-    const EXPIRATION_FIELD = 'e';
-
-    /**
-     * @var MongoCollection
-     */
-    private $collection;
-
-    /**
-     * Constructor.
-     *
-     * This provider will default to the write concern and read preference
-     * options set on the MongoCollection instance (or inherited from MongoDB or
-     * MongoClient). Using an unacknowledged write concern (< 1) may make the
-     * return values of delete() and save() unreliable. Reading from secondaries
-     * may make contain() and fetch() unreliable.
-     *
-     * @see http://www.php.net/manual/en/mongo.readpreferences.php
-     * @see http://www.php.net/manual/en/mongo.writeconcerns.php
-     * @param MongoCollection $collection
-     */
-    public function __construct(MongoCollection $collection)
-    {
-        $this->collection = $collection;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doFetch($id)
-    {
-        $document = $this->collection->findOne(array('_id' => $id), array(self::DATA_FIELD, self::EXPIRATION_FIELD));
-
-        if ($document === null) {
-            return false;
-        }
-
-        if ($this->isExpired($document)) {
-            $this->doDelete($id);
-            return false;
-        }
-
-        return unserialize($document[self::DATA_FIELD]->bin);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doContains($id)
-    {
-        $document = $this->collection->findOne(array('_id' => $id), array(self::EXPIRATION_FIELD));
-
-        if ($document === null) {
-            return false;
-        }
-
-        if ($this->isExpired($document)) {
-            $this->doDelete($id);
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doSave($id, $data, $lifeTime = 0)
-    {
-        $result = $this->collection->update(
-            array('_id' => $id),
-            array('$set' => array(
-                self::EXPIRATION_FIELD => ($lifeTime > 0 ? new MongoDate(time() + $lifeTime) : null),
-                self::DATA_FIELD => new MongoBinData(serialize($data), MongoBinData::BYTE_ARRAY),
-            )),
-            array('upsert' => true, 'multiple' => false)
-        );
-
-        return isset($result['ok']) ? $result['ok'] == 1 : true;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doDelete($id)
-    {
-        $result = $this->collection->remove(array('_id' => $id));
-
-        return isset($result['n']) ? $result['n'] == 1 : true;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doFlush()
-    {
-        // Use remove() in lieu of drop() to maintain any collection indexes
-        $result = $this->collection->remove();
-
-        return isset($result['ok']) ? $result['ok'] == 1 : true;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doGetStats()
-    {
-        $serverStatus = $this->collection->db->command(array(
-            'serverStatus' => 1,
-            'locks' => 0,
-            'metrics' => 0,
-            'recordStats' => 0,
-            'repl' => 0,
-        ));
-
-        $collStats = $this->collection->db->command(array('collStats' => 1));
-
-        return array(
-            Cache::STATS_HITS => null,
-            Cache::STATS_MISSES => null,
-            Cache::STATS_UPTIME => (isset($serverStatus['uptime']) ? (integer) $serverStatus['uptime'] : null),
-            Cache::STATS_MEMORY_USAGE => (isset($collStats['size']) ? (integer) $collStats['size'] : null),
-            Cache::STATS_MEMORY_AVAILABLE  => null,
-        );
-    }
-
-    /**
-     * Check if the document is expired.
-     *
-     * @param array $document
-     * @return boolean
-     */
-    private function isExpired(array $document)
-    {
-        return isset($document[self::EXPIRATION_FIELD]) &&
-            $document[self::EXPIRATION_FIELD] instanceof MongoDate &&
-            $document[self::EXPIRATION_FIELD]->sec < time();
-    }
-}
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/PhpFileCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/PhpFileCache.php
index f017d833268c1017ce0a0b518587f3a4f55b9e75..1d69d3d660b9527d195b5aa6f21da02b8791d382 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/PhpFileCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/PhpFileCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -22,8 +23,8 @@
 /**
  * Php file cache driver.
  *
- * @since  2.3
- * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
+ * @since   2.3
+ * @author  Fabio B. Silva <fabio.bat.silva@gmail.com>
  */
 class PhpFileCache extends FileCache
 {
@@ -102,6 +103,6 @@ protected function doSave($id, $data, $lifeTime = 0)
         $value  = var_export($value, true);
         $code   = sprintf('<?php return %s;', $value);
 
-        return file_put_contents($filename, $code) !== false;
+        return file_put_contents($filename, $code);
     }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RedisCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RedisCache.php
index 8d00a3b9562e1a760410dfa30b041c918584f420..5d4814b5f5da03e1ab726c2d4128ce284b1948fc 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RedisCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RedisCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -24,14 +25,15 @@
 /**
  * Redis cache provider.
  *
- * @link   www.doctrine-project.org
- * @since  2.2
- * @author Osman Ungur <osmanungur@gmail.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.2
+ * @author  Osman Ungur <osmanungur@gmail.com>
  */
 class RedisCache extends CacheProvider
 {
     /**
-     * @var Redis|null
+     * @var Redis
      */
     private $redis;
 
@@ -39,19 +41,17 @@ class RedisCache extends CacheProvider
      * Sets the redis instance to use.
      *
      * @param Redis $redis
-     *
-     * @return void
      */
     public function setRedis(Redis $redis)
     {
-        $redis->setOption(Redis::OPT_SERIALIZER, $this->getSerializerValue());
+        $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY);
         $this->redis = $redis;
     }
 
     /**
      * Gets the redis instance used by the cache.
      *
-     * @return Redis|null
+     * @return Redis
      */
     public function getRedis()
     {
@@ -79,11 +79,11 @@ protected function doContains($id)
      */
     protected function doSave($id, $data, $lifeTime = 0)
     {
+        $result = $this->redis->set($id, $data);
         if ($lifeTime > 0) {
-            return $this->redis->setex($id, $lifeTime, $data);
+            $this->redis->expire($id, $lifeTime);        
         }
-
-        return $this->redis->set($id, $data);
+        return $result;
     }
 
     /**
@@ -91,7 +91,7 @@ protected function doSave($id, $data, $lifeTime = 0)
      */
     protected function doDelete($id)
     {
-        return $this->redis->delete($id) > 0;
+        return $this->redis->delete($id);
     }
 
     /**
@@ -112,20 +112,8 @@ protected function doGetStats()
             Cache::STATS_HITS   => false,
             Cache::STATS_MISSES => false,
             Cache::STATS_UPTIME => $info['uptime_in_seconds'],
-            Cache::STATS_MEMORY_USAGE      => $info['used_memory'],
-            Cache::STATS_MEMORY_AVAILABLE  => false
+            Cache::STATS_MEMORY_USAGE       => $info['used_memory'],
+            Cache::STATS_MEMORY_AVAILIABLE  => false
         );
     }
-
-    /**
-     * Returns the serializer constant to use. If Redis is compiled with
-     * igbinary support, that is used. Otherwise the default PHP serializer is
-     * used.
-     *
-     * @return integer One of the Redis::SERIALIZER_* constants
-     */
-    protected function getSerializerValue()
-    {
-        return defined('Redis::SERIALIZER_IGBINARY') ? Redis::SERIALIZER_IGBINARY : Redis::SERIALIZER_PHP;
-    }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RiakCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RiakCache.php
deleted file mode 100644
index 8bb6b4bf99e3af9603037aff0de52898854a9df6..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RiakCache.php
+++ /dev/null
@@ -1,250 +0,0 @@
-<?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. For more information, see
- * <http://www.doctrine-project.org>.
- */
-
-namespace Doctrine\Common\Cache;
-
-use Riak\Bucket;
-use Riak\Connection;
-use Riak\Input;
-use Riak\Exception;
-use Riak\Object;
-
-/**
- * Riak cache provider.
- *
- * @link   www.doctrine-project.org
- * @since  1.1
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- */
-class RiakCache extends CacheProvider
-{
-    const EXPIRES_HEADER = 'X-Riak-Meta-Expires';
-
-    /**
-     * @var \Riak\Bucket
-     */
-    private $bucket;
-
-    /**
-     * Sets the riak bucket instance to use.
-     *
-     * @param \Riak\Bucket $bucket
-     */
-    public function __construct(Bucket $bucket)
-    {
-        $this->bucket = $bucket;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doFetch($id)
-    {
-        try {
-            $response = $this->bucket->get($id);
-
-            // No objects found
-            if ( ! $response->hasObject()) {
-                return false;
-            }
-
-            // Check for attempted siblings
-            $object = ($response->hasSiblings())
-                ? $this->resolveConflict($id, $response->getVClock(), $response->getObjectList())
-                : $response->getFirstObject();
-
-            // Check for expired object
-            if ($this->isExpired($object)) {
-                $this->bucket->delete($object);
-
-                return false;
-            }
-
-            return unserialize($object->getContent());
-        } catch (Exception\RiakException $e) {
-            // Covers:
-            // - Riak\ConnectionException
-            // - Riak\CommunicationException
-            // - Riak\UnexpectedResponseException
-            // - Riak\NotFoundException
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doContains($id)
-    {
-        try {
-            // We only need the HEAD, not the entire object
-            $input = new Input\GetInput();
-
-            $input->setReturnHead(true);
-
-            $response = $this->bucket->get($id, $input);
-
-            // No objects found
-            if ( ! $response->hasObject()) {
-                return false;
-            }
-
-            $object = $response->getFirstObject();
-
-            // Check for expired object
-            if ($this->isExpired($object)) {
-                $this->bucket->delete($object);
-
-                return false;
-            }
-
-            return true;
-        } catch (Exception\RiakException $e) {
-            // Do nothing
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doSave($id, $data, $lifeTime = 0)
-    {
-        try {
-            $object = new Object($id);
-
-            $object->setContent(serialize($data));
-
-            if ($lifeTime > 0) {
-                $object->addMetadata(self::EXPIRES_HEADER, (string) (time() + $lifeTime));
-            }
-
-            $this->bucket->put($object);
-
-            return true;
-        } catch (Exception\RiakException $e) {
-            // Do nothing
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doDelete($id)
-    {
-        try {
-            $this->bucket->delete($id);
-
-            return true;
-        } catch (Exception\BadArgumentsException $e) {
-            // Key did not exist on cluster already
-        } catch (Exception\RiakException $e) {
-            // Covers:
-            // - Riak\Exception\ConnectionException
-            // - Riak\Exception\CommunicationException
-            // - Riak\Exception\UnexpectedResponseException
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doFlush()
-    {
-        try {
-            $keyList = $this->bucket->getKeyList();
-
-            foreach ($keyList as $key) {
-                $this->bucket->delete($key);
-            }
-
-            return true;
-        } catch (Exception\RiakException $e) {
-            // Do nothing
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doGetStats()
-    {
-        // Only exposed through HTTP stats API, not Protocol Buffers API
-        return null;
-    }
-
-    /**
-     * Check if a given Riak Object have expired.
-     *
-     * @param \Riak\Object $object
-     *
-     * @return boolean
-     */
-    private function isExpired(Object $object)
-    {
-        $metadataMap = $object->getMetadataMap();
-
-        return isset($metadataMap[self::EXPIRES_HEADER])
-            && $metadataMap[self::EXPIRES_HEADER] < time();
-    }
-
-    /**
-     * On-read conflict resolution. Applied approach here is last write wins.
-     * Specific needs may override this method to apply alternate conflict resolutions.
-     *
-     * {@internal Riak does not attempt to resolve a write conflict, and store
-     * it as sibling of conflicted one. By following this approach, it is up to
-     * the next read to resolve the conflict. When this happens, your fetched
-     * object will have a list of siblings (read as a list of objects).
-     * In our specific case, we do not care about the intermediate ones since
-     * they are all the same read from storage, and we do apply a last sibling
-     * (last write) wins logic.
-     * If by any means our resolution generates another conflict, it'll up to
-     * next read to properly solve it.}
-     *
-     * @param string $id
-     * @param string $vClock
-     * @param array  $objectList
-     *
-     * @return \Riak\Object
-     */
-    protected function resolveConflict($id, $vClock, array $objectList)
-    {
-        // Our approach here is last-write wins
-        $winner = $objectList[count($objectList)];
-
-        $putInput = new Input\PutInput();
-        $putInput->setVClock($vClock);
-
-        $mergedObject = new Object($id);
-        $mergedObject->setContent($winner->getContent());
-
-        $this->bucket->put($mergedObject, $putInput);
-
-        return $mergedObject;
-    }
-}
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Version.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Version.php
deleted file mode 100644
index d742fa080f0dc59c51e57c0a918c460e74685e5e..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Version.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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. For more information, see
- * <http://www.doctrine-project.org>.
- */
-
-namespace Doctrine\Common\Cache;
-
-class Version
-{
-    const VERSION = '1.4.0-DEV';
-}
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/WinCacheCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/WinCacheCache.php
index ae32772930046d19e28334a2485193f1c2c7c9da..777d0fd53553719d2e2177776f14dc16f52a176c 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/WinCacheCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/WinCacheCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -22,13 +23,14 @@
 /**
  * WinCache cache provider.
  *
- * @link   www.doctrine-project.org
- * @since  2.2
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author David Abdemoulaie <dave@hobodave.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.2
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  David Abdemoulaie <dave@hobodave.com>
  */
 class WinCacheCache extends CacheProvider
 {
@@ -81,11 +83,11 @@ protected function doGetStats()
         $meminfo = wincache_ucache_meminfo();
 
         return array(
-            Cache::STATS_HITS             => $info['total_hit_count'],
-            Cache::STATS_MISSES           => $info['total_miss_count'],
-            Cache::STATS_UPTIME           => $info['total_cache_uptime'],
-            Cache::STATS_MEMORY_USAGE     => $meminfo['memory_total'],
-            Cache::STATS_MEMORY_AVAILABLE => $meminfo['memory_free'],
+            Cache::STATS_HITS              => $info['total_hit_count'],
+            Cache::STATS_MISSES            => $info['total_miss_count'],
+            Cache::STATS_UPTIME            => $info['total_cache_uptime'],
+            Cache::STATS_MEMORY_USAGE      => $meminfo['memory_total'],
+            Cache::STATS_MEMORY_AVAILIABLE => $meminfo['memory_free'],
         );
     }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/XcacheCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/XcacheCache.php
index 833b02a89bfe4ca9b94ef18ad4ff10726612d7e2..8733e266cc00cb8f3cac7917c4c59141a6419e81 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/XcacheCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/XcacheCache.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -22,13 +23,14 @@
 /**
  * Xcache cache driver.
  *
- * @link   www.doctrine-project.org
- * @since  2.0
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
- * @author David Abdemoulaie <dave@hobodave.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.0
+ * @author  Benjamin Eberlei <kontakt@beberlei.de>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
+ * @author  David Abdemoulaie <dave@hobodave.com>
  */
 class XcacheCache extends CacheProvider
 {
@@ -77,11 +79,10 @@ protected function doFlush()
     }
 
     /**
-     * Checks that xcache.admin.enable_auth is Off.
+     * Checks that xcache.admin.enable_auth is Off
      *
+     * @throws \BadMethodCallException When xcache.admin.enable_auth is On
      * @return void
-     *
-     * @throws \BadMethodCallException When xcache.admin.enable_auth is On.
      */
     protected function checkAuthorization()
     {
@@ -102,8 +103,8 @@ protected function doGetStats()
             Cache::STATS_HITS   => $info['hits'],
             Cache::STATS_MISSES => $info['misses'],
             Cache::STATS_UPTIME => null,
-            Cache::STATS_MEMORY_USAGE      => $info['size'],
-            Cache::STATS_MEMORY_AVAILABLE  => $info['avail'],
+            Cache::STATS_MEMORY_USAGE       => $info['size'],
+            Cache::STATS_MEMORY_AVAILIABLE  => $info['avail'],
         );
     }
 }
diff --git a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ZendDataCache.php b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ZendDataCache.php
index 6e35ac82369ebef6c8de49806181e59145ab4600..fc90bc690912c6fefaec01d9547b7043a8723328 100644
--- a/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ZendDataCache.php
+++ b/core/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ZendDataCache.php
@@ -22,10 +22,11 @@
 /**
  * Zend Data Cache cache driver.
  *
- * @link   www.doctrine-project.org
- * @since  2.0
- * @author Ralph Schindler <ralph.schindler@zend.com>
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @link    www.doctrine-project.org
+ * @since   2.0
+ * @author  Ralph Schindler <ralph.schindler@zend.com>
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
  */
 class ZendDataCache extends CacheProvider
 {
diff --git a/core/vendor/doctrine/cache/phpunit.xml.dist b/core/vendor/doctrine/cache/phpunit.xml.dist
index 34d7f4c879799941987a7e2d77641e1a8df2356a..900378bf36511ac9174af6d8bd2bccccdcb6e7e5 100644
--- a/core/vendor/doctrine/cache/phpunit.xml.dist
+++ b/core/vendor/doctrine/cache/phpunit.xml.dist
@@ -22,4 +22,10 @@
             <directory>./lib/Doctrine/</directory>
         </whitelist>
     </filter>
+    
+    <groups>
+        <exclude>
+            <group>performance</group>
+        </exclude>
+    </groups>
 </phpunit>
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php
index a6c3097d3b0c8bce71b4f239dd44212dbda313e9..6cad8915b6cd6fae3bfb885256dc0f79ed4009da 100644
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php
+++ b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php
@@ -18,9 +18,4 @@ public function testGetStats()
 
         $this->assertNull($stats);
     }
-
-    protected function isSharedStorage()
-    {
-        return false;
-    }
 }
\ No newline at end of file
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/BaseFileCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/BaseFileCacheTest.php
deleted file mode 100644
index eaedd99446b2ffeffb9fdf0de1cb4cbb24da4301..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/BaseFileCacheTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace Doctrine\Tests\Common\Cache;
-
-use RecursiveDirectoryIterator;
-use RecursiveIteratorIterator;
-
-abstract class BaseFileCacheTest extends CacheTest
-{
-    protected $directory;
-
-    public function setUp()
-    {
-        do {
-            $this->directory = sys_get_temp_dir() . '/doctrine_cache_'. uniqid();
-        } while (file_exists($this->directory));
-    }
-
-    public function tearDown()
-    {
-        if ( ! is_dir($this->directory)) {
-            return;
-        }
-
-        $iterator = new RecursiveDirectoryIterator($this->directory);
-
-        foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {
-            if ($file->isFile()) {
-                @unlink($file->getRealPath());
-            } elseif ($file->isDir()) {
-                @rmdir($file->getRealPath());
-            }
-        }
-    }
-
-    protected function isSharedStorage()
-    {
-        return false;
-    }
-}
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CacheTest.php
index 59ca4dc775798e07fe5ea7754b6d29e5e927c32a..ea7f75374f49d722096fae1af0dcb1796890ec7b 100644
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CacheTest.php
+++ b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CacheTest.php
@@ -3,195 +3,69 @@
 namespace Doctrine\Tests\Common\Cache;
 
 use Doctrine\Common\Cache\Cache;
-use ArrayObject;
 
 abstract class CacheTest extends \Doctrine\Tests\DoctrineTestCase
 {
-    /**
-     * @dataProvider provideCrudValues
-     */
-    public function testBasicCrudOperations($value)
+    public function testBasics()
     {
         $cache = $this->_getCacheDriver();
 
-        // Test saving a value, checking if it exists, and fetching it back
-        $this->assertTrue($cache->save('key', 'value'));
-        $this->assertTrue($cache->contains('key'));
-        $this->assertEquals('value', $cache->fetch('key'));
+        // Test save
+        $cache->save('test_key', 'testing this out');
 
-        // Test updating the value of a cache entry
-        $this->assertTrue($cache->save('key', 'value-changed'));
-        $this->assertTrue($cache->contains('key'));
-        $this->assertEquals('value-changed', $cache->fetch('key'));
+        // Test contains to test that save() worked
+        $this->assertTrue($cache->contains('test_key'));
 
-        // Test deleting a value
-        $this->assertTrue($cache->delete('key'));
-        $this->assertFalse($cache->contains('key'));
-    }
+        // Test fetch
+        $this->assertEquals('testing this out', $cache->fetch('test_key'));
 
-    public function provideCrudValues()
-    {
-        return array(
-            'array' => array(array('one', 2, 3.0)),
-            'string' => array('value'),
-            'integer' => array(1),
-            'float' => array(1.5),
-            'object' => array(new ArrayObject()),
-            'null' => array(null),
-        );
+        // Test delete
+        $cache->save('test_key2', 'test2');
+        $cache->delete('test_key2');
+        $this->assertFalse($cache->contains('test_key2'));
     }
 
-    public function testDeleteAll()
+    public function testObjects()
     {
         $cache = $this->_getCacheDriver();
 
-        $this->assertTrue($cache->save('key1', 1));
-        $this->assertTrue($cache->save('key2', 2));
-        $this->assertTrue($cache->deleteAll());
-        $this->assertFalse($cache->contains('key1'));
-        $this->assertFalse($cache->contains('key2'));
+        // Fetch/save test with objects (Is cache driver serializes/unserializes objects correctly ?)
+        $cache->save('test_object_key', new \ArrayObject());
+        $this->assertTrue($cache->fetch('test_object_key') instanceof \ArrayObject);
     }
 
-    public function testDeleteAllAndNamespaceVersioningBetweenCaches()
-    {
-        if ( ! $this->isSharedStorage()) {
-            $this->markTestSkipped('The ' . __CLASS__ .' does not use shared storage');
-        }
-
-        $cache1 = $this->_getCacheDriver();
-        $cache2 = $this->_getCacheDriver();
-
-        $this->assertTrue($cache1->save('key1', 1));
-        $this->assertTrue($cache2->save('key2', 2));
-
-        /* Both providers are initialized with the same namespace version, so
-         * they can see entries set by each other.
-         */
-        $this->assertTrue($cache1->contains('key1'));
-        $this->assertTrue($cache1->contains('key2'));
-        $this->assertTrue($cache2->contains('key1'));
-        $this->assertTrue($cache2->contains('key2'));
-
-        /* Deleting all entries through one provider will only increment the
-         * namespace version on that object (and in the cache itself, which new
-         * instances will use to initialize). The second provider will retain
-         * its original version and still see stale data.
-         */
-        $this->assertTrue($cache1->deleteAll());
-        $this->assertFalse($cache1->contains('key1'));
-        $this->assertFalse($cache1->contains('key2'));
-        $this->assertTrue($cache2->contains('key1'));
-        $this->assertTrue($cache2->contains('key2'));
-
-        /* A new cache provider should not see the deleted entries, since its
-         * namespace version will be initialized.
-         */
-        $cache3 = $this->_getCacheDriver();
-        $this->assertFalse($cache3->contains('key1'));
-        $this->assertFalse($cache3->contains('key2'));
-    }
-
-    public function testFlushAll()
+    public function testDeleteAll()
     {
         $cache = $this->_getCacheDriver();
+        $cache->save('test_key1', '1');
+        $cache->save('test_key2', '2');
+        $cache->deleteAll();
 
-        $this->assertTrue($cache->save('key1', 1));
-        $this->assertTrue($cache->save('key2', 2));
-        $this->assertTrue($cache->flushAll());
-        $this->assertFalse($cache->contains('key1'));
-        $this->assertFalse($cache->contains('key2'));
-    }
-
-    public function testFlushAllAndNamespaceVersioningBetweenCaches()
-    {
-        if ( ! $this->isSharedStorage()) {
-            $this->markTestSkipped('The ' . __CLASS__ .' does not use shared storage');
-        }
-
-        $cache1 = $this->_getCacheDriver();
-        $cache2 = $this->_getCacheDriver();
-
-        /* Deleting all elements from the first provider should increment its
-         * namespace version before saving the first entry.
-         */
-        $cache1->deleteAll();
-        $this->assertTrue($cache1->save('key1', 1));
-
-        /* The second provider will be initialized with the same namespace
-         * version upon its first save operation.
-         */
-        $this->assertTrue($cache2->save('key2', 2));
-
-        /* Both providers have the same namespace version and can see entires
-         * set by each other.
-         */
-        $this->assertTrue($cache1->contains('key1'));
-        $this->assertTrue($cache1->contains('key2'));
-        $this->assertTrue($cache2->contains('key1'));
-        $this->assertTrue($cache2->contains('key2'));
-
-        /* Flushing all entries through one cache will remove all entries from
-         * the cache but leave their namespace version as-is.
-         */
-        $this->assertTrue($cache1->flushAll());
-        $this->assertFalse($cache1->contains('key1'));
-        $this->assertFalse($cache1->contains('key2'));
-        $this->assertFalse($cache2->contains('key1'));
-        $this->assertFalse($cache2->contains('key2'));
-
-        /* Inserting a new entry will use the same, incremented namespace
-         * version, and it will be visible to both providers.
-         */
-        $this->assertTrue($cache1->save('key1', 1));
-        $this->assertTrue($cache1->contains('key1'));
-        $this->assertTrue($cache2->contains('key1'));
-
-        /* A new cache provider will be initialized with the original namespace
-         * version and not share any visibility with the first two providers.
-         */
-        $cache3 = $this->_getCacheDriver();
-        $this->assertFalse($cache3->contains('key1'));
-        $this->assertFalse($cache3->contains('key2'));
-        $this->assertTrue($cache3->save('key3', 3));
-        $this->assertTrue($cache3->contains('key3'));
+        $this->assertFalse($cache->contains('test_key1'));
+        $this->assertFalse($cache->contains('test_key2'));
     }
 
-    public function testNamespace()
+    public function testFlushAll()
     {
         $cache = $this->_getCacheDriver();
+        $cache->save('test_key1', '1');
+        $cache->save('test_key2', '2');
+        $cache->flushAll();
 
-        $cache->setNamespace('ns1_');
-
-        $this->assertTrue($cache->save('key1', 1));
-        $this->assertTrue($cache->contains('key1'));
-
-        $cache->setNamespace('ns2_');
-
-        $this->assertFalse($cache->contains('key1'));
+        $this->assertFalse($cache->contains('test_key1'));
+        $this->assertFalse($cache->contains('test_key2'));
     }
 
-    public function testDeleteAllNamespace()
+    public function testNamespace()
     {
         $cache = $this->_getCacheDriver();
-
-        $cache->setNamespace('ns1');
-        $this->assertFalse($cache->contains('key1'));
+        $cache->setNamespace('test_');
         $cache->save('key1', 'test');
-        $this->assertTrue($cache->contains('key1'));
 
-        $cache->setNamespace('ns2');
-        $this->assertFalse($cache->contains('key1'));
-        $cache->save('key1', 'test');
         $this->assertTrue($cache->contains('key1'));
 
-        $cache->setNamespace('ns1');
-        $this->assertTrue($cache->contains('key1'));
-        $cache->deleteAll();
-        $this->assertFalse($cache->contains('key1'));
+        $cache->setNamespace('test2_');
 
-        $cache->setNamespace('ns2');
-        $this->assertTrue($cache->contains('key1'));
-        $cache->deleteAll();
         $this->assertFalse($cache->contains('key1'));
     }
 
@@ -203,39 +77,26 @@ public function testGetStats()
         $cache = $this->_getCacheDriver();
         $stats = $cache->getStats();
 
-        $this->assertArrayHasKey(Cache::STATS_HITS, $stats);
+        $this->assertArrayHasKey(Cache::STATS_HITS,   $stats);
         $this->assertArrayHasKey(Cache::STATS_MISSES, $stats);
         $this->assertArrayHasKey(Cache::STATS_UPTIME, $stats);
         $this->assertArrayHasKey(Cache::STATS_MEMORY_USAGE, $stats);
-        $this->assertArrayHasKey(Cache::STATS_MEMORY_AVAILABLE, $stats);
+        $this->assertArrayHasKey(Cache::STATS_MEMORY_AVAILIABLE, $stats);
     }
 
-    public function testFetchMissShouldReturnFalse()
+    /**
+     * Make sure that all supported caches return "false" instead of "null" to be compatible
+     * with ORM integration.
+     */
+    public function testFalseOnFailedFetch()
     {
         $cache = $this->_getCacheDriver();
-
-        /* Ensure that caches return boolean false instead of null on a fetch
-         * miss to be compatible with ORM integration.
-         */
         $result = $cache->fetch('nonexistent_key');
-
         $this->assertFalse($result);
         $this->assertNotNull($result);
     }
 
     /**
-     * Return whether multiple cache providers share the same storage.
-     *
-     * This is used for skipping certain tests for shared storage behavior.
-     *
-     * @return boolean
-     */
-    protected function isSharedStorage()
-    {
-        return true;
-    }
-
-    /**
      * @return \Doctrine\Common\Cache\CacheProvider
      */
     abstract protected function _getCacheDriver();
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/FileCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/FileCacheTest.php
deleted file mode 100644
index 6f9df8158e43dda273e2727a9d60b05438de11db..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/FileCacheTest.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-namespace Doctrine\Tests\Common\Cache;
-
-/**
- * @group DCOM-101
- */
-class FileCacheTest extends \Doctrine\Tests\DoctrineTestCase
-{
-    /**
-     * @var \Doctrine\Common\Cache\FileCache
-     */
-    private $driver;
-
-    protected function setUp()
-    {
-        $this->driver = $this->getMock(
-            'Doctrine\Common\Cache\FileCache',
-            array('doFetch', 'doContains', 'doSave'),
-            array(), '', false
-        );
-    }
-
-    public function getProviderFileName()
-    {
-         return array(
-            //The characters :\/<>"*?| are not valid in Windows filenames.
-            array('key:1', 'key1'),
-            array('key\2', 'key2'),
-            array('key/3', 'key3'),
-            array('key<4', 'key4'),
-            array('key>5', 'key5'),
-            array('key"6', 'key6'),
-            array('key*7', 'key7'),
-            array('key?8', 'key8'),
-            array('key|9', 'key9'),
-            array('key[0]','key[0]'),
-        );
-    }
-
-    /**
-     * @dataProvider getProviderFileName
-     */
-    public function testInvalidFilename($key, $expected)
-    {
-        $cache  = $this->driver;
-        $method = new \ReflectionMethod($cache, 'getFilename');
-
-        $method->setAccessible(true);
-
-        $value  = $method->invoke($cache, $key);
-        $actual = pathinfo($value, PATHINFO_FILENAME);
-
-        $this->assertEquals($expected, $actual);
-    }
-
-    public function testFilenameCollision()
-    {
-        $data['key:0']  = 'key0';
-        $data['key\0']  = 'key0';
-        $data['key/0']  = 'key0';
-        $data['key<0']  = 'key0';
-        $data['key>0']  = 'key0';
-        $data['key"0']  = 'key0';
-        $data['key*0']  = 'key0';
-        $data['key?0']  = 'key0';
-        $data['key|0']  = 'key0';
-
-        $paths  = array();
-        $cache  = $this->driver;
-        $method = new \ReflectionMethod($cache, 'getFilename');
-
-        $method->setAccessible(true);
-
-        foreach ($data as $key => $expected) {
-            $path   = $method->invoke($cache, $key);
-            $actual = pathinfo($path, PATHINFO_FILENAME);
-
-            $this->assertNotContains($path, $paths);
-            $this->assertEquals($expected, $actual);
-
-            $paths[] = $path;
-        }
-    }
-
-    public function testFilenameShouldCreateThePathWithFourSubDirectories()
-    {
-        $cache          = $this->driver;
-        $method         = new \ReflectionMethod($cache, 'getFilename');
-        $key            = 'item-key';
-        $expectedDir[]  = '84e0e2e893febb73';
-        $expectedDir[]  = '7a0fee0c89d53f4b';
-        $expectedDir[]  = 'b7fcb44c57cdf3d3';
-        $expectedDir[]  = '2ce7363f5d597760';
-        $expectedDir    = implode(DIRECTORY_SEPARATOR, $expectedDir);
-
-        $method->setAccessible(true);
-
-        $path       = $method->invoke($cache, $key);
-        $filename   = pathinfo($path, PATHINFO_FILENAME);
-        $dirname    = pathinfo($path, PATHINFO_DIRNAME);
-
-        $this->assertEquals('item-key', $filename);
-        $this->assertEquals(DIRECTORY_SEPARATOR . $expectedDir, $dirname);
-        $this->assertEquals(DIRECTORY_SEPARATOR . $expectedDir . DIRECTORY_SEPARATOR . $key, $path);
-    }
-}
\ No newline at end of file
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php
index e3b74cd0165b9061fdbdf2d5bcdae19fdce930b1..f782e3c00211f3a693bf6d1a50ad3af06ab1db77 100644
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php
+++ b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php
@@ -2,14 +2,29 @@
 
 namespace Doctrine\Tests\Common\Cache;
 
-use Doctrine\Common\Cache\Cache;
 use Doctrine\Common\Cache\FilesystemCache;
 
 /**
  * @group DCOM-101
  */
-class FilesystemCacheTest extends BaseFileCacheTest
+class FilesystemCacheTest extends CacheTest
 {
+    /**
+     * @var \Doctrine\Common\Cache\FilesystemCache
+     */
+    private $driver;
+
+    protected function _getCacheDriver()
+    {
+        $dir = sys_get_temp_dir() . "/doctrine_cache_". uniqid();
+        $this->assertFalse(is_dir($dir));
+        
+        $this->driver = new FilesystemCache($dir);
+        $this->assertTrue(is_dir($dir));
+
+        return $this->driver;
+    }
+
     public function testLifetime()
     {
         $cache = $this->_getCacheDriver();
@@ -61,15 +76,22 @@ public function testGetStats()
         $cache = $this->_getCacheDriver();
         $stats = $cache->getStats();
 
-        $this->assertNull($stats[Cache::STATS_HITS]);
-        $this->assertNull($stats[Cache::STATS_MISSES]);
-        $this->assertNull($stats[Cache::STATS_UPTIME]);
-        $this->assertEquals(0, $stats[Cache::STATS_MEMORY_USAGE]);
-        $this->assertGreaterThan(0, $stats[Cache::STATS_MEMORY_AVAILABLE]);
+        $this->assertNull($stats);
     }
 
-    protected function _getCacheDriver()
+    public function tearDown()
     {
-        return new FilesystemCache($this->directory);
+        $dir        = $this->driver->getDirectory();
+        $ext        = $this->driver->getExtension();
+        $iterator   = new \RecursiveDirectoryIterator($dir);
+
+        foreach (new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::CHILD_FIRST) as $file) {
+            if ($file->isFile()) {
+                @unlink($file->getRealPath());
+            } else {
+                @rmdir($file->getRealPath());
+            }
+        }
     }
-}
+
+}
\ No newline at end of file
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php
index b0da1b969797d86465319186bad260fa769b2561..36c180c93557a6fc3b8e3d8bdda204c3507d89d7 100644
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php
+++ b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php
@@ -3,35 +3,25 @@
 namespace Doctrine\Tests\Common\Cache;
 
 use Doctrine\Common\Cache\MemcacheCache;
-use Memcache;
 
 class MemcacheCacheTest extends CacheTest
 {
-    private $memcache;
+    private $_memcache;
 
     public function setUp()
     {
-        if ( ! extension_loaded('memcache')) {
+        if (extension_loaded('memcache')) {
+            $this->_memcache = new \Memcache;
+            $ok = @$this->_memcache->connect('localhost', 11211);
+            if (!$ok) {
+                $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache');
+            }
+        } else {
             $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache');
         }
-
-        $this->memcache = new Memcache();
-
-        if (@$this->memcache->connect('localhost', 11211) === false) {
-            unset($this->memcache);
-            $this->markTestSkipped('The ' . __CLASS__ .' cannot connect to memcache');
-        }
     }
 
-    public function tearDown()
-    {
-        if ($this->memcache instanceof Memcache) {
-            $this->memcache->flush();
-        }
-    }
-
-    public function testNoExpire()
-    {
+    public function testNoExpire() {
         $cache = $this->_getCacheDriver();
         $cache->save('noexpire', 'value', 0);
         sleep(1);
@@ -48,7 +38,8 @@ public function testLongLifetime()
     protected function _getCacheDriver()
     {
         $driver = new MemcacheCache();
-        $driver->setMemcache($this->memcache);
+        $driver->setMemcache($this->_memcache);
         return $driver;
     }
+
 }
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php
index 071329fbcf80925753dcb03bc30f59102b917fef..ecbe5a60012652fe97cbf98cd4b726bb3c8854ee 100644
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php
+++ b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php
@@ -3,7 +3,6 @@
 namespace Doctrine\Tests\Common\Cache;
 
 use Doctrine\Common\Cache\MemcachedCache;
-use Memcached;
 
 class MemcachedCacheTest extends CacheTest
 {
@@ -11,29 +10,21 @@ class MemcachedCacheTest extends CacheTest
 
     public function setUp()
     {
-        if ( ! extension_loaded('memcached')) {
-            $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcached');
-        }
-
-        $this->memcached = new Memcached();
-        $this->memcached->setOption(Memcached::OPT_COMPRESSION, false);
-        $this->memcached->addServer('127.0.0.1', 11211);
-
-        if (@fsockopen('127.0.0.1', 11211) === false) {
-            unset($this->memcached);
-            $this->markTestSkipped('The ' . __CLASS__ .' cannot connect to memcache');
+        if (extension_loaded('memcached')) {
+            $this->memcached = new \Memcached();
+            $this->memcached->setOption(\Memcached::OPT_COMPRESSION, false);
+            $this->memcached->addServer('127.0.0.1', 11211);
+
+            $fh = @fsockopen('127.0.0.1', 11211);
+            if (!$fh) {
+                $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache');
+            }
+        } else {
+            $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache');
         }
     }
 
-    public function tearDown()
-    {
-        if ($this->memcached instanceof Memcached) {
-            $this->memcached->flush();
-        }
-    }
-
-    public function testNoExpire()
-    {
+    public function testNoExpire() {
         $cache = $this->_getCacheDriver();
         $cache->save('noexpire', 'value', 0);
         sleep(1);
@@ -44,7 +35,8 @@ public function testLongLifetime()
     {
         $cache = $this->_getCacheDriver();
         $cache->save('key', 'value', 30 * 24 * 3600 + 1);
-        $this->assertTrue($cache->contains('key'), 'Memcache provider should support TTL > 30 days');
+
+        $this->assertTrue($cache->contains('key'), 'Memcached provider should support TTL > 30 days');
     }
 
     protected function _getCacheDriver()
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MongoDBCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MongoDBCacheTest.php
deleted file mode 100644
index 8c2f6e0e7c5235c6c29a690bc76edb89e86f1af8..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/MongoDBCacheTest.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace Doctrine\Tests\Common\Cache;
-
-use Doctrine\Common\Cache\Cache;
-use Doctrine\Common\Cache\MongoDBCache;
-use MongoClient;
-use MongoCollection;
-
-class MongoDBCacheTest extends CacheTest
-{
-    /**
-     * @var MongoCollection
-     */
-    private $collection;
-
-    public function setUp()
-    {
-        if ( ! version_compare(phpversion('mongo'), '1.3.0', '>=')) {
-            $this->markTestSkipped('The ' . __CLASS__ .' requires the use of mongo >= 1.3.0');
-        }
-
-        $mongo = new MongoClient();
-        $this->collection = $mongo->selectCollection('doctrine_common_cache', 'test');
-    }
-
-    public function tearDown()
-    {
-        if ($this->collection instanceof MongoCollection) {
-            $this->collection->drop();
-        }
-    }
-
-    public function testSaveWithNonUtf8String()
-    {
-        // Invalid 2-octet sequence
-        $data = "\xc3\x28";
-
-        $cache = $this->_getCacheDriver();
-
-        $this->assertTrue($cache->save('key', $data));
-        $this->assertEquals($data, $cache->fetch('key'));
-    }
-
-    public function testGetStats()
-    {
-        $cache = $this->_getCacheDriver();
-        $stats = $cache->getStats();
-
-        $this->assertNull($stats[Cache::STATS_HITS]);
-        $this->assertNull($stats[Cache::STATS_MISSES]);
-        $this->assertGreaterThan(0, $stats[Cache::STATS_UPTIME]);
-        $this->assertEquals(0, $stats[Cache::STATS_MEMORY_USAGE]);
-        $this->assertNull($stats[Cache::STATS_MEMORY_AVAILABLE]);
-    }
-
-    protected function _getCacheDriver()
-    {
-        return new MongoDBCache($this->collection);
-    }
-}
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php
index f49ce25e4e3091c3bd19a7921d6fe2c60a172456..5085f46640ac81dab6d6f040f815c55e01e011ea 100644
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php
+++ b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php
@@ -2,14 +2,34 @@
 
 namespace Doctrine\Tests\Common\Cache;
 
-use Doctrine\Common\Cache\Cache;
 use Doctrine\Common\Cache\PhpFileCache;
 
 /**
  * @group DCOM-101
  */
-class PhpFileCacheTest extends BaseFileCacheTest
+class PhpFileCacheTest extends CacheTest
 {
+    /**
+     * @var \Doctrine\Common\Cache\PhpFileCache
+     */
+    private $driver;
+
+    protected function _getCacheDriver()
+    {
+        $dir = sys_get_temp_dir() . "/doctrine_cache_". uniqid();
+        $this->assertFalse(is_dir($dir));
+
+        $this->driver = new PhpFileCache($dir);
+        $this->assertTrue(is_dir($dir));
+
+        return $this->driver;
+    }
+
+    public function testObjects()
+    {
+        $this->markTestSkipped('PhpFileCache does not support saving objects that dont implement __set_state()');
+    }
+
     public function testLifetime()
     {
         $cache = $this->_getCacheDriver();
@@ -78,17 +98,28 @@ public function testGetStats()
         $cache = $this->_getCacheDriver();
         $stats = $cache->getStats();
 
-        $this->assertNull($stats[Cache::STATS_HITS]);
-        $this->assertNull($stats[Cache::STATS_MISSES]);
-        $this->assertNull($stats[Cache::STATS_UPTIME]);
-        $this->assertEquals(0, $stats[Cache::STATS_MEMORY_USAGE]);
-        $this->assertGreaterThan(0, $stats[Cache::STATS_MEMORY_AVAILABLE]);
+        $this->assertNull($stats);
     }
 
-    protected function _getCacheDriver()
+    public function tearDown()
     {
-        return new PhpFileCache($this->directory);
+        if (!$this->driver) {
+            return;
+        }
+
+        $dir        = $this->driver->getDirectory();
+        $ext        = $this->driver->getExtension();
+        $iterator   = new \RecursiveDirectoryIterator($dir);
+
+        foreach (new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::CHILD_FIRST) as $file) {
+            if ($file->isFile()) {
+                @unlink($file->getRealPath());
+            } else {
+                @rmdir($file->getRealPath());
+            }
+        }
     }
+
 }
 
 class NotSetStateClass
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/RiakCacheTest.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/RiakCacheTest.php
deleted file mode 100644
index dce8cc00e2d51ad3ccd872bc1084b3d619c039a8..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/RiakCacheTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace Doctrine\Tests\Common\Cache;
-
-use Riak\Bucket;
-use Riak\Connection;
-use Riak\Exception;
-use Doctrine\Common\Cache\RiakCache;
-
-/**
- * RiakCache test
- *
- * @group Riak
- */
-class RiakCacheTest extends CacheTest
-{
-    /**
-     * @var \Riak\Connection
-     */
-    private $connection;
-
-    /**
-     * @var \Riak\Bucket
-     */
-    private $bucket;
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setUp()
-    {
-        if ( ! extension_loaded('riak')) {
-            $this->markTestSkipped('The ' . __CLASS__ .' requires the use of Riak');
-        }
-
-        try {
-            $this->connection = new Connection('127.0.0.1', 8087);
-            $this->bucket     = new Bucket($this->connection, 'test');
-        } catch (Exception\RiakException $e) {
-            $this->markTestSkipped('The ' . __CLASS__ .' requires the use of Riak');
-        }
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function testGetStats()
-    {
-        $cache = $this->_getCacheDriver();
-        $stats = $cache->getStats();
-
-        $this->assertNull($stats);
-    }
-
-    /**
-     * Retrieve RiakCache instance.
-     *
-     * @return \Doctrine\Common\Cache\RiakCache
-     */
-    protected function _getCacheDriver()
-    {
-        return new RiakCache($this->bucket);
-    }
-}
diff --git a/core/vendor/doctrine/cache/tests/Doctrine/Tests/TestInit.php b/core/vendor/doctrine/cache/tests/Doctrine/Tests/TestInit.php
index 1bbfa947a441ba37e2711040e56a7e4e811ec322..7132caf6aec0251fe1ad028d3f03472c64389174 100644
--- a/core/vendor/doctrine/cache/tests/Doctrine/Tests/TestInit.php
+++ b/core/vendor/doctrine/cache/tests/Doctrine/Tests/TestInit.php
@@ -2,18 +2,22 @@
 /*
  * This file bootstraps the test environment.
  */
+namespace Doctrine\Tests;
+
 error_reporting(E_ALL | E_STRICT);
 
-if (file_exists(__DIR__ . '/../../../vendor/autoload.php')) {
-    // dependencies were installed via composer - this is the main project
-    $classLoader = require __DIR__ . '/../../../vendor/autoload.php';
-} elseif (file_exists(__DIR__ . '/../../../../../autoload.php')) {
-    // installed as a dependency in `vendor`
-    $classLoader = require __DIR__ . '/../../../../../autoload.php';
-} else {
-    throw new Exception('Can\'t find autoload.php. Did you install dependencies via Composer?');
-}
+// register silently failing autoloader
+spl_autoload_register(function($class)
+{
+    if (0 === strpos($class, 'Doctrine\Tests\\')) {
+        $path = __DIR__.'/../../'.strtr($class, '\\', '/').'.php';
+        if (is_file($path) && is_readable($path)) {
+            require_once $path;
+
+            return true;
+        }
+    }
+});
+
+require_once __DIR__ . "/../../../vendor/autoload.php";
 
-/* @var $classLoader \Composer\Autoload\ClassLoader */
-$classLoader->add('Doctrine\\Tests\\', __DIR__ . '/../../');
-unset($classLoader);
diff --git a/core/vendor/doctrine/cache/tests/travis/php.ini b/core/vendor/doctrine/cache/tests/travis/php.ini
deleted file mode 100644
index ef5d9a1b7b589b4b9f236b9b246bf8848cc3e566..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/tests/travis/php.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-extension="mongo.so"
-extension="memcache.so"
-extension="memcached.so"
-
-apc.enabled=1
-apc.enable_cli=1
diff --git a/core/vendor/doctrine/cache/tests/travis/phpunit.travis.xml b/core/vendor/doctrine/cache/tests/travis/phpunit.travis.xml
deleted file mode 100644
index a01faa5c2d553aca016aeec0e306a2c450dab8c3..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/cache/tests/travis/phpunit.travis.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit bootstrap="../Doctrine/Tests/TestInit.php"
-        convertWarningsToExceptions="true"
-        convertNoticesToExceptions="true"
-        convertErrorsToExceptions="true"
-        backupStaticAttributes="false"
-        processIsolation="false"
-        stopOnFailure="false"
-        backupGlobals="false"
-        syntaxCheck="false"
-        colors="true">
-
-    <logging>
-        <log type="coverage-clover" target="../../build/logs/clover.xml"/>
-    </logging>
-
-    <testsuites>
-        <testsuite name="Doctrine Cache Test Suite">
-            <directory>../Doctrine/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>../../lib/Doctrine/</directory>
-        </whitelist>
-    </filter>
-    
-    <groups>
-        <exclude>
-            <group>performance</group>
-        </exclude>
-    </groups>
-</phpunit>
diff --git a/core/vendor/doctrine/collections/.travis.yml b/core/vendor/doctrine/collections/.travis.yml
index 470c9879a1d7f2a7e71ef2d81072e340ac70df7b..478e5d65d2e53aff1bd7aef68e160d9195d35e14 100644
--- a/core/vendor/doctrine/collections/.travis.yml
+++ b/core/vendor/doctrine/collections/.travis.yml
@@ -3,8 +3,6 @@ language: php
 php:
   - 5.3
   - 5.4
-  - 5.5
-  - hhvm
 
 before_script:
     - composer --prefer-source --dev install
diff --git a/core/vendor/doctrine/collections/LICENSE b/core/vendor/doctrine/collections/LICENSE
deleted file mode 100644
index 5e781fce4bb504715ba0ec0188715b18a198ca6b..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/collections/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2006-2013 Doctrine Project
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/core/vendor/doctrine/collections/README.md b/core/vendor/doctrine/collections/README.md
index 627d45bbb29cececc3033d92f167eccdd00304c8..9393a5515ddd2a59583982a76e5dd15956dddd76 100644
--- a/core/vendor/doctrine/collections/README.md
+++ b/core/vendor/doctrine/collections/README.md
@@ -1,17 +1,3 @@
 # Doctrine Collections
 
 Collections Abstraction library
-
-## Changelog
-
-### v1.2
-
-* Add a new ``AbstractLazyCollection``
-
-### v1.1
-
-* Deprecated ``Comparison::IS``, because it's only there for SQL semantics.
-  These are fixed in the ORM instead.
-* Add ``Comparison::CONTAINS`` to perform partial string matches:
-
-        $criteria->andWhere($criteria->expr()->contains('property', 'Foo'));
diff --git a/core/vendor/doctrine/collections/composer.json b/core/vendor/doctrine/collections/composer.json
index dd30961c82de990c9c94312d1098688385f86bc0..38de897c2b5925421a6a0d4cb9bc219be01e2528 100644
--- a/core/vendor/doctrine/collections/composer.json
+++ b/core/vendor/doctrine/collections/composer.json
@@ -17,10 +17,5 @@
     },
     "autoload": {
         "psr-0": { "Doctrine\\Common\\Collections\\": "lib/" }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.2.x-dev"
-        }
     }
 }
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/AbstractLazyCollection.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/AbstractLazyCollection.php
deleted file mode 100644
index 0052a29c7c95fa8d4ef14cc4e15e6bffc7900b3f..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/AbstractLazyCollection.php
+++ /dev/null
@@ -1,343 +0,0 @@
-<?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. For more information, see
- * <http://www.doctrine-project.org>.
- */
-
-namespace Doctrine\Common\Collections;
-
-use Closure;
-
-/**
- * Lazy collection that is backed by a concrete collection
- *
- * @author MichaÃ«l Gallego <mic.gallego@gmail.com>
- * @since  1.2
- */
-abstract class AbstractLazyCollection implements Collection
-{
-    /**
-     * The backed collection to use
-     *
-     * @var Collection
-     */
-    protected $collection;
-
-    /**
-     * @var bool
-     */
-    private $initialized = false;
-
-    /**
-     * {@inheritDoc}
-     */
-    public function count()
-    {
-        $this->initialize();
-        return $this->collection->count();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function add($element)
-    {
-        $this->initialize();
-        return $this->collection->add($element);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function clear()
-    {
-        $this->initialize();
-        $this->collection->clear();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function contains($element)
-    {
-        $this->initialize();
-        return $this->collection->contains($element);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function isEmpty()
-    {
-        $this->initialize();
-        return $this->collection->isEmpty();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function remove($key)
-    {
-        $this->initialize();
-        return $this->collection->remove($key);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function removeElement($element)
-    {
-        $this->initialize();
-        return $this->collection->removeElement($element);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function containsKey($key)
-    {
-        $this->initialize();
-        return $this->collection->containsKey($key);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function get($key)
-    {
-        $this->initialize();
-        return $this->collection->get($key);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getKeys()
-    {
-        $this->initialize();
-        return $this->collection->getKeys();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getValues()
-    {
-        $this->initialize();
-        return $this->collection->getValues();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function set($key, $value)
-    {
-        $this->initialize();
-        $this->collection->set($key, $value);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function toArray()
-    {
-        $this->initialize();
-        return $this->collection->toArray();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function first()
-    {
-        $this->initialize();
-        return $this->collection->first();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function last()
-    {
-        $this->initialize();
-        return $this->collection->last();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function key()
-    {
-        $this->initialize();
-        return $this->collection->key();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function current()
-    {
-        $this->initialize();
-        return $this->collection->current();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function next()
-    {
-        $this->initialize();
-        return $this->collection->next();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function exists(Closure $p)
-    {
-        $this->initialize();
-        return $this->collection->exists($p);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function filter(Closure $p)
-    {
-        $this->initialize();
-        return $this->collection->filter($p);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function forAll(Closure $p)
-    {
-        $this->initialize();
-        return $this->collection->forAll($p);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function map(Closure $func)
-    {
-        $this->initialize();
-        return $this->collection->map($func);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function partition(Closure $p)
-    {
-        $this->initialize();
-        return $this->collection->partition($p);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function indexOf($element)
-    {
-        $this->initialize();
-        return $this->collection->indexOf($element);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function slice($offset, $length = null)
-    {
-        $this->initialize();
-        return $this->collection->slice($offset, $length);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getIterator()
-    {
-        $this->initialize();
-        return $this->collection->getIterator();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function offsetExists($offset)
-    {
-        $this->initialize();
-        return $this->collection->offsetExists($offset);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function offsetGet($offset)
-    {
-        $this->initialize();
-        return $this->collection->offsetGet($offset);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function offsetSet($offset, $value)
-    {
-        $this->initialize();
-        $this->collection->offsetSet($offset, $value);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function offsetUnset($offset)
-    {
-        $this->initialize();
-        $this->collection->offsetUnset($offset);
-    }
-
-    /**
-     * Is the lazy collection already initialized?
-     *
-     * @return bool
-     */
-    public function isInitialized()
-    {
-        return $this->initialized;
-    }
-
-    /**
-     * Initialize the collection
-     *
-     * @return void
-     */
-    protected function initialize()
-    {
-        if (!$this->initialized) {
-            $this->doInitialize();
-            $this->initialized = true;
-        }
-    }
-
-    /**
-     * Do the initialization logic
-     *
-     * @return void
-     */
-    abstract protected function doInitialize();
-}
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php
index 9c2c8e1474815910a2b142d8aa9e8706e4cf07b4..56c385aecf8989cb990bfdf03410325295bdfa4d 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php
@@ -20,15 +20,16 @@
 namespace Doctrine\Common\Collections;
 
 use Closure, ArrayIterator;
+use Doctrine\Common\Collections\Expr\Expression;
 use Doctrine\Common\Collections\Expr\ClosureExpressionVisitor;
 
 /**
  * An ArrayCollection is a Collection implementation that wraps a regular PHP array.
  *
- * @since  2.0
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
+ * @since   2.0
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
  */
 class ArrayCollection implements Collection, Selectable
 {
@@ -50,7 +51,9 @@ public function __construct(array $elements = array())
     }
 
     /**
-     * {@inheritDoc}
+     * Gets the PHP array representation of this collection.
+     *
+     * @return array The PHP array representation of this collection.
      */
     public function toArray()
     {
@@ -58,7 +61,10 @@ public function toArray()
     }
 
     /**
-     * {@inheritDoc}
+     * Sets the internal iterator to the first element in the collection and
+     * returns this element.
+     *
+     * @return mixed
      */
     public function first()
     {
@@ -66,7 +72,10 @@ public function first()
     }
 
     /**
-     * {@inheritDoc}
+     * Sets the internal iterator to the last element in the collection and
+     * returns this element.
+     *
+     * @return mixed
      */
     public function last()
     {
@@ -74,7 +83,9 @@ public function last()
     }
 
     /**
-     * {@inheritDoc}
+     * Gets the current key/index at the current internal iterator position.
+     *
+     * @return mixed
      */
     public function key()
     {
@@ -82,7 +93,9 @@ public function key()
     }
 
     /**
-     * {@inheritDoc}
+     * Moves the internal iterator position to the next element.
+     *
+     * @return mixed
      */
     public function next()
     {
@@ -90,7 +103,9 @@ public function next()
     }
 
     /**
-     * {@inheritDoc}
+     * Gets the element of the collection at the current internal iterator position.
+     *
+     * @return mixed
      */
     public function current()
     {
@@ -98,7 +113,10 @@ public function current()
     }
 
     /**
-     * {@inheritDoc}
+     * Removes an element with a specific key/index from the collection.
+     *
+     * @param mixed $key
+     * @return mixed The removed element or NULL, if no element exists for the given key.
      */
     public function remove($key)
     {
@@ -113,7 +131,10 @@ public function remove($key)
     }
 
     /**
-     * {@inheritDoc}
+     * Removes the specified element from the collection, if it is found.
+     *
+     * @param mixed $element The element to remove.
+     * @return boolean TRUE if this collection contained the specified element, FALSE otherwise.
      */
     public function removeElement($element)
     {
@@ -129,9 +150,12 @@ public function removeElement($element)
     }
 
     /**
-     * Required by interface ArrayAccess.
+     * ArrayAccess implementation of offsetExists()
+     *
+     * @see containsKey()
      *
-     * {@inheritDoc}
+     * @param mixed $offset
+     * @return bool
      */
     public function offsetExists($offset)
     {
@@ -139,9 +163,12 @@ public function offsetExists($offset)
     }
 
     /**
-     * Required by interface ArrayAccess.
+     * ArrayAccess implementation of offsetGet()
      *
-     * {@inheritDoc}
+     * @see get()
+     *
+     * @param mixed $offset
+     * @return mixed
      */
     public function offsetGet($offset)
     {
@@ -149,9 +176,14 @@ public function offsetGet($offset)
     }
 
     /**
-     * Required by interface ArrayAccess.
+     * ArrayAccess implementation of offsetSet()
+     *
+     * @see add()
+     * @see set()
      *
-     * {@inheritDoc}
+     * @param mixed $offset
+     * @param mixed $value
+     * @return bool
      */
     public function offsetSet($offset, $value)
     {
@@ -162,9 +194,12 @@ public function offsetSet($offset, $value)
     }
 
     /**
-     * Required by interface ArrayAccess.
+     * ArrayAccess implementation of offsetUnset()
      *
-     * {@inheritDoc}
+     * @see remove()
+     *
+     * @param mixed $offset
+     * @return mixed
      */
     public function offsetUnset($offset)
     {
@@ -172,7 +207,10 @@ public function offsetUnset($offset)
     }
 
     /**
-     * {@inheritDoc}
+     * Checks whether the collection contains a specific key/index.
+     *
+     * @param mixed $key The key to check for.
+     * @return boolean TRUE if the given key/index exists, FALSE otherwise.
      */
     public function containsKey($key)
     {
@@ -180,7 +218,14 @@ public function containsKey($key)
     }
 
     /**
-     * {@inheritDoc}
+     * Checks whether the given element is contained in the collection.
+     * Only element values are compared, not keys. The comparison of two elements
+     * is strict, that means not only the value but also the type must match.
+     * For objects this means reference equality.
+     *
+     * @param mixed $element
+     * @return boolean TRUE if the given element is contained in the collection,
+     *          FALSE otherwise.
      */
     public function contains($element)
     {
@@ -188,7 +233,10 @@ public function contains($element)
     }
 
     /**
-     * {@inheritDoc}
+     * Tests for the existence of an element that satisfies the given predicate.
+     *
+     * @param Closure $p The predicate.
+     * @return boolean TRUE if the predicate is TRUE for at least one element, FALSE otherwise.
      */
     public function exists(Closure $p)
     {
@@ -201,7 +249,13 @@ public function exists(Closure $p)
     }
 
     /**
-     * {@inheritDoc}
+     * Searches for a given element and, if found, returns the corresponding key/index
+     * of that element. The comparison of two elements is strict, that means not
+     * only the value but also the type must match.
+     * For objects this means reference equality.
+     *
+     * @param mixed $element The element to search for.
+     * @return mixed The key/index of the element or FALSE if the element was not found.
      */
     public function indexOf($element)
     {
@@ -209,7 +263,10 @@ public function indexOf($element)
     }
 
     /**
-     * {@inheritDoc}
+     * Gets the element with the given key/index.
+     *
+     * @param mixed $key The key.
+     * @return mixed The element or NULL, if no element exists for the given key.
      */
     public function get($key)
     {
@@ -220,7 +277,9 @@ public function get($key)
     }
 
     /**
-     * {@inheritDoc}
+     * Gets all keys/indexes of the collection elements.
+     *
+     * @return array
      */
     public function getKeys()
     {
@@ -228,7 +287,9 @@ public function getKeys()
     }
 
     /**
-     * {@inheritDoc}
+     * Gets all elements.
+     *
+     * @return array
      */
     public function getValues()
     {
@@ -236,7 +297,11 @@ public function getValues()
     }
 
     /**
-     * {@inheritDoc}
+     * Returns the number of elements in the collection.
+     *
+     * Implementation of the Countable interface.
+     *
+     * @return integer The number of elements in the collection.
      */
     public function count()
     {
@@ -244,7 +309,13 @@ public function count()
     }
 
     /**
-     * {@inheritDoc}
+     * Adds/sets an element in the collection at the index / with the specified key.
+     *
+     * When the collection is a Map this is like put(key,value)/add(key,value).
+     * When the collection is a List this is like add(position,value).
+     *
+     * @param mixed $key
+     * @param mixed $value
      */
     public function set($key, $value)
     {
@@ -252,7 +323,10 @@ public function set($key, $value)
     }
 
     /**
-     * {@inheritDoc}
+     * Adds an element to the collection.
+     *
+     * @param mixed $value
+     * @return boolean Always TRUE.
      */
     public function add($value)
     {
@@ -261,7 +335,11 @@ public function add($value)
     }
 
     /**
-     * {@inheritDoc}
+     * Checks whether the collection is empty.
+     *
+     * Note: This is preferable over count() == 0.
+     *
+     * @return boolean TRUE if the collection is empty, FALSE otherwise.
      */
     public function isEmpty()
     {
@@ -269,9 +347,9 @@ public function isEmpty()
     }
 
     /**
-     * Required by interface IteratorAggregate.
+     * Gets an iterator for iterating over the elements in the collection.
      *
-     * {@inheritDoc}
+     * @return ArrayIterator
      */
     public function getIterator()
     {
@@ -279,7 +357,11 @@ public function getIterator()
     }
 
     /**
-     * {@inheritDoc}
+     * Applies the given function to each element in the collection and returns
+     * a new collection with the elements returned by the function.
+     *
+     * @param Closure $func
+     * @return Collection
      */
     public function map(Closure $func)
     {
@@ -287,7 +369,11 @@ public function map(Closure $func)
     }
 
     /**
-     * {@inheritDoc}
+     * Returns all the elements of this collection that satisfy the predicate p.
+     * The order of the elements is preserved.
+     *
+     * @param Closure $p The predicate used for filtering.
+     * @return Collection A collection with the results of the filter operation.
      */
     public function filter(Closure $p)
     {
@@ -295,7 +381,11 @@ public function filter(Closure $p)
     }
 
     /**
-     * {@inheritDoc}
+     * Applies the given predicate p to all elements of this collection,
+     * returning true, if the predicate yields true for all elements.
+     *
+     * @param Closure $p The predicate.
+     * @return boolean TRUE, if the predicate yields TRUE for all elements, FALSE otherwise.
      */
     public function forAll(Closure $p)
     {
@@ -309,7 +399,13 @@ public function forAll(Closure $p)
     }
 
     /**
-     * {@inheritDoc}
+     * Partitions this collection in two collections according to a predicate.
+     * Keys are preserved in the resulting collections.
+     *
+     * @param Closure $p The predicate on which to partition.
+     * @return array An array with two elements. The first element contains the collection
+     *               of elements where the predicate returned TRUE, the second element
+     *               contains the collection of elements where the predicate returned FALSE.
      */
     public function partition(Closure $p)
     {
@@ -335,7 +431,7 @@ public function __toString()
     }
 
     /**
-     * {@inheritDoc}
+     * Clears the collection.
      */
     public function clear()
     {
@@ -343,7 +439,15 @@ public function clear()
     }
 
     /**
-     * {@inheritDoc}
+     * Extract a slice of $length elements starting at position $offset from the Collection.
+     *
+     * If $length is null it returns all elements from $offset to the end of the Collection.
+     * Keys have to be preserved by this method. Calling this method will only return the
+     * selected slice and NOT change the elements contained in the collection slice is called on.
+     *
+     * @param int $offset
+     * @param int $length
+     * @return array
      */
     public function slice($offset, $length = null)
     {
@@ -351,7 +455,11 @@ public function slice($offset, $length = null)
     }
 
     /**
-     * {@inheritDoc}
+     * Select all elements from a selectable that match the criteria and
+     * return a new collection containing these elements.
+     *
+     * @param  Criteria $criteria
+     * @return Collection
      */
     public function matching(Criteria $criteria)
     {
@@ -383,3 +491,4 @@ public function matching(Criteria $criteria)
         return new static($filtered);
     }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Collection.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Collection.php
index a0808b38c2a91b7887211e8efcc2d320b0c542a8..51eb9e7a763ff41dc02475fb82fbd814ae535e1a 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Collection.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Collection.php
@@ -38,10 +38,10 @@
  * position unless you explicitly positioned it before. Prefer iteration with
  * external iterators.
  *
- * @since  2.0
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
+ * @since   2.0
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
  */
 interface Collection extends Countable, IteratorAggregate, ArrayAccess
 {
@@ -49,15 +49,12 @@
      * Adds an element at the end of the collection.
      *
      * @param mixed $element The element to add.
-     *
      * @return boolean Always TRUE.
      */
     function add($element);
 
     /**
      * Clears the collection, removing all elements.
-     *
-     * @return void
      */
     function clear();
 
@@ -66,7 +63,6 @@ function clear();
      * This is an O(n) operation, where n is the size of the collection.
      *
      * @param mixed $element The element to search for.
-     *
      * @return boolean TRUE if the collection contains the element, FALSE otherwise.
      */
     function contains($element);
@@ -82,7 +78,6 @@ function isEmpty();
      * Removes the element at the specified index from the collection.
      *
      * @param string|integer $key The kex/index of the element to remove.
-     *
      * @return mixed The removed element or NULL, if the collection did not contain the element.
      */
     function remove($key);
@@ -91,7 +86,6 @@ function remove($key);
      * Removes the specified element from the collection, if it is found.
      *
      * @param mixed $element The element to remove.
-     *
      * @return boolean TRUE if this collection contained the specified element, FALSE otherwise.
      */
     function removeElement($element);
@@ -100,9 +94,8 @@ function removeElement($element);
      * Checks whether the collection contains an element with the specified key/index.
      *
      * @param string|integer $key The key/index to check for.
-     *
      * @return boolean TRUE if the collection contains an element with the specified key/index,
-     *                 FALSE otherwise.
+     *          FALSE otherwise.
      */
     function containsKey($key);
 
@@ -110,7 +103,6 @@ function containsKey($key);
      * Gets the element at the specified key/index.
      *
      * @param string|integer $key The key/index of the element to retrieve.
-     *
      * @return mixed
      */
     function get($key);
@@ -119,7 +111,7 @@ function get($key);
      * Gets all keys/indices of the collection.
      *
      * @return array The keys/indices of the collection, in the order of the corresponding
-     *               elements in the collection.
+     *          elements in the collection.
      */
     function getKeys();
 
@@ -127,17 +119,15 @@ function getKeys();
      * Gets all values of the collection.
      *
      * @return array The values of all elements in the collection, in the order they
-     *               appear in the collection.
+     *          appear in the collection.
      */
     function getValues();
 
     /**
      * Sets an element in the collection at the specified key/index.
      *
-     * @param string|integer $key   The key/index of the element to set.
-     * @param mixed          $value The element to set.
-     *
-     * @return void
+     * @param string|integer $key The key/index of the element to set.
+     * @param mixed $value The element to set.
      */
     function set($key, $value);
 
@@ -149,14 +139,16 @@ function set($key, $value);
     function toArray();
 
     /**
-     * Sets the internal iterator to the first element in the collection and returns this element.
+     * Sets the internal iterator to the first element in the collection and
+     * returns this element.
      *
      * @return mixed
      */
     function first();
 
     /**
-     * Sets the internal iterator to the last element in the collection and returns this element.
+     * Sets the internal iterator to the last element in the collection and
+     * returns this element.
      *
      * @return mixed
      */
@@ -165,21 +157,18 @@ function last();
     /**
      * Gets the key/index of the element at the current iterator position.
      *
-     * @return int|string
      */
     function key();
 
     /**
      * Gets the element of the collection at the current iterator position.
      *
-     * @return mixed
      */
     function current();
 
     /**
-     * Moves the internal iterator position to the next element and returns this element.
+     * Moves the internal iterator position to the next element.
      *
-     * @return mixed
      */
     function next();
 
@@ -187,7 +176,6 @@ function next();
      * Tests for the existence of an element that satisfies the given predicate.
      *
      * @param Closure $p The predicate.
-     *
      * @return boolean TRUE if the predicate is TRUE for at least one element, FALSE otherwise.
      */
     function exists(Closure $p);
@@ -197,16 +185,15 @@ function exists(Closure $p);
      * The order of the elements is preserved.
      *
      * @param Closure $p The predicate used for filtering.
-     *
      * @return Collection A collection with the results of the filter operation.
      */
     function filter(Closure $p);
 
     /**
-     * Tests whether the given predicate p holds for all elements of this collection.
-     * 
-     * @param Closure $p The predicate.
+     * Applies the given predicate p to all elements of this collection,
+     * returning true, if the predicate yields true for all elements.
      *
+     * @param Closure $p The predicate.
      * @return boolean TRUE, if the predicate yields TRUE for all elements, FALSE otherwise.
      */
     function forAll(Closure $p);
@@ -216,7 +203,6 @@ function forAll(Closure $p);
      * a new collection with the elements returned by the function.
      *
      * @param Closure $func
-     *
      * @return Collection
      */
     function map(Closure $func);
@@ -226,7 +212,6 @@ function map(Closure $func);
      * Keys are preserved in the resulting collections.
      *
      * @param Closure $p The predicate on which to partition.
-     *
      * @return array An array with two elements. The first element contains the collection
      *               of elements where the predicate returned TRUE, the second element
      *               contains the collection of elements where the predicate returned FALSE.
@@ -239,21 +224,19 @@ function partition(Closure $p);
      * For objects this means reference equality.
      *
      * @param mixed $element The element to search for.
-     *
-     * @return int|string|bool The key/index of the element or FALSE if the element was not found.
+     * @return mixed The key/index of the element or FALSE if the element was not found.
      */
     function indexOf($element);
 
     /**
-     * Extracts a slice of $length elements starting at position $offset from the Collection.
+     * Extract a slice of $length elements starting at position $offset from the Collection.
      *
      * If $length is null it returns all elements from $offset to the end of the Collection.
      * Keys have to be preserved by this method. Calling this method will only return the
      * selected slice and NOT change the elements contained in the collection slice is called on.
      *
-     * @param int      $offset The offset to start from.
-     * @param int|null $length The maximum number of elements to return, or null for no limit.
-     *
+     * @param int $offset
+     * @param int $length
      * @return array
      */
     function slice($offset, $length = null);
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Criteria.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Criteria.php
index 42929bdcaa2c697eaa860396646b5c2f159dba3b..3b055495b1aabf7e6a11d6176c80f098ed0bd1db 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Criteria.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Criteria.php
@@ -41,12 +41,12 @@ class Criteria
     const DESC = 'DESC';
 
     /**
-     * @var \Doctrine\Common\Collections\ExpressionBuilder|null
+     * @var \Doctrine\Common\Collections\ExpressionBuilder
      */
     private static $expressionBuilder;
 
     /**
-     * @var \Doctrine\Common\Collections\Expr\Expression|null
+     * @var \Doctrine\Common\Collections\Expr\Expression
      */
     private $expression;
 
@@ -56,12 +56,12 @@ class Criteria
     private $orderings;
 
     /**
-     * @var int|null
+     * @var int
      */
     private $firstResult;
 
     /**
-     * @var int|null
+     * @var int
      */
     private $maxResults;
 
@@ -76,7 +76,7 @@ public static function create()
     }
 
     /**
-     * Returns the expression builder.
+     * Return the expression builder.
      *
      * @return \Doctrine\Common\Collections\ExpressionBuilder
      */
@@ -89,12 +89,12 @@ public static function expr()
     }
 
     /**
-     * Construct a new Criteria.
+     * Construct new criteria
      *
      * @param Expression $expression
-     * @param array|null $orderings
-     * @param int|null   $firstResult
-     * @param int|null   $maxResults
+     * @param array $orderings
+     * @param int $firstResult
+     * @param int $maxResults
      */
     public function __construct(Expression $expression = null, array $orderings = null, $firstResult = null, $maxResults = null)
     {
@@ -105,10 +105,9 @@ public function __construct(Expression $expression = null, array $orderings = nu
     }
 
     /**
-     * Sets the where expression to evaluate when this Criteria is searched for.
-     *
-     * @param Expression $expression
+     * Set the where expression to evaluate when this criteria is searched for.
      *
+     * @param Expression
      * @return Criteria
      */
     public function where(Expression $expression)
@@ -118,11 +117,10 @@ public function where(Expression $expression)
     }
 
     /**
-     * Appends the where expression to evaluate when this Criteria is searched for
+     * Append the where expression to evaluate when this criteria is searched for
      * using an AND with previous expression.
      *
-     * @param Expression $expression
-     *
+     * @param Expression
      * @return Criteria
      */
     public function andWhere(Expression $expression)
@@ -139,11 +137,10 @@ public function andWhere(Expression $expression)
     }
 
     /**
-     * Appends the where expression to evaluate when this Criteria is searched for
+     * Append the where expression to evaluate when this criteria is searched for
      * using an OR with previous expression.
      *
-     * @param Expression $expression
-     *
+     * @param Expression
      * @return Criteria
      */
     public function orWhere(Expression $expression)
@@ -160,7 +157,7 @@ public function orWhere(Expression $expression)
     }
 
     /**
-     * Gets the expression attached to this Criteria.
+     * Get the expression attached to this criteria.
      *
      * @return Expression|null
      */
@@ -170,7 +167,7 @@ public function getWhereExpression()
     }
 
     /**
-     * Gets the current orderings of this Criteria.
+     * Get current orderings of this Criteria
      *
      * @return array
      */
@@ -180,15 +177,14 @@ public function getOrderings()
     }
 
     /**
-     * Sets the ordering of the result of this Criteria.
+     * Set the ordering of the result of this criteria.
      *
      * Keys are field and values are the order, being either ASC or DESC.
      *
      * @see Criteria::ASC
      * @see Criteria::DESC
      *
-     * @param array $orderings
-     *
+     * @param array
      * @return Criteria
      */
     public function orderBy(array $orderings)
@@ -198,9 +194,9 @@ public function orderBy(array $orderings)
     }
 
     /**
-     * Gets the current first result option of this Criteria.
+     * Get current first result option of the critera.
      *
-     * @return int|null
+     * @return firstResult.
      */
     public function getFirstResult()
     {
@@ -208,10 +204,9 @@ public function getFirstResult()
     }
 
     /**
-     * Set the number of first result that this Criteria should return.
-     *
-     * @param int|null $firstResult The value to set.
+     * Set number of first result that this criteria should return.
      *
+     * @param firstResult the value to set.
      * @return Criteria
      */
     public function setFirstResult($firstResult)
@@ -221,9 +216,9 @@ public function setFirstResult($firstResult)
     }
 
     /**
-     * Gets maxResults.
+     * Get maxResults.
      *
-     * @return int|null
+     * @return maxResults.
      */
     public function getMaxResults()
     {
@@ -231,10 +226,9 @@ public function getMaxResults()
     }
 
     /**
-     * Sets maxResults.
-     *
-     * @param int|null $maxResults The value to set.
+     * Set maxResults.
      *
+     * @param maxResults the value to set.
      * @return Criteria
      */
     public function setMaxResults($maxResults)
@@ -243,3 +237,4 @@ public function setMaxResults($maxResults)
         return $this;
     }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php
index 50994584c481f92938e2d8e5239dce472be0966c..06ccb047f0da050fd3a8bbd9004d50ce5446072e 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php
@@ -26,42 +26,23 @@
  * by {@ArrayCollection#select()}.
  *
  * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @since  2.3
+ * @since 2.3
  */
 class ClosureExpressionVisitor extends ExpressionVisitor
 {
     /**
-     * Accesses the field of a given object. This field has to be public
-     * directly or indirectly (through an accessor get*, is*, or a magic
-     * method, __get, __call).
+     * Access the field of a given object. This field has to be public directly
+     * or indirectly (through an accessor get* or a magic method, __get, __call).
      *
-     * @param object $object
-     * @param string $field
+     * is*() is not supported.
      *
      * @return mixed
      */
-    public static function getObjectFieldValue($object, $field)
+    static public function getObjectFieldValue($object, $field)
     {
-        if (is_array($object)) {
-            return $object[$field];
-        }
-
-        $accessors = array('get', 'is');
-
-        foreach ($accessors as $accessor) {
-            $accessor .= $field;
-
-            if ( ! method_exists($object, $accessor)) {
-                continue;
-            }
+        $accessor = "get" . $field;
 
-            return $object->$accessor();
-        }
-
-        // __call should be triggered for get.
-        $accessor = $accessors[0] . $field;
-
-        if (method_exists($object, '__call')) {
+        if (method_exists($object, $accessor) || method_exists($object, '__call')) {
             return $object->$accessor();
         }
 
@@ -73,15 +54,15 @@ public static function getObjectFieldValue($object, $field)
     }
 
     /**
-     * Helper for sorting arrays of objects based on multiple fields + orientations.
-     *
-     * @param string   $name
-     * @param int      $orientation
-     * @param \Closure $next
+     * Helper for sorting arrays of objects based on multiple fields +
+     * orientations.
      *
-     * @return \Closure
+     * @param string $name
+     * @param int $orientation
+     * @param Closure $next
+     * @return Closure
      */
-    public static function sortByField($name, $orientation = 1, \Closure $next = null)
+    static public function sortByField($name, $orientation = 1, \Closure $next = null)
     {
         if (!$next) {
             $next = function() {
@@ -111,6 +92,7 @@ public function walkComparison(Comparison $comparison)
 
         switch ($comparison->getOperator()) {
             case Comparison::EQ:
+            case Comparison::IS:
                 return function ($object) use ($field, $value) {
                     return ClosureExpressionVisitor::getObjectFieldValue($object, $field) === $value;
                 };
@@ -150,11 +132,6 @@ public function walkComparison(Comparison $comparison)
                     return ! in_array(ClosureExpressionVisitor::getObjectFieldValue($object, $field), $value);
                 };
 
-            case Comparison::CONTAINS:
-                return function ($object) use ($field, $value) {
-                    return false !== strpos(ClosureExpressionVisitor::getObjectFieldValue($object, $field), $value);
-                };
-
             default:
                 throw new \RuntimeException("Unknown comparison operator: " . $comparison->getOperator());
         }
@@ -191,11 +168,6 @@ public function walkCompositeExpression(CompositeExpression $expr)
         }
     }
 
-    /**
-     * @param array $expressions
-     *
-     * @return callable
-     */
     private function andExpressions($expressions)
     {
         return function ($object) use ($expressions) {
@@ -208,11 +180,6 @@ private function andExpressions($expressions)
         };
     }
 
-    /**
-     * @param array $expressions
-     *
-     * @return callable
-     */
     private function orExpressions($expressions)
     {
         return function ($object) use ($expressions) {
@@ -225,3 +192,4 @@ private function orExpressions($expressions)
         };
     }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Comparison.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Comparison.php
index d54ecf25c7d5af7bde342427fc8dd370b0b79d35..29cfcffa2cb6411c323b65d55811e1221999da42 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Comparison.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Comparison.php
@@ -23,41 +23,24 @@
  * Comparison of a field with a value by the given operator.
  *
  * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @since  2.3
+ * @since 2.3
  */
 class Comparison implements Expression
 {
-    const EQ        = '=';
-    const NEQ       = '<>';
-    const LT        = '<';
-    const LTE       = '<=';
-    const GT        = '>';
-    const GTE       = '>=';
-    const IS        = '='; // no difference with EQ
-    const IN        = 'IN';
-    const NIN       = 'NIN';
-    const CONTAINS  = 'CONTAINS';
+    const EQ   = '=';
+    const NEQ  = '<>';
+    const LT   = '<';
+    const LTE  = '<=';
+    const GT   = '>';
+    const GTE  = '>=';
+    const IS   = 'IS';
+    const IN   = 'IN';
+    const NIN  = 'NIN';
 
-    /**
-     * @var string
-     */
     private $field;
-
-    /**
-     * @var string
-     */
     private $op;
-
-    /**
-     * @var Value
-     */
     private $value;
 
-    /**
-     * @param string $field
-     * @param string $operator
-     * @param mixed  $value
-     */
     public function __construct($field, $operator, $value)
     {
         if ( ! ($value instanceof Value)) {
@@ -69,35 +52,24 @@ public function __construct($field, $operator, $value)
         $this->value = $value;
     }
 
-    /**
-     * @return string
-     */
     public function getField()
     {
         return $this->field;
     }
 
-    /**
-     * @return Value
-     */
     public function getValue()
     {
         return $this->value;
     }
 
-    /**
-     * @return string
-     */
     public function getOperator()
     {
         return $this->op;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public function visit(ExpressionVisitor $visitor)
     {
         return $visitor->walkComparison($this);
     }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php
index 3613c027457791a8cf3d5273ebbdf1aa3c459aec..fe917cf3b54de854581d59ad04378792596991b4 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php
@@ -23,29 +23,16 @@
  * Expression of Expressions combined by AND or OR operation.
  *
  * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @since  2.3
+ * @since 2.3
  */
 class CompositeExpression implements Expression
 {
     const TYPE_AND = 'AND';
     const TYPE_OR = 'OR';
 
-    /**
-     * @var string
-     */
     private $type;
-
-    /**
-     * @var Expression[]
-     */
     private $expressions = array();
 
-    /**
-     * @param string $type
-     * @param array  $expressions
-     *
-     * @throws \RuntimeException
-     */
     public function __construct($type, array $expressions)
     {
         $this->type = $type;
@@ -63,7 +50,7 @@ public function __construct($type, array $expressions)
     }
 
     /**
-     * Returns the list of expressions nested in this composite.
+     * Return the list of expressions nested in this composite.
      *
      * @return Expression[]
      */
@@ -72,19 +59,14 @@ public function getExpressionList()
         return $this->expressions;
     }
 
-    /**
-     * @return string
-     */
     public function getType()
     {
         return $this->type;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public function visit(ExpressionVisitor $visitor)
     {
         return $visitor->walkCompositeExpression($this);
     }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Expression.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Expression.php
index 68db767c0716981fcfd07182ab14dd6f0a7a507b..b0762ad2f44f01e8403212391d0dc8cbaef9e6b1 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Expression.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Expression.php
@@ -26,10 +26,6 @@
  */
 interface Expression
 {
-    /**
-     * @param ExpressionVisitor $visitor
-     *
-     * @return mixed
-     */
     public function visit(ExpressionVisitor $visitor);
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php
index 080afdc6df56b654ade75a3831d83c8a4ed0e5c8..5e69b987c7bf1e672fbba8a3c057d10a948b9fdd 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php
@@ -28,7 +28,7 @@
 abstract class ExpressionVisitor
 {
     /**
-     * Converts a comparison expression into the target query language output.
+     * Convert a comparison expression into the target query language output
      *
      * @param Comparison $comparison
      *
@@ -37,7 +37,7 @@
     abstract public function walkComparison(Comparison $comparison);
 
     /**
-     * Converts a value expression into the target query language part.
+     * Convert a value expression into the target query language part.
      *
      * @param Value $value
      *
@@ -46,7 +46,7 @@
     abstract public function walkValue(Value $value);
 
     /**
-     * Converts a composite expression into the target query language output.
+     * Convert a composite expression into the target query language output
      *
      * @param CompositeExpression $expr
      *
@@ -55,13 +55,11 @@
     abstract public function walkCompositeExpression(CompositeExpression $expr);
 
     /**
-     * Dispatches walking an expression to the appropriate handler.
+     * Dispatch walking an expression to the appropriate handler.
      *
-     * @param Expression $expr
+     * @param Expression
      *
      * @return mixed
-     *
-     * @throws \RuntimeException
      */
     public function dispatch(Expression $expr)
     {
@@ -80,3 +78,4 @@ public function dispatch(Expression $expr)
         }
     }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Value.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Value.php
index 7f6e83143b57505c1ac889b87b4824766c3b9c45..f0df11ac6d1c3aee330c8d95d3c0035246a02364 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Value.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Value.php
@@ -21,32 +21,21 @@
 
 class Value implements Expression
 {
-    /**
-     * @var mixed
-     */
     private $value;
 
-    /**
-     * @param mixed $value
-     */
     public function __construct($value)
     {
         $this->value = $value;
     }
 
-    /**
-     * @return mixed
-     */
     public function getValue()
     {
         return $this->value;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     public function visit(ExpressionVisitor $visitor)
     {
         return $visitor->walkValue($this);
     }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ExpressionBuilder.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ExpressionBuilder.php
index 6539e3c75fd44f27b38e81e6bec5f5f7a76e92ab..b53f0cd747b6232697e3c1d1b873fc468489aa72 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ExpressionBuilder.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ExpressionBuilder.php
@@ -1,9 +1,9 @@
 <?php
 /*
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * THIS SOFTWARE IS PROVIDED BY THE COPYvalue 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
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYvalue
  * 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,
@@ -26,18 +26,12 @@
 /**
  * Builder for Expressions in the {@link Selectable} interface.
  *
- * Important Notice for interoperable code: You have to use scalar
- * values only for comparisons, otherwise the behavior of the comparision
- * may be different between implementations (Array vs ORM vs ODM).
- *
  * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @since  2.3
+ * @since 2.3
  */
 class ExpressionBuilder
 {
     /**
-     * @param mixed $x
-     *
      * @return CompositeExpression
      */
     public function andX($x = null)
@@ -46,8 +40,6 @@ public function andX($x = null)
     }
 
     /**
-     * @param mixed $x
-     *
      * @return CompositeExpression
      */
     public function orX($x = null)
@@ -57,7 +49,7 @@ public function orX($x = null)
 
     /**
      * @param string $field
-     * @param mixed  $value
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -68,7 +60,7 @@ public function eq($field, $value)
 
     /**
      * @param string $field
-     * @param mixed  $value
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -79,7 +71,7 @@ public function gt($field, $value)
 
     /**
      * @param string $field
-     * @param mixed  $value
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -90,7 +82,7 @@ public function lt($field, $value)
 
     /**
      * @param string $field
-     * @param mixed  $value
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -101,7 +93,7 @@ public function gte($field, $value)
 
     /**
      * @param string $field
-     * @param mixed  $value
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -112,7 +104,7 @@ public function lte($field, $value)
 
     /**
      * @param string $field
-     * @param mixed  $value
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -123,17 +115,18 @@ public function neq($field, $value)
 
     /**
      * @param string $field
+     * @param mixed $value
      *
      * @return Comparison
      */
     public function isNull($field)
     {
-        return new Comparison($field, Comparison::EQ, new Value(null));
+        return new Comparison($field, Comparison::IS, new Value(null));
     }
 
     /**
      * @param string $field
-     * @param mixed  $values
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -144,7 +137,7 @@ public function in($field, array $values)
 
     /**
      * @param string $field
-     * @param mixed  $values
+     * @param mixed $value
      *
      * @return Comparison
      */
@@ -152,15 +145,5 @@ public function notIn($field, array $values)
     {
         return new Comparison($field, Comparison::NIN, new Value($values));
     }
-
-    /**
-     * @param string $field
-     * @param mixed  $value
-     *
-     * @return Comparison
-     */
-    public function contains($field, $value)
-    {
-        return new Comparison($field, Comparison::CONTAINS, new Value($value));
-    }
 }
+
diff --git a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Selectable.php b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Selectable.php
index 401d46e4df49626c762a62b6218321072dcc1b9b..675d6ea8b0cdacd6df476fff37db31b0435bd457 100644
--- a/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Selectable.php
+++ b/core/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Selectable.php
@@ -32,17 +32,17 @@
  * EntityManager or Repositories.
  *
  * @author Benjamin Eberlei <kontakt@beberlei.de>
- * @since  2.3
+ * @since 2.3
  */
 interface Selectable
 {
     /**
-     * Selects all elements from a selectable that match the expression and
-     * returns a new collection containing these elements.
+     * Select all elements from a selectable that match the expression and
+     * return a new collection containing these elements.
      *
      * @param Criteria $criteria
-     *
      * @return Collection
      */
     function matching(Criteria $criteria);
 }
+
diff --git a/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/AbstractLazyCollectionTest.php b/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/AbstractLazyCollectionTest.php
deleted file mode 100644
index 4de82cc2037d38d92b82d7e65d6b066b5983c585..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/AbstractLazyCollectionTest.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-namespace Doctrine\Tests\Common\Collections;
-
-use Doctrine\Tests\LazyArrayCollection;
-
-class AbstractLazyCollectionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testLazyCollection()
-    {
-        $collection = new LazyArrayCollection();
-
-        $this->assertFalse($collection->isInitialized());
-        $this->assertCount(3, $collection);
-
-        $collection->add('bar');
-        $this->assertTrue($collection->isInitialized());
-        $this->assertCount(4, $collection);
-    }
-}
diff --git a/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ClosureExpressionVisitorTest.php b/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ClosureExpressionVisitorTest.php
index b640043e6eafe285e6d86f4af27cad6900a436b0..e40afba7c28a06567877249b437ecd38726804e5 100644
--- a/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ClosureExpressionVisitorTest.php
+++ b/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ClosureExpressionVisitorTest.php
@@ -13,7 +13,7 @@
  * 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. For more information, see
+ * and is licensed under the LGPL. For more information, see
  * <http://www.doctrine-project.org>.
  */
 
@@ -36,20 +36,6 @@ public function setUp()
         $this->builder = new ExpressionBuilder();
     }
 
-    public function testGetObjectFieldValueIsAccessor()
-    {
-        $object = new TestObject(1, 2, true);
-
-        $this->assertTrue($this->visitor->getObjectFieldValue($object, 'baz'));
-    }
-
-    public function testGetObjectFieldValueMagicCallMethod()
-    {
-        $object = new TestObject(1, 2, true, 3);
-
-        $this->assertEquals(3, $this->visitor->getObjectFieldValue($object, 'qux'));
-    }
-
     public function testWalkEqualsComparison()
     {
         $closure = $this->visitor->walkComparison($this->builder->eq("foo", 1));
@@ -120,14 +106,6 @@ public function testWalkNotInComparison()
         $this->assertTrue($closure(new TestObject(4)));
     }
 
-    public function testWalkContainsComparison()
-    {
-        $closure = $this->visitor->walkComparison($this->builder->contains('foo', 'hello'));
-
-        $this->assertTrue($closure(new TestObject('hello world')));
-        $this->assertFalse($closure(new TestObject('world')));
-    }
-
     public function testWalkAndCompositeExpression()
     {
         $closure = $this->visitor->walkCompositeExpression(
@@ -194,35 +172,17 @@ public function testSortDelegate()
         $this->assertEquals("b", $objects[1]->getBar());
         $this->assertEquals("c", $objects[2]->getBar());
     }
-
-    public function testArrayComparison()
-    {
-        $closure = $this->visitor->walkComparison($this->builder->eq("foo", 42));
-
-        $this->assertTrue($closure(array('foo' => 42)));
-    }
 }
 
 class TestObject
 {
     private $foo;
     private $bar;
-    private $baz;
-    private $qux;
 
-    public function __construct($foo = null, $bar = null, $baz = null, $qux = null)
+    public function __construct($foo = null, $bar = null)
     {
         $this->foo = $foo;
         $this->bar = $bar;
-        $this->baz = $baz;
-        $this->qux = $qux;
-    }
-
-    public function __call($name, $arguments)
-    {
-        if ('getqux' === $name) {
-            return $this->qux;
-        }
     }
 
     public function getFoo()
@@ -234,10 +194,5 @@ public function getBar()
     {
         return $this->bar;
     }
-
-    public function isBaz()
-    {
-        return $this->baz;
-    }
 }
 
diff --git a/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php b/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php
index 06d415570ed44b9f6d1f949308d1185bca798a1d..68896b37f7a302925ce3a6ca56f70d30c17d2935 100644
--- a/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php
+++ b/core/vendor/doctrine/collections/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php
@@ -108,15 +108,7 @@ public function testIsNull()
         $expr = $this->builder->isNull("a");
 
         $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr);
-        $this->assertEquals(Comparison::EQ, $expr->getOperator());
-    }
-
-    public function testContains()
-    {
-        $expr = $this->builder->contains("a", "b");
-
-        $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr);
-        $this->assertEquals(Comparison::CONTAINS, $expr->getOperator());
+        $this->assertEquals(Comparison::IS, $expr->getOperator());
     }
 }
 
diff --git a/core/vendor/doctrine/collections/tests/Doctrine/Tests/LazyArrayCollection.php b/core/vendor/doctrine/collections/tests/Doctrine/Tests/LazyArrayCollection.php
deleted file mode 100644
index 56736b83b207860c27f10755c0a016fd8aace7cc..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/collections/tests/Doctrine/Tests/LazyArrayCollection.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Doctrine\Tests;
-
-use Doctrine\Common\Collections\AbstractLazyCollection;
-use Doctrine\Common\Collections\ArrayCollection;
-
-/**
- * Simple lazy collection that used an ArrayCollection as backed collection
- */
-class LazyArrayCollection extends AbstractLazyCollection
-{
-    /**
-     * Do the initialization logic
-     *
-     * @return void
-     */
-    protected function doInitialize()
-    {
-        $this->collection = new ArrayCollection(array('a', 'b', 'c'));
-    }
-}
diff --git a/core/vendor/doctrine/instantiator/.travis.yml b/core/vendor/doctrine/instantiator/.travis.yml
index 0f686a9c7269061e3dd6edb4abb3d321cf6a9c6b..c37d0f7450b6c2aacb7c48a2add060e3a8cb20dc 100644
--- a/core/vendor/doctrine/instantiator/.travis.yml
+++ b/core/vendor/doctrine/instantiator/.travis.yml
@@ -23,4 +23,5 @@ after_script:
 
 matrix:
   allow_failures:
+    - php: 5.6 # Depends on https://github.com/php/php-src/pull/733
     - php: hhvm-nightly
diff --git a/core/vendor/doctrine/instantiator/README.md b/core/vendor/doctrine/instantiator/README.md
index 393ec7caafc0bdf0e2c912af57825294d960a6fd..751b215b56acad8392992d22cf811a8d93b16955 100644
--- a/core/vendor/doctrine/instantiator/README.md
+++ b/core/vendor/doctrine/instantiator/README.md
@@ -16,12 +16,12 @@ This library provides a way of avoiding usage of constructors when instantiating
 The suggested installation method is via [composer](https://getcomposer.org/):
 
 ```sh
-php composer.phar require "doctrine/instantiator:~1.0.3"
+php composer.phar require "doctrine/instantiator:~1.0,>=1.0.2"
 ```
 
 ## Usage
 
-The instantiator is able to create new instances of any class without using the constructor or any API of the class
+The instantiator is able to create new instances of any class without using the constructor of the class
 itself:
 
 ```php
diff --git a/core/vendor/doctrine/instantiator/composer.json b/core/vendor/doctrine/instantiator/composer.json
index 89d59f600d31a51bb8f46574870a907e1a6e2e45..422dbafae6fa272de205b7b46195340890fca57d 100644
--- a/core/vendor/doctrine/instantiator/composer.json
+++ b/core/vendor/doctrine/instantiator/composer.json
@@ -16,7 +16,7 @@
         }
     ],
     "require": {
-        "php": ">=5.3,<8.0-DEV"
+        "php": "~5.3"
     },
     "require-dev": {
         "ext-phar":                  "*",
diff --git a/core/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php b/core/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
index 98868cfa19569417311504d64a3fcf9bb7889093..c7204c148765f65dd062d28c66d5a9630aeadab8 100644
--- a/core/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
+++ b/core/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
@@ -69,7 +69,8 @@ public function instantiate($className)
         $instance   = $factory();
         $reflection = new ReflectionClass($instance);
 
-        if ($this->isSafeToClone($reflection)) {
+        // not cloneable if it implements `__clone`, as we want to avoid calling it
+        if (! $reflection->hasMethod('__clone')) {
             self::$cachedCloneables[$className] = clone $instance;
         }
 
@@ -234,21 +235,4 @@ private function isPhpVersionWithBrokenSerializationFormat()
     {
         return PHP_VERSION_ID === 50429 || PHP_VERSION_ID === 50513;
     }
-
-    /**
-     * Checks if a class is cloneable
-     *
-     * @param ReflectionClass $reflection
-     *
-     * @return bool
-     */
-    private function isSafeToClone(ReflectionClass $reflection)
-    {
-        if (method_exists($reflection, 'isCloneable') && ! $reflection->isCloneable()) {
-            return false;
-        }
-
-        // not cloneable if it implements `__clone`, as we want to avoid calling it
-        return ! $reflection->hasMethod('__clone');
-    }
 }
diff --git a/core/vendor/doctrine/instantiator/tests/DoctrineTest/InstantiatorTest/InstantiatorTest.php b/core/vendor/doctrine/instantiator/tests/DoctrineTest/InstantiatorTest/InstantiatorTest.php
index e7f6e944bf8005f807e4914a289800c404320e76..95282cb5dd3f55caea19fb194bc8e24e60c0e680 100644
--- a/core/vendor/doctrine/instantiator/tests/DoctrineTest/InstantiatorTest/InstantiatorTest.php
+++ b/core/vendor/doctrine/instantiator/tests/DoctrineTest/InstantiatorTest/InstantiatorTest.php
@@ -169,7 +169,6 @@ public function getInstantiableClasses()
             array('DoctrineTest\\InstantiatorTestAsset\\SimpleSerializableAsset'),
             array('DoctrineTest\\InstantiatorTestAsset\\PharExceptionAsset'),
             array('DoctrineTest\\InstantiatorTestAsset\\UnCloneableAsset'),
-            array('DoctrineTest\\InstantiatorTestAsset\\XMLReaderAsset'),
         );
 
         if (\PHP_VERSION_ID === 50429 || \PHP_VERSION_ID === 50513) {
diff --git a/core/vendor/doctrine/instantiator/tests/DoctrineTest/InstantiatorTestAsset/XMLReaderAsset.php b/core/vendor/doctrine/instantiator/tests/DoctrineTest/InstantiatorTestAsset/XMLReaderAsset.php
deleted file mode 100644
index 39ee6992aee6d7e12a180411394299f91b944877..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/instantiator/tests/DoctrineTest/InstantiatorTestAsset/XMLReaderAsset.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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. For more information, see
- * <http://www.doctrine-project.org>.
- */
-
-namespace DoctrineTest\InstantiatorTestAsset;
-
-use BadMethodCallException;
-use XMLReader;
-
-/**
- * Test asset that extends an internal PHP class
- *
- * @author Dave Marshall <dave@atst.io>
- */
-class XMLReaderAsset extends XMLReader
-{
-    /**
-     * Constructor - should not be called
-     *
-     * @throws BadMethodCallException
-     */
-    public function __construct()
-    {
-        throw new BadMethodCallException('Not supposed to be called!');
-    }
-}
diff --git a/core/vendor/doctrine/lexer/LICENSE b/core/vendor/doctrine/lexer/LICENSE
deleted file mode 100644
index 5e781fce4bb504715ba0ec0188715b18a198ca6b..0000000000000000000000000000000000000000
--- a/core/vendor/doctrine/lexer/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2006-2013 Doctrine Project
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/core/vendor/doctrine/lexer/composer.json b/core/vendor/doctrine/lexer/composer.json
index 8cd694c6525462fb0189392c3862c1f0d22a8cdf..5e6e83a1ac9c11b4c9fa9d020830e57351efe151 100644
--- a/core/vendor/doctrine/lexer/composer.json
+++ b/core/vendor/doctrine/lexer/composer.json
@@ -15,10 +15,5 @@
     },
     "autoload": {
         "psr-0": { "Doctrine\\Common\\Lexer\\": "lib/" }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.0.x-dev"
-        }
     }
 }
diff --git a/core/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/core/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php
index 399a55230b0871e19fea7c5d2a6466a08d6fcd43..eb6cf7c022ebf9b35c9b70f7bfdf6e6a1afb874b 100644
--- a/core/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php
+++ b/core/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php
@@ -22,58 +22,35 @@
 /**
  * Base class for writing simple lexers, i.e. for creating small DSLs.
  *
- * @since  2.0
- * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author Jonathan Wage <jonwage@gmail.com>
- * @author Roman Borschel <roman@code-factory.org>
+ * @since   2.0
+ * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author  Jonathan Wage <jonwage@gmail.com>
+ * @author  Roman Borschel <roman@code-factory.org>
  */
 abstract class AbstractLexer
 {
     /**
-     * Lexer original input string.
-     *
-     * @var string
-     */
-    private $input;
-
-    /**
-     * Array of scanned tokens.
-     *
-     * Each token is an associative array containing three items:
-     *  - 'value'    : the string value of the token in the input string
-     *  - 'type'     : the type of the token (identifier, numeric, string, input
-     *                 parameter, none)
-     *  - 'position' : the position of the token in the input string
-     *
-     * @var array
+     * @var array Array of scanned tokens
      */
     private $tokens = array();
 
     /**
-     * Current lexer position in input string.
-     *
-     * @var integer
+     * @var integer Current lexer position in input string
      */
     private $position = 0;
 
     /**
-     * Current peek of current lexer position.
-     *
-     * @var integer
+     * @var integer Current peek of current lexer position
      */
     private $peek = 0;
 
     /**
-     * The next token in the input.
-     *
-     * @var array
+     * @var array The next token in the input.
      */
     public $lookahead;
 
     /**
-     * The last matched/seen token.
-     *
-     * @var array
+     * @var array The last matched/seen token.
      */
     public $token;
 
@@ -84,22 +61,16 @@
      * Any unprocessed tokens from any previous input are lost.
      *
      * @param string $input The input to be tokenized.
-     *
-     * @return void
      */
     public function setInput($input)
     {
-        $this->input  = $input;
         $this->tokens = array();
-
         $this->reset();
         $this->scan($input);
     }
 
     /**
      * Resets the lexer.
-     *
-     * @return void
      */
     public function reset()
     {
@@ -111,8 +82,6 @@ public function reset()
 
     /**
      * Resets the peek pointer to 0.
-     *
-     * @return void
      */
     public function resetPeek()
     {
@@ -122,9 +91,7 @@ public function resetPeek()
     /**
      * Resets the lexer position on the input to the given position.
      *
-     * @param integer $position Position to place the lexical scanner.
-     *
-     * @return void
+     * @param integer $position Position to place the lexical scanner
      */
     public function resetPosition($position = 0)
     {
@@ -132,22 +99,9 @@ public function resetPosition($position = 0)
     }
 
     /**
-     * Retrieve the original lexer's input until a given position. 
-     *
-     * @param integer $position
-     *
-     * @return string
-     */
-    public function getInputUntilPosition($position)
-    {
-        return substr($this->input, 0, $position);
-    }
-
-    /**
      * Checks whether a given token matches the current lookahead.
      *
      * @param integer|string $token
-     *
      * @return boolean
      */
     public function isNextToken($token)
@@ -156,10 +110,9 @@ public function isNextToken($token)
     }
 
     /**
-     * Checks whether any of the given tokens matches the current lookahead.
+     * Checks whether any of the given tokens matches the current lookahead
      *
      * @param array $tokens
-     *
      * @return boolean
      */
     public function isNextTokenAny(array $tokens)
@@ -170,7 +123,13 @@ public function isNextTokenAny(array $tokens)
     /**
      * Moves to the next token in the input string.
      *
-     * @return boolean
+     * A token is an associative array containing three items:
+     *  - 'value'    : the string value of the token in the input string
+     *  - 'type'     : the type of the token (identifier, numeric, string, input
+     *                 parameter, none)
+     *  - 'position' : the position of the token in the input string
+     *
+     * @return array|null the next token; null if there is no more tokens left
      */
     public function moveNext()
     {
@@ -186,8 +145,6 @@ public function moveNext()
      * Tells the lexer to skip input tokens until it sees a token with the given value.
      *
      * @param string $type The token type to skip until.
-     *
-     * @return void
      */
     public function skipUntil($type)
     {
@@ -197,11 +154,10 @@ public function skipUntil($type)
     }
 
     /**
-     * Checks if given value is identical to the given token.
+     * Checks if given value is identical to the given token
      *
-     * @param mixed   $value
+     * @param mixed $value
      * @param integer $token
-     *
      * @return boolean
      */
     public function isA($value, $token)
@@ -212,7 +168,7 @@ public function isA($value, $token)
     /**
      * Moves the lookahead token forward.
      *
-     * @return array|null The next token or NULL if there are no more tokens ahead.
+     * @return array | null The next token or NULL if there are no more tokens ahead.
      */
     public function peek()
     {
@@ -238,21 +194,15 @@ public function glimpse()
     /**
      * Scans the input string for tokens.
      *
-     * @param string $input A query string.
-     *
-     * @return void
+     * @param string $input a query string
      */
     protected function scan($input)
     {
         static $regex;
 
         if ( ! isset($regex)) {
-            $regex = sprintf(
-                '/(%s)|%s/%s',
-                implode(')|(', $this->getCatchablePatterns()),
-                implode('|', $this->getNonCatchablePatterns()),
-                $this->getModifiers()
-            );
+            $regex = '/(' . implode(')|(', $this->getCatchablePatterns()) . ')|'
+                   . implode('|', $this->getNonCatchablePatterns()) . '/i';
         }
 
         $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE;
@@ -274,7 +224,6 @@ protected function scan($input)
      * Gets the literal for a given token.
      *
      * @param integer $token
-     *
      * @return string
      */
     public function getLiteral($token)
@@ -293,16 +242,6 @@ public function getLiteral($token)
     }
 
     /**
-     * Regex modifiers
-     *
-     * @return string
-     */
-    protected function getModifiers()
-    {
-        return 'i';
-    }
-
-    /**
      * Lexical catchable patterns.
      *
      * @return array
@@ -320,7 +259,6 @@ protected function getModifiers()
      * Retrieve token type. Also processes the token value if necessary.
      *
      * @param string $value
-     *
      * @return integer
      */
     abstract protected function getType(&$value);
diff --git a/core/vendor/egulias/email-validator/.travis.yml b/core/vendor/egulias/email-validator/.travis.yml
index f25de0fb887290a0cd00e71a02b092233abe4c4e..d3583de4534896ad9a18208e6076c719ee5e8501 100644
--- a/core/vendor/egulias/email-validator/.travis.yml
+++ b/core/vendor/egulias/email-validator/.travis.yml
@@ -1,5 +1,3 @@
-sudo: false
-
 language: php
 
 php:
@@ -7,25 +5,11 @@ php:
   - 5.4
   - 5.5
   - 5.6
-  - 7.0
   - hhvm
 
-env:
-  global:
-    - deps=no
-
-matrix:
-  fast_finish: true
-  include:
-    - php: 5.3
-      env: deps=low
-    - php: 5.6
-      env: deps=high
-
-install:
-  - if [ "$deps" = "no" ]; then composer install; fi
-  - if [ "$deps" = "low" ]; then composer update --prefer-lowest; fi
-  - if [ "$deps" = "high" ]; then composer update; fi
+before_script:
+ - wget http://getcomposer.org/composer.phar
+ - php composer.phar install --dev --no-interaction
 
 script:
  - mkdir -p build/logs
diff --git a/core/vendor/egulias/email-validator/README.md b/core/vendor/egulias/email-validator/README.md
index 262693bf789ad02162502efbb63982d2854ef691..4bfe310397ec2afb5f74bc61fb124d45aa75862e 100644
--- a/core/vendor/egulias/email-validator/README.md
+++ b/core/vendor/egulias/email-validator/README.md
@@ -1,16 +1,8 @@
-#EmailValidator
-[![Build Status](https://travis-ci.org/egulias/EmailValidator.png?branch=master)](https://travis-ci.org/egulias/EmailValidator) [![Coverage Status](https://coveralls.io/repos/egulias/EmailValidator/badge.png?branch=master)](https://coveralls.io/r/egulias/EmailValidator?branch=master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/egulias/EmailValidator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6/small.png)](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6)
+EmailValidator [![Build Status](https://travis-ci.org/egulias/EmailValidator.png?branch=master)](https://travis-ci.org/egulias/EmailValidator) [![Coverage Status](https://coveralls.io/repos/egulias/EmailValidator/badge.png?branch=master)](https://coveralls.io/r/egulias/EmailValidator?branch=master) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/b18d473e-bd5a-4d88-a7b2-7aeaee0ebd7b/small.png)](https://insight.sensiolabs.com/projects/b18d473e-bd5a-4d88-a7b2-7aeaee0ebd7b)[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/egulias/EmailValidator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master)
 =============================
-With the help of
 
-![Powered by PhpStorm](https://www.jetbrains.com/phpstorm/documentation/docs/logo_phpstorm.png)
 ##Installation##
-
-Run the command below to install via Composer
-
-```shell
-composer require egulias/email-validator
-```
+Install via composer. Add to your current compooser.json ```require``` key: ```"egulias/email-validator":"1.0.x-dev" ```
 
 ##Usage##
 
@@ -32,7 +24,7 @@ More advanced example (returns detailed diagnostic error codes):
 ```php
 <?php
 
-use Egulias\EmailValidator\EmailValidator;
+use egulias\EmailValidator\EmailValidator;
 
 $validator = new EmailValidator;
 $email = 'dominic@sayers.cc';
@@ -54,6 +46,6 @@ As this is a port from another library and work, here are other people related t
 * Josepf Bielawski [@stloyd](http://github.com/stloyd):      		For its first re-work of Dominic's lib
 * Dominic Sayers [@dominicsayers](http://github.com/dominicsayers):  	The original isemail function
 
-##License##
-Released under the MIT License attached with this code.
+##Licence##
+Released under the MIT Licence attached with this code.
 
diff --git a/core/vendor/egulias/email-validator/composer.json b/core/vendor/egulias/email-validator/composer.json
index 1ccb77a144c435d76c3c20597955d29db63cbfac..a9961625fa3b846871b343c357c588643f676e33 100644
--- a/core/vendor/egulias/email-validator/composer.json
+++ b/core/vendor/egulias/email-validator/composer.json
@@ -3,23 +3,22 @@
   "description":  "A library for validating emails",
   "homepage":     "https://github.com/egulias/EmailValidator",
   "type":         "Library",
-  "keywords":     ["email", "validation", "validator", "emailvalidation", "emailvalidator"],
+  "keywords":     ["email", "validation", "validator"],
   "license":      "MIT",
   "authors": [
     {"name": "Eduardo Gulias Davis"}
   ],
   "extra": {
     "branch-alias": {
-      "dev-master": "2.0.x-dev"
+      "dev-master": "1.0.x-dev"
     }
   },
   "require":      {
     "php": ">= 5.3.3",
-    "doctrine/lexer": "~1.0,>=1.0.1"
+    "doctrine/lexer": "~1.0"
   },
   "require-dev" :   {
-    "satooshi/php-coveralls": "dev-master",
-    "phpunit/phpunit": "~4.4"
+    "satooshi/php-coveralls": "dev-master"
   },
   "autoload": {
     "psr-0": {
diff --git a/core/vendor/egulias/email-validator/composer.lock b/core/vendor/egulias/email-validator/composer.lock
index 49f7df867e60166af1aa44dd5e8dd5caca57bf83..e7c1abdf683ab9755166483b9c88a568d4fc43d7 100644
--- a/core/vendor/egulias/email-validator/composer.lock
+++ b/core/vendor/egulias/email-validator/composer.lock
@@ -1,34 +1,28 @@
 {
     "_readme": [
         "This file locks the dependencies of your project to a known state",
-        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
-        "This file is @generated automatically"
+        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
     ],
-    "hash": "9426f5a00cf0f71d83c287a7c0ff392b",
+    "hash": "cca347a6b95164b1121e034b95f824ec",
     "packages": [
         {
             "name": "doctrine/lexer",
-            "version": "v1.0.1",
+            "version": "v1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+                "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/2f708a85bb3aab5d99dab8be435abd73e0b18acb",
+                "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
             "autoload": {
                 "psr-0": {
                     "Doctrine\\Common\\Lexer\\": "lib/"
@@ -40,16 +34,19 @@
             ],
             "authors": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com",
+                    "homepage": "http://www.instaclick.com"
                 },
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
                 },
                 {
                     "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "http://jmsyst.com",
+                    "role": "Developer of wrapped JMSSerializerBundle"
                 }
             ],
             "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
@@ -58,76 +55,22 @@
                 "lexer",
                 "parser"
             ],
-            "time": "2014-09-09 13:34:57"
+            "time": "2013-01-12 18:59:04"
         }
     ],
     "packages-dev": [
         {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3,<8.0-DEV"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2015-06-14 21:17:01"
-        },
-        {
             "name": "guzzle/guzzle",
-            "version": "v3.9.3",
+            "version": "v3.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle3.git",
-                "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9"
+                "reference": "92d9934f2fca1da15178c91239576ae26e505e60"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
-                "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
+                "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/92d9934f2fca1da15178c91239576ae26e505e60",
+                "reference": "92d9934f2fca1da15178c91239576ae26e505e60",
                 "shasum": ""
             },
             "require": {
@@ -168,13 +111,10 @@
                 "zendframework/zend-cache": "2.*,<2.3",
                 "zendframework/zend-log": "2.*,<2.3"
             },
-            "suggest": {
-                "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.9-dev"
+                    "dev-master": "3.8-dev"
                 }
             },
             "autoload": {
@@ -192,500 +132,24 @@
                     "name": "Michael Dowling",
                     "email": "mtdowling@gmail.com",
                     "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Guzzle Community",
-                    "homepage": "https://github.com/guzzle/guzzle/contributors"
-                }
-            ],
-            "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "client",
-                "curl",
-                "framework",
-                "http",
-                "http client",
-                "rest",
-                "web service"
-            ],
-            "time": "2015-03-18 18:23:50"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "2.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
-                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "suggest": {
-                "dflydev/markdown": "~1.0",
-                "erusev/parsedown": "~1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "phpDocumentor": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "mike.vanriel@naenius.com"
-                }
-            ],
-            "time": "2015-02-03 12:10:50"
-        },
-        {
-            "name": "phpspec/prophecy",
-            "version": "v1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373",
-                "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "phpdocumentor/reflection-docblock": "~2.0",
-                "sebastian/comparator": "~1.1"
-            },
-            "require-dev": {
-                "phpspec/phpspec": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte@gmail.com"
-                }
-            ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
-            "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
-            ],
-            "time": "2015-04-27 22:15:08"
-        },
-        {
-            "name": "phpunit/php-code-coverage",
-            "version": "2.1.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
-                "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "phpunit/php-file-iterator": "~1.3",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-token-stream": "~1.3",
-                "sebastian/environment": "~1.0",
-                "sebastian/version": "~1.0"
-            },
-            "require-dev": {
-                "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4"
-            },
-            "suggest": {
-                "ext-dom": "*",
-                "ext-xdebug": ">=2.2.1",
-                "ext-xmlwriter": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.1.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
-            "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
-            ],
-            "time": "2015-06-19 07:11:55"
-        },
-        {
-            "name": "phpunit/php-file-iterator",
-            "version": "1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
-                "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
-            "time": "2015-04-02 05:19:05"
-        },
-        {
-            "name": "phpunit/php-text-template",
-            "version": "1.2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-            "keywords": [
-                "template"
-            ],
-            "time": "2015-06-21 13:50:34"
-        },
-        {
-            "name": "phpunit/php-timer",
-            "version": "1.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d",
-                "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
-            "keywords": [
-                "timer"
-            ],
-            "time": "2015-06-13 07:35:30"
-        },
-        {
-            "name": "phpunit/php-token-stream",
-            "version": "1.4.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
-                "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Wrapper around PHP's tokenizer extension.",
-            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-            "keywords": [
-                "tokenizer"
-            ],
-            "time": "2015-06-19 03:43:16"
-        },
-        {
-            "name": "phpunit/phpunit",
-            "version": "4.7.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f6701ef3faea759acd1910a7751d8d102a7fd5bc",
-                "reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=5.3.3",
-                "phpspec/prophecy": "~1.3,>=1.3.1",
-                "phpunit/php-code-coverage": "~2.1",
-                "phpunit/php-file-iterator": "~1.4",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-timer": ">=1.0.6",
-                "phpunit/phpunit-mock-objects": "~2.3",
-                "sebastian/comparator": "~1.1",
-                "sebastian/diff": "~1.2",
-                "sebastian/environment": "~1.2",
-                "sebastian/exporter": "~1.2",
-                "sebastian/global-state": "~1.0",
-                "sebastian/version": "~1.0",
-                "symfony/yaml": "~2.1|~3.0"
-            },
-            "suggest": {
-                "phpunit/php-invoker": "~1.1"
-            },
-            "bin": [
-                "phpunit"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.7.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
-            "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
-            ],
-            "time": "2015-06-21 07:23:36"
-        },
-        {
-            "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/92408bb1968a81b3217a6fdf6c1a198da83caa35",
-                "reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "~1.0,>=1.0.2",
-                "php": ">=5.3.3",
-                "phpunit/php-text-template": "~1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "suggest": {
-                "ext-soap": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
+                },
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
                 }
             ],
-            "description": "Mock Object library for PHPUnit",
-            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
             "keywords": [
-                "mock",
-                "xunit"
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
             ],
-            "time": "2015-06-11 15:55:48"
+            "time": "2014-05-07 17:04:22"
         },
         {
             "name": "psr/log",
@@ -731,18 +195,18 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/satooshi/php-coveralls.git",
-                "reference": "2fbf803803d179ab1082807308a67bbd5a760c70"
+                "reference": "b7271847c84d160f5b0aae83e45c225e8ffc96f4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/2fbf803803d179ab1082807308a67bbd5a760c70",
-                "reference": "2fbf803803d179ab1082807308a67bbd5a760c70",
+                "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/b7271847c84d160f5b0aae83e45c225e8ffc96f4",
+                "reference": "b7271847c84d160f5b0aae83e45c225e8ffc96f4",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
                 "ext-simplexml": "*",
-                "guzzle/guzzle": ">=2.7",
+                "guzzle/guzzle": ">=3.0",
                 "php": ">=5.3",
                 "psr/log": "1.0.0",
                 "symfony/config": ">=2.0",
@@ -752,7 +216,7 @@
             },
             "require-dev": {
                 "apigen/apigen": "2.8.*@stable",
-                "pdepend/pdepend": "dev-master as 2.0.0",
+                "pdepend/pdepend": "dev-master",
                 "phpmd/phpmd": "dev-master",
                 "phpunit/php-invoker": ">=1.1.0,<1.2.0",
                 "phpunit/phpunit": "3.7.*@stable",
@@ -798,408 +262,35 @@
                 "github",
                 "test"
             ],
-            "time": "2014-11-11 15:35:34"
-        },
-        {
-            "name": "sebastian/comparator",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "1dd8869519a225f7f2b9eb663e225298fade819e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e",
-                "reference": "1dd8869519a225f7f2b9eb663e225298fade819e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "sebastian/diff": "~1.2",
-                "sebastian/exporter": "~1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "http://www.github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
-            "time": "2015-01-29 16:28:08"
-        },
-        {
-            "name": "sebastian/diff",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
-                "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Diff implementation",
-            "homepage": "http://www.github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff"
-            ],
-            "time": "2015-02-22 15:13:53"
-        },
-        {
-            "name": "sebastian/environment",
-            "version": "1.2.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e",
-                "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "time": "2015-01-01 10:01:08"
-        },
-        {
-            "name": "sebastian/exporter",
-            "version": "1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "84839970d05254c73cde183a721c7af13aede943"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943",
-                "reference": "84839970d05254c73cde183a721c7af13aede943",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "sebastian/recursion-context": "~1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2015-01-27 07:23:06"
-        },
-        {
-            "name": "sebastian/global-state",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
-                "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "suggest": {
-                "ext-uopz": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
-            "keywords": [
-                "global state"
-            ],
-            "time": "2014-10-06 09:23:50"
-        },
-        {
-            "name": "sebastian/recursion-context",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "3989662bbb30a29d20d9faa04a846af79b276252"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
-                "reference": "3989662bbb30a29d20d9faa04a846af79b276252",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                }
-            ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2015-01-24 09:48:32"
-        },
-        {
-            "name": "sebastian/version",
-            "version": "1.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "shasum": ""
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21 13:59:46"
+            "time": "2014-05-14 13:09:37"
         },
         {
             "name": "symfony/config",
-            "version": "v2.7.1",
+            "version": "v2.4.5",
+            "target-dir": "Symfony/Component/Config",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Config.git",
-                "reference": "58ded81f1f582a87c528ef3dae9a859f78b5f374"
+                "reference": "2effc67af6f21a0d267210b72d0b0b691d113528"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Config/zipball/58ded81f1f582a87c528ef3dae9a859f78b5f374",
-                "reference": "58ded81f1f582a87c528ef3dae9a859f78b5f374",
+                "url": "https://api.github.com/repos/symfony/Config/zipball/2effc67af6f21a0d267210b72d0b0b691d113528",
+                "reference": "2effc67af6f21a0d267210b72d0b0b691d113528",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9",
+                "php": ">=5.3.3",
                 "symfony/filesystem": "~2.3"
             },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
+                "psr-0": {
                     "Symfony\\Component\\Config\\": ""
                 }
             },
@@ -1210,53 +301,51 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Config Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-11 14:06:56"
+            "homepage": "http://symfony.com",
+            "time": "2014-04-22 08:11:06"
         },
         {
             "name": "symfony/console",
-            "version": "v2.7.1",
+            "version": "v2.4.5",
+            "target-dir": "Symfony/Component/Console",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Console.git",
-                "reference": "564398bc1f33faf92fc2ec86859983d30eb81806"
+                "reference": "24f723436e62598c9dddee2a8573d6992504dc5d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/564398bc1f33faf92fc2ec86859983d30eb81806",
-                "reference": "564398bc1f33faf92fc2ec86859983d30eb81806",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/24f723436e62598c9dddee2a8573d6992504dc5d",
+                "reference": "24f723436e62598c9dddee2a8573d6992504dc5d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/event-dispatcher": "~2.1",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/process": "~2.1"
+                "symfony/event-dispatcher": "~2.1"
             },
             "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/process": ""
+                "symfony/event-dispatcher": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
+                "psr-0": {
                     "Symfony\\Component\\Console\\": ""
                 }
             },
@@ -1267,41 +356,39 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Console Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-10 15:30:22"
+            "homepage": "http://symfony.com",
+            "time": "2014-05-14 21:48:29"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.7.1",
+            "version": "v2.4.5",
+            "target-dir": "Symfony/Component/EventDispatcher",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/EventDispatcher.git",
-                "reference": "be3c5ff8d503c46768aeb78ce6333051aa6f26d9"
+                "reference": "e539602e5455aa086c0e81e604745af7789e4d8a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/be3c5ff8d503c46768aeb78ce6333051aa6f26d9",
-                "reference": "be3c5ff8d503c46768aeb78ce6333051aa6f26d9",
+                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/e539602e5455aa086c0e81e604745af7789e4d8a",
+                "reference": "e539602e5455aa086c0e81e604745af7789e4d8a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.0,>=2.0.5",
-                "symfony/dependency-injection": "~2.6",
-                "symfony/expression-language": "~2.6",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/stopwatch": "~2.3"
+                "symfony/dependency-injection": "~2.0"
             },
             "suggest": {
                 "symfony/dependency-injection": "",
@@ -1310,11 +397,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
+                "psr-0": {
                     "Symfony\\Component\\EventDispatcher\\": ""
                 }
             },
@@ -1325,45 +412,45 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony EventDispatcher Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-08 09:37:21"
+            "homepage": "http://symfony.com",
+            "time": "2014-04-16 10:34:31"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v2.7.1",
+            "version": "v2.4.5",
+            "target-dir": "Symfony/Component/Filesystem",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Filesystem.git",
-                "reference": "a0d43eb3e17d4f4c6990289805a488a0482a07f3"
+                "reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a0d43eb3e17d4f4c6990289805a488a0482a07f3",
-                "reference": "a0d43eb3e17d4f4c6990289805a488a0482a07f3",
+                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a3af8294bcce4a7c1b2892363b0c9d8109affad4",
+                "reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
+                "psr-0": {
                     "Symfony\\Component\\Filesystem\\": ""
                 }
             },
@@ -1374,45 +461,45 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-08 09:37:21"
+            "homepage": "http://symfony.com",
+            "time": "2014-04-16 10:34:31"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v2.7.1",
+            "version": "v2.4.5",
+            "target-dir": "Symfony/Component/Stopwatch",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Stopwatch.git",
-                "reference": "c653f1985f6c2b7dbffd04d48b9c0a96aaef814b"
+                "reference": "343bcc0360f2c22f371884b8f6a9fee8d1aa431a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/c653f1985f6c2b7dbffd04d48b9c0a96aaef814b",
-                "reference": "c653f1985f6c2b7dbffd04d48b9c0a96aaef814b",
+                "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/343bcc0360f2c22f371884b8f6a9fee8d1aa431a",
+                "reference": "343bcc0360f2c22f371884b8f6a9fee8d1aa431a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
+                "psr-0": {
                     "Symfony\\Component\\Stopwatch\\": ""
                 }
             },
@@ -1423,45 +510,45 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Stopwatch Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-04 20:11:48"
+            "homepage": "http://symfony.com",
+            "time": "2014-04-18 20:37:09"
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.7.1",
+            "version": "v2.4.5",
+            "target-dir": "Symfony/Component/Yaml",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Yaml.git",
-                "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160"
+                "reference": "fd22bb88c3a6f73c898b39bec185a9e211b06265"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/9808e75c609a14f6db02f70fccf4ca4aab53c160",
-                "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/fd22bb88c3a6f73c898b39bec185a9e211b06265",
+                "reference": "fd22bb88c3a6f73c898b39bec185a9e211b06265",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.7-dev"
+                    "dev-master": "2.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
+                "psr-0": {
                     "Symfony\\Component\\Yaml\\": ""
                 }
             },
@@ -1472,27 +559,31 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
                 },
                 {
                     "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Yaml Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-10 15:30:22"
+            "homepage": "http://symfony.com",
+            "time": "2014-05-12 09:27:48"
         }
     ],
-    "aliases": [],
+    "aliases": [
+
+    ],
     "minimum-stability": "stable",
     "stability-flags": {
         "satooshi/php-coveralls": 20
     },
-    "prefer-stable": false,
-    "prefer-lowest": false,
     "platform": {
         "php": ">= 5.3.3"
     },
-    "platform-dev": []
+    "platform-dev": [
+
+    ]
 }
diff --git a/core/vendor/egulias/email-validator/documentation/Ohter.md b/core/vendor/egulias/email-validator/documentation/Ohter.md
new file mode 100644
index 0000000000000000000000000000000000000000..9ec4bd9e554d365688a62035c4a6288cc136b358
--- /dev/null
+++ b/core/vendor/egulias/email-validator/documentation/Ohter.md
@@ -0,0 +1,69 @@
+Email length
+------------
+http://tools.ietf.org/html/rfc5321#section-4.1.2
+  Forward-path   = Path
+
+  Path           = "<" [ A-d-l ":" ] Mailbox ">"
+
+http://tools.ietf.org/html/rfc5321#section-4.5.3.1.3
+http://tools.ietf.org/html/rfc1035#section-2.3.4
+
+DNS
+---
+
+http://tools.ietf.org/html/rfc5321#section-2.3.5
+  Names that can
+  be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed
+  in Section 5) are permitted, as are CNAME RRs whose targets can be
+  resolved, in turn, to MX or address RRs.
+
+http://tools.ietf.org/html/rfc5321#section-5.1
+  The lookup first attempts to locate an MX record associated with the
+  name.  If a CNAME record is found, the resulting name is processed as
+  if it were the initial name. ... If an empty list of MXs is returned,
+  the address is treated as if it was associated with an implicit MX
+  RR, with a preference of 0, pointing to that host.
+
+is_email() author's note: We will regard the existence of a CNAME to be
+sufficient evidence of the domain's existence. For performance reasons
+we will not repeat the DNS lookup for the CNAME's target, but we will
+raise a warning because we didn't immediately find an MX record.
+
+Check for TLD addresses
+-----------------------
+TLD addresses are specifically allowed in RFC 5321 but they are
+unusual to say the least. We will allocate a separate
+status to these addresses on the basis that they are more likely
+to be typos than genuine addresses (unless we've already
+established that the domain does have an MX record)
+
+http://tools.ietf.org/html/rfc5321#section-2.3.5
+  In the case
+  of a top-level domain used by itself in an email address, a single
+  string is used without any dots.  This makes the requirement,
+  described in more detail below, that only fully-qualified domain
+  names appear in SMTP transactions on the public Internet,
+  particularly important where top-level domains are involved.
+
+TLD format
+----------
+The format of TLDs has changed a number of times. The standards
+used by IANA have been largely ignored by ICANN, leading to
+confusion over the standards being followed. These are not defined
+anywhere, except as a general component of a DNS host name (a label).
+However, this could potentially lead to 123.123.123.123 being a
+valid DNS name (rather than an IP address) and thereby creating
+an ambiguity. The most authoritative statement on TLD formats that
+the author can find is in a (rejected!) erratum to RFC 1123
+submitted by John Klensin, the author of RFC 5321:
+
+http://www.rfc-editor.org/errata_search.php?rfc=1123&eid=1353
+  However, a valid host name can never have the dotted-decimal
+  form #.#.#.#, since this change does not permit the highest-level
+  component label to start with a digit even if it is not all-numeric.
+
+Comments
+--------
+Comments at the start of the domain are deprecated in the text
+Comments at the start of a subdomain are obs-domain
+(http://tools.ietf.org/html/rfc5322#section-3.4.1)
diff --git a/core/vendor/egulias/email-validator/documentation/Other.md b/core/vendor/egulias/email-validator/documentation/Other.md
deleted file mode 100644
index 9ec4bd9e554d365688a62035c4a6288cc136b358..0000000000000000000000000000000000000000
--- a/core/vendor/egulias/email-validator/documentation/Other.md
+++ /dev/null
@@ -1,69 +0,0 @@
-Email length
-------------
-http://tools.ietf.org/html/rfc5321#section-4.1.2
-  Forward-path   = Path
-
-  Path           = "<" [ A-d-l ":" ] Mailbox ">"
-
-http://tools.ietf.org/html/rfc5321#section-4.5.3.1.3
-http://tools.ietf.org/html/rfc1035#section-2.3.4
-
-DNS
----
-
-http://tools.ietf.org/html/rfc5321#section-2.3.5
-  Names that can
-  be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed
-  in Section 5) are permitted, as are CNAME RRs whose targets can be
-  resolved, in turn, to MX or address RRs.
-
-http://tools.ietf.org/html/rfc5321#section-5.1
-  The lookup first attempts to locate an MX record associated with the
-  name.  If a CNAME record is found, the resulting name is processed as
-  if it were the initial name. ... If an empty list of MXs is returned,
-  the address is treated as if it was associated with an implicit MX
-  RR, with a preference of 0, pointing to that host.
-
-is_email() author's note: We will regard the existence of a CNAME to be
-sufficient evidence of the domain's existence. For performance reasons
-we will not repeat the DNS lookup for the CNAME's target, but we will
-raise a warning because we didn't immediately find an MX record.
-
-Check for TLD addresses
------------------------
-TLD addresses are specifically allowed in RFC 5321 but they are
-unusual to say the least. We will allocate a separate
-status to these addresses on the basis that they are more likely
-to be typos than genuine addresses (unless we've already
-established that the domain does have an MX record)
-
-http://tools.ietf.org/html/rfc5321#section-2.3.5
-  In the case
-  of a top-level domain used by itself in an email address, a single
-  string is used without any dots.  This makes the requirement,
-  described in more detail below, that only fully-qualified domain
-  names appear in SMTP transactions on the public Internet,
-  particularly important where top-level domains are involved.
-
-TLD format
-----------
-The format of TLDs has changed a number of times. The standards
-used by IANA have been largely ignored by ICANN, leading to
-confusion over the standards being followed. These are not defined
-anywhere, except as a general component of a DNS host name (a label).
-However, this could potentially lead to 123.123.123.123 being a
-valid DNS name (rather than an IP address) and thereby creating
-an ambiguity. The most authoritative statement on TLD formats that
-the author can find is in a (rejected!) erratum to RFC 1123
-submitted by John Klensin, the author of RFC 5321:
-
-http://www.rfc-editor.org/errata_search.php?rfc=1123&eid=1353
-  However, a valid host name can never have the dotted-decimal
-  form #.#.#.#, since this change does not permit the highest-level
-  component label to start with a digit even if it is not all-numeric.
-
-Comments
---------
-Comments at the start of the domain are deprecated in the text
-Comments at the start of a subdomain are obs-domain
-(http://tools.ietf.org/html/rfc5322#section-3.4.1)
diff --git a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailLexer.php b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailLexer.php
index d8522fff17f0cfd2316f0ebd849b8175f72f2142..2066f7c3503471932ba916d1a01f93c6751306f4 100644
--- a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailLexer.php
+++ b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailLexer.php
@@ -31,13 +31,10 @@ class EmailLexer extends AbstractLexer
     const S_SEMICOLON        = 275;
     const S_OPENQBRACKET     = 276;
     const S_CLOSEQBRACKET    = 277;
-    const S_SLASH            = 278;
     const S_EMPTY            = null;
     const GENERIC            = 300;
     const CRLF               = 301;
     const INVALID            = 302;
-    const ASCII_INVALID_FROM = 127;
-    const ASCII_INVALID_TO   = 199;
 
     /**
      * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3)
@@ -55,7 +52,6 @@ class EmailLexer extends AbstractLexer
         ';'    => self::S_SEMICOLON,
         '@'    => self::S_AT,
         '\\'   => self::S_BACKSLASH,
-        '/'    => self::S_SLASH,
         ','    => self::S_COMMA,
         '.'    => self::S_DOT,
         '"'    => self::S_DQUOTE,
@@ -71,29 +67,14 @@ class EmailLexer extends AbstractLexer
         '>'    => self::S_GREATERTHAN,
         '{'    => self::S_OPENQBRACKET,
         '}'    => self::S_CLOSEQBRACKET,
-        ''     => self::S_EMPTY,
-        '\0'   => self::C_NUL,
+        ''     => self::S_EMPTY
     );
 
-    protected $hasInvalidTokens = false;
-
     protected $previous;
 
-    public function reset()
-    {
-        $this->hasInvalidTokens = false;
-        parent::reset();
-    }
-
-    public function hasInvalidTokens()
-    {
-        return $this->hasInvalidTokens;
-    }
-
     /**
      * @param $type
      * @throws \UnexpectedValueException
-     * @return boolean
      */
     public function find($type)
     {
@@ -103,7 +84,6 @@ public function find($type)
         if (!$search->lookahead) {
             throw new \UnexpectedValueException($type . ' not found');
         }
-        return true;
     }
 
     /**
@@ -119,7 +99,7 @@ public function getPrevious()
     /**
      * moveNext
      *
-     * @return boolean
+     * @return mixed
      */
     public function moveNext()
     {
@@ -131,29 +111,29 @@ public function moveNext()
     /**
      * Lexical catchable patterns.
      *
-     * @return string[]
+     * @return array
      */
     protected function getCatchablePatterns()
     {
         return array(
-            '[a-zA-Z_]+[46]?', //ASCII and domain literal
-            '[^\x00-\x7F]',  //UTF-8
+            '[a-zA-Z_]+[4,6]?',
             '[0-9]+',
             '\r\n',
             '::',
-            '\s+?',
-            '.',
+            '\s+',
+            '[\x1-\x1F]+',
+            '.'
             );
     }
 
     /**
      * Lexical non-catchable patterns.
      *
-     * @return string[]
+     * @return array
      */
     protected function getNonCatchablePatterns()
     {
-        return array('[\xA0-\xff]+');
+        return array('[\x7f-\xff]+');
     }
 
     /**
@@ -165,59 +145,14 @@ protected function getNonCatchablePatterns()
      */
     protected function getType(&$value)
     {
-        if ($this->isNullType($value)) {
-            return self::C_NUL;
-        }
-
-        if ($this->isValid($value)) {
+        if (isset($this->charValue[$value])) {
             return $this->charValue[$value];
         }
 
-        if ($this->isUTF8Invalid($value)) {
-            $this->hasInvalidTokens = true;
+        if (preg_match('/[\x1-\x1F]+/', $value)) {
             return self::INVALID;
         }
 
         return  self::GENERIC;
     }
-
-    protected function isValid($value)
-    {
-        if (isset($this->charValue[$value])) {
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * @param $value
-     * @return bool
-     */
-    protected function isNullType($value)
-    {
-        if ($value === "\0") {
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * @param $value
-     * @return bool
-     */
-    protected function isUTF8Invalid($value)
-    {
-        if (preg_match('/\p{Cc}+/u', $value)) {
-            return true;
-        }
-
-        return false;
-    }
-
-    protected function getModifiers()
-    {
-        return 'iu';
-    }
 }
diff --git a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailParser.php b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailParser.php
index 5f4c4aa5872886614abaf4e362de491ba40934e6..cfb9ce954d8115ba7c9c3efb783f3daf72e8832b 100644
--- a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailParser.php
+++ b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailParser.php
@@ -28,10 +28,6 @@ public function __construct(EmailLexer $lexer)
         $this->domainPartParser = new DomainPart($this->lexer);
     }
 
-    /**
-     * @param $str
-     * @return array
-     */
     public function parse($str)
     {
         $this->lexer->setInput($str);
@@ -40,16 +36,11 @@ public function parse($str)
             throw new \InvalidArgumentException('ERR_NOLOCALPART');
         }
 
-
         $this->localPartParser->parse($str);
         $this->domainPartParser->parse($str);
 
         $this->setParts($str);
 
-        if ($this->lexer->hasInvalidTokens()) {
-            throw new \InvalidArgumentException('ERR_INVALID_ATEXT');
-        }
-
         return array('local' => $this->localPart, 'domain' => $this->domainPart);
     }
 
@@ -87,10 +78,6 @@ protected function hasAtToken()
         return true;
     }
 
-    /**
-     * @param string $localPart
-     * @param string $parsedDomainPart
-     */
     protected function addLongEmailWarning($localPart, $parsedDomainPart)
     {
         if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) {
diff --git a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailValidator.php b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailValidator.php
index d047decf20c3ff15316f9330ca2684688ffacad6..877d422ffd74c7d8013575f20c456ed07c9e51ff 100644
--- a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailValidator.php
+++ b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailValidator.php
@@ -2,6 +2,8 @@
 
 namespace Egulias\EmailValidator;
 
+use Egulias\EmailValidator\Parser\LocalPart;
+
 /**
  * EmailValidator
  *
@@ -84,7 +86,7 @@ public function isValid($email, $checkDNS = false, $strict = false)
             return false;
         }
 
-        $dns = true;
+        $dns = false;
         if ($checkDNS) {
             $dns = $this->checkDNS();
         }
@@ -95,7 +97,7 @@ public function isValid($email, $checkDNS = false, $strict = false)
             return false;
         }
 
-        return !$strict || (!$this->hasWarnings() && $dns);
+        return ($strict) ? (!$this->hasWarnings() && $dns) : true;
     }
 
     /**
@@ -144,9 +146,16 @@ public function getThreshold()
 
     protected function checkDNS()
     {
-        $checked = true;
+        $checked = false;
+        if (!function_exists('dns_get_record') && (
+            in_array(self::DNSWARN_NO_RECORD, $this->warnings) &&
+            in_array(self::DNSWARN_NO_MX_RECORD, $this->warnings)
+        )) {
+            return $checked;
+        }
 
         $result = checkdnsrr(trim($this->parser->getParsedDomainPart()), 'MX');
+        $checked = true;
 
         if (!$result) {
             $this->warnings[] = self::DNSWARN_NO_RECORD;
diff --git a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/DomainPart.php b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/DomainPart.php
index c4d0cf6022b21001699de640d2397a338fbf0541..ce3756c7f3895686db3141983b156fb9216c519c 100644
--- a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/DomainPart.php
+++ b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/DomainPart.php
@@ -23,9 +23,6 @@ public function parse($domainPart)
         if ($this->lexer->token['type'] === EmailLexer::S_EMPTY) {
             throw new \InvalidArgumentException('ERR_NODOMAIN');
         }
-        if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) {
-            throw new \InvalidArgumentException('ERR_DOMAINHYPHENEND');
-        }
 
         if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) {
             $this->warnings[] = EmailValidator::DEPREC_COMMENT;
@@ -104,13 +101,8 @@ protected function doParseDomainPart()
     {
         $domain = '';
         do {
-
             $prev = $this->lexer->getPrevious();
 
-            if ($this->lexer->token['type'] === EmailLexer::S_SLASH) {
-                throw new \InvalidArgumentException('ERR_DOMAIN_CHAR_NOT_ALLOWED');
-            }
-
             if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) {
                 $this->parseComments();
                 $this->lexer->moveNext();
@@ -243,29 +235,12 @@ protected function checkIPV4Tag($addressLiteral)
 
     protected function checkDomainPartExceptions($prev)
     {
-        $invalidDomainTokens = array(
-            EmailLexer::S_DQUOTE => true,
-            EmailLexer::S_SEMICOLON => true,
-            EmailLexer::S_GREATERTHAN => true,
-            EmailLexer::S_LOWERTHAN => true,
-        );
-
-        if (isset($invalidDomainTokens[$this->lexer->token['type']])) {
-            throw new \InvalidArgumentException('ERR_EXPECTING_ATEXT');
-        }
-
-        if ($this->lexer->token['type'] === EmailLexer::S_COMMA) {
-            throw new \InvalidArgumentException('ERR_COMMA_IN_DOMAIN');
-        }
-
         if ($this->lexer->token['type'] === EmailLexer::S_AT) {
             throw new \InvalidArgumentException('ERR_CONSECUTIVEATS');
         }
-
         if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) {
             throw new \InvalidArgumentException('ERR_EXPECTING_ATEXT');
         }
-
         if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) {
             throw new \InvalidArgumentException('ERR_DOMAINHYPHENEND');
         }
@@ -314,4 +289,5 @@ protected function parseDomainComments()
             throw new \InvalidArgumentException('ERR_EXPECTING_ATEXT');
         }
     }
-}
+
+}
\ No newline at end of file
diff --git a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/LocalPart.php b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/LocalPart.php
index 2f7716409c57edf56462fd5ef07aa2591579ff03..bd88583f985b8af86c3f62e48873ed9b2f8f37dc 100644
--- a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/LocalPart.php
+++ b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/LocalPart.php
@@ -3,16 +3,15 @@
 namespace Egulias\EmailValidator\Parser;
 
 use Egulias\EmailValidator\EmailLexer;
+use Egulias\EmailValidator\Parser\Parser;
 use Egulias\EmailValidator\EmailValidator;
-use \InvalidArgumentException;
+
 
 class LocalPart extends Parser
 {
     public function parse($localPart)
     {
-        $parseDQuote = true;
         $closingQuote = false;
-
         while ($this->lexer->token['type'] !== EmailLexer::S_AT && $this->lexer->token) {
 
             if ($this->lexer->token['type'] === EmailLexer::S_DOT && !$this->lexer->getPrevious()) {
@@ -20,9 +19,6 @@ public function parse($localPart)
             }
 
             $closingQuote = $this->checkDQUOTE($closingQuote);
-            if ($closingQuote && $parseDQuote) {
-                $parseDQuote = $this->parseDoubleQuote();
-            }
 
             if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) {
                 $this->parseComments();
@@ -30,15 +26,20 @@ public function parse($localPart)
 
             $this->checkConsecutiveDots();
 
-            if (
-                $this->lexer->token['type'] === EmailLexer::S_DOT &&
-                $this->lexer->isNextToken(EmailLexer::S_AT)
-            ) {
+            if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_AT)) {
                 throw new \InvalidArgumentException('ERR_DOT_END');
             }
 
             $this->warnEscaping();
-            $this->isInvalidToken($this->lexer->token, $closingQuote);
+
+            if ($this->lexer->isNextTokenAny(
+                array(
+                    EmailLexer::INVALID, EmailLexer::S_LOWERTHAN, EmailLexer::S_GREATERTHAN
+                )
+            )
+            ) {
+                throw new \InvalidArgumentException('ERR_EXPECTING_ATEXT');
+            }
 
             if ($this->isFWS()) {
                 $this->parseFWS();
@@ -52,70 +53,4 @@ public function parse($localPart)
             $this->warnings[] = EmailValidator::RFC5322_LOCAL_TOOLONG;
         }
     }
-
-    protected function parseDoubleQuote()
-    {
-        $parseAgain = true;
-        $special = array(
-            EmailLexer::S_CR => true,
-            EmailLexer::S_HTAB => true,
-            EmailLexer::S_LF => true
-        );
-
-        $invalid = array(
-            EmailLexer::C_NUL => true,
-            EmailLexer::S_HTAB => true,
-            EmailLexer::S_CR => true,
-            EmailLexer::S_LF => true
-        );
-        $setSpecialsWarning = true;
-
-        $this->lexer->moveNext();
-
-        while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && $this->lexer->token) {
-            $parseAgain = false;
-            if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) {
-                $this->warnings[] = EmailValidator::CFWS_FWS;
-                $setSpecialsWarning = false;
-            }
-
-            $this->lexer->moveNext();
-
-            if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) {
-                throw new InvalidArgumentException("ERR_EXPECTED_ATEXT");
-            }
-        }
-
-        $prev = $this->lexer->getPrevious();
-
-        if ($prev['type'] === EmailLexer::S_BACKSLASH) {
-            if (!$this->checkDQUOTE(false)) {
-                throw new \InvalidArgumentException("ERR_UNCLOSED_DQUOTE");
-            }
-        }
-
-        if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) {
-            throw new \InvalidArgumentException("ERR_EXPECED_AT");
-        }
-
-        return $parseAgain;
-    }
-
-    protected function isInvalidToken($token, $closingQuote)
-    {
-        $forbidden = array(
-            EmailLexer::S_COMMA,
-            EmailLexer::S_CLOSEBRACKET,
-            EmailLexer::S_OPENBRACKET,
-            EmailLexer::S_GREATERTHAN,
-            EmailLexer::S_LOWERTHAN,
-            EmailLexer::S_COLON,
-            EmailLexer::S_SEMICOLON,
-            EmailLexer::INVALID
-        );
-
-        if (in_array($token['type'], $forbidden) && !$closingQuote) {
-            throw new \InvalidArgumentException('ERR_EXPECTING_ATEXT');
-        }
-    }
 }
diff --git a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/Parser.php b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/Parser.php
index b66279e299a749b9a666df77df629b6729f3c619..3f4b3e35286065be7fed3bc42f10fc7f5e425740 100644
--- a/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/Parser.php
+++ b/core/vendor/egulias/email-validator/src/Egulias/EmailValidator/Parser/Parser.php
@@ -102,10 +102,6 @@ protected function checkConsecutiveDots()
 
     protected function isFWS()
     {
-        if ($this->escaped()) {
-            return false;
-        }
-
         if ($this->lexer->token['type'] === EmailLexer::S_SP ||
             $this->lexer->token['type'] === EmailLexer::S_HTAB ||
             $this->lexer->token['type'] === EmailLexer::S_CR ||
@@ -118,20 +114,6 @@ protected function isFWS()
         return false;
     }
 
-    protected function escaped()
-    {
-        $previous = $this->lexer->getPrevious();
-
-        if ($previous['type'] === EmailLexer::S_BACKSLASH
-            &&
-            $this->lexer->token['type'] !== EmailLexer::GENERIC
-        ) {
-            return true;
-        }
-
-        return false;
-    }
-
     protected function warnEscaping()
     {
         if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) {
@@ -163,7 +145,6 @@ protected function checkDQUOTE($hasClosingQuote)
         if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) {
             throw new \InvalidArgumentException('ERR_EXPECTING_ATEXT');
         }
-
         $this->warnings[] = EmailValidator::RFC5321_QUOTEDSTRING;
         try {
             $this->lexer->find(EmailLexer::S_DQUOTE);
@@ -187,4 +168,4 @@ protected function checkCRLFInFWS()
             throw new \InvalidArgumentException("ERR_FWS_CRLF_END");
         }
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailLexerTest.php b/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailLexerTest.php
index d5389efa51f84ace5df7e00835206e7cc35480db..27f3d6855d29d3990a59448adb4ab4a2d097758e 100644
--- a/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailLexerTest.php
+++ b/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailLexerTest.php
@@ -26,73 +26,6 @@ public function testLexerTokens($str, $token)
         $this->assertEquals($token, $lexer->token['type']);
     }
 
-    public function testLexerParsesMultipleSpaces()
-    {
-        $lexer = new EmailLexer();
-        $lexer->setInput('  ');
-        $lexer->moveNext();
-        $lexer->moveNext();
-        $this->assertEquals(EmailLexer::S_SP, $lexer->token['type']);
-        $lexer->moveNext();
-        $this->assertEquals(EmailLexer::S_SP, $lexer->token['type']);
-    }
-
-    /**
-     * @dataProvider invalidUTF8CharsProvider
-     */
-    public function testLexerParsesInvalidUTF8($char)
-    {
-        $lexer = new EmailLexer();
-        $lexer->setInput($char);
-        $lexer->moveNext();
-        $lexer->moveNext();
-
-        $this->assertEquals(EmailLexer::INVALID, $lexer->token['type']);
-    }
-
-    public function invalidUTF8CharsProvider()
-    {
-        $chars = array();
-        for ($i = 0; $i < 0x100; ++$i) {
-            $c = $this->utf8Chr($i);
-            if (preg_match('/(?=\p{Cc})(?=[^\t\n\n\r])/u', $c) && !preg_match('/\x{0000}/u', $c)) {
-                $chars[] = array($c);
-            }
-        }
-
-        return $chars;
-    }
-
-    protected function utf8Chr($code_point)
-    {
-
-        if ($code_point < 0 || 0x10FFFF < $code_point || (0xD800 <= $code_point && $code_point <= 0xDFFF)) {
-            return '';
-        }
-
-        if ($code_point < 0x80) {
-            $hex[0] = $code_point;
-            $ret = chr($hex[0]);
-        } elseif ($code_point < 0x800) {
-            $hex[0] = 0x1C0 | $code_point >> 6;
-            $hex[1] = 0x80  | $code_point & 0x3F;
-            $ret = chr($hex[0]).chr($hex[1]);
-        } elseif ($code_point < 0x10000) {
-            $hex[0] = 0xE0 | $code_point >> 12;
-            $hex[1] = 0x80 | $code_point >> 6 & 0x3F;
-            $hex[2] = 0x80 | $code_point & 0x3F;
-            $ret = chr($hex[0]).chr($hex[1]).chr($hex[2]);
-        } else {
-            $hex[0] = 0xF0 | $code_point >> 18;
-            $hex[1] = 0x80 | $code_point >> 12 & 0x3F;
-            $hex[2] = 0x80 | $code_point >> 6 & 0x3F;
-            $hex[3] = 0x80 | $code_point  & 0x3F;
-            $ret = chr($hex[0]).chr($hex[1]).chr($hex[2]).chr($hex[3]);
-        }
-
-        return $ret;
-    }
-
     public function testLexerForTab()
     {
         $lexer = new EmailLexer();
@@ -103,25 +36,6 @@ public function testLexerForTab()
         $this->assertEquals(EmailLexer::S_HTAB, $lexer->token['type']);
     }
 
-    public function testLexerForUTF8()
-    {
-        $lexer = new EmailLexer();
-        $lexer->setInput("Ã¡Ã‡@bar.com");
-        $lexer->moveNext();
-        $lexer->moveNext();
-        $this->assertEquals(EmailLexer::GENERIC, $lexer->token['type']);
-        $lexer->moveNext();
-        $this->assertEquals(EmailLexer::GENERIC, $lexer->token['type']);
-    }
-
-    public function testLexerSearchToken()
-    {
-        $lexer = new EmailLexer();
-        $lexer->setInput("foo\tbar");
-        $lexer->moveNext();
-        $this->assertTrue($lexer->find(EmailLexer::S_HTAB));
-    }
-
     public function getTokens()
     {
         return array(
@@ -139,7 +53,6 @@ public function getTokens()
             array("\"", EmailLexer::S_DQUOTE),
             array("-", EmailLexer::S_HYPHEN),
             array("\\", EmailLexer::S_BACKSLASH),
-            array("/", EmailLexer::S_SLASH),
             array("(", EmailLexer::S_OPENPARENTHESIS),
             array(")", EmailLexer::S_CLOSEPARENTHESIS),
             array('<', EmailLexer::S_LOWERTHAN),
@@ -153,9 +66,7 @@ public function getTokens()
             array('{', EmailLexer::S_OPENQBRACKET),
             array('}', EmailLexer::S_CLOSEQBRACKET),
             array('',  EmailLexer::S_EMPTY),
-            array(chr(31),  EmailLexer::INVALID),
-            array(chr(226),  EmailLexer::GENERIC),
-            array(chr(0),  EmailLexer::C_NUL)
+            array(chr(31),  EmailLexer::INVALID)
         );
     }
 }
diff --git a/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailValidatorTest.php b/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailValidatorTest.php
index 1491df75d40c7b500c75dfdc3d3d427a3a2571d0..348d4d2d1746575177db137960fdceebb5d10a0c 100644
--- a/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailValidatorTest.php
+++ b/core/vendor/egulias/email-validator/tests/egulias/Tests/EmailValidator/EmailValidatorTest.php
@@ -26,50 +26,26 @@ public function testValidEmails($email)
         $this->assertTrue($this->validator->isValid($email));
     }
 
-    public function testInvalidUTF8Email()
-    {
-        $validator = new EmailValidator;
-        $email     = "\x80\x81\x82@\x83\x84\x85.\x86\x87\x88";
-
-        $this->assertFalse($validator->isValid($email));
-    }
-
     public function getValidEmails()
     {
         return array(
-            array('Ã¢@iana.org'),
             array('fabien@symfony.com'),
             array('example@example.co.uk'),
             array('fabien_potencier@example.fr'),
             array('example@localhost'),
             array('fab\'ien@symfony.com'),
-            array('fab\ ien@symfony.com'),
             array('example((example))@fakedfake.co.uk'),
             array('example@faked(fake).co.uk'),
             array('fabien+@symfony.com'),
             array('Ð¸Ð½Ñ„Ð¾@Ð¿Ð¸Ñ�ÑŒÐ¼Ð¾.Ñ€Ñ„'),
-            array('"username"@example.com'),
-            array('"user,name"@example.com'),
-            array('"user name"@example.com'),
-            array('"user@name"@example.com'),
-            array('"\a"@iana.org'),
-            array('"test\ test"@iana.org'),
-            array('""@iana.org'),
-            array('"\""@iana.org'),
-            array('mÃ¼ller@mÃ¶ller.de'),
-            array('test@email*'),
-            array('test@email!'),
-            array('test@email&'),
-            array('test@email^'),
-            array('test@email%'),
-            array('test@email$'),
+
         );
     }
 
     /**
      * @dataProvider getInvalidEmails
      */
-    public function testInvalidEmails($email)
+    public function testAInvalidEmails($email)
     {
         $this->assertFalse($this->validator->isValid($email));
     }
@@ -77,12 +53,9 @@ public function testInvalidEmails($email)
     public function getInvalidEmails()
     {
         return array(
-            array('test@example.com test'),
-            array('user  name@example.com'),
-            array('user   name@example.com'),
             array('example.@example.co.uk'),
             array('example@example@example.co.uk'),
-            array('(test_exampel@example.fr)'),
+            array('(fabien_potencier@example.fr)'),
             array('example(example)example@example.co.uk'),
             array('.example@localhost'),
             array('ex\ample@localhost'),
@@ -92,37 +65,6 @@ public function getInvalidEmails()
             array('username@ example . com'),
             array('example@(fake).com'),
             array('example@(fake.com'),
-            array('username@example,com'),
-            array('usern,ame@example.com'),
-            array('user[na]me@example.com'),
-            array('"""@iana.org'),
-            array('"\"@iana.org'),
-            array('"test"test@iana.org'),
-            array('"test""test"@iana.org'),
-            array('"test"."test"@iana.org'),
-            array('"test".test@iana.org'),
-            array('"test"' . chr(0) . '@iana.org'),
-            array('"test\"@iana.org'),
-            array(chr(226) . '@iana.org'),
-            array('test@' . chr(226) . '.org'),
-            array('\r\ntest@iana.org'),
-            array('\r\n test@iana.org'),
-            array('\r\n \r\ntest@iana.org'),
-            array('\r\n \r\ntest@iana.org'),
-            array('\r\n \r\n test@iana.org'),
-            array('test@iana.org \r\n'),
-            array('test@iana.org \r\n '),
-            array('test@iana.org \r\n \r\n'),
-            array('test@iana.org \r\n\r\n'),
-            array('test@iana.org  \r\n\r\n '),
-            array('test@iana/icann.org'),
-            array('test@foo;bar.com'),
-            array('test;123@foobar.com'),
-            array('test@example..com'),
-            array('email.email@email."'),
-            array('test@email>'),
-            array('test@email<'),
-            array('test@email{'),
         );
     }
 
@@ -162,58 +104,30 @@ public function getInvalidEmailsWithErrors()
             array(EmailValidator::ERR_CR_NO_LF, "example@exa\rmple.co.uk"),
             array(EmailValidator::ERR_CR_NO_LF, "example@[\r]"),
             array(EmailValidator::ERR_CR_NO_LF, "exam\rple@example.co.uk"),
+            array(EmailValidator::ERR_CR_NO_LF, "\"\r\"@localhost"),
         );
     }
 
     /**
      * @dataProvider getInvalidEmailsWithWarnings
      */
-    public function testValidEmailsWithWarningsCheck($warnings, $email)
+    public function testInvalidEmailsWithWarningsCheck($warnings, $email)
     {
         $this->assertTrue($this->validator->isValid($email, true));
 
         $this->assertEquals($warnings, $this->validator->getWarnings());
     }
 
-    /**
-     * @dataProvider getInvalidEmailsWithWarnings
-     */
-    public function testInvalidEmailsWithDnsCheckAndStrictMode($warnings, $email)
-    {
-        $this->assertFalse($this->validator->isValid($email, true, true));
-
-        $this->assertEquals($warnings, $this->validator->getWarnings());
-    }
-
     public function getInvalidEmailsWithWarnings()
     {
         return array(
-            array(
-                array(
-                    EmailValidator::DEPREC_CFWS_NEAR_AT,
-                    EmailValidator::DNSWARN_NO_RECORD
-                ),
-                'example @example.co.uk'
-            ),
-            array(
-                array(
-                    EmailValidator::DEPREC_CFWS_NEAR_AT,
-                    EmailValidator::DNSWARN_NO_RECORD
-                ),
-                'example@ example.co.uk'
-            ),
-            array(
-                array(
-                    EmailValidator::CFWS_COMMENT,
-                    EmailValidator::DNSWARN_NO_RECORD
-                ),
-                'example@example(examplecomment).co.uk'
-            ),
+            array(array( EmailValidator::DEPREC_CFWS_NEAR_AT,), 'example @example.co.uk'),
+            array(array( EmailValidator::DEPREC_CFWS_NEAR_AT,), 'example@ example.co.uk'),
+            array(array( EmailValidator::CFWS_COMMENT,), 'example@example(examplecomment).co.uk'),
             array(
                 array(
                     EmailValidator::CFWS_COMMENT,
                     EmailValidator::DEPREC_CFWS_NEAR_AT,
-                    EmailValidator::DNSWARN_NO_RECORD,
                 ),
                 'example(examplecomment)@example.co.uk'
             ),
@@ -221,20 +135,11 @@ public function getInvalidEmailsWithWarnings()
                 array(
                     EmailValidator::RFC5321_QUOTEDSTRING,
                     EmailValidator::CFWS_FWS,
-                    EmailValidator::DNSWARN_NO_RECORD,
                 ),
                 "\"\t\"@example.co.uk"
             ),
             array(
                 array(
-                    EmailValidator::RFC5321_QUOTEDSTRING,
-                    EmailValidator::CFWS_FWS,
-                    EmailValidator::DNSWARN_NO_RECORD
-                ),
-                "\"\r\"@example.co.uk"
-            ),
-            array(
-                array(
                     EmailValidator::RFC5321_ADDRESSLITERAL,
                     EmailValidator::DNSWARN_NO_RECORD,
                 ),
@@ -321,14 +226,12 @@ public function getInvalidEmailsWithWarnings()
             array(
                 array(
                     EmailValidator::RFC5321_QUOTEDSTRING,
-                    EmailValidator::DNSWARN_NO_RECORD
                 ),
                 '"example"@example.co.uk'
             ),
             array(
                 array(
                     EmailValidator::RFC5322_LOCAL_TOOLONG,
-                    EmailValidator::DNSWARN_NO_RECORD
                 ),
                 'too_long_localpart_too_long_localpart_too_long_localpart_too_long_localpart@example.co.uk'
             ),
@@ -359,17 +262,6 @@ public function getInvalidEmailsWithWarnings()
                 'parttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart'.
                 'toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpar'
             ),
-            array(
-                array(
-                    EmailValidator::DNSWARN_NO_RECORD,
-                ),
-                'test@test'
-            ),
         );
     }
-
-    public function testInvalidEmailsWithStrict()
-    {
-        $this->assertFalse($this->validator->isValid('"test"@test', false, true));
-    }
 }
diff --git a/core/vendor/guzzlehttp/promises/CHANGELOG.md b/core/vendor/guzzlehttp/promises/CHANGELOG.md
index daad986cf732a369606a05d3ab264eed9efdb501..1323d4601197373211facc7d60dab7aea840a005 100644
--- a/core/vendor/guzzlehttp/promises/CHANGELOG.md
+++ b/core/vendor/guzzlehttp/promises/CHANGELOG.md
@@ -1,15 +1,5 @@
 # CHANGELOG
 
-## 1.0.2 - 2015-05-15
-
-* Conditionally require functions.php.
-
-## 1.0.1 - 2015-06-24
-
-* Updating EachPromise to call next on the underlying promise iterator as late
-  as possible to ensure that generators that generate new requests based on
-  callbacks are not iterated until after callbacks are invoked.
-
 ## 1.0.0 - 2015-05-12
 
-* Initial release
+Initial release
diff --git a/core/vendor/guzzlehttp/promises/composer.json b/core/vendor/guzzlehttp/promises/composer.json
index f13844b631212cb376cc77854e0ab1cc8439696e..bf43755b88cdeaf5c467ec65e2aedc0f1dc4a9f5 100644
--- a/core/vendor/guzzlehttp/promises/composer.json
+++ b/core/vendor/guzzlehttp/promises/composer.json
@@ -15,13 +15,13 @@
         "php": ">=5.5.0"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.0"
+        "phpunit/phpunit": "^4.0"
     },
     "autoload": {
         "psr-4": {
             "GuzzleHttp\\Promise\\": "src/"
         },
-        "files": ["src/functions_include.php"]
+        "files": ["src/functions.php"]
     },
     "extra": {
         "branch-alias": {
diff --git a/core/vendor/guzzlehttp/promises/src/EachPromise.php b/core/vendor/guzzlehttp/promises/src/EachPromise.php
index 855d8337895bb74e46260ffc43dc41588f8d24a1..a78c3d0006af577048ee787068d59c3293141e93 100644
--- a/core/vendor/guzzlehttp/promises/src/EachPromise.php
+++ b/core/vendor/guzzlehttp/promises/src/EachPromise.php
@@ -82,6 +82,7 @@ public function promise()
     private function createPromise()
     {
         $this->aggregate = new Promise(function () {
+            $this->refillPending();
             reset($this->pending);
             // Consume a potentially fluctuating list of promises while
             // ensuring that indexes are maintained (precluding array_shift).
@@ -107,28 +108,15 @@ private function refillPending()
     {
         if (!$this->concurrency) {
             // Add all pending promises.
-            while ($this->addPending() && $this->advanceIterator());
-            return;
-        }
-
-        // Add only up to N pending promises.
-        $concurrency = is_callable($this->concurrency)
-            ? call_user_func($this->concurrency, count($this->pending))
-            : $this->concurrency;
-        $concurrency = max($concurrency - count($this->pending), 0);
-        // Concurrency may be set to 0 to disallow new promises.
-        if (!$concurrency) {
-            return;
+            while ($this->addPending());
+        } else {
+            // Add only up to N pending promises.
+            $concurrency = is_callable($this->concurrency)
+                ? call_user_func($this->concurrency, count($this->pending))
+                : $this->concurrency;
+            $concurrency = max($concurrency - count($this->pending), 0);
+            while ($concurrency-- && $this->addPending());
         }
-        // Add the first pending promise.
-        $this->addPending();
-        // Note this is special handling for concurrency=1 so that we do
-        // not advance the iterator after adding the first promise. This
-        // helps work around issues with generators that might not have the
-        // next value to yield until promise callbacks are called.
-        while (--$concurrency
-            && $this->advanceIterator()
-            && $this->addPending());
     }
 
     private function addPending()
@@ -140,6 +128,13 @@ private function addPending()
         $promise = promise_for($this->iterable->current());
         $idx = $this->iterable->key();
 
+        try {
+            $this->iterable->next();
+        } catch (\Exception $e) {
+            $this->aggregate->reject($e);
+            return false;
+        }
+
         $this->pending[$idx] = $promise->then(
             function ($value) use ($idx) {
                 if ($this->onFulfilled) {
@@ -162,15 +157,15 @@ function ($reason) use ($idx) {
         return true;
     }
 
-    private function advanceIterator()
+    private function checkIfFinished()
     {
-        try {
-            $this->iterable->next();
+        if (!$this->pending && !$this->iterable->valid()) {
+            // Resolve the promise if there's nothing left to do.
+            $this->aggregate->resolve(null);
             return true;
-        } catch (\Exception $e) {
-            $this->aggregate->reject($e);
-            return false;
         }
+
+        return false;
     }
 
     private function step($idx)
@@ -181,22 +176,10 @@ private function step($idx)
         }
 
         unset($this->pending[$idx]);
-        $this->advanceIterator();
 
         if (!$this->checkIfFinished()) {
             // Add more pending promises if possible.
             $this->refillPending();
         }
     }
-
-    private function checkIfFinished()
-    {
-        if (!$this->pending && !$this->iterable->valid()) {
-            // Resolve the promise if there's nothing left to do.
-            $this->aggregate->resolve(null);
-            return true;
-        }
-
-        return false;
-    }
 }
diff --git a/core/vendor/guzzlehttp/promises/src/functions.php b/core/vendor/guzzlehttp/promises/src/functions.php
index 89c656911fd482d05fcc7449d9b5b0d16e772b8e..eca27b21c498052b7d634496d6c5db997f6cc640 100644
--- a/core/vendor/guzzlehttp/promises/src/functions.php
+++ b/core/vendor/guzzlehttp/promises/src/functions.php
@@ -1,6 +1,11 @@
 <?php
 namespace GuzzleHttp\Promise;
 
+// Don't redefine the functions if included multiple times.
+if (function_exists('GuzzleHttp\Promise\promise_for')) {
+    return;
+}
+
 /**
  * Get the global task queue used for promise resolution.
  *
diff --git a/core/vendor/guzzlehttp/promises/src/functions_include.php b/core/vendor/guzzlehttp/promises/src/functions_include.php
deleted file mode 100644
index 34cd1710aa220b6e7ee59a7bda1ea0c6ab52ef80..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/promises/src/functions_include.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-// Don't redefine the functions if included multiple times.
-if (!function_exists('GuzzleHttp\Promise\promise_for')) {
-    require __DIR__ . '/functions.php';
-}
diff --git a/core/vendor/guzzlehttp/promises/tests/EachPromiseTest.php b/core/vendor/guzzlehttp/promises/tests/EachPromiseTest.php
index b913b3a713ef3057fb4f0baf12759a080d014fd8..e54cb001ee72c95c67b2aff275ed474e79b72c96 100644
--- a/core/vendor/guzzlehttp/promises/tests/EachPromiseTest.php
+++ b/core/vendor/guzzlehttp/promises/tests/EachPromiseTest.php
@@ -91,7 +91,7 @@ public function testLimitsPendingPromises()
         $pending[1]->resolve('b');
         P\queue()->run();
         $this->assertCount(2, $this->readAttribute($each, 'pending'));
-        $this->assertTrue($promises->valid());
+        $this->assertFalse($promises->valid());
         $promises[2]->resolve('c');
         P\queue()->run();
         $this->assertCount(1, $this->readAttribute($each, 'pending'));
@@ -100,7 +100,6 @@ public function testLimitsPendingPromises()
         P\queue()->run();
         $this->assertNull($this->readAttribute($each, 'pending'));
         $this->assertEquals(PromiseInterface::FULFILLED, $p->getState());
-        $this->assertFalse($promises->valid());
     }
 
     public function testDynamicallyLimitsPendingPromises()
@@ -121,7 +120,7 @@ public function testDynamicallyLimitsPendingPromises()
         $pending[1]->resolve('b');
         $this->assertCount(2, $this->readAttribute($each, 'pending'));
         P\queue()->run();
-        $this->assertTrue($promises->valid());
+        $this->assertFalse($promises->valid());
         $promises[2]->resolve('c');
         P\queue()->run();
         $this->assertCount(1, $this->readAttribute($each, 'pending'));
@@ -131,7 +130,6 @@ public function testDynamicallyLimitsPendingPromises()
         $this->assertNull($this->readAttribute($each, 'pending'));
         $this->assertEquals(PromiseInterface::FULFILLED, $p->getState());
         $this->assertEquals([0, 1, 1, 1], $calls);
-        $this->assertFalse($promises->valid());
     }
 
     public function testClearsReferencesWhenResolved()
@@ -232,57 +230,4 @@ public function testRejectsAggregateWhenNextThrows()
         $this->assertInstanceOf('Exception', $e);
         $this->assertEquals('Failure', $e->getMessage());
     }
-
-    public function testDoesNotCallNextOnIteratorUntilNeededWhenWaiting()
-    {
-        $results = [];
-        $values = [10];
-        $remaining = 9;
-        $iter = function () use (&$values) {
-            while ($value = array_pop($values)) {
-                yield $value;
-            }
-        };
-        $each = new EachPromise($iter(), [
-            'concurrency' => 1,
-            'fulfilled' => function ($r) use (&$results, &$values, &$remaining) {
-                $results[] = $r;
-                if ($remaining > 0) {
-                    $values[] = $remaining--;
-                }
-            }
-        ]);
-        $each->promise()->wait();
-        $this->assertEquals(range(10, 1), $results);
-    }
-
-    public function testDoesNotCallNextOnIteratorUntilNeededWhenAsync()
-    {
-        $firstPromise = new Promise();
-        $pending = [$firstPromise];
-        $values = [$firstPromise];
-        $results = [];
-        $remaining = 9;
-        $iter = function () use (&$values) {
-            while ($value = array_pop($values)) {
-                yield $value;
-            }
-        };
-        $each = new EachPromise($iter(), [
-            'concurrency' => 1,
-            'fulfilled' => function ($r) use (&$results, &$values, &$remaining, &$pending) {
-                $results[] = $r;
-                if ($remaining-- > 0) {
-                    $pending[] = $values[] = new Promise();
-                }
-            }
-        ]);
-        $i = 0;
-        $each->promise();
-        while ($promise = array_pop($pending)) {
-            $promise->resolve($i++);
-            P\queue()->run();
-        }
-        $this->assertEquals(range(0, 9), $results);
-    }
 }
diff --git a/core/vendor/guzzlehttp/psr7/CHANGELOG.md b/core/vendor/guzzlehttp/psr7/CHANGELOG.md
index 642dc9a4bbc30548ba275ac258cd16cb88264cae..8f6d8b29240cdcc127c439febe83a96e89da22a6 100644
--- a/core/vendor/guzzlehttp/psr7/CHANGELOG.md
+++ b/core/vendor/guzzlehttp/psr7/CHANGELOG.md
@@ -1,14 +1,5 @@
 # CHANGELOG
 
-## 1.2.0 - 2015-08-15
-
-* Body as `"0"` is now properly added to a response.
-* Now allowing forward seeking in CachingStream.
-* Now properly parsing HTTP requests that contain proxy targets in
-  `parse_request`.
-* functions.php is now conditionally required.
-* user-info is no longer dropped when resolving URIs.
-
 ## 1.1.0 - 2015-06-24
 
 * URIs can now be relative.
diff --git a/core/vendor/guzzlehttp/psr7/composer.json b/core/vendor/guzzlehttp/psr7/composer.json
index f2e9d4c5f542b23609aa2858256f155bb28e2f45..c1fe18f08b2ae0cec6ba39ba547de88be97badeb 100644
--- a/core/vendor/guzzlehttp/psr7/composer.json
+++ b/core/vendor/guzzlehttp/psr7/composer.json
@@ -25,7 +25,7 @@
         "psr-4": {
             "GuzzleHttp\\Psr7\\": "src/"
         },
-        "files": ["src/functions_include.php"]
+        "files": ["src/functions.php"]
     },
     "extra": {
         "branch-alias": {
diff --git a/core/vendor/guzzlehttp/psr7/src/CachingStream.php b/core/vendor/guzzlehttp/psr7/src/CachingStream.php
index 796d581b82f15d5a6c94781bc00034bd5d58c829..8fc9d2a68f8f04cbd7c98dfed46aaed0d13e5111 100644
--- a/core/vendor/guzzlehttp/psr7/src/CachingStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/CachingStream.php
@@ -41,33 +41,30 @@ public function rewind()
         $this->seek(0);
     }
 
+    /**
+     * {@inheritdoc}
+     * @throws \RuntimeException When seeking with SEEK_END or when seeking
+     *     past the total size of the buffer stream
+     */
     public function seek($offset, $whence = SEEK_SET)
     {
         if ($whence == SEEK_SET) {
             $byte = $offset;
         } elseif ($whence == SEEK_CUR) {
             $byte = $offset + $this->tell();
-        } elseif ($whence == SEEK_END) {
-            $size = $this->remoteStream->getSize();
-            if ($size === null) {
-                $size = $this->cacheEntireStream();
-            }
-            // Because 0 is the first byte, we seek to size - 1.
-            $byte = $size - 1 - $offset;
         } else {
-            throw new \InvalidArgumentException('Invalid whence');
+            throw new \RuntimeException('CachingStream::seek() supports SEEK_SET and SEEK_CUR');
         }
 
-        $diff = $byte - $this->stream->getSize();
-
-        if ($diff > 0) {
-            // If the seek byte is greater the number of read bytes, then read
-            // the difference of bytes to cache the bytes and inherently seek.
-            $this->read($diff);
-        } else {
-            // We can just do a normal seek since we've already seen this byte.
-            $this->stream->seek($byte);
+        // You cannot skip ahead past where you've read from the remote stream
+        if ($byte > $this->stream->getSize()) {
+            throw new \RuntimeException(
+                sprintf('Cannot seek to byte %d when the buffered stream only'
+                    . ' contains %d bytes', $byte, $this->stream->getSize())
+            );
         }
+
+        $this->stream->seek($byte);
     }
 
     public function read($length)
@@ -125,12 +122,4 @@ public function close()
     {
         $this->remoteStream->close() && $this->stream->close();
     }
-
-    private function cacheEntireStream()
-    {
-        $target = new FnStream(['write' => 'strlen']);
-        copy_to_stream($this, $target);
-
-        return $this->tell();
-    }
 }
diff --git a/core/vendor/guzzlehttp/psr7/src/Response.php b/core/vendor/guzzlehttp/psr7/src/Response.php
index c94bf8f7f70f8c678da5a8589b1c27d3f882efbd..7a7a4698f8b91303173ea4c451b887ca649fb473 100644
--- a/core/vendor/guzzlehttp/psr7/src/Response.php
+++ b/core/vendor/guzzlehttp/psr7/src/Response.php
@@ -93,7 +93,7 @@ public function __construct(
     ) {
         $this->statusCode = (int) $status;
 
-        if ($body !== null) {
+        if ($body) {
             $this->stream = stream_for($body);
         }
 
diff --git a/core/vendor/guzzlehttp/psr7/src/Uri.php b/core/vendor/guzzlehttp/psr7/src/Uri.php
index d428f2e1db468d11d54f117fc50d039df60dc99e..58c30667207cea551d8e834dff73d0f5166e03ed 100644
--- a/core/vendor/guzzlehttp/psr7/src/Uri.php
+++ b/core/vendor/guzzlehttp/psr7/src/Uri.php
@@ -123,33 +123,44 @@ public static function resolve(UriInterface $base, $rel)
             return $base;
         }
 
-        if (!($rel instanceof UriInterface)) {
-            $rel = new self($rel);
+        if ($rel instanceof UriInterface) {
+            $relParts = [
+                'scheme'   => $rel->getScheme(),
+                'host'     => $rel->getHost(),
+                'port'     => $rel->getPort(),
+                'path'     => $rel->getPath(),
+                'query'    => $rel->getQuery(),
+                'fragment' => $rel->getFragment()
+            ];
+        } else {
+            $relParts = parse_url($rel) + [
+                'scheme'   => '',
+                'host'     => '',
+                'port'     => '',
+                'path'     => '',
+                'query'    => '',
+                'fragment' => ''
+            ];
         }
 
-        // Return the relative uri as-is if it has a scheme.
-        if ($rel->getScheme()) {
-            return $rel->withPath(static::removeDotSegments($rel->getPath()));
+        if (!empty($relParts['scheme']) && !empty($relParts['host'])) {
+            return $rel instanceof UriInterface
+                ? $rel
+                : self::fromParts($relParts);
         }
 
-        $relParts = [
-            'scheme'    => $rel->getScheme(),
-            'authority' => $rel->getAuthority(),
-            'path'      => $rel->getPath(),
-            'query'     => $rel->getQuery(),
-            'fragment'  => $rel->getFragment()
-        ];
-
         $parts = [
-            'scheme'    => $base->getScheme(),
-            'authority' => $base->getAuthority(),
-            'path'      => $base->getPath(),
-            'query'     => $base->getQuery(),
-            'fragment'  => $base->getFragment()
+            'scheme'   => $base->getScheme(),
+            'host'     => $base->getHost(),
+            'port'     => $base->getPort(),
+            'path'     => $base->getPath(),
+            'query'    => $base->getQuery(),
+            'fragment' => $base->getFragment()
         ];
 
-        if (!empty($relParts['authority'])) {
-            $parts['authority'] = $relParts['authority'];
+        if (!empty($relParts['host'])) {
+            $parts['host'] = $relParts['host'];
+            $parts['port'] = $relParts['port'];
             $parts['path'] = self::removeDotSegments($relParts['path']);
             $parts['query'] = $relParts['query'];
             $parts['fragment'] = $relParts['fragment'];
@@ -159,7 +170,7 @@ public static function resolve(UriInterface $base, $rel)
                 $parts['query'] = $relParts['query'];
                 $parts['fragment'] = $relParts['fragment'];
             } else {
-                if (!empty($parts['authority']) && empty($parts['path'])) {
+                if (!empty($parts['host']) && empty($parts['path'])) {
                     $mergedPath = '/';
                 } else {
                     $mergedPath = substr($parts['path'], 0, strrpos($parts['path'], '/') + 1);
@@ -174,13 +185,7 @@ public static function resolve(UriInterface $base, $rel)
             $parts['fragment'] = $relParts['fragment'];
         }
 
-        return new self(static::createUriString(
-            $parts['scheme'],
-            $parts['authority'],
-            $parts['path'],
-            $parts['query'],
-            $parts['fragment']
-        ));
+        return static::fromParts($parts);
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/psr7/src/functions.php b/core/vendor/guzzlehttp/psr7/src/functions.php
index fd3e7f51604c9cd05a7133048d7de95eeee5220e..a1cec417866e7ef4429c7d27cdcf5e7447acdbe6 100644
--- a/core/vendor/guzzlehttp/psr7/src/functions.php
+++ b/core/vendor/guzzlehttp/psr7/src/functions.php
@@ -440,22 +440,19 @@ function readline(StreamInterface $stream, $maxLength = null)
 function parse_request($message)
 {
     $data = _parse_message($message);
-    $matches = [];
-    if (!preg_match('/^[a-zA-Z]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) {
+    if (!preg_match('/^[a-zA-Z]+\s+\/.*/', $data['start-line'])) {
         throw new \InvalidArgumentException('Invalid request string');
     }
     $parts = explode(' ', $data['start-line'], 3);
     $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1';
 
-    $request = new Request(
+    return new Request(
         $parts[0],
-        $matches[1] === '/' ? _parse_request_uri($parts[1], $data['headers']) : $parts[1],
+        _parse_request_uri($parts[1], $data['headers']),
         $data['headers'],
         $data['body'],
         $version
     );
-
-    return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]);
 }
 
 /**
diff --git a/core/vendor/guzzlehttp/psr7/src/functions_include.php b/core/vendor/guzzlehttp/psr7/src/functions_include.php
deleted file mode 100644
index 96a4a83a01aac6412572b74fd9b0abc339f6ad0f..0000000000000000000000000000000000000000
--- a/core/vendor/guzzlehttp/psr7/src/functions_include.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-// Don't redefine the functions if included multiple times.
-if (!function_exists('GuzzleHttp\Psr7\str')) {
-    require __DIR__ . '/functions.php';
-}
diff --git a/core/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php
index f82c3a5b6ac3cd14d68034e26008964d6c4a5e2e..e2ed0a744c473bb06486229eedda65cde0fdc8fa 100644
--- a/core/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php
@@ -32,43 +32,22 @@ public function testUsesRemoteSizeIfPossible()
         $this->assertEquals(4, $caching->getSize());
     }
 
-    public function testReadsUntilCachedToByte()
-    {
-        $this->body->seek(5);
-        $this->assertEquals('n', $this->body->read(1));
-        $this->body->seek(0);
-        $this->assertEquals('t', $this->body->read(1));
-    }
-
-    public function testCanSeekNearEndWithSeekEnd()
-    {
-        $baseStream = Psr7\stream_for(implode('', range('a', 'z')));
-        $cached = new CachingStream($baseStream);
-        $cached->seek(1, SEEK_END);
-        $this->assertEquals(24, $baseStream->tell());
-        $this->assertEquals('y', $cached->read(1));
-        $this->assertEquals(26, $cached->getSize());
-    }
-
-    public function testCanSeekToEndWithSeekEnd()
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Cannot seek to byte 10
+     */
+    public function testCannotSeekPastWhatHasBeenRead()
     {
-        $baseStream = Psr7\stream_for(implode('', range('a', 'z')));
-        $cached = new CachingStream($baseStream);
-        $cached->seek(0, SEEK_END);
-        $this->assertEquals(25, $baseStream->tell());
-        $this->assertEquals('z', $cached->read(1));
-        $this->assertEquals(26, $cached->getSize());
+        $this->body->seek(10);
     }
 
-    public function testCanUseSeekEndWithUnknownSize()
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage CachingStream::seek() supports SEEK_SET and SEEK_CUR
+     */
+    public function testCannotUseSeekEnd()
     {
-        $baseStream = Psr7\stream_for('testing');
-        $decorated = Psr7\FnStream::decorate($baseStream, [
-            'getSize' => function () { return null; }
-        ]);
-        $cached = new CachingStream($decorated);
-        $cached->seek(1, SEEK_END);
-        $this->assertEquals('ng', $cached->read(2));
+        $this->body->seek(2, SEEK_END);
     }
 
     public function testRewindUsesSeek()
@@ -155,12 +134,4 @@ public function testClosesBothStreams()
         $d->close();
         $this->assertFalse(is_resource($s));
     }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testEnsuresValidWhence()
-    {
-        $this->body->seek(10, -123456);
-    }
 }
diff --git a/core/vendor/guzzlehttp/psr7/tests/FunctionsTest.php b/core/vendor/guzzlehttp/psr7/tests/FunctionsTest.php
index de5b5cbcb87be230611c405e3b1fcc39fc77dcfd..6675039abe13af5d3a857ff20e9645f9a8305af7 100644
--- a/core/vendor/guzzlehttp/psr7/tests/FunctionsTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/FunctionsTest.php
@@ -270,18 +270,6 @@ public function testParsesRequestMessagesWithUriWhenHostIsNotFirst()
         $this->assertEquals('http://foo.com/', (string) $request->getUri());
     }
 
-    public function testParsesRequestMessagesWithFullUri()
-    {
-        $req = "GET https://www.google.com:443/search?q=foobar HTTP/1.1\r\nHost: www.google.com\r\n\r\n";
-        $request = Psr7\parse_request($req);
-        $this->assertEquals('GET', $request->getMethod());
-        $this->assertEquals('https://www.google.com:443/search?q=foobar', $request->getRequestTarget());
-        $this->assertEquals('1.1', $request->getProtocolVersion());
-        $this->assertEquals('www.google.com', $request->getHeaderLine('Host'));
-        $this->assertEquals('', (string) $request->getBody());
-        $this->assertEquals('https://www.google.com/search?q=foobar', (string) $request->getUri());
-    }
-
     /**
      * @expectedException \InvalidArgumentException
      */
diff --git a/core/vendor/guzzlehttp/psr7/tests/ResponseTest.php b/core/vendor/guzzlehttp/psr7/tests/ResponseTest.php
index 0ce3e21e0f22866570ee74d733122bf7cc0acd21..e8702924b1f4234e262065d96a24ce0ef7a73cf5 100644
--- a/core/vendor/guzzlehttp/psr7/tests/ResponseTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/ResponseTest.php
@@ -136,11 +136,4 @@ public function testRemovesPreviouslyAddedHeaderOfDifferentCase()
         $this->assertNotSame($r, $r2);
         $this->assertEquals('Bam', $r2->getHeaderLine('Foo'));
     }
-
-    public function testBodyConsistent()
-    {
-        $r = new Response(200, [], '0');
-        $this->assertEquals('0', (string)$r->getBody());
-    }
-    
 }
diff --git a/core/vendor/guzzlehttp/psr7/tests/UriTest.php b/core/vendor/guzzlehttp/psr7/tests/UriTest.php
index 277692072236ab83ba3da315d2490d2bb32986a2..80755da0f6aef60452cbe124322a7dbd640b7c33 100644
--- a/core/vendor/guzzlehttp/psr7/tests/UriTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/UriTest.php
@@ -152,8 +152,6 @@ public function getResolveTestCases()
             [self::RFC3986_BASE, 'g/../h',        'http://a/b/c/h'],
             [self::RFC3986_BASE, 'g;x=1/./y',     'http://a/b/c/g;x=1/y'],
             [self::RFC3986_BASE, 'g;x=1/../y',    'http://a/b/c/y'],
-            ['http://u@a/b/c/d;p?q', '.',         'http://u@a/b/c/'],
-            ['http://u:p@a/b/c/d;p?q', '.',       'http://u:p@a/b/c/'],
             //[self::RFC3986_BASE, 'http:g',        'http:g'],
         ];
     }
diff --git a/core/vendor/masterminds/html5/CREDITS b/core/vendor/masterminds/html5/CREDITS
index 59c87a2353873e0346afa4539306510572abaae6..c2dbc4b64a9cf7e6b6a4826b3a872c7ca1210152 100644
--- a/core/vendor/masterminds/html5/CREDITS
+++ b/core/vendor/masterminds/html5/CREDITS
@@ -7,5 +7,5 @@ Kukhar Vasily [ngreduce] <ngreduce@gmail.com> (contributor)
 Rune Christensen [MrElectronic] <mrelectronic@example.com> (contributor)
 MiÅ¡o Belica [miso-belica] <miso-belica@example.com> (contributor)
 Asmir Mustafic [goetas] <goetas@example.com> (contributor)
-KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor)
+KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor) 
 Jacob Floyd [cognifloyd] <cognifloyd@gmail.com> (contributor)
diff --git a/core/vendor/masterminds/html5/LICENSE.txt b/core/vendor/masterminds/html5/LICENSE.txt
index 93d60ed43fe89c2faff5f2e9c155cce5a3b60208..3c275b54a75ea01f2bffafe0e24e1ecde80b5bf6 100644
--- a/core/vendor/masterminds/html5/LICENSE.txt
+++ b/core/vendor/masterminds/html5/LICENSE.txt
@@ -7,8 +7,8 @@ Matt Farina - matt@mattfarina.com
 Asmir Mustafic - goetas@gmail.com
 
 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
+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:
@@ -49,8 +49,8 @@ The Mozilla Foundation (contributions from Henri Sivonen since 2008)
 David Flanagan (Mozilla) - dflanagan@mozilla.com
 
 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
+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:
diff --git a/core/vendor/masterminds/html5/README.md b/core/vendor/masterminds/html5/README.md
index db2abb702b3a3006019edecdd5d6f96ad0154984..1a2a96b9478b9e6b0c12a1dc5469331dd705a744 100644
--- a/core/vendor/masterminds/html5/README.md
+++ b/core/vendor/masterminds/html5/README.md
@@ -36,7 +36,7 @@ install.
 
 ## Basic Usage
 
-HTML5-PHP has a high-level API and a low-level API.
+HTML5-PHP has a high-level API and a low-level API. 
 
 Here is how you use the high-level `HTML5` library API:
 
@@ -144,14 +144,14 @@ The serializer is broken into three parts:
 
 - The `OutputRules` contain the rules to turn DOM elements into strings. The
 rules are an implementation of the interface `RulesInterface` allowing for
-different rule sets to be used.
+different rule sets to be used. 
 - The `Traverser`, which is a special-purpose tree walker. It visits
 each node node in the tree and uses the `OutputRules` to transform the node
 into a string.
 - `HTML5` manages the `Traverser` and stores the resultant data
 in the correct place.
 
-The serializer (`save()`, `saveHTML()`) follows the
+The serializer (`save()`, `saveHTML()`) follows the 
 [section 8.9 of the HTML 5.0 spec](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments).
 So tags are serialized according to these rules:
 
@@ -166,8 +166,8 @@ issues known issues that are not presently on the roadmap:
 
 - Namespaces: HTML5 only [supports a selected list of namespaces](http://www.w3.org/TR/html5/infrastructure.html#namespaces)
   and they do not operate in the same way as XML namespaces. A `:` has no special
-  meaning.
-  By default the parser does not support XML style namespaces via `:`;
+  meaning. 
+  By default the parser does not support XML style namespaces via `:`; 
   to enable the XML namespaces see the  [XML Namespaces section](#xml-namespaces)
 - Scripts: This parser does not contain a JavaScript or a CSS
   interpreter. While one may be supplied, not all features will be
@@ -184,13 +184,13 @@ issues known issues that are not presently on the roadmap:
   * Per the spec, many legacy tags are admitted and correctly handled,
     even though they are technically not part of HTML5.
 - Attribute names and values: Due to the implementation details of the
-  PHP implementation of DOM, attribute names that do not follow the
+  PHP implementation of DOM, attribute names that do not follow the 
   XML 1.0 standard are not inserted into the DOM. (Effectively, they
   are ignored.) If you've got a clever fix for this, jump in!
 - Processor Instructions: The HTML5 spec does not allow processor
   instructions. We do. Since this is a server-side library, we think
   this is useful. And that means, dear reader, that in some cases you
-  can parse the HTML from a mixed PHP/HTML document. This, however,
+  can parse the HTML from a mixed PHP/HTML document. This, however, 
   is an incidental feature, not a core feature.
 - HTML manifests: Unsupported.
 - PLAINTEXT: Unsupported.
diff --git a/core/vendor/masterminds/html5/UPGRADING.md b/core/vendor/masterminds/html5/UPGRADING.md
index e3e562d1c4bf00b43e20041aab7cd81e402d0bd0..76e3a19bc1d5ef4773c3ee8ee6b2dddf6e3d46c2 100644
--- a/core/vendor/masterminds/html5/UPGRADING.md
+++ b/core/vendor/masterminds/html5/UPGRADING.md
@@ -2,19 +2,19 @@ From 1.x to 2.x
 =================
 
 - All classes uses `Masterminds` namespace.
-- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed.
+- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed. 
 
     Before:
-
+    
         $dom = \HTML5::loadHTML('<html>....');
         \HTML5::saveHTML($dom);
-
+        
     After:
 
         use Masterminds\HTML5;
-
+        
         $html5 = new HTML5();
-
+        
         $dom = $html5->loadHTML('<html>....');
         echo $html5->saveHTML($dom);
 
diff --git a/core/vendor/masterminds/html5/phpunit.xml.dist b/core/vendor/masterminds/html5/phpunit.xml.dist
index b42903a989d3a2613dfb49042e07d4bdb8991216..c34488018dde26132746a6604baadab44c4830aa 100644
--- a/core/vendor/masterminds/html5/phpunit.xml.dist
+++ b/core/vendor/masterminds/html5/phpunit.xml.dist
@@ -11,7 +11,7 @@
             <file>src/HTML5/Parser/InputStream.php</file>
             <file>src/HTML5/Serializer/RulesInterface.php</file>
             <file>src/HTML5/Entities.php</file>
-            <file>src/HTML5/Serializer/HTML5Entities.php</file>
+            <file>src/HTML5/Serializer/HTML5Entities.php</file> 
         </blacklist>
     </filter>
     <logging>
diff --git a/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php b/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
index 3c18039cacba425f3c85511026ff4cb69c25bb32..b2a2d398f5b9cf29d3de358b1d14c3cee3f44b76 100644
--- a/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
+++ b/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
@@ -100,7 +100,7 @@ public function testDocumentWithATargetDocument()
         $this->assertSame($doc, $targetDom);
         $this->assertEquals('html', $doc->documentElement->tagName);
     }
-
+    
     public function testDocumentFakeAttrAbsence()
     {
         $html = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><body>foo</body></html>";
diff --git a/core/vendor/mikey179/vfsStream/.gitignore b/core/vendor/mikey179/vfsStream/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..76e2ab0790a50d5a323c1519dc52e62fe0ab84b7
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/.gitignore
@@ -0,0 +1,4 @@
+/composer.lock
+/docs
+/nbproject
+/vendor
diff --git a/core/vendor/mikey179/vfsStream/.travis.yml b/core/vendor/mikey179/vfsStream/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3d1a27c680009994e2413dc2beb36744fc3f50c3
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/.travis.yml
@@ -0,0 +1,11 @@
+language: php
+
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+
+before_script:
+  - composer install --dev
+
+script: phpunit --coverage-text
diff --git a/core/vendor/mikey179/vfsStream/CHANGELOG.md b/core/vendor/mikey179/vfsStream/CHANGELOG.md
deleted file mode 100644
index b3f2eb1cb60897f980c56400d91e320103e0cdcc..0000000000000000000000000000000000000000
--- a/core/vendor/mikey179/vfsStream/CHANGELOG.md
+++ /dev/null
@@ -1,192 +0,0 @@
-1.5.0 (2015-03-29)
-------------------
-
-   * implemented #91: `vfsStream::copyFromFileSystem()` should create large file instances
-   * implemented #92: `vfsStream::copyFromFileSystem()` should respect block devices
-   * fixed #107: `touch()` does not respect file permissions
-   * fixed #105: vfs directory structure is not reset after each test
-   * fixed #104: vfsStream can't handle url encoded pathes
-
-
-1.4.0 (2014-09-14)
-------------------
-
-   * implemented #85: Added support for emulating block devices in the virtual filesystem, feature provided by Harris Borawski
-   * fixed #68: Unlink a non-existing file now triggers a PHP warning
-
-
-1.3.0 (2014-07-21)
-------------------
-
-   * implemented #79: possibility to mock large files without large memory footprint, see https://github.com/mikey179/vfsStream/wiki/MockingLargeFiles
-   * implemented #67: added partial support for text-mode translation flag (i.e., no actual translation of line endings takes place) so it no longer throws an exception (provided by Anthon Pang)
-   * fixed issue #74: issue with trailing windows path separators (provided by Sebastian KrÃ¼ger)
-   * fixed issue #50: difference between real file system and vfs with `RecursiveDirectoryIterator`
-   * fixed issue #80: touch with no arguments for modification and access time behave incorrect
-   * deprecated `org\bovigo\vfs\vfsStreamFile::readUntilEnd()`
-   * deprecated `org\bovigo\vfs\vfsStreamFile::getBytesRead()`
-
-
-1.2.0 (2013-04-01)
-------------------
-
-   * implemented issue #34: provide `url()` method on all `vfsStreamContent` instances
-     * added `org\bovigo\vfs\vfsStreamContent::url()`
-     * added `org\bovigo\vfs\vfsStreamContent::path()`
-   * fixed issue #40: flock implementation doesn't work correctly, patch provided by Kamil Dziedzic
-   * fixed issue #49: call to member function on a non-object when trying to delete a file one above root where a file with same name in root exists
-   * fixed issue #51: `unlink()` must consider permissions of directory where file is inside, not of the file to unlink itself
-   * fixed issue #52: `chmod()`, `chown()` and `chgrp()` must consider permissions of directory where file/directory is inside
-   * fixed issue #53: `chmod()`, `chown()` and `chgrp()` must consider current user and current owner of file/directoy to change
-
-
-1.1.0 (2012-08-25)
-------------------
-
-   * implemented issue #11: add support for `streamWrapper::stream_metadata()` vfsStream now supports `touch()`, `chown()`, `chgrp()` and `chmod()`
-   * implemented issue #33: add support for `stream_truncate()` (provided by https://github.com/nikcorg)
-   * implemented issue #35: size limit (quota) for VFS
-
-
-1.0.0 (2012-05-15)
-------------------
-
-   * raised requirement for PHP version to 5.3.0
-   * migrated codebase to use namespaces
-   * changed distribution from PEAR to Composer
-   * implemented issue #30: support "c" mode for `fopen()`
-   * fixed issue #31: prohibit aquiring locks when already locked / release lock on `fclose()`
-   * fixed issue #32: problems when subfolder has same name as folder
-   * fixed issue #36: `vfsStreamWrapper::stream_open()` should return false while trying to open existing non-writable file, patch provided by Alexander Peresypkin
-
-
-0.11.2 (2012-01-14)
--------------------
-
-   * fixed issue #29: set permissions properly when using `vfsStream::copyFromFileSystem()`, patch provided by predakanga
-   * fixed failing tests under PHP > 5.3.2
-
-
-0.11.1 (2011-12-04)
--------------------
-
-   * fixed issue #28: `mkdir()` overwrites existing directories/files
-
-
-0.11.0 (2011-11-29)
--------------------
-
-   * implemented issue #20: `vfsStream::create()` removes old structure
-   * implemented issue #4: possibility to copy structure from existing file system
-   * fixed issue #23: `unlink()` should not remove any directory
-   * fixed issue #25: `vfsStreamDirectory::hasChild()` gives false positives for nested paths, patch provided by Andrew Coulton
-   * fixed issue #26: opening a file for reading only should not update its modification time, reported and initial patch provided by Ludovic Chabant
-
-
-0.10.1 (2011-08-22)
--------------------
-
-   * fixed issue #16: replace `vfsStreamContent` to `vfsStreamContainer` for autocompletion
-   * fixed issue #17: `vfsStream::create()` has issues with numeric directories, patch provided by mathieuk
-
-
-0.10.0 (2011-07-22)
--------------------
-
-   * added new method `vfsStreamContainer::hasChildren()` and `vfsStreamDirectory::hasChildren()`
-   * implemented issue #14: less verbose way to initialize vfsStream
-   * implemented issue #13: remove deprecated method `vfsStreamContent::setFilemtime()`
-   * implemented issue #6: locking meachanism for files
-   * ensured that `stream_set_blocking()`, `stream_set_timeout()` and `stream_set_write_buffer()` on vfsStream urls have the same behaviour with PHP 5.2 and 5.3
-   * implemented issue #10: method to print directory structure
-
-
-0.9.0 (2011-07-13)
-------------------
-
-   * implemented feature request issue #7: add support for `fileatime()` and `filectime()`
-   * fixed issue #3: add support for `streamWrapper::stream_cast()`
-   * fixed issue #9: resolve path not called everywhere its needed
-   * deprecated `vfsStreamAbstractContent::setFilemtime()`, use `vfsStreamAbstractContent::lastModified()` instead, will be removed with 0.10.0
-
-
-0.8.0 (2010-10-08)
-------------------
-
-   * implemented enhancement #6: use `vfsStream::umask()` to influence initial file mode for files and directories
-   * implemented enhancement #19: support of .. in the url, patch provided by Guislain Duthieuw
-   * fixed issue #18: `getChild()` returns NULL when child's name contains parent name
-   * fixed bug with incomplete error message when accessing non-existing files on root level
-
-
-0.7.0 (2010-06-08)
-------------------
-
-   * added new `vfsStream::setup()` method to simplify vfsStream usage
-   * fixed issue #15: `mkdir()` creates a subfolder in a folder without permissions
-
-
-0.6.0 (2010-02-15)
-------------------
-
-   * added support for `$mode` param when opening files, implements enhancement #7 and fixes issue #13
-   * `vfsStreamWrapper::stream_open()` now evaluates `$options` for `STREAM_REPORT_ERRORS`
-
-
-0.5.0 (2010-01-25)
-------------------
-
-   * added support for `rename()`, patch provided by Benoit Aubuchon
-   * added support for . as directory alias so that `vfs://foo/.` resolves to `vfs://foo`, can be used as workaround for bug #8
-
-
-0.4.0 (2009-07-13)
-------------------
-
-   * added support for file modes, users and groups (with restrictions, see http://code.google.com/p/bovigo/wiki/vfsStreamDocsKnownIssues)
-   * fixed bug #5: `vfsStreamDirectory::addChild()` does not replace child with same name
-   * fixed bug with `is_writable()` because of missing `stat()` fields, patch provided by Sergey Galkin
-
-
-0.3.2 (2009-02-16)
-------------------
-
-   * support trailing slashes on directories in vfsStream urls, patch provided by Gabriel Birke
-   * fixed bug #4: vfsstream can only be read once, reported by Christoph Bloemer
-   * enabled multiple iterations at the same time over the same directory
-
-
-0.3.1 (2008-02-18)
-------------------
-
-   * fixed path/directory separator issues under linux systems
-   * fixed uid/gid issues under linux systems
-
-
-0.3.0 (2008-01-02)
-------------------
-
-   * added support for `rmdir()`
-   * added `vfsStream::newDirectory()`, dropped `vfsStreamDirectory::ceate()`
-   * added new interface `vfsStreamContainer`
-   * added `vfsStreamContent::at()` which allows code like `$file = vfsStream::newFile('file.txt.')->withContent('foo')->at($otherDir);`
-   * added `vfsStreamContent::lastModified()`, made `vfsStreamContent::setFilemtime()` an alias for this
-   * moved from Stubbles development environment to bovigo
-   * refactorings to reduce crap index of various methods
-
-
-0.2.0 (2007-12-29)
-------------------
-
-   * moved `vfsStreamWrapper::PROTOCOL` to `vfsStream::SCHEME`
-   * added new `vfsStream::url()` method to assist in creating correct vfsStream urls
-   * added `vfsStream::path()` method as opposite to `vfsStream::url()`
-   * a call to `vfsStreamWrapper::register()` will now reset the root to null, implemented on request from David Zuelke
-   * added support for `is_readable()`, `is_dir()`, `is_file()`
-   * added `vfsStream::newFile()` to be able to do `$file = vfsStream::newFile("foo.txt")->withContent("bar");`
-
-
-0.1.0 (2007-12-14)
-------------------
-
-   * Initial release.
diff --git a/core/vendor/mikey179/vfsStream/CHANGES b/core/vendor/mikey179/vfsStream/CHANGES
new file mode 100644
index 0000000000000000000000000000000000000000..c89563dda8c4fda4f9ecb9959180718af64ed4be
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/CHANGES
@@ -0,0 +1,175 @@
+1.2.0, 2013-04-01
+==================
+- implemented issue #34: provide url() method on all vfsStreamContent instances
+    - added org\bovigo\vfs\vfsStreamContent::url()
+    - added org\bovigo\vfs\vfsStreamContent::path()
+- fixed issue #40: flock implementation doesn't work correctly, patch provided
+  by Kamil Dziedzic
+- fixed issue #49: call to member function on a non-object when trying to delete
+  a file one above root where a file with same name in root exists
+- fixed issue #51: unlink() must consider permissions of directory where file is
+  inside, not of the file to unlink itself
+- fixed issue #52: chmod(), chown() and chgrp() must consider permissions of
+  directory where file/directory is inside
+- fixed issue #53: chmod(), chown() and chgrp() must consider current user and
+  current owner of file/directoy to change
+
+
+1.1.0, 2012-08-25
+==================
+- implemented issue #11: add support for streamWrapper::stream_metadata()
+  vfsStream now supports touch(), chown(), chgrp() and chmod()
+- implemented issue #33: add support for stream_truncate
+  (provided by https://github.com/nikcorg)
+- implemented issue #35: size limit (quota) for VFS
+
+
+1.0.0, 2012-05-15
+==================
+- raised requirement for PHP version to 5.3.0
+- migrated codebase to use namespaces
+- changed distribution from PEAR to Composer
+- implemented issue #30: support "c" mode for fopen()
+- fixed issue #31: prohibit aquiring locks when already locked / release lock on
+  fclose()
+- fixed issue #32: problems when subfolder has same name as folder
+- fixed issue #36: vfsStreamWrapper::stream_open should return false while
+  trying to open existing non-writable file, patch provided by Alexander Peresypkin
+
+
+0.11.2, 2012-01-14
+==================
+- fixed issue #29: set permissions properly when using
+  vfsStream::copyFromFileSystem(), patch provided by predakanga
+- fixed failing tests under PHP > 5.3.2
+
+
+0.11.1, 2011-12-04
+==================
+- fixed issue #28: mkdir overwrites existing directories/files
+
+
+0.11.0, 2011-11-29
+==================
+- implemented issue #20: vfsStream::create() removes old structure
+- implemented issue #4: possibility to copy structure from existing file system
+- fixed issue #23: unlink should not remove any directory
+- fixed issue #25: vfsStreamDirectory::hasChild() gives false positives for
+  nested paths, patch provided by Andrew Coulton
+- fixed issue #26: opening a file for reading only should not update its
+  modification time, reported and initial patch provided by Ludovic Chabant
+
+
+0.10.1, 2011-08-22
+==================
+- fixed issue #16: replace vfsStreamContent to vfsStreamContainer for
+  autocompletion
+- fixed issue #17: vfsStream::create() has issues with numeric directories,
+  patch provided by mathieuk
+
+
+0.10.0, 2011-07-22
+==================
+- added new method vfsStreamContainer::hasChildren() and
+  vfsStreamDirectory::hasChildren()
+- implemented issue #14: less verbose way to initialize vfsStream
+- implemented issue #13: remove deprecated method vfsStreamContent::setFilemtime()
+- implemented issue #6: locking meachanism for files
+- ensured that stream_set_blocking(), stream_set_timeout() and
+  stream_set_write_buffer() on vfsStream urls have the same behaviour
+  with PHP 5.2 and 5.3
+- implemented issue #10: method to print directory structure
+
+
+0.9.0, 2011-07-13
+=================
+- implemented feature request issue #7: add support for fileatime() and filectime()
+- fixed issue #3: add support for streamWrapper::stream_cast()
+- fixed issue #9: resolve path not called everywhere its needed
+- deprecated vfsStreamAbstractContent::setFilemtime(), use
+  vfsStreamAbstractContent::lastModified() instead, will be removed with 0.10.0
+
+
+0.8.0, 2010-10-08
+=================
+- implemented enhancement #6: use vfsStream::umask() to influence initial file
+  mode for files and directories
+- implemented enhancement #19: support of .. in the url, patch provided by
+  Guislain Duthieuw
+- fixed issue #18: getChild() returns NULL when child's name contains parent name
+- fixed bug with incomplete error message when accessing non-existing files on
+  root level
+
+
+0.7.0, 2010-06-08
+=================
+- added new vfsStream::setup() method to simplify vfsStream usage
+- fixed issue #15: mkdir creates a subfolder in a folder without permissions
+
+
+0.6.0, 2010-02-15
+=================
+- added support for $mode param when opening files, implements enhancement #7
+  and fixes issue #13
+- vfsStreamWrapper::stream_open() now evaluates $options for STREAM_REPORT_ERRORS
+
+
+0.5.0, 2010-01-25
+=================
+- added support for rename(), patch provided by Benoit Aubuchon
+- added support for . as directory alias so that vfs://foo/. resolves to
+  vfs://foo, can be used as workaround for bug #8
+
+
+0.4.0, 2009-07-13
+=================
+- added support for file modes, users and groups (with restrictions, see
+  http://code.google.com/p/bovigo/wiki/vfsStreamDocsKnownIssues)
+- fixed bug #5: vfsStreamDirectory::addChild() does not replace child with same
+  name
+- fixed bug with is_writable() because of missing stat() fields, patch provided
+  by Sergey Galkin
+
+
+0.3.2, 2009-02-16
+=================
+- support trailing slashes on directories in vfsStream urls, patch provided by
+  Gabriel Birke
+- fixed bug #4: vfsstream can only be read once, reported by Christoph Bloemer
+- enabled multiple iterations at the same time over the same directory
+
+
+0.3.1, 2008-02-18
+=================
+- fixed path/directory separator issues under linux systems
+- fixed uid/gid issues under linux systems
+
+
+0.3.0, 2008-01-02
+=================
+- added support for rmdir()
+- added vfsStream::newDirectory(), dropped vfsStreamDirectory::ceate()
+- added new interface vfsStreamContainer
+- added vfsStreamContent::at() which allows code like
+  $file = vfsStream::newFile('file.txt.')->withContent('foo')->at($otherDir);
+- added vfsStreamContent::lastModified(), made vfsStreamContent::setFilemtime()
+  an alias for this
+- moved from Stubbles development environment to bovigo
+- refactorings to reduce crap index of various methods
+
+
+0.2.0, 2007-12-29
+=================
+- moved vfsStreamWrapper::PROTOCOL to vfsStream::SCHEME
+- added new vfsStream::url() method to assist in creating correct vfsStream urls
+- added vfsStream::path() method as opposite to vfsStream::url()
+- a call to vfsStreamWrapper::register() will now reset the root to null,
+  implemented on request from David Zuelke
+- added support for is_readable(), is_dir(), is_file()
+- added vfsStream::newFile() to be able to do
+  $file = vfsStream::newFile("foo.txt")->withContent("bar");
+
+
+0.1.0, 2007-12-14
+=================
+Initial release.
diff --git a/core/vendor/mikey179/vfsStream/LICENSE b/core/vendor/mikey179/vfsStream/LICENSE
index 1d41ab9343166d36a619574eeea84d1d07d7354e..d53ff5299dd36094629a3788274904c98aa2bfb0 100644
--- a/core/vendor/mikey179/vfsStream/LICENSE
+++ b/core/vendor/mikey179/vfsStream/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2007-2015, Frank Kleine
+Copyright (c) 2007-2013, Frank Kleine
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/mikey179/vfsStream/composer.json b/core/vendor/mikey179/vfsStream/composer.json
index c87f5fe6bce091546f49122311325a2e655deab1..46b085c57a7453e22bd0a84ffe108c816d4d2d90 100644
--- a/core/vendor/mikey179/vfsStream/composer.json
+++ b/core/vendor/mikey179/vfsStream/composer.json
@@ -2,32 +2,11 @@
     "name": "mikey179/vfsStream",
     "type": "library",
     "homepage": "http://vfs.bovigo.org/",
-    "description": "Virtual file system to mock the real file system in unit tests.",
-    "license": "BSD-3-Clause",
-    "authors": [
-        {
-            "name": "Frank Kleine",
-            "homepage": "http://frankkleine.de/",
-            "role": "Developer"
-        }
-    ],
-    "support": {
-        "issues": "https://github.com/mikey179/vfsStream/issues",
-        "source": "https://github.com/mikey179/vfsStream/tree/master",
-        "wiki": "https://github.com/mikey179/vfsStream/wiki"
-    },
+    "license": "BSD",
     "require": {
         "php": ">=5.3.0"
     },
-    "require-dev": {
-        "phpunit/phpunit": "~4.5"
-    },
     "autoload": {
         "psr-0": { "org\\bovigo\\vfs\\": "src/main/php" }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.5.x-dev"
-        }
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/Example.php b/core/vendor/mikey179/vfsStream/examples/Example.php
new file mode 100644
index 0000000000000000000000000000000000000000..a12caeec38708cce31e013ce35dc10b6545a8f5f
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/Example.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+/**
+ * Example class.
+ */
+class Example
+{
+    /**
+     * id of the example
+     *
+     * @type  string
+     */
+    protected $id;
+    /**
+     * a directory where we do something..
+     *
+     * @type  string
+     */
+    protected $directory;
+
+    /**
+     * constructor
+     *
+     * @param  string  $id
+     */
+    public function __construct($id)
+    {
+        $this->id = $id;
+    }
+
+    /**
+     * sets the directory
+     *
+     * @param  string  $directory
+     */
+    public function setDirectory($directory)
+    {
+        $this->directory = $directory . DIRECTORY_SEPARATOR . $this->id;
+        if (file_exists($this->directory) === false) {
+            mkdir($this->directory, 0700, true);
+        }
+    }
+
+    // more source code here...
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/ExampleTestCaseOldWay.php b/core/vendor/mikey179/vfsStream/examples/ExampleTestCaseOldWay.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ecb9d8d1a97ac4924b2a72c649384b8f609302c
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/ExampleTestCaseOldWay.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+require_once 'Example.php';
+/**
+ * Test case for class Example.
+ */
+class ExampleTestCaseOldWay extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environmemt
+     */
+    public function setUp()
+    {
+        if (file_exists(__DIR__ . '/id') === true) {
+            rmdir(__DIR__ . '/id');
+        }
+    }
+
+    /**
+     * clear up test environment
+     */
+    public function tearDown()
+    {
+        if (file_exists(__DIR__ . '/id') === true) {
+            rmdir(__DIR__ . '/id');
+        }
+    }
+
+    /**
+     * @test
+     */
+    public function directoryIsCreated()
+    {
+        $example = new Example('id');
+        $this->assertFalse(file_exists(__DIR__ . '/id'));
+        $example->setDirectory(__DIR__);
+        $this->assertTrue(file_exists(__DIR__ . '/id'));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/ExampleTestCaseWithVfsStream.php b/core/vendor/mikey179/vfsStream/examples/ExampleTestCaseWithVfsStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..97c8a374f6ed3f526d98fd56f9e583ce1dc6112e
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/ExampleTestCaseWithVfsStream.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+use org\bovigo\vfs\vfsStream;
+require_once 'Example.php';
+/**
+ * Test case for class Example.
+ *
+ * @package     bovigo_vfs
+ * @subpackage  examples
+ */
+class ExampleTestCaseWithVfsStream extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * root directory
+     *
+     * @type  vfsStreamDirectory
+     */
+    protected $root;
+
+    /**
+     * set up test environmemt
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup('exampleDir');
+    }
+
+    /**
+     * @test
+     */
+    public function directoryIsCreated()
+    {
+        $example = new Example('id');
+        $this->assertFalse($this->root->hasChild('id'));
+        $example->setDirectory(vfsStream::url('exampleDir'));
+        $this->assertTrue($this->root->hasChild('id'));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/FailureExample.php b/core/vendor/mikey179/vfsStream/examples/FailureExample.php
new file mode 100644
index 0000000000000000000000000000000000000000..472468b2eb5d366bc1cc02f14bc7dd2e93cb7265
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/FailureExample.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+/**
+ * Example class to demonstrate testing of failure behaviour with vfsStream.
+ */
+class FailureExample
+{
+    /**
+     * filename to write data
+     *
+     * @type  string
+     */
+    protected $filename;
+
+    /**
+     * constructor
+     *
+     * @param  string  $id
+     */
+    public function __construct($filename)
+    {
+        $this->filename = $filename;
+    }
+
+    /**
+     * sets the directory
+     *
+     * @param  string  $directory
+     */
+    public function writeData($data)
+    {
+        $bytes = @file_put_contents($this->filename, $data);
+        if (false === $bytes) {
+            return 'could not write data';
+        }
+
+        return 'ok';
+    }
+
+    // more source code here...
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/FailureExampleTestCase.php b/core/vendor/mikey179/vfsStream/examples/FailureExampleTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..e212305582f74dc6d3826e576e042b5ccdba5e07
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/FailureExampleTestCase.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+use org\bovigo\vfs\vfsStream;
+require_once 'FailureExample.php';
+/**
+ * Test case for class FailureExample.
+ */
+class FailureExampleTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * root directory
+     *
+     * @type  vfsStreamDirectory
+     */
+    protected $root;
+
+    /**
+     * set up test environmemt
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup('exampleDir');
+    }
+
+    /**
+     * @test
+     */
+    public function returnsOkOnNoFailure()
+    {
+        $example = new FailureExample(vfsStream::url('exampleDir/test.txt'));
+        $this->assertSame('ok', $example->writeData('testdata'));
+        $this->assertTrue($this->root->hasChild('test.txt'));
+        $this->assertSame('testdata', $this->root->getChild('test.txt')->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function returnsErrorMessageIfWritingToFileFails()
+    {
+        $file = vfsStream::newFile('test.txt', 0000)
+                         ->withContent('notoverwritten')
+                         ->at($this->root);
+        $example = new FailureExample(vfsStream::url('exampleDir/test.txt'));
+        $this->assertSame('could not write data', $example->writeData('testdata'));
+        $this->assertTrue($this->root->hasChild('test.txt'));
+        $this->assertSame('notoverwritten', $this->root->getChild('test.txt')->getContent());
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/FileModeExampleTestCaseOldWay.php b/core/vendor/mikey179/vfsStream/examples/FileModeExampleTestCaseOldWay.php
new file mode 100644
index 0000000000000000000000000000000000000000..9f99671101fb0f5276ef68c12d377edf45625260
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/FileModeExampleTestCaseOldWay.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+require_once 'FilemodeExample.php';
+/**
+ * Test case for class FilemodeExample.
+ */
+class FilemodeExampleTestCaseOldWay extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environmemt
+     */
+    public function setUp()
+    {
+        if (file_exists(__DIR__ . '/id') === true) {
+            rmdir(__DIR__ . '/id');
+        }
+    }
+
+    /**
+     * clear up test environment
+     */
+    public function tearDown()
+    {
+        if (file_exists(__DIR__ . '/id') === true) {
+            rmdir(__DIR__ . '/id');
+        }
+    }
+
+    /**
+     * test correct file mode for created directory
+     */
+    public function testDirectoryHasCorrectDefaultFilePermissions()
+    {
+        $example = new FilemodeExample('id');
+        $example->setDirectory(__DIR__);
+        if (DIRECTORY_SEPARATOR === '\\') {
+            // can not really test on windows, filemode from mkdir() is ignored
+            $this->assertEquals(40777, decoct(fileperms(__DIR__ . '/id')));
+        } else {
+            $this->assertEquals(40700, decoct(fileperms(__DIR__ . '/id')));
+        }
+    }
+
+    /**
+     * test correct file mode for created directory
+     */
+    public function testDirectoryHasCorrectDifferentFilePermissions()
+    {
+        $example = new FilemodeExample('id', 0755);
+        $example->setDirectory(__DIR__);
+        if (DIRECTORY_SEPARATOR === '\\') {
+            // can not really test on windows, filemode from mkdir() is ignored
+            $this->assertEquals(40777, decoct(fileperms(__DIR__ . '/id')));
+        } else {
+            $this->assertEquals(40755, decoct(fileperms(__DIR__ . '/id')));
+        }
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/FilePermissionsExample.php b/core/vendor/mikey179/vfsStream/examples/FilePermissionsExample.php
new file mode 100644
index 0000000000000000000000000000000000000000..6258a5d74d59956ccb1cbd622608e651a9a4ac9e
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/FilePermissionsExample.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+/**
+ * Example showing correct file permission support introduced with 0.7.0.
+ */
+class FilePermissionsExample
+{
+    /**
+     * reads configuration from given config file
+     *
+     * @param  mixed   $config
+     * @param  string  $configFile
+     */
+    public function writeConfig($config, $configFile)
+    {
+        @file_put_contents($configFile, serialize($config));
+    }
+
+    // more methods here
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/FilePermissionsExampleTestCase.php b/core/vendor/mikey179/vfsStream/examples/FilePermissionsExampleTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..66466362655031b32f602ad693ed0ed9e56ff47f
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/FilePermissionsExampleTestCase.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+use org\bovigo\vfs\vfsStream;
+require_once 'FilePermissionsExample.php';
+/**
+ * Test for FilePermissionsExample.
+ */
+class FilePermissionsExampleTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @test
+     */
+    public function directoryWritable()
+    {
+        vfsStream::setup('exampleDir');
+        $example = new FilePermissionsExample();
+        $example->writeConfig(array('foo' => 'bar'),
+                              vfsStream::url('exampleDir/writable.ini')
+        );
+
+        // assertions here
+    }
+
+    /**
+     * @test
+     */
+    public function directoryNotWritable()
+    {
+        vfsStream::setup('exampleDir', 0444);
+        $example = new FilePermissionsExample();
+        $example->writeConfig(array('foo' => 'bar'),
+                              vfsStream::url('exampleDir/notWritable.ini')
+        );
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/FilemodeExample.php b/core/vendor/mikey179/vfsStream/examples/FilemodeExample.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2ac364c111fa54d1490754bb3c90544c49ddd6f
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/FilemodeExample.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+/**
+ * Example class.
+ */
+class FilemodeExample
+{
+    /**
+     * id of the example
+     *
+     * @type  string
+     */
+    protected $id;
+    /**
+     * a directory where we do something..
+     *
+     * @type  string
+     */
+    protected $directory;
+    /**
+     * file mode for newly created directories
+     *
+     * @type  int
+     */
+    protected $fileMode;
+
+    /**
+     * constructor
+     *
+     * @param  string  $id
+     * @param  int     $fileMode  optional
+     */
+    public function __construct($id,  $fileMode = 0700)
+    {
+        $this->id       = $id;
+        $this->fileMode = $fileMode;
+    }
+
+    /**
+     * sets the directory
+     *
+     * @param  string  $directory
+     */
+    public function setDirectory($directory)
+    {
+        $this->directory = $directory . DIRECTORY_SEPARATOR . $this->id;
+        if (file_exists($this->directory) === false) {
+            mkdir($this->directory, $this->fileMode, true);
+        }
+    }
+
+    // more source code here...
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/FilemodeExampleTestCaseWithVfsStream.php b/core/vendor/mikey179/vfsStream/examples/FilemodeExampleTestCaseWithVfsStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..675a2c7261a28153c10495334d7dfdfef63f6823
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/FilemodeExampleTestCaseWithVfsStream.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\example;
+use org\bovigo\vfs\vfsStream;
+require_once 'FilemodeExample.php';
+/**
+ * Test case for class FilemodeExample.
+ */
+class FilemodeExampleTestCaseWithVfsStream extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * root directory
+     *
+     * @type  vfsStreamDirectory
+     */
+    protected $root;
+
+    /**
+     * set up test environmemt
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup('exampleDir');
+    }
+
+    /**
+     * test that the directory is created
+     */
+    public function testDirectoryIsCreatedWithDefaultPermissions()
+    {
+        $example = new FilemodeExample('id');
+        $example->setDirectory(vfsStream::url('exampleDir'));
+        $this->assertEquals(0700, $this->root->getChild('id')->getPermissions());
+    }
+
+    /**
+     * test that the directory is created
+     */
+    public function testDirectoryIsCreatedWithGivenPermissions()
+    {
+        $example = new FilemodeExample('id', 0755);
+        $example->setDirectory(vfsStream::url('exampleDir'));
+        $this->assertEquals(0755, $this->root->getChild('id')->getPermissions());
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/examples/bootstrap.php b/core/vendor/mikey179/vfsStream/examples/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..998c43db0f51c2e3102bd37bcdd94b724311182a
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/examples/bootstrap.php
@@ -0,0 +1,3 @@
+<?php
+require __DIR__ . '/../vendor/.composer/autoload.php';
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/phpdoc.dist.xml b/core/vendor/mikey179/vfsStream/phpdoc.dist.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9cc279721d7200b56652700a51bda12680a8e4b5
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/phpdoc.dist.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<phpdoc>
+  <title>vfsStream API Doc</title>
+  <parser>
+    <target>docs/api</target>
+    <default-package-name>org\bovigo\vfs</default-package-name>
+  </parser>
+  <transformer>
+    <target>docs/api</target>
+  </transformer>
+  <files>
+    <directory>src/main/php</directory>
+  </files>
+</phpdoc>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/phpunit.xml.dist b/core/vendor/mikey179/vfsStream/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..8d2140edce6df4291816e2859fc68eea8c424122
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/phpunit.xml.dist
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         bootstrap="vendor/autoload.php"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         forceCoversAnnotation="false"
+         mapTestClassNameToCoveredClassName="false"
+         printerClass="PHPUnit_TextUI_ResultPrinter"
+         processIsolation="false"
+         stopOnError="false"
+         stopOnFailure="false"
+         stopOnIncomplete="false"
+         stopOnSkipped="false"
+         strict="false"
+         verbose="true">
+  <testsuites>
+    <testsuite>
+      <directory suffix="TestCase.php">./src/test/php</directory>
+    </testsuite>
+  </testsuites>
+
+  <filter>
+    <whitelist>
+      <directory>src/main/php</directory>
+    </whitelist>
+  </filter>
+
+  <logging>
+    <log type="coverage-html" target="docs/coverage" charset="UTF-8"
+         yui="true" highlight="false"
+         lowUpperBound="35" highLowerBound="70"/>
+    <log type="junit" target="docs/phpunit/junit.xml" logIncompleteSkipped="false"/>
+    <log type="testdox-html" target="docs/phpunit/testdox.html"/>
+  </logging>
+
+  <php>
+    <ini name="memory_limit" value="-1"/>
+  </php>
+</phpunit>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/readme.md b/core/vendor/mikey179/vfsStream/readme.md
index 9eb78c506f688aec603354c6f412bfe4e8cf2f24..1635eddd37d404b4d730d4b96bf0c2f2bcf6240b 100644
--- a/core/vendor/mikey179/vfsStream/readme.md
+++ b/core/vendor/mikey179/vfsStream/readme.md
@@ -1,5 +1,3 @@
 For more information have a look in the [wiki](https://github.com/mikey179/vfsStream/wiki).
 
-[![Build Status](https://secure.travis-ci.org/mikey179/vfsStream.png)](http://travis-ci.org/mikey179/vfsStream) [![Coverage Status](https://coveralls.io/repos/mikey179/vfsStream/badge.png?branch=master)](https://coveralls.io/r/mikey179/vfsStream?branch=master)
-
-[![Latest Stable Version](https://poser.pugx.org/mikey179/vfsStream/version.png)](https://packagist.org/packages/mikey179/vfsStream) [![Latest Unstable Version](https://poser.pugx.org/mikey179/vfsStream/v/unstable.png)](//packagist.org/packages/mikey179/vfsStream)
+[![Build Status](https://secure.travis-ci.org/mikey179/vfsStream.png)](http://travis-ci.org/mikey179/vfsStream)
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/DotDirectory.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/DotDirectory.php
deleted file mode 100644
index e9bc21588899fc7e60a3513b41d6d49bc7de03ae..0000000000000000000000000000000000000000
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/DotDirectory.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-/**
- * This file is part of vfsStream.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @package  org\bovigo\vfs
- */
-namespace org\bovigo\vfs;
-/**
- * Directory container.
- */
-class DotDirectory extends vfsStreamDirectory
-{
-    /**
-     * returns iterator for the children
-     *
-     * @return  vfsStreamContainerIterator
-     */
-    public function getIterator()
-    {
-        return new \ArrayIterator(array());
-    }
-
-    /**
-     * checks whether dir is a dot dir
-     *
-     * @return  bool
-     */
-    public function isDot()
-    {
-        return true;
-    }
-}
-?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/FileContent.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/FileContent.php
deleted file mode 100644
index de649a8a08d9ef7499baffca7c936c13cf1ec6e5..0000000000000000000000000000000000000000
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/FileContent.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-/**
- * This file is part of vfsStream.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @package  org\bovigo\vfs
- */
-namespace org\bovigo\vfs\content;
-/**
- * Interface for actual file contents.
- *
- * @since  1.3.0
- */
-interface FileContent
-{
-    /**
-     * returns actual content
-     *
-     * @return  string
-     */
-    public function content();
-
-    /**
-     * returns size of content
-     *
-     * @return  int
-     */
-    public function size();
-
-    /**
-     * reads the given amount of bytes from content
-     *
-     * @param   int     $count
-     * @return  string
-     */
-    public function read($count);
-
-    /**
-     * seeks to the given offset
-     *
-     * @param   int   $offset
-     * @param   int   $whence
-     * @return  bool
-     */
-    public function seek($offset, $whence);
-
-    /**
-     * checks whether pointer is at end of file
-     *
-     * @return  bool
-     */
-    public function eof();
-
-    /**
-     * writes an amount of data
-     *
-     * @param   string  $data
-     * @return  amount of written bytes
-     */
-    public function write($data);
-
-    /**
-     * Truncates a file to a given length
-     *
-     * @param   int  $size length to truncate file to
-     * @return  bool
-     */
-    public function truncate($size);
-}
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php
deleted file mode 100644
index 6bc0afc743a0875c6ca1e3b08254474840c2d49d..0000000000000000000000000000000000000000
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-/**
- * This file is part of vfsStream.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @package  org\bovigo\vfs
- */
-namespace org\bovigo\vfs\content;
-/**
- * File content implementation to mock large files.
- *
- * When content is written via write() the data will be written into the
- * positions according to the current offset.
- * When content is read via read() it will use the already written data. If no
- * data is written at the offsets to read those offsets will be filled with
- * spaces.
- * Please note that accessing the whole content via content() will deliver a
- * string with the length of the originally defined size. It is not advisable to
- * do so with large sizes, except you have enough memory and time. :-)
- *
- * @since  1.3.0
- */
-class LargeFileContent extends SeekableFileContent implements FileContent
-{
-    /**
-     * byte array of written content
-     *
-     * @type  char[]
-     */
-    private $content = array();
-    /**
-     * file size in bytes
-     *
-     * @type  int
-     */
-    private $size;
-
-    /**
-     * constructor
-     *
-     * @param  int  $size  file size in bytes
-     */
-    public function __construct($size)
-    {
-        $this->size = $size;
-    }
-
-    /**
-     * create large file with given size in kilobyte
-     *
-     * @param   int  $kilobyte
-     * @return  LargeFileContent
-     */
-    public static function withKilobytes($kilobyte)
-    {
-        return new self($kilobyte * 1024);
-    }
-
-    /**
-     * create large file with given size in megabyte
-     *
-     * @param   int  $megabyte
-     * @return  LargeFileContent
-     */
-    public static function withMegabytes($megabyte)
-    {
-        return self::withKilobytes($megabyte * 1024);
-    }
-
-    /**
-     * create large file with given size in gigabyte
-     *
-     * @param   int  $gigabyte
-     * @return  LargeFileContent
-     */
-    public static function withGigabytes($gigabyte)
-    {
-        return self::withMegabytes($gigabyte * 1024);
-    }
-
-    /**
-     * returns actual content
-     *
-     * @return  string
-     */
-    public function content()
-    {
-        return $this->doRead(0, $this->size);
-    }
-
-    /**
-     * returns size of content
-     *
-     * @return  int
-     */
-    public function size()
-    {
-        return $this->size;
-    }
-
-    /**
-     * actual reading of given byte count starting at given offset
-     *
-     * @param  int  $offset
-     * @param  int  $count
-     */
-    protected function doRead($offset, $count)
-    {
-        if (($offset + $count) > $this->size) {
-            $count = $this->size - $offset;
-        }
-
-        $result = '';
-        for ($i = 0; $i < $count; $i++) {
-            if (isset($this->content[$i + $offset])) {
-                $result .= $this->content[$i + $offset];
-            } else {
-                $result .= ' ';
-            }
-        }
-
-        return $result;
-    }
-
-    /**
-     * actual writing of data with specified length at given offset
-     *
-     * @param   string  $data
-     * @param   int     $offset
-     * @param   int     $length
-     */
-    protected function doWrite($data, $offset, $length)
-    {
-        for ($i = 0; $i < $length; $i++) {
-            $this->content[$i + $offset] = $data{$i};
-        }
-
-        if ($offset >= $this->size) {
-            $this->size += $length;
-        } elseif (($offset + $length) > $this->size) {
-            $this->size = $offset + $length;
-        }
-    }
-
-    /**
-     * Truncates a file to a given length
-     *
-     * @param   int  $size length to truncate file to
-     * @return  bool
-     */
-    public function truncate($size)
-    {
-        $this->size = $size;
-        foreach (array_filter(array_keys($this->content),
-                              function($pos) use ($size)
-                              {
-                                  return $pos >= $size;
-                              }
-                ) as $removePos) {
-            unset($this->content[$removePos]);
-        }
-
-        return true;
-    }
-}
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php
deleted file mode 100644
index e74800083868acf56917a394d9bb88b83e96f863..0000000000000000000000000000000000000000
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-/**
- * This file is part of vfsStream.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @package  org\bovigo\vfs
- */
-namespace org\bovigo\vfs\content;
-/**
- * Default implementation for file contents based on simple strings.
- *
- * @since  1.3.0
- */
-abstract class SeekableFileContent implements FileContent
-{
-    /**
-     * current position within content
-     *
-     * @type  int
-     */
-    private $offset = 0;
-
-    /**
-     * reads the given amount of bytes from content
-     *
-     * @param   int     $count
-     * @return  string
-     */
-    public function read($count)
-    {
-        $data = $this->doRead($this->offset, $count);
-        $this->offset += $count;
-        return $data;
-    }
-
-    /**
-     * actual reading of given byte count starting at given offset
-     *
-     * @param  int  $offset
-     * @param  int  $count
-     */
-    protected abstract function doRead($offset, $count);
-
-    /**
-     * seeks to the given offset
-     *
-     * @param   int   $offset
-     * @param   int   $whence
-     * @return  bool
-     */
-    public function seek($offset, $whence)
-    {
-        switch ($whence) {
-            case SEEK_CUR:
-                $this->offset += $offset;
-                return true;
-
-            case SEEK_END:
-                $this->offset = $this->size() + $offset;
-                return true;
-
-            case SEEK_SET:
-                $this->offset = $offset;
-                return true;
-
-            default:
-                return false;
-        }
-
-        return false;
-    }
-
-    /**
-     * checks whether pointer is at end of file
-     *
-     * @return  bool
-     */
-    public function eof()
-    {
-        return $this->size() <= $this->offset;
-    }
-
-    /**
-     * writes an amount of data
-     *
-     * @param   string  $data
-     * @return  amount of written bytes
-     */
-    public function write($data)
-    {
-        $dataLength    = strlen($data);
-        $this->doWrite($data, $this->offset, $dataLength);
-        $this->offset += $dataLength;
-        return $dataLength;
-    }
-
-    /**
-     * actual writing of data with specified length at given offset
-     *
-     * @param   string  $data
-     * @param   int     $offset
-     * @param   int     $length
-     */
-    protected abstract function doWrite($data, $offset, $length);
-
-    /**
-     * for backwards compatibility with vfsStreamFile::bytesRead()
-     *
-     * @return  int
-     * @deprecated
-     */
-    public function bytesRead()
-    {
-        return $this->offset;
-    }
-
-    /**
-     * for backwards compatibility with vfsStreamFile::readUntilEnd()
-     *
-     * @return  string
-     * @deprecated
-     */
-    public function readUntilEnd()
-    {
-        return substr($this->content(), $this->offset);
-    }
-}
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/StringBasedFileContent.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/StringBasedFileContent.php
deleted file mode 100644
index 58bd214000a78fb34e33245065f477b9c5b0d41f..0000000000000000000000000000000000000000
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/StringBasedFileContent.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-/**
- * This file is part of vfsStream.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @package  org\bovigo\vfs
- */
-namespace org\bovigo\vfs\content;
-/**
- * Default implementation for file contents based on simple strings.
- *
- * @since  1.3.0
- */
-class StringBasedFileContent extends SeekableFileContent implements FileContent
-{
-    /**
-     * actual content
-     *
-     * @type  string
-     */
-    private $content;
-
-    /**
-     * constructor
-     *
-     * @param  string  $content
-     */
-    public function __construct($content)
-    {
-        $this->content = $content;
-    }
-
-    /**
-     * returns actual content
-     *
-     * @return  string
-     */
-    public function content()
-    {
-        return $this->content;
-    }
-
-    /**
-     * returns size of content
-     *
-     * @return  int
-     */
-    public function size()
-    {
-        return strlen($this->content);
-    }
-
-    /**
-     * actual reading of length starting at given offset
-     *
-     * @param  int  $offset
-     * @param  int  $count
-     */
-    protected function doRead($offset, $count)
-    {
-        return substr($this->content, $offset, $count);
-    }
-
-    /**
-     * actual writing of data with specified length at given offset
-     *
-     * @param   string  $data
-     * @param   int     $offset
-     * @param   int     $length
-     */
-    protected function doWrite($data, $offset, $length)
-    {
-        $this->content = substr($this->content, 0, $offset)
-                       . $data
-                       . substr($this->content, $offset + $length);
-    }
-
-    /**
-     * Truncates a file to a given length
-     *
-     * @param   int  $size length to truncate file to
-     * @return  bool
-     */
-    public function truncate($size)
-    {
-        if ($size > $this->size()) {
-            // Pad with null-chars if we're "truncating up"
-            $this->content .= str_repeat("\0", $size - $this->size());
-        } else {
-            $this->content = substr($this->content, 0, $size);
-        }
-
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStream.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStream.php
index f7f13cb33a6da600fef56b2203184a5a7558670a..f68fefd8ac1d0322b84f2da961cfed766a19bddf 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStream.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStream.php
@@ -8,7 +8,6 @@
  * @package  org\bovigo\vfs
  */
 namespace org\bovigo\vfs;
-use org\bovigo\vfs\content\LargeFileContent;
 use org\bovigo\vfs\visitor\vfsStreamVisitor;
 /**
  * Some utility methods for vfsStream.
@@ -20,43 +19,37 @@ class vfsStream
     /**
      * url scheme
      */
-    const SCHEME            = 'vfs';
+    const SCHEME           = 'vfs';
     /**
      * owner: root
      */
-    const OWNER_ROOT        = 0;
+    const OWNER_ROOT       = 0;
     /**
      * owner: user 1
      */
-    const OWNER_USER_1       = 1;
+    const OWNER_USER_1      = 1;
     /**
      * owner: user 2
      */
-    const OWNER_USER_2       = 2;
+    const OWNER_USER_2      = 2;
     /**
      * group: root
      */
-    const GROUP_ROOT         = 0;
+    const GROUP_ROOT        = 0;
     /**
      * group: user 1
      */
-    const GROUP_USER_1       = 1;
+    const GROUP_USER_1      = 1;
     /**
      * group: user 2
      */
-    const GROUP_USER_2       = 2;
+    const GROUP_USER_2      = 2;
     /**
      * initial umask setting
      *
      * @type  int
      */
-    protected static $umask  = 0000;
-    /**
-     * switch whether dotfiles are enabled in directory listings
-     *
-     * @type  bool
-     */
-    private static $dotFiles = true;
+    protected static $umask = 0000;
 
     /**
      * prepends the scheme to the given URL
@@ -77,13 +70,13 @@ public static function url($path)
      */
     public static function path($url)
     {
-        // remove line feeds and trailing whitespaces and path separators
-        $path = trim($url, " \t\r\n\0\x0B/\\");
+        // remove line feeds and trailing whitespaces
+        $path = trim($url, " \t\r\n\0\x0B/");
         $path = substr($path, strlen(self::SCHEME . '://'));
         $path = str_replace('\\', '/', $path);
         // replace double slashes with single slashes
         $path = str_replace('//', '/', $path);
-        return urldecode($path);
+        return $path;
     }
 
     /**
@@ -225,13 +218,7 @@ protected static function addStructure(array $structure, vfsStreamDirectory $bas
             if (is_array($data) === true) {
                 self::addStructure($data, self::newDirectory($name)->at($baseDir));
             } elseif (is_string($data) === true) {
-                $matches = null;
-                preg_match('/^\[(.*)\]$/', $name, $matches);
-                if ($matches !== array()) {
-                    self::newBlock($matches[1])->withContent($data)->at($baseDir);
-                } else {
-                    self::newFile($name)->withContent($data)->at($baseDir);
-                }
+                self::newFile($name)->withContent($data)->at($baseDir);
             }
         }
 
@@ -246,9 +233,7 @@ protected static function addStructure(array $structure, vfsStreamDirectory $bas
      * names.
      * File permissions are copied as well.
      * Please note that file contents will only be copied if their file size
-     * does not exceed the given $maxFileSize which defaults to 1024 KB. In case
-     * the file is larger file content will be mocked, see
-     * https://github.com/mikey179/vfsStream/wiki/MockingLargeFiles.
+     * does not exceed the given $maxFileSize which is 1024 KB.
      *
      * @param   string              $path         path to copy the structure from
      * @param   vfsStreamDirectory  $baseDir      directory to add the structure to
@@ -270,42 +255,26 @@ public static function copyFromFileSystem($path, vfsStreamDirectory $baseDir = n
 
         $dir = new \DirectoryIterator($path);
         foreach ($dir as $fileinfo) {
-            switch (filetype($fileinfo->getPathname())) {
-                case 'file':
-                    if ($fileinfo->getSize() <= $maxFileSize) {
-                        $content = file_get_contents($fileinfo->getPathname());
-                    } else {
-                        $content = new LargeFileContent($fileinfo->getSize());
-                    }
-
-                    self::newFile(
-                            $fileinfo->getFilename(),
-                            octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4))
-                        )
-                        ->withContent($content)
-                        ->at($baseDir);
-                    break;
-
-                case 'dir':
-                    if (!$fileinfo->isDot()) {
-                        self::copyFromFileSystem(
-                                $fileinfo->getPathname(),
-                                self::newDirectory(
-                                        $fileinfo->getFilename(),
-                                        octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4))
-                                )->at($baseDir),
-                                $maxFileSize
-                        );
-                    }
-
-                    break;
+            if ($fileinfo->isFile() === true) {
+                if ($fileinfo->getSize() <= $maxFileSize) {
+                    $content = file_get_contents($fileinfo->getPathname());
+                } else {
+                    $content = '';
+                }
 
-                case 'block':
-                    self::newBlock(
-                            $fileinfo->getFilename(),
-                            octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4))
-                        )->at($baseDir);
-                    break;
+                self::newFile($fileinfo->getFilename(),
+                              octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4))
+                      )
+                    ->withContent($content)
+                    ->at($baseDir);
+            } elseif ($fileinfo->isDir() === true && $fileinfo->isDot() === false) {
+                self::copyFromFileSystem($fileinfo->getPathname(),
+                                         self::newDirectory($fileinfo->getFilename(),
+                                                            octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4))
+                                               )
+                                             ->at($baseDir),
+                                         $maxFileSize
+                );
             }
         }
 
@@ -354,18 +323,6 @@ public static function newDirectory($name, $permissions = null)
     }
 
     /**
-     * returns a new block with the given name
-     *
-     * @param   string  $name           name of the block device
-     * @param   int     $permissions    permissions of block to create
-     * @return vfsStreamBlock
-     */
-    public static function newBlock($name, $permissions = null)
-    {
-        return new vfsStreamBlock($name, $permissions);
-    }
-
-    /**
      * returns current user
      *
      * If the system does not support posix_getuid() the current user will be root (0).
@@ -428,35 +385,5 @@ public static function setQuota($bytes)
     {
         vfsStreamWrapper::setQuota(new Quota($bytes));
     }
-
-    /**
-     * checks if vfsStream lists dotfiles in directory listings
-     *
-     * @return  bool
-     * @since   1.3.0
-     */
-    public static function useDotfiles()
-    {
-        return self::$dotFiles;
-    }
-
-    /**
-     * disable dotfiles in directory listings
-     *
-     * @since  1.3.0
-     */
-    public static function disableDotfiles()
-    {
-        self::$dotFiles = false;
-    }
-
-    /**
-     * enable dotfiles in directory listings
-     *
-     * @since  1.3.0
-     */
-    public static function enableDotfiles()
-    {
-        self::$dotFiles = true;
-    }
 }
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamBlock.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamBlock.php
deleted file mode 100644
index 128a96a31ecedc92786f0053c20cc2b0146affc5..0000000000000000000000000000000000000000
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamBlock.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * This file is part of vfsStream.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @package  org\bovigo\vfs
- */
-namespace org\bovigo\vfs;
-
-/**
- * Block container.
- *
- * @api
- */
-class vfsStreamBlock extends vfsStreamFile
-{
-    /**
-     * constructor
-     *
-     * @param  string  $name
-     * @param  int     $permissions  optional
-     */
-    public function __construct($name, $permissions = null)
-    {
-        if (empty($name)) {
-            throw new vfsStreamException('Name of Block device was empty');
-        }
-        parent::__construct($name, $permissions);
-
-        $this->type = vfsStreamContent::TYPE_BLOCK;
-    }
-}
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContainerIterator.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContainerIterator.php
index 83943dc6b16e5aa5cab0f9438b8bbc2544559a34..0f3e3a7912a166d6d731a3fb280dac201883af7e 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContainerIterator.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContainerIterator.php
@@ -28,10 +28,6 @@ class vfsStreamContainerIterator implements \Iterator
     public function __construct(array $children)
     {
         $this->children = $children;
-        if (vfsStream::useDotfiles()) {
-            array_unshift($this->children, new DotDirectory('.'), new DotDirectory('..'));
-        }
-
         reset($this->children);
     }
 
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContent.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContent.php
index efccccec4d58b493bd11b7084325ac369f7f1526..66f4d12089a035aec8648fbf379fa654f6f25e18 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContent.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamContent.php
@@ -33,13 +33,6 @@
     #const TYPE_LINK = 0120000;
 
     /**
-     * stream content type: block
-     *
-     * @see getType()
-     */
-    const TYPE_BLOCK = 0060000;
-
-    /**
      * returns the file name of the content
      *
      * @return  string
@@ -211,4 +204,4 @@ public function path();
      */
     public function url();
 }
-?>
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamDirectory.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamDirectory.php
index e17c835f7193c7f6cdd74ad136e8d24c7b980820..ba4c0171567455c1f4acdf66edba442819c56e9b 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamDirectory.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamDirectory.php
@@ -249,19 +249,5 @@ public function getIterator()
     {
         return new vfsStreamContainerIterator($this->children);
     }
-
-    /**
-     * checks whether dir is a dot dir
-     *
-     * @return  bool
-     */
-    public function isDot()
-    {
-        if ('.' === $this->name || '..' === $this->name) {
-            return true;
-        }
-
-        return false;
-    }
 }
 ?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamFile.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamFile.php
index 7e5f065ebd65a37ab28891f0e1813bb8d3e2b46d..70c1be848a17c7619f92a7da18d49a2381796ab6 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamFile.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamFile.php
@@ -8,8 +8,6 @@
  * @package  org\bovigo\vfs
  */
 namespace org\bovigo\vfs;
-use org\bovigo\vfs\content\FileContent;
-use org\bovigo\vfs\content\StringBasedFileContent;
 /**
  * File container.
  *
@@ -18,11 +16,17 @@
 class vfsStreamFile extends vfsStreamAbstractContent
 {
     /**
-     * content of the file
+     * the real content of the file
      *
-     * @type  FileContent
+     * @type  string
      */
-    private $content;
+    protected $content;
+    /**
+     * amount of read bytes
+     *
+     * @type  int
+     */
+    protected $bytes_read = 0;
     /**
      * Resource id which exclusively locked this file
      *
@@ -44,8 +48,7 @@ class vfsStreamFile extends vfsStreamAbstractContent
      */
     public function __construct($name, $permissions = null)
     {
-        $this->content = new StringBasedFileContent(null);
-        $this->type    = vfsStreamContent::TYPE_FILE;
+        $this->type = vfsStreamContent::TYPE_FILE;
         parent::__construct($name, $permissions);
     }
 
@@ -89,20 +92,12 @@ public function setContent($content)
      * Setting content with this method does not change the time when the file
      * was last modified.
      *
-     * @param   string]FileContent  $content
+     * @param   string  $content
      * @return  vfsStreamFile
-     * @throws  \InvalidArgumentException
      */
     public function withContent($content)
     {
-        if (is_string($content)) {
-            $this->content = new StringBasedFileContent($content);
-        } elseif ($content instanceof FileContent) {
-            $this->content = $content;
-        } else {
-            throw new \InvalidArgumentException('Given content must either be a string or an instance of org\bovigo\vfs\content\FileContent');
-        }
-
+        $this->content = $content;
         return $this;
     }
 
@@ -116,7 +111,7 @@ public function withContent($content)
      */
     public function getContent()
     {
-        return $this->content->content();
+        return $this->content;
     }
 
     /**
@@ -126,7 +121,7 @@ public function getContent()
      */
     public function open()
     {
-        $this->content->seek(0, SEEK_SET);
+        $this->seek(0, SEEK_SET);
         $this->lastAccessed = time();
     }
 
@@ -137,7 +132,7 @@ public function open()
      */
     public function openForAppend()
     {
-        $this->content->seek(0, SEEK_END);
+        $this->seek(0, SEEK_END);
         $this->lastAccessed = time();
     }
 
@@ -149,7 +144,7 @@ public function openForAppend()
     public function openWithTruncate()
     {
         $this->open();
-        $this->content->truncate(0);
+        $this->content      = '';
         $time               = time();
         $this->lastAccessed = $time;
         $this->lastModified = $time;
@@ -165,8 +160,10 @@ public function openWithTruncate()
      */
     public function read($count)
     {
+        $data = substr($this->content, $this->bytes_read, $count);
+        $this->bytes_read  += $count;
         $this->lastAccessed = time();
-        return $this->content->read($count);
+        return $data;
     }
 
     /**
@@ -175,12 +172,11 @@ public function read($count)
      * Using this method changes the time when the file was last accessed.
      *
      * @return  string
-     * @deprecated  since 1.3.0
      */
     public function readUntilEnd()
     {
         $this->lastAccessed = time();
-        return $this->content->readUntilEnd();
+        return substr($this->content, $this->bytes_read);
     }
 
     /**
@@ -193,8 +189,11 @@ public function readUntilEnd()
      */
     public function write($data)
     {
+        $dataLen            = strlen($data);
+        $this->content      = substr($this->content, 0, $this->bytes_read) . $data . substr($this->content, $this->bytes_read + $dataLen);
+        $this->bytes_read  += $dataLen;
         $this->lastModified = time();
-        return $this->content->write($data);
+        return $dataLen;
     }
 
     /**
@@ -204,9 +203,14 @@ public function write($data)
      * @return  bool
      * @since   1.1.0
      */
-    public function truncate($size)
-    {
-        $this->content->truncate($size);
+    public function truncate($size) {
+        if ($size > $this->size()) {
+            // Pad with null-chars if we're "truncating up"
+            $this->setContent($this->getContent() . str_repeat("\0", $size - $this->size()));
+        } else {
+            $this->setContent(substr($this->getContent(), 0, $size));
+        }
+
         $this->lastModified = time();
         return true;
     }
@@ -218,18 +222,17 @@ public function truncate($size)
      */
     public function eof()
     {
-        return $this->content->eof();
+        return $this->bytes_read >= strlen($this->content);
     }
 
     /**
      * returns the current position within the file
      *
      * @return  int
-     * @deprecated  since 1.3.0
      */
     public function getBytesRead()
     {
-        return $this->content->bytesRead();
+        return $this->bytes_read;
     }
 
     /**
@@ -241,7 +244,24 @@ public function getBytesRead()
      */
     public function seek($offset, $whence)
     {
-        return $this->content->seek($offset, $whence);
+        switch ($whence) {
+            case SEEK_CUR:
+                $this->bytes_read += $offset;
+                return true;
+
+            case SEEK_END:
+                $this->bytes_read = strlen($this->content) + $offset;
+                return true;
+
+            case SEEK_SET:
+                $this->bytes_read = $offset;
+                return true;
+
+            default:
+                return false;
+        }
+
+        return false;
     }
 
     /**
@@ -251,7 +271,7 @@ public function seek($offset, $whence)
      */
     public function size()
     {
-        return $this->content->size();
+        return strlen($this->content);
     }
 
 
@@ -284,7 +304,7 @@ public function lock($resource, $operation)
             if ($this->hasExclusiveLock()) {
                 return false;
             }
-
+            
             $this->addSharedLock($resource);
         }
 
@@ -293,7 +313,7 @@ public function lock($resource, $operation)
 
     /**
      * Removes lock from file acquired by given resource
-     *
+     * 
      * @param   resource|vfsStreamWrapper $resource
      * @see     https://github.com/mikey179/vfsStream/issues/40
      */
@@ -392,3 +412,4 @@ public function hasExclusiveLock($resource = null)
         return null !== $this->exclusiveLock;
     }
 }
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamWrapper.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamWrapper.php
index 31c021e0c3b449a4b84f42481aab4af16fd07c17..73d328001fdbe8c4a3d52040786f0f1efd3e0188 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamWrapper.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStreamWrapper.php
@@ -124,7 +124,6 @@ public static function register()
     public static function setRoot(vfsStreamContainer $root)
     {
         self::$root = $root;
-        clearstatcache();
         return self::$root;
     }
 
@@ -252,10 +251,10 @@ protected function resolvePath($path)
     public function stream_open($path, $mode, $options, $opened_path)
     {
         $extended = ((strstr($mode, '+') !== false) ? (true) : (false));
-        $mode     = str_replace(array('t', 'b', '+'), '', $mode);
+        $mode     = str_replace(array('b', '+'), '', $mode);
         if (in_array($mode, array('r', 'w', 'a', 'x', 'c')) === false) {
             if (($options & STREAM_REPORT_ERRORS) === STREAM_REPORT_ERRORS) {
-                trigger_error('Illegal mode ' . $mode . ', use r, w, a, x  or c, flavoured with t, b and/or +', E_USER_WARNING);
+                trigger_error('Illegal mode ' . $mode . ', use r, w, a, x  or c, flavoured with b and/or +', E_USER_WARNING);
             }
 
             return false;
@@ -482,16 +481,17 @@ public function stream_metadata($path, $option, $var)
         switch ($option) {
             case STREAM_META_TOUCH:
                 if (null === $content) {
-                    $content = $this->createFile($path, null, STREAM_REPORT_ERRORS);
-                    // file creation may not be allowed at provided path
-                    if (false === $content) {
-                        return false;
-                    }
+                    $content = $this->createFile($path);
+                }
+
+                if (isset($var[0])) {
+                    $content->lastModified($var[0]);
+                }
+
+                if (isset($var[1])) {
+                    $content->lastAccessed($var[1]);
                 }
 
-                $currentTime = time();
-                $content->lastModified(((isset($var[0])) ? ($var[0]) : ($currentTime)))
-                        ->lastAccessed(((isset($var[1])) ? ($var[1]) : ($currentTime)));
                 return true;
 
             case STREAM_META_OWNER_NAME:
@@ -549,7 +549,7 @@ function() use ($content, $var)
      *
      * @param   string                    $path
      * @param   vfsStreamAbstractContent  $content
-     * @param   \Closure                  $change
+     * @param   Closure                   $change
      * @return  bool
      */
     private function doPermChange($path, vfsStreamAbstractContent $content, \Closure $change)
@@ -712,7 +712,6 @@ public function unlink($path)
         $realPath = $this->resolvePath(vfsStream::path($path));
         $content  = $this->getContent($realPath);
         if (null === $content) {
-            trigger_error('unlink(' . $path . '): No such file or directory', E_USER_WARNING);
             return false;
         }
 
@@ -983,4 +982,4 @@ public function url_stat($path, $flags)
         return array_merge(array_values($fileStat), $fileStat);
     }
 }
-?>
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitor.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitor.php
index 4f8c2866f4a74da84a886c56a02fe37d944916ad..6af70b6aece38ec3629bcfc70d09cb2835e54c38 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitor.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitor.php
@@ -9,8 +9,6 @@
  */
 namespace org\bovigo\vfs\visitor;
 use org\bovigo\vfs\vfsStreamContent;
-use org\bovigo\vfs\vfsStreamBlock;
-
 /**
  * Abstract base class providing an implementation for the visit() method.
  *
@@ -29,19 +27,12 @@
     public function visit(vfsStreamContent $content)
     {
         switch ($content->getType()) {
-            case vfsStreamContent::TYPE_BLOCK:
-                $this->visitBlockDevice($content);
-                break;
-
             case vfsStreamContent::TYPE_FILE:
                 $this->visitFile($content);
                 break;
 
             case vfsStreamContent::TYPE_DIR:
-                if (!$content->isDot()) {
-                    $this->visitDirectory($content);
-                }
-
+                $this->visitDirectory($content);
                 break;
 
             default:
@@ -50,16 +41,5 @@ public function visit(vfsStreamContent $content)
 
         return $this;
     }
-
-    /**
-     * visit a block device and process it
-     *
-     * @param   vfsStreamBlock $block
-     * @return  vfsStreamVisitor
-     */
-    public function visitBlockDevice(vfsStreamBlock $block)
-    {
-        return $this->visitFile($block);
-    }
 }
-?>
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php
index 41754856a9a054143a3a08b1bb0fbdf88cf48d73..eb742d342fad12c2fdeb7a019ee48a770d5a0d87 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php
@@ -11,8 +11,6 @@
 use org\bovigo\vfs\vfsStreamContent;
 use org\bovigo\vfs\vfsStreamDirectory;
 use org\bovigo\vfs\vfsStreamFile;
-use org\bovigo\vfs\vfsStreamBlock;
-
 /**
  * Visitor which traverses a content structure recursively to print it to an output stream.
  *
@@ -60,20 +58,7 @@ public function __construct($out = STDOUT)
      */
     public function visitFile(vfsStreamFile $file)
     {
-        $this->printContent($file->getName());
-        return $this;
-    }
-
-    /**
-     * visit a block device and process it
-     *
-     * @param   vfsStreamBlock  $block
-     * @return  vfsStreamPrintVisitor
-     */
-    public function visitBlockDevice(vfsStreamBlock $block)
-    {
-        $name = '[' . $block->getName() . ']';
-        $this->printContent($name);
+        $this->printContent($file);
         return $this;
     }
 
@@ -85,7 +70,7 @@ public function visitBlockDevice(vfsStreamBlock $block)
      */
     public function visitDirectory(vfsStreamDirectory $dir)
     {
-        $this->printContent($dir->getName());
+        $this->printContent($dir);
         $this->depth++;
         foreach ($dir as $child) {
             $this->visit($child);
@@ -98,11 +83,11 @@ public function visitDirectory(vfsStreamDirectory $dir)
     /**
      * helper method to print the content
      *
-     * @param  string   $name
+     * @param  vfsStreamContent  $content
      */
-    protected function printContent($name)
+    protected function printContent(vfsStreamContent $content)
     {
-        fwrite($this->out, str_repeat('  ', $this->depth) . '- ' . $name . "\n");
+        fwrite($this->out, str_repeat('  ', $this->depth) . '- ' . $content->getName() . "\n");
     }
 }
-?>
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php
index 957e5dfbdbf74dc9c03f0ba26e7082edfa69f910..bbf38a4f86ba08da0f2d3c284ee186202d53b386 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php
@@ -10,8 +10,6 @@
 namespace org\bovigo\vfs\visitor;
 use org\bovigo\vfs\vfsStreamDirectory;
 use org\bovigo\vfs\vfsStreamFile;
-use org\bovigo\vfs\vfsStreamBlock;
-
 /**
  * Visitor which traverses a content structure recursively to create an array structure from it.
  *
@@ -56,18 +54,6 @@ public function visitFile(vfsStreamFile $file)
     }
 
     /**
-     * visit a block device and process it
-     *
-     * @param   vfsStreamBlock $block
-     * @return  vfsStreamStructureVisitor
-     */
-    public function visitBlockDevice(vfsStreamBlock $block)
-    {
-        $this->current['[' . $block->getName() . ']'] = $block->getContent();
-        return $this;
-    }
-
-    /**
      * visit a directory and process it
      *
      * @param   vfsStreamDirectory  $dir
@@ -109,4 +95,4 @@ public function reset()
         return $this;
     }
 }
-?>
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php
index 89e4374cbd2c05fe4ac7984fb218de189e8cb1fa..eba73badb290369fe726bc466636c9696eed8f0f 100644
--- a/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php
+++ b/core/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php
@@ -11,8 +11,6 @@
 use org\bovigo\vfs\vfsStreamContent;
 use org\bovigo\vfs\vfsStreamDirectory;
 use org\bovigo\vfs\vfsStreamFile;
-use org\bovigo\vfs\vfsStreamBlock;
-
 /**
  * Interface for a visitor to work on a vfsStream content structure.
  *
@@ -44,13 +42,5 @@ public function visitFile(vfsStreamFile $file);
      * @return  vfsStreamVisitor
      */
     public function visitDirectory(vfsStreamDirectory $dir);
-
-    /**
-     * visit a block device and process it
-     *
-     * @param   vfsStreamBlock  $block
-     * @return  vfsStreamVisitor
-     */
-    public function visitBlockDevice(vfsStreamBlock $block);
 }
-?>
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/PermissionsTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/PermissionsTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3d9f215d136c7fe51c237eecc0c199d5e558f44
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/PermissionsTestCase.php
@@ -0,0 +1,92 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for permissions related functionality.
+ *
+ * @group  permissions
+ */
+class PermissionsTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @type  vfsStreamDirectory
+     */
+    private $root;
+
+    /**
+     * set up test environment
+     */
+    public function setup()
+    {
+        $structure = array('test_directory' => array('test.file' => ''));
+        $this->root = vfsStream::setup('root', null, $structure);
+    }
+
+    /**
+     * @test
+     * @group  issue_52
+     */
+    public function canNotChangePermissionWhenDirectoryNotWriteable()
+    {
+        $this->root->getChild('test_directory')->chmod(0444);
+        $this->assertFalse(@chmod(vfsStream::url('root/test_directory/test.file'), 0777));
+    }
+
+    /**
+     * @test
+     * @group  issue_53
+     */
+    public function canNotChangePermissionWhenFileNotOwned()
+    {
+        $this->root->getChild('test_directory')->getChild('test.file')->chown(vfsStream::OWNER_USER_1);
+        $this->assertFalse(@chmod(vfsStream::url('root/test_directory/test.file'), 0777));
+    }
+
+    /**
+     * @test
+     * @group  issue_52
+     */
+    public function canNotChangeOwnerWhenDirectoryNotWriteable()
+    {
+        $this->root->getChild('test_directory')->chmod(0444);
+        $this->assertFalse(@chown(vfsStream::url('root/test_directory/test.file'), vfsStream::OWNER_USER_2));
+    }
+
+    /**
+     * @test
+     * @group  issue_53
+     */
+    public function canNotChangeOwnerWhenFileNotOwned()
+    {
+        $this->root->getChild('test_directory')->getChild('test.file')->chown(vfsStream::OWNER_USER_1);
+        $this->assertFalse(@chown(vfsStream::url('root/test_directory/test.file'), vfsStream::OWNER_USER_2));
+    }
+
+    /**
+     * @test
+     * @group  issue_52
+     */
+    public function canNotChangeGroupWhenDirectoryNotWriteable()
+    {
+        $this->root->getChild('test_directory')->chmod(0444);
+        $this->assertFalse(@chgrp(vfsStream::url('root/test_directory/test.file'), vfsStream::GROUP_USER_2));
+    }
+
+    /**
+     * @test
+     * @group  issue_53
+     */
+    public function canNotChangeGroupWhenFileNotOwned()
+    {
+        $this->root->getChild('test_directory')->getChild('test.file')->chown(vfsStream::OWNER_USER_1);
+        $this->assertFalse(@chgrp(vfsStream::url('root/test_directory/test.file'), vfsStream::GROUP_USER_2));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/QuotaTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/QuotaTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..7007183e06d73ede157a0c520e9d73ae57a87540
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/QuotaTestCase.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\Quota.
+ *
+ * @group  issue_35
+ */
+class QuotaTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * instance to test
+     *
+     * @type  Quota
+     */
+    private $quota;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->quota = new Quota(10);
+    }
+
+    /**
+     * @test
+     */
+    public function unlimitedQuotaIsNotLimited()
+    {
+        $this->assertFalse(Quota::unlimited()->isLimited());
+    }
+
+    /**
+     * @test
+     */
+    public function limitedQuotaIsLimited()
+    {
+        $this->assertTrue($this->quota->isLimited());
+    }
+
+    /**
+     * @test
+     */
+    public function unlimitedQuotaHasAlwaysSpaceLeft()
+    {
+        $this->assertEquals(303, Quota::unlimited()->spaceLeft(303));
+    }
+
+    /**
+     * @test
+     */
+    public function hasNoSpaceLeftWhenUsedSpaceIsLargerThanQuota()
+    {
+        $this->assertEquals(0, $this->quota->spaceLeft(11));
+    }
+
+    /**
+     * @test
+     */
+    public function hasNoSpaceLeftWhenUsedSpaceIsEqualToQuota()
+    {
+        $this->assertEquals(0, $this->quota->spaceLeft(10));
+    }
+
+    /**
+     * @test
+     */
+    public function hasSpaceLeftWhenUsedSpaceIsLowerThanQuota()
+    {
+        $this->assertEquals(1, $this->quota->spaceLeft(9));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/UnlinkTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/UnlinkTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..f22106ea6c6acf1bb0f42a1331f82c3c013eccb0
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/UnlinkTestCase.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for unlink() functionality.
+ *
+ * @group  unlink
+ */
+class UnlinkTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @test
+     * @group  issue_51
+     */
+    public function canRemoveNonWritableFileFromWritableDirectory()
+    {
+        $structure = array('test_directory' => array('test.file' => ''));
+        $root = vfsStream::setup('root', null, $structure);
+        $root->getChild('test_directory')->chmod(0777);
+        $root->getChild('test_directory')->getChild('test.file')->chmod(0444);
+        $this->assertTrue(@unlink(vfsStream::url('root/test_directory/test.file')));
+    }
+
+    /**
+     * @test
+     * @group  issue_51
+     */
+    public function canNotRemoveWritableFileFromNonWritableDirectory()
+    {
+        $structure = array('test_directory' => array('test.file' => ''));
+        $root = vfsStream::setup('root', null, $structure);
+        $root->getChild('test_directory')->chmod(0444);
+        $root->getChild('test_directory')->getChild('test.file')->chmod(0777);
+        $this->assertFalse(@unlink(vfsStream::url('root/test_directory/test.file')));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/proxy/vfsStreamWrapperRecordingProxy.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/proxy/vfsStreamWrapperRecordingProxy.php
new file mode 100644
index 0000000000000000000000000000000000000000..899931d6876cc8de91e399ce22cbe852ad67ec9c
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/proxy/vfsStreamWrapperRecordingProxy.php
@@ -0,0 +1,326 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Stream wrapper to mock file system requests.
+ *
+ * @since  0.10.0
+ */
+class vfsStreamWrapperRecordingProxy extends vfsStreamWrapper
+{
+    /**
+     * list of called methods for a stream
+     *
+     * @var  array
+     */
+    protected static $calledMethods = array();
+    /**
+     * currently opened path
+     *
+     * @var  string
+     */
+    protected $path;
+
+    /**
+     * records method call for given path
+     *
+     * @param  string  $method
+     * @param  string  $path
+     */
+    protected static function recordMethodCall($method, $path)
+    {
+        if (isset(self::$calledMethods[$path]) === false) {
+            self::$calledMethods[$path] = array();
+        }
+
+        self::$calledMethods[$path][] = $method;
+    }
+
+    /**
+     * returns recorded method calls for given path
+     *
+     * @param   string         $path
+     * @return  array<string>
+     */
+    public static function getMethodCalls($path)
+    {
+        if (isset(self::$calledMethods[$path]) === true) {
+            return self::$calledMethods[$path];
+        }
+
+        return array();
+    }
+
+    /**
+     * helper method for setting up vfsStream with the proxy
+     *
+     * @param   string              $rootDirName  optional  name of root directory
+     * @param   int                 $permissions  optional  file permissions of root directory
+     * @return  vfsStreamDirectory
+     * @throws  vfsStreamException
+     */
+    public static function setup($rootDirName = 'root', $permissions = null)
+    {
+        self::$root = vfsStream::newDirectory($rootDirName, $permissions);
+        if (true === self::$registered) {
+            return self::$root;
+        }
+
+        if (@stream_wrapper_register(vfsStream::SCHEME, __CLASS__) === false) {
+            throw new vfsStreamException('A handler has already been registered for the ' . vfsStream::SCHEME . ' protocol.');
+        }
+
+        self::$registered = true;
+        return self::$root;
+    }
+
+    /**
+     * open the stream
+     *
+     * @param   string  $path         the path to open
+     * @param   string  $mode         mode for opening
+     * @param   string  $options      options for opening
+     * @param   string  $opened_path  full path that was actually opened
+     * @return  bool
+     */
+    public function stream_open($path, $mode, $options, $opened_path)
+    {
+        $this->path = $path;
+        self::recordMethodCall('stream_open', $this->path);
+        return parent::stream_open($path, $mode, $options, $opened_path);
+    }
+
+    /**
+     * closes the stream
+     */
+    public function stream_close()
+    {
+        self::recordMethodCall('stream_close', $this->path);
+        return parent::stream_close();
+    }
+
+    /**
+     * read the stream up to $count bytes
+     *
+     * @param   int     $count  amount of bytes to read
+     * @return  string
+     */
+    public function stream_read($count)
+    {
+        self::recordMethodCall('stream_read', $this->path);
+        return parent::stream_read($count);
+    }
+
+    /**
+     * writes data into the stream
+     *
+     * @param   string  $data
+     * @return  int     amount of bytes written
+     */
+    public function stream_write($data)
+    {
+        self::recordMethodCall('stream_write', $this->path);
+        return parent::stream_write($data);
+    }
+
+    /**
+     * checks whether stream is at end of file
+     *
+     * @return  bool
+     */
+    public function stream_eof()
+    {
+        self::recordMethodCall('stream_eof', $this->path);
+        return parent::stream_eof();
+    }
+
+    /**
+     * returns the current position of the stream
+     *
+     * @return  int
+     */
+    public function stream_tell()
+    {
+        self::recordMethodCall('stream_tell', $this->path);
+        return parent::stream_tell();
+    }
+
+    /**
+     * seeks to the given offset
+     *
+     * @param   int   $offset
+     * @param   int   $whence
+     * @return  bool
+     */
+    public function stream_seek($offset, $whence)
+    {
+        self::recordMethodCall('stream_seek', $this->path);
+        return parent::stream_seek($offset, $whence);
+    }
+
+    /**
+     * flushes unstored data into storage
+     *
+     * @return  bool
+     */
+    public function stream_flush()
+    {
+        self::recordMethodCall('stream_flush', $this->path);
+        return parent::stream_flush();
+    }
+
+    /**
+     * returns status of stream
+     *
+     * @return  array
+     */
+    public function stream_stat()
+    {
+        self::recordMethodCall('stream_stat', $this->path);
+        return parent::stream_stat();
+    }
+
+    /**
+     * retrieve the underlaying resource
+     *
+     * @param   int  $cast_as
+     * @return  bool
+     */
+    public function stream_cast($cast_as)
+    {
+        self::recordMethodCall('stream_cast', $this->path);
+        return parent::stream_cast($cast_as);
+    }
+
+    /**
+     * set lock status for stream
+     *
+     * @param   int   $operation
+     * @return  bool
+     */
+    public function stream_lock($operation)
+    {
+        self::recordMethodCall('stream_link', $this->path);
+        return parent::stream_lock($operation);
+    }
+
+    /**
+     * remove the data under the given path
+     *
+     * @param   string  $path
+     * @return  bool
+     */
+    public function unlink($path)
+    {
+        self::recordMethodCall('unlink', $path);
+        return parent::unlink($path);
+    }
+
+    /**
+     * rename from one path to another
+     *
+     * @param   string  $path_from
+     * @param   string  $path_to
+     * @return  bool
+     */
+    public function rename($path_from, $path_to)
+    {
+        self::recordMethodCall('rename', $path_from);
+        return parent::rename($path_from, $path_to);
+    }
+
+    /**
+     * creates a new directory
+     *
+     * @param   string  $path
+     * @param   int     $mode
+     * @param   int     $options
+     * @return  bool
+     */
+    public function mkdir($path, $mode, $options)
+    {
+        self::recordMethodCall('mkdir', $path);
+        return parent::mkdir($path, $mode, $options);
+    }
+
+    /**
+     * removes a directory
+     *
+     * @param   string  $path
+     * @param   int     $options
+     * @return  bool
+     */
+    public function rmdir($path, $options)
+    {
+        self::recordMethodCall('rmdir', $path);
+        return parent::rmdir($path, $options);
+    }
+
+    /**
+     * opens a directory
+     *
+     * @param   string  $path
+     * @param   int     $options
+     * @return  bool
+     */
+    public function dir_opendir($path, $options)
+    {
+        $this->path = $path;
+        self::recordMethodCall('dir_opendir', $this->path);
+        return parent::dir_opendir($path, $options);
+    }
+
+    /**
+     * reads directory contents
+     *
+     * @return  string
+     */
+    public function dir_readdir()
+    {
+        self::recordMethodCall('dir_readdir', $this->path);
+        return parent::dir_readdir();
+    }
+
+    /**
+     * reset directory iteration
+     *
+     * @return  bool
+     */
+    public function dir_rewinddir()
+    {
+        self::recordMethodCall('dir_rewinddir', $this->path);
+        return parent::dir_rewinddir();
+    }
+
+    /**
+     * closes directory
+     *
+     * @return  bool
+     */
+    public function dir_closedir()
+    {
+        self::recordMethodCall('dir_closedir', $this->path);
+        return parent::dir_closedir();
+    }
+
+    /**
+     * returns status of url
+     *
+     * @param   string  $path   path of url to return status for
+     * @param   int     $flags  flags set by the stream API
+     * @return  array
+     */
+    public function url_stat($path, $flags)
+    {
+        self::recordMethodCall('url_stat', $path);
+        return parent::url_stat($path, $flags);
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamAbstractContentTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamAbstractContentTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..9bb60795beb757c01a14ed487a84116b46008c1c
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamAbstractContentTestCase.php
@@ -0,0 +1,1054 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Helper class for the test.
+ */
+class TestvfsStreamAbstractContent extends vfsStreamAbstractContent
+{
+    /**
+     * returns default permissions for concrete implementation
+     *
+     * @return  int
+     * @since   0.8.0
+     */
+    protected function getDefaultPermissions()
+    {
+        return 0777;
+    }
+
+    /**
+     * returns size of content
+     *
+     * @return  int
+     */
+    public function size()
+    {
+        return 0;
+    }
+}
+/**
+ * Test for org\bovigo\vfs\vfsStreamAbstractContent.
+ */
+class vfsStreamAbstractContentTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function noPermissionsForEveryone()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0000);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function executePermissionsForUser()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0100);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function executePermissionsForGroup()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0010);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function executePermissionsForOther()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0001);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         -1
+                                            )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function writePermissionsForUser()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0200);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function writePermissionsForGroup()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0020);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function writePermissionsForOther()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0002);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function executeAndWritePermissionsForUser()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0300);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function executeAndWritePermissionsForGroup()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0030);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function executeAndWritePermissionsForOther()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0003);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         -1
+                                            )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readPermissionsForUser()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0400);
+        $this->assertTrue($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readPermissionsForGroup()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0040);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readPermissionsForOther()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0004);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readAndExecutePermissionsForUser()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0500);
+        $this->assertTrue($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readAndExecutePermissionsForGroup()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0050);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readAndExecutePermissionsForOther()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0005);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         -1
+                                            )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readAndWritePermissionsForUser()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0600);
+        $this->assertTrue($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readAndWritePermissionsForGroup()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0060);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function readAndWritePermissionsForOther()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0006);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function allPermissionsForUser()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0700);
+        $this->assertTrue($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function allPermissionsForGroup()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0070);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        -1
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         vfsStream::getCurrentGroup()
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          -1
+                                             )
+               );
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function allPermissionsForOther()
+    {
+        $abstractContent = new TestvfsStreamAbstractContent('foo', 0007);
+        $this->assertFalse($abstractContent->isReadable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isReadable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isReadable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isWritable(vfsStream::getCurrentUser(),
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isWritable(-1,
+                                                        vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isWritable(-1,
+                                                       -1
+                                            )
+               );
+        $this->assertFalse($abstractContent->isExecutable(vfsStream::getCurrentUser(),
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertFalse($abstractContent->isExecutable(-1,
+                                                          vfsStream::getCurrentGroup()
+                                             )
+               );
+        $this->assertTrue($abstractContent->isExecutable(-1,
+                                                         -1
+                                            )
+               );
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamContainerIteratorTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamContainerIteratorTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..9aa6960da28cd14c1b9ee102b2d8229d31889ab1
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamContainerIteratorTestCase.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamContainerIterator.
+ */
+class vfsStreamContainerIteratorTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * test method to be used for iterating
+     *
+     * @test
+     */
+    public function iteration()
+    {
+        $dir = new vfsStreamDirectory('foo');
+        $mockChild1 = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild1->expects($this->any())
+                   ->method('getName')
+                   ->will($this->returnValue('bar'));
+        $dir->addChild($mockChild1);
+        $mockChild2 = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild2->expects($this->any())
+                   ->method('getName')
+                   ->will($this->returnValue('baz'));
+        $dir->addChild($mockChild2);
+        $dirIterator = $dir->getIterator();
+        $this->assertEquals('bar', $dirIterator->key());
+        $this->assertTrue($dirIterator->valid());
+        $bar = $dirIterator->current();
+        $this->assertSame($mockChild1, $bar);
+        $dirIterator->next();
+        $this->assertEquals('baz', $dirIterator->key());
+        $this->assertTrue($dirIterator->valid());
+        $baz = $dirIterator->current();
+        $this->assertSame($mockChild2, $baz);
+        $dirIterator->next();
+        $this->assertFalse($dirIterator->valid());
+        $this->assertNull($dirIterator->key());
+        $this->assertNull($dirIterator->current());
+        $dirIterator->rewind();
+        $this->assertTrue($dirIterator->valid());
+        $this->assertEquals('bar', $dirIterator->key());
+        $bar2 = $dirIterator->current();
+        $this->assertSame($mockChild1, $bar2);
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryIssue18TestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryIssue18TestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..89cde1ce8782ad67f9d9a72e4f3c2750494544ab
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryIssue18TestCase.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamDirectory.
+ *
+ * @group  bug_18
+ */
+class vfsStreamDirectoryIssue18TestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * access to root directory
+     *
+     * @var  vfsStreamDirectory
+     */
+    protected $rootDirectory;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->rootDirectory = vfsStream::newDirectory('/');
+        $this->rootDirectory->addChild(vfsStream::newDirectory('var/log/app'));
+        $dir = $this->rootDirectory->getChild('var/log/app');
+        $dir->addChild(vfsStream::newDirectory('app1'));
+        $dir->addChild(vfsStream::newDirectory('app2'));
+        $dir->addChild(vfsStream::newDirectory('foo'));
+    }
+
+    /**
+     * @test
+     */
+    public function shouldContainThreeSubdirectories()
+    {
+        $this->assertEquals(3,
+                            count($this->rootDirectory->getChild('var/log/app')->getChildren())
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function shouldContainSubdirectoryFoo()
+    {
+        $this->assertTrue($this->rootDirectory->getChild('var/log/app')->hasChild('foo'));
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory',
+                                $this->rootDirectory->getChild('var/log/app')->getChild('foo')
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function shouldContainSubdirectoryApp1()
+    {
+        $this->assertTrue($this->rootDirectory->getChild('var/log/app')->hasChild('app1'));
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory',
+                                $this->rootDirectory->getChild('var/log/app')->getChild('app1')
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function shouldContainSubdirectoryApp2()
+    {
+        $this->assertTrue($this->rootDirectory->getChild('var/log/app')->hasChild('app2'));
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory',
+                                $this->rootDirectory->getChild('var/log/app')->getChild('app2')
+        );
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..f8b93842fc18d0317c2383692600a091c2260029
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryTestCase.php
@@ -0,0 +1,335 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamDirectory.
+ */
+class vfsStreamDirectoryTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * instance to test
+     *
+     * @var  vfsStreamDirectory
+     */
+    protected $dir;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->dir = new vfsStreamDirectory('foo');
+    }
+
+    /**
+     * assure that a directory seperator inside the name throws an exception
+     *
+     * @test
+     * @expectedException  org\bovigo\vfs\vfsStreamException
+     */
+    public function invalidCharacterInName()
+    {
+        $dir = new vfsStreamDirectory('foo/bar');
+    }
+
+    /**
+     * test default values and methods
+     *
+     * @test
+     */
+    public function defaultValues()
+    {
+        $this->assertEquals(vfsStreamContent::TYPE_DIR, $this->dir->getType());
+        $this->assertEquals('foo', $this->dir->getName());
+        $this->assertTrue($this->dir->appliesTo('foo'));
+        $this->assertTrue($this->dir->appliesTo('foo/bar'));
+        $this->assertFalse($this->dir->appliesTo('bar'));
+        $this->assertEquals(array(), $this->dir->getChildren());
+    }
+
+    /**
+     * test renaming the directory
+     *
+     * @test
+     */
+    public function rename()
+    {
+        $this->dir->rename('bar');
+        $this->assertEquals('bar', $this->dir->getName());
+        $this->assertFalse($this->dir->appliesTo('foo'));
+        $this->assertFalse($this->dir->appliesTo('foo/bar'));
+        $this->assertTrue($this->dir->appliesTo('bar'));
+    }
+
+    /**
+     * renaming the directory to an invalid name throws a vfsStreamException
+     *
+     * @test
+     * @expectedException  org\bovigo\vfs\vfsStreamException
+     */
+    public function renameToInvalidNameThrowsvfsStreamException()
+    {
+        $this->dir->rename('foo/baz');
+    }
+
+    /**
+     * @test
+     * @since  0.10.0
+     */
+    public function hasNoChildrenByDefault()
+    {
+        $this->assertFalse($this->dir->hasChildren());
+    }
+
+    /**
+     * @test
+     * @since  0.10.0
+     */
+    public function hasChildrenReturnsTrueIfAtLeastOneChildPresent()
+    {
+        $mockChild = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild->expects($this->any())
+                  ->method('appliesTo')
+                  ->will($this->returnValue(false));
+        $mockChild->expects($this->any())
+                  ->method('getName')
+                  ->will($this->returnValue('baz'));
+        $this->dir->addChild($mockChild);
+        $this->assertTrue($this->dir->hasChildren());
+    }
+
+    /**
+     * @test
+     */
+    public function hasChildReturnsFalseForNonExistingChild()
+    {
+        $this->assertFalse($this->dir->hasChild('bar'));
+    }
+
+    /**
+     * @test
+     */
+    public function getChildReturnsNullForNonExistingChild()
+    {
+        $this->assertNull($this->dir->getChild('bar'));
+    }
+
+    /**
+     * @test
+     */
+    public function removeChildReturnsFalseForNonExistingChild()
+    {
+        $this->assertFalse($this->dir->removeChild('bar'));
+    }
+
+    /**
+     * @test
+     */
+    public function nonExistingChild()
+    {
+        $mockChild = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild->expects($this->any())
+                  ->method('appliesTo')
+                  ->will($this->returnValue(false));
+        $mockChild->expects($this->any())
+                  ->method('getName')
+                  ->will($this->returnValue('baz'));
+        $this->dir->addChild($mockChild);
+        $this->assertFalse($this->dir->removeChild('bar'));
+    }
+
+    /**
+     * test that adding, handling and removing of a child works as expected
+     *
+     * @test
+     */
+    public function childHandling()
+    {
+        $mockChild = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild->expects($this->any())
+                  ->method('getType')
+                  ->will($this->returnValue(vfsStreamContent::TYPE_FILE));
+        $mockChild->expects($this->any())
+                  ->method('getName')
+                  ->will($this->returnValue('bar'));
+        $mockChild->expects($this->any())
+                  ->method('appliesTo')
+                  ->with($this->equalTo('bar'))
+                  ->will($this->returnValue(true));
+        $mockChild->expects($this->once())
+                  ->method('size')
+                  ->will($this->returnValue(5));
+        $this->dir->addChild($mockChild);
+        $this->assertTrue($this->dir->hasChild('bar'));
+        $bar = $this->dir->getChild('bar');
+        $this->assertSame($mockChild, $bar);
+        $this->assertEquals(array($mockChild), $this->dir->getChildren());
+        $this->assertEquals(0, $this->dir->size());
+        $this->assertEquals(5, $this->dir->sizeSummarized());
+        $this->assertTrue($this->dir->removeChild('bar'));
+        $this->assertEquals(array(), $this->dir->getChildren());
+        $this->assertEquals(0, $this->dir->size());
+        $this->assertEquals(0, $this->dir->sizeSummarized());
+    }
+
+    /**
+     * test that adding, handling and removing of a child works as expected
+     *
+     * @test
+     */
+    public function childHandlingWithSubdirectory()
+    {
+        $mockChild = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild->expects($this->any())
+                  ->method('getType')
+                  ->will($this->returnValue(vfsStreamContent::TYPE_FILE));
+        $mockChild->expects($this->any())
+                  ->method('getName')
+                  ->will($this->returnValue('bar'));
+        $mockChild->expects($this->once())
+                  ->method('size')
+                  ->will($this->returnValue(5));
+        $subdir = new vfsStreamDirectory('subdir');
+        $subdir->addChild($mockChild);
+        $this->dir->addChild($subdir);
+        $this->assertTrue($this->dir->hasChild('subdir'));
+        $this->assertSame($subdir, $this->dir->getChild('subdir'));
+        $this->assertEquals(array($subdir), $this->dir->getChildren());
+        $this->assertEquals(0, $this->dir->size());
+        $this->assertEquals(5, $this->dir->sizeSummarized());
+        $this->assertTrue($this->dir->removeChild('subdir'));
+        $this->assertEquals(array(), $this->dir->getChildren());
+        $this->assertEquals(0, $this->dir->size());
+        $this->assertEquals(0, $this->dir->sizeSummarized());
+    }
+
+    /**
+     * dd
+     *
+     * @test
+     * @group  regression
+     * @group  bug_5
+     */
+    public function addChildReplacesChildWithSameName_Bug_5()
+    {
+        $mockChild1 = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild1->expects($this->any())
+                   ->method('getType')
+                   ->will($this->returnValue(vfsStreamContent::TYPE_FILE));
+        $mockChild1->expects($this->any())
+                   ->method('getName')
+                   ->will($this->returnValue('bar'));
+        $mockChild2 = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild2->expects($this->any())
+                   ->method('getType')
+                   ->will($this->returnValue(vfsStreamContent::TYPE_FILE));
+        $mockChild2->expects($this->any())
+                   ->method('getName')
+                   ->will($this->returnValue('bar'));
+        $this->dir->addChild($mockChild1);
+        $this->assertTrue($this->dir->hasChild('bar'));
+        $this->assertSame($mockChild1, $this->dir->getChild('bar'));
+        $this->dir->addChild($mockChild2);
+        $this->assertTrue($this->dir->hasChild('bar'));
+        $this->assertSame($mockChild2, $this->dir->getChild('bar'));
+    }
+
+    /**
+     * When testing for a nested path, verify that directory separators are respected properly
+     * so that subdir1/subdir2 is not considered equal to subdir1Xsubdir2.
+     *
+     * @test
+     * @group bug_24
+     * @group regression
+     */
+    public function explicitTestForSeparatorWithNestedPaths_Bug_24()
+    {
+        $mockChild = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockChild->expects($this->any())
+                  ->method('getType')
+                  ->will($this->returnValue(vfsStreamContent::TYPE_FILE));
+        $mockChild->expects($this->any())
+                  ->method('getName')
+                  ->will($this->returnValue('bar'));
+
+        $subdir1 = new vfsStreamDirectory('subdir1');
+        $this->dir->addChild($subdir1);
+
+        $subdir2 = new vfsStreamDirectory('subdir2');
+        $subdir1->addChild($subdir2);
+
+        $subdir2->addChild($mockChild);
+
+        $this->assertTrue($this->dir->hasChild('subdir1'), "Level 1 path with separator exists");
+        $this->assertTrue($this->dir->hasChild('subdir1/subdir2'), "Level 2 path with separator exists");
+        $this->assertTrue($this->dir->hasChild('subdir1/subdir2/bar'), "Level 3 path with separator exists");
+        $this->assertFalse($this->dir->hasChild('subdir1.subdir2'), "Path with period does not exist");
+        $this->assertFalse($this->dir->hasChild('subdir1.subdir2/bar'), "Nested path with period does not exist");
+    }
+
+
+    /**
+     * setting and retrieving permissions for a directory
+     *
+     * @test
+     * @group  permissions
+     */
+    public function permissions()
+    {
+        $this->assertEquals(0777, $this->dir->getPermissions());
+        $this->assertSame($this->dir, $this->dir->chmod(0755));
+        $this->assertEquals(0755, $this->dir->getPermissions());
+    }
+
+    /**
+     * setting and retrieving permissions for a directory
+     *
+     * @test
+     * @group  permissions
+     */
+    public function permissionsSet()
+    {
+        $this->dir = new vfsStreamDirectory('foo', 0755);
+        $this->assertEquals(0755, $this->dir->getPermissions());
+        $this->assertSame($this->dir, $this->dir->chmod(0700));
+        $this->assertEquals(0700, $this->dir->getPermissions());
+    }
+
+    /**
+     * setting and retrieving owner of a file
+     *
+     * @test
+     * @group  permissions
+     */
+    public function owner()
+    {
+        $this->assertEquals(vfsStream::getCurrentUser(), $this->dir->getUser());
+        $this->assertTrue($this->dir->isOwnedByUser(vfsStream::getCurrentUser()));
+        $this->assertSame($this->dir, $this->dir->chown(vfsStream::OWNER_USER_1));
+        $this->assertEquals(vfsStream::OWNER_USER_1, $this->dir->getUser());
+        $this->assertTrue($this->dir->isOwnedByUser(vfsStream::OWNER_USER_1));
+    }
+
+    /**
+     * setting and retrieving owner group of a file
+     *
+     * @test
+     * @group  permissions
+     */
+    public function group()
+    {
+        $this->assertEquals(vfsStream::getCurrentGroup(), $this->dir->getGroup());
+        $this->assertTrue($this->dir->isOwnedByGroup(vfsStream::getCurrentGroup()));
+        $this->assertSame($this->dir, $this->dir->chgrp(vfsStream::GROUP_USER_1));
+        $this->assertEquals(vfsStream::GROUP_USER_1, $this->dir->getGroup());
+        $this->assertTrue($this->dir->isOwnedByGroup(vfsStream::GROUP_USER_1));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamExLockTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamExLockTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..976356008a63aa3e35b7a22cdcd88e6df033ed2c
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamExLockTestCase.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for LOCK_EX behaviour related to file_put_contents().
+ *
+ * @group   lock_fpc
+ * @author  https://github.com/iwyg
+ */
+class vfsStreamExLockTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environment
+     */
+    protected function setUp()
+    {
+        $root = vfsStream::setup();
+        vfsStream::newFile('testfile')->at($root);
+
+    }
+
+    /**
+     * This test verifies the current behaviour where vfsStream URLs do not work
+     * with file_put_contents() and LOCK_EX. The test is intended to break once
+     * PHP changes this so we get notified about the change.
+     *
+     * @test
+     */
+    public function filePutContentsLockShouldReportError()
+    {
+        @file_put_contents(vfsStream::url('root/testfile'), "some string\n", LOCK_EX);
+        $php_error = error_get_last();
+        $this->assertEquals("file_put_contents(): Exclusive locks may only be set for regular files", $php_error['message']);
+    }
+
+    /**
+     * @test
+     */
+    public function flockSouldPass()
+    {
+        $fp = fopen(vfsStream::url('root/testfile'), 'w');
+        flock($fp, LOCK_EX);
+        fwrite($fp, "another string\n");
+        flock($fp, LOCK_UN);
+        fclose($fp);
+        $this->assertEquals("another string\n", file_get_contents(vfsStream::url('root/testfile')));
+    }
+}
+
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamFileTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamFileTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..d93e99424a141f21074823484bd7b8978d2bbe3f
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamFileTestCase.php
@@ -0,0 +1,278 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamFile.
+ */
+class vfsStreamFileTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * instance to test
+     *
+     * @var  vfsStreamFile
+     */
+    protected $file;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->file = new vfsStreamFile('foo');
+    }
+
+    /**
+     * test default values and methods
+     *
+     * @test
+     */
+    public function defaultValues()
+    {
+        $this->assertEquals(vfsStreamContent::TYPE_FILE, $this->file->getType());
+        $this->assertEquals('foo', $this->file->getName());
+        $this->assertTrue($this->file->appliesTo('foo'));
+        $this->assertFalse($this->file->appliesTo('foo/bar'));
+        $this->assertFalse($this->file->appliesTo('bar'));
+    }
+
+    /**
+     * test setting and getting the content of a file
+     *
+     * @test
+     */
+    public function content()
+    {
+        $this->assertNull($this->file->getContent());
+        $this->assertSame($this->file, $this->file->setContent('bar'));
+        $this->assertEquals('bar', $this->file->getContent());
+        $this->assertSame($this->file, $this->file->withContent('baz'));
+        $this->assertEquals('baz', $this->file->getContent());
+    }
+
+    /**
+     * test renaming the directory
+     *
+     * @test
+     */
+    public function rename()
+    {
+        $this->file->rename('bar');
+        $this->assertEquals('bar', $this->file->getName());
+        $this->assertFalse($this->file->appliesTo('foo'));
+        $this->assertFalse($this->file->appliesTo('foo/bar'));
+        $this->assertTrue($this->file->appliesTo('bar'));
+    }
+
+    /**
+     * test reading contents from the file
+     *
+     * @test
+     */
+    public function readEmptyFile()
+    {
+        $this->assertTrue($this->file->eof());
+        $this->assertEquals(0, $this->file->size());
+        $this->assertEquals('', $this->file->read(5));
+        $this->assertEquals(5, $this->file->getBytesRead());
+        $this->assertTrue($this->file->eof());
+    }
+
+    /**
+     * test reading contents from the file
+     *
+     * @test
+     */
+    public function read()
+    {
+        $this->file->setContent('foobarbaz');
+        $this->assertFalse($this->file->eof());
+        $this->assertEquals(9, $this->file->size());
+        $this->assertEquals('foo', $this->file->read(3));
+        $this->assertEquals(3, $this->file->getBytesRead());
+        $this->assertFalse($this->file->eof());
+        $this->assertEquals(9, $this->file->size());
+        $this->assertEquals('bar', $this->file->read(3));
+        $this->assertEquals(6, $this->file->getBytesRead());
+        $this->assertFalse($this->file->eof());
+        $this->assertEquals(9, $this->file->size());
+        $this->assertEquals('baz', $this->file->read(3));
+        $this->assertEquals(9, $this->file->getBytesRead());
+        $this->assertEquals(9, $this->file->size());
+        $this->assertTrue($this->file->eof());
+        $this->assertEquals('', $this->file->read(3));
+    }
+
+    /**
+     * test seeking to offset
+     *
+     * @test
+     */
+    public function seekEmptyFile()
+    {
+        $this->assertFalse($this->file->seek(0, 55));
+        $this->assertTrue($this->file->seek(0, SEEK_SET));
+        $this->assertEquals(0, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(5, SEEK_SET));
+        $this->assertEquals(5, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(0, SEEK_CUR));
+        $this->assertEquals(5, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(2, SEEK_CUR));
+        $this->assertEquals(7, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(0, SEEK_END));
+        $this->assertEquals(0, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(2, SEEK_END));
+        $this->assertEquals(2, $this->file->getBytesRead());
+    }
+
+    /**
+     * test seeking to offset
+     *
+     * @test
+     */
+    public function seekRead()
+    {
+        $this->file->setContent('foobarbaz');
+        $this->assertFalse($this->file->seek(0, 55));
+        $this->assertTrue($this->file->seek(0, SEEK_SET));
+        $this->assertEquals('foobarbaz', $this->file->readUntilEnd());
+        $this->assertEquals(0, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(5, SEEK_SET));
+        $this->assertEquals('rbaz', $this->file->readUntilEnd());
+        $this->assertEquals(5, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(0, SEEK_CUR));
+        $this->assertEquals('rbaz', $this->file->readUntilEnd());
+        $this->assertEquals(5, $this->file->getBytesRead(), 5);
+        $this->assertTrue($this->file->seek(2, SEEK_CUR));
+        $this->assertEquals('az', $this->file->readUntilEnd());
+        $this->assertEquals(7, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(0, SEEK_END));
+        $this->assertEquals('', $this->file->readUntilEnd());
+        $this->assertEquals(9, $this->file->getBytesRead());
+        $this->assertTrue($this->file->seek(2, SEEK_END));
+        $this->assertEquals('', $this->file->readUntilEnd());
+        $this->assertEquals(11, $this->file->getBytesRead());
+    }
+
+    /**
+     * test writing data into the file
+     *
+     * @test
+     */
+    public function writeEmptyFile()
+    {
+        $this->assertEquals(3, $this->file->write('foo'));
+        $this->assertEquals('foo', $this->file->getContent());
+        $this->assertEquals(3, $this->file->size());
+        $this->assertEquals(3, $this->file->write('bar'));
+        $this->assertEquals('foobar', $this->file->getContent());
+        $this->assertEquals(6, $this->file->size());
+    }
+
+    /**
+     * test writing data into the file
+     *
+     * @test
+     */
+    public function write()
+    {
+        $this->file->setContent('foobarbaz');
+        $this->assertTrue($this->file->seek(3, SEEK_SET));
+        $this->assertEquals(3, $this->file->write('foo'));
+        $this->assertEquals('foofoobaz', $this->file->getContent());
+        $this->assertEquals(9, $this->file->size());
+        $this->assertEquals(3, $this->file->write('bar'));
+        $this->assertEquals('foofoobar', $this->file->getContent());
+        $this->assertEquals(9, $this->file->size());
+    }
+
+    /**
+     * setting and retrieving permissions for a file
+     *
+     * @test
+     * @group  permissions
+     */
+    public function permissions()
+    {
+        $this->assertEquals(0666, $this->file->getPermissions());
+        $this->assertSame($this->file, $this->file->chmod(0644));
+        $this->assertEquals(0644, $this->file->getPermissions());
+    }
+
+    /**
+     * setting and retrieving permissions for a file
+     *
+     * @test
+     * @group  permissions
+     */
+    public function permissionsSet()
+    {
+        $this->file = new vfsStreamFile('foo', 0644);
+        $this->assertEquals(0644, $this->file->getPermissions());
+        $this->assertSame($this->file, $this->file->chmod(0600));
+        $this->assertEquals(0600, $this->file->getPermissions());
+    }
+
+    /**
+     * setting and retrieving owner of a file
+     *
+     * @test
+     * @group  permissions
+     */
+    public function owner()
+    {
+        $this->assertEquals(vfsStream::getCurrentUser(), $this->file->getUser());
+        $this->assertTrue($this->file->isOwnedByUser(vfsStream::getCurrentUser()));
+        $this->assertSame($this->file, $this->file->chown(vfsStream::OWNER_USER_1));
+        $this->assertEquals(vfsStream::OWNER_USER_1, $this->file->getUser());
+        $this->assertTrue($this->file->isOwnedByUser(vfsStream::OWNER_USER_1));
+    }
+
+    /**
+     * setting and retrieving owner group of a file
+     *
+     * @test
+     * @group  permissions
+     */
+    public function group()
+    {
+        $this->assertEquals(vfsStream::getCurrentGroup(), $this->file->getGroup());
+        $this->assertTrue($this->file->isOwnedByGroup(vfsStream::getCurrentGroup()));
+        $this->assertSame($this->file, $this->file->chgrp(vfsStream::GROUP_USER_1));
+        $this->assertEquals(vfsStream::GROUP_USER_1, $this->file->getGroup());
+        $this->assertTrue($this->file->isOwnedByGroup(vfsStream::GROUP_USER_1));
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     * @since  1.1.0
+     */
+    public function truncateRemovesSuperflouosContent()
+    {
+        $this->assertEquals(11, $this->file->write("lorem ipsum"));
+        $this->assertTrue($this->file->truncate(5));
+        $this->assertEquals(5, $this->file->size());
+        $this->assertEquals('lorem', $this->file->getContent());
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     * @since  1.1.0
+     */
+    public function truncateToGreaterSizeAddsZeroBytes()
+    {
+        $this->assertEquals(11, $this->file->write("lorem ipsum"));
+        $this->assertTrue($this->file->truncate(25));
+        $this->assertEquals(25, $this->file->size());
+        $this->assertEquals("lorem ipsum\0\0\0\0\0\0\0\0\0\0\0\0\0\0", $this->file->getContent());
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamGlobTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamGlobTestCase.php
new file mode 100755
index 0000000000000000000000000000000000000000..24884edf62eabe351d2af0f05d26480f42224b6a
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamGlobTestCase.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStream.
+ *
+ * @since       0.9.0
+ * @group       issue_2
+ */
+class vfsStreamGlobTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @test
+     */
+    public function globDoesNotWorkWithVfsStreamUrls()
+    {
+        $root = vfsStream::setup('example');
+        mkdir(vfsStream::url('example/test/'), 0777, true);
+        $this->assertEmpty(glob(vfsStream::url('example'), GLOB_MARK));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamResolveIncludePathTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamResolveIncludePathTestCase.php
new file mode 100755
index 0000000000000000000000000000000000000000..a4d70b54ec2adb0850d8d0c2722747023dd9c9b6
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamResolveIncludePathTestCase.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStream.
+ *
+ * @since  0.9.0
+ * @group  issue_5
+ */
+class vfsStreamResolveIncludePathTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * include path to restore after test run
+     *
+     * @var  string
+     */
+    protected $backupIncludePath;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->backupIncludePath = get_include_path();
+        vfsStream::setup();
+        mkdir('vfs://root/a/path', 0777, true);
+        set_include_path('vfs://root/a' . PATH_SEPARATOR . $this->backupIncludePath);
+    }
+
+    /**
+     * clean up test environment
+     */
+    public function tearDown()
+    {
+        set_include_path($this->backupIncludePath);
+    }
+
+    /**
+     * @test
+     */
+    public function knownFileCanBeResolved()
+    {
+        file_put_contents('vfs://root/a/path/knownFile.php', '<?php ?>');
+        $this->assertEquals('vfs://root/a/path/knownFile.php', stream_resolve_include_path('path/knownFile.php'));
+    }
+
+    /**
+     * @test
+     */
+    public function unknownFileCanNotBeResolvedYieldsFalse()
+    {
+        $this->assertFalse(@stream_resolve_include_path('path/unknownFile.php'));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..c4a76ed16d628d083c6e85f06e33663372adbc78
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamTestCase.php
@@ -0,0 +1,707 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStream.
+ */
+class vfsStreamTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        vfsStreamWrapper::register();
+    }
+
+    /**
+     * assure that path2url conversion works correct
+     *
+     * @test
+     */
+    public function url()
+    {
+        $this->assertEquals('vfs://foo', vfsStream::url('foo'));
+        $this->assertEquals('vfs://foo/bar.baz', vfsStream::url('foo/bar.baz'));
+        $this->assertEquals('vfs://foo/bar.baz', vfsStream::url('foo\bar.baz'));
+    }
+
+    /**
+     * assure that url2path conversion works correct
+     *
+     * @test
+     */
+    public function path()
+    {
+        $this->assertEquals('foo', vfsStream::path('vfs://foo'));
+        $this->assertEquals('foo/bar.baz', vfsStream::path('vfs://foo/bar.baz'));
+        $this->assertEquals('foo/bar.baz', vfsStream::path('vfs://foo\bar.baz'));
+    }
+
+    /**
+     * windows directory separators are converted into default separator
+     *
+     * @author  Gabriel Birke
+     * @test
+     */
+    public function pathConvertsWindowsDirectorySeparators()
+    {
+        $this->assertEquals('foo/bar', vfsStream::path('vfs://foo\\bar'));
+    }
+
+    /**
+     * trailing whitespace should be removed
+     *
+     * @author  Gabriel Birke
+     * @test
+     */
+    public function pathRemovesTrailingWhitespace()
+    {
+        $this->assertEquals('foo/bar', vfsStream::path('vfs://foo/bar '));
+    }
+
+    /**
+     * trailing slashes are removed
+     *
+     * @author  Gabriel Birke
+     * @test
+     */
+    public function pathRemovesTrailingSlash()
+    {
+        $this->assertEquals('foo/bar', vfsStream::path('vfs://foo/bar/'));
+    }
+
+    /**
+     * trailing slash and whitespace should be removed
+     *
+     * @author  Gabriel Birke
+     * @test
+     */
+    public function pathRemovesTrailingSlashAndWhitespace()
+    {
+        $this->assertEquals('foo/bar', vfsStream::path('vfs://foo/bar/ '));
+    }
+
+    /**
+     * double slashes should be replaced by single slash
+     *
+     * @author  Gabriel Birke
+     * @test
+     */
+    public function pathRemovesDoubleSlashes()
+    {
+        // Regular path
+        $this->assertEquals('my/path', vfsStream::path('vfs://my/path'));
+        // Path with double slashes
+        $this->assertEquals('my/path', vfsStream::path('vfs://my//path'));
+    }
+
+    /**
+     * test to create a new file
+     *
+     * @test
+     */
+    public function newFile()
+    {
+        $file = vfsStream::newFile('filename.txt');
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamFile', $file);
+        $this->assertEquals('filename.txt', $file->getName());
+        $this->assertEquals(0666, $file->getPermissions());
+    }
+
+    /**
+     * test to create a new file with non-default permissions
+     *
+     * @test
+     * @group  permissions
+     */
+    public function newFileWithDifferentPermissions()
+    {
+        $file = vfsStream::newFile('filename.txt', 0644);
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamFile', $file);
+        $this->assertEquals('filename.txt', $file->getName());
+        $this->assertEquals(0644, $file->getPermissions());
+    }
+
+    /**
+     * test to create a new directory structure
+     *
+     * @test
+     */
+    public function newSingleDirectory()
+    {
+        $foo = vfsStream::newDirectory('foo');
+        $this->assertEquals('foo', $foo->getName());
+        $this->assertEquals(0, count($foo->getChildren()));
+        $this->assertEquals(0777, $foo->getPermissions());
+    }
+
+    /**
+     * test to create a new directory structure with non-default permissions
+     *
+     * @test
+     * @group  permissions
+     */
+    public function newSingleDirectoryWithDifferentPermissions()
+    {
+        $foo = vfsStream::newDirectory('foo', 0755);
+        $this->assertEquals('foo', $foo->getName());
+        $this->assertEquals(0, count($foo->getChildren()));
+        $this->assertEquals(0755, $foo->getPermissions());
+    }
+
+    /**
+     * test to create a new directory structure
+     *
+     * @test
+     */
+    public function newDirectoryStructure()
+    {
+        $foo = vfsStream::newDirectory('foo/bar/baz');
+        $this->assertEquals('foo', $foo->getName());
+        $this->assertEquals(0777, $foo->getPermissions());
+        $this->assertTrue($foo->hasChild('bar'));
+        $this->assertTrue($foo->hasChild('bar/baz'));
+        $this->assertFalse($foo->hasChild('baz'));
+        $bar = $foo->getChild('bar');
+        $this->assertEquals('bar', $bar->getName());
+        $this->assertEquals(0777, $bar->getPermissions());
+        $this->assertTrue($bar->hasChild('baz'));
+        $baz1 = $bar->getChild('baz');
+        $this->assertEquals('baz', $baz1->getName());
+        $this->assertEquals(0777, $baz1->getPermissions());
+        $baz2 = $foo->getChild('bar/baz');
+        $this->assertSame($baz1, $baz2);
+    }
+
+    /**
+     * test that correct directory structure is created
+     *
+     * @test
+     */
+    public function newDirectoryWithSlashAtStart()
+    {
+        $foo = vfsStream::newDirectory('/foo/bar/baz', 0755);
+        $this->assertEquals('foo', $foo->getName());
+        $this->assertEquals(0755, $foo->getPermissions());
+        $this->assertTrue($foo->hasChild('bar'));
+        $this->assertTrue($foo->hasChild('bar/baz'));
+        $this->assertFalse($foo->hasChild('baz'));
+        $bar = $foo->getChild('bar');
+        $this->assertEquals('bar', $bar->getName());
+        $this->assertEquals(0755, $bar->getPermissions());
+        $this->assertTrue($bar->hasChild('baz'));
+        $baz1 = $bar->getChild('baz');
+        $this->assertEquals('baz', $baz1->getName());
+        $this->assertEquals(0755, $baz1->getPermissions());
+        $baz2 = $foo->getChild('bar/baz');
+        $this->assertSame($baz1, $baz2);
+    }
+
+    /**
+     * @test
+     * @group  setup
+     * @since  0.7.0
+     */
+    public function setupRegistersStreamWrapperAndCreatesRootDirectoryWithDefaultNameAndPermissions()
+    {
+        $root = vfsStream::setup();
+        $this->assertSame($root, vfsStreamWrapper::getRoot());
+        $this->assertEquals('root', $root->getName());
+        $this->assertEquals(0777, $root->getPermissions());
+    }
+
+    /**
+     * @test
+     * @group  setup
+     * @since  0.7.0
+     */
+    public function setupRegistersStreamWrapperAndCreatesRootDirectoryWithGivenNameAndDefaultPermissions()
+    {
+        $root = vfsStream::setup('foo');
+        $this->assertSame($root, vfsStreamWrapper::getRoot());
+        $this->assertEquals('foo', $root->getName());
+        $this->assertEquals(0777, $root->getPermissions());
+    }
+
+    /**
+     * @test
+     * @group  setup
+     * @since  0.7.0
+     */
+    public function setupRegistersStreamWrapperAndCreatesRootDirectoryWithGivenNameAndPermissions()
+    {
+        $root = vfsStream::setup('foo', 0444);
+        $this->assertSame($root, vfsStreamWrapper::getRoot());
+        $this->assertEquals('foo', $root->getName());
+        $this->assertEquals(0444, $root->getPermissions());
+    }
+
+    /**
+     * @test
+     * @group  issue_14
+     * @group  issue_20
+     * @since  0.10.0
+     */
+    public function setupWithEmptyArrayIsEqualToSetup()
+    {
+        $root = vfsStream::setup('example',
+                                 0755,
+                                 array()
+                );
+        $this->assertEquals('example', $root->getName());
+        $this->assertEquals(0755, $root->getPermissions());
+        $this->assertFalse($root->hasChildren());
+    }
+
+    /**
+     * @test
+     * @group  issue_14
+     * @group  issue_20
+     * @since  0.10.0
+     */
+    public function setupArraysAreTurnedIntoSubdirectories()
+    {
+        $root = vfsStream::setup('root',
+                                 null,
+                                 array('test' => array())
+                );
+        $this->assertTrue($root->hasChildren());
+        $this->assertTrue($root->hasChild('test'));
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory',
+                                $root->getChild('test')
+        );
+        $this->assertFalse($root->getChild('test')->hasChildren());
+    }
+
+    /**
+     * @test
+     * @group  issue_14
+     * @group  issue_20
+     * @since  0.10.0
+     */
+    public function setupStringsAreTurnedIntoFilesWithContent()
+    {
+        $root = vfsStream::setup('root',
+                                 null,
+                                 array('test.txt' => 'some content')
+                );
+        $this->assertTrue($root->hasChildren());
+        $this->assertTrue($root->hasChild('test.txt'));
+        $this->assertVfsFile($root->getChild('test.txt'), 'some content');
+    }
+
+    /**
+     * @test
+     * @group  issue_14
+     * @group  issue_20
+     * @since  0.10.0
+     */
+    public function setupWorksRecursively()
+    {
+        $root = vfsStream::setup('root',
+                                 null,
+                                 array('test' => array('foo'     => array('test.txt' => 'hello'),
+                                                       'baz.txt' => 'world'
+                                                 )
+                                 )
+                );
+        $this->assertTrue($root->hasChildren());
+        $this->assertTrue($root->hasChild('test'));
+        $test = $root->getChild('test');
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory', $test);
+        $this->assertTrue($test->hasChildren());
+        $this->assertTrue($test->hasChild('baz.txt'));
+        $this->assertVfsFile($test->getChild('baz.txt'), 'world');
+
+        $this->assertTrue($test->hasChild('foo'));
+        $foo = $test->getChild('foo');
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory', $foo);
+        $this->assertTrue($foo->hasChildren());
+        $this->assertTrue($foo->hasChild('test.txt'));
+        $this->assertVfsFile($foo->getChild('test.txt'), 'hello');
+    }
+
+    /**
+    * @test
+    * @group  issue_17
+    * @group  issue_20
+    */
+    public function setupCastsNumericDirectoriesToStrings()
+    {
+        $root = vfsStream::setup('root',
+                                 null,
+                                 array(2011 => array ('test.txt' => 'some content'))
+                );
+        $this->assertTrue($root->hasChild('2011'));
+
+        $directory = $root->getChild('2011');
+        $this->assertVfsFile($directory->getChild('test.txt'), 'some content');
+
+        $this->assertTrue(file_exists('vfs://root/2011/test.txt'));
+    }
+
+    /**
+     * @test
+     * @group  issue_20
+     * @since  0.11.0
+     */
+    public function createArraysAreTurnedIntoSubdirectories()
+    {
+        $baseDir = vfsStream::create(array('test' => array()), new vfsStreamDirectory('baseDir'));
+        $this->assertTrue($baseDir->hasChildren());
+        $this->assertTrue($baseDir->hasChild('test'));
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory',
+                                $baseDir->getChild('test')
+        );
+        $this->assertFalse($baseDir->getChild('test')->hasChildren());
+    }
+
+    /**
+     * @test
+     * @group  issue_20
+     * @since  0.11.0
+     */
+    public function createArraysAreTurnedIntoSubdirectoriesOfRoot()
+    {
+        $root = vfsStream::setup();
+        $this->assertSame($root, vfsStream::create(array('test' => array())));
+        $this->assertTrue($root->hasChildren());
+        $this->assertTrue($root->hasChild('test'));
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory',
+                                $root->getChild('test')
+        );
+        $this->assertFalse($root->getChild('test')->hasChildren());
+    }
+
+    /**
+     * @test
+     * @group  issue_20
+     * @expectedException  \InvalidArgumentException
+     * @since  0.11.0
+     */
+    public function createThrowsExceptionIfNoBaseDirGivenAndNoRootSet()
+    {
+        vfsStream::create(array('test' => array()));
+    }
+
+    /**
+     * @test
+     * @group  issue_20
+     * @since  0.11.0
+     */
+    public function createWorksRecursively()
+    {
+        $baseDir = vfsStream::create(array('test' => array('foo'     => array('test.txt' => 'hello'),
+                                                           'baz.txt' => 'world'
+                                                     )
+                                     ),
+                                     new vfsStreamDirectory('baseDir')
+                   );
+        $this->assertTrue($baseDir->hasChildren());
+        $this->assertTrue($baseDir->hasChild('test'));
+        $test = $baseDir->getChild('test');
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory', $test);
+        $this->assertTrue($test->hasChildren());
+        $this->assertTrue($test->hasChild('baz.txt'));
+        $this->assertVfsFile($test->getChild('baz.txt'), 'world');
+
+        $this->assertTrue($test->hasChild('foo'));
+        $foo = $test->getChild('foo');
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory', $foo);
+        $this->assertTrue($foo->hasChildren());
+        $this->assertTrue($foo->hasChild('test.txt'));
+        $this->assertVfsFile($foo->getChild('test.txt'), 'hello');
+    }
+
+    /**
+     * @test
+     * @group  issue_20
+     * @since  0.11.0
+     */
+    public function createWorksRecursivelyWithRoot()
+    {
+        $root = vfsStream::setup();
+        $this->assertSame($root,
+                          vfsStream::create(array('test' => array('foo'     => array('test.txt' => 'hello'),
+                                                                  'baz.txt' => 'world'
+                                                            )
+                                            )
+                          )
+        );
+        $this->assertTrue($root->hasChildren());
+        $this->assertTrue($root->hasChild('test'));
+        $test = $root->getChild('test');
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory', $test);
+        $this->assertTrue($test->hasChildren());
+        $this->assertTrue($test->hasChild('baz.txt'));
+        $this->assertVfsFile($test->getChild('baz.txt'), 'world');
+
+        $this->assertTrue($test->hasChild('foo'));
+        $foo = $test->getChild('foo');
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamDirectory', $foo);
+        $this->assertTrue($foo->hasChildren());
+        $this->assertTrue($foo->hasChild('test.txt'));
+        $this->assertVfsFile($foo->getChild('test.txt'), 'hello');
+    }
+
+    /**
+     * @test
+     * @group  issue_20
+     * @since  0.10.0
+     */
+    public function createStringsAreTurnedIntoFilesWithContent()
+    {
+        $baseDir = vfsStream::create(array('test.txt' => 'some content'), new vfsStreamDirectory('baseDir'));
+        $this->assertTrue($baseDir->hasChildren());
+        $this->assertTrue($baseDir->hasChild('test.txt'));
+        $this->assertVfsFile($baseDir->getChild('test.txt'), 'some content');
+    }
+
+    /**
+     * @test
+     * @group  issue_20
+     * @since  0.11.0
+     */
+    public function createStringsAreTurnedIntoFilesWithContentWithRoot()
+    {
+        $root = vfsStream::setup();
+        $this->assertSame($root,
+                          vfsStream::create(array('test.txt' => 'some content'))
+        );
+        $this->assertTrue($root->hasChildren());
+        $this->assertTrue($root->hasChild('test.txt'));
+        $this->assertVfsFile($root->getChild('test.txt'), 'some content');
+    }
+
+    /**
+    * @test
+    * @group  issue_20
+    * @since  0.11.0
+    */
+    public function createCastsNumericDirectoriesToStrings()
+    {
+        $baseDir = vfsStream::create(array(2011 => array ('test.txt' => 'some content')), new vfsStreamDirectory('baseDir'));
+        $this->assertTrue($baseDir->hasChild('2011'));
+
+        $directory = $baseDir->getChild('2011');
+        $this->assertVfsFile($directory->getChild('test.txt'), 'some content');
+    }
+
+    /**
+    * @test
+    * @group  issue_20
+    * @since  0.11.0
+    */
+    public function createCastsNumericDirectoriesToStringsWithRoot()
+    {
+        $root = vfsStream::setup();
+        $this->assertSame($root,
+                          vfsStream::create(array(2011 => array ('test.txt' => 'some content')))
+        );
+        $this->assertTrue($root->hasChild('2011'));
+
+        $directory = $root->getChild('2011');
+        $this->assertVfsFile($directory->getChild('test.txt'), 'some content');
+    }
+
+    /**
+     * helper function for assertions on vfsStreamFile
+     *
+     * @param  vfsStreamFile  $file
+     * @param  string         $content
+     */
+    protected function assertVfsFile(vfsStreamFile $file, $content)
+    {
+        $this->assertInstanceOf('org\\bovigo\\vfs\\vfsStreamFile',
+                                $file
+        );
+        $this->assertEquals($content,
+                            $file->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_10
+     * @since  0.10.0
+     */
+    public function inspectWithContentGivesContentToVisitor()
+    {
+        $mockContent = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockVisitor = $this->getMock('org\\bovigo\\vfs\\visitor\\vfsStreamVisitor');
+        $mockVisitor->expects($this->once())
+                    ->method('visit')
+                    ->with($this->equalTo($mockContent))
+                    ->will($this->returnValue($mockVisitor));
+        $this->assertSame($mockVisitor, vfsStream::inspect($mockVisitor, $mockContent));
+    }
+
+    /**
+     * @test
+     * @group  issue_10
+     * @since  0.10.0
+     */
+    public function inspectWithoutContentGivesRootToVisitor()
+    {
+        $root = vfsStream::setup();
+        $mockVisitor = $this->getMock('org\\bovigo\\vfs\\visitor\\vfsStreamVisitor');
+        $mockVisitor->expects($this->once())
+                    ->method('visitDirectory')
+                    ->with($this->equalTo($root))
+                    ->will($this->returnValue($mockVisitor));
+        $this->assertSame($mockVisitor, vfsStream::inspect($mockVisitor));
+    }
+
+    /**
+     * @test
+     * @group  issue_10
+     * @expectedException  \InvalidArgumentException
+     * @since  0.10.0
+     */
+    public function inspectWithoutContentAndWithoutRootThrowsInvalidArgumentException()
+    {
+        $mockVisitor = $this->getMock('org\\bovigo\\vfs\\visitor\\vfsStreamVisitor');
+        $mockVisitor->expects($this->never())
+                    ->method('visit');
+        $mockVisitor->expects($this->never())
+                    ->method('visitDirectory');
+        vfsStream::inspect($mockVisitor);
+    }
+
+    /**
+     * returns path to file system copy resource directory
+     *
+     * @return  string
+     */
+    protected function getFileSystemCopyDir()
+    {
+        return realpath(dirname(__FILE__) . '/../../../../resources/filesystemcopy');
+    }
+
+    /**
+     * @test
+     * @group  issue_4
+     * @expectedException  \InvalidArgumentException
+     * @since  0.11.0
+     */
+    public function copyFromFileSystemThrowsExceptionIfNoBaseDirGivenAndNoRootSet()
+    {
+        vfsStream::copyFromFileSystem($this->getFileSystemCopyDir());
+    }
+
+    /**
+     * @test
+     * @group  issue_4
+     * @since  0.11.0
+     */
+    public function copyFromEmptyFolder()
+    {
+        $baseDir = vfsStream::copyFromFileSystem($this->getFileSystemCopyDir() . '/emptyFolder',
+                                                 vfsStream::newDirectory('test')
+                   );
+        $baseDir->removeChild('.gitignore');
+        $this->assertFalse($baseDir->hasChildren());
+    }
+
+    /**
+     * @test
+     * @group  issue_4
+     * @since  0.11.0
+     */
+    public function copyFromEmptyFolderWithRoot()
+    {
+        $root = vfsStream::setup();
+        $this->assertEquals($root,
+                            vfsStream::copyFromFileSystem($this->getFileSystemCopyDir() . '/emptyFolder')
+        );
+        $root->removeChild('.gitignore');
+        $this->assertFalse($root->hasChildren());
+    }
+
+    /**
+     * @test
+     * @group  issue_4
+     * @since  0.11.0
+     */
+    public function copyFromWithSubFolders()
+    {
+        $baseDir = vfsStream::copyFromFileSystem($this->getFileSystemCopyDir(),
+                                                 vfsStream::newDirectory('test'),
+                                                 3
+                   );
+        $this->assertTrue($baseDir->hasChildren());
+        $this->assertTrue($baseDir->hasChild('emptyFolder'));
+        $this->assertTrue($baseDir->hasChild('withSubfolders'));
+        $subfolderDir = $baseDir->getChild('withSubfolders');
+        $this->assertTrue($subfolderDir->hasChild('subfolder1'));
+        $this->assertTrue($subfolderDir->getChild('subfolder1')->hasChild('file1.txt'));
+        $this->assertVfsFile($subfolderDir->getChild('subfolder1/file1.txt'), '');
+        $this->assertTrue($subfolderDir->hasChild('subfolder2'));
+        $this->assertTrue($subfolderDir->hasChild('aFile.txt'));
+        $this->assertVfsFile($subfolderDir->getChild('aFile.txt'), 'foo');
+    }
+
+    /**
+     * @test
+     * @group  issue_4
+     * @since  0.11.0
+     */
+    public function copyFromWithSubFoldersWithRoot()
+    {
+        $root = vfsStream::setup();
+        $this->assertEquals($root,
+                            vfsStream::copyFromFileSystem($this->getFileSystemCopyDir(),
+                                                          null,
+                                                          3
+                            )
+        );
+        $this->assertTrue($root->hasChildren());
+        $this->assertTrue($root->hasChild('emptyFolder'));
+        $this->assertTrue($root->hasChild('withSubfolders'));
+        $subfolderDir = $root->getChild('withSubfolders');
+        $this->assertTrue($subfolderDir->hasChild('subfolder1'));
+        $this->assertTrue($subfolderDir->getChild('subfolder1')->hasChild('file1.txt'));
+        $this->assertVfsFile($subfolderDir->getChild('subfolder1/file1.txt'), '');
+        $this->assertTrue($subfolderDir->hasChild('subfolder2'));
+        $this->assertTrue($subfolderDir->hasChild('aFile.txt'));
+        $this->assertVfsFile($subfolderDir->getChild('aFile.txt'), 'foo');
+    }
+
+    /**
+     * @test
+     * @group  issue_4
+     * @group  issue_29
+     * @since  0.11.2
+     */
+    public function copyFromPreservesFilePermissions()
+    {
+        if (DIRECTORY_SEPARATOR !== '/') {
+            $this->markTestSkipped('Only applicable on Linux style systems.');
+        }
+
+        $copyDir = $this->getFileSystemCopyDir();
+        $root    = vfsStream::setup();
+        $this->assertEquals($root,
+                            vfsStream::copyFromFileSystem($copyDir,
+                                                          null
+                            )
+        );
+        $this->assertEquals(fileperms($copyDir . '/withSubfolders') - vfsStreamContent::TYPE_DIR,
+                            $root->getChild('withSubfolders')
+                                 ->getPermissions()
+        );
+        $this->assertEquals(fileperms($copyDir . '/withSubfolders/aFile.txt') - vfsStreamContent::TYPE_FILE,
+                            $root->getChild('withSubfolders/aFile.txt')
+                                 ->getPermissions()
+        );
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamUmaskTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamUmaskTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..342af310b84909f3263235cb5163e0d59f5c799a
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamUmaskTestCase.php
@@ -0,0 +1,195 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for umask settings.
+ *
+ * @group  permissions
+ * @group  umask
+ * @since  0.8.0
+ */
+class vfsStreamUmaskTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        vfsStream::umask(0000);
+    }
+
+    /**
+     * clean up test environment
+     */
+    public function tearDown()
+    {
+        vfsStream::umask(0000);
+    }
+
+    /**
+     * @test
+     */
+    public function gettingUmaskSettingDoesNotChangeUmaskSetting()
+    {
+        $this->assertEquals(vfsStream::umask(),
+                            vfsStream::umask()
+        );
+        $this->assertEquals(0000,
+                            vfsStream::umask()
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function changingUmaskSettingReturnsOldUmaskSetting()
+    {
+        $this->assertEquals(0000,
+                            vfsStream::umask(0022)
+        );
+        $this->assertEquals(0022,
+                            vfsStream::umask()
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function createFileWithDefaultUmaskSetting()
+    {
+        $file = new vfsStreamFile('foo');
+        $this->assertEquals(0666, $file->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createFileWithDifferentUmaskSetting()
+    {
+        vfsStream::umask(0022);
+        $file = new vfsStreamFile('foo');
+        $this->assertEquals(0644, $file->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createDirectoryWithDefaultUmaskSetting()
+    {
+        $directory = new vfsStreamDirectory('foo');
+        $this->assertEquals(0777, $directory->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createDirectoryWithDifferentUmaskSetting()
+    {
+        vfsStream::umask(0022);
+        $directory = new vfsStreamDirectory('foo');
+        $this->assertEquals(0755, $directory->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createFileUsingStreamWithDefaultUmaskSetting()
+    {
+        $root = vfsStream::setup();
+        file_put_contents(vfsStream::url('root/newfile.txt'), 'file content');
+        $this->assertEquals(0666, $root->getChild('newfile.txt')->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createFileUsingStreamWithDifferentUmaskSetting()
+    {
+        $root = vfsStream::setup();
+        vfsStream::umask(0022);
+        file_put_contents(vfsStream::url('root/newfile.txt'), 'file content');
+        $this->assertEquals(0644, $root->getChild('newfile.txt')->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createDirectoryUsingStreamWithDefaultUmaskSetting()
+    {
+        $root = vfsStream::setup();
+        mkdir(vfsStream::url('root/newdir'));
+        $this->assertEquals(0777, $root->getChild('newdir')->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createDirectoryUsingStreamWithDifferentUmaskSetting()
+    {
+        $root = vfsStream::setup();
+        vfsStream::umask(0022);
+        mkdir(vfsStream::url('root/newdir'));
+        $this->assertEquals(0755, $root->getChild('newdir')->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createDirectoryUsingStreamWithExplicit0()
+    {
+        $root = vfsStream::setup();
+        vfsStream::umask(0022);
+        mkdir(vfsStream::url('root/newdir'), null);
+        $this->assertEquals(0000, $root->getChild('newdir')->getPermissions());
+    }
+
+    /**
+     * @test
+     *
+     */
+    public function createDirectoryUsingStreamWithDifferentUmaskSettingButExplicit0777()
+    {
+        $root = vfsStream::setup();
+        vfsStream::umask(0022);
+        mkdir(vfsStream::url('root/newdir'), 0777);
+        $this->assertEquals(0755, $root->getChild('newdir')->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function createDirectoryUsingStreamWithDifferentUmaskSettingButExplicitModeRequestedByCall()
+    {
+        $root = vfsStream::setup();
+        vfsStream::umask(0022);
+        mkdir(vfsStream::url('root/newdir'), 0700);
+        $this->assertEquals(0700, $root->getChild('newdir')->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function defaultUmaskSettingDoesNotInfluenceSetup()
+    {
+        $root = vfsStream::setup();
+        $this->assertEquals(0777, $root->getPermissions());
+    }
+
+    /**
+     * @test
+     */
+    public function umaskSettingShouldBeRespectedBySetup()
+    {
+        vfsStream::umask(0022);
+        $root = vfsStream::setup();
+        $this->assertEquals(0755, $root->getPermissions());
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperAlreadyRegisteredTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperAlreadyRegisteredTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7f78dcc800aa191af51d264649127b78a072672
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperAlreadyRegisteredTestCase.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Helper class for the test.
+ */
+class TestvfsStreamWrapper extends vfsStreamWrapper
+{
+    /**
+     * unregisters vfsStreamWrapper
+     */
+    public static function unregister()
+    {
+        if (in_array(vfsStream::SCHEME, stream_get_wrappers()) === true) {
+            stream_wrapper_unregister(vfsStream::SCHEME);
+        }
+
+        self::$registered = false;
+    }
+}
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ */
+class vfsStreamWrapperAlreadyRegisteredTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        TestvfsStreamWrapper::unregister();
+        $mock = $this->getMock('org\\bovigo\\vfs\\vfsStreamWrapper');
+        stream_wrapper_register(vfsStream::SCHEME, get_class($mock));
+    }
+
+    /**
+     * clean up test environment
+     */
+    public function tearDown()
+    {
+        TestvfsStreamWrapper::unregister();
+    }
+
+    /**
+     * registering the stream wrapper when another stream wrapper is already
+     * registered for the vfs scheme should throw an exception
+     *
+     * @test
+     * @expectedException  org\bovigo\vfs\vfsStreamException
+     */
+    public function registerOverAnotherStreamWrapper()
+    {
+        vfsStreamWrapper::register();
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperBaseTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperBaseTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..52ec40cf7eac43623c07c909b639e559cb64015d
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperBaseTestCase.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ */
+abstract class vfsStreamWrapperBaseTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * root directory
+     *
+     * @var  vfsStreamDirectory
+     */
+    protected $foo;
+    /**
+     * URL of root directory
+     *
+     * @var  string
+     */
+    protected $fooURL;
+    /**
+     * sub directory
+     *
+     * @var  vfsStreamDirectory
+     */
+    protected $bar;
+    /**
+     * URL of sub directory
+     *
+     * @var  string
+     */
+    protected $barURL;
+    /**
+     * a file
+     *
+     * @var  vfsStreamFile
+     */
+    protected $baz1;
+    /**
+     * URL of file 1
+     *
+     * @var  string
+     */
+    protected $baz1URL;
+    /**
+     * another file
+     *
+     * @var  vfsStreamFile
+     */
+    protected $baz2;
+    /**
+     * URL of file 2
+     *
+     * @var  string
+     */
+    protected $baz2URL;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->fooURL  = vfsStream::url('foo');
+        $this->barURL  = vfsStream::url('foo/bar');
+        $this->baz1URL = vfsStream::url('foo/bar/baz1');
+        $this->baz2URL = vfsStream::url('foo/baz2');
+        $this->foo     = new vfsStreamDirectory('foo');
+        $this->bar     = new vfsStreamDirectory('bar');
+        $this->baz1    = vfsStream::newFile('baz1')
+                                  ->lastModified(300)
+                                  ->lastAccessed(300)
+                                  ->lastAttributeModified(300)
+                                  ->withContent('baz 1');
+        $this->baz2    = vfsStream::newFile('baz2')
+                                  ->withContent('baz2')
+                                  ->lastModified(400)
+                                  ->lastAccessed(400)
+                                  ->lastAttributeModified(400);
+        $this->bar->addChild($this->baz1);
+        $this->foo->addChild($this->bar);
+        $this->foo->addChild($this->baz2);
+        $this->foo->lastModified(100)
+                  ->lastAccessed(100)
+                  ->lastAttributeModified(100);
+        $this->bar->lastModified(200)
+                  ->lastAccessed(100)
+                  ->lastAttributeModified(100);
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot($this->foo);
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirSeparatorTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirSeparatorTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..f08f0a7fde3ab1f40179e2f34f184d1b911e7abd
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirSeparatorTestCase.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test that using windows directory separator works correct.
+ *
+ * @since  0.9.0
+ * @group  issue_8
+ */
+class vfsStreamWrapperDirSeparatorTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * root diretory
+     *
+     * @var  vfsStreamDirectory
+     */
+    protected $root;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup();
+    }
+
+    /**
+     * @test
+     */
+    public function fileCanBeAccessedUsingWinDirSeparator()
+    {
+        vfsStream::newFile('foo/bar/baz.txt')
+                 ->at($this->root)
+                 ->withContent('test');
+        $this->assertEquals('test', file_get_contents('vfs://root/foo\bar\baz.txt'));
+    }
+
+
+    /**
+     * @test
+     */
+    public function directoryCanBeCreatedUsingWinDirSeparator()
+    {
+        mkdir('vfs://root/dir\bar\foo', true, 0777);
+        $this->assertTrue($this->root->hasChild('dir'));
+        $this->assertTrue($this->root->getChild('dir')->hasChild('bar'));
+        $this->assertTrue($this->root->getChild('dir/bar')->hasChild('foo'));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..cf4efdd4a9a30bedf0d3f974b17b6215b818607a
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirTestCase.php
@@ -0,0 +1,617 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+require_once __DIR__ . '/vfsStreamWrapperBaseTestCase.php';
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper around mkdir().
+ *
+ * @package     bovigo_vfs
+ * @subpackage  test
+ */
+class vfsStreamWrapperMkDirTestCase extends vfsStreamWrapperBaseTestCase
+{
+    /**
+     * mkdir() should not overwrite existing root
+     *
+     * @test
+     */
+    public function mkdirNoNewRoot()
+    {
+        $this->assertFalse(mkdir(vfsStream::url('another')));
+        $this->assertEquals(2, count($this->foo->getChildren()));
+        $this->assertSame($this->foo, vfsStreamWrapper::getRoot());
+    }
+
+    /**
+     * mkdir() should not overwrite existing root
+     *
+     * @test
+     */
+    public function mkdirNoNewRootRecursively()
+    {
+        $this->assertFalse(mkdir(vfsStream::url('another/more'), 0777, true));
+        $this->assertEquals(2, count($this->foo->getChildren()));
+        $this->assertSame($this->foo, vfsStreamWrapper::getRoot());
+    }
+
+    /**
+     * assert that mkdir() creates the correct directory structure
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirNonRecursively()
+    {
+        $this->assertFalse(mkdir($this->barURL . '/another/more'));
+        $this->assertEquals(2, count($this->foo->getChildren()));
+        $this->assertTrue(mkdir($this->fooURL . '/another'));
+        $this->assertEquals(3, count($this->foo->getChildren()));
+        $this->assertEquals(0777, $this->foo->getChild('another')->getPermissions());
+    }
+
+    /**
+     * assert that mkdir() creates the correct directory structure
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirRecursively()
+    {
+        $this->assertTrue(mkdir($this->fooURL . '/another/more', 0777, true));
+        $this->assertEquals(3, count($this->foo->getChildren()));
+        $another = $this->foo->getChild('another');
+        $this->assertTrue($another->hasChild('more'));
+        $this->assertEquals(0777, $this->foo->getChild('another')->getPermissions());
+        $this->assertEquals(0777, $this->foo->getChild('another')->getChild('more')->getPermissions());
+    }
+
+    /**
+     * @test
+     * @group  issue_9
+     * @since  0.9.0
+     */
+    public function mkdirWithDots()
+    {
+        $this->assertTrue(mkdir($this->fooURL . '/another/../more/.', 0777, true));
+        $this->assertEquals(3, count($this->foo->getChildren()));
+        $this->assertTrue($this->foo->hasChild('more'));
+    }
+
+    /**
+     * no root > new directory becomes root
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirWithoutRootCreatesNewRoot()
+    {
+        vfsStreamWrapper::register();
+        $this->assertTrue(@mkdir(vfsStream::url('foo')));
+        $this->assertEquals(vfsStreamContent::TYPE_DIR, vfsStreamWrapper::getRoot()->getType());
+        $this->assertEquals('foo', vfsStreamWrapper::getRoot()->getName());
+        $this->assertEquals(0777, vfsStreamWrapper::getRoot()->getPermissions());
+    }
+
+    /**
+     * trying to create a subdirectory of a file should not work
+     *
+     * @test
+     */
+    public function mkdirOnFileReturnsFalse()
+    {
+        $this->assertFalse(mkdir($this->baz1URL . '/another/more', 0777, true));
+    }
+
+    /**
+     * assert that mkdir() creates the correct directory structure
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirNonRecursivelyDifferentPermissions()
+    {
+        $this->assertTrue(mkdir($this->fooURL . '/another', 0755));
+        $this->assertEquals(0755, $this->foo->getChild('another')->getPermissions());
+    }
+
+    /**
+     * assert that mkdir() creates the correct directory structure
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirRecursivelyDifferentPermissions()
+    {
+        $this->assertTrue(mkdir($this->fooURL . '/another/more', 0755, true));
+        $this->assertEquals(3, count($this->foo->getChildren()));
+        $another = $this->foo->getChild('another');
+        $this->assertTrue($another->hasChild('more'));
+        $this->assertEquals(0755, $this->foo->getChild('another')->getPermissions());
+        $this->assertEquals(0755, $this->foo->getChild('another')->getChild('more')->getPermissions());
+    }
+
+    /**
+     * assert that mkdir() creates the correct directory structure
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirRecursivelyUsesDefaultPermissions()
+    {
+        $this->foo->chmod(0700);
+        $this->assertTrue(mkdir($this->fooURL . '/another/more', 0777, true));
+        $this->assertEquals(3, count($this->foo->getChildren()));
+        $another = $this->foo->getChild('another');
+        $this->assertTrue($another->hasChild('more'));
+        $this->assertEquals(0777, $this->foo->getChild('another')->getPermissions());
+        $this->assertEquals(0777, $this->foo->getChild('another')->getChild('more')->getPermissions());
+    }
+
+    /**
+     * no root > new directory becomes root
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirWithoutRootCreatesNewRootDifferentPermissions()
+    {
+        vfsStreamWrapper::register();
+        $this->assertTrue(@mkdir(vfsStream::url('foo'), 0755));
+        $this->assertEquals(vfsStreamContent::TYPE_DIR, vfsStreamWrapper::getRoot()->getType());
+        $this->assertEquals('foo', vfsStreamWrapper::getRoot()->getName());
+        $this->assertEquals(0755, vfsStreamWrapper::getRoot()->getPermissions());
+    }
+
+    /**
+     * no root > new directory becomes root
+     *
+     * @test
+     * @group  permissions
+     */
+    public function mkdirWithoutRootCreatesNewRootWithDefaultPermissions()
+    {
+        vfsStreamWrapper::register();
+        $this->assertTrue(@mkdir(vfsStream::url('foo')));
+        $this->assertEquals(vfsStreamContent::TYPE_DIR, vfsStreamWrapper::getRoot()->getType());
+        $this->assertEquals('foo', vfsStreamWrapper::getRoot()->getName());
+        $this->assertEquals(0777, vfsStreamWrapper::getRoot()->getPermissions());
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function mkdirDirCanNotCreateNewDirInNonWritingDirectory()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root'));
+        vfsStreamWrapper::getRoot()->addChild(new vfsStreamDirectory('restrictedFolder', 0000));
+        $this->assertFalse(is_writable(vfsStream::url('root/restrictedFolder/')));
+        $this->assertFalse(mkdir(vfsStream::url('root/restrictedFolder/newFolder')));
+        $this->assertFalse(vfsStreamWrapper::getRoot()->hasChild('restrictedFolder/newFolder'));
+    }
+
+    /**
+     * @test
+     * @group  issue_28
+     */
+    public function mkDirShouldNotOverwriteExistingDirectories()
+    {
+        vfsStream::setup('root');
+        $dir = vfsStream::url('root/dir');
+        $this->assertTrue(mkdir($dir));
+        $this->assertFalse(@mkdir($dir));
+    }
+
+    /**
+     * @test
+     * @group  issue_28
+     * @expectedException PHPUnit_Framework_Error
+     * @expectedExceptionMessage  mkdir(): Path vfs://root/dir exists
+     */
+    public function mkDirShouldNotOverwriteExistingDirectoriesAndTriggerE_USER_WARNING()
+    {
+        vfsStream::setup('root');
+        $dir = vfsStream::url('root/dir');
+        $this->assertTrue(mkdir($dir));
+        $this->assertFalse(mkdir($dir));
+    }
+
+    /**
+     * @test
+     * @group  issue_28
+     */
+    public function mkDirShouldNotOverwriteExistingFiles()
+    {
+        $root = vfsStream::setup('root');
+        vfsStream::newFile('test.txt')->at($root);
+        $this->assertFalse(@mkdir(vfsStream::url('root/test.txt')));
+    }
+
+    /**
+     * @test
+     * @group  issue_28
+     * @expectedException PHPUnit_Framework_Error
+     * @expectedExceptionMessage  mkdir(): Path vfs://root/test.txt exists
+     */
+    public function mkDirShouldNotOverwriteExistingFilesAndTriggerE_USER_WARNING()
+    {
+        $root = vfsStream::setup('root');
+        vfsStream::newFile('test.txt')->at($root);
+        $this->assertFalse(mkdir(vfsStream::url('root/test.txt')));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function canNotIterateOverNonReadableDirectory()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        $this->assertFalse(@opendir(vfsStream::url('root')));
+        $this->assertFalse(@dir(vfsStream::url('root')));
+    }
+
+    /**
+     * @test
+     */
+    public function directoryIteration()
+    {
+        $dir = dir($this->fooURL);
+        $i   = 0;
+        while (false !== ($entry = $dir->read())) {
+            $i++;
+            $this->assertTrue('bar' === $entry || 'baz2' === $entry);
+        }
+
+        $this->assertEquals(2, $i, 'Directory foo contains two children, but got ' . $i . ' children while iterating over directory contents');
+        $dir->rewind();
+        $i   = 0;
+        while (false !== ($entry = $dir->read())) {
+            $i++;
+            $this->assertTrue('bar' === $entry || 'baz2' === $entry);
+        }
+
+        $this->assertEquals(2, $i, 'Directory foo contains two children, but got ' . $i . ' children while iterating over directory contents');
+        $dir->close();
+    }
+
+    /**
+     * @test
+     */
+    public function directoryIterationWithDot()
+    {
+        $dir = dir($this->fooURL . '/.');
+        $i   = 0;
+        while (false !== ($entry = $dir->read())) {
+            $i++;
+            $this->assertTrue('bar' === $entry || 'baz2' === $entry);
+        }
+
+        $this->assertEquals(2, $i, 'Directory foo contains two children, but got ' . $i . ' children while iterating over directory contents');
+        $dir->rewind();
+        $i   = 0;
+        while (false !== ($entry = $dir->read())) {
+            $i++;
+            $this->assertTrue('bar' === $entry || 'baz2' === $entry);
+        }
+
+        $this->assertEquals(2, $i, 'Directory foo contains two children, but got ' . $i . ' children while iterating over directory contents');
+        $dir->close();
+    }
+
+    /**
+     * assure that a directory iteration works as expected
+     *
+     * @test
+     * @group  regression
+     * @group  bug_2
+     */
+    public function directoryIterationWithOpenDir_Bug_2()
+    {
+        $handle = opendir($this->fooURL);
+        $i   = 0;
+        while (false !== ($entry = readdir($handle))) {
+            $i++;
+            $this->assertTrue('bar' === $entry || 'baz2' === $entry);
+        }
+
+        $this->assertEquals(2, $i, 'Directory foo contains two children, but got ' . $i . ' children while iterating over directory contents');
+
+        rewind($handle);
+        $i   = 0;
+        while (false !== ($entry = readdir($handle))) {
+            $i++;
+            $this->assertTrue('bar' === $entry || 'baz2' === $entry);
+        }
+
+        $this->assertEquals(2, $i, 'Directory foo contains two children, but got ' . $i . ' children while iterating over directory contents');
+        closedir($handle);
+    }
+
+    /**
+     * assure that a directory iteration works as expected
+     *
+     * @author  Christoph Bloemer
+     * @test
+     * @group  regression
+     * @group  bug_4
+     */
+    public function directoryIteration_Bug_4()
+    {
+        $dir   = $this->fooURL;
+        $list1 = array();
+        if ($handle = opendir($dir)) {
+            while (false !== ($listItem = readdir($handle))) {
+                if ('.'  != $listItem && '..' != $listItem) {
+                    if (is_file($dir . '/' . $listItem) === true) {
+                        $list1[] = 'File:[' . $listItem . ']';
+                    } elseif (is_dir($dir . '/' . $listItem) === true) {
+                        $list1[] = 'Folder:[' . $listItem . ']';
+                    }
+                }
+            }
+
+            closedir($handle);
+        }
+
+        $list2 = array();
+        if ($handle = opendir($dir)) {
+            while (false !== ($listItem = readdir($handle))) {
+                if ('.'  != $listItem && '..' != $listItem) {
+                    if (is_file($dir . '/' . $listItem) === true) {
+                        $list2[] = 'File:[' . $listItem . ']';
+                    } elseif (is_dir($dir . '/' . $listItem) === true) {
+                        $list2[] = 'Folder:[' . $listItem . ']';
+                    }
+                }
+            }
+
+            closedir($handle);
+        }
+
+        $this->assertEquals($list1, $list2);
+        $this->assertEquals(2, count($list1));
+        $this->assertEquals(2, count($list2));
+    }
+
+    /**
+     * assure that a directory iteration works as expected
+     *
+     * @test
+     */
+    public function directoryIterationShouldBeIndependent()
+    {
+        $list1   = array();
+        $list2   = array();
+        $handle1 = opendir($this->fooURL);
+        if (false !== ($listItem = readdir($handle1))) {
+            $list1[] = $listItem;
+        }
+
+        $handle2 = opendir($this->fooURL);
+        if (false !== ($listItem = readdir($handle2))) {
+            $list2[] = $listItem;
+        }
+
+        if (false !== ($listItem = readdir($handle1))) {
+            $list1[] = $listItem;
+        }
+
+        if (false !== ($listItem = readdir($handle2))) {
+            $list2[] = $listItem;
+        }
+
+        closedir($handle1);
+        closedir($handle2);
+        $this->assertEquals($list1, $list2);
+        $this->assertEquals(2, count($list1));
+        $this->assertEquals(2, count($list2));
+    }
+
+    /**
+     * assert is_dir() returns correct result
+     *
+     * @test
+     */
+    public function is_dir()
+    {
+        $this->assertTrue(is_dir($this->fooURL));
+        $this->assertTrue(is_dir($this->fooURL . '/.'));
+        $this->assertTrue(is_dir($this->barURL));
+        $this->assertTrue(is_dir($this->barURL . '/.'));
+        $this->assertFalse(is_dir($this->baz1URL));
+        $this->assertFalse(is_dir($this->baz2URL));
+        $this->assertFalse(is_dir($this->fooURL . '/another'));
+        $this->assertFalse(is_dir(vfsStream::url('another')));
+    }
+
+    /**
+     * can not unlink without root
+     *
+     * @test
+     */
+    public function canNotUnlinkDirectoryWithoutRoot()
+    {
+        vfsStreamWrapper::register();
+        $this->assertFalse(@rmdir(vfsStream::url('foo')));
+    }
+
+    /**
+     * rmdir() can not remove files
+     *
+     * @test
+     */
+    public function rmdirCanNotRemoveFiles()
+    {
+        $this->assertFalse(rmdir($this->baz1URL));
+        $this->assertFalse(rmdir($this->baz2URL));
+    }
+
+    /**
+     * rmdir() can not remove a non-existing directory
+     *
+     * @test
+     */
+    public function rmdirCanNotRemoveNonExistingDirectory()
+    {
+        $this->assertFalse(rmdir($this->fooURL . '/another'));
+    }
+
+    /**
+     * rmdir() can not remove non-empty directories
+     *
+     * @test
+     */
+    public function rmdirCanNotRemoveNonEmptyDirectory()
+    {
+        $this->assertFalse(rmdir($this->fooURL));
+        $this->assertFalse(rmdir($this->barURL));
+    }
+
+    /**
+     * @test
+     */
+    public function rmdirCanRemoveEmptyDirectory()
+    {
+        vfsStream::newDirectory('empty')->at($this->foo);
+        $this->assertTrue($this->foo->hasChild('empty'));
+        $this->assertTrue(rmdir($this->fooURL . '/empty'));
+        $this->assertFalse($this->foo->hasChild('empty'));
+    }
+
+    /**
+     * @test
+     */
+    public function rmdirCanRemoveEmptyDirectoryWithDot()
+    {
+        vfsStream::newDirectory('empty')->at($this->foo);
+        $this->assertTrue($this->foo->hasChild('empty'));
+        $this->assertTrue(rmdir($this->fooURL . '/empty/.'));
+        $this->assertFalse($this->foo->hasChild('empty'));
+    }
+
+    /**
+     * rmdir() can remove empty directories
+     *
+     * @test
+     */
+    public function rmdirCanRemoveEmptyRoot()
+    {
+        $this->foo->removeChild('bar');
+        $this->foo->removeChild('baz2');
+        $this->assertTrue(rmdir($this->fooURL));
+        $this->assertFalse(file_exists($this->fooURL)); // make sure statcache was cleared
+        $this->assertNull(vfsStreamWrapper::getRoot());
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function rmdirDirCanNotRemoveDirFromNonWritingDirectory()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        vfsStreamWrapper::getRoot()->addChild(new vfsStreamDirectory('nonRemovableFolder'));
+        $this->assertFalse(is_writable(vfsStream::url('root')));
+        $this->assertFalse(rmdir(vfsStream::url('root/nonRemovableFolder')));
+        $this->assertTrue(vfsStreamWrapper::getRoot()->hasChild('nonRemovableFolder'));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_17
+     */
+    public function issue17()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0770));
+        vfsStreamWrapper::getRoot()->chgrp(vfsStream::GROUP_USER_1)
+                                   ->chown(vfsStream::OWNER_USER_1);
+        $this->assertFalse(mkdir(vfsStream::url('root/doesNotWork')));
+        $this->assertFalse(vfsStreamWrapper::getRoot()->hasChild('doesNotWork'));
+    }
+
+    /**
+     * @test
+     * @group  bug_19
+     */
+    public function accessWithDoubleDotReturnsCorrectContent()
+    {
+        $this->assertEquals('baz2',
+                file_get_contents(vfsStream::url('foo/bar/../baz2'))
+        );
+    }
+
+    /**
+     * @test
+     * @since  0.11.0
+     * @group  issue_23
+     */
+    public function unlinkCanNotRemoveNonEmptyDirectory()
+    {
+        try {
+            $this->assertFalse(unlink($this->barURL));
+        } catch (\PHPUnit_Framework_Error $fe) {
+            $this->assertEquals('unlink(vfs://foo/bar): Operation not permitted', $fe->getMessage());
+        }
+
+        $this->assertTrue($this->foo->hasChild('bar'));
+        $this->assertFileExists($this->barURL);
+    }
+
+    /**
+     * @test
+     * @since  0.11.0
+     * @group  issue_23
+     */
+    public function unlinkCanNotRemoveEmptyDirectory()
+    {
+        vfsStream::newDirectory('empty')->at($this->foo);
+        try {
+            $this->assertTrue(unlink($this->fooURL . '/empty'));
+        } catch (\PHPUnit_Framework_Error $fe) {
+            $this->assertEquals('unlink(vfs://foo/empty): Operation not permitted', $fe->getMessage());
+        }
+
+        $this->assertTrue($this->foo->hasChild('empty'));
+        $this->assertFileExists($this->fooURL . '/empty');
+    }
+
+    /**
+     * @test
+     * @group  issue_32
+     */
+    public function canCreateFolderOfSameNameAsParentFolder()
+    {
+        $root = vfsStream::setup('testFolder');
+        mkdir(vfsStream::url('testFolder') . '/testFolder/subTestFolder', 0777, true);
+        $this->assertTrue(file_exists(vfsStream::url('testFolder/testFolder/subTestFolder/.')));
+    }
+
+    /**
+     * @test
+     * @group  issue_32
+     */
+    public function canRetrieveFolderOfSameNameAsParentFolder()
+    {
+        $root = vfsStream::setup('testFolder');
+        mkdir(vfsStream::url('testFolder') . '/testFolder/subTestFolder', 0777, true);
+        $this->assertTrue($root->hasChild('testFolder'));
+        $this->assertNotNull($root->getChild('testFolder'));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..5bcb37adc750df63abcca2e2f262c8763c096fa9
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTestCase.php
@@ -0,0 +1,458 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+require_once __DIR__ . '/vfsStreamWrapperBaseTestCase.php';
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ */
+class vfsStreamWrapperFileTestCase extends vfsStreamWrapperBaseTestCase
+{
+    /**
+     * assert that file_get_contents() delivers correct file contents
+     *
+     * @test
+     */
+    public function file_get_contents()
+    {
+        $this->assertEquals('baz2', file_get_contents($this->baz2URL));
+        $this->assertEquals('baz 1', file_get_contents($this->baz1URL));
+        $this->assertFalse(@file_get_contents($this->barURL));
+        $this->assertFalse(@file_get_contents($this->fooURL));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_get_contentsNonReadableFile()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root'));
+        vfsStream::newFile('new.txt', 0000)->at(vfsStreamWrapper::getRoot())->withContent('content');
+        $this->assertEquals('', @file_get_contents(vfsStream::url('root/new.txt')));
+    }
+
+    /**
+     * assert that file_put_contents() delivers correct file contents
+     *
+     * @test
+     */
+    public function file_put_contentsExistingFile()
+    {
+        $this->assertEquals(14, file_put_contents($this->baz2URL, 'baz is not bar'));
+        $this->assertEquals('baz is not bar', $this->baz2->getContent());
+        $this->assertEquals(6, file_put_contents($this->baz1URL, 'foobar'));
+        $this->assertEquals('foobar', $this->baz1->getContent());
+        $this->assertFalse(@file_put_contents($this->barURL, 'This does not work.'));
+        $this->assertFalse(@file_put_contents($this->fooURL, 'This does not work, too.'));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_put_contentsExistingFileNonWritableDirectory()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        vfsStream::newFile('new.txt')->at(vfsStreamWrapper::getRoot())->withContent('content');
+        $this->assertEquals(15, @file_put_contents(vfsStream::url('root/new.txt'), 'This does work.'));
+        $this->assertEquals('This does work.', file_get_contents(vfsStream::url('root/new.txt')));
+
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_put_contentsExistingNonWritableFile()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root'));
+        vfsStream::newFile('new.txt', 0400)->at(vfsStreamWrapper::getRoot())->withContent('content');
+        $this->assertFalse(@file_put_contents(vfsStream::url('root/new.txt'), 'This does not work.'));
+        $this->assertEquals('content', file_get_contents(vfsStream::url('root/new.txt')));
+    }
+
+    /**
+     * assert that file_put_contents() delivers correct file contents
+     *
+     * @test
+     */
+    public function file_put_contentsNonExistingFile()
+    {
+        $this->assertEquals(14, file_put_contents($this->fooURL . '/baznot.bar', 'baz is not bar'));
+        $this->assertEquals(3, count($this->foo->getChildren()));
+        $this->assertEquals(14, file_put_contents($this->barURL . '/baznot.bar', 'baz is not bar'));
+        $this->assertEquals(2, count($this->bar->getChildren()));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_put_contentsNonExistingFileNonWritableDirectory()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        $this->assertFalse(@file_put_contents(vfsStream::url('root/new.txt'), 'This does not work.'));
+        $this->assertFalse(file_exists(vfsStream::url('root/new.txt')));
+
+    }
+
+    /**
+     * using a file pointer should work without any problems
+     *
+     * @test
+     */
+    public function usingFilePointer()
+    {
+        $fp = fopen($this->baz1URL, 'r');
+        $this->assertEquals(0, ftell($fp));
+        $this->assertFalse(feof($fp));
+        $this->assertEquals(0, fseek($fp, 2));
+        $this->assertEquals(2, ftell($fp));
+        $this->assertEquals(0, fseek($fp, 1, SEEK_CUR));
+        $this->assertEquals(3, ftell($fp));
+        $this->assertEquals(0, fseek($fp, 1, SEEK_END));
+        $this->assertEquals(6, ftell($fp));
+        $this->assertTrue(feof($fp));
+        $this->assertEquals(0, fseek($fp, 2));
+        $this->assertFalse(feof($fp));
+        $this->assertEquals(2, ftell($fp));
+        $this->assertEquals('z', fread($fp, 1));
+        $this->assertEquals(3, ftell($fp));
+        $this->assertEquals(' 1', fread($fp, 8092));
+        $this->assertEquals(5, ftell($fp));
+        $this->assertTrue(fclose($fp));
+    }
+
+    /**
+     * assert is_file() returns correct result
+     *
+     * @test
+     */
+    public function is_file()
+    {
+        $this->assertFalse(is_file($this->fooURL));
+        $this->assertFalse(is_file($this->barURL));
+        $this->assertTrue(is_file($this->baz1URL));
+        $this->assertTrue(is_file($this->baz2URL));
+        $this->assertFalse(is_file($this->fooURL . '/another'));
+        $this->assertFalse(is_file(vfsStream::url('another')));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function issue13CanNotOverwriteFiles()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        file_put_contents($vfsFile, 'd');
+        $this->assertEquals('d', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function appendContentIfOpenedWithModeA()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'ab');
+        fwrite($fp, 'd');
+        fclose($fp);
+        $this->assertEquals('testd', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canOverwriteNonExistingFileWithModeX()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        $fp = fopen($vfsFile, 'xb');
+        fwrite($fp, 'test');
+        fclose($fp);
+        $this->assertEquals('test', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOverwriteExistingFileWithModeX()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $this->assertFalse(@fopen($vfsFile, 'xb'));
+        $this->assertEquals('test', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOpenNonExistingFileReadonly()
+    {
+        $this->assertFalse(@fopen(vfsStream::url('foo/doesNotExist.txt'), 'rb'));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOpenNonExistingFileReadAndWrite()
+    {
+        $this->assertFalse(@fopen(vfsStream::url('foo/doesNotExist.txt'), 'rb+'));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOpenWithIllegalMode()
+    {
+        $this->assertFalse(@fopen($this->baz2URL, 'invalid'));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotWriteToReadOnlyFile()
+    {
+        $fp = fopen($this->baz2URL, 'rb');
+        $this->assertEquals('baz2', fread($fp, 4096));
+        $this->assertEquals(0, fwrite($fp, 'foo'));
+        fclose($fp);
+        $this->assertEquals('baz2', file_get_contents($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotReadFromWriteOnlyFileWithModeW()
+    {
+        $fp = fopen($this->baz2URL, 'wb');
+        $this->assertEquals('', fread($fp, 4096));
+        $this->assertEquals(3, fwrite($fp, 'foo'));
+        fseek($fp, 0);
+        $this->assertEquals('', fread($fp, 4096));
+        fclose($fp);
+        $this->assertEquals('foo', file_get_contents($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotReadFromWriteOnlyFileWithModeA()
+    {
+        $fp = fopen($this->baz2URL, 'ab');
+        $this->assertEquals('', fread($fp, 4096));
+        $this->assertEquals(3, fwrite($fp, 'foo'));
+        fseek($fp, 0);
+        $this->assertEquals('', fread($fp, 4096));
+        fclose($fp);
+        $this->assertEquals('baz2foo', file_get_contents($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotReadFromWriteOnlyFileWithModeX()
+    {
+        $vfsFile = vfsStream::url('foo/modeXtest.txt');
+        $fp = fopen($vfsFile, 'xb');
+        $this->assertEquals('', fread($fp, 4096));
+        $this->assertEquals(3, fwrite($fp, 'foo'));
+        fseek($fp, 0);
+        $this->assertEquals('', fread($fp, 4096));
+        fclose($fp);
+        $this->assertEquals('foo', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function canNotRemoveFileFromDirectoryWithoutWritePermissions()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        vfsStream::newFile('new.txt')->at(vfsStreamWrapper::getRoot());
+        $this->assertFalse(unlink(vfsStream::url('root/new.txt')));
+        $this->assertTrue(file_exists(vfsStream::url('root/new.txt')));
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function truncatesFileWhenOpenedWithModeW()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'wb');
+        $this->assertEquals('', file_get_contents($vfsFile));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function createsNonExistingFileWhenOpenedWithModeC()
+    {
+        $vfsFile = vfsStream::url('foo/tobecreated.txt');
+        $fp = fopen($vfsFile, 'cb');
+        fwrite($fp, 'some content');
+        $this->assertTrue($this->foo->hasChild('tobecreated.txt'));
+        fclose($fp);
+        $this->assertEquals('some content', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function createsNonExistingFileWhenOpenedWithModeCplus()
+    {
+        $vfsFile = vfsStream::url('foo/tobecreated.txt');
+        $fp = fopen($vfsFile, 'cb+');
+        fwrite($fp, 'some content');
+        $this->assertTrue($this->foo->hasChild('tobecreated.txt'));
+        fclose($fp);
+        $this->assertEquals('some content', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function doesNotTruncateFileWhenOpenedWithModeC()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb');
+        $this->assertEquals('test', file_get_contents($vfsFile));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function setsPointerToStartWhenOpenedWithModeC()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb');
+        $this->assertEquals(0, ftell($fp));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function doesNotTruncateFileWhenOpenedWithModeCplus()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb+');
+        $this->assertEquals('test', file_get_contents($vfsFile));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function setsPointerToStartWhenOpenedWithModeCplus()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb+');
+        $this->assertEquals(0, ftell($fp));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     */
+    public function cannotOpenExistingNonwritableFileWithModeA()
+    {
+        $this->baz1->chmod(0400);
+        $this->assertFalse(@fopen($this->baz1URL, 'a'));
+    }
+
+    /**
+     * @test
+     */
+    public function cannotOpenExistingNonwritableFileWithModeW()
+    {
+        $this->baz1->chmod(0400);
+        $this->assertFalse(@fopen($this->baz1URL, 'w'));
+    }
+
+    /**
+     * @test
+     */
+    public function cannotOpenNonReadableFileWithModeR()
+    {
+        $this->baz1->chmod(0);
+        $this->assertFalse(@fopen($this->baz1URL, 'r'));
+    }
+
+    /**
+     * @test
+     */
+    public function cannotRenameToNonWritableDir()
+    {
+        $this->bar->chmod(0);
+        $this->assertFalse(@rename($this->baz2URL, vfsStream::url('foo/bar/baz3')));
+    }
+
+    /**
+     * @test
+     * @group issue_38
+     */
+    public function cannotReadFileFromNonReadableDir()
+    {
+        $this->markTestSkipped("Issue #38.");
+        $this->bar->chmod(0);
+        $this->assertFalse(@file_get_contents($this->baz1URL));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTimesTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTimesTestCase.php
new file mode 100755
index 0000000000000000000000000000000000000000..2d036c0a6cfb1796c5eebc161063fd67cee3b60a
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTimesTestCase.php
@@ -0,0 +1,315 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ *
+ * @since  0.9.0
+ */
+class vfsStreamWrapperFileTimesTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * URL of foo.txt file
+     *
+     * @var  string
+     */
+    protected $fooUrl;
+    /**
+     * URL of bar directory
+     *
+     * @var  string
+     */
+    protected $barUrl;
+    /**
+     * URL of baz.txt file
+     *
+     * @var  string
+     */
+    protected $bazUrl;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        vfsStream::setup()
+                 ->lastModified(50)
+                 ->lastAccessed(50)
+                 ->lastAttributeModified(50);
+        $this->fooUrl = vfsStream::url('root/foo.txt');
+        $this->barUrl = vfsStream::url('root/bar');
+        $this->bazUrl = vfsStream::url('root/bar/baz.txt');
+    }
+
+    /**
+     * helper assertion for the tests
+     *
+     * @param  string            $url      url to check
+     * @param  vfsStreamContent  $content  content to compare
+     */
+    protected function assertFileTimesEqualStreamTimes($url, vfsStreamContent $content)
+    {
+        $this->assertEquals(filemtime($url), $content->filemtime());
+        $this->assertEquals(fileatime($url), $content->fileatime());
+        $this->assertEquals(filectime($url), $content->filectime());
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     * @group  issue_26
+     */
+    public function openFileChangesAttributeTimeOnly()
+    {
+        $file = vfsStream::newFile('foo.txt')
+                         ->withContent('test')
+                         ->at(vfsStreamWrapper::getRoot())
+                         ->lastModified(100)
+                         ->lastAccessed(100)
+                         ->lastAttributeModified(100);
+        fclose(fopen($this->fooUrl, 'rb'));
+        $this->assertGreaterThan(time() - 2, fileatime($this->fooUrl));
+        $this->assertLessThanOrEqual(time(), fileatime($this->fooUrl));
+        $this->assertLessThanOrEqual(100, filemtime($this->fooUrl));
+        $this->assertEquals(100, filectime($this->fooUrl));
+        $this->assertFileTimesEqualStreamTimes($this->fooUrl, $file);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     * @group  issue_26
+     */
+    public function fileGetContentsChangesAttributeTimeOnly()
+    {
+        $file = vfsStream::newFile('foo.txt')
+                         ->withContent('test')
+                         ->at(vfsStreamWrapper::getRoot())
+                         ->lastModified(100)
+                         ->lastAccessed(100)
+                         ->lastAttributeModified(100);
+        file_get_contents($this->fooUrl);
+        $this->assertGreaterThan(time() - 2, fileatime($this->fooUrl));
+        $this->assertLessThanOrEqual(time(), fileatime($this->fooUrl));
+        $this->assertLessThanOrEqual(100, filemtime($this->fooUrl));
+        $this->assertEquals(100, filectime($this->fooUrl));
+        $this->assertFileTimesEqualStreamTimes($this->fooUrl, $file);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     * @group  issue_26
+     */
+    public function openFileWithTruncateChangesAttributeAndModificationTime()
+    {
+        $file = vfsStream::newFile('foo.txt')
+                         ->withContent('test')
+                         ->at(vfsStreamWrapper::getRoot())
+                         ->lastModified(100)
+                         ->lastAccessed(100)
+                         ->lastAttributeModified(100);
+        fclose(fopen($this->fooUrl, 'wb'));
+        $this->assertGreaterThan(time() - 2, filemtime($this->fooUrl));
+        $this->assertGreaterThan(time() - 2, fileatime($this->fooUrl));
+        $this->assertLessThanOrEqual(time(), filemtime($this->fooUrl));
+        $this->assertLessThanOrEqual(time(), fileatime($this->fooUrl));
+        $this->assertEquals(100, filectime($this->fooUrl));
+        $this->assertFileTimesEqualStreamTimes($this->fooUrl, $file);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function readFileChangesAccessTime()
+    {
+        $file = vfsStream::newFile('foo.txt')
+                         ->withContent('test')
+                         ->at(vfsStreamWrapper::getRoot())
+                         ->lastModified(100)
+                         ->lastAccessed(100)
+                         ->lastAttributeModified(100);
+        $fp = fopen($this->fooUrl, 'rb');
+        $openTime = time();
+        sleep(3);
+        fread($fp, 1024);
+        fclose($fp);
+        $this->assertLessThanOrEqual($openTime, filemtime($this->fooUrl));
+        $this->assertLessThanOrEqual($openTime + 3, fileatime($this->fooUrl));
+        $this->assertEquals(100, filectime($this->fooUrl));
+        $this->assertFileTimesEqualStreamTimes($this->fooUrl, $file);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function writeFileChangesModificationTime()
+    {
+        $file = vfsStream::newFile('foo.txt')
+                         ->at(vfsStreamWrapper::getRoot())
+                         ->lastModified(100)
+                         ->lastAccessed(100)
+                         ->lastAttributeModified(100);
+        $fp = fopen($this->fooUrl, 'wb');
+        $openTime = time();
+        sleep(3);
+        fwrite($fp, 'test');
+        fclose($fp);
+        $this->assertLessThanOrEqual($openTime + 3, filemtime($this->fooUrl));
+        $this->assertLessThanOrEqual($openTime, fileatime($this->fooUrl));
+        $this->assertEquals(100, filectime($this->fooUrl));
+        $this->assertFileTimesEqualStreamTimes($this->fooUrl, $file);
+
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function createNewFileSetsAllTimesToCurrentTime()
+    {
+        file_put_contents($this->fooUrl, 'test');
+        $this->assertLessThanOrEqual(time(), filemtime($this->fooUrl));
+        $this->assertEquals(fileatime($this->fooUrl), filectime($this->fooUrl));
+        $this->assertEquals(fileatime($this->fooUrl), filemtime($this->fooUrl));
+        $this->assertFileTimesEqualStreamTimes($this->fooUrl, vfsStreamWrapper::getRoot()->getChild('foo.txt'));
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function createNewFileChangesAttributeAndModificationTimeOfContainingDirectory()
+    {
+        $dir = vfsStream::newDirectory('bar')
+                        ->at(vfsStreamWrapper::getRoot())
+                        ->lastModified(100)
+                        ->lastAccessed(100)
+                        ->lastAttributeModified(100);
+        file_put_contents($this->bazUrl, 'test');
+        $this->assertLessThanOrEqual(time(), filemtime($this->barUrl));
+        $this->assertLessThanOrEqual(time(), filectime($this->barUrl));
+        $this->assertEquals(100, fileatime($this->barUrl));
+        $this->assertFileTimesEqualStreamTimes($this->barUrl, $dir);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function addNewFileNameWithLinkFunctionChangesAttributeTimeOfOriginalFile()
+    {
+        $this->markTestSkipped('Links are currently not supported by vfsStream.');
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function addNewFileNameWithLinkFunctionChangesAttributeAndModificationTimeOfDirectoryContainingLink()
+    {
+        $this->markTestSkipped('Links are currently not supported by vfsStream.');
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function removeFileChangesAttributeAndModificationTimeOfContainingDirectory()
+    {
+        $dir = vfsStream::newDirectory('bar')
+                        ->at(vfsStreamWrapper::getRoot());
+        $file = vfsStream::newFile('baz.txt')
+                         ->at($dir)
+                         ->lastModified(100)
+                         ->lastAccessed(100)
+                         ->lastAttributeModified(100);
+        $dir->lastModified(100)
+            ->lastAccessed(100)
+            ->lastAttributeModified(100);
+        unlink($this->bazUrl);
+        $this->assertLessThanOrEqual(time(), filemtime($this->barUrl));
+        $this->assertLessThanOrEqual(time(), filectime($this->barUrl));
+        $this->assertEquals(100, fileatime($this->barUrl));
+        $this->assertFileTimesEqualStreamTimes($this->barUrl, $dir);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function renameFileChangesAttributeAndModificationTimeOfAffectedDirectories()
+    {
+        $target = vfsStream::newDirectory('target')
+                           ->at(vfsStreamWrapper::getRoot())
+                           ->lastModified(200)
+                           ->lastAccessed(200)
+                           ->lastAttributeModified(200);
+        $source = vfsStream::newDirectory('bar')
+                           ->at(vfsStreamWrapper::getRoot());
+        $file = vfsStream::newFile('baz.txt')
+                         ->at($source)
+                         ->lastModified(300)
+                         ->lastAccessed(300)
+                         ->lastAttributeModified(300);
+        $source->lastModified(100)
+               ->lastAccessed(100)
+               ->lastAttributeModified(100);
+        rename($this->bazUrl, vfsStream::url('root/target/baz.txt'));
+        $this->assertLessThanOrEqual(time(), filemtime($this->barUrl));
+        $this->assertLessThanOrEqual(time(), filectime($this->barUrl));
+        $this->assertEquals(100, fileatime($this->barUrl));
+        $this->assertFileTimesEqualStreamTimes($this->barUrl, $source);
+        $this->assertLessThanOrEqual(time(), filemtime(vfsStream::url('root/target')));
+        $this->assertLessThanOrEqual(time(), filectime(vfsStream::url('root/target')));
+        $this->assertEquals(200, fileatime(vfsStream::url('root/target')));
+        $this->assertFileTimesEqualStreamTimes(vfsStream::url('root/target'), $target);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function renameFileDoesNotChangeFileTimesOfFileItself()
+    {
+        $target = vfsStream::newDirectory('target')
+                           ->at(vfsStreamWrapper::getRoot())
+                           ->lastModified(200)
+                           ->lastAccessed(200)
+                           ->lastAttributeModified(200);
+        $source = vfsStream::newDirectory('bar')
+                           ->at(vfsStreamWrapper::getRoot());
+        $file = vfsStream::newFile('baz.txt')
+                         ->at($source)
+                         ->lastModified(300)
+                         ->lastAccessed(300)
+                         ->lastAttributeModified(300);
+        $source->lastModified(100)
+               ->lastAccessed(100)
+               ->lastAttributeModified(100);
+        rename($this->bazUrl, vfsStream::url('root/target/baz.txt'));
+        $this->assertEquals(300, filemtime(vfsStream::url('root/target/baz.txt')));
+        $this->assertEquals(300, filectime(vfsStream::url('root/target/baz.txt')));
+        $this->assertEquals(300, fileatime(vfsStream::url('root/target/baz.txt')));
+        $this->assertFileTimesEqualStreamTimes(vfsStream::url('root/target/baz.txt'), $file);
+    }
+
+    /**
+     * @test
+     * @group  issue_7
+     */
+    public function changeFileAttributesChangesAttributeTimeOfFileItself()
+    {
+        $this->markTestSkipped('Changing file attributes via stream wrapper for self-defined streams is not supported by PHP.');
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFlockTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFlockTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b329dc50793e2a54d21402a7fc5d9977b9bb52e
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFlockTestCase.php
@@ -0,0 +1,440 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for flock() implementation.
+ *
+ * @package     bovigo_vfs
+ * @subpackage  test
+ * @since       0.10.0
+ * @see         https://github.com/mikey179/vfsStream/issues/6
+ * @group       issue_6
+ */
+class vfsStreamWrapperFlockTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * root directory
+     *
+     * @var  vfsStreamContainer
+     */
+    protected $root;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup();
+    }
+
+    /**
+     * @test
+     */
+    public function fileIsNotLockedByDefault()
+    {
+        $this->assertFalse(vfsStream::newFile('foo.txt')->isLocked());
+    }
+
+    /**
+     * @test
+     */
+    public function streamIsNotLockedByDefault()
+    {
+        file_put_contents(vfsStream::url('root/foo.txt'), 'content');
+        $this->assertFalse($this->root->getChild('foo.txt')->isLocked());
+    }
+
+    /**
+     * @test
+     */
+    public function canAquireSharedLock()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertTrue(flock($fp, LOCK_SH));
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp);
+
+    }
+
+    /**
+     * @test
+     */
+    public function canAquireSharedLockWithNonBlockingFlockCall()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertTrue(flock($fp, LOCK_SH | LOCK_NB));
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp);
+
+    }
+
+    /**
+     * @test
+     */
+    public function canAquireEclusiveLock()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertTrue(flock($fp, LOCK_EX));
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     */
+    public function canAquireEclusiveLockWithNonBlockingFlockCall()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertTrue(flock($fp, LOCK_EX | LOCK_NB));
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     */
+    public function canRemoveLock()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_EX);
+        $this->assertTrue(flock($fp, LOCK_UN));
+        $this->assertFalse($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canRemoveLockWhenNotLocked()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertTrue(flock($fp, LOCK_UN));
+        $this->assertFalse($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertFalse($file->hasSharedLock($fp));
+        $this->assertFalse($file->hasExclusiveLock());
+        $this->assertFalse($file->hasExclusiveLock($fp));
+        fclose($fp);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canRemoveSharedLockWithoutRemovingSharedLockOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp1, LOCK_SH);
+        $file->lock($fp2, LOCK_SH);
+        $this->assertTrue(flock($fp1, LOCK_UN));
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertFalse($file->hasSharedLock($fp1));
+        $this->assertTrue($file->hasSharedLock($fp2));
+        fclose($fp1);
+        fclose($fp2);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canNotRemoveSharedLockAcquiredOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp1, LOCK_SH);
+        $this->assertTrue(flock($fp2, LOCK_UN));
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp1);
+        fclose($fp2);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canNotRemoveExlusiveLockAcquiredOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp1, LOCK_EX);
+        $this->assertTrue(flock($fp2, LOCK_UN));
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        fclose($fp1);
+        fclose($fp2);
+    }
+
+    /**
+     * @test
+     */
+    public function canRemoveLockWithNonBlockingFlockCall()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_EX);
+        $this->assertTrue(flock($fp, LOCK_UN | LOCK_NB));
+        $this->assertFalse($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canNotAquireExclusiveLockIfAlreadyExclusivelyLockedOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp1, LOCK_EX);
+        $this->assertFalse(flock($fp2, LOCK_EX + LOCK_NB));
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        $this->assertTrue($file->hasExclusiveLock($fp1));
+        $this->assertFalse($file->hasExclusiveLock($fp2));
+        fclose($fp1);
+        fclose($fp2);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canAquireExclusiveLockIfAlreadySelfExclusivelyLocked()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_EX);
+        $this->assertTrue(flock($fp, LOCK_EX + LOCK_NB));
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canNotAquireExclusiveLockIfAlreadySharedLockedOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp1, LOCK_SH);
+        $this->assertFalse(flock($fp2, LOCK_EX));
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp1);
+        fclose($fp2);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canAquireExclusiveLockIfAlreadySelfSharedLocked()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_SH);
+        $this->assertTrue(flock($fp, LOCK_EX));
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canNotAquireSharedLockIfAlreadyExclusivelyLockedOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp1, LOCK_EX);
+        $this->assertFalse(flock($fp2, LOCK_SH + LOCK_NB));
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        fclose($fp1);
+        fclose($fp2);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canAquireSharedLockIfAlreadySelfExclusivelyLocked()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_EX);
+        $this->assertTrue(flock($fp, LOCK_SH + LOCK_NB));
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canAquireSharedLockIfAlreadySelfSharedLocked()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_SH);
+        $this->assertTrue(flock($fp, LOCK_SH));
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function canAquireSharedLockIfAlreadySharedLockedOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2   = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp1, LOCK_SH);
+        $this->assertTrue(flock($fp2, LOCK_SH));
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertTrue($file->hasSharedLock($fp1));
+        $this->assertTrue($file->hasSharedLock($fp2));
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp1);
+        fclose($fp2);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/31
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_31
+     * @group  issue_40
+     */
+    public function removesExclusiveLockOnStreamClose()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_EX);
+        fclose($fp);
+        $this->assertFalse($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/31
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_31
+     * @group  issue_40
+     */
+    public function removesSharedLockOnStreamClose()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp, LOCK_SH);
+        fclose($fp);
+        $this->assertFalse($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertFalse($file->hasExclusiveLock());
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function notRemovesExclusiveLockOnStreamCloseIfExclusiveLockAcquiredOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1 = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2 = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp2, LOCK_EX);
+        fclose($fp1);
+        $this->assertTrue($file->isLocked());
+        $this->assertFalse($file->hasSharedLock());
+        $this->assertTrue($file->hasExclusiveLock());
+        $this->assertTrue($file->hasExclusiveLock($fp2));
+        fclose($fp2);
+    }
+
+    /**
+     * @see    https://github.com/mikey179/vfsStream/issues/40
+     * @test
+     * @group  issue_40
+     */
+    public function notRemovesSharedLockOnStreamCloseIfSharedLockAcquiredOnOtherFileHandler()
+    {
+        $file = vfsStream::newFile('foo.txt')->at($this->root);
+        $fp1 = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $fp2 = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $file->lock($fp2, LOCK_SH);
+        fclose($fp1);
+        $this->assertTrue($file->isLocked());
+        $this->assertTrue($file->hasSharedLock());
+        $this->assertTrue($file->hasSharedLock($fp2));
+        $this->assertFalse($file->hasExclusiveLock());
+        fclose($fp2);
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperQuotaTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperQuotaTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..84c454619e0c1cc1bb42fb8e2acc75da1d310b01
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperQuotaTestCase.php
@@ -0,0 +1,204 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for quota related functionality of org\bovigo\vfs\vfsStreamWrapper.
+ *
+ * @group  issue_35
+ */
+class vfsStreamWrapperQuotaTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * access to root
+     *
+     * @type  vfsStreamDirectory
+     */
+    private $root;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup();
+        vfsStream::setQuota(10);
+    }
+
+    /**
+     * @test
+     */
+    public function writeLessThanQuotaWritesEverything()
+    {
+        $this->assertEquals(9, file_put_contents(vfsStream::url('root/file.txt'), '123456789'));
+        $this->assertEquals('123456789', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function writeUpToQotaWritesEverything()
+    {
+        $this->assertEquals(10, file_put_contents(vfsStream::url('root/file.txt'), '1234567890'));
+        $this->assertEquals('1234567890', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function writeMoreThanQotaWritesOnlyUpToQuota()
+    {
+        try {
+            file_put_contents(vfsStream::url('root/file.txt'), '12345678901');
+        } catch (\PHPUnit_Framework_Error $e) {
+            $this->assertEquals('file_put_contents(): Only 10 of 11 bytes written, possibly out of free disk space',
+                                $e->getMessage()
+            );
+        }
+
+        $this->assertEquals('1234567890', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function considersAllFilesForQuota()
+    {
+        vfsStream::newFile('foo.txt')
+                 ->withContent('foo')
+                 ->at(vfsStream::newDirectory('bar')
+                               ->at($this->root)
+                   );
+        try {
+            file_put_contents(vfsStream::url('root/file.txt'), '12345678901');
+        } catch (\PHPUnit_Framework_Error $e) {
+            $this->assertEquals('file_put_contents(): Only 7 of 11 bytes written, possibly out of free disk space',
+                                $e->getMessage()
+            );
+        }
+
+        $this->assertEquals('1234567', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateToLessThanQuotaWritesEverything()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 9));
+        fclose($fp);
+        $this->assertEquals(9,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateUpToQotaWritesEverything()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 10));
+        fclose($fp);
+        $this->assertEquals(10,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateToMoreThanQotaWritesOnlyUpToQuota()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 11));
+        fclose($fp);
+        $this->assertEquals(10,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateConsidersAllFilesForQuota()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        vfsStream::newFile('bar.txt')
+                 ->withContent('bar')
+                 ->at(vfsStream::newDirectory('bar')
+                               ->at($this->root)
+                   );
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 11));
+        fclose($fp);
+        $this->assertEquals(7,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function canNotTruncateToGreaterLengthWhenDiscQuotaReached()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        vfsStream::newFile('bar.txt')
+                 ->withContent('1234567890')
+                 ->at(vfsStream::newDirectory('bar')
+                               ->at($this->root)
+                   );
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertFalse(ftruncate($fp, 11));
+        fclose($fp);
+        $this->assertEquals(0,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals('',
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperSetOptionTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperSetOptionTestCase.php
new file mode 100755
index 0000000000000000000000000000000000000000..aa86bd343a19685df7908b3ee7a2635f21688f29
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperSetOptionTestCase.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for stream_set_option() implementation.
+ *
+ * @since  0.10.0
+ * @see    https://github.com/mikey179/vfsStream/issues/15
+ * @group  issue_15
+ */
+class vfsStreamWrapperSetOptionTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * root directory
+     *
+     * @var  vfsStreamContainer
+     */
+    protected $root;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup();
+        vfsStream::newFile('foo.txt')->at($this->root);
+    }
+
+    /**
+     * @test
+     */
+    public function setBlockingDoesNotWork()
+    {
+        $fp = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertFalse(stream_set_blocking($fp, 1));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     */
+    public function removeBlockingDoesNotWork()
+    {
+        $fp = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertFalse(stream_set_blocking($fp, 0));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     */
+    public function setTimeoutDoesNotWork()
+    {
+        $fp = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertFalse(stream_set_timeout($fp, 1));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     */
+    public function setWriteBufferDoesNotWork()
+    {
+        $fp = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $this->assertEquals(-1, stream_set_write_buffer($fp, 512));
+        fclose($fp);
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperStreamSelectTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperStreamSelectTestCase.php
new file mode 100755
index 0000000000000000000000000000000000000000..c2aec99713aad08a5aab91c0e1be27138c5c70c9
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperStreamSelectTestCase.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ *
+ * @since  0.9.0
+ * @group  issue_3
+ */
+class vfsStreamWrapperSelectStreamTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @test
+     * @expectedException \PHPUnit_Framework_Error
+     */
+    public function selectStream()
+    {
+        $root = vfsStream::setup();
+        $file = vfsStream::newFile('foo.txt')->at($root)->withContent('testContent');
+
+        $fp = fopen(vfsStream::url('root/foo.txt'), 'rb');
+        $readarray   = array($fp);
+        $writearray  = array();
+        $exceptarray = array();
+        stream_select($readarray, $writearray, $exceptarray, 1);
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..fb3fab22feecf42e0dd5f27860aa4dc033c7ae56
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperTestCase.php
@@ -0,0 +1,783 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+require_once __DIR__ . '/vfsStreamWrapperBaseTestCase.php';
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ */
+class vfsStreamWrapperTestCase extends vfsStreamWrapperBaseTestCase
+{
+    /**
+     * ensure that a call to vfsStreamWrapper::register() resets the stream
+     *
+     * Implemented after a request by David ZÃ¼lke.
+     *
+     * @test
+     */
+    public function resetByRegister()
+    {
+        $this->assertSame($this->foo, vfsStreamWrapper::getRoot());
+        vfsStreamWrapper::register();
+        $this->assertNull(vfsStreamWrapper::getRoot());
+    }
+
+    /**
+     * @test
+     * @since  0.11.0
+     */
+    public function setRootReturnsRoot()
+    {
+        vfsStreamWrapper::register();
+        $root = vfsStream::newDirectory('root');
+        $this->assertSame($root, vfsStreamWrapper::setRoot($root));
+    }
+
+    /**
+     * assure that filesize is returned correct
+     *
+     * @test
+     */
+    public function filesize()
+    {
+        $this->assertEquals(0, filesize($this->fooURL));
+        $this->assertEquals(0, filesize($this->fooURL . '/.'));
+        $this->assertEquals(0, filesize($this->barURL));
+        $this->assertEquals(0, filesize($this->barURL . '/.'));
+        $this->assertEquals(4, filesize($this->baz2URL));
+        $this->assertEquals(5, filesize($this->baz1URL));
+    }
+
+    /**
+     * assert that file_exists() delivers correct result
+     *
+     * @test
+     */
+    public function file_exists()
+    {
+        $this->assertTrue(file_exists($this->fooURL));
+        $this->assertTrue(file_exists($this->fooURL . '/.'));
+        $this->assertTrue(file_exists($this->barURL));
+        $this->assertTrue(file_exists($this->barURL . '/.'));
+        $this->assertTrue(file_exists($this->baz1URL));
+        $this->assertTrue(file_exists($this->baz2URL));
+        $this->assertFalse(file_exists($this->fooURL . '/another'));
+        $this->assertFalse(file_exists(vfsStream::url('another')));
+    }
+
+    /**
+     * assert that filemtime() delivers correct result
+     *
+     * @test
+     */
+    public function filemtime()
+    {
+        $this->assertEquals(100, filemtime($this->fooURL));
+        $this->assertEquals(100, filemtime($this->fooURL . '/.'));
+        $this->assertEquals(200, filemtime($this->barURL));
+        $this->assertEquals(200, filemtime($this->barURL . '/.'));
+        $this->assertEquals(300, filemtime($this->baz1URL));
+        $this->assertEquals(400, filemtime($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue_23
+     */
+    public function unlinkRemovesFilesOnly()
+    {
+        $this->assertTrue(unlink($this->baz2URL));
+        $this->assertFalse(file_exists($this->baz2URL)); // make sure statcache was cleared
+        $this->assertEquals(array($this->bar), $this->foo->getChildren());
+        $this->assertFalse(unlink($this->fooURL . '/another'));
+        $this->assertFalse(unlink(vfsStream::url('another')));
+        $this->assertEquals(array($this->bar), $this->foo->getChildren());
+    }
+
+    /**
+     * @test
+     * @group  issue_49
+     */
+    public function unlinkReturnsFalseWhenFileDoesNotExist()
+    {
+        vfsStream::setup()->addChild(vfsStream::newFile('foo.blubb'));
+        $this->assertFalse(unlink(vfsStream::url('foo.blubb2')));
+    }
+
+    /**
+     * @test
+     * @group  issue_49
+     */
+    public function unlinkReturnsFalseWhenFileDoesNotExistAndFileWithSameNameExistsInRoot()
+    {
+        vfsStream::setup()->addChild(vfsStream::newFile('foo.blubb'));
+        $this->assertFalse(unlink(vfsStream::url('foo.blubb')));
+    }
+
+    /**
+     * assert dirname() returns correct directory name
+     *
+     * @test
+     */
+    public function dirname()
+    {
+        $this->assertEquals($this->fooURL, dirname($this->barURL));
+        $this->assertEquals($this->barURL, dirname($this->baz1URL));
+        # returns "vfs:" instead of "."
+        # however this seems not to be fixable because dirname() does not
+        # call the stream wrapper
+        #$this->assertEquals(dirname(vfsStream::url('doesNotExist')), '.');
+    }
+
+    /**
+     * assert basename() returns correct file name
+     *
+     * @test
+     */
+    public function basename()
+    {
+        $this->assertEquals('bar', basename($this->barURL));
+        $this->assertEquals('baz1', basename($this->baz1URL));
+        $this->assertEquals('doesNotExist', basename(vfsStream::url('doesNotExist')));
+    }
+
+    /**
+     * assert is_readable() works correct
+     *
+     * @test
+     */
+    public function is_readable()
+    {
+        $this->assertTrue(is_readable($this->fooURL));
+        $this->assertTrue(is_readable($this->fooURL . '/.'));
+        $this->assertTrue(is_readable($this->barURL));
+        $this->assertTrue(is_readable($this->barURL . '/.'));
+        $this->assertTrue(is_readable($this->baz1URL));
+        $this->assertTrue(is_readable($this->baz2URL));
+        $this->assertFalse(is_readable($this->fooURL . '/another'));
+        $this->assertFalse(is_readable(vfsStream::url('another')));
+
+        $this->foo->chmod(0222);
+        $this->assertFalse(is_readable($this->fooURL));
+
+        $this->baz1->chmod(0222);
+        $this->assertFalse(is_readable($this->baz1URL));
+    }
+
+    /**
+     * assert is_writable() works correct
+     *
+     * @test
+     */
+    public function is_writable()
+    {
+        $this->assertTrue(is_writable($this->fooURL));
+        $this->assertTrue(is_writable($this->fooURL . '/.'));
+        $this->assertTrue(is_writable($this->barURL));
+        $this->assertTrue(is_writable($this->barURL . '/.'));
+        $this->assertTrue(is_writable($this->baz1URL));
+        $this->assertTrue(is_writable($this->baz2URL));
+        $this->assertFalse(is_writable($this->fooURL . '/another'));
+        $this->assertFalse(is_writable(vfsStream::url('another')));
+
+        $this->foo->chmod(0444);
+        $this->assertFalse(is_writable($this->fooURL));
+
+        $this->baz1->chmod(0444);
+        $this->assertFalse(is_writable($this->baz1URL));
+    }
+
+    /**
+     * assert is_executable() works correct
+     *
+     * @test
+     */
+    public function is_executable()
+    {
+        $this->assertFalse(is_executable($this->baz1URL));
+        $this->baz1->chmod(0766);
+        $this->assertTrue(is_executable($this->baz1URL));
+        $this->assertFalse(is_executable($this->baz2URL));
+    }
+
+    /**
+     * assert is_executable() works correct
+     *
+     * @test
+     */
+    public function directoriesAndNonExistingFilesAreNeverExecutable()
+    {
+        $this->assertFalse(is_executable($this->fooURL));
+        $this->assertFalse(is_executable($this->fooURL . '/.'));
+        $this->assertFalse(is_executable($this->barURL));
+        $this->assertFalse(is_executable($this->barURL . '/.'));
+        $this->assertFalse(is_executable($this->fooURL . '/another'));
+        $this->assertFalse(is_executable(vfsStream::url('another')));
+    }
+
+    /**
+     * file permissions
+     *
+     * @test
+     * @group  permissions
+     */
+    public function chmod()
+    {
+        $this->assertEquals(40777, decoct(fileperms($this->fooURL)));
+        $this->assertEquals(40777, decoct(fileperms($this->fooURL . '/.')));
+        $this->assertEquals(40777, decoct(fileperms($this->barURL)));
+        $this->assertEquals(40777, decoct(fileperms($this->barURL . '/.')));
+        $this->assertEquals(100666, decoct(fileperms($this->baz1URL)));
+        $this->assertEquals(100666, decoct(fileperms($this->baz2URL)));
+
+        $this->foo->chmod(0755);
+        $this->bar->chmod(0700);
+        $this->baz1->chmod(0644);
+        $this->baz2->chmod(0600);
+        $this->assertEquals(40755, decoct(fileperms($this->fooURL)));
+        $this->assertEquals(40755, decoct(fileperms($this->fooURL . '/.')));
+        $this->assertEquals(40700, decoct(fileperms($this->barURL)));
+        $this->assertEquals(40700, decoct(fileperms($this->barURL . '/.')));
+        $this->assertEquals(100644, decoct(fileperms($this->baz1URL)));
+        $this->assertEquals(100600, decoct(fileperms($this->baz2URL)));
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     * @group  permissions
+     */
+    public function chmodModifiesPermissions()
+    {
+        if (version_compare(phpversion(), '5.4.0', '<')) {
+            $this->assertFalse(@chmod($this->fooURL, 0755));
+            $this->assertFalse(@chmod($this->barURL, 0711));
+            $this->assertFalse(@chmod($this->baz1URL, 0644));
+            $this->assertFalse(@chmod($this->baz2URL, 0664));
+            $this->assertEquals(40777, decoct(fileperms($this->fooURL)));
+            $this->assertEquals(40777, decoct(fileperms($this->barURL)));
+            $this->assertEquals(100666, decoct(fileperms($this->baz1URL)));
+            $this->assertEquals(100666, decoct(fileperms($this->baz2URL)));
+        } else {
+            $this->assertTrue(chmod($this->fooURL, 0755));
+            $this->assertTrue(chmod($this->barURL, 0711));
+            $this->assertTrue(chmod($this->baz1URL, 0644));
+            $this->assertTrue(chmod($this->baz2URL, 0664));
+            $this->assertEquals(40755, decoct(fileperms($this->fooURL)));
+            $this->assertEquals(40711, decoct(fileperms($this->barURL)));
+            $this->assertEquals(100644, decoct(fileperms($this->baz1URL)));
+            $this->assertEquals(100664, decoct(fileperms($this->baz2URL)));
+        }
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     */
+    public function fileownerIsCurrentUserByDefault()
+    {
+        $this->assertEquals(vfsStream::getCurrentUser(), fileowner($this->fooURL));
+        $this->assertEquals(vfsStream::getCurrentUser(), fileowner($this->fooURL . '/.'));
+        $this->assertEquals(vfsStream::getCurrentUser(), fileowner($this->barURL));
+        $this->assertEquals(vfsStream::getCurrentUser(), fileowner($this->barURL . '/.'));
+        $this->assertEquals(vfsStream::getCurrentUser(), fileowner($this->baz1URL));
+        $this->assertEquals(vfsStream::getCurrentUser(), fileowner($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     * @group  permissions
+     */
+    public function chownChangesUser()
+    {
+        if (version_compare(phpversion(), '5.4.0', '<')) {
+            $this->foo->chown(vfsStream::OWNER_USER_1);
+            $this->bar->chown(vfsStream::OWNER_USER_1);
+            $this->baz1->chown(vfsStream::OWNER_USER_2);
+            $this->baz2->chown(vfsStream::OWNER_USER_2);
+        } else {
+            chown($this->fooURL, vfsStream::OWNER_USER_1);
+            chown($this->barURL, vfsStream::OWNER_USER_1);
+            chown($this->baz1URL, vfsStream::OWNER_USER_2);
+            chown($this->baz2URL, vfsStream::OWNER_USER_2);
+        }
+
+        $this->assertEquals(vfsStream::OWNER_USER_1, fileowner($this->fooURL));
+        $this->assertEquals(vfsStream::OWNER_USER_1, fileowner($this->fooURL . '/.'));
+        $this->assertEquals(vfsStream::OWNER_USER_1, fileowner($this->barURL));
+        $this->assertEquals(vfsStream::OWNER_USER_1, fileowner($this->barURL . '/.'));
+        $this->assertEquals(vfsStream::OWNER_USER_2, fileowner($this->baz1URL));
+        $this->assertEquals(vfsStream::OWNER_USER_2, fileowner($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     * @group  permissions
+     */
+    public function chownDoesNotWorkOnVfsStreamUrls()
+    {
+        if (version_compare(phpversion(), '5.4.0', '<')) {
+            $this->assertFalse(@chown($this->fooURL, vfsStream::OWNER_USER_2));
+            $this->assertEquals(vfsStream::getCurrentUser(), fileowner($this->fooURL));
+        }
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     * @group  permissions
+     */
+    public function groupIsCurrentGroupByDefault()
+    {
+        $this->assertEquals(vfsStream::getCurrentGroup(), filegroup($this->fooURL));
+        $this->assertEquals(vfsStream::getCurrentGroup(), filegroup($this->fooURL . '/.'));
+        $this->assertEquals(vfsStream::getCurrentGroup(), filegroup($this->barURL));
+        $this->assertEquals(vfsStream::getCurrentGroup(), filegroup($this->barURL . '/.'));
+        $this->assertEquals(vfsStream::getCurrentGroup(), filegroup($this->baz1URL));
+        $this->assertEquals(vfsStream::getCurrentGroup(), filegroup($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     * @group  permissions
+     */
+    public function chgrp()
+    {
+        if (version_compare(phpversion(), '5.4.0', '<')) {
+            $this->foo->chgrp(vfsStream::GROUP_USER_1);
+            $this->bar->chgrp(vfsStream::GROUP_USER_1);
+            $this->baz1->chgrp(vfsStream::GROUP_USER_2);
+            $this->baz2->chgrp(vfsStream::GROUP_USER_2);
+        } else {
+            chgrp($this->fooURL, vfsStream::GROUP_USER_1);
+            chgrp($this->barURL, vfsStream::GROUP_USER_1);
+            chgrp($this->baz1URL, vfsStream::GROUP_USER_2);
+            chgrp($this->baz2URL, vfsStream::GROUP_USER_2);
+        }
+
+        $this->assertEquals(vfsStream::GROUP_USER_1, filegroup($this->fooURL));
+        $this->assertEquals(vfsStream::GROUP_USER_1, filegroup($this->fooURL . '/.'));
+        $this->assertEquals(vfsStream::GROUP_USER_1, filegroup($this->barURL));
+        $this->assertEquals(vfsStream::GROUP_USER_1, filegroup($this->barURL . '/.'));
+        $this->assertEquals(vfsStream::GROUP_USER_2, filegroup($this->baz1URL));
+        $this->assertEquals(vfsStream::GROUP_USER_2, filegroup($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     * @group  permissions
+     */
+    public function chgrpDoesNotWorkOnVfsStreamUrls()
+    {
+        if (version_compare(phpversion(), '5.4.0', '<')) {
+            $this->assertFalse(@chgrp($this->fooURL, vfsStream::GROUP_USER_2));
+            $this->assertEquals(vfsStream::getCurrentGroup(), filegroup($this->fooURL));
+        }
+    }
+
+    /**
+     * @test
+     * @author  Benoit Aubuchon
+     */
+    public function renameDirectory()
+    {
+        // move foo/bar to foo/baz3
+        $baz3URL = vfsStream::url('foo/baz3');
+        $this->assertTrue(rename($this->barURL, $baz3URL));
+        $this->assertFileExists($baz3URL);
+        $this->assertFileNotExists($this->barURL);
+    }
+
+    /**
+     * @test
+     */
+    public function renameDirectoryWithDots()
+    {
+        // move foo/bar to foo/baz3
+        $baz3URL = vfsStream::url('foo/baz3');
+        $this->assertTrue(rename($this->barURL . '/.', $baz3URL));
+        $this->assertFileExists($baz3URL);
+        $this->assertFileNotExists($this->barURL);
+    }
+
+    /**
+     * @test
+     * @group  issue_9
+     * @since  0.9.0
+     */
+    public function renameDirectoryWithDotsInTarget()
+    {
+        // move foo/bar to foo/baz3
+        $baz3URL = vfsStream::url('foo/../foo/baz3/.');
+        $this->assertTrue(rename($this->barURL . '/.', $baz3URL));
+        $this->assertFileExists($baz3URL);
+        $this->assertFileNotExists($this->barURL);
+    }
+
+    /**
+     * @test
+     * @author  Benoit Aubuchon
+     */
+    public function renameDirectoryOverwritingExistingFile()
+    {
+        // move foo/bar to foo/baz2
+        $this->assertTrue(rename($this->barURL, $this->baz2URL));
+        $this->assertFileExists(vfsStream::url('foo/baz2/baz1'));
+        $this->assertFileNotExists($this->barURL);
+    }
+
+    /**
+     * @test
+     * @expectedException  PHPUnit_Framework_Error
+     */
+    public function renameFileIntoFile()
+    {
+        // foo/baz2 is a file, so it can not be turned into a directory
+        $baz3URL = vfsStream::url('foo/baz2/baz3');
+        $this->assertTrue(rename($this->baz1URL, $baz3URL));
+        $this->assertFileExists($baz3URL);
+        $this->assertFileNotExists($this->baz1URL);
+    }
+
+    /**
+     * @test
+     * @author  Benoit Aubuchon
+     */
+    public function renameFileToDirectory()
+    {
+        // move foo/bar/baz1 to foo/baz3
+        $baz3URL = vfsStream::url('foo/baz3');
+        $this->assertTrue(rename($this->baz1URL, $baz3URL));
+        $this->assertFileExists($this->barURL);
+        $this->assertFileExists($baz3URL);
+        $this->assertFileNotExists($this->baz1URL);
+    }
+
+    /**
+     * assert that trying to rename from a non existing file trigger a warning
+     *
+     * @expectedException PHPUnit_Framework_Error
+     * @test
+     */
+    public function renameOnSourceFileNotFound()
+    {
+        rename(vfsStream::url('notfound'), $this->baz1URL);
+    }
+    /**
+     * assert that trying to rename to a directory that is not found trigger a warning
+
+     * @expectedException PHPUnit_Framework_Error
+     * @test
+     */
+    public function renameOnDestinationDirectoryFileNotFound()
+    {
+        rename($this->baz1URL, vfsStream::url('foo/notfound/file2'));
+    }
+    /**
+     * stat() and fstat() should return the same result
+     *
+     * @test
+     */
+    public function statAndFstatReturnSameResult()
+    {
+        $fp = fopen($this->baz2URL, 'r');
+        $this->assertEquals(stat($this->baz2URL),
+                            fstat($fp)
+        );
+        fclose($fp);
+    }
+
+    /**
+     * stat() returns full data
+     *
+     * @test
+     */
+    public function statReturnsFullDataForFiles()
+    {
+        $this->assertEquals(array(0         => 0,
+                                  1         => 0,
+                                  2         => 0100666,
+                                  3         => 0,
+                                  4         => vfsStream::getCurrentUser(),
+                                  5         => vfsStream::getCurrentGroup(),
+                                  6         => 0,
+                                  7         => 4,
+                                  8         => 400,
+                                  9         => 400,
+                                  10        => 400,
+                                  11        => -1,
+                                  12        => -1,
+                                  'dev'     => 0,
+                                  'ino'     => 0,
+                                  'mode'    => 0100666,
+                                  'nlink'   => 0,
+                                  'uid'     => vfsStream::getCurrentUser(),
+                                  'gid'     => vfsStream::getCurrentGroup(),
+                                  'rdev'    => 0,
+                                  'size'    => 4,
+                                  'atime'   => 400,
+                                  'mtime'   => 400,
+                                  'ctime'   => 400,
+                                  'blksize' => -1,
+                                  'blocks'  => -1
+                            ),
+                            stat($this->baz2URL)
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function statReturnsFullDataForDirectories()
+    {
+        $this->assertEquals(array(0         => 0,
+                                  1         => 0,
+                                  2         => 0040777,
+                                  3         => 0,
+                                  4         => vfsStream::getCurrentUser(),
+                                  5         => vfsStream::getCurrentGroup(),
+                                  6         => 0,
+                                  7         => 0,
+                                  8         => 100,
+                                  9         => 100,
+                                  10        => 100,
+                                  11        => -1,
+                                  12        => -1,
+                                  'dev'     => 0,
+                                  'ino'     => 0,
+                                  'mode'    => 0040777,
+                                  'nlink'   => 0,
+                                  'uid'     => vfsStream::getCurrentUser(),
+                                  'gid'     => vfsStream::getCurrentGroup(),
+                                  'rdev'    => 0,
+                                  'size'    => 0,
+                                  'atime'   => 100,
+                                  'mtime'   => 100,
+                                  'ctime'   => 100,
+                                  'blksize' => -1,
+                                  'blocks'  => -1
+                            ),
+                            stat($this->fooURL)
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function statReturnsFullDataForDirectoriesWithDot()
+    {
+        $this->assertEquals(array(0         => 0,
+                                  1         => 0,
+                                  2         => 0040777,
+                                  3         => 0,
+                                  4         => vfsStream::getCurrentUser(),
+                                  5         => vfsStream::getCurrentGroup(),
+                                  6         => 0,
+                                  7         => 0,
+                                  8         => 100,
+                                  9         => 100,
+                                  10        => 100,
+                                  11        => -1,
+                                  12        => -1,
+                                  'dev'     => 0,
+                                  'ino'     => 0,
+                                  'mode'    => 0040777,
+                                  'nlink'   => 0,
+                                  'uid'     => vfsStream::getCurrentUser(),
+                                  'gid'     => vfsStream::getCurrentGroup(),
+                                  'rdev'    => 0,
+                                  'size'    => 0,
+                                  'atime'   => 100,
+                                  'mtime'   => 100,
+                                  'ctime'   => 100,
+                                  'blksize' => -1,
+                                  'blocks'  => -1
+                            ),
+                            stat($this->fooURL . '/.')
+        );
+    }
+
+    /**
+     * @test
+     * @expectedException PHPUnit_Framework_Error
+     */
+    public function openFileWithoutDirectory()
+    {
+        vfsStreamWrapper::register();
+        $this->assertFalse(file_get_contents(vfsStream::url('file.txt')));
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     * @since  1.1.0
+     */
+    public function truncateRemovesSuperflouosContent()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $handle = fopen($this->baz1URL, "r+");
+        $this->assertTrue(ftruncate($handle, 0));
+        $this->assertEquals(0, filesize($this->baz1URL));
+        $this->assertEquals('', file_get_contents($this->baz1URL));
+        fclose($handle);
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     * @since  1.1.0
+     */
+    public function truncateToGreaterSizeAddsZeroBytes()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $handle = fopen($this->baz1URL, "r+");
+        $this->assertTrue(ftruncate($handle, 25));
+        $this->assertEquals(25, filesize($this->baz1URL));
+        $this->assertEquals("baz 1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
+                            file_get_contents($this->baz1URL));
+        fclose($handle);
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     */
+    public function touchCreatesNonExistingFile()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $this->assertTrue(touch($this->fooURL . '/new.txt'));
+        $this->assertTrue($this->foo->hasChild('new.txt'));
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     */
+    public function touchChangesAccessAndModificationTimeForFile()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $this->assertTrue(touch($this->baz1URL, 303, 313));
+        $this->assertEquals(303, $this->baz1->filemtime());
+        $this->assertEquals(313, $this->baz1->fileatime());
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     */
+    public function touchDoesNotChangeTimesWhenNoTimesGiven()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $this->assertTrue(touch($this->baz1URL));
+        $this->assertEquals(300, $this->baz1->filemtime());
+        $this->assertEquals(300, $this->baz1->fileatime());
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     */
+    public function touchWithModifiedTimeChangesAccessAndModifiedTime()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $this->assertTrue(touch($this->baz1URL, 303));
+        $this->assertEquals(303, $this->baz1->filemtime());
+        $this->assertEquals(303, $this->baz1->fileatime());
+    }
+
+    /**
+     * @test
+     * @group  issue_11
+     */
+    public function touchChangesAccessAndModificationTimeForDirectory()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        $this->assertTrue(touch($this->fooURL, 303, 313));
+        $this->assertEquals(303, $this->foo->filemtime());
+        $this->assertEquals(313, $this->foo->fileatime());
+    }
+
+    /**
+     * @test
+     * @group  issue_34
+     * @since  1.2.0
+     */
+    public function pathesAreCorrectlySet()
+    {
+        $this->assertEquals(vfsStream::path($this->fooURL), $this->foo->path());
+        $this->assertEquals(vfsStream::path($this->barURL), $this->bar->path());
+        $this->assertEquals(vfsStream::path($this->baz1URL), $this->baz1->path());
+        $this->assertEquals(vfsStream::path($this->baz2URL), $this->baz2->path());
+    }
+
+    /**
+     * @test
+     * @group  issue_34
+     * @since  1.2.0
+     */
+    public function urlsAreCorrectlySet()
+    {
+        $this->assertEquals($this->fooURL, $this->foo->url());
+        $this->assertEquals($this->barURL, $this->bar->url());
+        $this->assertEquals($this->baz1URL, $this->baz1->url());
+        $this->assertEquals($this->baz2URL, $this->baz2->url());
+    }
+
+    /**
+     * @test
+     * @group  issue_34
+     * @since  1.2.0
+     */
+    public function pathIsUpdatedAfterMove()
+    {
+        // move foo/bar/baz1 to foo/baz3
+        $baz3URL = vfsStream::url('foo/baz3');
+        $this->assertTrue(rename($this->baz1URL, $baz3URL));
+        $this->assertEquals(vfsStream::path($baz3URL), $this->baz1->path());
+    }
+
+    /**
+     * @test
+     * @group  issue_34
+     * @since  1.2.0
+     */
+    public function urlIsUpdatedAfterMove()
+    {
+        // move foo/bar/baz1 to foo/baz3
+        $baz3URL = vfsStream::url('foo/baz3');
+        $this->assertTrue(rename($this->baz1URL, $baz3URL));
+        $this->assertEquals($baz3URL, $this->baz1->url());
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperWithoutRootTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperWithoutRootTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b0306643912e013a4c52446c77c8eabe0e67097
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperWithoutRootTestCase.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ */
+class vfsStreamWrapperWithoutRootTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        vfsStreamWrapper::register();
+    }
+
+    /**
+     * no root > no directory to open
+     *
+     * @test
+     */
+    public function canNotOpenDirectory()
+    {
+        $this->assertFalse(@dir(vfsStream::url('foo')));
+    }
+
+    /**
+     * can not unlink without root
+     *
+     * @test
+     */
+    public function canNotUnlink()
+    {
+        $this->assertFalse(@unlink(vfsStream::url('foo')));
+    }
+
+    /**
+     * can not open a file without root
+     *
+     * @test
+     */
+    public function canNotOpen()
+    {
+        $this->assertFalse(@fopen(vfsStream::url('foo')));
+    }
+
+    /**
+     * can not rename a file without root
+     *
+     * @test
+     */
+    public function canNotRename()
+    {
+        $this->assertFalse(@rename(vfsStream::url('foo'), vfsStream::url('bar')));
+    }
+}
+?>
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamZipTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamZipTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..45114c230594bb2818cca6d7a4a570dd096b149c
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamZipTestCase.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper in conjunction with ext/zip.
+ *
+ * @group  zip
+ */
+class vfsStreamZipTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        if (extension_loaded('zip') === false) {
+            $this->markTestSkipped('No ext/zip installed, skipping test.');
+        }
+
+        $this->markTestSkipped('Zip extension can not work with vfsStream urls.');
+
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(vfsStream::newDirectory('root'));
+
+    }
+
+    /**
+     * @test
+     */
+    public function createZipArchive()
+    {
+        $zip = new ZipArchive();
+        $this->assertTrue($zip->open(vfsStream::url('root/test.zip'), ZIPARCHIVE::CREATE));
+        $this->assertTrue($zip->addFromString("testfile1.txt", "#1 This is a test string added as testfile1.txt.\n"));
+        $this->assertTrue($zip->addFromString("testfile2.txt", "#2 This is a test string added as testfile2.txt.\n"));
+        $zip->setArchiveComment('a test');
+        var_dump($zip);
+        $this->assertTrue($zip->close());
+        var_dump($zip->getStatusString());
+        var_dump($zip->close());
+        var_dump($zip->getStatusString());
+        var_dump($zip);
+        var_dump(file_exists(vfsStream::url('root/test.zip')));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitorTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitorTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc8eb7d5571cdac2e798c737a98ae4ad186475a0
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitorTestCase.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\visitor;
+use org\bovigo\vfs\vfsStreamDirectory;
+use org\bovigo\vfs\vfsStreamFile;
+/**
+ * Test for org\bovigo\vfs\visitor\vfsStreamAbstractVisitor.
+ *
+ * @since  0.10.0
+ * @see    https://github.com/mikey179/vfsStream/issues/10
+ * @group  issue_10
+ */
+class vfsStreamAbstractVisitorTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * instance to test
+     *
+     * @var  vfsStreamAbstractVisitor
+     */
+    protected $abstractVisitor;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->abstractVisitor = $this->getMock('org\\bovigo\\vfs\\visitor\\vfsStreamAbstractVisitor',
+                                                array('visitFile', 'visitDirectory')
+                                 );
+    }
+
+    /**
+     * @test
+     * @expectedException  \InvalidArgumentException
+     */
+    public function visitThrowsInvalidArgumentExceptionOnUnknownContentType()
+    {
+        $mockContent = $this->getMock('org\\bovigo\\vfs\\vfsStreamContent');
+        $mockContent->expects($this->any())
+                    ->method('getType')
+                    ->will($this->returnValue('invalid'));
+        $this->assertSame($this->abstractVisitor,
+                          $this->abstractVisitor->visit($mockContent)
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function visitWithFileCallsVisitFile()
+    {
+        $file = new vfsStreamFile('foo.txt');
+        $this->abstractVisitor->expects($this->once())
+                              ->method('visitFile')
+                              ->with($this->equalTo($file));
+        $this->assertSame($this->abstractVisitor,
+                          $this->abstractVisitor->visit($file)
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function visitWithDirectoryCallsVisitDirectory()
+    {
+        $dir = new vfsStreamDirectory('bar');
+        $this->abstractVisitor->expects($this->once())
+                              ->method('visitDirectory')
+                              ->with($this->equalTo($dir));
+        $this->assertSame($this->abstractVisitor,
+                          $this->abstractVisitor->visit($dir)
+        );
+    }
+}
+?>
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitorTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitorTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..f0a5fe851a9ff7ed8c1d3234816d5fcd311fc6b3
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitorTestCase.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\visitor;
+use org\bovigo\vfs\vfsStream;
+use org\bovigo\vfs\vfsStreamDirectory;
+use org\bovigo\vfs\vfsStreamFile;
+/**
+ * Test for org\bovigo\vfs\visitor\vfsStreamPrintVisitor.
+ *
+ * @since  0.10.0
+ * @see    https://github.com/mikey179/vfsStream/issues/10
+ * @group  issue_10
+ */
+class vfsStreamPrintVisitorTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @test
+     * @expectedException  \InvalidArgumentException
+     */
+    public function constructWithNonResourceThrowsInvalidArgumentException()
+    {
+        new vfsStreamPrintVisitor('invalid');
+    }
+
+    /**
+     * @test
+     * @expectedException  \InvalidArgumentException
+     */
+    public function constructWithNonStreamResourceThrowsInvalidArgumentException()
+    {
+        new vfsStreamPrintVisitor(xml_parser_create());
+    }
+
+    /**
+     * @test
+     */
+    public function visitFileWritesFileNameToStream()
+    {
+        $output       = vfsStream::newFile('foo.txt')
+                                       ->at(vfsStream::setup());
+        $printVisitor = new vfsStreamPrintVisitor(fopen('vfs://root/foo.txt', 'wb'));
+        $this->assertSame($printVisitor,
+                          $printVisitor->visitFile(vfsStream::newFile('bar.txt'))
+        );
+        $this->assertEquals("- bar.txt\n", $output->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function visitDirectoryWritesDirectoryNameToStream()
+    {
+        $output       = vfsStream::newFile('foo.txt')
+                                       ->at(vfsStream::setup());
+        $printVisitor = new vfsStreamPrintVisitor(fopen('vfs://root/foo.txt', 'wb'));
+        $this->assertSame($printVisitor,
+                          $printVisitor->visitDirectory(vfsStream::newDirectory('baz'))
+        );
+        $this->assertEquals("- baz\n", $output->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function visitRecursiveDirectoryStructure()
+    {
+        $root         = vfsStream::setup('root',
+                                         null,
+                                         array('test' => array('foo'     => array('test.txt' => 'hello'),
+                                                               'baz.txt' => 'world'
+                                                           ),
+                                               'foo.txt' => ''
+                                         )
+                        );
+        $printVisitor = new vfsStreamPrintVisitor(fopen('vfs://root/foo.txt', 'wb'));
+        $this->assertSame($printVisitor,
+                          $printVisitor->visitDirectory($root)
+        );
+        $this->assertEquals("- root\n  - test\n    - foo\n      - test.txt\n    - baz.txt\n  - foo.txt\n", file_get_contents('vfs://root/foo.txt'));
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitorTestCase.php b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitorTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..633b1a9e032f12e591704b0fcc0b9018d4cbff44
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitorTestCase.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\visitor;
+use org\bovigo\vfs\vfsStream;
+/**
+ * Test for org\bovigo\vfs\visitor\vfsStreamStructureVisitor.
+ *
+ * @since  0.10.0
+ * @see    https://github.com/mikey179/vfsStream/issues/10
+ * @group  issue_10
+ */
+class vfsStreamStructureVisitorTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @test
+     */
+    public function visitFileCreatesStructureForFile()
+    {
+        $structureVisitor = new vfsStreamStructureVisitor();
+        $this->assertEquals(array('foo.txt' => 'test'),
+                            $structureVisitor->visitFile(vfsStream::newFile('foo.txt')
+                                                                  ->withContent('test')
+                                               )
+                                             ->getStructure()
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function visitDirectoryCreatesStructureForDirectory()
+    {
+        $structureVisitor = new vfsStreamStructureVisitor();
+        $this->assertEquals(array('baz' => array()),
+                            $structureVisitor->visitDirectory(vfsStream::newDirectory('baz'))
+                                             ->getStructure()
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function visitRecursiveDirectoryStructure()
+    {
+        $root         = vfsStream::setup('root',
+                                         null,
+                                         array('test' => array('foo'     => array('test.txt' => 'hello'),
+                                                               'baz.txt' => 'world'
+                                                         ),
+                                               'foo.txt' => ''
+                                         )
+                        );
+        $structureVisitor = new vfsStreamStructureVisitor();
+        $this->assertEquals(array('root' => array('test' => array('foo'     => array('test.txt' => 'hello'),
+                                                                  'baz.txt' => 'world'
+                                                                               ),
+                                                                  'foo.txt' => ''
+                                            ),
+                            ),
+                            $structureVisitor->visitDirectory($root)
+                                             ->getStructure()
+        );
+    }
+}
+?>
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/emptyFolder/.gitignore b/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/emptyFolder/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/aFile.txt b/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/aFile.txt
new file mode 100644
index 0000000000000000000000000000000000000000..19102815663d23f8b75a47e7a01965dcdc96468c
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/aFile.txt
@@ -0,0 +1 @@
+foo
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/subfolder1/file1.txt b/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/subfolder1/file1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f6ea0495187600e7b2288c8ac19c5886383a4632
--- /dev/null
+++ b/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/subfolder1/file1.txt
@@ -0,0 +1 @@
+foobar
\ No newline at end of file
diff --git a/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/subfolder2/.gitignore b/core/vendor/mikey179/vfsStream/src/test/resources/filesystemcopy/withSubfolders/subfolder2/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/core/vendor/phpdocumentor/reflection-docblock/.gitignore b/core/vendor/phpdocumentor/reflection-docblock/.gitignore
index 3ce5adbbde5536c3d923b26fb03652d0fa05ba3a..331c58f735c3eb5307c6cfae14189708fd5e3d5a 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/.gitignore
+++ b/core/vendor/phpdocumentor/reflection-docblock/.gitignore
@@ -1,2 +1,2 @@
 .idea
-vendor
+vendor
\ No newline at end of file
diff --git a/core/vendor/phpdocumentor/reflection-docblock/.travis.yml b/core/vendor/phpdocumentor/reflection-docblock/.travis.yml
index eef782c423cb41c00149cc9b48b2c47536183f4c..a2e002affb1ee4262c6a2225bbcfd2b91c4fc555 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/.travis.yml
+++ b/core/vendor/phpdocumentor/reflection-docblock/.travis.yml
@@ -4,14 +4,6 @@ php:
   - 5.3
   - 5.4
   - 5.5
-  - 5.6
-  - hhvm
-  - hhvm-nightly
-
-matrix:
-    allow_failures:
-        - php: hhvm
-        - php: hhvm-nightly
 
 script:
  - vendor/bin/phpunit
@@ -20,9 +12,9 @@ before_script:
  - sudo apt-get -qq update > /dev/null
  - phpenv rehash > /dev/null
  - composer selfupdate --quiet
- - composer install --no-interaction --prefer-source --dev
+ - composer install --dev --prefer-source
  - vendor/bin/phpunit
- - composer update --no-interaction --prefer-source --dev
+ - composer update --dev --prefer-source
 
 notifications:
   irc: "irc.freenode.org#phpdocumentor"
diff --git a/core/vendor/phpdocumentor/reflection-docblock/LICENSE b/core/vendor/phpdocumentor/reflection-docblock/LICENSE
deleted file mode 100644
index 792e4040f26f0347b3beb069d6ea070e6ae14a69..0000000000000000000000000000000000000000
--- a/core/vendor/phpdocumentor/reflection-docblock/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2010 Mike van Riel
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/core/vendor/phpdocumentor/reflection-docblock/composer.json b/core/vendor/phpdocumentor/reflection-docblock/composer.json
index 4dffa22d65ef06ec6c4002e7b0cbcd722b053715..ad118caf9ea44bafe903a2658817f762ad2eeefd 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/composer.json
+++ b/core/vendor/phpdocumentor/reflection-docblock/composer.json
@@ -6,17 +6,14 @@
         {"name": "Mike van Riel", "email": "mike.vanriel@naenius.com"}
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.3",
+        "dflydev/markdown": "1.0.*"
     },
     "autoload": {
         "psr-0": {"phpDocumentor": ["src/"]}
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.0"
-    },
-    "suggest": {
-        "dflydev/markdown": "~1.0",
-        "erusev/parsedown": "~1.0"
+        "phpunit/phpunit": "3.7.*@stable"
     },
     "extra": {
         "branch-alias": {
diff --git a/core/vendor/phpdocumentor/reflection-docblock/composer.lock b/core/vendor/phpdocumentor/reflection-docblock/composer.lock
index 4c6a8bb78b2cdd02f559a438494c48df79090cfd..b70f57fc40d5c14248fd712d958b7f835f8b0fc9 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/composer.lock
+++ b/core/vendor/phpdocumentor/reflection-docblock/composer.lock
@@ -1,165 +1,93 @@
 {
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
-        "This file is @generated automatically"
-    ],
-    "hash": "ea1734d11b8c878445c2c6e58de8b85f",
-    "packages": [],
-    "packages-dev": [
+    "hash": "c6115c20a4a284f6ca14e676e788b4d3",
+    "packages": [
         {
-            "name": "ocramius/instantiator",
-            "version": "1.1.2",
+            "name": "dflydev/markdown",
+            "version": "v1.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Ocramius/Instantiator.git",
-                "reference": "a7abbb5fc9df6e7126af741dd6c140d1a7369435"
+                "url": "https://github.com/dflydev/dflydev-markdown.git",
+                "reference": "v1.0.2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Ocramius/Instantiator/zipball/a7abbb5fc9df6e7126af741dd6c140d1a7369435",
-                "reference": "a7abbb5fc9df6e7126af741dd6c140d1a7369435",
+                "url": "https://github.com/dflydev/dflydev-markdown/zipball/v1.0.2",
+                "reference": "v1.0.2",
                 "shasum": ""
             },
             "require": {
-                "ocramius/lazy-map": "1.0.*",
-                "php": "~5.3"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "2.0.*@ALPHA"
+                "php": ">=5.3"
             },
+            "time": "2012-01-15 19:36:37",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
+            "installation-source": "dist",
             "autoload": {
                 "psr-0": {
-                    "Instantiator\\": "src"
+                    "dflydev\\markdown": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "New BSD License"
             ],
             "authors": [
                 {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/Ocramius/Instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2014-08-14 15:10:55"
-        },
-        {
-            "name": "ocramius/lazy-map",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Ocramius/LazyMap.git",
-                "reference": "7fe3d347f5e618bcea7d39345ff83f3651d8b752"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Ocramius/LazyMap/zipball/7fe3d347f5e618bcea7d39345ff83f3651d8b752",
-                "reference": "7fe3d347f5e618bcea7d39345ff83f3651d8b752",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.6",
-                "phpmd/phpmd": "1.5.*",
-                "phpunit/phpunit": ">=3.7",
-                "satooshi/php-coveralls": "~0.6",
-                "squizlabs/php_codesniffer": "1.4.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "LazyMap\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Michel Fortin",
+                    "homepage": "http://michelf.com"
+                },
                 {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/",
-                    "role": "Developer"
+                    "name": "John Gruber",
+                    "homepage": "http://daringfireball.net"
                 }
             ],
-            "description": "A library that provides lazy instantiation logic for a map of objects",
-            "homepage": "https://github.com/Ocramius/LazyMap",
+            "description": "PHP Markdown & Extra",
+            "homepage": "http://github.com/dflydev/dflydev-markdown",
             "keywords": [
-                "lazy",
-                "lazy instantiation",
-                "lazy loading",
-                "map",
-                "service location"
-            ],
-            "time": "2013-11-09 22:30:54"
-        },
+                "markdown"
+            ]
+        }
+    ],
+    "packages-dev": [
         {
             "name": "phpunit/php-code-coverage",
-            "version": "2.0.10",
+            "version": "1.2.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "6d196af48e8c100a3ae881940123e693da5a9217"
+                "url": "git://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "1.2.7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6d196af48e8c100a3ae881940123e693da5a9217",
-                "reference": "6d196af48e8c100a3ae881940123e693da5a9217",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage/archive/1.2.7.zip",
+                "reference": "1.2.7",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3",
-                "phpunit/php-file-iterator": "~1.3.1",
-                "phpunit/php-text-template": "~1.2.0",
-                "phpunit/php-token-stream": "~1.2.2",
-                "sebastian/environment": "~1.0.0",
-                "sebastian/version": "~1.0.3"
-            },
-            "require-dev": {
-                "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4.0.14"
+                "phpunit/php-file-iterator": ">=1.3.0@stable",
+                "phpunit/php-token-stream": ">=1.1.3@stable",
+                "phpunit/php-text-template": ">=1.1.1@stable"
             },
             "suggest": {
                 "ext-dom": "*",
-                "ext-xdebug": ">=2.2.1",
-                "ext-xmlwriter": "*"
+                "ext-xdebug": ">=2.0.5"
             },
+            "time": "2012-12-02 14:54:55",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
+            "installation-source": "dist",
             "autoload": {
                 "classmap": [
-                    "src/"
+                    "PHP/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -179,30 +107,31 @@
             "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
             "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
             "keywords": [
-                "coverage",
                 "testing",
+                "coverage",
                 "xunit"
-            ],
-            "time": "2014-08-06 06:39:42"
+            ]
         },
         {
             "name": "phpunit/php-file-iterator",
-            "version": "1.3.4",
+            "version": "1.3.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb"
+                "url": "git://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "1.3.3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb",
-                "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator/zipball/1.3.3",
+                "reference": "1.3.3",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "time": "2012-10-11 04:44:38",
             "type": "library",
+            "installation-source": "dist",
             "autoload": {
                 "classmap": [
                     "File/"
@@ -223,31 +152,32 @@
                 }
             ],
             "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "homepage": "http://www.phpunit.de/",
             "keywords": [
                 "filesystem",
                 "iterator"
-            ],
-            "time": "2013-10-10 15:34:57"
+            ]
         },
         {
             "name": "phpunit/php-text-template",
-            "version": "1.2.0",
+            "version": "1.1.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
+                "url": "git://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "1.1.4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
-                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+                "url": "https://github.com/sebastianbergmann/php-text-template/zipball/1.1.4",
+                "reference": "1.1.4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "time": "2012-10-31 11:15:28",
             "type": "library",
+            "installation-source": "dist",
             "autoload": {
                 "classmap": [
                     "Text/"
@@ -271,27 +201,28 @@
             "homepage": "https://github.com/sebastianbergmann/php-text-template/",
             "keywords": [
                 "template"
-            ],
-            "time": "2014-01-30 17:20:04"
+            ]
         },
         {
             "name": "phpunit/php-timer",
-            "version": "1.0.5",
+            "version": "1.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
+                "url": "git://github.com/sebastianbergmann/php-timer.git",
+                "reference": "1.0.4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
-                "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+                "url": "https://github.com/sebastianbergmann/php-timer/zipball/1.0.4",
+                "reference": "1.0.4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "time": "2012-10-11 04:45:58",
             "type": "library",
+            "installation-source": "dist",
             "autoload": {
                 "classmap": [
                     "PHP/"
@@ -312,36 +243,32 @@
                 }
             ],
             "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "homepage": "http://www.phpunit.de/",
             "keywords": [
                 "timer"
-            ],
-            "time": "2013-08-02 07:42:54"
+            ]
         },
         {
             "name": "phpunit/php-token-stream",
-            "version": "1.2.2",
+            "version": "1.1.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32"
+                "url": "git://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "1.1.5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32",
-                "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32",
+                "url": "https://github.com/sebastianbergmann/php-token-stream/zipball/1.1.5",
+                "reference": "1.1.5",
                 "shasum": ""
             },
             "require": {
                 "ext-tokenizer": "*",
                 "php": ">=5.3.3"
             },
+            "time": "2012-10-11 04:47:14",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2-dev"
-                }
-            },
+            "installation-source": "dist",
             "autoload": {
                 "classmap": [
                     "PHP/"
@@ -362,60 +289,58 @@
                 }
             ],
             "description": "Wrapper around PHP's tokenizer extension.",
-            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "homepage": "http://www.phpunit.de/",
             "keywords": [
                 "tokenizer"
-            ],
-            "time": "2014-03-03 05:10:30"
+            ]
         },
         {
             "name": "phpunit/phpunit",
-            "version": "4.2.2",
+            "version": "3.7.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "a33fa68ece9f8c68589bfc2da8d2794e27b820bc"
+                "url": "git://github.com/sebastianbergmann/phpunit.git",
+                "reference": "3.7.10"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a33fa68ece9f8c68589bfc2da8d2794e27b820bc",
-                "reference": "a33fa68ece9f8c68589bfc2da8d2794e27b820bc",
+                "url": "https://github.com/sebastianbergmann/phpunit/archive/3.7.10.zip",
+                "reference": "3.7.10",
                 "shasum": ""
             },
             "require": {
+                "php": ">=5.3.3",
+                "phpunit/php-file-iterator": ">=1.3.1",
+                "phpunit/php-text-template": ">=1.1.1",
+                "phpunit/php-code-coverage": ">=1.2.1",
+                "phpunit/php-timer": ">=1.0.2",
+                "phpunit/phpunit-mock-objects": ">=1.2.0,<1.3.0",
+                "symfony/yaml": ">=2.1.0",
                 "ext-dom": "*",
-                "ext-json": "*",
                 "ext-pcre": "*",
                 "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=5.3.3",
-                "phpunit/php-code-coverage": "~2.0",
-                "phpunit/php-file-iterator": "~1.3.1",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-timer": "~1.0.2",
-                "phpunit/phpunit-mock-objects": "~2.2",
-                "sebastian/comparator": "~1.0",
-                "sebastian/diff": "~1.1",
-                "sebastian/environment": "~1.0",
-                "sebastian/exporter": "~1.0",
-                "sebastian/version": "~1.0",
-                "symfony/yaml": "~2.0"
+                "ext-spl": "*"
             },
             "suggest": {
-                "phpunit/php-invoker": "~1.1"
+                "phpunit/php-invoker": ">=1.1.0",
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*"
             },
+            "time": "2012-12-02 14:56:55",
             "bin": [
-                "phpunit"
+                "composer/bin/phpunit"
             ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2.x-dev"
+                    "dev-master": "3.7.x-dev"
                 }
             },
+            "installation-source": "dist",
             "autoload": {
                 "classmap": [
-                    "src/"
+                    "PHPUnit/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -436,46 +361,38 @@
             "description": "The PHP Unit Testing framework.",
             "homepage": "http://www.phpunit.de/",
             "keywords": [
-                "phpunit",
                 "testing",
+                "phpunit",
                 "xunit"
-            ],
-            "time": "2014-08-18 05:12:30"
+            ]
         },
         {
             "name": "phpunit/phpunit-mock-objects",
-            "version": "2.2.0",
+            "version": "1.2.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "42e589e08bc86e3e9bdf20d385e948347788505b"
+                "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "1.2.2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/42e589e08bc86e3e9bdf20d385e948347788505b",
-                "reference": "42e589e08bc86e3e9bdf20d385e948347788505b",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.2.zip",
+                "reference": "1.2.2",
                 "shasum": ""
             },
             "require": {
-                "ocramius/instantiator": "~1.0",
                 "php": ">=5.3.3",
-                "phpunit/php-text-template": "~1.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "4.2.*@dev"
+                "phpunit/php-text-template": ">=1.1.1@stable"
             },
             "suggest": {
                 "ext-soap": "*"
             },
+            "time": "2012-11-05 10:39:13",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.2.x-dev"
-                }
-            },
+            "installation-source": "dist",
             "autoload": {
                 "classmap": [
-                    "src/"
+                    "PHPUnit/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -497,304 +414,37 @@
             "keywords": [
                 "mock",
                 "xunit"
-            ],
-            "time": "2014-08-02 13:50:58"
-        },
-        {
-            "name": "sebastian/comparator",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "f7069ee51fa9fb6c038e16a9d0e3439f5449dcf2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/f7069ee51fa9fb6c038e16a9d0e3439f5449dcf2",
-                "reference": "f7069ee51fa9fb6c038e16a9d0e3439f5449dcf2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "sebastian/diff": "~1.1",
-                "sebastian/exporter": "~1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                },
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                }
-            ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "http://www.github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
-            "time": "2014-05-02 07:05:58"
-        },
-        {
-            "name": "sebastian/diff",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "1e091702a5a38e6b4c1ba9ca816e3dd343df2e2d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e091702a5a38e6b4c1ba9ca816e3dd343df2e2d",
-                "reference": "1e091702a5a38e6b4c1ba9ca816e3dd343df2e2d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                },
-                {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
-                }
-            ],
-            "description": "Diff implementation",
-            "homepage": "http://www.github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff"
-            ],
-            "time": "2013-08-03 16:46:33"
-        },
-        {
-            "name": "sebastian/environment",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "79517609ec01139cd7e9fded0dd7ce08c952ef6a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/79517609ec01139cd7e9fded0dd7ce08c952ef6a",
-                "reference": "79517609ec01139cd7e9fded0dd7ce08c952ef6a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "4.0.*@dev"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "time": "2014-02-18 16:17:19"
-        },
-        {
-            "name": "sebastian/exporter",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529",
-                "reference": "1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "4.0.*@dev"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                },
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net",
-                    "role": "Lead"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                }
-            ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2014-02-16 08:26:31"
-        },
-        {
-            "name": "sebastian/version",
-            "version": "1.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43",
-                "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43",
-                "shasum": ""
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2014-03-07 15:35:33"
+            ]
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.5.3",
+            "version": "v2.1.4",
             "target-dir": "Symfony/Component/Yaml",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/Yaml.git",
-                "reference": "5a75366ae9ca8b4792cd0083e4ca4dff9fe96f1f"
+                "url": "https://github.com/symfony/Yaml",
+                "reference": "v2.1.4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/5a75366ae9ca8b4792cd0083e4ca4dff9fe96f1f",
-                "reference": "5a75366ae9ca8b4792cd0083e4ca4dff9fe96f1f",
+                "url": "https://github.com/symfony/Yaml/archive/v2.1.4.zip",
+                "reference": "v2.1.4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "time": "2012-11-08 09:51:48",
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.1-dev"
                 }
             },
+            "installation-source": "dist",
             "autoload": {
                 "psr-0": {
-                    "Symfony\\Component\\Yaml\\": ""
+                    "Symfony\\Component\\Yaml": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -803,25 +453,23 @@
             ],
             "authors": [
                 {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                },
-                {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
                 }
             ],
             "description": "Symfony Yaml Component",
-            "homepage": "http://symfony.com",
-            "time": "2014-08-05 09:00:40"
+            "homepage": "http://symfony.com"
         }
     ],
-    "aliases": [],
+    "aliases": [
+
+    ],
     "minimum-stability": "stable",
-    "stability-flags": [],
-    "prefer-stable": false,
-    "platform": {
-        "php": ">=5.3.3"
-    },
-    "platform-dev": []
+    "stability-flags": {
+        "phpunit/phpunit": 0
+    }
 }
diff --git a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php
index 02968b1637bc4a20466a6927da3c3f2e96661177..b5b165cc9bc4523ea50a0f38c4c7bc8a9c762a55 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php
+++ b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php
@@ -46,12 +46,6 @@ class DocBlock implements \Reflector
     /** @var Location Information about the location of this DocBlock. */
     protected $location = null;
 
-    /** @var bool Is this DocBlock (the start of) a template? */
-    protected $isTemplateStart = false;
-
-    /** @var bool Does this DocBlock signify the end of a DocBlock template? */
-    protected $isTemplateEnd = false;
-
     /**
      * Parses the given docblock and populates the member fields.
      *
@@ -87,9 +81,7 @@ public function __construct(
 
         $docblock = $this->cleanInput($docblock);
 
-        list($templateMarker, $short, $long, $tags) = $this->splitDocBlock($docblock);
-        $this->isTemplateStart = $templateMarker === '#@+';
-        $this->isTemplateEnd = $templateMarker === '#@-';
+        list($short, $long, $tags) = $this->splitDocBlock($docblock);
         $this->short_description = $short;
         $this->long_description = new DocBlock\Description($long, $this);
         $this->parseTags($tags);
@@ -127,86 +119,74 @@ protected function cleanInput($comment)
     }
 
     /**
-     * Splits the DocBlock into a template marker, summary, description and block of tags.
+     * Splits the DocBlock into a short description, long description and
+     * block of tags.
      *
      * @param string $comment Comment to split into the sub-parts.
      *
-     * @author Richard van Velzen (@_richardJ) Special thanks to Richard for the regex responsible for the split.
-     * @author Mike van Riel <me@mikevanriel.com> for extending the regex with template marker support.
+     * @author RichardJ Special thanks to RichardJ for the regex responsible
+     *     for the split.
      *
-     * @return string[] containing the template marker (if any), summary, description and a string containing the tags.
+     * @return string[] containing the short-, long description and an element
+     *     containing the tags.
      */
     protected function splitDocBlock($comment)
     {
-        // Performance improvement cheat: if the first character is an @ then only tags are in this DocBlock. This
-        // method does not split tags so we return this verbatim as the fourth result (tags). This saves us the
-        // performance impact of running a regular expression
         if (strpos($comment, '@') === 0) {
-            return array('', '', '', $comment);
+            $matches = array('', '', $comment);
+        } else {
+            // clears all extra horizontal whitespace from the line endings
+            // to prevent parsing issues
+            $comment = preg_replace('/\h*$/Sum', '', $comment);
+
+            /*
+             * Splits the docblock into a short description, long description and
+             * tags section
+             * - The short description is started from the first character until
+             *   a dot is encountered followed by a newline OR
+             *   two consecutive newlines (horizontal whitespace is taken into
+             *   account to consider spacing errors)
+             * - The long description, any character until a new line is
+             *   encountered followed by an @ and word characters (a tag).
+             *   This is optional.
+             * - Tags; the remaining characters
+             *
+             * Big thanks to RichardJ for contributing this Regular Expression
+             */
+            preg_match(
+                '/
+        \A (
+          [^\n.]+
+          (?:
+            (?! \. \n | \n{2} ) # disallow the first seperator here
+            [\n.] (?! [ \t]* @\pL ) # disallow second seperator
+            [^\n.]+
+          )*
+          \.?
+        )
+        (?:
+          \s* # first seperator (actually newlines but it\'s all whitespace)
+          (?! @\pL ) # disallow the rest, to make sure this one doesn\'t match,
+          #if it doesn\'t exist
+          (
+            [^\n]+
+            (?: \n+
+              (?! [ \t]* @\pL ) # disallow second seperator (@param)
+              [^\n]+
+            )*
+          )
+        )?
+        (\s+ [\s\S]*)? # everything that follows
+        /ux',
+                $comment,
+                $matches
+            );
+            array_shift($matches);
         }
 
-        // clears all extra horizontal whitespace from the line endings to prevent parsing issues
-        $comment = preg_replace('/\h*$/Sum', '', $comment);
-
-        /*
-         * Splits the docblock into a template marker, short description, long description and tags section
-         *
-         * - The template marker is empty, #@+ or #@- if the DocBlock starts with either of those (a newline may
-         *   occur after it and will be stripped).
-         * - The short description is started from the first character until a dot is encountered followed by a
-         *   newline OR two consecutive newlines (horizontal whitespace is taken into account to consider spacing
-         *   errors). This is optional.
-         * - The long description, any character until a new line is encountered followed by an @ and word
-         *   characters (a tag). This is optional.
-         * - Tags; the remaining characters
-         *
-         * Big thanks to RichardJ for contributing this Regular Expression
-         */
-        preg_match(
-            '/
-            \A
-            # 1. Extract the template marker
-            (?:(\#\@\+|\#\@\-)\n?)?
-
-            # 2. Extract the summary
-            (?:
-              (?! @\pL ) # The summary may not start with an @
-              (
-                [^\n.]+
-                (?:
-                  (?! \. \n | \n{2} )     # End summary upon a dot followed by newline or two newlines
-                  [\n.] (?! [ \t]* @\pL ) # End summary when an @ is found as first character on a new line
-                  [^\n.]+                 # Include anything else
-                )*
-                \.?
-              )?
-            )
-
-            # 3. Extract the description
-            (?:
-              \s*        # Some form of whitespace _must_ precede a description because a summary must be there
-              (?! @\pL ) # The description may not start with an @
-              (
-                [^\n]+
-                (?: \n+
-                  (?! [ \t]* @\pL ) # End description when an @ is found as first character on a new line
-                  [^\n]+            # Include anything else
-                )*
-              )
-            )?
-
-            # 4. Extract the tags (anything that follows)
-            (\s+ [\s\S]*)? # everything that follows
-            /ux',
-            $comment,
-            $matches
-        );
-        array_shift($matches);
-
-        while (count($matches) < 4) {
+        while (count($matches) < 3) {
             $matches[] = '';
         }
-
         return $matches;
     }
 
@@ -229,16 +209,20 @@ protected function parseTags($tags)
                 );
             }
             foreach (explode("\n", $tags) as $tag_line) {
+                if (trim($tag_line) === '') {
+                    continue;
+                }
+
                 if (isset($tag_line[0]) && ($tag_line[0] === '@')) {
                     $result[] = $tag_line;
                 } else {
-                    $result[count($result) - 1] .= "\n" . $tag_line;
+                    $result[count($result) - 1] .= PHP_EOL . $tag_line;
                 }
             }
 
             // create proper Tag objects
             foreach ($result as $key => $tag_line) {
-                $result[$key] = Tag::createInstance(trim($tag_line), $this);
+                $result[$key] = Tag::createInstance($tag_line, $this);
             }
         }
 
@@ -277,7 +261,7 @@ public function getText()
      */
     public function setText($comment)
     {
-        list(,$short, $long) = $this->splitDocBlock($comment);
+        list($short, $long) = $this->splitDocBlock($comment);
         $this->short_description = $short;
         $this->long_description = new DocBlock\Description($long, $this);
         return $this;
@@ -303,44 +287,6 @@ public function getLongDescription()
     }
 
     /**
-     * Returns whether this DocBlock is the start of a Template section.
-     *
-     * A Docblock may serve as template for a series of subsequent DocBlocks. This is indicated by a special marker
-     * (`#@+`) that is appended directly after the opening `/**` of a DocBlock.
-     *
-     * An example of such an opening is:
-     *
-     * ```
-     * /**#@+
-     *  * My DocBlock
-     *  * /
-     * ```
-     *
-     * The description and tags (not the summary!) are copied onto all subsequent DocBlocks and also applied to all
-     * elements that follow until another DocBlock is found that contains the closing marker (`#@-`).
-     *
-     * @see self::isTemplateEnd() for the check whether a closing marker was provided.
-     *
-     * @return boolean
-     */
-    public function isTemplateStart()
-    {
-        return $this->isTemplateStart;
-    }
-
-    /**
-     * Returns whether this DocBlock is the end of a Template section.
-     *
-     * @see self::isTemplateStart() for a more complete description of the Docblock Template functionality.
-     *
-     * @return boolean
-     */
-    public function isTemplateEnd()
-    {
-        return $this->isTemplateEnd;
-    }
-
-    /**
      * Returns the current context.
      *
      * @return Context
diff --git a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php
index d41142e28ded886e65938e4680f8c0fd327ccd81..0d6def255fd42f10109758159fa02d234e565f9a 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php
+++ b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php
@@ -55,15 +55,15 @@ public function getContents()
 
     /**
      * Sets the text of this description.
-     *
+     * 
      * @param string $content The new text of this description.
-     *
+     * 
      * @return $this
      */
     public function setContent($content)
     {
         $this->contents = trim($content);
-
+        
         $this->parsedContents = null;
         return $this;
     }
@@ -140,7 +140,7 @@ public function getParsedContents()
      *
      * @todo this should become a more intelligent piece of code where the
      *     configuration contains a setting what format long descriptions are.
-     *
+     * 
      * @codeCoverageIgnore Will be removed soon, in favor of adapters at
      *     PhpDocumentor itself that will process text in various formats.
      *
@@ -161,10 +161,7 @@ public function getFormattedContents()
             );
         }
 
-        if (class_exists('Parsedown')) {
-            $markdown = \Parsedown::instance();
-            $result = $markdown->parse($result);
-        } elseif (class_exists('dflydev\markdown\MarkdownExtraParser')) {
+        if (class_exists('dflydev\markdown\MarkdownExtraParser')) {
             $markdown = new \dflydev\markdown\MarkdownExtraParser();
             $result = $markdown->transformMarkdown($result);
         }
@@ -174,7 +171,7 @@ public function getFormattedContents()
 
     /**
      * Gets the docblock this tag belongs to.
-     *
+     * 
      * @return DocBlock The docblock this description belongs to.
      */
     public function getDocBlock()
@@ -184,10 +181,10 @@ public function getDocBlock()
 
     /**
      * Sets the docblock this tag belongs to.
-     *
+     * 
      * @param DocBlock $docblock The new docblock this description belongs to.
      *     Setting NULL removes any association.
-     *
+     * 
      * @return $this
      */
     public function setDocBlock(DocBlock $docblock = null)
diff --git a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php
index 0e163ea01b994734c879cf7bf03fe3cfa1db7910..9173de4534e02b27396047f60aaa6e86cf167dcb 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php
+++ b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php
@@ -56,7 +56,7 @@ public function getContent()
                 $filePath = '"' . $this->filePath . '"';
             }
 
-            $this->content = $filePath . ' ' . parent::getContent();
+            $this->content = $filePath . ' ' . $this->getContent();
         }
 
         return $this->content;
diff --git a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php
index 7a5ce790821429de45a81d58bb696df497119491..3ceea2cc5067c8ecf2c385e5503f37ab87ddc016 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php
+++ b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php
@@ -114,6 +114,9 @@ public function setContent($content)
                 }
             }
             $this->parsedDescription = null;
+        } else {
+            echo date('c') . ' ERR (3): @method contained invalid contents: '
+                . $this->content . PHP_EOL;
         }
 
         return $this;
diff --git a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php
index 9bc0270dd9a7219d2b3d6ebefbbe1213bcbcadf9..f544a9b205120d5685e6ece7dfcb638dcad6e57c 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php
+++ b/core/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php
@@ -23,12 +23,11 @@
  */
 class ParamTag extends ReturnTag
 {
-    /** @var string */
+    /**
+     * @var string
+     */
     protected $variableName = '';
 
-    /** @var bool determines whether this is a variadic argument */
-    protected $isVariadic = false;
-
     /**
      * {@inheritdoc}
      */
@@ -62,18 +61,13 @@ public function setContent($content)
             array_shift($parts);
         }
 
-        // if the next item starts with a $ or ...$ it must be the variable name
+        // if the next item starts with a $ it must be the variable name
         if (isset($parts[0])
             && (strlen($parts[0]) > 0)
-            && ($parts[0][0] == '$' || substr($parts[0], 0, 4) === '...$')
+            && ($parts[0][0] == '$')
         ) {
             $this->variableName = array_shift($parts);
             array_shift($parts);
-
-            if (substr($this->variableName, 0, 3) === '...') {
-                $this->isVariadic = true;
-                $this->variableName = substr($this->variableName, 3);
-            }
         }
 
         $this->setDescription(implode('', $parts));
@@ -106,14 +100,4 @@ public function setVariableName($name)
         $this->content = null;
         return $this;
     }
-
-    /**
-     * Returns whether this tag is variadic.
-     *
-     * @return boolean
-     */
-    public function isVariadic()
-    {
-        return $this->isVariadic;
-    }
 }
diff --git a/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php b/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php
index efc3a15b5386d9820fcdcebff1187b98c8be85ed..0eacac6f900b599efb66a434dde4407ef42f6b6e 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php
+++ b/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php
@@ -72,11 +72,10 @@ public function testConstruct(
     public function getTestSignatures()
     {
         return array(
-            // TODO: Verify this case
-//            array(
-//                'foo',
-//                false, 'foo', '', false, 0, ''
-//            ),
+            array(
+                'foo',
+                false, 'foo', '', false, 0, ''
+            ),
             array(
                 'foo()',
                 true, 'foo', 'void', false, 0, ''
diff --git a/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php b/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php
index 30eedfc581993c267ff3d055cac1a6010f0d6ad2..41b03ed9aed6f993a041a5c232dd3f6f1fee3ed0 100644
--- a/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php
+++ b/core/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php
@@ -14,7 +14,6 @@
 
 use phpDocumentor\Reflection\DocBlock\Context;
 use phpDocumentor\Reflection\DocBlock\Location;
-use phpDocumentor\Reflection\DocBlock\Tag\ReturnTag;
 
 /**
  * Test class for phpDocumentor\Reflection\DocBlock
@@ -71,7 +70,7 @@ public function testConstruct()
 
     /**
      * @covers \phpDocumentor\Reflection\DocBlock::splitDocBlock
-     *
+     * 
      * @return void
      */
     public function testConstructWithTagsOnly()
@@ -92,41 +91,6 @@ public function testConstructWithTagsOnly()
     }
 
     /**
-     * @covers \phpDocumentor\Reflection\DocBlock::isTemplateStart
-     */
-    public function testIfStartOfTemplateIsDiscovered()
-    {
-        $fixture = <<<DOCBLOCK
-/**#@+
- * @see \MyClass
- * @return void
- */
-DOCBLOCK;
-        $object = new DocBlock($fixture);
-        $this->assertEquals('', $object->getShortDescription());
-        $this->assertEquals('', $object->getLongDescription()->getContents());
-        $this->assertCount(2, $object->getTags());
-        $this->assertTrue($object->hasTag('see'));
-        $this->assertTrue($object->hasTag('return'));
-        $this->assertFalse($object->hasTag('category'));
-        $this->assertTrue($object->isTemplateStart());
-    }
-
-    /**
-     * @covers \phpDocumentor\Reflection\DocBlock::isTemplateEnd
-     */
-    public function testIfEndOfTemplateIsDiscovered()
-    {
-        $fixture = <<<DOCBLOCK
-/**#@-*/
-DOCBLOCK;
-        $object = new DocBlock($fixture);
-        $this->assertEquals('', $object->getShortDescription());
-        $this->assertEquals('', $object->getLongDescription()->getContents());
-        $this->assertTrue($object->isTemplateEnd());
-    }
-
-    /**
      * @covers \phpDocumentor\Reflection\DocBlock::cleanInput
      * 
      * @return void
@@ -308,10 +272,7 @@ public function testParseMultilineTagWithLineBreaks()
  */
 DOCBLOCK;
         $object = new DocBlock($fixture);
-        $this->assertCount(1, $tags = $object->getTags());
-	    /** @var ReturnTag $tag */
-	    $tag = reset($tags);
-	    $this->assertEquals("Content on\n    multiple lines.\n\n    One more, after the break.", $tag->getDescription());
+        $this->assertCount(1, $object->getTags());
     }
 
     /**
diff --git a/core/vendor/phpspec/prophecy/.travis.yml b/core/vendor/phpspec/prophecy/.travis.yml
index 4a6930988d97f5162d47bbe952800d2cbbe07447..85f5870fb2fba2f74670c3b935a044fc15cbe3d5 100644
--- a/core/vendor/phpspec/prophecy/.travis.yml
+++ b/core/vendor/phpspec/prophecy/.travis.yml
@@ -2,8 +2,13 @@ language: php
 
 php: [5.3, 5.4, 5.5, hhvm, hhvm-nightly]
 
-sudo: false
-
-before_script: travis_retry composer install --no-interaction --prefer-source
+matrix:
+  allow_failures:
+    - php: hhvm
+    - php: hhvm-nightly
+
+before_script:
+  - composer self-update
+  - composer install --dev --prefer-source
 
 script: vendor/bin/phpspec run -fpretty -v
diff --git a/core/vendor/phpspec/prophecy/CHANGES.md b/core/vendor/phpspec/prophecy/CHANGES.md
index fe761da91097ef25a21bee71e4350794b2392f4a..e3e13c9b5d1ed35cc558e1ca1a12d2f08cbe49b6 100644
--- a/core/vendor/phpspec/prophecy/CHANGES.md
+++ b/core/vendor/phpspec/prophecy/CHANGES.md
@@ -1,18 +1,3 @@
-1.4.0 / 2015-03-27
-==================
-
-  * Fixed errors in return type phpdocs (thanks @sobit)
-  * Fixed stringifying of hash containing one value (thanks @avant1)
-  * Improved clarity of method call expectation exception (thanks @dantleech)
-  * Add ability to specify which argument is returned in willReturnArgument (thanks @coderbyheart)
-  * Add more information to MethodNotFound exceptions (thanks @ciaranmcnulty)
-  * Support for mocking classes with methods that return references (thanks @edsonmedina)
-  * Improved object comparison (thanks @whatthejeff)
-  * Adopted '^' in composer dependencies (thanks @GrahamCampbell)
-  * Fixed non-typehinted arguments being treated as optional (thanks @whatthejeff)
-  * Magic methods are now filtered for keywords (thanks @seagoj)
-  * More readable errors for failure when expecting single calls (thanks @dantleech)
-
 1.3.1 / 2014-11-17
 ==================
 
diff --git a/core/vendor/phpspec/prophecy/README.md b/core/vendor/phpspec/prophecy/README.md
index 639ffd067829657e40c10d6532bd826d12472936..f1c612dadc02a327ac52e95c722b56c665343dda 100644
--- a/core/vendor/phpspec/prophecy/README.md
+++ b/core/vendor/phpspec/prophecy/README.md
@@ -1,6 +1,6 @@
 # Prophecy
 
-[![Build Status](https://travis-ci.org/phpspec/prophecy.svg?branch=master)](https://travis-ci.org/phpspec/prophecy)
+[![Build Status](https://travis-ci.org/phpspec/prophecy.png?branch=master)](https://travis-ci.org/phpspec/prophecy)
 
 Prophecy is a highly opinionated yet very powerful and flexible PHP object mocking
 framework. Though initially it was created to fulfil phpspec2 needs, it is flexible
@@ -157,7 +157,7 @@ argument - `'123'` to always return `'value'`. But that's only for this
 promise, there's plenty others you can use:
 
 - `ReturnPromise` or `->willReturn(1)` - returns a value from a method call
-- `ReturnArgumentPromise` or `->willReturnArgument($index)` - returns the nth method argument from call
+- `ReturnArgumentPromise` or `->willReturnArgument()` - returns the first method argument from call
 - `ThrowPromise` or `->willThrow` - causes the method to throw specific exception
 - `CallbackPromise` or `->will($callback)` - gives you a quick way to define your own custom logic
 
@@ -187,17 +187,17 @@ you'll use promises for that:
 $user->getName()->willReturn(null);
 
 // For PHP 5.4
-$user->setName('everzet')->will(function () {
+$user->setName('everzet')->will(function() {
     $this->getName()->willReturn('everzet');
 });
 
 // For PHP 5.3
-$user->setName('everzet')->will(function ($args, $user) {
+$user->setName('everzet')->will(function($args, $user) {
     $user->getName()->willReturn('everzet');
 });
 
 // Or
-$user->setName('everzet')->will(function ($args) use ($user) {
+$user->setName('everzet')->will(function($args) use ($user) {
     $user->getName()->willReturn('everzet');
 });
 ```
@@ -238,7 +238,7 @@ That's why Prophecy comes bundled with a bunch of other tokens:
 - `IdenticalValueToken` or `Argument::is($value)` - checks that the argument is identical to a specific value
 - `ExactValueToken` or `Argument::exact($value)` - checks that the argument matches a specific value
 - `TypeToken` or `Argument::type($typeOrClass)` - checks that the argument matches a specific type or
-  classname
+  classname.
 - `ObjectStateToken` or `Argument::which($method, $value)` - checks that the argument method returns
   a specific value
 - `CallbackToken` or `Argument::that(callback)` - checks that the argument matches a custom callback
@@ -255,17 +255,17 @@ use Prophecy\Argument;
 $user->getName()->willReturn(null);
 
 // For PHP 5.4
-$user->setName(Argument::type('string'))->will(function ($args) {
+$user->setName(Argument::type('string'))->will(function($args) {
     $this->getName()->willReturn($args[0]);
 });
 
 // For PHP 5.3
-$user->setName(Argument::type('string'))->will(function ($args, $user) {
+$user->setName(Argument::type('string'))->will(function($args, $user) {
     $user->getName()->willReturn($args[0]);
 });
 
 // Or
-$user->setName(Argument::type('string'))->will(function ($args) use ($user) {
+$user->setName(Argument::type('string'))->will(function($args) use ($user) {
     $user->getName()->willReturn($args[0]);
 });
 ```
@@ -282,22 +282,21 @@ use Prophecy\Argument;
 $user->getName()->willReturn(null);
 
 // For PHP 5.4
-$user->setName(Argument::type('string'))->will(function ($args) {
+$user->setName(Argument::type('string'))->will(function($args) {
     $this->getName()->willReturn($args[0]);
 });
 
 // For PHP 5.3
-$user->setName(Argument::type('string'))->will(function ($args, $user) {
+$user->setName(Argument::type('string'))->will(function($args, $user) {
     $user->getName()->willReturn($args[0]);
 });
 
 // Or
-$user->setName(Argument::type('string'))->will(function ($args) use ($user) {
+$user->setName(Argument::type('string'))->will(function($args) use ($user) {
     $user->getName()->willReturn($args[0]);
 });
 
-$user->setName(Argument::any())->will(function () {
-});
+$user->setName(Argument::any())->will(function(){});
 ```
 
 Nothing. Your stub will continue behaving the way it did before. That's because of how
@@ -326,7 +325,7 @@ calling it on a stub.
 
 ### Mocks
 
-Now we know how to define doubles without behavior (dummies) and doubles with behavior, but
+Now we know how to define doubles without behavior (dummies) and doubles with behavior but
 no expectations (stubs). What's left is doubles for which we have some expectations. These
 are called mocks and in Prophecy they look almost exactly the same as stubs, except that
 they define *predictions* instead of *promises* on method prophecies:
diff --git a/core/vendor/phpspec/prophecy/composer.json b/core/vendor/phpspec/prophecy/composer.json
index 654aaadc583dcaf91c6720754cb5a3526b9a4a1c..5fc7ab26807c4864b8348b0d288264dae51b23d1 100644
--- a/core/vendor/phpspec/prophecy/composer.json
+++ b/core/vendor/phpspec/prophecy/composer.json
@@ -2,7 +2,7 @@
     "name":         "phpspec/prophecy",
     "description":  "Highly opinionated mocking framework for PHP 5.3+",
     "keywords":     ["Mock", "Stub", "Dummy", "Double", "Fake", "Spy"],
-    "homepage":     "https://github.com/phpspec/prophecy",
+    "homepage":     "http://phpspec.org",
     "type":         "library",
     "license":      "MIT",
     "authors":      [
@@ -18,8 +18,7 @@
     ],
     "require": {
         "phpdocumentor/reflection-docblock": "~2.0",
-        "sebastian/comparator":              "~1.1",
-        "doctrine/instantiator":             "^1.0.2"
+        "doctrine/instantiator":             "~1.0,>=1.0.2"
     },
 
     "require-dev": {
@@ -34,7 +33,7 @@
 
     "extra": {
         "branch-alias": {
-            "dev-master": "1.4.x-dev"
+            "dev-master": "1.2.x-dev"
         }
     }
 }
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php
index d96318e361867cb7754b21e9698ca2246f7efca3..9c271edc396e14f64864b1045f069de959c3ef9b 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php
@@ -3,7 +3,6 @@
 namespace spec\Prophecy\Argument;
 
 use PhpSpec\ObjectBehavior;
-use Prophecy\Argument\Token\TokenInterface;
 
 class ArgumentsWildcardSpec extends ObjectBehavior
 {
@@ -35,13 +34,6 @@ function it_generates_string_representation_from_all_tokens_imploded($token1, $t
         $this->__toString()->shouldReturn('token_1, token_2, token_3');
     }
 
-    function it_exposes_list_of_tokens(TokenInterface $token)
-    {
-        $this->beConstructedWith(array($token));
-
-        $this->getTokens()->shouldReturn(array($token));
-    }
-
     function it_returns_score_of_1_if_there_are_no_tokens_and_arguments()
     {
         $this->beConstructedWith(array());
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php
index 9e46e021f9eefb32ccc8d5965d9093a734248db2..272c0aea18b8808b0009733992b93787404a2049 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php
@@ -49,8 +49,9 @@ function it_does_not_scores_if_value_is_not_equal_to_argument()
 
     function it_does_not_scores_if_value_an_object_and_is_not_equal_to_argument()
     {
-        $value = new ExactValueTokenFixtureB('ABC');
-        $value2 = new ExactValueTokenFixtureB('CBA');
+        $value = new \stdClass();
+        $value2 = new \stdClass();
+        $value2->foo = 'bar';
 
         $this->beConstructedWith($value);
         $this->scoreArgument($value2)->shouldReturn(false);
@@ -137,19 +138,3 @@ function it_generates_proper_string_representation_for_object($object)
         $this->__toString()->shouldReturn("exact($objHash Object (\n    'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))");
     }
 }
-
-class ExactValueTokenFixtureA
-{
-    public $errors;
-}
-
-class ExactValueTokenFixtureB extends ExactValueTokenFixtureA
-{
-    public $errors;
-    public $value = null;
-
-    public function __construct($value)
-    {
-        $this->value = $value;
-    }
-}
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php
index a783a15fd1ed19f278560ab00fa63d4216a918ef..37f1f1eafea530bf9bc32ba097582cac99015e79 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php
@@ -4,6 +4,10 @@
 
 use PhpSpec\ObjectBehavior;
 
+class MyClass
+{
+}
+
 class ObjectStateTokenSpec extends ObjectBehavior
 {
     function let()
@@ -41,13 +45,14 @@ function it_scores_8_if_argument_object_has_specific_property_state($class)
         $this->scoreArgument($class)->shouldReturn(8);
     }
 
-    function it_does_not_score_if_argument_method_state_does_not_match()
+    /**
+     * @param \ReflectionClass $reflection
+     */
+    function it_does_not_score_if_argument_method_state_does_not_match($reflection)
     {
-        $value = new ObjectStateTokenFixtureB('ABC');
-        $value2 = new ObjectStateTokenFixtureB('CBA');
+        $reflection->getName()->willReturn('SplFileInfo');
 
-        $this->beConstructedWith('getSelf', $value);
-        $this->scoreArgument($value2)->shouldReturn(false);
+        $this->scoreArgument($reflection)->shouldReturn(false);
     }
 
     /**
@@ -61,7 +66,7 @@ function it_does_not_score_if_argument_property_state_does_not_match($class)
     }
 
     /**
-     * @param \spec\Prophecy\Argument\Token\ObjectStateTokenFixtureA $class
+     * @param \spec\Prophecy\Argument\Token\MyClass $class
      */
     function it_does_not_score_if_argument_object_does_not_have_method_or_property($class)
     {
@@ -78,24 +83,3 @@ function it_has_simple_string_representation()
         $this->__toString()->shouldReturn('state(getName(), "stdClass")');
     }
 }
-
-class ObjectStateTokenFixtureA
-{
-    public $errors;
-}
-
-class ObjectStateTokenFixtureB extends ObjectStateTokenFixtureA
-{
-    public $errors;
-    public $value = null;
-
-    public function __construct($value)
-    {
-        $this->value = $value;
-    }
-
-    public function getSelf()
-    {
-        return $this;
-    }
-}
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php
index 200d96192feb2d961c47bb3ce0a189dc2c42b515..fe581f25d68cbd9b1004ac7c989a5e5efb9d7946 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php
@@ -13,9 +13,9 @@ function it_is_a_patch()
         $this->shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface');
     }
 
-    function its_priority_is_49()
+    function its_priority_is_50()
     {
-        $this->getPriority()->shouldReturn(49);
+        $this->getPriority()->shouldReturn(50);
     }
 
     /**
@@ -41,4 +41,4 @@ function it_will_remove_echo_and_eval_methods($node, $method1, $method2, $method
 
         $this->apply($node);
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php
index 1dc8cda3609781034785606e9e8f908e6e44ed57..867f1830b3a66349dedc33592b67df5011196a46 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php
@@ -10,14 +10,12 @@ class ClassCodeGeneratorSpec extends ObjectBehavior
      * @param \Prophecy\Doubler\Generator\Node\ClassNode    $class
      * @param \Prophecy\Doubler\Generator\Node\MethodNode   $method1
      * @param \Prophecy\Doubler\Generator\Node\MethodNode   $method2
-     * @param \Prophecy\Doubler\Generator\Node\MethodNode   $method3
      * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument11
      * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument12
      * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument21
-     * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument31
      */
     function it_generates_proper_php_code_for_specific_ClassNode(
-        $class, $method1, $method2, $method3, $argument11, $argument12, $argument21, $argument31
+        $class, $method1, $method2, $argument11, $argument12, $argument21
     )
     {
         $class->getParentClass()->willReturn('RuntimeException');
@@ -25,29 +23,20 @@ function it_generates_proper_php_code_for_specific_ClassNode(
             'Prophecy\Doubler\Generator\MirroredInterface', 'ArrayAccess', 'ArrayIterator'
         ));
         $class->getProperties()->willReturn(array('name' => 'public', 'email' => 'private'));
-        $class->getMethods()->willReturn(array($method1, $method2, $method3));
+        $class->getMethods()->willReturn(array($method1, $method2));
 
         $method1->getName()->willReturn('getName');
         $method1->getVisibility()->willReturn('public');
-        $method1->returnsReference()->willReturn(false);
         $method1->isStatic()->willReturn(true);
         $method1->getArguments()->willReturn(array($argument11, $argument12));
         $method1->getCode()->willReturn('return $this->name;');
 
         $method2->getName()->willReturn('getEmail');
         $method2->getVisibility()->willReturn('protected');
-        $method2->returnsReference()->willReturn(false);
         $method2->isStatic()->willReturn(false);
         $method2->getArguments()->willReturn(array($argument21));
         $method2->getCode()->willReturn('return $this->email;');
 
-        $method3->getName()->willReturn('getRefValue');
-        $method3->getVisibility()->willReturn('public');
-        $method3->returnsReference()->willReturn(true);
-        $method3->isStatic()->willReturn(false);
-        $method3->getArguments()->willReturn(array($argument31));
-        $method3->getCode()->willReturn('return $this->refValue;');
-
         $argument11->getName()->willReturn('fullname');
         $argument11->getTypeHint()->willReturn('array');
         $argument11->isOptional()->willReturn(true);
@@ -65,12 +54,6 @@ function it_generates_proper_php_code_for_specific_ClassNode(
         $argument21->getDefault()->willReturn('ever.zet@gmail.com');
         $argument21->isPassedByReference()->willReturn(false);
 
-        $argument31->getName()->willReturn('refValue');
-        $argument31->getTypeHint()->willReturn(null);
-        $argument31->isOptional()->willReturn(false);
-        $argument31->getDefault()->willReturn();
-        $argument31->isPassedByReference()->willReturn(false);
-
         $code = $this->generate('CustomClass', $class);
         $expected = <<<'PHP'
 namespace  {
@@ -84,9 +67,6 @@ public static function getName(array $fullname = NULL, \ReflectionClass $class)
 protected  function getEmail( $default = 'ever.zet@gmail.com') {
 return $this->email;
 }
-public  function &getRefValue( $refValue) {
-return $this->refValue;
-}
 
 }
 }
@@ -113,7 +93,6 @@ function it_overrides_properly_methods_with_args_passed_by_reference(
         $method->getVisibility()->willReturn('public');
         $method->isStatic()->willReturn(false);
         $method->getArguments()->willReturn(array($argument));
-        $method->returnsReference()->willReturn(false);
         $method->getCode()->willReturn('return $this->name;');
 
         $argument->getName()->willReturn('fullname');
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php
index dd9e9c4a3af74f46ff7d0cf650b26e340dfbd37a..fa9f4623eaaedfd2a9a9933562557dc42bff6189 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php
@@ -45,10 +45,6 @@ function it_reflects_a_class_by_mirroring_all_its_public_methods(
         $method2->isStatic()->willReturn(false);
         $method3->isStatic()->willReturn(false);
 
-        $method1->returnsReference()->willReturn(false);
-        $method2->returnsReference()->willReturn(false);
-        $method3->returnsReference()->willReturn(false);
-
         $method1->getParameters()->willReturn(array());
         $method2->getParameters()->willReturn(array());
         $method3->getParameters()->willReturn(array());
@@ -84,7 +80,6 @@ function it_changes_argument_names_if_they_are_varying($class, $method, $paramet
         $method->isFinal()->willReturn(false);
         $method->isProtected()->willReturn(false);
         $method->isStatic()->willReturn(false);
-        $method->returnsReference()->willReturn(false);
 
         $parameter->getName()->willReturn('...');
         $parameter->isDefaultValueAvailable()->willReturn(true);
@@ -118,8 +113,6 @@ function it_reflects_protected_abstract_methods($class, $method)
         $method->isStatic()->willReturn(false);
         $method->getParameters()->willReturn(array());
         $method->getName()->willReturn('innerDetail');
-        $method->returnsReference()->willReturn(false);
-
 
         $classNode   = $this->reflect($class, array());
         $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode');
@@ -147,7 +140,6 @@ function it_reflects_public_static_methods($class, $method)
         $method->isStatic()->willReturn(true);
         $method->getParameters()->willReturn(array());
         $method->getName()->willReturn('innerDetail');
-        $method->returnsReference()->willReturn(false);
 
         $classNode   = $this->reflect($class, array());
         $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode');
@@ -182,7 +174,6 @@ function it_properly_reads_methods_arguments_with_types(
         $method->isFinal()->willReturn(false);
         $method->isProtected()->willReturn(true);
         $method->isStatic()->willReturn(false);
-        $method->returnsReference()->willReturn(false);
         $method->getParameters()->willReturn(array($param1, $param2, $param3));
 
         $param1->getName()->willReturn('arg_1');
@@ -229,54 +220,9 @@ function it_properly_reads_methods_arguments_with_types(
         $argNodes[2]->getName()->shouldReturn('arg_3');
         if (version_compare(PHP_VERSION, '5.4', '>=')) {
             $argNodes[2]->getTypeHint()->shouldReturn('callable');
-            $argNodes[2]->isOptional()->shouldReturn(true);
-            $argNodes[2]->getDefault()->shouldReturn(null);
-        } else {
-            $argNodes[2]->isOptional()->shouldReturn(false);
-        }
-    }
-
-    /**
-     * @param ReflectionClass     $class
-     * @param ReflectionMethod    $method
-     * @param ReflectionParameter $param1
-     */
-    function it_marks_required_args_without_types_as_not_optional(
-        $class, $method, $param1
-    )
-    {
-        $class->getName()->willReturn('Custom\ClassName');
-        $class->isInterface()->willReturn(false);
-        $class->isFinal()->willReturn(false);
-        $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array());
-        $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method));
-
-        $method->getName()->willReturn('methodWithArgs');
-        $method->isFinal()->willReturn(false);
-        $method->isProtected()->willReturn(false);
-        $method->isStatic()->willReturn(false);
-        $method->returnsReference()->willReturn(false);
-        $method->getParameters()->willReturn(array($param1));
-
-        $param1->getName()->willReturn('arg_1');
-        $param1->isArray()->willReturn(false);
-        if (version_compare(PHP_VERSION, '5.4', '>=')) {
-            $param1->isCallable()->willReturn(false);
-        }
-        $param1->getClass()->willReturn(null);
-        $param1->isDefaultValueAvailable()->willReturn(false);
-        $param1->isOptional()->willReturn(false);
-        $param1->isPassedByReference()->willReturn(false);
-        $param1->allowsNull()->willReturn(true);
-        if (defined('HHVM_VERSION')) {
-            $param1->getTypehintText()->willReturn(null);
         }
-
-        $classNode   = $this->reflect($class, array());
-        $methodNodes = $classNode->getMethods();
-        $argNodes    = $methodNodes['methodWithArgs']->getArguments();
-
-        $argNodes[0]->isOptional()->shouldReturn(false);
+        $argNodes[2]->isOptional()->shouldReturn(true);
+        $argNodes[2]->getDefault()->shouldReturn(null);
     }
 
     /**
@@ -300,7 +246,6 @@ function it_marks_passed_by_reference_args_as_passed_by_reference(
         $method->isFinal()->willReturn(false);
         $method->isProtected()->willReturn(false);
         $method->isStatic()->willReturn(false);
-        $method->returnsReference()->willReturn(false);
         $method->getParameters()->willReturn(array($param1, $param2));
 
         $param1->getName()->willReturn('arg_1');
@@ -406,10 +351,6 @@ function it_reflects_all_interfaces_methods(
         $method2->isProtected()->willReturn(false);
         $method3->isProtected()->willReturn(false);
 
-        $method1->returnsReference()->willReturn(false);
-        $method2->returnsReference()->willReturn(false);
-        $method3->returnsReference()->willReturn(false);
-
         $method1->isStatic()->willReturn(false);
         $method2->isStatic()->willReturn(false);
         $method3->isStatic()->willReturn(false);
@@ -464,10 +405,6 @@ function it_ignores_virtually_private_methods($class, $method1, $method2, $metho
         $method2->isStatic()->willReturn(false);
         $method3->isStatic()->willReturn(false);
 
-        $method1->returnsReference()->willReturn(false);
-        $method2->returnsReference()->willReturn(false);
-        $method3->returnsReference()->willReturn(false);
-
         $method1->getParameters()->willReturn(array());
         $method2->getParameters()->willReturn(array());
         $method3->getParameters()->willReturn(array());
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php
index 7582706ed408a45766881cd1b0cbd4c9976cd4b1..2fff40a3641a24eea1f7fc13fd307038afca5041 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php
@@ -32,17 +32,6 @@ function it_is_not_static_by_default()
         $this->shouldNotBeStatic();
     }
 
-    function it_does_not_return_a_reference_by_default()
-    {
-        $this->returnsReference()->shouldReturn(false);
-    }
-
-    function it_should_be_settable_as_returning_a_reference_through_setter()
-    {
-        $this->setReturnsReference();
-        $this->returnsReference()->shouldReturn(true);
-    } 
-
     function it_should_be_settable_as_static_through_setter()
     {
         $this->setStatic();
@@ -85,13 +74,6 @@ function its_code_is_mutable()
         $this->getCode()->shouldReturn('echo "code";');
     }
 
-    function its_reference_returning_methods_will_generate_exceptions()
-    {
-        $this->setCode('echo "code";');
-        $this->setReturnsReference();
-        $this->getCode()->shouldReturn("throw new \Prophecy\Exception\Doubler\ReturnByReferenceException('Returning by reference not supported', get_class(\$this), 'getTitle');");
-    }
-
     function its_setCode_provided_with_null_cleans_method_body()
     {
         $this->setCode(null);
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php
index a889dd7ef45c64e773a7ad2ae84ca933bd352384..5bc0ee4889433d1aec85d35595bde9a982da9dd5 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php
@@ -9,7 +9,7 @@ class MethodNotFoundExceptionSpec extends ObjectBehavior
 {
     function let()
     {
-        $this->beConstructedWith('', 'User', 'getName', array(1, 2, 3));
+        $this->beConstructedWith('', 'User', 'getName');
     }
 
     function it_is_DoubleException()
@@ -26,15 +26,4 @@ function it_has_classnamej()
     {
         $this->getClassname()->shouldReturn('User');
     }
-
-    function it_has_an_arguments_list()
-    {
-        $this->getArguments()->shouldReturn(array(1, 2, 3));
-    }
-
-    function it_has_a_default_null_argument_list()
-    {
-        $this->beConstructedWith('', 'User', 'getName');
-        $this->getArguments()->shouldReturn(null);
-    }
 }
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php
index 4acb7bb0aa0c5a928a2d9d9419aa0488e74968d1..1b534d93c7d741158afae808c46cc916f08ae8e2 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php
@@ -28,14 +28,4 @@ function it_should_return_null_if_no_arguments_provided($object, $method)
     {
         $this->execute(array(), $object, $method)->shouldReturn(null);
     }
-
-    /**
-     * @param \Prophecy\Prophecy\ObjectProphecy $object
-     * @param \Prophecy\Prophecy\MethodProphecy $method
-     */
-    function it_should_return_nth_argument_if_provided($object, $method)
-    {
-        $this->beConstructedWith(1);
-        $this->execute(array('one', 'two'), $object, $method)->shouldReturn('two');
-    }
 }
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php
index d8299a78ed2b5664a1920d4b9d41f03b8a3a84c0..4c4a76c74ff6e0f0e3e4a5978a511556160ce547 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php
@@ -102,16 +102,6 @@ function it_adds_ReturnArgumentPromise_during_willReturnArgument_call($objectPro
         $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\ReturnArgumentPromise');
     }
 
-    function it_adds_ReturnArgumentPromise_during_willReturnArgument_call_with_index_argument($objectProphecy)
-    {
-        $objectProphecy->addMethodProphecy($this)->willReturn(null);
-
-        $this->willReturnArgument(1);
-        $promise = $this->getPromise();
-        $promise->shouldBeAnInstanceOf('Prophecy\Promise\ReturnArgumentPromise');
-        $promise->execute(array('one', 'two'), $objectProphecy, $this)->shouldReturn('two');
-    }
-
     function it_adds_CallbackPromise_during_will_call_with_callback_argument($objectProphecy)
     {
         $objectProphecy->addMethodProphecy($this)->willReturn(null);
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php
index 00f57fe1a657d13551ee9542d6b078126eaafa2f..0ba376892f68c72f3bf0c07822c0baeadfff7ba9 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php
@@ -278,28 +278,9 @@ function it_returns_new_MethodProphecy_for_different_signatures($doubler, $refle
     {
         $doubler->double(Argument::any())->willReturn($reflection);
 
-        $value = new ObjectProphecySpecFixtureB('ABC');
-        $value2 = new ObjectProphecySpecFixtureB('CBA');
-
-        $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(1, 2, 3, $value));
-        $methodProphecy2 = $this->getProphecy(1, 2, 3, $value2);
+        $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(3, 2, 1));
+        $methodProphecy2 = $this->getProphecy(1, 2, 3);
 
         $methodProphecy2->shouldNotBe($methodProphecy1);
     }
 }
-
-class ObjectProphecySpecFixtureA
-{
-	public $errors;
-}
-
-class ObjectProphecySpecFixtureB extends ObjectProphecySpecFixtureA
-{
-    public $errors;
-    public $value = null;
-
-    public function __construct($value)
-    {
-        $this->value = $value;
-    }
-}
diff --git a/core/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php b/core/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php
index a4eef59f9f7c1e149c4acec937cee31ff482d5e2..e4835d842d34f5e5dcef7b76b8a073da4bb62772 100644
--- a/core/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php
+++ b/core/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php
@@ -51,11 +51,6 @@ function it_generates_proper_string_representation_for_array()
         $this->stringify(array('zet', 42))->shouldReturn('["zet", 42]');
     }
 
-    function it_generates_proper_string_representation_for_hash_containing_one_value()
-    {
-        $this->stringify(array('ever' => 'zet'))->shouldReturn('["ever" => "zet"]');
-    }
-
     function it_generates_proper_string_representation_for_hash()
     {
         $this->stringify(array('ever' => 'zet', 52 => 'hey', 'num' => 42))->shouldReturn(
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php b/core/vendor/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php
index a088f21d21df4e9d233b7003cf40f2fdd1bfd5ab..2e780512ae34a81e5ba8008cc6aab0932d4276fb 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php
@@ -90,12 +90,4 @@ public function __toString()
 
         return $this->string;
     }
-
-    /**
-     * @return array
-     */
-    public function getTokens()
-    {
-        return $this->tokens;
-    }
 }
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php b/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php
index ba895ab97594358248198dde94976bd7ed9e804a..320411810986648b1a62b9c8115b3aefef3d84bb 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php
@@ -11,8 +11,6 @@
 
 namespace Prophecy\Argument\Token;
 
-use SebastianBergmann\Comparator\Factory as ComparatorFactory;
-use SebastianBergmann\Comparator\ComparisonFailure;
 use Prophecy\Util\StringUtil;
 
 /**
@@ -25,21 +23,17 @@ class ExactValueToken implements TokenInterface
     private $value;
     private $string;
     private $util;
-    private $comparatorFactory;
 
     /**
      * Initializes token.
      *
-     * @param mixed             $value
-     * @param StringUtil        $util
-     * @param ComparatorFactory $comparatorFactory
+     * @param mixed      $value
+     * @param StringUtil $util
      */
-    public function __construct($value, StringUtil $util = null, ComparatorFactory $comparatorFactory = null)
+    public function __construct($value, StringUtil $util = null)
     {
         $this->value = $value;
         $this->util  = $util ?: new StringUtil();
-
-        $this->comparatorFactory = $comparatorFactory ?: ComparatorFactory::getInstance();
     }
 
     /**
@@ -51,15 +45,8 @@ public function __construct($value, StringUtil $util = null, ComparatorFactory $
      */
     public function scoreArgument($argument)
     {
-        if (is_object($argument) && is_object($this->value)) {
-            $comparator = $this->comparatorFactory->getComparatorFor(
-                $argument, $this->value
-            );
-
-            try {
-                $comparator->assertEquals($argument, $this->value);
-                return 10;
-            } catch (ComparisonFailure $failure) {}
+        if (is_object($argument) && is_object($this->value) && $argument == $this->value) {
+            return 10;
         }
 
         // If either one is an object it should castable to a string
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php b/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php
index ea38fe16027a5fd7bf7d7628c83576dee34d12eb..8701add012ca5b2bd4b25130cd20a8c06d505278 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php
@@ -11,8 +11,6 @@
 
 namespace Prophecy\Argument\Token;
 
-use SebastianBergmann\Comparator\Factory as ComparatorFactory;
-use SebastianBergmann\Comparator\ComparisonFailure;
 use Prophecy\Util\StringUtil;
 
 /**
@@ -25,27 +23,19 @@ class ObjectStateToken implements TokenInterface
     private $name;
     private $value;
     private $util;
-    private $comparatorFactory;
 
     /**
      * Initializes token.
      *
-     * @param string            $methodName
-     * @param mixed             $value             Expected return value
-     * @param null|StringUtil   $util
-     * @param ComparatorFactory $comparatorFactory
+     * @param string          $methodName
+     * @param mixed           $value      Expected return value
+     * @param null|StringUtil $util
      */
-    public function __construct(
-        $methodName,
-        $value,
-        StringUtil $util = null,
-        ComparatorFactory $comparatorFactory = null
-    ) {
+    public function __construct($methodName, $value, StringUtil $util = null)
+    {
         $this->name  = $methodName;
         $this->value = $value;
         $this->util  = $util ?: new StringUtil;
-
-        $this->comparatorFactory = $comparatorFactory ?: ComparatorFactory::getInstance();
     }
 
     /**
@@ -60,16 +50,7 @@ public function scoreArgument($argument)
         if (is_object($argument) && method_exists($argument, $this->name)) {
             $actual = call_user_func(array($argument, $this->name));
 
-            $comparator = $this->comparatorFactory->getComparatorFor(
-                $actual, $this->value
-            );
-
-            try {
-                $comparator->assertEquals($actual, $this->value);
-                return 8;
-            } catch (ComparisonFailure $failure) {
-                return false;
-            }
+            return $actual == $this->value ? 8 : false;
         }
 
         if (is_object($argument) && property_exists($argument, $this->name)) {
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php b/core/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php
index 749585510b7b8ff990690ff11463587281fee578..34cd5deeef4e52f7956c1025a16424786bde96b8 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php
@@ -141,10 +141,11 @@ private function createUnexpectedCallException(ObjectProphecy $prophecy, $method
         return new UnexpectedCallException(
             sprintf(
                 "Method call:\n".
-                "  - %s(%s)\n".
-                "on %s was not expected, expected calls were:\n%s",
+                "  %s->%s(%s)\n".
+                "was not expected.\n".
+                "Expected calls are:\n%s",
 
-                $methodName, $argstring, $classname, $expected
+                $classname, $methodName, $argstring, $expected
             ),
             $prophecy, $methodName, $arguments
         );
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php
index b0d9793aa4857d4eb000bab994b093b0f8f4b376..0501892fd4da72fa20068083d0173e71818b0d55 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php
@@ -52,7 +52,7 @@ public function apply(ClassNode $node)
      * @return int Priority number (higher - earlier)
      */
     public function getPriority() {
-        return 49;
+        return 50;
     }
 
     /**
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php
index 8577ba0f17682b7633a677f6b7965a6222973c7f..426ef3c1ce01c00561611da88466f113288ce52d 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php
@@ -54,10 +54,9 @@ public function generate($classname, Node\ClassNode $class)
 
     private function generateMethod(Node\MethodNode $method)
     {
-        $php = sprintf("%s %s function %s%s(%s) {\n",
+        $php = sprintf("%s %s function %s(%s) {\n",
             $method->getVisibility(),
             $method->isStatic() ? 'static' : '',
-            $method->returnsReference() ? '&':'',
             $method->getName(),
             implode(', ', $this->generateArguments($method->getArguments()))
         );
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php
index c89d002bac95f2f6dc7d484bb9f8c3fbc4b8b9ba..5c33a9332bfd29ce45c05b4495333b3449162569 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php
@@ -137,10 +137,6 @@ private function reflectMethodToNode(ReflectionMethod $method, Node\ClassNode $c
             $node->setStatic();
         }
 
-        if (true === $method->returnsReference()) {
-            $node->setReturnsReference();
-        }
-
         if (is_array($params = $method->getParameters()) && count($params)) {
             foreach ($params as $param) {
                 $this->reflectArgumentToNode($param, $node);
@@ -155,13 +151,11 @@ private function reflectArgumentToNode(ReflectionParameter $parameter, Node\Meth
         $name = $parameter->getName() == '...' ? '__dot_dot_dot__' : $parameter->getName();
         $node = new Node\ArgumentNode($name);
 
-        $typeHint = $this->getTypeHint($parameter);
-        $node->setTypeHint($typeHint);
+        $node->setTypeHint($this->getTypeHint($parameter));
 
         if (true === $parameter->isDefaultValueAvailable()) {
             $node->setDefault($parameter->getDefaultValue());
-        } elseif (true === $parameter->isOptional()
-              || (true === $parameter->allowsNull() && $typeHint)) {
+        } elseif (true === $parameter->isOptional() || true === $parameter->allowsNull()) {
             $node->setDefault(null);
         }
 
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php
index ef303b6bac56bf37fec19bc7e431dceecf0d1091..e7938769490c6ec8f537ee5c697f3d28fc557718 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php
@@ -24,7 +24,6 @@ class MethodNode
     private $code;
     private $visibility = 'public';
     private $static = false;
-    private $returnsReference = false;
 
     /**
      * @var ArgumentNode[]
@@ -72,16 +71,6 @@ public function setStatic($static = true)
         $this->static = (bool) $static;
     }
 
-    public function returnsReference()
-    {
-        return $this->returnsReference;
-    }
-
-    public function setReturnsReference()
-    {
-        $this->returnsReference = true;
-    }
-
     public function getName()
     {
         return $this->name;
@@ -110,11 +99,6 @@ public function setCode($code)
 
     public function getCode()
     {
-        if ($this->returnsReference)
-        {
-            return "throw new \Prophecy\Exception\Doubler\ReturnByReferenceException('Returning by reference not supported', get_class(\$this), '{$this->name}');";
-        }
-
         return (string) $this->code;
     }
 
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php b/core/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php
index b113941fc95855d6e404dde24b69cd1c746422b2..a978642517ee55ef9d8415aeabdb95101247776d 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php
@@ -13,34 +13,20 @@
 
 class MethodNotFoundException extends DoubleException
 {
-    /**
-     * @var string
-     */
     private $classname;
-
-    /**
-     * @var string
-     */
     private $methodName;
 
     /**
-     * @var array
-     */
-    private $arguments;
-
-    /**
      * @param string $message
      * @param string $classname
      * @param string $methodName
-     * @param null|Argument\ArgumentsWildcard|array $arguments
      */
-    public function __construct($message, $classname, $methodName, $arguments = null)
+    public function __construct($message, $classname, $methodName)
     {
         parent::__construct($message);
 
         $this->classname  = $classname;
         $this->methodName = $methodName;
-        $this->arguments = $arguments;
     }
 
     public function getClassname()
@@ -52,9 +38,4 @@ public function getMethodName()
     {
         return $this->methodName;
     }
-
-    public function getArguments()
-    {
-        return $this->arguments;
-    }
 }
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php b/core/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php
deleted file mode 100644
index 6303049700fabe30d246cc0b38fcc774a63166ec..0000000000000000000000000000000000000000
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/*
- * This file is part of the Prophecy.
- * (c) Konstantin Kudryashov <ever.zet@gmail.com>
- *     Marcello Duarte <marcello.duarte@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Prophecy\Exception\Doubler;
-
-class ReturnByReferenceException extends DoubleException
-{
-    private $classname;
-    private $methodName;
-
-    /**
-     * @param string $message
-     * @param string $classname
-     * @param string $methodName
-     */
-    public function __construct($message, $classname, $methodName)
-    {
-        parent::__construct($message);
-
-        $this->classname  = $classname;
-        $this->methodName = $methodName;
-    }
-
-    public function getClassname()
-    {
-        return $this->classname;
-    }
-
-    public function getMethodName()
-    {
-        return $this->methodName;
-    }
-}
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php b/core/vendor/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php
index 46ac5bfc062d7cc04b29a6ddcf5c91ec38423903..b663f47236dbbe2a62e32de22a44a00a1de1fc0e 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php
@@ -51,17 +51,15 @@ public function check(array $calls, ObjectProphecy $object, MethodProphecy $meth
             return;
         }
 
-        $verb = count($calls) === 1 ? 'was' : 'were';
-
         throw new UnexpectedCallsException(sprintf(
             "No calls expected that match:\n".
             "  %s->%s(%s)\n".
-            "but %d %s made:\n%s",
+            "but %d were made:\n%s",
+
             get_class($object->reveal()),
             $method->getMethodName(),
             $method->getArgumentsWildcard(),
             count($calls),
-            $verb,
             $this->util->stringifyCalls($calls)
         ), $method, $calls);
     }
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php b/core/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php
index a06724bc7bfd6cc3b977080e9e3325d13363f442..98500d2fc54e18783cb32aabf20889093e1cc9f3 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php
@@ -11,7 +11,6 @@
 
 namespace Prophecy\Promise;
 
-use Prophecy\Exception\InvalidArgumentException;
 use Prophecy\Prophecy\ObjectProphecy;
 use Prophecy\Prophecy\MethodProphecy;
 
@@ -23,30 +22,7 @@
 class ReturnArgumentPromise implements PromiseInterface
 {
     /**
-     * @var int
-     */
-    private $index;
-
-    /**
-     * Initializes callback promise.
-     *
-     * @param int $index The zero-indexed number of the argument to return
-     *
-     * @throws \Prophecy\Exception\InvalidArgumentException
-     */
-    public function __construct($index = 0)
-    {
-        if (!is_int($index) || $index < 0) {
-            throw new InvalidArgumentException(
-                'Zero-based index expected as argument to ReturnArgumentPromise, but got %s.',
-                $index
-            );
-        }
-        $this->index = $index;
-    }
-
-    /**
-     * Returns nth argument if has one, null otherwise.
+     * Returns first argument if has one, null otherwise.
      *
      * @param array          $args
      * @param ObjectProphecy $object
@@ -56,6 +32,6 @@ public function __construct($index = 0)
      */
     public function execute(array $args, ObjectProphecy $object, MethodProphecy $method)
     {
-        return count($args) > $this->index ? $args[$this->index] : null;
+        return count($args) ? $args[0] : null;
     }
 }
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php b/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php
index 9af03b9a625f2504deba1dea510319b0688b9664..28d0dbd1aac5c1f022ecc048b805a66bb81d358a 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php
@@ -48,7 +48,7 @@ public function __construct(ObjectProphecy $objectProphecy, $methodName, $argume
         if (!method_exists($double, $methodName)) {
             throw new MethodNotFoundException(sprintf(
                 'Method `%s::%s()` is not defined.', get_class($double), $methodName
-            ), get_class($double), $methodName, $arguments);
+            ), get_class($double), $methodName);
         }
 
         $this->objectProphecy = $objectProphecy;
@@ -140,15 +140,13 @@ public function willReturn()
     /**
      * Sets return argument promise to the prophecy.
      *
-     * @param int $index The zero-indexed number of the argument to return
-     *
      * @see Prophecy\Promise\ReturnArgumentPromise
      *
      * @return $this
      */
-    public function willReturnArgument($index = 0)
+    public function willReturnArgument()
     {
-        return $this->will(new Promise\ReturnArgumentPromise($index));
+        return $this->will(new Promise\ReturnArgumentPromise);
     }
 
     /**
@@ -360,7 +358,7 @@ public function getPrediction()
     /**
      * Returns predictions that were checked on this object.
      *
-     * @return Prediction\PredictionInterface[]
+     * @return PredictionInterface[]
      */
     public function getCheckedPredictions()
     {
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php b/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php
index e85c9d51c966394ba3ec6bf09e99b9406942264f..6c69b73deb6c417400f08e18d354712039d5694a 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php
@@ -11,8 +11,6 @@
 
 namespace Prophecy\Prophecy;
 
-use SebastianBergmann\Comparator\Factory as ComparatorFactory;
-use SebastianBergmann\Comparator\ComparisonFailure;
 use Prophecy\Call\Call;
 use Prophecy\Doubler\LazyDouble;
 use Prophecy\Argument\ArgumentsWildcard;
@@ -32,7 +30,6 @@ class ObjectProphecy implements ProphecyInterface
     private $lazyDouble;
     private $callCenter;
     private $revealer;
-    private $comparatorFactory;
 
     /**
      * @var MethodProphecy[][]
@@ -45,19 +42,13 @@ class ObjectProphecy implements ProphecyInterface
      * @param LazyDouble        $lazyDouble
      * @param CallCenter        $callCenter
      * @param RevealerInterface $revealer
-     * @param ComparatorFactory $comparatorFactory
      */
-    public function __construct(
-        LazyDouble $lazyDouble,
-        CallCenter $callCenter = null,
-        RevealerInterface $revealer = null,
-        ComparatorFactory $comparatorFactory = null
-    ) {
+    public function __construct(LazyDouble $lazyDouble, CallCenter $callCenter = null,
+                                RevealerInterface $revealer = null)
+    {
         $this->lazyDouble = $lazyDouble;
         $this->callCenter = $callCenter ?: new CallCenter;
         $this->revealer   = $revealer ?: new Revealer;
-
-        $this->comparatorFactory = $comparatorFactory ?: ComparatorFactory::getInstance();
     }
 
     /**
@@ -242,15 +233,10 @@ public function __call($methodName, array $arguments)
         $arguments = new ArgumentsWildcard($this->revealer->reveal($arguments));
 
         foreach ($this->getMethodProphecies($methodName) as $prophecy) {
-            $argumentsWildcard = $prophecy->getArgumentsWildcard();
-            $comparator = $this->comparatorFactory->getComparatorFor(
-                $argumentsWildcard, $arguments
-            );
-
-            try {
-                $comparator->assertEquals($argumentsWildcard, $arguments);
+            // Use the silence operator to suppress any notice about object to integer casting
+            if (@($prophecy->getArgumentsWildcard() == $arguments)) {
                 return $prophecy;
-            } catch (ComparisonFailure $failure) {}
+            }
         }
 
         return new MethodProphecy($this, $methodName, $arguments);
diff --git a/core/vendor/phpspec/prophecy/src/Prophecy/Util/StringUtil.php b/core/vendor/phpspec/prophecy/src/Prophecy/Util/StringUtil.php
index bb90156a3f7fed9c071e6cef382fe3b3f93f1bc5..48846e110b18e8e5d6d253c3df607df865293ec0 100644
--- a/core/vendor/phpspec/prophecy/src/Prophecy/Util/StringUtil.php
+++ b/core/vendor/phpspec/prophecy/src/Prophecy/Util/StringUtil.php
@@ -31,7 +31,7 @@ class StringUtil
     public function stringify($value, $exportObject = true)
     {
         if (is_array($value)) {
-            if (range(0, count($value) - 1) === array_keys($value)) {
+            if (range(0, count($value) - 1) == array_keys($value)) {
                 return '['.implode(', ', array_map(array($this, __FUNCTION__), $value)).']';
             }
 
diff --git a/core/vendor/phpunit/php-code-coverage/CONTRIBUTING.md b/core/vendor/phpunit/php-code-coverage/CONTRIBUTING.md
index 40dbc25e746d84f7e930066c1754bd2dc6ffa80c..6f6ef3445223f8ccd29fd0a7ba66057f77f88bc5 100644
--- a/core/vendor/phpunit/php-code-coverage/CONTRIBUTING.md
+++ b/core/vendor/phpunit/php-code-coverage/CONTRIBUTING.md
@@ -1,4 +1,4 @@
-Pull Requests for bug fixes should be made against the current release branch (2.0).
+Pull Requests for bug fixes should be made against the current release branch (1.2).
 
 Pull Requests for new features should be made against master.
 
diff --git a/core/vendor/phpunit/php-code-coverage/LICENSE b/core/vendor/phpunit/php-code-coverage/LICENSE
index fcfa37e804926c49e7ceb5bdd1e710de75b4e37f..02e6511bdae0d76e1aec6c9c5acf898f32e156e4 100644
--- a/core/vendor/phpunit/php-code-coverage/LICENSE
+++ b/core/vendor/phpunit/php-code-coverage/LICENSE
@@ -1,6 +1,6 @@
 PHP_CodeCoverage
 
-Copyright (c) 2009-2015, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/phpunit/php-code-coverage/README.md b/core/vendor/phpunit/php-code-coverage/README.md
index 6ca608a40d659144a51eb5f90a6269de26041cdc..603d623a4ed7db27a903deb0203c9304c6363b97 100644
--- a/core/vendor/phpunit/php-code-coverage/README.md
+++ b/core/vendor/phpunit/php-code-coverage/README.md
@@ -1,5 +1,5 @@
 [![Latest Stable Version](https://poser.pugx.org/phpunit/php-code-coverage/v/stable.png)](https://packagist.org/packages/phpunit/php-code-coverage)
-[![Build Status](https://travis-ci.org/sebastianbergmann/php-code-coverage.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-code-coverage)
+[![Build Status](https://travis-ci.org/sebastianbergmann/php-code-coverage.png?branch=master)](https://travis-ci.org/sebastianbergmann/php-code-coverage)
 
 # PHP_CodeCoverage
 
@@ -12,11 +12,11 @@
 
 ## Installation
 
-To add PHP_CodeCoverage as a local, per-project dependency to your project, simply add a dependency on `phpunit/php-code-coverage` to your project's `composer.json` file. Here is a minimal example of a `composer.json` file that just defines a dependency on PHP_CodeCoverage 2.0:
+To add PHP_CodeCoverage as a local, per-project dependency to your project, simply add a dependency on `phpunit/php-code-coverage` to your project's `composer.json` file. Here is a minimal example of a `composer.json` file that just defines a dependency on PHP_CodeCoverage 2.1:
 
     {
         "require": {
-            "phpunit/php-code-coverage": "~2.0"
+            "phpunit/php-code-coverage": "2.1.*"
         }
     }
 
diff --git a/core/vendor/phpunit/php-code-coverage/build.xml b/core/vendor/phpunit/php-code-coverage/build.xml
index c335d1587c6b886e40f5ac7fe1f0349b64fc6ad1..6604b76b8f6b18494688cb5ab01ed7ce410c6b76 100644
--- a/core/vendor/phpunit/php-code-coverage/build.xml
+++ b/core/vendor/phpunit/php-code-coverage/build.xml
@@ -39,3 +39,4 @@
   </exec>
  </target>
 </project>
+
diff --git a/core/vendor/phpunit/php-code-coverage/composer.json b/core/vendor/phpunit/php-code-coverage/composer.json
index 23df5ba38572554818b60ed0f4514e7755560d74..fb00ddd7b73b0f3b8ba1834f0fb688113321125b 100644
--- a/core/vendor/phpunit/php-code-coverage/composer.json
+++ b/core/vendor/phpunit/php-code-coverage/composer.json
@@ -29,7 +29,7 @@
         "sebastian/version": "~1.0"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4",
+        "phpunit/phpunit": "~4.1",
         "ext-xdebug": ">=2.1.4"
     },
     "suggest": {
@@ -46,5 +46,8 @@
         "branch-alias": {
             "dev-master": "2.0.x-dev"
         }
-    }
+    },
+    "include-path": [
+        ""
+    ]
 }
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage.php
index 54f0f6ac9834e29d72379e55ffe4776cd6356eb6..06161e2992fbfc270d18b281bf2db4095aac02ea 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 use SebastianBergmann\Environment\Runtime;
@@ -16,7 +51,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
@@ -335,9 +370,9 @@ public function append(array $data, $id = null, $append = true, $linesToBeCovere
      */
     public function merge(PHP_CodeCoverage $that)
     {
-        foreach ($that->getData() as $file => $lines) {
+        foreach ($that->data as $file => $lines) {
             if (!isset($this->data[$file])) {
-                if (!$that->filter()->isFiltered($file)) {
+                if (!$this->filter->isFiltered($file)) {
                     $this->data[$file] = $lines;
                 }
 
@@ -536,6 +571,10 @@ private function applyIgnoredLinesFilter(array &$data)
             foreach ($this->getLinesToBeIgnored($filename) as $line) {
                 unset($data[$filename][$line]);
             }
+
+            if (empty($data[$filename])) {
+                unset($data[$filename]);
+            }
         }
     }
 
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver.php
index fd2ead8eaacd756b904cfd2777982221e9daed06..e9bd69991f62e8ee75f546af8a5751e636c9006f 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/HHVM.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/HHVM.php
index 324a99f518dd9238ffe22d0a1dced9172b2cc6e2..cc370e76e7a1796d544d22220c96a091b7a95860 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/HHVM.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/HHVM.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.3.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.3.0
@@ -47,7 +82,7 @@ public function start()
      */
     public function stop()
     {
-        $codeCoverage = fb_get_code_coverage(true);
+        $codeCoverage = fb_get_code_coverage(TRUE);
 
         fb_disable_code_coverage();
 
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/Xdebug.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/Xdebug.php
index 3b33188613bab2b4e7b0d2985dadf121b867ef3a..3c2fb4c7bdb2efa6064659a8c2e825dc4605de27 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/Xdebug.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/Xdebug.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception.php
index a960c08b68c4778e1458506333547a13c0908afb..9d302d0c3e306f2140acaaed1a92ffa122d0c619 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception/UnintentionallyCoveredCode.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception/UnintentionallyCoveredCode.php
index 7f0950384dd8d9f34e89ecb3b977eb38b1c637ce..323383d531c282eecbbf9556ac2a1b9452624f47 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception/UnintentionallyCoveredCode.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Exception/UnintentionallyCoveredCode.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Filter.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Filter.php
index fce8461e6518eea99c181aafb612362413d99fe0..aae37de41e3c7e1da84eaf244cb123d78dacdc3c 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Filter.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Filter.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
@@ -59,16 +94,13 @@ class PHP_CodeCoverage_Filter
         'Text_Template' => 1,
         'Symfony\Component\Yaml\Yaml' => 1,
         'SebastianBergmann\Diff\Diff' => 1,
-        'SebastianBergmann\Environment\Runtime' => 1,
         'SebastianBergmann\Comparator\Comparator' => 1,
+        'SebastianBergmann\Environment\Runtime' => 1,
         'SebastianBergmann\Exporter\Exporter' => 1,
-        'SebastianBergmann\GlobalState\Snapshot' => 1,
-        'SebastianBergmann\RecursionContext\Context' => 1,
         'SebastianBergmann\Version' => 1,
         'Composer\Autoload\ClassLoader' => 1,
-        'Doctrine\Instantiator\Instantiator' => 1,
-        'phpDocumentor\Reflection\DocBlock' => 1,
-        'Prophecy\Prophet' => 1
+        'Instantiator\Instantiator' => 1,
+        'LazyMap\AbstractLazyMap' => 1
     );
 
     /**
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Clover.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Clover.php
index c29e175555fd253e928c6b64d3afd5075c4b2b1a..f2c0242b30cd86ff23eec06ec1bc93f0abb1e6b7 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Clover.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Clover.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Crap4j.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Crap4j.php
index 8e1f11a992b274f2eccbbc9b77f435c4c2d62700..a66adc16b6a3529e2949ffee7981baac80f280d3 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Crap4j.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Crap4j.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Zsolt TakÃ¡cs <zsolt@takacs.cc>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Zsolt TakÃ¡cs <zsolt@takacs.cc>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -39,20 +74,18 @@ public function process(PHP_CodeCoverage $coverage, $target = null, $name = null
         $root->appendChild($project);
         $root->appendChild($document->createElement('timestamp', date('Y-m-d H:i:s', (int) $_SERVER['REQUEST_TIME'])));
 
-        $stats       = $document->createElement('stats');
+        $stats = $document->createElement('stats');
         $methodsNode = $document->createElement('methods');
 
-        $report = $coverage->getReport();
+        $report   = $coverage->getReport();
         unset($coverage);
 
-        $fullMethodCount     = 0;
+        $fullMethodCount = 0;
         $fullCrapMethodCount = 0;
-        $fullCrapLoad        = 0;
-        $fullCrap            = 0;
+        $fullCrapLoad = 0;
+        $fullCrap = 0;
 
         foreach ($report as $item) {
-            $namespace = 'global';
-
             if (!$item instanceof PHP_CodeCoverage_Report_Node_File) {
                 continue;
             }
@@ -66,7 +99,7 @@ public function process(PHP_CodeCoverage $coverage, $target = null, $name = null
                 foreach ($class['methods'] as $methodName => $method) {
                     $crapLoad = $this->getCrapLoad($method['crap'], $method['ccn'], $method['coverage']);
 
-                    $fullCrap     += $method['crap'];
+                    $fullCrap += $method['crap'];
                     $fullCrapLoad += $crapLoad;
                     $fullMethodCount++;
 
@@ -76,11 +109,7 @@ public function process(PHP_CodeCoverage $coverage, $target = null, $name = null
 
                     $methodNode = $document->createElement('method');
 
-                    if (!empty($class['package']['namespace'])) {
-                        $namespace = $class['package']['namespace'];
-                    }
-
-                    $methodNode->appendChild($document->createElement('package', $namespace));
+                    $methodNode->appendChild($document->createElement('package', ''));
                     $methodNode->appendChild($document->createElement('className', $className));
                     $methodNode->appendChild($document->createElement('methodName', $methodName));
                     $methodNode->appendChild($document->createElement('methodSignature', htmlspecialchars($method['signature'])));
@@ -119,7 +148,7 @@ public function process(PHP_CodeCoverage $coverage, $target = null, $name = null
     private function getCrapLoad($crapValue, $cyclomaticComplexity, $coveragePercent)
     {
         $crapLoad = 0;
-        if ($crapValue >= $this->threshold) {
+        if ($crapValue > $this->threshold) {
             $crapLoad += $cyclomaticComplexity * (1.0 - $coveragePercent / 100);
             $crapLoad += $cyclomaticComplexity / $this->threshold;
         }
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Factory.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Factory.php
index b9bffdf9414d8c5cdcb3f2d8d85aff788cc87107..c8cb63b4b30d5151699c72a23e2e8ab9349f8b40 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Factory.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Factory.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
@@ -22,16 +57,14 @@
 class PHP_CodeCoverage_Report_Factory
 {
     /**
-     * @param  PHP_CodeCoverage $coverage
-     * @return PHP_CodeCoverage_Report_Node_Directory
+     * @param PHP_CodeCoverage $coverage
      */
     public function create(PHP_CodeCoverage $coverage)
     {
         $files      = $coverage->getData();
         $commonPath = $this->reducePaths($files);
         $root       = new PHP_CodeCoverage_Report_Node_Directory(
-            $commonPath,
-            null
+            $commonPath, null
         );
 
         $this->addItems(
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML.php
index c67db46a8db866dbc3e32d1eadebd3a5e5975db9..148cb5297acd0932ed2b8b0f5006dfecfba56eff 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
@@ -56,6 +91,7 @@ public function __construct($lowUpperBound = 50, $highLowerBound = 90, $generato
 
         $this->templatePath = sprintf(
             '%s%sHTML%sRenderer%sTemplate%s',
+
             dirname(__FILE__),
             DIRECTORY_SEPARATOR,
             DIRECTORY_SEPARATOR,
@@ -146,7 +182,6 @@ private function copyFiles($target)
         copy($this->templatePath . 'fonts/glyphicons-halflings-regular.svg', $dir . 'glyphicons-halflings-regular.svg');
         copy($this->templatePath . 'fonts/glyphicons-halflings-regular.ttf', $dir . 'glyphicons-halflings-regular.ttf');
         copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff', $dir . 'glyphicons-halflings-regular.woff');
-        copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff2', $dir . 'glyphicons-halflings-regular.woff2');
 
         $dir = $this->getDirectory($target . 'js');
         copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js');
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer.php
index 2b35f68c51abd9e1ab1d8a94af404d3ae4b70c9a..55ebabc0c27f51d7886e6512f29b12ed42981dc7 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 use SebastianBergmann\Environment\Runtime;
@@ -16,7 +51,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
@@ -64,7 +99,7 @@
      */
     public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound)
     {
-        $version = new SebastianBergmann\Version('2.0.16', dirname(dirname(dirname(dirname(__DIR__)))));
+        $version = new SebastianBergmann\Version('2.0.11', dirname(dirname(dirname(dirname(__DIR__)))));
 
         $this->templatePath   = $templatePath;
         $this->generator      = $generator;
@@ -194,8 +229,7 @@ protected function getBreadcrumbs(PHP_CodeCoverage_Report_Node $node)
         foreach ($path as $step) {
             if ($step !== $node) {
                 $breadcrumbs .= $this->getInactiveBreadcrumb(
-                    $step,
-                    array_pop($pathToRoot)
+                    $step, array_pop($pathToRoot)
                 );
             } else {
                 $breadcrumbs .= $this->getActiveBreadcrumb($step);
@@ -246,9 +280,7 @@ protected function getCoverageBar($percent)
         $level = $this->getColorLevel($percent);
 
         $template = new Text_Template(
-            $this->templatePath . 'coverage_bar.html',
-            '{{',
-            '}}'
+            $this->templatePath . 'coverage_bar.html', '{{', '}}'
         );
 
         $template->setVar(array('level' => $level, 'percent' => sprintf("%.2F", $percent)));
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php
index deac0b77e710cd2c9995117f9e77b9c9dfa61855..b913c4262d9a5a2078331e5038c8be440c3fb7bd 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Dashboard.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
@@ -29,18 +64,15 @@ public function render(PHP_CodeCoverage_Report_Node_Directory $node, $file)
     {
         $classes  = $node->getClassesAndTraits();
         $template = new Text_Template(
-            $this->templatePath . 'dashboard.html',
-            '{{',
-            '}}'
+            $this->templatePath . 'dashboard.html', '{{', '}}'
         );
 
         $this->setCommonTemplateVariables($template, $node);
 
-        $baseLink             = $node->getId() . '/';
-        $complexity           = $this->complexity($classes, $baseLink);
+        $complexity           = $this->complexity($classes);
         $coverageDistribution = $this->coverageDistribution($classes);
-        $insufficientCoverage = $this->insufficientCoverage($classes, $baseLink);
-        $projectRisks         = $this->projectRisks($classes, $baseLink);
+        $insufficientCoverage = $this->insufficientCoverage($classes);
+        $projectRisks         = $this->projectRisks($classes);
 
         $template->setVar(
             array(
@@ -61,11 +93,10 @@ public function render(PHP_CodeCoverage_Report_Node_Directory $node, $file)
     /**
      * Returns the data for the Class/Method Complexity charts.
      *
-     * @param  array  $classes
-     * @param  string $baseLink
+     * @param  array $classes
      * @return array
      */
-    protected function complexity(array $classes, $baseLink)
+    protected function complexity(array $classes)
     {
         $result = array('class' => array(), 'method' => array());
 
@@ -80,7 +111,7 @@ protected function complexity(array $classes, $baseLink)
                     $method['ccn'],
                     sprintf(
                         '<a href="%s">%s</a>',
-                        str_replace($baseLink, '', $method['link']),
+                        $method['link'],
                         $methodName
                     )
                 );
@@ -91,7 +122,7 @@ protected function complexity(array $classes, $baseLink)
                 $class['ccn'],
                 sprintf(
                     '<a href="%s">%s</a>',
-                    str_replace($baseLink, '', $class['link']),
+                    $class['link'],
                     $className
                 )
             );
@@ -175,11 +206,10 @@ protected function coverageDistribution(array $classes)
     /**
      * Returns the classes / methods with insufficient coverage.
      *
-     * @param  array  $classes
-     * @param  string $baseLink
+     * @param  array $classes
      * @return array
      */
-    protected function insufficientCoverage(array $classes, $baseLink)
+    protected function insufficientCoverage(array $classes)
     {
         $leastTestedClasses = array();
         $leastTestedMethods = array();
@@ -209,7 +239,7 @@ protected function insufficientCoverage(array $classes, $baseLink)
         foreach ($leastTestedClasses as $className => $coverage) {
             $result['class'] .= sprintf(
                 '       <tr><td><a href="%s">%s</a></td><td class="text-right">%d%%</td></tr>' . "\n",
-                str_replace($baseLink, '', $classes[$className]['link']),
+                $classes[$className]['link'],
                 $className,
                 $coverage
             );
@@ -220,7 +250,7 @@ protected function insufficientCoverage(array $classes, $baseLink)
 
             $result['method'] .= sprintf(
                 '       <tr><td><a href="%s"><abbr title="%s">%s</a></a></td><td class="text-right">%d%%</td></tr>' . "\n",
-                str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']),
+                $classes[$class]['methods'][$method]['link'],
                 $methodName,
                 $method,
                 $coverage
@@ -233,11 +263,10 @@ protected function insufficientCoverage(array $classes, $baseLink)
     /**
      * Returns the project risks according to the CRAP index.
      *
-     * @param  array  $classes
-     * @param  string $baseLink
+     * @param  array $classes
      * @return array
      */
-    protected function projectRisks(array $classes, $baseLink)
+    protected function projectRisks(array $classes)
     {
         $classRisks  = array();
         $methodRisks = array();
@@ -269,7 +298,7 @@ protected function projectRisks(array $classes, $baseLink)
         foreach ($classRisks as $className => $crap) {
             $result['class'] .= sprintf(
                 '       <tr><td><a href="%s">%s</a></td><td class="text-right">%d</td></tr>' . "\n",
-                str_replace($baseLink, '', $classes[$className]['link']),
+                $classes[$className]['link'],
                 $className,
                 $crap
             );
@@ -280,7 +309,7 @@ protected function projectRisks(array $classes, $baseLink)
 
             $result['method'] .= sprintf(
                 '       <tr><td><a href="%s"><abbr title="%s">%s</abbr></a></td><td class="text-right">%d</td></tr>' . "\n",
-                str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']),
+                $classes[$class]['methods'][$method]['link'],
                 $methodName,
                 $method,
                 $crap
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Directory.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Directory.php
index 1e21d26a7dbb9d8d36b2c837ed20b23676ef4514..4cf6000ca9654f8a56c7edb63704dff6fcab5811 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Directory.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Directory.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/File.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/File.php
index 907a39f0e56f53b30bb02532a6b16be3011cb36e..8c73f8f63d2f587db334ffa4a8eb6b38f7aac17a 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/File.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/File.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 // @codeCoverageIgnoreStart
@@ -36,7 +71,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/css/bootstrap.min.css b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/css/bootstrap.min.css
index 28f154dec4aaff15b67944b3dc71e3b706793090..a9f35ceedfac7fc0559b121bed105eaf80f10bf2 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/css/bootstrap.min.css
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/css/bootstrap.min.css
@@ -1,5 +1,5 @@
 /*!
- * Bootstrap v3.3.2 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
+ *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.eot b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.eot
index b93a4953fff68df523aa7656497ee339d6026d64..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed 100644
GIT binary patch
delta 20209
zcmV({K+?aTodNHj0S0eR000qAkp?9d000000000000961000000F3hgrIA2t7cl@k
z08ju^03ZM`05AYC04@M905AYCk-?vTcDMjFb^tYe04-b+&FPBBVAxm5XiITQe|REQ
zI&v&8mNZ<O+!YQCY-!Tl)A5MPnhyq@MaN7=O|%`xfE4FeC}-4H7#$m2)AB2FOE3yi
z!LP_OEl)mzL&tw)if5!{eO&l7mg8GQWE+Kx2XMz%QK0oe+Vzi0TM`baO_HX6ABMW6
zRY8N$oyQOe8EW~hE^xx-U~7pgL-9#8*sBzfpKl0U_6e21cbnqCW_HEJSVZ=<Y(g4~
zoo6wLTQ6Y|xE+%VGQe#0mPMWav7gEYGUW640B16_Ijl{?iUtL{4Tm0)dJacKRYI=@
zwdO&lBuu%HeOStsX8d|PPBM>w-e13-;FCKjj%%d6Ktfx(A(%E$r!%`p3J`}y6bD@h
zd&u>`N>?v)lB+bTCF+XX-<cbu=!C*w9ou~zePi%XEi`OU(P2bb8OU40$^&tvb^x0N
z7%JOXEWvdRDhh_yz_;#tpfgHL+8urJ3NYmvgVoViYE^k^ZoVm@7KY@1(@!uv`7j~m
zEg^CM6A=azA{i!P4gdjSY%DEc<57^5oO~}{-4y{$xc;c{RtVoxs&#t&)T--A2e8)n
z(5mI3AsOTBYl<c*N_#GJkW)XItDR|6y?~_5WNB7J_Az%LVwId-29&Kt>MDyRadXR1
zM8Be|(s%;Qh!p_Ta0*3#M_`!z=_~ekI-pj#*eX~&Tiyk1@sNTM8%?Ph;0hA<9WLL{
z&Y==h18AbI&v9#+y&}B|!b%{bp-oga(;#EC{cDL~`g+u=v~Cz1ak=kpFyr8GL`ucX
zcKYw8p3cGl(%44lc7Z5@Q@@TV1_I*LO-Y8+wnmi@nc)UYyUlHXJV+C?3&r=)aejPF
zvRD;heo1qHA0G=MlF-3Bj3a_LvlPn+cofE%hAW2J%HG@U2JUTO9S;n}$Sp|)VDmob
zBFh-%Jr3FfErp9hC_eK8QDw4OWoL@yoQgLKrY-~fU#e<?CQKDe-w8Q-QoMD6L!-_Y
z2ny+xQpk-FCPJBiFb$Fc=!fEz(%oNy1`Y;8U#Ei+h@7l@G__YhnuJd1gv}x(8TcdQ
z{X~<0xd}Q-GzP#gsGIbI?V7en8{A4eUBq|j?Av6t4my}fIe-}xw8F0Lfm_t5D#D;k
z%?g<#`#3=)VPIX_o-I^GHw+JdBn&#Gb8y0jW(iCreOi`(maTzeUE^ZzHX79DzDWJ_
zgB5akEp!conviN%X-#U84^CcNqY<+>1E4-bZZ}K~kerVuD>GL%jYmA)LKUnMPpg9U
z*)l;os^znal1qk<JtvYq`AWZ#{zArsXpl0r$|7WjvKiO!{Rzq)3C<wfPdsVdirb>a
z;HAh*a1v>MEVTiwR_*;xs$QTPG*W1I5-kRbph8pGl9cM-TRBymAR<9-qzUNcZ)ht3
zhDNLT+uku2qpK2^uyQ<pdrqdrISuodG;&Fnn9SRdRsCRaAM<*263M~K2-$7J@n;Wp
zlBherj9Rjt)qFTa3=5xA9Slv^OFNkY$f*<u1E&0c%d0?s8zl$|`ki=oKtYBKX$46W
zl_t{@z{9)Riik9Vw)u}^u~9O8Fu5+5N3wpNnB#e%&B7y~Af*-v|5`1-m!-}vp#ZDO
zo}i2+YSbxp4lk_}9u}M$c7|b@q)9Ai1k!>9?x+QW;2zch$0Dz6CIjL)+(5BWCzB07
zv4I_b&f#%SIBZ9UPi4lGoN8)IY84wGCaBTY`~UyA2ooF%i4g6hkkexh&K(UAqDC0&
z&qrH$v5iRQnN58S$dFw)qItlgW$}pEHW9E}Ju?9YTmFIr(wav27|~YfNL}i1^Cnry
zTvzk2R@GSvU&>JEbWmG_Am9B^b>2QW)z>zEuN~py7r<D8Zf2&({|4@9_&=RA3H7<m
zeI3;4JQ#p92_WOnwq{o0k?cohVttXC3#0SDhI0#P(gCWHdrw95%x)uvCQ(o}L<K4Z
zLIg}g0E8c{1{*PjQx{Te_eA%#g1A^%vpzh0FgumB>)MEbHSG~K*+YK#)HI~}^SaA_
z$v^DKIv7y7eIm5mCE3+=bTyZ}ib?1pw1u2GzHGz(1SBD#vW|I8#Z=Tjfbl1{2?tN!
zba4g*VFy26;`pB&97S!LAm6gGL)s6NbLvxkEpA8*wja9qag?_sS#*F6<m`oO36t@{
zxfbw_qTI)>pL3-p7k$TynPNj%FMO$gU`CZ(vSKWWiOG*LNTT&JsxS6AG#n!fe%)ob
z;1Cdp{f5e8h_S?}BHb8K<Kn>Ji8tgr(pscR7S@YhC8FHmS(_@%LOVENMtF(^%Bf=G
zU(KJg-z^O)w;37(2J9)6G!NT9!Vqes7(ka0l{Ha+C#vjF6gc$4?MHF~w4=*^DWA|h
zM~FrRlr*-@M|=0RHjDD;mpkL5-qeY6o{A)TCH8TTxyf6t3PPWW9#2k0O(T%}JTNLS
zkuCx=1}^dWPQl4GMp0)5EcP^3)z%BS5Z}PLwh{&>AMq^B%Cdp7M*z71RSj7D)X@M!
zX;tX!JxvM8OSttw^ZXXL*kS;GZ$doul9Ypjx*dQ(&0Xlsh!BJTtcJZ|>CoorH|`%`
zJkZBfvL<pdJ=N?8?wtD`1B6zj!~QfxVH-rCG9QB+!+7}>ymg5J*C_~}pxTZak(z0R
z6%f%+c9fS2WMWA6Y3Y~670#0)@gPQBKo6z|64}7Oy2OO)tsyoh;R*(SM=ckNun&^I
z%mwJUgD-UGfE`1y@5gw^G!Z+TMD3v<>)WSORghC0mRpUO6dO-3sItAAC%P7OOHv*!
zZ2N20#;+%hjb2-TLRP(msVs<6;Yv%`uvA_}1ZSYq6kHzwiZa@mEEn%pCKnyinJaZ5
z_mH-C?d|oIgkq|?7li14at8xTi%9Xy#1V3}`yhQrhutcX=mU3;_wauZ5xyb|=E0r_
zioH@ffkd@IzoA(K2@0q^H%Fk_P%4l;E7?0vD*#X%3O?1K2Dq|#>}=MLxF{k8x?_9e
zhezFq`(MF$+oHy_NJT9|;gq3ZTwfNeVET|$fst5?Y2QQjPtWLo59{$EJC4fzv+En=
z;MOCXlIR&3B#u!-lmk_se<<O)4>vVLv<d;yq=N$DWV9U-ggwd>3$#9DTD~wCbnoD5
zrJ-k!$aXTjEyR;}kW~pCkPP%Q7c3t)9CX6Y@S$PvEGXhN^1`-=govB~jvZOh`M^cN
zhQlP6Hr8{@;_`}rLfnZ@u(ihtW2!m|xQO*S#~{+$*HSKdVMti)2qmvE8+l9uH_$=R
z;r)6wjI*F`=qdn|v2Hc<Wv`EzDQ`x`7`MD(5*S2fU>9g`B2gckx0J&I*;#L<m=;fh
z1Lq*3G;g84lyIkW9WarlPelq@DPjn(IC#h|0IzG)D>zkuDJ!iuEnQ1FjPGy;QFMVO
zv<Kv#1AV`dQ*LcyvK4f?_@W4~OiiNN8F%&f$yjq!Nouz~^+~2vY7H`ACCkDciVy<f
z-Z|_vfsvn?ed*vm8cMxEg?86O4Qh&)(&)ILg4mPQ;Naj?!dn2H08qUYBbn!69jsTa
zFdS5LEggP;da18Tge;LZn~_yA{3(|w^jw0Rly<uP3h?|>m61}4?@$}&AQf6}1_N>D
zkRoAXMYQR1cT6#X^@vql)NTuZKov&?TLn3JGjqAgJ0S~l?U219Fa|VxnS~EB4Q62(
zN)5^o+$n@2P&$AMzc!hvGbdU%T#-l+HQ+hB{!UbXzjO-uu6=_1Am)&b7CUzmOq>!f
zw7GN_WXbw*0`3=r5O<CNl7w#*3X0B&wJGe^B4z;tE@b+6>_d7AOGZw|qG%eNMw6Kq
zKmf|&p|B|qF;=wfVYlN@o(oD=0gKx#x<Y#<j_!j34jug)@g1&a1)&UZ7o-TwaA@<!
zc%e^!GROcWIGwt~3sJPdP!dc!WzoVDjgo@Ts2FKZ;?iK>pYf-c)Y6i~U5-&C{d+T;
zkZ}`E%JkwTf|i;E3{MVph=V->YLIwmQ1sjrjn1&3MoawU=w5rWrDlbaqdys5*)O6X
zPmEmXlRAV-7eqUmvr%AU*$$pwA=A!ecIaz=fRn!o<z>Ay2<5twl40seLk{*JhGaGr
zAj$`j!~03dnj>6&EZP}A8c6)aW-}1jW9b7`tl@XEvn%w?B#c#CB07ku!i|!Bfn92q
z0kL8zMRNcthhV!UT*9UP%~hB#BVBecDf<%@;nWDBOFBso0@v_kv>Y^{!?P}9Boh9A
zL-5`|X6_(h4lBqu`D1t_BNtoWx{L{CCJbmS$U!vIEx~7jV97t-B(d=^3^CFLVnQ{G
z(F}oo%byAaSYT*^9=u-9&iFF7DwWd05d!20BD$qur%<q=`BJ(SZ?&Fpjq9%-*Q66E
zYHPh5H=0Z$wlm&*dwD>r)w*dHvilW(tam^rx*dIIB*qwXl6Bef!xbX(sf3kZhV`3<
zhFfk5H-9J&ufydj#YAAV=25um^0dX2^ld)3K=RpRXGBDPcyI!cnd_1uwtZj)6Nz;2
zf^XJHs#FxKb-eYM(t#<|&&k9EZ8sz*5dAD@xeHhXPU3PF2W$k72a<LFHD5e`gJ<8s
zs!Yr*)S{^WE6rYz;0ExB)5L)-EEnZ0>FH@{&V$5?j{~sW*+QrkGK#eL(*Q2KpseXc
ztePQS@(KS!D$XWolcTNzk+yn)fDl^~bF7ws*O78bSY;EpK0rQO#*O5`JZQ5*+^2B1
zZn#@2vb5nA)no{Rrp^>_EY^#E=-lVRzV<*%5M0I$l0+m^Opw7TsKp;b%hp7Ju7|oW
z+;3MC0w7eoW{$GqlY}Bb2=xm_RDy~IP_I!zD%mdui5}IEk(;~`T1%xfL0_85UX3db
zwzaZb5;+O%0|M8u%HQ8ZX20zdn-sO655b|$kJUn<P<T`Uw20C@A~5KG(rW$eRik0x
z(MrAPver{oo~MtMY21eFux;SdzeL&OrX7!aEs7f;bLS9g3JjC=<zv>j10YMm-YwpZ
z5_9;Nfn`LHc+9thdVoZhl?_CM49vFCLcxoVaM^_ntqlXq0YN<_Vd5;H3B^>-B-U&>
zu_C(C>cWhEGo5Yj@=%0-7m%B1xotMM56XyAI*8W7{TroWYo$6M^%`y9lrW2*8~^%I
zEV0UE&6WApig^vZrbbdc^bul+fsq2?X%rH_pg-Yhkb~4z&yWz4@fQ+<mXJhxB@$^k
z0-K8jeHp>V?H(8M;4YmA6mtZ(#+k0fGfZ9ZM-LNroX0d{8LV-C+Uj*YC?qMRU{$1_
z8`*g3+rK8Zgx{_Qz%d{u-NpoPJU-3DtX(#g$=#11pu$r?-3BJE#+x#rsX&L)6azH3
z*?;tRe0zt83*V$Uur3(RM(ws_u!ZT*=A3b?5d?C8D1||R)-lGk9lj$$L~tWE%fT4c
z?TtNhQtt|T0Qz`;>QK9ZD6Q;K1wbMLoYnu=-lZnbpj|wPt#C7Y^gi@q1q-@)TeZ0q
zN+^evB|A+))aMuseicq+Qai`TJ~U|HSrhbX=TV$JrFp}qTeM(Yj%W)DI!s-%?Vx>v
zeh)BBiWHQ(*28Q(yHupND-0A&C|E*8f|^%yOZ>FtOT!s|vfHLW-)*tY7)Vn}CV&t*
zs3|cKUwTBirU_5^O-q6r!bd{@Ah{+^A%NDl5M_MHxolp9hYq@j44XJ4HOnjxyPzzh
zYqG!uJi#!D*yah@3XyKhE1Fq&${iRo<4<GT16m_i#+Hi|o)&@TDu*4H_W7{Srou3x
zsBBph`t%roVaV~&1w%r}6n;>g%s3QG#Wi6z#I*Za`H{LRnAThi>v|o9Y;hKWdW?U*
z{r|@YXi|i4v!I%rDG?edUGQ|xXuq*W>L}d>S-e#H#V=^3V&XNl5w<T+U9(`&o>mUb
zS~cq(nnn(D3Sz3o5xR>0OUPk?Y2p}ZW%|(h<>|$LO3Z*yFHE9yS5TFCL$`pU?9u%G
z2b2z2SQZ$LZjB59B>NvupF;+lu7473Mk;q_MxGqM_{9O!JBD@aX?eyd2a4gLKj;`v
zt6#ucXaX?~GYi4Az#QSY#GZLrU;<qurwE*(9=I#uSe1s>&qxy(0j(o?ZigMk=l)PB
zdfIh=fo_D8*jlZ~OeGXFx^98hL3#(Bo&b*gGkKVhR?J}w_kE);RwuUbpwBYiM@5{>
zsdOiZJQ>F5>YhtF$!TC5IFL=*49JH*Fh<A)Ba*e3sf6p7xDitavC}e@dO{(fjUBL5
zL$wTSEz4s%RBYvqpkkCB1msW^9s=GK;qXa+*;6~EqM=I^1lP`-@9Iuhpm2A6lFd>h
z)#N+Ce!2_5e=TAe96J@K9;c6e3#Bta!aX*fU9Z!of!LBCL3!XXrf9t>x<8xGC~scr
z7c!69QfYl`TgW}nam2LaP&6?Gl&H|hIP-<Kp3vzyhd@G!Lc%z|QfhEM(B6v9cEay}
z6BJOvEhm*rRsNJ4$4nBIv{IerfJ5?OJ*4`q%gAykech;QoTs<pj79@+_s|kHlt_yj
z9%2DW0W2C9M#yibF^L$w#&Y^6BCOT9xCAEtCTvN2CI}EwX8Hk!kTPMETuca$DM86n
z+kwFwQ3ClySdo!`+d3TE^>(k$VQEKyM-F!#-nI%F2=?MHm=W@gFeKMcFeV(EBlJi)
zrm=4*(C_l(b5X{u_aYgZ#_|*Y8cp!{{>O;F8LS^n>K*!<$2ZVSH3bSAo_UwNfGWwF
z;=c*OS-OK7fe<Cf19!f3D-JatHCneQlPTEEih<J^LUs>LyY)-rxG*{-)yu+vyU{oy
z5-<)O;Xz{Yu$oH4BROzF%z?7K%KSh@DDM<QqIHE&*cebed}tG#8V#HYnRD+_`FZJX
zl6XL<9g3clW^y{hgpg^7F&dXz#}uwYOm5Mu!UW{7avXF?EivSH5$Y`c0!H4TF;kpk
zCl&VRF+=|Ho$g5swh37W#pPaq5W)gnsZ|ch{PjjV0sM@=6!OB(;*~w}<2Dj4ROl_e
zNWd~jC(SsSl9foP5;?6V93(4^WD9FQOROk}N+$>&%5mmu3IB6o;<(iDqbf`}d4e)P
z761&onFOI>8kK=99v=d}^D0pN5o?S31seW#16LIi==w62Mi!6b9=EE0r|h2(zmza2
z+1d`p1N$2Wp%dtt*yZ+@kmz(&{A_58(TF8+8K4e^2oa<~E~i_MvBeL}UuQl!A7tR_
z>P_`{?ieg>cN>+t80@l)Eqe;Vqu2p6bo+O{;WjaSt=|w#$nY4vccEsn>87>r-3ZzT
z2I@x;gAeJ42kZxkEC^_S3>lR?KjV=C4kAD~lRwq!2Pi&{)M{GVS{^uuNWTI#sC4s%
z59t@<$HA1@=8?mRhxiXbca4L(X{v+>^!?)vOLcsdLDWgjXSHto^s6a=l>xMr1f?#0
zI5>eu2tdjz2(AChp!jrn0#>USeoE@b|D08KHbE`|go%u}i!g3~DiDz(7w7;nE&Ly%
ztu>N4m1J@J)&;OX0Pi*Km`oNGke>AL&N!<QcDg1C<A8jm`^namNi^uGBuL|{%3Y4E
z>ssASRcbF%Eo@v9cNo{LPwR{T<y9aAOi>xnDz#vw5ON89YjSN?)0^mPUUt<=!}z(v
zQw!QBC&PHJ*->eKU)<rXl4PlmG$;g7Zp#c6;k;Z_y_PMUi-r%aRzlJ%4RsvXcx16g
z$e34$tbky?ak!!hiUv+X3S8LaHL3_BGj_4T86=KRBfb;Jr!2ve0+cE!kat|Ezx=^y
zJ6_7W2k@!Js*DVpCz4KCZA{9)?Cq2y!}ID?0|)w2x($kdqZvaS0eRKOF0<$$<?23W
z4X#8Ri2MtxYtj<3MA_(x9dDP=);aLD_|7lmhR)uJ*RGF^mpwFQQI*($iR32&Yc)b7
zas*5ol@<|`?4*Ho(C_4e=}D&&OuZ86_5VLmgdsjnW(P2&jVqB}%c>#KptS%#HN>bU
zd6>EFUy@{hkwG4mD-_z*!ZDtlW-HJms8~SO*O!Uh*2Imp6%&yU7~_qK#TUC%E^<3C
zeo|03G8@I2d>$m2|M+jJz>!uIvskA>Vaz|cvR(;dewzODp$IBGg~&{PyD*KI6sjcX
zDf$i>q1_+}$`j~>dC+9YybMZ%RbS21Bt%8a!^<*%kYllXK_NSm_F7K~HD&($HUg~W
z&k5u1T4m`~|3khlTBQ=rqO*$&p4OOa^cq}dGhF;-?j=gK<ue1ED+x<Q_P`5P<dgv9
z#*@iG_;560e{%!HoOem@JwJt#BJl)xxYMAP*MIuagcB`A>&eFF|Fgjg;|du#Sz_NL
z>faiFqXs(ViR$WtWhoR5c^p|DQ0t2hJE6?5;{alc>15$gDf4&xLP2FWH#dC!tt$T<
z8Df9bJVDgzTOAwu{D9w>03{I#PnP~yYhIUBE48tP1*SFMiw=YZ2~8{)A?Mtxh0o$3
z_3eV@hrJN!yD8Mc#PKzgi8;1K|Dl}HiXQ`iBr#q3vJ)uOtN;P6vBZ}3P};Jo1Zrb5
zc|)N_q)`GtWpnPppJonpzB(D#4lD~GVWDhC*lf`{6wRM&6%xkR{@!4`^_Q5Vx@O+h
z+U~)j%@;Ofw+nusx>{wU8M|Q!$LVoj{gMW?i9rK2!eKS_<*OL-6*1s5Rb`Q<zNXfH
z$sVgVfd!tDqlbg=YH#0G=lXNFSZ~gQ@O#Azy^@eOd6M_T*D%huUovLYN={CQUC_t2
z&|(twR)r8i{l}V{HEa??K}{+EnpVPg_=r=C2H11J|22wLXNOkEx=jN0cfQs{iu|w4
zVCZ|ihP#3qh7hd6h<e_J&D;Z8bAji7IX05Rv?`1~okmnZfZ+y8iIwz)55}r9p@in<
zq<t^L9TpwSQ?6lx^MxDe6OdKa$f}HLF;iheH-6A23`R|Jr?1bPgREP*K7|1*xgdM^
zF$TX`bBTcj!s`8k$e=(Gybzu9dMF(Oz81VaA=rl9H#6|wi2xSIW{Y}?AB|;y#wf!)
zJ8xydGhYQKMA`USkdNN;%^nlHb2TDjG-v2!NJE6OnQu&nH7@=();bfaHRydgBu$4=
z8Woosmlh`^!osCFL=M|?V;D^d#(e1YDQrmvnngJs7=Rbh8ik)DL%zK=OvxHby<oWg
z9cD`quZXWD@;tUj00Ha;C%Kw`g{s*UP*1LT5CD;2q%{E@rZojRgx71Ryq~2fiRAj+
zacB2+b#a)8om(u3kSVplS_NVZhH-o=2@}^m!q^=VZy8&d$OR$J1}C(cgM>~M2-2ua
z6{Sd6g}A}4nUTqyB60!L{vF5^gn<cW1&)qvzh!8wDHbT;nC?D%P#G+LWhM>RCy>Fg
zQ#X)dkdC1O$~u@8Zk%xG0uL?3g-d$1ph#$UCCRyM-F$4{oyv{Kopg}9fQ}qxqvPW+
zaXC|8dM`{{*9%a4DV_v{7I?P+zU(f>>Z5yTwDpXCOoQ3CRw-+W*{&WJn96a0nacB#
zfx+GpJ8F8UKw{D|h*5xlV3Z6weibJ(<H$0iYW0am*wzYmlTp*r=u~7)@jw9=KHRzY
zpisn4{Ben()84uWrKPYCNYR!U@3YoQiA|`~a!xYkQ4|0<eQeBt3X&)`k}T95L6+JV
zJ0L3+)*|@YI;$v&EhGb0@!2zYHnKrf!d#gZjUuY!dYq_kAlmnTCD<xrZ-E7wgg|c>
z%ml|uOhTZuasNqrX`EEVP9B@{0UPQLvN>4g=4u@ok{`M}iZeNhyYeTI0F#?c{89+J
zutFqdS)$U!o?(E3D~`bwDD{k~5pFUFbr!=z7Y<`QVvkL1@`)h`OQH|K>JsOXy-AjO
z!OB+nb__~N5)nIpEGKjjGuF^XjY)JQ9ZOm1=w4Pw+%Am1Jj<*>;Le!rQzu`y_Sl|<
z<_wrrtq_(05XDu+QsBMohL@_SQ{~0{U8Zm56?1ttJ8dd5<3uh@<s&Urp=DUPiDFCv
zv0;+#2;~fp*BuX==M#F#IbO);&k6t{$(IOL*2soXxvVaKR^{$Tz{>Y&RwO#jt+8!2
zu%qV0(+eKn*=F=pCv9z?^a&yp?CI4ZjUPsPa5s3(IoNxgYG#_RLTnkexVE1%n`_E5
z#~z;TDUmJ!zRrzt@<|xfk$jz8Pm-+MK-o#T0$&4%aTyDhct~8Q#={dRAP6#{Dm1L_
zBqR*p+tmhtG+$4=M@rz1?`FECDmKD@KWT7gD35GgU|e!@#qpyH^XegmzTAmyzs1OV
zF~uIsV2>Cql_{cwU(b>R*eYhD3v4JE;M3$FUX6X>`-0IWBD1P)=S`_kGRr5hRhix?
zd$T#Pl*LY4+Si;-uF0RYgy~6AV8rAx@T}bq-&7`lsw<f~rT_N9Z~vmg2@(ajvPBJn
z0rGF_0E>YFFxN7UCkP=smm4MIkrEfk-gG7n>(p9InWPd@Uuhc|%`%@Oe{L^JmzVz{
zSd_&GOD|sNnkZ=b`+h5i;Q=ghpx_CbYirJOft4I2iOW}@x7UUbCDFD}zN(fs^+8=(
zhO=CM73VC{J*sb*FOZ?m7ZK@)2SI>BT;DG$iX0teBq=AYq1O5nQO6&CAjuOs6!JFL
zM)JjU_S~6JRD=q|xiXLy?t9RPC3*76-$z!NP%X!8?;vS~?B1HWQ)y*H6&%@slxQP0
z>v`5ziGZ{crS@{f5h^bV0uX6M=!B`z)h301LDS`}cKwkhJWf;???6^^scG%Q=2=y}
za0e?vNFRHI@CC&@U(&-J&U7PsX;_RS5fyT)^-{vgqfOD$3e`AtXn+u+VOq-mp+P=j
zs}Cj1g1&>q6A~(S^|>Hmi5S9*0`)?JJ@Zw^W_zqCg-PR1abFC2XcaCqW*19H+6erA
z8VhD!r%uW83{2Fi=~&8*kr1CfrW1Nn+XiQS?T3v3;aU{wRom7OpGt@#d5Czyaf(Iw
zQ(8p2!&tQC`n0A>k_ApQxJVb)Pp1=B7!F^uSTFNp@#E6P=vi$~bSdtx5pwP!Da_~E
zZAMHEE}T$6kT9xa;Q6y>a#V-IcxQosg8=6}v6x*7uronF1Sxv;3sqsYFp&m8wIF)e
z#bg68j{?tkBA;qna7<t1R9{2I#2^A?3@Lu|Zvero53f-ZqEg7yPQ4KPzj!mlj;Hc~
ze3(=sVk{tu&@v_p-(ysoHnRCZF(V*|7%V`5Efk95+z*)}yp59Qdcu65R%2LyoRh8a
zYc&v_ILaDV6R3_A`dLsRgr1$e6WQPf%v>$|VDZ5er62>le3&UbQ%>d<1)$#s&SW?&
z5s*#`@F}3OOYkh|UKVbkNOYdu?7p=RgibX1MI;Cbw&*-YG3Oh`;(ny^T({6!FR4{=
zV&)#3I!PpOs$@xfDsZjc?>2IO8o`+=27j)Y%J2vGKlp$#-F?J{I{(a)6;Q7WyBTlf
zhmD{V51fc^BsO0fj|w7^;qdMvM(ZNE1Fg!^de<PYK|zI>EJPAmk(CLgH=HX}xiQ=&
zE0i&}02j65QtYEEBlZ>8{W57$z3mG6aPUm~S-rHC@)B~d`oLjGtQjDG&O1#k8W^Yu
z381UP9mix%6I+<VkL*}l>isj;qvn33GbwMP_6;OSY4yDes%V^=Oa=RfvT!B`+CDOG
zZ>$%tf!Ra=`80im*rt}W96d~DeVB)u_v7ovP-)6J(1s4HE{GHFjd-{p71z_xa28aC
zb8-F}_4?KS)-s0TdB?whVJ$~>PL7XgSV)^Vb^PZ~6RoXj77itx3@Afuwk690i??Dq
z&+dlze5ve0y@)6ysl8QzAnjRnJr&}(Ctw}YgCK#%(mwaQPSh=<i6^ZX*S`z03tjIv
z9XUazFeV{KWg*H5ZQP|JJSt4^!lP9#j)5`Ys6A3i52}YUC%q|uJXbMK)xtcyylr$l
z$KRWe%*eQz3rPyKRH_hGZ3JX{)T6iAS~)J*^@@~{d0nNTD53JEP}?!kKHgxrKC+t%
zZ0_}`*`{b{B><S{;z;^lS;$!}VL_9T3;1}8@SSnCg%<2v&;|@Au^m86ULbKDJsU#B
zQ3Af)N6oP^mC)~hiSJw(tO%J)h|>`Z^>4ct7oS9(Ie7JW+p|dxiJ>?w0SwSj<hsa-
zxkKr!JEbR<6c6PNg_tsLnGwNt=}_GRa0{!rLk3dR%+$;D3KhxB=?ez?#Cx24u9NG9
zv;uJRV7N3Lg_?BZ4|aq9mRPEY2|!r>D~gV+wT(7<P(Lhx<H4Lt`mVq#w8U&nXgVC5
zO#sobrxe{}L-}6bW)o-+v$sUj43NL!U3bJ21WKj>;|H|a;|9{NgR-U}kfZl~HyJ->
zSq0g~i9x!Q$08C_`$diJ>$MfMY3SL~L^31QrO_lkxwG&C=kgrb<TQvnd;f6TzjK=K
z#{~uz>pqZw3eFnE0MTi3a^?|K*N&|WJDUjr^>G!mA@_A(5Af-vZYBpc(t%gkCFPAb
z8VVQ06T!p<Ujz>av<nks#5K`>;_%D&IrL@(HH)KiuYO7c2d%I~rBcxZH3q^I=adz{
zWrKu2TbWcgji0i|25n|IPpWdBlk_UNek4&JW8sE>9F5wK#(_IRzn#zoJ+4JxolT0a
z!Vu_a2WV2HU?2rPe!DzCGc>MLN06D48)57?w9XW;b{%Ha|Mn){M_anCRr-_^B}f$d
zEe}{wKp>b5OOOJPFVoVS{mnpLFzuV&sTzzYkl1D&<J^sF4s4go*tC{hnT|r|p!-K3
z23`4o{1#U~bF{?F2w3ST6;=V)7=;yj!HpzF{yUzhUCc;Oy?ZJ)%S7m7Vl6j(idcYr
zj&FW#ijDNp!Mt<Y;d5z1^aIsOTQGZ8wUW^b<*8gfR3**_q(e#u&9!YgJRa#2KgVWE
z{#^vr56O~4d5M$p6nlU6ix{pAP!0wBh_S_g;>M5bhp<PsUP?$9prSwy3S8`ynq%dD
zQuJcVg6=?V18B97R#TklBQ%^H0;70SYtYD-(8_+4d50?IgK_mXAOGPdXP1{*&lABv
zlf?^X@QY&H30Q6d9FHOAB%e3|Tagt-Cn&Tji4gtxLjpG<!%qZGXr~xMGaLL45fxT{
z&;cx!ktO2C>*NLzC}mPJIRi-#=Y~kBL(IGoUs*(Af;$v*ev?eOxLo?rWn>ZRHRud!
z66nq|{)51jv88jTm7UR&IZ3CIbkGCTavak1&%?Bfi-KuuSO$X881t@5&cQ;TqBTbH
zlit38Rn`Wu6V`QH-Yxd=DlY+51#@?Q*ZkfJ1f}f8Vjve!#J{C&`%f9!>HnyMZah}_
z{i4$h0&Kv3@TonCmm?mT0H81ge)sM@iYAq^xbr6zfM2N^#07|xiDhHG+<8yAG<N}G
zf->tZS+??T*DTlLkt4H`h<Aml;KjqEzZ}&Jfs)05aU<5G_&Y0AGr*L^nGdsnlZCsn
zc15EK(Xh0B5X}c^nV@VPUl^_pVgRnVOf8l%v<U!FT#EulJtR=`qpec8&q(0lL{H%l
zik1Ly<ya8%)T7i0M(Ls4vQvcTXn}K6>q#UBtk*>$%~Z`3r^XCr4c~kMfCgBgjQHaL
z<mvFv?*W?tOeS$uAk=Y&2O(pBU}tb7J!7B_Kr_lE2%SrnH3kRyA(pwDC9s<hg(J{r
zQ_D`X2{_JqSqUke>XS*t<L%L!SOXrCa0?6>DCvAiK?nQ9&?~fhP9hHjFZnZ1Gg_$W
zUJeRaU(7WMZ;F;l;HF<1$gjjD@``X6*P~-FKcs@!-13pB0tB)*Zsq!a<+nOG&I);5
z1OiK^IKW}hXoq(6%H||4KHTaoF-Ox!Th)PhWmt~(lMr=k+TVH{4SK%Pv)!02HsWBW
zIn8AegpIk7x+DYyoq=`%@f13r&|O_XmlEQ_FARA?0VsOqsl$#6^z8<{@-GQ*TEJ~5
zPCGpuGu$O9dAqs{&M`TEqVPuEOcE#_yPap$Qou_<3_BpmTqnmT^Ihiy%&~<sX%Vbt
zf_8P4og)l!&K#GsS{Lhnfid9A+cimDIV`rY?S>#X6H2#fDTqiZY8w%!{Vi&=mUZ;E
z0o9lw3F}X<7EcBBzSH0@u?%pG<~ozHFS;3r=O~Li-cmwUnm3()Wtn8cN$Av0{*6*d
zqdx#XSTK1w2T;GpawF$r3tz6T6SomKY1oZJW?;yX)?sO@GF7^Hv1C1<6vHyC0vZNi
z6~;tjg*maxK<b4$aiEhT+Kf|hg+{o3tJ>QlHV#xoXR34v(}uww7YekvD|CnQkkA_T
zNN6_<KGIa6v`o@}j0w^t{Xxf3E0Pf)ia<L%6r$JnO|TWcv<LEjZ=epOQ#?8@rDwqT
zCY_96B(@?$xKLtIEMUGQ<Y1Y--h9fN*?$AMw^!FOIQ7;MJR0B`g?{`b!|W^abjb>X
zK290<mfKw|ZHcV}2LPjiWeKrDHSx(%{J+QF+D>D5(Q%P~MSX7D3!DA%|L{UKIHJfk
z35&^niHcQb;yke_4*63MV&hS;riZ>9QlhP~RcrPeDNILGDzcJBI+PwraDycfc-XU2
z#VOsw<{ERT#PTl9fW{nBaly$~YRb?@lj-C2{b|+9(>$6r7b)fnFB9^Jh_f<as2kq0
zsk;{D?%x!D>}ZklrwG3`t6=MhuT1<8R3IG{rojmHjK#^8s%{Jzl~Dlv&{^y5tBDd^
zgaXbxb#!Q&&oUCwHdhl`VX|gX52diEa$vb++N}^VbP}+~ErBtPk*x+{r?&$Z?0nL&
zrT-Y8AQ)#b@!LcE#_;)R4i1r9TaWx+JJ=5zU`9`WaAID?tDyy#UT)08#ph59ZAw#e
zG)pR2vy01<2`*zA_HMv#Z4$WRMfDYc@lfgK6A%23i)aFrno6zf{A|^HmaYc_qnKlw
z`ymM-;aZ#mmgh-6PGaG@RED8&`5B7gPzccNbtG$BL#`$JEelcAyBVs|QA`ixxfa+a
z0}<PQ>;v@I!$LSX_x4KibQGxP?WS?Z1!>zD;iY2}4;Gm+NRGv!MK32;t6raZ@%E`w
za&86HrYZ(-p<zpaBQ-G^<vsh%x;EJh^=gqr=A|PC+&st)FG<ajG9Wv|ixD7TQ&{N7
zAJmzYu8<^Z?(Yw(*lGgXXY)y1WUu9=PujqL02-p*7>mq2XS1&lNJR+7s_GXHC^1M#
zc)yZ$F~GkM4CE~v+tA1%^qesSv`nloJW98a1TVzI!q7jvws3nu)MbchmX||rR&o?$
zv<$%+5B>#H*<it6Pd-?%-1;T7n>~VOasa(*p0LRXdwEu<%hU|MP~USLN=at*O%L^d
zA>ce=m6d)pb}W<zpQ(LlzlYljOzXl#DE@d-7QIF2Z0vx>vE_uJMuh0F*8GZ6BTRtZ
z<n-D#jrByO0TkbvT4Pg|UrW9h{lIYwy`q%x(HsQJ6=<+x!+?nrc7EZr;s>t%qetRY
zhiL!~RPD)s2gcShEl5l*J^vPxK!yB&bD<k4sWK3W!45*wHH!Wx(-^%PAp_hJ()zfU
z$V`;h{)&CUfLJD~{scLYiIM9G+SN)A=&NZ@)ypG+9&ZqlLb!*pc>+2B<z&wxBthH>
z@rV%`TXp6|6njM8P-7ow2t%5COx0gSJOPpUaT*z&b&Z&PmdqDM#lOCoc9zF~-P}?t
zWmU1cSzByfyzFX7geq?icj$p(B&b9!s1=mKw=D{XQ;pvF7GuYNNfR3jaJBWJC~_oQ
z;T7w_OjDE>aWTVejRkBB32smW?$nt0a5JzBIdolg_&PfqnluTb4TMUS!RX*z6nfUb
zEhCi4hg}^Aw>ViF<30H)fxg6lkPc_U(=#G}3IGu`cp3aJpDQmG?OX~!I8mfI$T2Mf
zl-{g7%39-XMt<V(0-FZVE(N8~tZ1_|HrpJw0+mWfs+ZnAT}g;er$z;+*y3&tm@!0?
zVd54xEi}2AOA}bt12`$E1iXX@7TZ2Joe&8UuY@U(ar8ip-W8dM8|T1(fl$bjQkOEg
zN6{6Ov`IKaK=Zh0R|$yHRK8JNJ4-x8r;>J)k{-tu_>c&45yGA$m`=eeh0@uzWm1R?
zI)p&Z?6NqbzocC;I?Npc1KKz>N0}m&v=)BQ@>Mur+Zi+?w7B=<p=yq5pw)4_K_wt8
z@fCd`!lpR(KP)vTTr$#sVewPf9F0w6ODPq!kX&4~GA_R5I!FKg0+FcDLF=et`*caH
zBj^CpMd^Ip78ex<&(N4F+h|<=h?Ox>hT);_J==!@`KvtWL;-wuOdFu9C2rfFw2<qv
z5lo;HS|a*VUmyiUAc_>?gp)9&2XjL}9jdioz&8QSd9Q#_I{I0EWSk|e(Z`4-MdIo5
z^gOUzbNU*dhEh)G!#Om<9P{}Wp9aM5uMMam$_6i~V{bfLDaq6%_A0M_qpIPRN>OUt
z6(Yu*CJ;WW!#!X15HS{EvJk+&#qgDv@eY5M3H*u3u|V3+c%pw==Y!G<b)a$-7G$<y
z5??VIu~eukABIbR>SER71J&|-0ScCIEe~#&l`HDC*jG6}qU0La=`NuiS1N6vDsCTy
z&G*!#C(|2|)GiN0K?acMLu8Vz!@Wd+LkBU3ZYq*%T}FZo4-=IQ+_X<@H)-+#02>e+
z8R{jV4r5prYXsD~8zpHdug<mFJ;ZVv6(k=-dE-?ZHuB1UiH$qaV}@al5&jKpe5glq
zIu+ucIiqcDmC{$5k+fdJo{-sCxyEIX1*BC$?T$pAQMX?N!mAhr=yam}YP7i|RcO7U
zk(A||G?EhNVez=Td<lPnVFefs{AEJ45QM(->hPf;(?bDOP13dTXsF(U0uMNs`>l7!
z1QEuh6KQFG;>HzlfvsR2q>KgXX9Vt%HqU|GBNrBtO%MZg%8isiJl8l^1%TY@re5kL
zcyMMh66{lP4QW^irCG>Y@Jm!S4KFoObcdgs&ZeW)XhjBka48T-=St|H<XA%)kqn3s
z&X7`DQ+*9_7MxTs`9+3}Iz=qBG7(S+fg$8t(@ubY#DbPo;Rh4_wia{M(>*lI>6n93
zPMz?<(#TVwi+2Rj=y@Y#@BKJOHauYL4Ku?Bg%MfHq)h;e#63A?9CRIXG^`5{8*z=!
zIiPs#h5i6A#i7FlVMWkqj72wyz0)8Y99!$dGXaU6ZYY^4Dj=L}pFEbqkYM&y0<k7`
z2(7t)eVM=#+T~Amnb#F4s>A^jAq)~=nF2Hv@JK-w1e6h2Pr?3#k{{5ugNhEQJ|XZ4
z@GFqghJZC8yb821V2~kKLNpJ6mjL1cU<Vj6Kn~yy0J#HL0{|9)kOj;SK+p&%AmBIw
z5(%Ih156b_O+Xa`_vRisdXMf;Yrj?Sui^cF2hF}b_dmH_ukpu+zt6+31DxjU9`o|u
z!_Nbp5_02#?x1sDw){%u*FwBJ@%zq=N$kzFeZc5*v>pGgG<n=tO>I$X-LE!}8Lq(R
zCAbj7jJVE>0`U)j(1`v0W45_Q-6%G0#_?S`oB@|V6?dW_ax^CbeQ+eE<Ev^ewqpl>
zVkM>*oeM0tw*0HvTOUv%Lx;|^h)hK8B&b)($OLj?M|@ORA=P3=R3qgBR!lB5g8@Tu
z3_K*n7b;o7CLp#VrNo%3(1@y3fT^T_sX&0LNYPWVf~F$HN=1s42o)m`Dn=kwY&fXE
zVNoE$p<u$Gz@ool1$x1X?t&H51S@8L09Lc{T5rW>zZHgfD(LK0kJzfeu~g?mr_M!6
zd<v2`6&dO(CDc@jsHo!+Q8ogh%SA!9ih!*Z@~~I3y15nAx~{0os-k+nhidu~r|1Ts
zzBGN~pYBZGZf5&Bm+SsNu6XLSqN=uvsy-T~SZb9as!4*V)(WgxDy&|ro_48!>Dr}N
zYLcC*I(Dd~+M(xagWRg@ZmTuAtA?tkTB>Jisacw&wrY*o3z1eWKKLSD%od@t*2J~4
zD@vmPAv(CeJXAEh;`K#q)eo;!BDGK&)qK{g)U{ltD&i?rK}w<uRSQn2N_9ZessxQ+
zXjSxuUkBCXby$;X!y8rP+OGzGRdO<`NtIYjs=8fOQtGIeR3KeYL3Mr#tIkzivZ~#c
zR?w=or2U^K?O7jc2>T>Q*unn7kM-z(uOt0$AM0S%Sca=uHCj=s$%|GjTCoDvdlswE
zwOs|O)+JUkDvSiGDiWw*N}zEn`-xY$I=R8s!Vaydb!&sG?iF5;s^*1%R|Fciz}2q?
ztr#_D0jnGhSa52LfT}C~Q19x5zf=YKzMreX|G6LgZ}IxoY?7JT65y1?aK8PEh%2K_
zDj<IoG9=_Xf^hn`6AlJI7ABUgIDtVGG9*eB3?eWj98LfL009F5U;r1AEi>+$7K&ko
z-Obi;ILv~f;Ls6S`huc=iijgs5aK{sCtwh;Y>wJcDf^}3s&B%P{Q0`OZh|WSxNPxw
z(a?ubJKb1#bZtL0ISfFnQakWdn{eok%G(!s>gqzBYZGz8lCMmwUIKGFm?S*rfy+0L
zF<#TR7ZD|rfdCed*zG4(H<wyS?ds)^h6a=XV!N!v;TZSz%$nAJ6YDKtZFS!o49Bm?
zoah66h0DjlMg%Mh4vxOP16-O{28-86u19thWkzp8UU6l56Y+<ME~QEqxXdj-H~8Ms
z5@)0?^k>mB;rWv@RvY7t=Prl8!y1H$&KDp6Os?9mpqNVK(JBDS@!!$|jvh;q6_gT6
zK|~E9xEv%r-@syj7T#ub*~B4=&y*&j=^72+@g0*TUIV&59Sh2@0Qm`k0Hb6{WQUK}
z6mt4fT3YKQJ%$PBVvlsv^To)h)Xs}sazjD9bYED!2i7Mp#29+CVrDR2`(~vMrjH;5
zgrg9iL<J01=&uMjf;NsfW-q1}J}-zCNvx9_!x&c>EBpz6LB1N83@0{~A5Nh`+PT7l
zvS%Wg3>=jm33TM@RH*vWxkO9@8tR?+WI#h(G0El5P0TKN=AKx=Ehk5hk36ko^orO=
z?8>&VMA4Ahpkd9xWh=UXzk-v31BClWM^1ZQY+19Hr!zG>As%aXFazbdYCY5Rm}ar#
z@IvOi?|1WmW)&pviu^%M`$9biK1}aIUx|FyzC{)K<Y!!~O~#k}P5Hj>AyC&-mIStl
zJu3Hkh*j8z`#kz)g|8{0xN8)3RAvfS7A*b{P)ECzdA(*+{neE}cUe}s<!fFP=G~g+
zhHB*+9_G3m(&6^5Yo&Pq!U(sB{H44>ip;=0m2gyljkU*8djth2%;DE2t^s?0LA{p%
z5VwR&n&roCo58Qt>mcr}0nwrdzf44WGcch1xmf6b%-=`Bqs)BavrYE{WAgdv;7kFk
zUm8pQ4VG3-Wfd}N&+Q}y<ZdJ+c^Mp%Jroj|M)S7`mOt4GA!Q+zbd_`{oUcF+(FH?W
zQehK+qilkqZl0ZzPh8l63;IHMZqS)a+-QZFw>qT3yqhpdvV>ySJ=x^c%+dX4bTMOc
zCX_;}4TGzy-T1t8RRCDz2D4RH@pwxXYw3Dp;hb9u;6iET^B88y5JJkIVetJlkn!os
z(9*=xxgCq+NJit*{+hctMu5125CVf14vI2=K(*Re9>z%0u~!lnSc5IvmJAjY>fX4#
zP??m?wR-3a7#M|7<^WKkBycN1DHtn}OFmrB2@U)MI|7tBLgGidM0k~I*eZ|{93Pgt
zm}SeE!sLS!!cHy7V#^JL6C7TENszAM0}txe!cN<^8E02uz^;>ymkueIP6}MwB(HdX
z2P@|;7Nx<AFdWgFq@t@bh=NgD%u|L#8T(rrXIKp-jNr|Do;$*uWFABTa|n=wt!lV@
zTOrao6J!jxlnjK0Ci$m%e(yS=Jn+uN#5s@%{ai@A-T;?CFn8ZUR4GGzB{MUkNIo!f
z=FmOp7z8mkF_lm*D!+M+sgE>U#inb2@xMfvG(L$i*qEjHLXm9Y2jvD~Vhw}AA_6!O
z7(Uuhg9U+zC-Nso0%SpotvAJD!Lq|`NfB;#K7<{^<gCvrMvz)lG8cJ~V&};+5Na<o
z)+qVrqR}_LM#QWnN6|Gh6BG%&W}6PT8z_N{&W<@6kTl9kwIwPt%LTF`5eIgE&R8u%
z2CR5+I_=79)SdE~tlC_Zgcs5vzR@MJD2%ZYy3!&*c$Y6{o<<3~r^OVGRFUj63h}d~
zDWrTmZ&>f|IRH{9Z?NHKjvAa$si;vZI;`%Qpp~g`mF7xjb#_?TwFnofA)Hcr&jPiX
zQ6oW?nM0LviD|s8AyA}YS)nq2T@_+8ox{yVJb574l|oRcGbT}oHb&}`wfBn!LKY`F
zahc*`I4S^MV46y%4C9SrS}Oq0MKlos(vkaz-j8m{nKXl7zSMiN)>a}5B&oeLos7b;
zP9mK_P@2b2Dn!sVR?V=8y@<)Fp9+{hm7Ev6>Nc<)PzT&db$)@5rE^Aq2Y6C}$n^K8
z$ONYZ4<y`3>=RVBijy3bV0SF?URyMWIw=}95^NQIbD;h?UlxXhGQXt%!y%0Ai7v0G
z!@vn=AU|m-WoXWPkVjz@4I_(b-DMCNYDDpxsANHJV3vgmITR%KQ>o@DOhu@60P-D!
zlR}BI`hu}6F9Ega&t>v|w@}Jq3d|Yjs(?y@%IirL9M~DnKR;1tDw10{#>6@9>JI|{
zg06cK2@|5SmD8p(%6o%D*GmF_@g+LL;79FB+4cE_cu9QGvjt$Oh)x8IWdVUq=)Ag|
zbiHz@Hq*M>2QBRws{mZ2q-t>fx&Hbs<53{t#=@*qj%<9u$b+|kHl4GY0y3D&tC`k$
z!Udu@qX79|Bq}HypCf>soX{&<jH5R2?I2bo>uCtGQ#Xu-vULtV#Cj&C&YE$ynS~f7
zT?qV8(SSDgU=p4L4A@5g9rI!lA~KC9sV#>PNPma=whmEy3aEj<fiKTjYwsBDWAG#y
z>-wyRFLNH)s<0D(dFK>v4Ty@!`uyTsK*rWL5FmGi?jSI=Vb{P`6PQQNnb{z>gX`9P
zuO|u8Ln)2X9StoM-~f2TRU#iDIi$W@-_NrY>xke`C~)Qwm$8Tj<^}RYS}ZEeLPi_U
zg2*8hZgV40mk1I7z^Nn1qTZ+%K72(5h%4V1>ssCfe^YLMrpshaPe?MrgSE>V3{1}q
zmHId4T0=vK-&0>BtWJ=LOQtdx2%X#J@*wC$e;S)SjTLiLDa5D>czFQ^E9+TAmc<0s
ztJF*R!)khO{gGPTQT8N?xjL}6z&uzw8DwStK_b3L*pLuoqaMK~xa8*l&*3Ac48cJ;
zM%)Kg$a-#n*l8nt>_!PBKj5HjVPCjdE-fCkNDwXWi@??dXr_~7cX0z&4jN)d|4KoT
zI@ilxt>sT89z5lE*20WioV4fYhIkS(tA!fc4%JVyjOGqkW~FG>Gm`lB^@@^6cGbdk
z7(&<Nc;4hC3MCU{BD?A-X*+KZ8}0@J<?$htwP0O;G07uEEFz?$n4$Lvt%9(+&{=rF
z`h~D5W~L0jk(34}!V?`dQZjs-i6bgDgpZLfX^|0BM`)K?1%S|_hQpWLXDfDc?iVVR
zdQ<=SJ&s;x;5ArIc8NF&D(^Vn17tHi6_K1c#VBn6CnnP73~+b46_HW^fC`ohya3rd
zf)sgw{*?r=n_(k)m!^vl21tN%SvzLU0togji0KSvoJZn$(iEi>gG8*rqB}{)&GeW@
z>TxQEM6^apNvR@8SOM@?guUVC1VFMQ=gyu&nOX+#N!T4JO$NjSIfGJSHAk2;0y8Y3
zF@f>=0mKeF@fj=ziaYYQ9MbT53S8HuD-uAxF}RrYf0Yrmt8-vW_$nTKKXezOjOw48
z006+*nwmFJO1`#&fdGWCiqkD7sasUfz;_pVMBcRwH{1}QD`~wD3f{p}D|=i$neFMF
zyRFp(a3=Mu7kqE95mqL_urHCyiPQ)u55VgID%`}l`e(;=enO4KO%min#Pd)4c^Ha7
zg-73~e_(Ej7=MKU3f~5Zg-Qu?HHAXloAmSfI5$d~glRx_xe|!4jD2<OT+|aL{fBZq
zTv%8cjfR4T<hnA~u5X(svCZ!aH(2E8jCPPOE?Gc+w8G*VuZVTCVN1z1q_lu-64UxU
zAksbN(|ZJ>&hgyN@zu^~d@mzBO_s>a8CZtIf5Sy>jI<6dF|w#rCXT_ALC{AN5`YJ5
zD%Q?W%!RDb$H9Uh&zEG51hPV*6If?AP~P*_W3&?kSS(97?i-(wC&=h=r8nhl?PLS}
z1R513i7bq@Wb{zR{-{IZo)HCOA;fG2GN;Q}x~2n0Doe4*@)(de&AEzn#LOebd)ob(
ze?!D|3#FLisONN$LPSXeG)0;Qi@-X?IVSpo2tcRj`nS<%?Ax?8HGR(qP_bDC3gWf8
zf?b0W5Q#4Q#rP2lccROUv<z0_QKsjNNdisdN%>d@a$ftGLFLp!$`B7LAhGFyMAY)a
zQc4ykUb>Dzi5KWjWa{b}Fp4u(f}jH-e+?3>T7fs%O63r?XE~yi1!mA7na;{J9Qkw1
z-3UMA0wD%}%n!-Y!Xj9=+iWqffz)Qr7>-*QR?1x>UX&lEA{7w}jiYCKu00NA=#@F<
zvg;mbDp+u2Cm`^pB9D$SuF?1*ev~tQ*g(VAhomo-nH)TCcp+8*-Yg6!Li{f4f108M
z<q0xudT=8zL(uHKPm9QA7?)0{;$Bvc#0ay_brH?t7{L&P>rDA(U#+%lQ)HG`K3?=l
zF^d)zv>LFfWGVd<x`HMGNl9I!b=xxLFzAsIE}u{cRT{YtRvM#O9iDn~rh!H~7`G;F
za4K4t?X5UaPGCd}oXJ2C+&?3De*%T)B5+LELSDmrsNCxv{aP&>f<;6fU4|2O)g7XP
zz9`U~JY?S0oDC&d9VHA_c|1FET)APr!LAoXx>~)|*ea=>K;yt2rUeI285@h|9Y_|9
zH!MS}97uRDq;C_~ovg@oN_L;o#G%aM33e=jVP?;G%+o|>ECg^LUs+l-e~EQvTyug1
zNak*JJZ^o#RnY8o21SHXoNT=IqB){SCQh3jQr2Jt6YnSGoT!G<TOO@{oQ?Y8WGLv-
zIZA|Z{xa!c&P-Al#R)6!5y4BiW^W|?0$9WEvxzNk0zhT}Z)4tz#?4LxEwn)bS4)9i
znJmbHUEk7W4=N+NWUbLXf0Hwqw@YU)iGhI=G%cAjvj9+hKt~smnz&+Oe@r!<V6?O;
ztlzihz6-JNHINBuQ5fDw>O6KfNE}>-%Ay*gOP`j%nlT#j2qpj#<ZF-?C*ig5k8s^+
z=$=7F69S>O3UrUg4^id>oy3kT*kQp^XA&x9M7QbcQ+v;w05OGefA|jdrBxe*jL2!D
zb5XDwtN_6*#FC+UieBlP5+kCFDPhcp(gT<V2WqXl*K{&8GFTRX%$c96NV_n`gg^s=
zUA!7zEL#v`MVxS|nP@z!JV<9s9s>~%C_O;$Byzbf03jR>tpa)v6-QM1Ky$W&kP+z|
zFGe#EYJ1cz>ulpde`0d>$ie03%_2Sj%KfYBKaw;2?i5WKYupYee(u`05X-arO7)qj
zD}*GgZ;S;KYPG;~BM?TlPL{Cr9Xk!!pyE<1?ZRjy<xgUq0=f7u2&lfIG<a0(;r;O0
zkRY>`#M}vp{4kbx^*{j(EvN~&V(4K<WvCQGpTrzQ2t5Mgf8l$HvL=7TqZJ=|mB)pj
z1Cu~XXnwPuBW5&`b|Du;zZw&KSqeni^l(ekijJO>vxe*jWsF<uHUwUbNG3Z9d$xn*
z01iSTGJ>&bm^_JbQPo2ZKl)Jt5N87q3Wpxc*vg0~_pc(>j?txHH(tRoEKmHcfaXe|
zZlewV)XYzVe+LR={QP|PQi<;e0S?)xbB1g1_`<>Y)*w#P&y}I!c21Uq3Lc<XiLreo
zCi(N(DRN-CGN=F_tqsA*{+t+Vy@iPEhscS5^dUHMT)VyoJ8lf8MK)z>PcH;4bqI0F
zG%ZQswtudr3r3w}tQ`@KXB^ZxMGFdmidyI|W43A#f87iYV@Ijtt(ycAIQkL&oeCJC
zf!hZ|Vm(5wn<#WdG1)t$Q*X=;@^U`pU=1L=(lPoV?n7-BD@#hqUGNPI%{A?-*wtOV
zk{Z%Ye+K<&xg8DT(`fZDY65t9zT2BfdAig(!c>Lwp$|a_5#{6G?~vnl5Mg7+DHnOP
zj*)=ue{+)KZ`_!?Vao_pM=2!P^{oqacozA$_qx3z46_`oZB%gpc9OHt;*L&0TUEDe
zG#}_Q`P5koZZQOD3VTiz4ll}7YBkMf2+#NdmZxLqwToD_qY=!#<vBS(Fa<V@p}d!T
z3=ih<J--nQQsRjD@Sh2|*gVM%cIIqi8PYQ3e>mL~Z-(F=4d3RFQT~NMyG8>SJ4E|B
zZ20}#00okPEM;S4w=Jx|7ebi=Y`_ZgiTup;ZRPQo=ZFwk83?pYOg$bWxrLsHz$@Na
zfF#0w1F~)v!lSNx>G7zz5-D);LQ~KSk>xa{28QoScP?bBMBCI*-R~pRe3T{QfdEPm
zf7@^tE5cL+`0b!oSp)CyG_W>56rc2k8*yqZ<hgU@nH;7{RA7%vVjvt$C^wM09t&}a
zpn3UA!L9@*O|!YI!hQ<rU1vA*#s^oY)!+}EJcLz(c^@;wOG6E9v7#p#04m_B3DD!i
zQ5N{djARRIM%n#>4@7nX_L)j_!4bYwe+GmE9;h%(h5n0VX|fVi0>DBTI*mbRqsQ;%
zhf<wbS(dxPqP1Rwg1kVPO9}}eQzUALErVAlzd3^=TDeQ2yv)?+g-IZlWoS01M|7DV
zgF$hpe%>?r%@R2gm9{TJ5*A1y)Bd3WsYzSKhz4Wh5)~wIw}#-<^=C#Bjbw%Bf1s16
z&~;5?_aBP`q2fsAw-M&aw7W2w4DVC|G8RT{gp917yr>BEVBa=td-=N2Iy{;dZsV_O
z#AHOn&1B+6-X0Bc4@*r$Pwiwz--SNvmPHOYMWwQG60Y5Jnt3j~M}+4Vc%k{5LN!BX
zr-u@z`0a8b`MU&Ydk6UHVk62Be-e6dTGQE(dQN1rEQ)7MSrq+>m6ffQeU~ZiB&bh2
z`n<L+8^9p7d2xMaaW|o}n%1=w3`kR~g!aub{h3mcCIs<*TJQBwC=ca|4!q!9G@fRh
zMot!@gV;z=XB{@RdAj<}0RAz<mEaeal#)xVy(*oCQUO~*1C=qP;1ZJ@f0LzzK~Tt)
zs~GW9=N{%HkHahpK^rHdVncAWv!My;Py*&Okv>@=Pj<^*TyrRLzrxUph})=cnGJ9$
z3I}j$lr?}=z=2t)jatn_^K@B=I_NPS=#K1BtCqqQnsGNTQfmt49zY^Or3XLIkcNQ*
z9`Dm{tm+teGzr-e8FMH~f9@!8Z)08_MPt#TG%Sdm6qwMHZCGd%xErn$2JMI_6!T&i
zhu9zz$!X<nlSK`&WhS6CLx~8MF{#3Np_z8hNdX{Q!zQqK0cC=bQDATMc3ITjNl4zf
zSouN(>wC_i2{5W$&m%#nG$iJa|HL@ZgU+bU42|OkrL|fEXtGXye`wgL>?KgUeL(LG
z;0mQb`ZZ*Vi7}>sIUI;CP{p8X9%FCpz>drW#aBqeR|!Xvu$adoPNXzT0I8Y*4uR<L
zk11x;J{Z3aE%y&}7VK{HS-3PD%PQI9W2jEU3D{xw)`x#YC*U5r9t$R4FzFUeCLmtg
zn8acREy6i~s6S;Lf3cmtZl>3f-nR`Hgzxf#howcGEU#oCnMHg{Pf*YxoaQ>}jU8En
zYT2z6PkXEj97ASp6d_oI?G1Olx-wjTm4LQrCf+;hjh$yu(z1A=db?klIn#9!0YrJZ
z0U`#(#>_~B$_iz9e9E8}C$Pj@ajG72d?VzVQjK!5Uz+@if0eeXrp*p(@KQZ_I24%e
zSY5C<cj*<5x2O(1Q7zNg%?Dm)>Jm0AN|Z&CLzOTfN7OG#0F=>!FqSk3<=Di4`u1Z0
zIb8selOlzIIm3idjw-_NQX_~=kIB1OdIh4uG&6)a$uAeQ-?@5aMkFz+U%>fER>c2C
z))6vM$q`s7e-AF0RODl3XIIkm`BlA!0qXd6A+oq3&A<)I?Ka3lA|~L)o(5+SbcLNc
z>I?{+XrrLCwq!+cY8frtfy#j^pnjQNM&s;r15zbnH0>{aFaYqR6`P@!3l)e_Cj*pV
z;YH>JwZQ>y$++9um2}myfXr8YISthhU!*cnQ!t&>f1bwz<fIVnAr2){aQ#Ao1@Q@~
zaS1#Wmn0yG6~gfos1&Or@zIKHd<VFy7Xw0YS`;c|qxHm}Uw+mv;FIED3LoUV=msUE
z5jS~(D@`K$@~ZO?sE%fhW^CPVjRvU>xszGFY~CPKc>@Ar#vfJWxsuH*PEe0pzd(&&
z+ku}Gf1|5AsOtCnL{tc*`4|8c%vnb|NtNC5L?UUS37!(>E7&=}w@FNU(2G8S@{>XI
z0kA~9G)4HwMU!y}7FUu=5R+xmMSP?=fi`fz;-pw2NXt!0CkQ0le6UL=Jh-lOhE97)
z9ye)Vg{7-JO89S)2Q9WBpCB;;B5p|FhsHfae_{D)>Blbt34>^ZniMi^9|qnB%ES;E
z!kSQ!IK8Y>A1x=m76zreZ2g#{aC_l);B}ZbGf3Y$5Pf?Ha!#0t3<5F`ED$p<#rl0e
z5CFtqc!!Oi7M~UH7I8~>KcNUu8%}Z~Bb?-HK-;xoKCjL8>_&0cLO;{MS&3$vA|)_!
wEI&p)$jna|DglIt!=^ezcq-$%8H|mc7-(43pqY<;Rr4Q&8N0-c89tuif*K$0QUCw|

delta 19999
zcmV((K;Xaco&leo0S2E=002Qvkp?9d0ssI200000009610000004EZEERjHJ7dZes
z08ju^03ZM`05AYC04@M905AYKk-?vTsoVff697#a07mW<&FPHK(h=FCD0Lgkj64A_
zMB_p)SPkz^?+b_kLqqCb#{~>>ZBjCGYst${N+LBYmS=3~S1M`MSC%hD?vb3+1vDe9
z)T33VezIl|iIE#sMBK!=_lT>p;7YeK;V&Wn{x6=o%5$m$HyM(XYl@YW2L>pAx`?4@
zA5Qq`IB$^cWF&cUj=3?j;?_A9gFq22iGoN+k^%G>wNoPaMr!l~*q}B;GnAwzo`=C6
z_^MYmF~QRt+}A>%uVKsTQDIVsRWJ3ndn&(z%kKb!J(fUZ^!R8bp&l{GRNI$sV=H5l
z-a(<Kya^YTTFHQ<KvB_StzjB}ht=L}_mDC^%1f}w1OaXHCm;)x%Naw5NKM47W<rTr
zjV!)d0T=SZaHwUXkP7aNxK;Sr0Uj#Slp1>f3T=YR%V`!6Pcd#q#x4+>gyaoqcp+g!
z3RqOy6jq|e7OBFEmJF8%=~5k~njR&k1O$9Z<e*6Kkj2$dgEb<>Vv<gOvJerqJ>vL-
za@j9m<x-5Bl$l=(;3d+8jdgm->C%|iHIg#Kq0-|8P}(V;)cz5k8^*&%gEv!)0da&z
zz<X}tX%u0B0=Kw8L=n()h&!4XAALC+;;f}V#k!FO8K=Sv3{rchRBP=!-nGY^*Hv6j
zo?7^uQ7yY()N_!3H}YnG3osd&%EnVOK@8jtUv7|rU{@SBP=69|n7j1g2x+VBvmx+j
z*e~E;aJ#|M1X_SCJ;T?fepgx}FX1#GOGW@-v>>~T0eas8(l7_xd<jH?1{Be?0PFyQ
zCS=2;Nr|+M{KJpIJGV{jlzS((Z*7K@ZK4ZF3lRn(cN}Rsd`LQfr`xB%yXW`H{=Rz^
z`+oMh{c!}kxT#P0<@D~Upbz?+ESMmIOkE~~N-*)2**Px*?GHI7%vtyh=##K}JNNo0
zz%yVRl4SsYKz0;J4}^ILL|P=e0E9Dv%L9l+crrK)1O<avfFMJ7HFy{ZcL#z(V51~M
zBq!s_MQnu}d7#yQXus<m)PM~OL`n)IC~%zyy$9}5L6kw<i9wb?C&wfWXajH@$}rAW
z5-=cOow{?rs%6q7$uuM)bTU0=w3sx6L4<o$YnBHvd~z5_r1lWR&;q0HU>i&(v9xp4
zXr^5Ol&3*FqZ*-$vS3oQC!+$DA%ly7F;1odJEIa`igYu7+asVL;_~bI7})Ao;|1yq
zDt2YjMqovMAWtNYdnwshJ#ad%-qsODV2Zvn8pgyj+LJ@;!Hm*g*DlHx#D@czq4<{g
zM+p8rJU^ls>F0iW&>Om<spSG1r9S&Ea31GQWislE@7A=s-YZ$`a~9idI>N)tyzjLP
z+^cmpsixk4?$C6=b(LN?zRWi0^B)Jugj8*L@KMPn7XEd9^zxb|elc>=m|^{Q-<n>K
z`CqA8qm5dfVWNYwFd^CK1&yJ%`cC#>r7n&Qb#cJ4=jvHPrCgaCsPlz{$`RqHfYcT0
zg%eu`W$=sc?*2MJpz2B|MHkzFEUz;k9d%-AK#g#JsKLhM7w{9bW~j;E74v`YwYOzg
zIVcJ98@lBJptRnFiL>TCix+H^M;@l&0XGt75NaAA;!}f7HpT(4p!6_<|2gufmQTx(
zsGa=njcli`Lc9(KVXEDM@~@x^gFL3^0s)@KLe-fl1XfZ(aG_@TUa<PFD`z>Nans!n
zxs8f{O~!N_7+nM%yV$CMaO*{lm2w9_U57v(^AD+3jh|~)r3wXg6Y3h|Wa(bf5m+FN
z73G!&mr_7KMIF`lSu*sfm>kLPT_fPfyqYuvz)IfbOZLGB<kly{!M<d&;!s0;ZR2g_
zZsa4rf)EEJD>OKDClQ5^=Vd1QzkpkATTBsu;m95NlAf_8dqP7*+DtkDULl~1g41Hg
znK~xP{||`nf@d?6Ei=&gb+qVzt;goj@VSFx4QWhT>Dq!<f<{xx<Vj@B0`Z|XE|F_B
zQ0{~TY&V`a{8f6AR60)mPN9*PF8v~as^$DCiNzV0?2=n2-+Waf4?!G*1c0-bf=QKs
zf!lVechK9|aO;`vt#r9$Yl4WLIoJrBish@T%{c&Ws6>lxak-Z_Nf>-Kn@a;?V}o6`
z22J#n84{_o#LoAZ=(Z9<jX{urLiot41^{35O1e}G+589?0dXME2Ou6cK$oY4xJHea
zhl8GIWMD_Gk5uav@wYln9)HC*C*XyDOf2aaNobeGMo<a6%6@79y#|Vm?ZgbMB*LM>
zgdoH-nP@>1-Q)m)k}Xq=Ui;dHkc9@&<Siv}WzQ7s>wdt-QE{uM7OZS;B5A&!2PTk_
z2j<aHWj{u24omN-BKkpd6u>CmGaXqwBB4y4+SFx$bmbf;#8P@ZO;;hT-&2ZzGbC~a
zS{W8Ph>~KZEe>8B$Am9~BvJjhaS!!M1VSfQWZ_3aPqV1X<6th$C<)&Yp0NmTq#ZL9
z_ChfD%*x4;_%Y?6%y14UuEgyqDwc2cUdhL*Ym<gbV0Q702ja0?kp_#QLwq>|7@R%u
z+2!dYgq%V4!cmxs<0B3rqVmaqH#-FmE?rDI5$?al&$wf*=YY^;pArwk>S=(8MRNjj
zub~K!;`25?=6xNnh7@JTKu9f`0Ajm^(Z-fTwlO=dl$q!*4G{nob}kFC$-X3DRPL*|
zk@@x?!u<IlN>{wZ+}R~U%UZ8VFf_#3_{I}nI%`!d==MVyiC*egRz|6R|E1bs9HU08
zVjYnZz9{h%Pua>(sSC(5JjLHY)L0gob&&vp@MnJ3$&t=iAewZMCNW&}F{ez7I?slW
zgd&F_kx;hA0iweT5a=^6*#6XBr1;0MopFJPcVJ0D2E61%3YaOdaTlXQ&}QO*6A;l)
zlM~k<vFR}NGFdV?t}{-5u!&|7;~Q|`gs6$>TmYCu(8I=IX!iFeur}pz%V6T#fqJuN
zf<g*tQf93H51y@E6FUrD%p-7jUvwy&a13z+>c5ZKw=B=j?P6qWi&BZzLXOMm+EhQ;
z>@uN@m%s)xuVdv#gn2TU6`3Untj*6u70+%6!8xGN6pV#1oAKO#_c=u-BiC$_R9|1f
zQ_#C-wkc(3FWR>QEB7NhMjc0QboXmDM`Ch26GLJW%d`~SI>gG-BfY%IoCziX)#CtB
z5d%XMpz(MAl7*RVcx)3+hX|{2hzzQL=}^Z5v?+lT&5$!@Ep|0a2Z;f=sA&DSFhSRw
zqNmVmyKYl(tO@^roL)#60;+$|N4G|bz-HY5zVm`ejtL+lB^p~5(Yq3f-_0OE3jhq;
z=x`v(VZo-(u>kBOB!Qd<&4R@gD&oRl++4u#Kt4?xoT@Pl5iqEGJ?4=2DV~4}vrC{Q
zk0e71!uXLnicRqLyz9I)V*v^3fJJX~YR$q{r$<DNDQxk7IFqj|m|S<jrQi!803{^9
z*E4j<2?<mZLK=FKp3<}lX;m6Z(%lkUqQ`g=XA@)`gdRe2?<B<-A!Tuhfs!IhKHw0e
z2@EM*oqnN$iitA_kPavaUJc@)Qo?{ZBR<v#Vw(lzNPyx;CpTXVX49)<&bo9&0B=D-
z--CuIahXDYJQn?6#{;b#U{;9y`0388l&RL38Nw?1V&2bnixg0;G!u3}mn)UZ1TF}V
zlI~IE)TJa=f)b$_mF+-7FbWIpQlirw1l*8NTag_RdOBF9NEjn!<iQI9@^hd*Kl%kl
z$X8E3Kn_XRBz$wMo@pB53Pl1EQ>C&gFhPtz7Na?Tm0@Bmwv9kbn(@r3Zzk>p{`?Mz
ztWmTjtPIbdOm!=p3c@RpNPNu3kUz8*PD{)iG>pa<lG8(OP;}_C4JS`j@|@BxYBk`*
zv^dDzcD8rcoRF&$Nu?4dl`G$10=$ZO7*m~)V_{DbTO*-ou%`%7r<{Pe+GMI1TkcD}
zN#~z`mtgb<#EeW({nHq@2_vw<oV_5aDKgSG7GYF_f8-YHX+UFK-jI>*3&P^aFmCEY
zyKwRl-<Iiti!{x(j*xivD)GzEQj~ht4q4)aVu!%`+f-Xz`W<Uk0-1K~NXm%Zagqpd
z;HHF0!tF^I>&2HT2n&m1LJbKJSd>t@PPB!8nsg6(?FljsN#;EgJ)|I}9~&GFvxxnu
z!#jP3Vv3yLasJb4Y2JpXVX`A439J{NJ~08jf{?H=<UyOGa52{H-B5z3PZAo(1QQ+T
zPnUIg_fhouu({3(M$fV+`e@yRsZS?OM0m<f?Mo3P$hDkk<|YmKi>A;705Od3#59|K
zn^S3^+~aacN*0n(uyg=KP0KrSP2++ql=hbjDwg1%?bw$!br&)u2dZWeGm=Xn-#qzH
zvP|c4(PN8ADS?>Q<rZG+A7o)Z3MIwh(X(O;D4+V4KnN_6GG;7(BBnRnQai3i(H)LE
ztgVztSmh}Cxe}ij95jkDS_2>C-3TXt092~mzxIoPgai+iy)sHG|6U;@ZySz;o0M68
zG}tZIgYrjLA1d%6-@`$b8Zag}fM(=-V7$Hf;8*rNl0;BAk|+NYJs{RnrXXjjeGv3%
zP(G8&10%W1<+(J&(nZihQdzFXUNmL%0-gPWr%pJyk5(*OLW_nK#Hj8>BY{|dhWK5w
zEE(45;;T$Tb527(7Y!?-?QhNMUU;bNrwX9=4waDlYD4TUG!MX85n+j6du0KpK{7pZ
zj_}wk0Eq>ywASvY1fe-lPrE@OAqxuEeY9E1P#OYCWrP)%=SOauu_bu?jWHG!tS^01
zXA(%*2$~UL42}U_GcAg#Ad5AB1`4)(ive*{r_k_W2MAY7dkisQY+y;i7%|fenZ{A+
zzUyXRd3gmx8Cn!6#7r|-v0V#SHb6v8nH5y{JT8Q*b?ZmYON{I|*+g^n+R(8BSLTs&
zh231=H(FfP%m4CL(;`V2rlO4XQ=zA>WVMMtLyo4%Re@@d-^pbHp2^66(?k;m39c41
z8BND@S7T7`uLXvd^3#bnBQsIg0-A2&iK&IKN?f|3!vz^Po+Ia@v0&JMOY7^TAgR{~
zY*qs{3ntSaR2`0z3EqD0+H5Y8oxT>KAUv3uLQo2$DzqVbQd-31Wzm_tzP{PF1XQsj
zqeJOTNE5NF7|0f?2v@~_DcVGvh8FjeaIRTZBgx7&F?&}^fR3azUc_b+8MDm16<V+n
z_RP_FHkQ+oR5F=l&NN6p>OzDb(u&CttPg#hCf$ST!YpA>!>4vDIx-gKe)7R8Fubs$
zh-9Y8lfw1ZgJcN|!h-nW%ON5`D~WOdkVtL}p~v8JLFB>6+Lu*-4S@Xu1o)(4ph%P3
zPB#7|F3@bieLKBCqY<Iv6lqI;!ysI&(t<j69*I#!#{fDV2rPX4s!^aISug^8$0Zon
z78yY86R;rMf#h*x=hM+-acHlr=&QMQ+(XSr2Udm#u&KDOEhy0gh;0#t1(GomyRPDK
zI5|s3me#|h3L-LpvGRRVau#~?jx1_krND8^Tm*&PmLqT(gS#vBU}ha`nzIuey^rEL
zYYVh=mNi9$8c$(K!w*UptWXU=aC5CinQAfQG&?pD_Vh1dNX{<2&(p9}09d4OlT3@a
z2*gY{q`gMxgxs2Gr~wXa?J<@TvRT-QILQqqjTRv<!TEcCt*8#t#qpr&oQv7z9mZIk
zfVu}_h?TvC02NNj!UTA5ySn5CP*>``+wJJYV@Wv}XR<2(y1(w7gSng~I@TS#Ov?t|
zb&7&RK~KVrt(hgPFU6CzC|L-ivk+eIKcL>@9f2lECy2-rb!c076pOT$QS>CodeXJU
zz4!rw3E#7So`HfWJyzF%pXv<)zHRWW#ROF;3%l)X&Y;ec7{1JDoB|k?WaFlYnW(*f
zW~TXSM;q+{wFA~t275$+B|fgDkU*4$ls1B;q%ne=V8$9D&LChQ#T|yWcUkkNe~H!L
zfom@aVVy8R5{3e+!nvQ+fwT|GS!lAam$mYUWbEdDc$$%GI%b-K|L>+Bl04Pe*;h<7
zfnXgtNm)%o!BcEw<ksKF;F&GEMbd&N&f1K{IxHRkM69ro=h4~t#;G_MG}9@5_x}Vk
z1h;B{pO(j<5NWoz1P?+eOyji%2z(17VX2y?uQV(MreZj!l%>>@7il0lG^XX$5scDm
zSJ8=oupSHosWvK*&{XiF8-`;vXNt^|qSsYT$zroo$3+0L{;G@eg&IROk;W-%<jAxj
zk*zU}HgICY>)XbTNcX3zMtJgw@woxNm#?eDqmLyt;_^}1#1}&ZiOPtl4#f!^BstPL
z#Z5l)Mb_P60|DH|0&lB<%%5Ju71%ri8A*44-Vp#<XK{}=b6bWV@RINeEqTx}*ts=^
z8RTKa<4p!jn%9u#QbNaBfQIu%aecYs=dtuS?*YKFD#%WB<&Y;XSz;7~l$)f@@LCnk
z9{YC1OA08;T?Hn|oD&?187K~*9o3no{T?!}Ixy7@faGta&X3WB98gPXLP#`K@VQuj
zEEA5RjawIp@FWZhFs*G^vE{qiw2y)y@}*|$0W}X5@B;)ev7lB`4XHTlCE3yO%HF4^
z0z`DM!&Qutb71rxw;L@&P>;wDdh`KM6O<iu>#zgC5fTEXb_7Z5wm5n%rF1bwX+jFp
z-6G4j+{jr}N(qC+E}B2oFvmCGfND&CqQg#}`dc#pbjZTQuFQ@YhK=R`3;84dHa|tz
zyM~mE*AStuh&suh&RIKy=d3{{afK7=Q`kvT$SKKl1#=2HDtOZ0FhXi6Z3gV&NT)%*
z_Go#~k7)8uZKNhN#fpVAfD3?!+}dZjpH}83bXoJ-9;O1%PeW5MvstqAf@BAOH%)ep
z2Tt#5DR=AlLCGkr;%|QqA0o}7$y=t@3PoU>l>UnAH)VRb#E*uZyWTCgQNUfMHrp!`
zLStdgKwe40I<nHcwBG){9X*2rmzu4Jb5oz>&u$%K2ocBm(+M^l4T8<*PvfCNgfzW~
zpXZ=V8>Ohg2M0%R<3fpXFFcihdO_pUL%{*1yC8rC)Iol^5*EpL&@c-&au;c6qs?d^
zq)F`9w@-otPAobOZ^yxF?C09{#V_-?dq}Vp6)f9&(1K^$X2`pGm#@>#fHnP)M)k53
zRC2&>FXVI)U|?*9!4w7tnJNfKHfkSK51}4(M+7f;_{%_0Kq!R7N$7BY4bo-0A^GZH
zcXli~LF|#754jFbqaZYWFgXEw$8kfD7wqIDascf70uD`J8Cix=l#-zMO@HL%m8-M&
z#3+2}LLm?B2tFO6!Pq{lPYG~$Y6u`f0xCe85|AINpGxFITWBUTjr{9EARkd;{m-co
zI17b3@slNHet~uYFN<t{;#1_%=+ZFV=>7uG@GxN+lee}aJXBbxK*uJq^x&{cXMhbe
z&z0<?=}1Nl)zEM6mgz}2tD$@TxH?%>=<{MI3lxa3Q0r>`1U!0S4|}+U9(P!!Z()@%
zG$5WcgUkhN%J@gfwiZs3;4nUpLgqLqW(oRrM{mcP$PQ<D@x|AFbfaIxd49mnl#U9+
zCFBQ%u=^ctkPe1S3h3Y=NhIW0JX9+k$}_E;WO4Hd3Pkoz<<xY{^)h^BMOG+V6&d1P
zkxpb{kDNp^Q*b8_QlCex9vy9$OQM@RoK%qH*{}e8y)|jvx3w3_xtHL~aJY!8zazu~
zCJ$;x7Y!91^jfulCkB+Rk}~flc{!m`BQo(wU3aWOh<(O(W~buV&=|JpCHk}J^7dGv
z)0(&JDU?`Wpi>So<#eMcv80nN)DrH1;;@ry0Z4Gv_tTbkoCxnPm(KL)skIdope#AA
zcRXPDMU#jM?H&T`Mz9xQXF<@}lc3Ovbg8r{Y@B5ZoA}IsJLwFz_9QvFpV#h;u<-_a
z=0o`xsEGia`Y0)?$3GttukoJ47;uBXyh#Q|;~bJ2_^gMEtfrTqVl$M|@oZZuI+$c~
za$TQ4!iJyKmYDWGxXD6f5x{BXwnWwC*2VSlH~su*N~F;`3cbKpC2r<3VaBWzN-oSA
zK6EgH&k}%teip!Gj8KSr%gtS)RqSUCf6$#hU$H;&x*N5+E@~qyU~FlTp$Q&BiVpGO
zO*NYz(jW`EzYxWdN78VNo;Ryu3WnB_ACDzjTNqVGIp&%2#?wGt1!6?%9MD-Dg_3)T
zoqMG44n;&Tu9phd0VIu}8&UWxMs`E+VBM(fGqC-CQKbo!?y(R>T;R}kLpjai!y#LM
zBogXu@89(cn);CH5cxLWM5u4sL}$Q9h$<_MSRuHLB_o1EfN_xwKk2OxI0sr)8bT>m
zKnDnKqR((=-l?_$TG(-gp`pn*j><Xsp2vK3W8q^6LD8JHt?953l~+5dK;a^w5rEhk
zK2U;x)9>YIUzwf95IKD=Hh_eXRxig-I^Z)Kw0(}D6IvWo3>&evoO?Rh+J2Jr{+z{m
z4j+nZrep3Fh@?+8J5SC+;XRjPR`D(gQon193IT8N3#9)CUa?13J>l3OeG%_(Ng^u^
z^a@>fhk@5ds=<2Cx8$z&U_6t_^|CWCo%<hu7ijm4#WP*%QXXc11^So2I21Jm7CCdg
zU`vGt9uQ4{q&Nfd%L-V#RdI+siI}Ban3Kj@PvCQN=)X;pw<ZH>945~V#MTA^_X#ei
zC7%wU(oo7mOnzSE-vR&mM~KUakuz}NM2D=EI_<dE8lzgjqrtfZsHr?$@vFz6X|Je%
z+gHqnsK~+)A}Ev`gF4~G;(CjzmJ?W(e(HhFFa=N;M_o9O?}EIltb>e*Qc+D#6;uGG
zac13D1AZahFqBdy)sdYr@OXAdMtLtr_$`~yclvdLFZAvoDt`g%2P=}s30(EUI6#Ot
zqN~FGskDo`V?4Cr4jL9r0)snaja!<39{cx-2iw^P!nzA?atWVN6;mf~qfvDj@>H&S
z2yxPokYAk5zmJ21Qv_tHyFmmh!>~GS@;F&_dNTh|LaPnzNN8XfY_w~VaOe~NOiXAB
zV?|;%W!sMc(u*KJA%vL_K70!*JywkY{H?o7?m(XFlX7^GFw;k1B?xkPa$7ck>WW!2
zj5mzM3x{SGDwir48*Y{0B{`YeWM;$YG4nCrqS}F8C(Qj_iJF!TQqAA!agf~9F4*e#
z04$vLm5I|{C4{eR8p7HU;tk`yWfa)hBX?IG!qIaQ^EEah**)UrA#qy-_OQg*48s5=
z$keVFUGs}IUOIriZKyS=5D+PU0Y4FtRtsW$nsvZ8W|IZF8SHnkoaV&vED<{ASsrB!
z=7xV#2Y)4$3i4aPn~m-b5F5#FAZO-At3efdwMI~-5}WcJpTH0u)Oee=?t9M`2M6u;
zWP*6Zt=4w|!#IwZmI&FDdwT;+J|M1wWULc`GDGA5Op&^%<V+dfESyY#+~^)Ggz_lh
zZBy*{5}U)=<>e$j(R?MH6$aLwY<1`+3B-kz8aOlK+6qn#qFCjMcns?c1YA~b_08{|
zN?R#Oo9YgCjKnX|>AAbI+6=OP7<`~d#k$$pS=Yhv_e4mwn7t~S5>x%Ejqd2A=8_s3
za5k<m(_@cHGUGtSSF|O6(WYbXyk8n#(<IU7BM2%wN2jjl7&eZf?`}TLL_7NV0;Q0C
zq+mJgXjnoZ@f}r;t4aexU(m9MnEA_y?j@@Ik^!`L7bm$Sv*>nwBUC&OHU~K8s!L6_
z&yg+JHB~FVwxK8O20{wU#Hvn(k@${cO6<c=b|=W}e2auDDou=kylW^AWQYxYn-D|V
z%dtS9v%zt&v$+H&`C(EeeY6V8A=XyVgOPI)Gj}qkj?rPVGP3`U7h!iu=6VpJ7cY&S
zQ84fVMy4RyU4A<Qo~6U2of69x)*wzq`A`aN{FqBKc-|F?Yh_=VqYa?(^Zrw>A&{X~
zCOxtRvZ}JWcIO#?8DCJqjZ8V%gBV$(p=rMgr%qL^(_gl%5w9th7lV*WHr;<Yk!C8&
z@KXs8u^<s0j~+1qH`+#gxI$7S$rZPGEEx_2#<4EHz||%_b#Zgy81tb|M8)z#n;*#Z
zQiK^j=h?}#mu2|ay~&5*8$zzE1LUmMNUfo+69I?{9jY>aY;^-CooEp^UL*fgg(;(0
zX)-P@Pyl72FF;1sOB2ZvktFF|C>q!$;Cz-c$sO<$Suqd=a6_F3u{d<W`APWWF)<WQ
zFE1-xyOVIGYShH<^kjgP7|!7s09VRw73rJ9Nj(JLy%M+62w4M@T6i9z0n|;<iBSDG
zvXcQZFAGY4N2~S3UR4PcEKtZ~F;A`(^9Ek5dEanxloM>ffexcGXx-5y_<w44@%W4W
zsstSYt<3eFNt*U0hl;4D;po&|R^|rI6V?hY04G~3R}xh?8^Ntxj^%~{MCt~Tv*;|}
zy9K^24?SDJ<=Mgp0t-(H3U~j5pua`xDdjV<_^jlA^AEpDCIY2o@7aRgwo<~OtOl1;
zmRv5dAeA*rBuR}X^N|?cZ>qN+NXWB(n;>k5z0P_*fEo%_cnB}`Nb%5hJDNX7bgp|p
z;19Dq^HiaXsz@N@O#XaE`Z(c+1Msqah@pEA82XqUa5~>IbnMNBJWQlR0zqK1ywl2<
z#^N4-!-wmWou`B=Ckcs{i5`Nvs&5lgFhm|dLHk2&N&W)o2(MZ(thSp*KWgEpwE6Yq
z9(!H@oEJs4WJgJywN$VXx}hc`5@kw#4A#U9$)jIwrrZE&lC#i3GxtkdB5#^Q*;GnJ
z-<~uG%VQ+;glgT5Vp+>>4q<d?SpW!xU|C0h8-Wza<7EhGg0-meD1~9VBXD!PSCI0t
z!f7or^2gC)nX4?yj#TMmZK~xAVh0>(b~$Qj5#01Mt90lz&Oiow0rpF=vF7TThGx+p
zYQ&bsTqHG6{DmRBXi~P5Bv9!JO%{{UnqZQ%|EdSTL-a#lB{JDvbqfvwPji)rOjLM(
zlkF4_-EgK^fZQA*n^h6UoO`g%CjihEk_6$T&v{JnAS;frY{*I#>5Dk30LtGf5J2{K
zgd|2abQ3hy+Y!F44kW`Yqp~wJVF*<Im<1+@hSlAK6{uBd_1Y`H<m@frvXL#D=Pa)9
z1$!YcT*bot&w`)ApRp$<3%^sW#Q>Rq!7zAhz*+y19mOz7wh$?+C*Ah#;(ou@AhhbM
zm1=_n6ZIppZ6TH|0#s38m5Yfzwi-R0OB+%i)acbLE@>DQbD?KRCTeDhEfY!2DF3Q{
z46=^1Z>Wnb73gW6fT`tzjC3a2T<x9c*kH|`xw+{D(v>XaS%&9F+>v#`ph+ly4}M$0
zAu>J6&HW4F__&j#XdWHe<%lLpnWXA_IDRyoj0y|zY7P)6DuICkVL^pd?gdi*KVsT2
zgh`XLOY6Q+{|dOQo`6jZ2Na9@USqSIv{_~W6f=zCEv~srxbwObW3l&g_&fdsas_{N
zp6W++LBUipKT(2-;5bBzaCw4%c@~B%9~zMb(qo>c?214(A<J8D%f!@X2&30paIFy%
z0N3KlvglwW#!>aiA%?O~t%4xoG^>ice2uKfacTLAOkTIxUlqrIO)H+pzENVbxg$5#
zg96y>SPcX<J)YWe6H&kC?yMoaY3m;6`E7ochxzx#_tf0?hjkx?1Kpy3>gUtk3334u
zC^R^Fau|$RJL4)b!+97^Yt|$=1Zvjw7ZA#60R?azD~NGjpyse==xLc|l+o__(hsI)
zh18|jzM!b2*SnEEVYkcCr*JmW&+XLvx3>7`HCZA|+C-C#`7Vlbyx3L`livi96%-n>
z7~fN04Z7OOYyQt&yKW|b`bdqq4|=D5ra6(rrV6HT4HYCDr!?7ul#M5%d%7l|0l2IG
z%S~LL&ammxhp4V0>~XGX2%X>{&%`J$XqqR>3qr9ARIRd~d=4I-djtkagf?SL9P*(M
zF1el_qY>-5jcG}~>Z`w8A>bW52&dp@U@_th9pSzem6&QJ5JMn;xo@2_DmF0pw?&Kx
znAna1o?Ue0i7wYIB`^(H9*IlGUv6e}T_Cp?Dpp2AAI5Y_lCZ>7)DkNeq+C~8kT~J;
z#NyWwXB$S)1hU`)*<K3Xo@NxCwjec{5=lL_*ZCth_AWs6GJ4X(J6D=u|3WXsnNbA=
z_=*~5?Xdh6Xo?wsYI#bX(;2XUPO?E*q%*4B1uXTXn*a+-<TmJ%>oyyY+OpV9Fs@WU
zppJ!4d!eJ4G;0%TAESICtY&o4pOo8#Rs4b&JO~yo{21P0h7_*V8Rj)&kNPR?UQ)5J
zIGKdb!JayXr)g{+kiM<JOJT=0K(*$S!y&-U8p97=pkj4@b`KrSk0c2Zhi_HK!kmGA
zIxd9}1{6&Dbe8DqWtaRQ#~TlTqDs!bPzr1$QxjWy4wjF85>jz9Iq8zR^tL(cQ3&r7
z%P){^B9$e|q=~PFyf>d00}h%A!|oq7O-oFl>5-=*N#Bo0gbC<aRNjsnSWLf0@ZG0Y
z4Qi2aUZF34O~Yrw+q-+Vxx07t3hXNQx`3WJ4*&3%%1^$^h&;<8VG<t?^uhl3LE-N2
zh;hHWqJ}OXO@EgY05U*r_Ungmzh2rWlXu^hZT81&0eDY13;ZNo^Q$Ho!Tfw#f?9d~
zU@~8PB@uF$lP~2;KcP|i!wyc&v22Mm!=BFHOQ95hMI@GY|8@rx7(>eeXn&*o3t>R_
zRe&+6P58bg0v0eoF)F1CmLx~hTGM+We8<Ya7!d>z8o(sO-`kZC!Yv!}*{Vf$JCKXb
zlRD(R6^ox524F&L&&#-=?2M<!2g$6PZ&BSaCW``<1pEH+EQUruq5a0>gkGI<EQe#0
znZam(%a#8m!$lMPV{9<x6S{X`{o;?hxy6X7KreuD2VNFzm^fopw=<cY+-pFa-1<tw
z-ITO-P|z3!Cd#T#$@66SN@^5TkW09#X$iOKDs`v3=~$L~bdzd+y~&|{`SB7DX<S0c
zOC4oy;)}?&d`|1u>I<56os#b(!(BihZ1qEbS|n*u=3%|#xT$n7G<h;G{0(yv*w(7z
zEJ1a~AyEg?*h1vbmiCrj?1(^CbIFl_f?VEO-(ll7sqDUq1gR9b;?an+yEZLU?{cxg
z7vxo#j|<>+7?X^C>##9M!b+$pJkGI>g7UqP(;W`8Vp7zWxN&I<&*|o(5Uff+AMIs-
z|3?794W}w<R>Y?aBH`HMhB^*eDLaoXM&$+tWb_vy@JOS(*++h~l^=DccnM=-k2Y<U
z7QFZ=COh#k9f!|kRX>L~#aMptpE1!gkD3?Tyr^`5h)Dq0c<40)#K3z4DC>HJ>I&Q^
zzx)4Npv8l0jtJ;l(1q9%?CH&EEbzsDVwo|_hl`@k;b6M4DD<jrk4WKxPVnsfWr<6q
zun^zWFA7`Wv?%rVBT@91M+RidbsEl8sl9(*_-(VIza{yGjKv`+m^VutX9MYlP(A1q
zXb$)v&z0e8$&ghmjKan)The6(uZz#n1H7|C!H=Gg|K%b_ME}mHqnkV`Jl4;D{^@87
zt0@?yU?4%5RSZB+U1${jY{h0Wl!YNkp6Aa-BLGoC!s$JA$i6vdv}gx_^E)C^gr(X5
zk^xKHGcAHB2uBGi1-uzhvElfksGg>>5L8_(H^F6N-U{m-2}U$%NDR|+vlKTo;g+AE
z5}~pd3*y^g;JQ+lp;Ya6X3evIJ2pb|KE;>~IVKeb$QuRX+Xm6v+=2oH&Imt}m-qN7
zz+9+|fPp+FPt1my9Pl*>5lq8Mb)`UAp55In9gypTvf94e1YdUt!Z4TvUg<G6@$d-n
z_7UuG-n)k?K17r_<DU_j{IFjsBvr+_^U4)cv>|F5Pe%0CK6{AJACi%O3%hhIuPq#f
zVo<d#ZD2$qFQ0nwLE;U~lmghL>fcdXN7W`(U66QXY6N)Z6Xi^IcJ+P`vYb6BK-fYX
zuhs}Q%0D4HH54;1aC1Ncbc0V?Q#TL;sg$SKnG~*)ZlBm}c<B4?|5`s1;e%TFmudqI
zVGgpE6?^^rHkYOU8B8>Pn~JM3p96mjGP$(*4zG(*hiMqx8T}^KrEG(U;l0J|U2i=D
zAD}lK#KgP_Z)W_^mi%%HO+{8fgW?ZJ^#i8p^7}97{b2}1rP-$INR@-Gu53#+DZ-3e
z2~S0|oR}Yk1v3!Arbz)usVC604?FHeC$@TQD3PG|okgF|(IlOJiZ0ol@GVyi2T~_o
zcPlBvcQfYdy1x0iAVAwCQq&YF|1R<eeu@+YIR!gi^b{__nrAC1*aIcVo%U<h&cM=%
zv#4IuANEdw23NN}VljF;9dm}LZ$t`9jrOv-!ZLSTd_Fniu69>VM&hq^-e9>L>l4jk
zc!y(X)vNVYw-kYYU@FRnW&2%EpjIa~{fEE<gLu?r9zVQDU0-tbLA#?XdJ({6twx)#
zND0Ksi#((r0foo39is%*0>%UvYgKbbdceB!&tXW`$2kWrvz(9sn1g3_f?@}YA3f9S
zOfM0hMY|~wu*5Eyy?8ll6D309DWD{mjOjtkLZXl6><NQ^+Zvw%bRc3bV$uRZ5Jjk-
zT8&a-_DCp^qxDMvd12#-9@05iYA^+6q#NHxC!4TX;CjBp3-2UEQLQ$#>z;9g*kB27
z%FqdE6g`3A!FwY#6r>ZWMp;PtK-fyqGYvCoevx!p(4yIBYXwM$P|xw#4;T0SF*noT
z-~^?HS=>Z_mm=J7m&B$!C$ljEHh{)vmvD6$0*e=*^u7c>5&lM-Z$!mWX{c`D%#w{Q
z&*uz4P$T4;f2)Te5~gUAY9QW%28hLgX0*0L4j7gomVtve!mt697gRM!R#?e!?e@t6
zYZ7e4t&Fp-U76Z>SO#*&DL>7+(?U*4nhZjN_xR+0y(7y9n>l3|6qEoaCc9rSmD3+R
zu9|;;a1~k<kI6Qts%WIyDFg5g%$I{<AY#Cb741DJa4Co4+2!r5JBlt&5S1*G!&mKI
z3@QU?)Vhj8m+ozSMVU7MX%O|`hc>~21_HzPVarMFcFnSQaDysAe`6FQG=l#Z{rilw
z#|WT*PWC47U@5M|iHM^}qgQ2{gLx7+YHXqJ2(SQe-4jJ<Uv4uXtqF^2a6hUv=x{Pu
zz(oZeCu>w+;|(UGup!8nYF2ERNbS?RUu(&l;mG3l%Cq?oVOjZ%prIQebIw5ITZIHi
zBFfWZS=CJ2+^blos%ei6)kBb&5pg&H@h19zdXSJ-VOe|V#ttJ%K((iTADyi-n2v1*
z^C9$P0gPKQ357ur;Krhw2mfwM=<xE@2F7LAowDUGJ{=I>WP<{2hILpvc*?h2gyL}W
zPLcclsUB>dD}zWYW5;w;$F_pz9~48tv0Lrnelv{CWx#zlupo_Gvn<Z>$%L5Ke56@_
z@&pmxr|0;Xr*>VeC;NQAo}cRoCheB&P4qIbAY>5rtN<HibKrObEhs2AHk7Gh1p`={
zy=^_!?$e6D<57s0JR}0DssMoe^HBvJ!iJcHx?GR~lM2)fs&Q%QNa>h|tc!_h1}ABx
zlq8QLqkB^-R*!c^i<2*~bUf_J!QoMVV9JtO7Py)oEAVh~DVr#{E)#0C>A0&&{A&X>
z^$9!#<g^mXhOx`8$<{0&Ya36Ihnz%Ih{{SPUJf_9qX&n?s!@&p5Twh`cHd<X3MQUf
zkk|;44PG?*#$E<<u<=AIU{^@BnXVCmV(d2A#03-ushA)LxUR@dotRg9T3R4~ra-Xd
zZE@lIcBaX<C<H{oTr1RU<>?gr6fi2KR;AyEuvTr=ABv~uXvUA`*e_FHe6wC$JS~}o
zslztwxH73uGo6AW2MtsbZ=dr91dMEQ<i%y6f)XM11jR@)3yT$SgFztHo2Z}|hXUTi
z&jNd!$h`h9qaN~~(E#V1b!1h4GAc6i5F%r%%p!1wBzviVd4Vho>7|SI5fL0FT;OfK
zCc0o8(0q6xrf`LbL#onuBf`o1SCBbGtw{%I@zIt;h>sDQ0!wr6mgk3^9aFXkljAe*
z3@o+|krkHyO`DQC9crllLhGkAnwwCYG6LDzX|?X}X11;X$-nIv!D2ywtzBWFX=Lrf
z@DPfvs1JrB#PZh@X(0z;QE1ddPEWnDo{H~+8ueN23X^yS5=JD%_-B_n78IVP5RqD7
zSF0beg;ql1XSlJT?Ajx0T+4!&sDNepNAdd{3tJPjE)N~xzFmu|FcTEIepq`ln?$LE
zKMRWZBJ+wf#6kz*Y7{Jgzz|D*55@)nVk3kw0<6iBOqc;{W6dZwAh-+y3bA4Q1VtJ*
z&bxsx)sC+v0IeYWu>+hBx9=d}$;6>j>t0F}`y1=U5(Gofk6J4?F<9Fg6SUA(Pb|TN
z_TdzL4<nE*l#pfFq@XnRGsS}N?R3KgIH#Ff1UCqV&S~JR$~-!MY0*DMbc;r7mVZMG
zS0|Y20cJ1(X#yKO;#g#Am-!HklrY;8S0iZ?iw=vLmSqS-&kA};H;B#-La+mK7`LpL
zE=z+BAQB)d1?!F7R*|rss}f}Yho3}&Y-;vE?5po33aQ+Po#mYk70z0S#B&(k@2-$@
zXw0}JhhE<b{pk3A&G$eUIEM14r1;K13!qNAIA<5sNBC!Qs93NR7l2cPyP*6A<QtU@
zL2wL_2eY~~hk7dZxisN{-QcGz!>zf*bTmiVZq(@ak-Qc4WK$326Fz3{lu?#L@(|A+
zS5;bjQwZ5RPLBw9<-N*%u*XOyy1Xh2tpGXKxUX>&i<(t`F(AtG3}K*PC=q{6En&z<
zebsKZ%)RKM+As;0yl~3Y$8BS7@s17h@Pf&hz+d`YvHTZoyx!a3{=0q77#a!401MtZ
z_eS9ycAiLo!@g^SN?QC*Pax&AZ3tR{;lWX!?b4(PVN?6-X8IO^3Mmm$Ln|^C3S^R)
zp<A#0y9vyH?*qa0NFsD9-VMQHDq_#Z+M)sXuW_)bECsch^WzgE0aKWtBckMWn-mWx
z(yaA5G^rh7bEN~RzC%P!kVdBye95?Nsb9k}OkMWjS(q2fT)?OODx_GPiavDuman+X
z7H5m6*hCzOpQDQS=nn*BKqgzT87Vl!7|uI9oO|<s$~Zg`mdGnsM_jN-n69QBUX28=
zVV8?xkY(L1G?e;t+Dg<x2^(DC43KC|TY_9*6z~$0yd%GGL^WDDH)lJt_d-|VZO-J0
zaa34XktHy>0Cu{b<A(Vr`L|s~3%M8DG+p~f5T8j(<fQqQoP;LbQ;uH}rtX6@$Wn<g
zpaQRdr9=h%E6Z(VxdhY&s96bvXZO%g`0*=Edz3H+4>Qkp04L3bW`)7Ubg$t6=%6|~
z^w_b=2~P9}rf%R|$CO^&EDk9#-fZLHl3_yc16o?z0fbwX;0Xk{oeBF|Q_|Apyj59f
z+~0=J%6ET&^@|9aQ@C8NFQh6zdQs4e|6q`RSTye(XSs6i+gqmyibGfC+ea4r6fUP(
zgzPX;eEU+=gMvkkTX(*u?u2=RDYy{f?~xiT(TMLP%T7x`V;wJI3N0gAuSpFXxkn_%
zm#>+NbZzI#NF(a-e<@g_cTf>pK}3IiqEiiT{brDg^;D#Q-ALN&DY(w$)91%Ns!cI}
zpkfU-9s}VHu!YHnQ;T)b!*SON_P6$GOEg<^@Cby55D6ZYm)Cd#Obj5K))TzPqN(d$
zH4FM7O(7pazGTLyPN2&^JgYj#yILr)IFN?;ohfC73xwYdAiJfRhA){{71+qYd=34u
zVyYR~>4^F~>Gzz2u2erI!yp5)IzX|1<kT!J;P`-LV@*)-ICZ3LuvXA#jf^=QNa^-A
zt{f7}59f=0557GEvo!#NftNvI(!`GD{m<;MfvnD%z*ahvorPbZ9BgGB$+_PO5zor*
zmX#KE7YqGh%@Ht;<RK(rN5SbqB1t<W-(ElZfda0I6YYshWeEjOq7@*`_p?ra4=B~W
z=k}9XdCE0H=Nh4RxX@O)C5UQuJ1G`yMzwEY<?PE9n>Ua1c<KL=+PK&>Es4n`>zyD4
zhVUfM*10cwb8E+#D065&yTL?6sl|iIbfr|p5jXa7b#fZO7M!>+$sf|9pkM;rv}iRA
z0yU6~rpe^C0FzVUeYnxx$Q1^E|I#!YXmWO861)THZ0TbmT53XFfw_*RsT$6Ic;ZB_
z7`FdnmQ;9;dRbF~AKx}#_9=tPZ?M#G2tJr2k3dkOQ`0K_V%$?)aSO(ac=1_gQ9e8(
z^MALp<Dv~&95#`~@<|^>4ghjrH}QzlunbnzNW&ojv&Bj0a*Rbx=Z-di8J;0dy8sgQ
zaUv&@9Au!A0b%}eO?JA)4~sz`f+g+sy1Kpz@piNA6}^rNZahWMv57l@!z|i&uHQ0n
zPbD6#a*~HwlLkokV3>7DBbhInOSuNc6bte@i8UV>HizF#OfH;FNgFuS2m)~*8o{JA
zRgrGwa>=0?B6B&WDEr)hKs~JT6n#z?qNFJuKT{o<7W#sPF8Xr4FibPAZ8ugO!u?Ai
zNJp?Qu6a?u!|5^z`!82_t41jtvBBeHDI9Yim8=;7M(Yy{H+=Js#sj)`QOvZ<LET9c
zdSHNDiH5ko<=g?5&;sOyn>;=r@Gd(anjh;yFV6?(u=Fy@vWc93VK_u27ykoCS9XOX
z%#ZsGIj(EP#U};<{E5qN*q@wlfI#B?%n2x6XKU>%eJ=wEC~k2Uhq~-bC}yI~)(hRn
zpU}9Ta2@>k%rev;$TL~6<K5|Z0J3mI{$xkAaWW*#$$gPa6VtCjts?eCCQgEMXBj6>
z2W9<p)$<x5(5~=*G;!>l7jG1O?7y9*Q?&)P>mDp`)oOAta}1nR4*mp9RF@|9&>Qek
zW?V5cp=c*2V{}fY`X^MycsIO(T{8P1J4ek90tw26>!RZqd{n9dD=RuBFCd2Kru&Ms
z|1ng;3jvYE`p+7Z3>x#xfS)|n@ys;B4%5{6iVncdl-K`%lgpP0$t*Are&O<+A)!}`
zPpKW?Cy5~8%{p`Obpgo6%F?FUhWU>JD70Shu8tTCwWXZGDVX>-=-2>e!GO_iY^Czj
zx$ZH=t8^LM9nxBZ1n3B8zzxbwFbt=ox0V_<(pVx&(t_;@jEFR+IoQ!4oz|&B=^cH8
z-qfvN=wOk5rLORV(~^JZ2_vRT-tTVd<n+;Bkw&c`NPL>1Bu~go&iXx}#giXt88P>v
zrZ<d~Z!LdF%W)l{s{3$T$*UzLIuHbi<bcVD6%c7N9owM#ghwDlmjFymi8P8+&^n%E
zLh@>SiHLAn)Am#TM37J&KDKbvb^zW4vNcOgW$1f<bTF>+k$J~OPDCW&DxEue9J@7|
zicXRO;X+CC*=KHyfPXGd$$Zzg;L&c-1&x$a$YE2YTGzr#V@R?PAZ^XjSoj9q%HIcN
zkP>S<Uko<LEO{OQ%EDrljW8poT7<Yk6b%;!Wqfyn)XYZ>RlPB6xXVmL*f+z3R-<u}
z-E>=jt$20aMU+uhOo##R@K8dXY+6%jmXa>v=`m3-RqWZZI8uZLX^r}DJErk_^Ylm~
zmPZ3mP68o6>!StebUvw32?%^}%4?*M+w-V#A?IgQEcVrE$Ivna!^jqM$Bi`Yh>CO@
zlxpM-w{FIpF9=D=PnbmlA<K(yM)jLC5~zlMw}?#-CLYu=gd38VzJ++xB&TI}D|VSv
z@XHDg3}S5sU1cRW46@{q22jkx5egyt@3Rq*jB~;f^ItFqHlrKzDZ-CYv@%LUhU(b;
z0Sts&bUCh;gC~@yv(%g{r=raCTfJrg!-m(Awq2MW!a|BdAHzVJrtWekLWFaCl~J01
z4X~$~*Jr5hPeX{FF^AkrAVlXp%+KOg|A(^9ywedVZ>b@(foP_X+)KSk{OTYuahr&e
zr$NzHhzGnUaI|L3c_L8?PXvYA3^K<CTD!iVal+ue0wZK1n?Pbwy9O+-lfnykDeh3s
zTpeOycpr-208joY-l7a-yc11BfFxUgNN=PQkQi6qrqOm`G<)R7v0yba?GOFBhX%7A
zH9LYCg;=ovVQ&CShC7%xlO@4YD8PaRjMK)^g?KrNI1Iota^plEWA_lHK-q|l=Dx`g
zr0z!7JceWs76&NEK~5t^fl0TXn|d5=9YqBGiMvKUsj-E|nyuxPQ-XkI3N*@pIHx=(
zw1n+ykm`=~EvlH>CkV%wJknHR@iN_ZfJMM`xW93s(lc>SL}Xv>(0gDnoDXPd>Vo#n
zV8W6)U;Hs>L0NnmFZt^WtKPR&>If~(mAcTxLEaCP)o&>A%jzPNBy!k>RLs{<Qacr=
z1unQPcRnUeO899I8be?OL8D%O8?l$uBZ+{-SQj{#beHzxNI!rS2xP&(VZ+3hR8v&i
z17RMhNS`o3((Z~E@bgtEh@<B3UK?e7N@6z`CD+`PB@Q~9)5gC*0GF>#jt498yBB$s
zb8(IUs-f#l%+me%zu^nY5?QJl8ZZwOFvFDhNBl&g2^K!Ysp>&j3lWHaw(v5IN!vQa
z*+vPT$Or<*1DZ4ApE5jay?t96d*{3=nIb`rdN75~IzZkLz@jmzK{^wiweaVP?HAmn
zXx1B8!|tO)`|*>LqdDk^ILONs=(QHqMTGhC7|F#|*4SlrDO*3OZFDU)%W{-{N*j{h
zs?$~&GHhun8{yTSJh;+-vp@1EM23GCrtUi_lAUiLASkV*n95ii97(@PB&L><@g%A#
zz$a-az^W>ereC!hpG65vw5lq-G((GP;QboU5BGO#Pf75YMrKhYIL@=3J18(KF1<Oj
z!xX{}965E}1|;FaF!t<^bPJI&H!z9pX2_-u4abuEVNbO^R1PeE=xsZ&fb<n^5*(S4
z8vv#F%eck;9?qwi4`b~-Iq)$0JnF{q4PU)IXCM{85m8nq-WtV1vD|>cB@|}TGhj8%
zMgZNmmVOtBr(g&+WXUe-GGIT>zz!PeT>^v?ee6#dv@l++K?1)^v`$=6=O{@Dd&$NO
zjPGz;>YS?5G{q!;Hh8B{Ce<K1vL7b^H+6&u1_a0I;osDM3FZc;v?l5GpHlO#0<L7h
zC&UfSv?F^eSNH^fwcsA&Y#E@pM8;94)y$4ADq2PE{|%Z0V}soT=>a#jynF&QfD7Y*
z)q-zwT#qUQ_U#Ht5(QYLv)C9LC&(jf8$VZ4z=x4-Pyl#;3)v*ulU<M+sjmPX4Hnmg
zMoYmUe#kUC4O`NRXa+J2$3YOx$%$r(9gqvCJWvf}XSV5*4EHIQAz~w11EoJOZwIv0
z0pVM(uK`5?plDd!B=)up9);8DQ~nU`lGwf!W&Vf`y&q27>?Dx#mgex2j6I(n78f|s
zs3KkohgR8tV@5>O?|7KOr~T1VSQWEF^;nbPp3W{hMhJtyaV&;}<}oQ^p+dSb0S)q}
zvMZrco+<KQ#!q=gqm8o(3K{gD{E5E0xo#d*a3CB7gqnRZVD6nG4hq+!WEL&G)}<qa
zPx0a6gqm~|@5nke(2JihJYq1gCvBZ?aY>`!4#7fy;unlYSBd;Ckz8vTuVeT%-=-~g
zn^arPg5dO>uoddy69cgqAoTp3Ei|n<WZjo_l!jXu2{<}X9O}4;s-vnxRG9m<Rm{uh
z6vk2Tpe#l*G!TMpz(r5@6hEp&{%fP0dlC)hu`#%7HYrl%%$P?>$;&pUS#Vxe!4Rzy
zAwlAQK<RsUe`k;pBVI2Fg4acfRC=(-#FEOpKms~Ojwf7?Q8pEWbS&o7a8w~_^$JcQ
zrX6HQ8o@#b;ly4F^CUodZk-T_Ul|@9b(~fF0lE_pL(<^wOQ>HL21@||4*&5sGMMZ_
zd<q<1hk>GkRI+Vyy%&z5OhjkOzsqKuDIqN!?)v(Wf75S@q>y81yM4*+KyTn%5Eydc
zMO`3}>n~~AS4ud+PZ(!n>eGQn)@6byFO<SX&Y%eAc~9{knM^{BoLxz4RN9GQ%-~{H
zjuFh&3eV082{OF7lbP0mCCy?4yNbeU`l{4thKwhI!10GNg#s-$wf`HKMEnHpyQ1<+
z7g}W}e+jp5LTNG`{QDa#U3fcFz7SB)83=<8rF)|udrEbrZL$o6W?oDRQx!178Ih9B
z#D9Ko$H(jD{4MME&<|6%MPu|TfOc#E0B}!j^MMpV69D#h2`vsEQ{(?cJ3Lh!3&=yS
z5fWL~;1wCZ?)%nmK`Eqgcu)O6rD^3%ijcxLe-D>MU`t$wN?`Ok+X7W2{0Rkcx+k#J
zkD%QFg^bfP!4P&0D*%&joR|+Kr)&sQihbM#0f|Ay80=1JFe(qRrs&tRG&tDL0?uhA
z(FKPVij>kg(c@4x!efbyBgN=cB!5P`KP0l3fJ}a>NuCZ-P7h!5O#?#;RBnk(ieM>a
ze|*T0iy>s1<n!9{>;&AATkLcDkwlbSRtIktje-VeMjiW{2#!Z6F{mKM%o|TiLYc`C
z07~0NQYCQVod%8_jWbU0P#{C;Q|j~5>p*Z#6qEqX-F86$W-KieAS<p&gGO|_ET6WA
z2J?4j13{<~fB>noi{_3gdBOAUUaiKse|-YTPQ@#8I2Ht27J?*dhfYSb@z>&MBid}p
z)(95jXn~fr|4<=0XJs7>T>=L1Y0C$w_Gt3&=YRqB8fKGr7AFPtgKQV!@FD8x9C>cr
zPut{OGvfehhMCcizz#;u37de(1yE~aoLuLK3Sj5;58f6)-W3QrG6BR5dcU<;f8+W)
zUE8VQX{se#8#Rj*lz`xHtT<61V~fb;WZUpu(M)f#<N`ZtP}(nwt@v*JXMv*gTjkPm
zLef!CJNB3?7*>;I+2_zR+)y5Jv?l`CxAinx|EY!`IJ*x9_gf_k&Gx2alL!hKUWj1T
z_pk|?iv}4EP#PZvYD_-LpzU!Ne}MPElsYz3m6wjuT}#f-BA}%Ru4h}OoeAa7kw}vp
z9UhqC1467d$W{g%MRD6qN{p3Qdqcd4xu-(C#RJ*WAqb^Vt4ZOI9dS9k_)KhgmafXG
zH_{tE)})r(T|m_#KsiVQlp(6^<j8Qq9?6*%)g%exKi<_To2!A`j;IA}f3OBGBC(Xf
z%z>7#E0aKAeSJDy_m!{E2{@H{QD;-5zZfg>lBB=El0$@}eSjNMI-m7O{#8Z-T%lP0
zl4th77%$=o>wpA7S|t%<A2ATscWgye00ov0cUTOd2wF~PrJ#if#Cc{iM8+V1!?+lU
zCU&k&lX31IG{!fT@u&OBe|q}xT##u>5qZGqN-b-zPQ)|4pz8^vExZMDk<m&QH5Q2v
zmmVqERxp`P7ckvq+Fa9{WH4kcspCc3TWw~eT%%QO!FUm}($Yh#QamVNs?n9^9fNQ*
zULgjZXw*^Y3jkoE`GFy92$LXw#+mFoN{7jy@ofB8vHpNL%ec&1e^^2kJ?qG9DPU@z
z9jawkO0(cqfU^RIM<K3r*yl0SKgPT>gs8)cF0&qeVjD?e+3Ggn1Im>K77ZSpbU*08
zfZkIFcv?y)!*B{|>nx@cE{KoutP+seQU?bCGE`tS0GKUO3PN~t=2u7q_6$l;uw^4c
zVu^f{uaqsZ{*a-Nf9#7}vV@?<9OO{K;{Amhq^Lz`i?Or9izqcyoT43-X4P`!9K#te
zU4P3Qu+d4ziVe&a)?}34MI-v6Pp(t?GnYBjyIr^zy0d^~9)iEyuGPu8E;$!pjAH6#
zr{=y*j1;tiIbt3Y86#zlsVI`B5iN)yFrBB;*HU4z;Km(<e>wTOmWT!-0{)4y{{8(`
zEaAc>`hLDx=-hxG_Lr3FdVm$%y?ZA%TR?<#TURCh(JBirWG8k~AbXV3@Ms>21g0V0
zL1ko;L#jo6yLdfCTMhwy??NOuN}(zsLM`C{3@kknYd4fzU$*Kk&`I=`45AgQfRcww
zHD%V!w!{Ine-nER$n7Wzw1ztnjRh1}O?RhYtFQuq%YJa&L7=dD6%HUchXU?q<`XF?
z;*8?LDBk=)38@Igst4JHh1ml<;qHaxE@353AoA>P6zM=>dac75hse<yz_q_V8XCZm
z>lg#{C54B81ylzrKWt}Wzhw3h$UK6?wd4B0cR5aBf2_q5yf`~NUMeM>n|abYbP+_Q
z(v?~~96%cd{E0BCsH^0HaWt{y(Cuto4VE7jhB1Z??#UaU(*R&Eo+J`UN+8mcb51F|
zI|n*JJCZ3R*OdyeS9hWkc_mA7-br>3Tw=CX2bl(=TpVt#WP8Bg^vE_9bP&6ccAf3l
zFMgr`fBY&>*6j)rH&qrsqd5B)a)LoaJh~HV>54_-qAh9<9Ou~QiMOcycysP4fsM>W
zqMMd6yu*wy&&qL=a4IUyxER1B0@;y`6D$iB+u;p^vqBp6$h>gG`VMOe8%-BzaEMFl
zHy6egRp_L{UGVtf1861~ge@5po+JZ^>5jXBf3K92S?Z7*qdVYn%jq_Em3rOx)>r%P
z%Y@dgL8fT3>_mT@kpo^*_5<D?$pIp*#&Zuf0A~IC?spA{zvL?r=TRmS9}$ucFFDA9
zmYleEP99>%>*@TEkQuEH<NUDLdVA&A9F^1lSr^4V3SCY`+QG47EZ?3Z3_?czIxx-H
ze=jXX7!%08#=?xp*MsX3MqKKQ^yEpWdvxsNLAzRsLzzzw2U5cub!(*zY5J7(DTR4-
zYh;~HxF!~xcBd6Vv6+YrPy&0+*6#GnP$!!6l0E{+>fm?+;KqhvF5Cp<B`iBS)W6v}
z500rCtF6E7VMg(%ZyHols}Oy5BlPT=f7hb|k@nhAYv{%&-E+j$)7Bpd*!L2Cg%7pf
z&3ZLxA5Fwj%8~}*Sw2G<h3E&$jhO(1=)P&U%mN)4Rk5JcPDUdUN*FM8j0Mg^@Z|6~
zYm*2e3TCV6?5B1NxqE*aMe#2m&+Fz%OG!n`J`B2Ww|QiS6U=1^3d+6`ls$U%e}+0h
zH`Yqv_rwmf%zVbiHD?D8IKb|B48=3&PqB<0s{Vk)5Zv4c3jQ-6fJiZm^Rd{3MlPUv
zv}Ss=>{kX!O&bgG*%^Zv5yom;ffp`!<|PP(X+HtdhE)>6=&5FWeLyP&TR4?#H$!-&
zm{X92?L|)l65g+Hpd{oMm;B-9f4))XyDOO)$^$yMJmFn|wgI?H;xmtnR4sY3!p#;4
zTTao|dbG8KJ9)E;q%BBV{;FAC6`|BFrA+`T2-GKNIMVGwg#<3JPVX`na*3QwLYxaX
zI!|(slBs=>5<`ho%bHUeIphIKaU<-b5?4umDmcqTAsdLeBMA`{XCqmUe?Aj97+{qO
z>=n?G!tnzPKVgM|G7?BEA71g}#3zG~??1Tz1CS10xQONhr*4C2<4?wttp^&vX*|&x
zs^;BU4`DLND;}Br%r;@LMzP{yJj@}4+c2z&GQC}aV><6;yi26499WoGm|In6=}!``
zbr&^h)Ok>2R@qd#o;4p*e*sDQpFuYAPt>?+4W#`;1dd#X@g9Yj<53S<6OB!TM8w8}
z)7k-$&q5(smc%;r(BlXkTp`C47+%4JA{2X}MIaPbVF!35P#p;u7+fR*46{T+LR8+<
zMs(<(ewo92Plp}^0K5%%0PpyoHDM$82Vjt^Jp>j25oduCfDzDve-p3)S^XI@J{^a#
zO-HXSN3Cm*!>Fp;F;u={ru>CW7z(*yD%pUmRsyV83a#EMrFg1k!l%}XomwhmV5(NZ
zQ`KUny2VOWijt}o9ndN^pj1mhsCscw#NxKe#b}d?$7dCW%qriMRi`Mb_EA+df~PqJ
zOp*$%V--!tDv*p+f4dl|QXx_-LZirqMX-v9pcN0kDnoo!dieBk@bpIL^g!tJH0bmy
z;PepS_w}*v1+ndgu$G3{tl_a(^J1_DfE-MKE|~ySG5~pC0It9RRd51g-~;8r1?vC`
z6#x*b02@>QET8}-Km{6L2jsvD=ztZF03)CPKR^I<fB>ZUe;G$ii0j3k08_vz_5q&5
zzo2@P|8xh>vPO9o*Ny-n8UQgg08D5AjL-n#fB}O50cHSynE<fJ1!ce}E&(ZU2upxK
zTmj<X43_{{xB_KB1r-1YR1adHc9jEYm>NXD#U=&$FfB=eVnhOo5D8>J9}xgrL;*1n
z1EfF<kpLJ(f8Ydpz_{~((Wd}IPJ9hH+%)Fc)0!hrV+(A;76rhtI|YHbEDeERV~Ya>
zSQg^IvlazFkSK(KG9&{qkPIR~EeQaaBmwA<20}m<i2yt#0ML*D!NB+q2RLvyLxH9o
z41nNb1p??O7J)#e3I!NY1wlX)g#bnj0Jty$0KoMIe*koe`~jTa1RaayM;5K=)K5~E
ziRr|$;z{owRPlLJjm=G0H8NaO#&1&PrAt<oFvyOq1mL?Gf{Z8%EubW_fRdU4fRqiS
z0wFf0grawd>PVug4u+%o`j1Bv`K_Q4Paq(2eg_BOWqt-P;9dR&x8PQO1ux)Geg!w6
zQ+fpNTA)k%1ec&jb_5q-JN5&wU^#XL(IW~<q#E28r$Wt6f-I2a*Ulfs)2*^6umAu7
u0|8(F02QGp;*Su5U<6!DRQ~YU0znvX5<+u<DRPA&)e7P$3IoyvX@X#&^0)f{

diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.svg b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.svg
index 94fb5490a2ed10b2c69a4a567a4fd2e4f706d841..e3e2dc739dd851f2d7d291be032e30b909e3e95f 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.svg
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.svg
@@ -6,283 +6,224 @@
 <font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
 <font-face units-per-em="1200" ascent="960" descent="-240" />
 <missing-glyph horiz-adv-x="500" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="400" />
+<glyph />
+<glyph />
+<glyph unicode="&#xd;" />
 <glyph unicode=" " />
-<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
-<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
+<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
 <glyph unicode="&#xa0;" />
-<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
-<glyph unicode="&#x2000;" horiz-adv-x="650" />
-<glyph unicode="&#x2001;" horiz-adv-x="1300" />
-<glyph unicode="&#x2002;" horiz-adv-x="650" />
-<glyph unicode="&#x2003;" horiz-adv-x="1300" />
-<glyph unicode="&#x2004;" horiz-adv-x="433" />
-<glyph unicode="&#x2005;" horiz-adv-x="325" />
-<glyph unicode="&#x2006;" horiz-adv-x="216" />
-<glyph unicode="&#x2007;" horiz-adv-x="216" />
-<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2000;" horiz-adv-x="652" />
+<glyph unicode="&#x2001;" horiz-adv-x="1304" />
+<glyph unicode="&#x2002;" horiz-adv-x="652" />
+<glyph unicode="&#x2003;" horiz-adv-x="1304" />
+<glyph unicode="&#x2004;" horiz-adv-x="434" />
+<glyph unicode="&#x2005;" horiz-adv-x="326" />
+<glyph unicode="&#x2006;" horiz-adv-x="217" />
+<glyph unicode="&#x2007;" horiz-adv-x="217" />
+<glyph unicode="&#x2008;" horiz-adv-x="163" />
 <glyph unicode="&#x2009;" horiz-adv-x="260" />
 <glyph unicode="&#x200a;" horiz-adv-x="72" />
 <glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="325" />
-<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
-<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
-<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x205f;" horiz-adv-x="326" />
+<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
+<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
 <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
-<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
-<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
-<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
-<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
-<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
-<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
-<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
-<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
-<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
-<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
-<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
-<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
-<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
-<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
-<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
-<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
-<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
-<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
-<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
-<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
-<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
-<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
-<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
-<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
-<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
-<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
-<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
-<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
-<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
-<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
-<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
-<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
-<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
-<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
-<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
-<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
-<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
-<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
-<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
-<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
-<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
-<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
-<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
-<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
-<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
-<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
-<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
-<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
-<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
-<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
-<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
-<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
-<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
-<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
-<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
-<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
-<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
-<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
-<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
-<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
-<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
-<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
-<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
-<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
-<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
-<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
-<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
-<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
-<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
-<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
-<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
-<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
-<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
-<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
-<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
-<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
-<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
-<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
-<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
-<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
-<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
-<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
-<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
-<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
-<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
-<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
-<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
-<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
-<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
-<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
-<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
-<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
-<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
-<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
-<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
-<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
-<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
-<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
-<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
-<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
-<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
-<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
-<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
-<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
-<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
-<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
-<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
-<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
-<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
-<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
-<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
-<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
-<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
-<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
-<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
-<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
-<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
-<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
-<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
-<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
-<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
-<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
-<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
-<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
-<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
-<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
-<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
-<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
-<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
-<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
-<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
-<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
-<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
-<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
-<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
-<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
-<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
-<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
-<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
-<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
-<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
-<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
-<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
-<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
-<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
-<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
-<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
-<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
-<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
-<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
-<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
-<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
-<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
-<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
-<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
-<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
-<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
-<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
-<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
-<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
-<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
-<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
-<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
-<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
-<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
-<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
+<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
+<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
+<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
+<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
+<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
+<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
+<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
+<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
+<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
+<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
+<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
+<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
+<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
+<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
+<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
+<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
+<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
+<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
+<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
+<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
+<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
+<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
+<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
+<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
+<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
+<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
+<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
+<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
+<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
+<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
+<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
+<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
+<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
+<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
+<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
+<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
+<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
+<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
+<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
+<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
+<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
+<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
+<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
+<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
+<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
+<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
+<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
+<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
+<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
+<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
+<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
+<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
+<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
+<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
+<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
+<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
+<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
+<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
+<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
+<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
+<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
+<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
+<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
+<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
+<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
+<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
+<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
+<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
+<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
+<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
+<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
+<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
+<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
+<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
+<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
+<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
+<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
+<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
+<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
+<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
+<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
+<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
+<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
+<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
+<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
+<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
+<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
+<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
+<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
+<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
+<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
+<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
+<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
+<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
+<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
+<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
+<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
+<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
+<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
+<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
+<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
+<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
+<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
+<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
+<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
+<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
+<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
+<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
+<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
+<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
+<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
+<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
+<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
+<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
+<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
+<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
+<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
+<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
+<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
+<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
+<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
+<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
+<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
+<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
+<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
+<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
+<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
+<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
+<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
+<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
+<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
+<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
+<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
+<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
+<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
+<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
+<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
+<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
+<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
+<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
+<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
+<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
+<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
+<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
+<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
+<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
+<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
+<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
+<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
+<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
+<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
+<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
+<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
+<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
+<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
+<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
+<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
+<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
+<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
+<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
+<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
+<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
+<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
+<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
+<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
+<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
+<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
+<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
+<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
+<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
+<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
+<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
+<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
+<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
+<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
 </font>
 </defs></svg> 
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.ttf b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.ttf
index 1f853124540d93345e0db30b84b2713fb7a04b6b..67fa00bf83801d2fa568546b982c80d27f6ef74e 100644
GIT binary patch
literal 41280
zcmc${2b>$#wLd<0X4JKkMs=IoY9(#guC%-Ix~!LV@5XgawLzwtVoFRi&4B<;Yzzq|
z1QHw)z@da0*@PsIyqA!`6G@b6oWOe_b_$P#@)GbXG2Zd-d+unfZAkvV-{<pRThcUX
z?mhS1bI<vnG6E9>LBX3Wc;?Pswd9i3FaAXkSUrx`&zn7GF0<l{z@}h7wrpi4d*Ks{
zZpZ!*_Sc_(*@n#v|6=<B_P;3z;#KEwxh5twNq6GM+Hl@_!R8AuTe&~;1opdee&dB3
zuHKB}9zifaOy@7W^!f`Tkz5@6UloMAr(d*jLqR-mNEd{A4&i+7ML1y3%5Fi}RgL||
zi!Qt7y6=5Y*@^w>_`M^SUUB}0?t9iO6@<@rQX4MYaNTB6W_twTb8q4L*yS58+j!vF
z2j3Nh`>lc?ZQXpu)z^G$?&B8=!spQk>+PGb+PGPLztt}YU&eW%<JyhqT`=_QiZ`)O
z{War7)DeC><I$he=TDu%_l-|m2S4M&9<>aO!9EjS$4lmWxSf0(+a;I;S#pX$!?81r
zPxe(ID}q`APM!R3^`f;)g#n@JcY^fY<DiwPTG)y!c}ptai19rMd-SR|&aq3eM_1Jg
zGFy(%<@gm7QCp}IVnVC1CuWajV&}%5Zty0LrC8dQb{~=s*$&klYChC=Xu+X%ht?mu
z_|Wx-?mqOuVcX%F!_9~L4$nQj;PAS`7azX<@ZE>+Km6eDgyYBYd&V!e;1`7xevutA
z9r7HC9qK$ZaA-Mx@w`Ku58Zlb*I{<pb2xUm^YFmo`G=PuUVnJ=;ad;yI{X0tMRxqZ
zj{pAn>&GuRWclsyf4l#;7ri09Ui*6RHTP@wSWT=t=8ZXH=9myY8a)#IAo_0fKca`D
z*F~?2UK+h1x;}btbX|01bV+nx^t9+egvQ|i`5yx>jQlJU@$>W=|A&(_6vm%?s-YdZ
z;Q!}OV(bZjm;rz1-#tQ;_`j;qrV74A>f+@?>cTDSR3S05S~a&0%~;2e-Lx)tKxMv;
z>UNd2#a>sPt?jDVwrIuBoW#0#yDGI^Tpd#fmJh|%fpzVw+(uuGC*n5@{id$Gt`64?
z4cEQ9t}YQ*O|3)f+%4<)iFNDnd#1Lkv(9K&&23r(y9;-Z-F4Pkb*g}$v9xK8{LsMY
zA#0mgiS=dLRa;x^Cc4QF@cS`UN-jvmR5`U!6_yWe-?)84j5em!#pCPhw)4Fe#va|!
zZnVx*=ZWJcj<(n@cz2v_v5abIJ!>cyo0pio;gZ-;tZ<(36Leh_-5IxzZI8{{K6gW6
zdu)4x-!7pFD~8koT#5eCZPkH|w1e-s_?>1Ptd7U)Vh6W_4EWLlv~6{zZD=1ZbGId8
z2P-#E#D*5Ftc$B`-OzS)XhC9oBDQ_O_QVEi33Z3wsXZPV1}}y|p$^c7cTxw?(8S!t
zhD+9u?+Ja?*M?4Pzmv$eu#nhpQDe)8rq_KJXZ&sZgaI}%ILH=#(<7WO@OQd+HCi6q
zzG5hG9$KFmtiuOO41)3lD~5_fOqg~4V3EZbKGfLxYR$%a-ctNxpiRY5&;@Vp#E_7w
zkT-73wkGUcB*ievEJBCIgv|7!MHb)9YG%{FPcKR$HU&+h!zMahw3wx1(~FFb=ajgT
z%qfW`HlV-tm%m7{V~3g`k(p2s3i4uku@Dj(1y#tXRXLTFRY#Vo)fv@yP&H*$Z&|fu
zwHnqcbawfA;^}-y$tn4eB_4=}ENLa7Skn0dlb+x4d<icm>BA$NM<yN6hxujHC;ajI
zI)sHn(JlzBbaM;8xhY#@g1vR$0F!L3Om${d`$1LAs<yH!XNxvFow8YMtwp<yHtm9~
zRjcByt6_2U)A+}Bu{O3#->e@P+tN3)UA)gG`7`p@g}ksuP_r4esa$Nz(oZ#Y*myhQ
zydBZ3YRahfIn`WNYqM$~qdLmPfP*d!c&KGlGHRZ;tf8!hquH$5;L+MytLn+B9c9&>
z)%sYg){s}cs-;hDSBj2Uwy&>`sF=@n=M(u{Z@xE|4FyAq?hY~0;1VryOWYj5TSU%f
z`^BD|*<wyKq&rx;P`J|cdg0FGqEGC9fAe(nbGgL}Bh`JgXZqNU1^s}T?Z&&Uvu{=|
z5MH=A_x0$8O;41sZ5(v6BZW*);fXVLeCNVT@<W|9{<bsv3mv_Mh1U$Wx@$Yv_B?&b
zC%)A2)ODQCN^F<BSbPEe<>kB}m6<AMG?Ov%AZtmw{n%C_Ck@}oQb5~67xs_8&)Vb{
z<<o?K5EWD@qq@o%Go}VJS_nU(*(AlQIh4M>&MwIx%*C_4-Kj)_rGq6J%mIJM#ave|
z6W_b;$tSPtXlr}!^3VTT99+%bTYl9u??3I@aP6-itZ}+F;Z~$u6l4`VD`Otmv91d}
zER<(S#b#32t`d6j;d0id9}tJcA&h=ofez}MOMLIh@MGecx|6jH@5S#($3Hm!f&3l$
zJD6Q&(h@95us6di-`kyGsRm0GTk_j84vH5XTyyaJs;URwjqa+=zdhYJa8^~?^<Wk5
zU*Ts}Rt1}o6N*?{T2)I~l`xI$8P$4FmC8lQN}MB^z_?b4Hmznbu7eX-i8BS$sVA<;
zDmCudA&^oXetr1$LP1Q?@4Eym=F78?96~C>^8KtwNh&Fei-jtC-6@O7#R52HmK*O{
zb{aZAuyEO0ulKHHb62|T!ydZ}`=7qNxi+xAMLg%B;s5c3YOm_eH`jzt&r4U@9n$wC
zpM7|lQe8tUd+7K(@(<((1)oqStP_e*@>*4IMh%tKx(s^5)cTCd4yu8&8t{;8P)(Qv
zVE3AU;@u~S9&cl)Pc<pvd_nWNFa>OVYDiH%eQKR|9}_GlobT-NdeEVO-@<}^H#0Y+
z8Q5L)1Y^CPR4l~m!D{tOS)0XjnbmLA4_v#m^vM^Q_j}*d-(&C6IsFf%o!9CIaPl&X
zg|#geFV+9@;`eX`hJ?@aA^BN(won6(WNK|j6%G<ly2@Ie!P4FRVuXe8CI<X2$<iSg
zrkru@wb!?G-gw<7hI(gRfBWA4{wHp~ewO4J*s`)+UNC#ke7Sw)mVv(OZ@s0sdUf%Z
zTdxPLj(<~_C*O~;w+l|NRNR;I#hK5>d{TZs`|W+=eeBozwtMwk^=<ckPLyI?DE(QV
z$$a{|>|gMSwn`IzBM5z3t%CUFVn_xPg)&+-Z}Nm+_k}F^P&%JTTTZ;stRF1+?)Mjd
z@9iZ^PjW}`nw`J<%#J^P=9j<Zbiy0v6SNu3;~v)2keb1|d$YkX^P3X^7GS%QGu8i9
zXC~RMdl)O+pDS%u)vcx6{RRE_J){L2-(SqvB?ne2A6An($bf{9hQ^)2j8KIlE^1Zf
zvQ`~~ptNMvhMa0GtBqOJkx^4Q)mc`XvZ_0yw&YY#S#8UzzKq(DQ~hPNGfVxCWOGCg
zrgrmjl*{|9PLIDalvQO9iKu<HDkVU>)n&CF?*><fvudooud%7ElTO7vS{zp<o7=l+
zS1M~gB$%8I2&US)zCP8hX!T(dP+fez>`C<GCcb=-f|#XoHt9HBC#xUsFO2>{+zjvK
zuNOv-VW}N|3CU6jr(;`3FW{u)Z?q=6LBotNQy3JAAabkPmIDEaWZ{fDos*^;yfMJ(
zfi(x~V>RAAS`5<>L~AaqQ?lA=oNs!R?p{dTU_il`#v4*K7~%2z>|@S{!3BYEIG}H)
z_pxnpX#C#z?d;e^VeztYJHy`@w=?040O^T8t{05-eVK5saD{M-a1YjMP6ciHrC<aw
zQg;E26wYXiw_@L4)@EOW{q~G@)@QKaSk_kEo&|Mw5p^^VF`W&}*F>KltrL=JU^%w?
z%G&%P`t)e)acuLg*uJ=|U3XVDtKG{fM{{8sGiF08Ye*?QAHB~$=KSRE|D)H310@=Q
zQ@pWVr#!_^eBAl$=<l+}PPTdMzfN{^+_fKj0Y?-_-i+}#jq#cakAttl<K2AvFV3m;
zWpy@<s(KcUsk#ayx_-ilhE6e}+J=*lo<E4e?8Ts_Fqr1R<k6+kpn1V%ALa>-)<^As
zJhjCaXt;)F)BDM{$J2alXh-S%@f4-CE-W<2@5?O&s9@<yvvin!Mamu+{_;=Q%lcVT
zH?{!ZFyRv65_zsXS8(v_@-`N-F^i2|!fN$553pKRdq97azu}{Q;yzC6Z(^;Qpc|xx
z=O<_fPzw?{HC$HX*<yW|)SUVhG@fuhZHA-JuPgdP(>VPh1%VaGs>!k%%NCO<x-^-<
zw^B*kOx5FC$x$t%8S^v+Eu$y~A+r0_q@sHJ)Ea0VAy4f%ts~@x*5T>X!q7hU38p|b
zovTxd{u+j_eYEZ&L7wLVxj-V2==n%JWNx8UD3m@%8`0O%MTNo`?Y_YEs;F@G1lm<7
z6B|dFie`mXi)&WTk!DpN9@opsy47=}Th&KCR=bk0jD2*^NKaw!Rn)8<*XyrZg3!aP
zBWl)*%=02T#&ty@BtHoKp$@D49Dxi+JJ#tozAjnHMJVYQMGK5M)#A~d7;9g-==9M+
zC+sLPnKY*bgA}T+PoUvsAa#550cf*+sDeG+sdP`!3k^+d=n$DPfw7($6FBsXCobH2
zl%02U>xEDJ;>?F$edpDO&Sbv{2MRQk@FosD&zkxl&zG*#jvm#nE9D>W*MI%|7F>mk
znUk(EmLpgb1%W{>X`^~fr%;5k(W+UUxg1kH8C5<=T0J^pMJF6Ela21U%bLQaO&%6D
zgK<3auK;7Dt%RX3F)~Ql5#33aHxvaxlcG>7)XBT$-NHQKbm2UK)a&JCbx}s`1@%^N
z>dh~!^F7)U+zkubO3-P(KsMA2u>BHcpF5E2BUWhiYBd=cmfCW#yk>y{qb^eRN%8a?
zI@{~jT2CW}_xYn@Fv={!P(BpIW-dEZ?48L%z4>&$7n?oZ88MY%`Bd7HPGK|A;1<np
zmNr{L7Be<Yq!b4H=7v<Q`2o>YEiG@Keut^O%am$rsLQ0x9U0T7rgScss@?4KCe!Dc
zCnPOzoBk<Nd#BmB!jx?@-7&3Wxl~gnK44}S-dwyH|HXCj=9Ias&Ge~h9j8mRIAt<D
zAXe2%r?<`cl&P(YzFgm)GUr-MpPHIEU8->zKkurMPR~sJlqu6;PIcA{-F)-Vx|?r?
z`d|?X$B)aZ$q&7MOasjecMHWhX;F=^_B*??Sm@K4VoSC+2X&#Y3>A}<3RfGBXENMw
zg?V3lkXD^WkCwy`019a$&9s<o;t~qDgWBZLAdl2eXsI5p3tR13wY#iVWsBWibWyht
z7j=6`&xBAUK!AfNw5W`(EaR3NAJk4mK_gc3;YI2uebTGowlm+fX4cj`jrr_um*c}X
z9j=0O`?Tia+0E0SL_)?8pBd6dW?8$t&^&EgGrpH~xLn6BC+2IOKD}9dVR*Lq0xaVX
z_Zyp}b`f^ZOab{fuw&YUB2+Qx>)?Cn=eC2St6RCAO;o}h)=XB2SH>r+jiH(R9}{<p
zx0mz-^iNzT-afo_crVEjaftYx1mIhc6D~m!8iXQ@C4ea4df1WXa?#9)U}h^Mg3p*u
zTqhl+2vb<W<zWBDcDWqKzV2{|L#(YvzS-f@ox^9Ndy<#>PBK;&Wcg|NX{>QR@W3{K
zY;bp3^^^Hp4EgCcp#a7O7KV(e2E!07sKTguG(W~^?4lZ66!OsI#=Iw^QS(<pPT3`w
z4>L<sLfEm%ZnAX+&F{vZMX2)7DIc9OGsTG=T57zFG1==8<yfP)V&3{lN(AIR%*$po
z@18ySd-@Cdd%+Lbnh!qEpPUDg@s05(_UsYQ)t~%;P7muK=>ZUvY)|-*On%Um?5>WA
zl?50LJ%&XEbBcfmH}zOz=!^;alP6P=Rtc7q@Q=l%gyhRfi2{4}=YdE4KV#1hzuEkL
zQ`e!oCxJ!)KmnXWYrzo%_u;5NbadmMK<}VRv{vp06NK?w7^1Q$Tj<s@%@jyYfOJ?H
z=<b?DhNKd0kW^I)<SR$TU~@6TDbXTel|2deXZ;P5pZXivI{fUj1U!)l1#@jK6)?`=
zSJ?N@qURwY0`S$al6-tFn=r6ZKCntzRSe|;%4EGq3!oJ+1z;p;HHzZhUnP4(TsNp!
z)JUHi@a}h-d_h`c1uf)Lyw5SKO{lG`s6Y&|5s@!NY-A)QF773E?w&V}ys_t8<KwLN
z*{b*7*PmX#yR`c#8+QWdMNxnHeLAo6=?bQu$g{P=h7q2vuqZTxQ5GeY05&cR+zMaT
zQ%}H``-v}M5%;OpiW=xsafFyN$a~@gcRt6=7J=(QCud2i4ih<{oQfxx9X-1H)Lf~b
zN7Ikkh4_+~lVb`r2b(L>1RM!76<rcBIQ|Tc1dMMRR5_WsxK7ri_~La0J3#gJ<wEg%
zP6Fr{`&R~8x6R=ym9nfYTiP)EXbt-}l3aQc6Q8|_W%kGf8U}!%%pIX2<~>dG8csvB
z!8uB~T2M}Lf-thpE(M7RjA_gX6%1j2BB6X0eI$mNZ8{a1K44Q>^W@3P_G84KehO22
zJG-|8&J9&`rg~weKrl1JkCIVq&`ucl7;DHYw@0%Zyc$6}?KFTU+2;?{&=A`cEfAzN
zU!jp_g3S-`18T6M@<#h3A_2$=zd4rj5XfwaD;BKizzZu%((a@Bm!J{db@_d4*S%kS
z85)uJ6H=aVdJ9w~XjG@unH$c0h>vFo<4HQ6M~DkI2t|eFJmy!hTnt8Ojt6To$AMXy
z%Ec-Z9jL;jXKDjiV*u!Qj44=K))MH9htwFwi|JpZJZ~{M?9ff()c#tpX0uYaf>A6l
zaV{Qgbe)MnbW#laMf4`G#PjHlIUp%<3ly2&o*d>RpmOTnmY2VHufF-SoA1<)E?~R(
z=WgS$I7Euy4Rm(-QH_=+`sBw1ta=csoM*|uG8xBOE~wUwTAd@51<n9CCEysqpaEcl
zVi?P*5Hs;Ctuc)`LPe7hgD`Qd2a7<dNZEkzz~v2MixdVZ0XeLgwA?3QXr#xzd|2>j
zuy`QZW4sK^2*CTH5tN8z;Mj{$CxYdT<=<HPhxgL8#&%^clDsB;2=W?3*{Z_GAZ)%7
zBX&@&Ef-C-G-xK0)U_U3>Hw1#U3GNO1s#SIAVG`KswTTkWM*}C5vDY4%wW!qp-T+P
zjiH`H`Pj08wXN8~6_I0Gp}9bcbE~-^4mD3Jt=O_<MF|SbUMMQ!A9s^J&iReTf-o=%
z*loyI*T|DV5H4Ul@+W|VSVDdMEF$)^yy9XVlG%c8PrviJtyf)AXl}ak_FZ>gbB3QV
zH@0hfXH~q;wCr?t<n%fArY8HG(@8{ecQwZR0dRGfaGG$TP|Of@`g3ZktoHJ84uedC
z6<dZ@u?EnlwXC*!v@Eu!mDOn;&4aB_S(^pc&bER^PDi*NG!nE_2D8)R@%bg<ZYS0{
zH>u*vs1?)CViBPBqx&5q{6GO8C#^wH0-chR_FWDrbUXgQ%zxOyH_!jd8*jbwmGetZ
z>mI9<zllR*+sp?k>0oWQ{QRn`etwI7z}UM6U%>aS8Ge=hn7*WU)BCt>J`RFVl82<X
zfGc3iD{+%ziZj>?Fd<+Sqyf4cQeRYe?3g$5AO038R??pu*~f{I-;y@--*Usl#4Re<
zL0XHkkYPBDUr**?V_4F#Mn-@8g*jJTGHZ?Tt9?CpKKr#hdN1F8-^loVTRu<vAGFU6
z3}ia@TM<eef%}Pmo6tU}lVEWziqY|5wb|zhhK%K%K@9D)xqJpc!+V%il5F(;u#y6B
zOTZNb%LoP>^_1Pm+j5TO#%nF7n|JOqvwP95V~0xY6*TP0JMx!rzqf3C;CtWMZ5^~0
zfB$CDI*O00kSYqexd!cwb5wk$FblTdB4HV028U~%vtf*Q%f;rdIV3Y`GsSf4V#7cw
zCfk?Lv4)H$nsHSE3V9aY)Liqi7Y81?fbh=cWVC3e2(E;^A(2-yY~Y<$WZLA)Y7gE$
zT8E=mZQ+p1K(^Syah8q-KrYPTrn>-c$%9<8=VN<XSxYUXPmi`3lpM^e%gV*R8FNXN
zosNq-!&sU8f$Ey>nP74)pTvUR)I5b;omxX3DD3l3;dW|5Dauo)5oQzd4%ke=n%?~M
z83VJpFzJdbi5`Mmay@YZ(+%OsARvLo1SC=ifx8=s3|(X#g#d^XKyO?vL1Z#q?Zb;5
zA-fy+dO>$`EsG3s{LwJd8U9DwWodXXebC_2=_AG&D82jX5Lrq30g|WU3-n9;qCyE<
z1?eqPcW{p*(2a2s325o|LSc9|Aw45lHu+UfTu(L|)=yFP*VE`$m9;=Po8=Y}R!}aM
z;WRW529hmKs7+7^%Bl}03PuiYIM^lC*n;I+XCVHGG6`wTL(U9~xvx*FgS6)E49qQ%
zC;{JnAPtIzXtlv-0G~aTPufS%E41M&N2w&e_2F_XBhp*Ps!L~{dD73yyf)TNi=pdT
zNP@zwBc%)LA(R<Rajxrmf$|guvxDn;ijS;d8x#DYU>5GyG`y`07Vhif3$W;Z9geJw
zgy{`K@NafEbUml^`&HpcBusC(FOTyw{RZ@<`_@2y18KsYLzqEybJdUOVAyuJKY9E#
zy8nLMKS(N6XIC9}f=p~dGDqksgTh&9$ghkW;;y0tOrSfn>_uvl!!@Z%D(&MWjXlLx
z7&NiNe`EN*;PWEA7v?n9Fnd|GPcWzL5Jg4N0^J9*27<y{WU`6V39%N?-Js{hmBO>q
z7YoDQg7}`yo;_9#7Azd&p?6FG5Qp_rgBBy82SCT5LYo66_9A;R95{9;5N0pvbL5--
zkqE^(jjVfQ!-e3bgNHXsw1b5N%MmuCoqMP$v;wgoMTy5;j9QS;YtRL7CxS8nfe{!6
zYy=iEL9<ry-#({1-2f63<0)K?$K;L&d{F2mxckvEiv$-o0qao~<l24->Hy%fV~2X0
z#O3|xh#tG%Z}*6UDbZ(VN9;Z^B|7ZGd+js^n6tA>CGoYbTiF@3mVJ2J=j|?+o!-zl
z880I~AS@(>cJRd&JQ@M$a&ty)hnfb@Dh49Udl4-cqa2@%X3*EDM@yqOtz|8Tu0$~m
zYE7Tknnsu6jma2wNo#M$UbG=W7NHtfw2m$aG@p0Bqoy_kFC!^NMs$OLQFh2!z+Ix7
zM>z-tp#eb?{XvR;XdvZpTC?;Pp)|W?cP_uOrPRD)YKOzQ8=6vKS83O-lDU7Vzki5<
zI&>8&P1d?OJ+0UY_@_0)6vj2XSd1>}KL?^m6nZ%CJqw$-0WX955Z4na7eyyYccvyX
z2oy84(4K}4Hj~9e7zP9&q!4U^wJrfm(Z$@1`9i)Pc3E?Oqwg$s=L%125BqXMlQ&{E
z>$jY(Us+x6Y;n8Ureeo6gTdamKflqw7Liabz7AKF^yV>dXPvVae))f8uY5-TK6nmu
zLi#@DYYY})m#|SN#)#+QW#bcJM;M=$vf9P1p(+nJjE@pf*Lay0t2mY|j1H`cWbB{<
zX62)l?7%1mF)+<>Y}EIuEedwkE&~6dBlb|JM0baj?lBR1Nh1-F@yQZtvKvTG?J+hI
z&{0KOurbPhb=|i^@dk$zgzj$L^7yjSm)G5T(>afPdhw-uA6jS0HA&OzL*Xj7Wgb&M
zlRrD(WVJ}n+-Y0puDW+gX~U{BZY$ilWW@%sA>;t&rE~??y<?S;KtJK8g&1&=*PBEX
z7fwb~^S)jhf;7N+m*i%WIT#9*mRxOp#@;l~Y%{U1iSeloH73)o_Re{ImRT9;^eK%#
zCc&d&O{9}f=dpk7o^I{~F7#Xl7qVdv+$<F9h|<waQ8Wc<!Eu7?ouu1G0l=$va72m=
zY6IOSs}r*YIshU%fHf4Wxg)0<CSEaIO<xPw;cGx3Xl(-ejX9&)AzJ|olK6^Z(WiJ1
zr=rRjf;85id?=yhEWo_t*uiMDG9?6d%PTNRrNE*^i*C9JucN!g7j|bofsS}Xsi1Ez
zlp5k0zXE0Qi6@R7dO|v%mf3JRU=xphJzFSbr4^zrkPd^+q7Xm+4f!6(Kk6@#UMuxi
zEOQfee0S|=x7+A0g3A8kPKKe|>=UgvhIy`es<9(OlyR{j0uR*$h-@{gKz7%1**%k?
zlOYRapLB|@$Dc5IS1`Kn&y01wBjCvqRq&F2I@<N&E!1^!`$*ThyrZ>d%%3V$1Q2;S
z`7-d2?uP^NVzR_O+)wXPjNWMt!S-8xyPDp`A$lL)3)O{|74C5<edN~P(^i;5SQog5
zmbV?4%Y^;O=O?yxtlgzkx?4w^$c~I|>YGP5#~nRMds7vZ5&8wZ(r^v{u0f2-j0|9Z
zip8kJTaaIQyx-V2iuPB)t&iCs->brSvZGsL<3W8K8wA7Ug?@;aj&AC2jc$%R`qBL|
zdSvwO<NEb+{_)A@$M@^++0KqOpACG>Cdpe&d%pIK&4rQpkrkD3LrejN4lxDjC1MIN
zbgOuL!KFODppd1J+?pdF&NUDdw~~%f^u#*JCbB^gHccU`=Qh4}PL3Uz9NF=4`(x0F
z!4s2d^>O=SPR@_sBD`gcXa1h;e}L-8c74pSj2ky(lN<+{$Yqronrf}kB1{D$72{Sr
zg21pec7W=O5Y$8JI+^Eu1%a_gQk46_CW(W;L$pl@_}KW$<ByYhLo<h_Jc%#3fZJ$W
zKft%SRM5F=xKNP_Fbhcz>rQ}4Z&r>0#QMlBVns7F0E8Zllg+cxU*K5-Sf8k)>cByD
zR+)FVvn&69**9`M`(WL{B4+<s|D;$U{shqVkL=J`cRzfSKs7OS)1ty6jxUyE6}S$e
zI_*4i5mSt;KS2F36kvV9t)|&%G(AucWFXcY{O#<T9EJwVr7bGH7j0{c4tt|*((N$U
zed2b$zXk6M7Aghqj@U0W&qIikgZ;uI<bX(zxN;dmoVfcK_KctuKp_?P4@FdjYtSME
zE+0kn0b_>Zf|eCMz5v#4M2e_>(&f1matzv>$xLYm+}2ys<ZHe1kgul3_u*b|ZQ*}d
z%R-iX=UDZnOE)iFy17j{;;pUq9&_UT-EVyIVb-r70$T7BI=2*b`y67A>k)hGhn7C0
z(gTPkq8vJcwj0s41jbqohgBWoUbHHi+8U;|T7+t@X8;ywxom{_xz^qxr&GjB+{7?{
z?)snKaO2OeU$Eex`ugk*=bwFb>&zD)xMb4<4;<Vr{%Py4ZoB!_|GxjK{~jE)HEg<K
z&!SK7=4T!toodX#77!Lx+6Nc{Ha%e!0Apd=8{RcS*f7k1Wi_8tX(G8OOyt?q{P3df
zBQF}aj=Yn6XgQ@}qU&tQhpIZ+V`hW1LRy11eFC{;zcsmqAoM%|-InqZ1dk(hzC+9-
zmN(xarc(%NaIsI!zU=C&BY_3W)-IWuTzc~tmR<GzTW@xqd8Wq_?6A8<o9(PT+kMVA
zzx>6Q*3Y|V%e7a3;!|_hJy@6~o6q^?%_}agJ<l9m*tB3rckc4tn8yacy(C|Ryt25E
z64naETGB9q$iOQ=1D56kW_Xu~8o{#GMAU$HX`eY9A=6O}Dq6IG2x28yaUg8CJY;2G
ztRa!)wBhqXhO-8?`>3LmN6ZCOp;R)DbTxD_!`^<3T^{|m{t6j{><Ccww;$6FJoYx*
z|7G^@Rr)6Ow=1s<oJBzUV{e<S--eOsq$_VK9e(WXw=c=Ehp)sn|9j<?tLsTd8NRyv
zA*1TyL7rdf8Kw<<H)-If97~ZsaM3f0i~w5#uIeQD+~5HV2EvVCLCsc+xs>eFWHUZf
zm^jAN4w)_Frm6I$XQV5vUy8DTjRhK9CUnLm-m&`L$(?y3a^Z#NM#AhO{Xt9h{8?*e
z^%*@{9vd3z(Stqc5R0b}Wx?3b;V$q0wde}vW?eScuf6D37=90||J(*bzj%*0#>V?H
z=Jx0K8Tas8B2mIGC}KU1@v@<#`+~6f>6ol&u{eSF72$P?(XxpM!b9KMW(*efuT1XT
z8dfLf@77nq#YUqP(nh*8r}Q=I(+>R)bpG_uk`0L$)=UkOZjMm&65nC&!Fq&!W5aTZ
zcq>1=B5*_zBuv5hn#YexXy!64NHIZGAxJb)(FDv#0PQS*H3Cr^_^>gcu0V`%0IMLy
zE3x$VIT~8}zWy5U&60Q~YkJu@^0NMG{lLqJ@4%HW6O9e~_IA+N2Pzw0K?h<+AR-Lf
zqCJHCVQm}rU?7eIF)rlQz#<Igfm~U9BWoBJ`Xcrp0AJtI7h*N$_rM$18A#F>;T}S|
zkDDU0&~e-a63FN^N1Ke`+yL%j{4?%Uxe?v!#GC0gl^a%%-joS<jp`}>N<Ih0!dNnd
zcHu@o<Ja#JyXiLpPNl|vWrQx=e}&lv>hi=Hx(eq+U;+S&`Fa@@1PE$UPz<mLQ)P01
z8;CR#3OYV`mwU=i)aokthSQM$KK(jbPxR~Dn!>M*eQ7r>_r@;&9^T|8jHMYXl7SkT
z#`hU~qhNt%N5t;oAIpoW!<3=I-ZFS}+!*19z=J><MwnC1lF$HWf^_sV6mCvI)esDv
z6ME>_5q4xuktJ1&?ts^Gq?H}xCMWxbjzPlxD9Qk_L>0cH`(Z+GzVq^oEQf(Ocfzf3
zl6xVHWb97-J`?UiV^o0OOO>0rPUEfUG^EgwDnsl%$$mrV$^<h_UOfEzQA0CE>zP~Z
z#$5T9V3GbNe~riJGKAiyza=jJi~b1P@E39Iu=*Fa0bA5J&+%W#E97g)nn~JNo`oy{
z9Aq2xNB$~K53phNMSkh<OF_nlHFO^Bm5^)wjQos1c<vyNd_blPQr2i~!aTuBJt6Xe
zgak!C?4!sBNHswVP?#(Qi13AIe8iFuk+58;gnLHX!+emlKEx}%i+H7X?=JB_9_}!D
zaL*ogIzK$2U2f<QV{u8;E;!Cd+eNWKK#(amsA@vHoOZ}Bi-09Y#;U0?cs4pG1XPj3
z{Dfvv;>AfCbt0{@yiFB-)gTmsV4PVs3&S0q9$K<xYDN__!$~)XBNXmXL`+&jlN+(}
z)g3!t-MJI*2X>s$mZp(2I6rax6k$S}jQBXCO;9W<Z9=%rNSnArdBS*svn=V!t=Yu<
z?4f7hx!{DB+^)aP9{Tz_7Z7d0MWcK)1>V$4Id%HV>U6FP06B+x-ED9c3}wu<NLh^-
zuq<fSkM>1qy@_{Yz3EU8f7CQ}8fUNcbR4E(RO5=;LRnx%r@Mm`?QTUg1HYU^S40y)
zeeE|*g<eZRrxuqS%Js`Vzz!)>(uehGat~j*M|NAxqDi#LF4-sfg4U49oeo#ClF8fN
zP@m|U-Bp)8eNO5wta21vH;!M$8qw^uTTBw-i#<W7hsmMnjFe<=&JJaBi<_#=)jjL=
z4vIM&qYrs<r;TtlW*Qb`WXd9lCs?LfBVzChw5xeZZRb23B<=Xb?&jgeL;@h(n<wiS
za@`Ea<B1Kw8wL?V1$O~jAB(xFhIjd5p$JD0_rpbbLX?mxx@zJC{xU>gC)&9mpp#UG
zqN%=_@C`&|TOw(~H@Yy6KBy4;8WJ5DK73y6A*M_dC@d%3r!u7&X=>)ShtiWn`~@5t
z5ix`gxR?cATtL`4sN*==n}>fEyEuqbxxn|McYeCmyJeI2M?b20eqHG^cSY7$U$Llk
zfA=e;nvDxfi!QJJIefP_-CtWO`ImokPU(WZ@t0nzd*G%8msS7dC!Jp^Exe@q$3F^P
zI=^J_>-bpD=vd5GC2r0Lr8h!5AzEl&li^1(Q#|I&Po9548x4-*aRC!KaWu+rT-3v<
zLcbQ=dFN##|2d0|#&wPl-~6|cOK>fpbL0C^b3z}+ho@HhK#{0peK6wI#`<75H^)na
zu|7atu~W5v(~h-2-l;!+%7*KS9c#-w^(Rhfb6us)V0^GYF}{%;YOFXEuL!#H<j|2=
zJ2!<XB6cl^aiBHFRfqkFbVr~YqYy725AW(upU~=laZ2Hur#>ie*!<K7(<V2X?Z3Jp
z=KDVwet+5rPi?OFVg%uQj#HR{JW<RYxnnCDohF*V*aF%BeF2eK3MCICe=osaA}_!G
zOGC#Q_k972*SPPGVpWub4lT*}K56$r?x*PkteyCk2|tF8wGjRwGwHHO)&U9x$1q~B
z5LOM<Qj@72tP)mD4f!#95w6>VMmqEGUdkz?-?<3F`puEwF^~KXmeY~n!P2F|69iS2
zekIN>VohjEi$2q68Bc%4?+C)ba@`v6Ne_%^YPw4@&%OIU9;W`EtA2G`>GoHjxzNho
zMlZz1*`F9MYs`pmQ4DR7sjiIXuIP9nhJQZ1lz8YimfESme%sqSS?V@@Gb+MV4oEgS
zf?de21|cEuly`zIXbBA6xB^>O;lI+r(sYsj8ryptOYhWQyG_Lree*W`HL-_&EWJa2
zZ5t%B5mWgfbT-O8UB<PxSQ*Yvf_VX~R3a-tBv?uwBOno|1w~ENz`}dZ<gAk8Wa9y{
zNI*{8Xt@d_X3JQf#^V;u7h$BflfMq8jG4stNMxlEV9C}@l@tD6e?p!rSNne&sP2UH
z{#_-)()bYP>c8-Z!+zF*_u-cy!@&^T?ofd-v<RI-H&&Q#p_nE~-jyTgD0y$O7<ci?
z3_z(-nPCRn-`$1C28YwvGnJYTF3trIErZ|~v<r^r45KW2q*z<9Nwdlggv5{42Att*
zpd=7LS_;cYC<=TRttVG7No;V;NXNqe8T9%B@5RIE8TN!IUV-!Q%t;MC@2d#K*YEkE
z$rbY=t=X^;3(VoOKArAVc2xzdox8jpDb4D)GhQ{|$okIAztEPxS-SltXY*S4DFxy9
zpAo}NxkFiuAGbP~nuE4MA+TCE=cYgpU>&S6{ieKMbjhfdVCfC!dz0YTeul6S!&fa^
zer>Z#fhirCi#LAZ?zb*#TX@lxpS<qIvsSv#_oip%*_62(Hl5iVl&uy&VvW8yV}^du
zy5K$E>zRJ*dE2H<U!7}@^hLg-|M+JQt<KrZK6n0>s+EI#Q!~%Kbye1HGlgq%SI1&6
zVfr$}6FBAB@_zs;Ng#@C0oP*Zl+`&NZ90ZxAzstxfPJR+LP>*A^CLw+6f_zeVL<4h
z%S4b|m+zPJy<$2T3Z~)n74y(=B9cqCm}#3`VY1Dg8y%cFrO6$0`IoIxOwpj-=9VO@
ztELg9A2!VzaHk&oYA}$V=k_jJY06c#T)42qEjnc@V-8QPH#Ie6adppR-x`cexurc|
zPxjA<48EIQzPAux(B|{U+##!j$!353j9Hh@dYY}gtZnrpCX}G~)NA)!qZeHE#7gJ1
zy6(EBP>n~ncPv>G>$n^u=lJ)9o8))p98j>Ch+Uf{P=pN<ji(ynr1O!Od{E7owFMwT
z9xC5}-Bwd;ZEou6=W$+uQl={2=LMy)qo;px9vAu;L~}M`LSmB3+|Xf4=Od;pC<73a
z^uC5vPj}vo8X0*COqfw?uAjT?>Mft$_1P^~FPmF$uAO|~A<L}xGgsYk>$NM^was_1
ze0XYKq)Yu@wc~<2x-Pyrx!C6yhnnn7YgetGm&wdqziKUZChyzV&p2mFYg6v5X&1TJ
zg5;d3H4E2K%KPdCYp>oq>*DJ5jg2%-K??!2P=Q5KM8j#qmxZF6W-3{tgBgkjReNi{
zJ>x(B^EX1E)vmfbT&nZCCe6kE=2EM^i}>z+4!6_Sy3fPkYxsLDe{baPNqR5hER~W;
zm|>tHUK%md$oN9qW1s5i6P|ZCt2{NejmeJ69~-dakjp*cU`K~KP|LuJL~9D4&ang$
zIPWF0RtP*3G6JC=xB?kq`G`mZB99V${*39#&*?9JF1h0It1eF4ANs}f$xZigqGm#o
zscsi*N(I|94V}IW+t8Yxbz4VOZLKAF#>UT%kz3jM;qrR|8!x<min~dFvv-I0iOUU&
zX4clPsH+`*;$C+uo0?fYAl}k>U++Bw{-!2p_onm6Fp-Xb3Bu9Kb9%gx6GDo^8fi4y
zLY6et=YUcNDC>&4q{)@63k=`vpW+|B`M=nA*mv|N$l)`4_Pm%JYcRz=JXjEaIoyt5
zH)PR3dnS=f@mc|_gDS>xzCgjF6dc`>QIlNGLa}jVi$NYG8LUPWL^4QG5R{{;wSv=w
z2n*1{5wgi_5o`vNWY3V#H&5sT;T$Z&D5p4`RCsQ2h9xX!s<V(+Oy*P}h#;DwtwU^+
zJ6Nsg4;E^D=e%)_ueP8+s8lm^v%ky5=CGChLqq-gGx|Tdy8O-lD(BzyznvKz@GG{Z
zOKpmOAb2LT{LM+LG5&adj%`vEhCEi2(U?=@9jwKgKY|azh&EzjC<+LMK9DF1qa2A$
z|3|k0Ga*vo!~OE&Z~(PwoCV-jh%fwzKkj=H-y69Qh|fZd8vl>==I`1f`xP(Kb*SxQ
zN2Wpz<|LIBLexGyi#{H7W98)~s4&ZjaYmXOG*K+|4rQOE%FFX8Jh0MWV|R8T6d%|q
zp`_q4nEHr*4jKDcAcy`+VHuAM@714T(hWPF)1ML_-*LkubnveLPKRD51ob6S*>2dm
zfB62LHyQ_s-)M{|X2T0z)TpikG{i~H>2WC2ME4j&uuN(sT5R}f{bz_*V!J3H%!r>S
zZk|Ro088`nPlB7<h4lg=+#r?UzP9mH4I5>G1+o<KgJK(i_*+4Z4vwX!s3-;%;*dO=
z7vc*+R|qw2%W4^LxkL^;NFJ}EMWP^Ah=Sut!9;iqVmL!k)ceipZc1M8yG#(}BjuQ2
zqnee~>7L}Y=BVO;jg9^4^pcHV{O%VwE=gCLp_f8W7KchluZ*2l<8b)v6HRR$)r$3K
zsb$5@mt46#ms@`2B{#2NYlyP+BJ#20zZ1SGUnIRjT9bq{_B@OHo~>saemDHj?4jQi
zT=si$7SVdH@VfkCnQK>Y6hN<>E6x@Nf2Tj9?~%g8-w|j1o<KPIP4W0tp<vnq?9_^R
z)FhB@P9p*k#==!=LSSS>I+2QQY`DNA63>7PL4(4JfOX|%*2>y`#BTc)D*1fwSL`O*
zZ!IBiv`+scFGU0d9kr?c2sZ%Kd9)F*zKnD`XhCy@Vgrp=O-^kC?LEju;L*Y4d;v}c
zHX+#r6{+!{3ez4Ti%0;Y>;ouETBsgvYv-eqLUE}$6ePk~31yXBVk_e-Djy-NtTUh!
zVtJ*@;9g35O>X4W-kLJiDd!L}-1~}Xjd-KsmN25OTEba^VZ~7A@SU-Clk`-z*Y~Ir
z!0}@<<*Fc`y;<Wu;tzyNEkRCCdgFX9K`S2@0Vk6-jx<@`m(h$wqyQ+0#xp`^0&z&>
z50@i3geSZnq2yKRb|azH_-)K0#Q#!`hzDb3Al8`Z$a;jukBC&Flae7u9v4f1>_Qk8
zWA})I8!63k+?|e9Q*PPF)FPmPu@3OqHjIxAnh(#7<&~XaO2D*54JQMZlabJf34ts|
z&ICDp?d6wQ3u}4#W&I#=IPor|g~7l0*$nK_ZTQW4o?S%ts6E3=LTRJnWZYd7Ckce$
z_R*ifPw^ksfA!K!L}DTcU%%XtdX!%Pf31_as22Df4|YL{5-1Mt@#8LV?bVH7cSwsM
z*%0N$)S`&^<r!Kw0($uLo*c?l2i28An?gQv8bKH)Mr6{l>gH+Dr%jE1agQ%)dRo7S
zi|v9jWROy9wfOsBx;-@9$iwK-WC`&gMy##_vMLX&hgVgDR|hrM%pR=;ZOihsX{`m0
zMa_w@I#Of6v<R*1kV8GwrGC>i)c#5)d_lx?HjrN_Ez+txl8@Ao+L*1WkzEb7!B<cV
zPc~WPlK7S3vytL%ce+i|N`F|+OK*h(#Pd`zAX}ZSsyZrK0>Sv|qtK`AvPCk9?C7zt
zm-Kg>4ptvvr|Z9yR&ck(*YPc~hZlnW7l1!nQSGRwl0}4M3q-U=b0kx%v&Ci}Q{9}T
zytwX+QF^F3hhDWIf*4|yTq1eoGv(pIrb%lt2Vgk(LZbjEW-A$TrU)6H=7xoJe(xt{
zx^GzNHGBQ%`0>8-2KUS@iodSbYmF2xd1Tp5f1NtjTg#qsPMJH!(RnF5ClG#y&0BJ_
zKjy0q_!^n-mL>YPo<Yx>ERrJ}@HYGXmgax&nlYmbhyp{dN<e;Cewg$vUTTW6et>o3
zAK-5MLkdvfPfHKAKlD)hp{0M`zyHr8+ke`}zJo)5+P9CNez@)M(m(Cr|EHyg+mNnI
zYc!2H<wZ2W<6Mg|hiGd$NIrA;m9=0KSkF)6Oj!%eKaG)x43;)H5nim(;w>mifJCX8
zEEhm2LMf3Z=Vf8WR`=14<a^;6Y5kk^Gt$|*PS^T-{e|5q7Q|jWdhjl+%EKQlD)h0T
zXltSE^evX%ZKpTYzx;#Rq<%NM_SFN=9==Jxo9l$s&Jo!~?L^K7{N+3{7HF@KqhbJ9
zHG#~tEET(;niqzD9K((EQwHxMNhjgasJw}hu}ifA6r-0ZAPhxoQyW3xM!s&dS8c_r
z(m^7;1q@LGIRdxoG)CMILP|1EjO8E1<*3k*k75d@<2_Qsl7Oo8aearzOQ6n8Y!?Wi
z@10D51Fxd<>{{x)g!Qk0xTV#6j7}4-7bu#hkr#i1wTB38ASx_d?BdDvT|Cv($dQ}e
z_jca*Vml8TZl4b6LP>J%==^@CQs<|PAwjEaM3)nNYO|tN_i27$8O6}_(>S`E2Z}+y
z<C!dp8I5cKO38xsF;+B2aS{1Y9J2;AqG;|!yhWt=mmXNYX_K{7s7HeEB`$~Jyv*fT
z%{o?Zx@^^^ZI(K>{*>i$*Z|2-n(N#@@_4--J<lAnO|r<cXtIBHjs6U=%HBm{m6EjE
z-ZVQmyZm0)^^12c)t?EbAFW%*RtB0P0e_e=Q8GzRtE=kymG2PkAk#L2zt<qDhkPiY
z9sEk59S|t2*Hb9JLY<l|PT}HUN*{>>_)@TxP%Z*5f)H(khK7Zm7zc#*d#G@PI^A%v
zq#&91Tb%WBGpAjcXqTd>W5Ac1GzGL{Y2vERE)hb|WRL>13z<;nu2Nkh4JQi1-yy@}
zc_nF~L^q4e)B<u+4B5s@iBJyLWmO)Bi(Ll1<Y}w^l&8+TZPP0I8}2&uCs}fn{<XFD
z+D*&^g4tvT(;KBfmBd-Q7PIR;o<P-=PV<{`RazN-zv|0P0k*Qx?AM=J$Nu}>mEUx@
z9X1dQS|A+fpfF7{2^sIuSxqijEWL;coF^3XG}oqJPEE_G0bmML&#c%SAiJx1D#(+=
z0T1b=RL_ramu7OZc!9ZSE+kzdt_uRB4#}Y-{_k`W>_M?8=@j5EGh|s1h|+Y*4(O#x
z6%3gaOPq4ZHt?p4RaK8R1@vc@?pl1kJL%dSJagsq!5X9G*(`Nxoo=%NP5r5Uzu6ak
z+``rnX)alH`KHzSFIG8O)#X9Qn)|#}qcmbAg3^9Sgw$V0e0!<l!w?0#^e!q~hk^A?
zp$a-ZMh%!gUilRHdadPRD^I~`or0bt%^1n2l&1oOY$|%*O1?=aRC3LYOck|?dhRnv
zVRFud$Ourb$qbg{c@UT%1pZ0Bct}CHND?Wj9%VXKm2}F@NRvnT#m!YI_w{VauBB|H
zzxmOs;SVqa>|c0?{m(l6X+P?1NfvW;@SFFc>kFd6%d41Ub*|j8>e9<sT|$$It+6~_
z?{e$gFzWj2+syUu9|pbNAS*d69;;O4y-&Q7cU&aB9rNTV)B_1%%nf}7$Sm}?N_-jg
z0FROEt9jr$(0C>|YV-*{2u+h0(4w($QcifKyoLxB9QCXMrgQiF=7vW{eSGiiVM!6{
z6T45pTwHy_Z}yzKM}LPL*zi^RnEjO(S&Fs1RPmubg*JJx>P@LwW|)EqxS=*-A|uoW
zH7qEULGuHVq1sbH1r=-+66DBICqIV5v(%}oBvt$n3C@Ox4=uWW{GCheK57z>ecmA6
zV532g>94=|3h8wdY1Ch#k%E>OsnACB9a(CX=sSgsStne=WTlzlu2yZR7X&g9OYl~W
z&<WLm@sFKIC#<80@Hv4<h%h5NZE~BIRN6Ea6o^4H;ugm>D=?v1aH#WUfn*>e1{UcW
zIL39L@k5E=2dYPLk|vT@1qSxyfqaY#{Epa%@+g0K5Y6*>;R~oBZ&=!Z(U)b^&t#bT
z5Vv{_5jzAbVq_o2gz}T6i-8?d23#(a4?cnE3s+xv`yF?G4kA~z1J$f*NOev-<H9Wu
zet`?&Wi3E8gPpz8=gwcfmah4XGGMa{{-I0n*s+toG(!DRp75E27Jtx!m`zyD5iuVm
zj1yT&B$Pyea+Cx_6@krA2FaV+3#1F%`CcG%z>}lMFTj~RP~}vfT;+LWIQ6D!#^cJg
zIgN6r<`iMgxQ~k_e?FMSn?D%nkn%ZB((CywpfHYi_WaFSXKrB5V70Y+Rj|J=Z0(R*
z+Re;#(I+Ae3CYz_<(jM5X2d!?S&s}rN*1j(wIQF+VfL7t>dek2m&+&1N!et#R0qu-
zYt$RE*_#tHoeo>H*XgiiR=9m$cWZ6G)jh)<=$9nqEOjwSs+H`D!)s}<wbeI1%1)RE
zY+d}?dfVI@hfj7!teJ@HUFe?&aNh2et`0Z$M^U=Y;&Cw1;YftUj96urf+=sfCR`u!
zm>IL!eMxu(76d}Ac2|qP#^&`&Hb*EOh*{F6D#;`_CW1~$a(c~n25MQ-Zb!({aOIWG
zMvL94$knTvXqKJl()t8TQxM^&xC4<<!gL@FAboGh6v{(MN734b3?h7n;!D?mb*Daj
z?}t@iy>Z*{)9zOH75B7y#I+k=={;-X_P1_+_N=*?;io+w;OJ1Vh4qkqPjg=tRY)al
z4mBoFSE9SD=DBqYCu(Pz41G)|=$BJaX#jvE=05yCJqNX}KAw}nYg!h2xb@aU)*IEj
zB%csw{AAPZ<1z|>qsA$mhP+whjk;59!wN<88~6Mmck>5hhTgYMwh3GlKp^s{NrvE!
zV^k8)*fR39DlS!Ipd$I%u&V`4pgL2OMn;PhiVq+a7J0A77D~74kCx=cKoqGW5EX#I
z-<WMdc6w4+&k-D80{G2vjx>ep22d?&WPkzyb01V2c-29718EjeO;7-w7xG4#60)2r
z`z=AIs;LU0n5A`B&|Fw?)hHTeKq;h!8dx0+Q!?Gcq@o5WH$9+$ma;mnnT%tCGNv^n
zkCPA$5RU(G!<g+t0WZ3sKq;NjOOJ3HM5a!0TZ#OlerQJ{k$GPD80s_RRmV7YDbQvt
zAwZL`%?P2)E6B73SgE8fx0QC5$m?o+h_6-lO5{?7qmLh#V*KOSgT_hmP2(E|p9=C`
zd9UEW8Xbj=J}4{}eo?8|j_79~<qLBtTcgfFakPxu$LkVwXNygoW=*GoW>^^rLR&H}
z*b8yumBjTpQrJ;xBW0NS{bjY^!~G`n%lq>4XIbI(<km)>*TJhqKP-iWPElO}yNj3A
z(E1^Lwf5=IfATOLp0l}qa>j@{icp}nMQ|!4lWUZHE$!3$X|u@)!ch~7mO(*+&aP@U
zR-tRG%1@AE_lUl3=;e3<ZG~Wqh#WN|BLr%+#c)$4jf4Q$=%*;@^}%J)j#w-dT!L3D
z77VRuj^4m*#*WJkJ7<25MPeOMoQkpH#M)n@<%8}t&i|n;9_xsGJJw~onYmm++Ogk@
znpL^nieQXx1GZtue=SUtzYRNk8MG^kcL3B2D-P167o&zDS)QT#4T6@Yn1h*pYE0Sh
zaM#wMHZqmL(y}>jM3}MM<g&CX!J9$;)-*YgEe!ltsb6oQvfVgbxr7Szz|To)W|Yx4
zupr?pkg%+-wllG1?#wCif#!6R!nP->-F0X9Z5^j2^cyX6*!6y2s4nI9G!Fl!dqMsT
zo5|hTn5y=(v$|(&>a7W#yTxib^VqOuj%b=SMe$s)Y|hF}XEe>z1$OYCm-Y?Rd%9X$
z+vr!%%dAzzctXF%GK+m8=m|BZ=@$oQCi({&8w2!v`5sw$=)8?*{_VJ6na+;S+JE-i
zPc_E#)%Y>`6CsOx<?qWwm~lPG%^)e<&T$+IuyT+ON{&%Yj1Vel4OA?n1%~@R$>KKR
zaZnY^tD5-2PsSIAqbN@SWP!6cjaArB%XlyZ(-xJQV7bCS&q=%drQ7d0@4|a-doi(g
z*1VV2E1uS?<_^xAwKnnOjQ)Y(*&9||=^U8VzrJtb)Gb%#=1)Ig@_h28+irX5lO1PV
zI&bd3d@>Z8dfVL7=FYqHjE=fBr}YQVxZ<oUoc(i$>gR1(`PA2!pKtW9@A&)jwemls
zPF4=+jvo!d7&Bh<9-)k=fRAyunE43^6@;KdJpq_Zl~8Cb5r#RqWA>S653;(!!5vn|
z#Rv2o|L0t9M>s!tU~q@UdGP^u2lg|Oa3VjrWAN;A2lPJ<vJK}B>>Q-8e0y+*%}U?-
z-*dg~Q}TmMJ{#Y%^KY$Jx^m&fC9OCzIH><|fZ8kZJZh>PNEKAV6bH{etq?r0su6Yv
zM27McAdWCH*!LP$Uw8!#E^0Eo{7W5z6N_dOoIRuv16SbX+(xWo)LDpoE1CJF=@&fw
z<QEE44c7{a6AbVD!HhLCW~?bl-wI?qB9V@4;MhD!?7xaH9D9vU%s@LyPcY<l^;lF)
zO-4hZF%r{&_Tm`h?tE`Hgp&6bQXCj$G|T+-7f@*(3AfwT;$n6Dqf!6UfuFIhKRdue
zjX3Id>u<X0BccD7e&82B6(p7xys*6wBbR;#Jn;_*l#vRL4x9x2*<!m)t5!Q92~ZmV
zLZYmUcN!h@qMj2|XY&F%SnIMtau8SI(b`yRQT9%yP(T=*{%Akn@@NBKafpt3%DJyA
zYjeQrS&A+a`_wiCdERh@v}3oqPo1WG1EE~$sodAEdMRR%&~WIu3gS;X5WNW%lp+P?
zPy#|h2~j4#nc@X0>D}j#NZ>M5a`F+9gY=0{o7OHg`^1jHrJ4B9wq=FXoE6hsrAMs2
z3kMpeFV8m>A1Zu)byLk=kJ93=x5zUV{Q1eD6---lzMCy$W*3U04&~3fbCzZ4GTGNQ
z^Wwqzi>map%i?RBzOnz)Pdb(?Rn|6b5+mWZ>VVk-K*DRCHr(pHV_+U0fq=0r2p347
zLrnE7VTVAN7wiV8C=u>WM2UGHe;|mDKM=&{s?Zc}qCQ@OzA;;@=G70YBXAg7IR0g!
zdKyTZN01chB1Fk*IFt5?QwC>|&~+=%Iij(at{m;SylNY0+kz!cYbWDUP_#BIa-<36
zh+d#2mnz7or{WTTiy=`c1T%<j3qbl_n$sbwi$<0JqzeLQAdU-<SNrWYDbv2;@!Nj*
z;Oym%$yNU5cqsDMm#l$6^VGz7f%s?Qi>GIsm!(@mzsRQ7gsSuAfF0rDwoYdw%5-$)
zYp1O_r)j8oZTF)3aG<TPeq~FpklhxZ)(gC-A@bRpkTfXEwNA&qvddiMQ0)18=0T<+
z+DHC6<}m3ph<+pg1jUT0PAVosM9~~D230FJRt?+FCXxjxavuup<;o}b0#ea4!=rL+
zt8_bg_wf6?zNi_`VF&_!YY-l<)PymkA|@3g2Bd^SrWiQXix*@tdKG3t1(_>`xpy=i
z!Wf~#8(bv7Y(<EB#E<c~I(pCmh3Hj<@I}ac{>T?paY2HMR!0TqfmJwave|uJPXL+=
zGUae1Z<#7>01QUQ%zdg=!I}W0my}vO3!_Q_PK5zAY;i<u1yH#Ndah9j3B~PrQKURn
zNb%(o`H*&@_7Lpw^9$z_*j-@wk1WY!TY1q}ItzUmk_1{gd@rR5G;u+9B%16o@>w*C
zohlD;OcH$sS%AAhasq&<LvcGUQW5tsnE)1a#vMRs!M_SsmvVWy|0_%c08xA(&c0f^
z0|cPbM5snJkpLEh01W^!_o2cKWgBSq2)+aGi#$wtoW`h8={;3?nn0Ct)F2w5qZN{z
zKSm9M0w@)OLk3ljZ3WsUa~`Bxc*G-KaLJ~T`lVzN5UK(~aHc3$xky-6DKxQB99SVN
zYM;-epl87R;TT3q6?_G8gjA8q!Fx{+>EIP`_6wq9=2aqGh&9$sNZCZkDtHF(7`g?{
zCQGZr-NefnGh<AtM>MX`&@q&#^MjIqcu)iZhNtcW+Jx4_SB*$+FR!odrScx=lnZMk
z`rsh!YM+mf4h2Q?CoZ86U}EZn!daO2!G|h7<NAO&-HClb;Tp8wV9@mVJ`lm%3Vb9+
z`al*MU>W@5TuDnLpQ{zS#t!_CMq&lG)zATyMnU8-xDl+#rz&r|`(V-H@X?Y4CZ)2I
zys9li;xI@-NMHVd6wQH&wGX5>vRFn4jv2+>r~ES)7!fB(IHHyr<-52QTOm4mlEz;D
z-`eXyd)>Uf5HJuvcD_#7z0_WN@MGGGif7~6JlbAr6R1ipKEk&Q9vN#YHJj)QNeD(+
z4Bt4#!nTa%?gCRFV+>{h$5x4Z$ruBAh`4yDC=(-2;9D7q531ykQ9|RR@4fpKN;f6X
zJd#h1%tgZ89(&t3@%CwS)Hr9@<YR4V5P)JL#Fxv*N^2lsC%1-VW(Z<Iqf|>lt49X0
z7DMjr$G6be&fa^J+Cn+8UwL;zBTH<FzK>e^m3NJd+3_vaokx!n*$ltm2<`si_VNT@
zqrGVQ$G10BN9nwyEt=5Y0_w2x*1q>B5qx}W3+Tv_|J%0y!?cY{)Yg%4p4e7)gg4e8
zJa}a07!!bBml!;WTGf<aSPQ?{=yJ?qAIco?f-|vVKpj9d3xZl8N-5OF)HhNILRA!1
z;xy#}5kQ1SQX8>lJlh6~AEpQ3AcHa4E@}@Ev7|o=zzC-d&a9+NW4xL08ie&h`Aa~I
z5b*<jgsOvKNv!7{Y2ZLwkX*7g;6ooF{%#WG!CV}+9Q>~+T_@y##U@O>-h40O`Wm2X
z2^RBf))4D>$YiqFY%Zq*Ri|7wYe@ek`+_K1Y&N%DenJ0Wkw>)n^o9O_!|JXQFGlJ-
zLt!_k+iCNdf2sd`jgR<|&t*=xYRqL+lLLctHO5Lg*_3L87!SmCKrB*dhcUIGPtk<d
zYU!D46q%@cP%sM(H!`vFJwU9C(gpyRGYDW0FrZZkGNJL!^cV@_?1-y$_SuiUO)C=@
zIv}R|TL%5UC0j(1Cea9GD>8@t`e8gva8;$9z=*K^)S_Vk-9~LQM9dJt2mhw#fJydT
zbxkB1Yb31~`auGO4g$D&&T0er%#YS89Bms-iBDT#HxTMZeL&Pin&K6cJZqpbo0i@%
zl2QHemW2i6#v{G*es<)3{Yir*&RcNf=SCRxhNW*mW@Bsa*PZw4k6=!X&&R0~&fqy-
z=m%I6!EjiSNP<FiK`Asci>RaoEYX_Ly3#z?1@6e_kzMI>19nEwP)r<{)$<6!N5rmj
zVwUAdjt-o*yhPjy`7V{p@S&^rTy@o+$@wm$#o=`?oxW<E9HW>e4|G3Nhvzl@;WOgS
z8vc++*v&}dvqE3sPp9(|fE?s20i0L}45L|P6JZxC6zt=2$kh(dv1&xszDS{sR4tQ=
z%ew9QyHbp*5)+%CLKX4th#Vccf9s_CGcwvg_U6c@!9Sj#K6-aJe^^?d#Zc{T<nAcU
z2u@^2K74b+y>CI^>3L)$eK#};^5lU8(CAQC6Ma{B-xcb+k*q$x?=V9rbiGSl^#y(I
zZt;$BH~*ggQ*qTp`rHSGr)Dd$SfpdxIA&Xom>`4lK;Ga$q`PC%207V-{MJFbbp<0B
zB|9oTq@|<}fi|J>4cKsC!)EbY($V`5+|Pb8)&}X{&wF(Pf(^xg`cItEt4`LA5h_e>
z2O?uZg^y_pB7gugJH|C->w)uLmFRANW2Em@_&_Wi*l>WojrM)+UGZBV{)vwVJx>tN
z<dC0*=4Yim4*=Uxt5JyonNQ|2)j5aqfuwrM`9X~f`9VFY|8SYOXLvn(MDl$23iIgK
zvOQ(#$>Ax)TO<>a;|>~A7UmLxRu4QvLNSxduFx|#T-l;op*^#VJu8p*t;in;O~6BB
zgF{MEDxDjlWkp*MH4@13G(-xxE*Ik2>7=bUq^RHFz)^5~DdOKfJR9-Mu!IY{rMLVM
zE(DK#9i<Gw{bA|C66gJX{#*vCOd1vj1kz{GLN{-r8%9OZ%oW(t<{8ix7!>3{NS>gX
zAp(nzkWt`eT%!WW?&VENB9|}3s5EY+Vfs7Q-K>9#S~lm#>)3`H_2l94Eqq;n_qtoq
zKn*9?--v*XCoAy>!1+xs(2}0pmjFdaYGW9UL3-3As#wyPl@*%!;Bny22k>d785cf@
zbhYOz1S&lF<Sirr$B3nWz%Sy&`tVhL{?@P2g`;wV))6nK-KBg@2JKv&b}lk$%pNik
zka_|<O14r?ltDf>D9o#Q8jc*kK%$I3rWQSt%9-ULU@es>@j)Ovv6^c{V2vNLV|g4$
zXL=wf^|IoHCNp$|&YN{7?;a!$6z<YEE`S{l3O~h#5ma@mRZ9G7$ilHcoq3Wzovb%t
z26_yD(f;v`M_L-ic_2ugn8aB__z)J!$z7-nl;P{g>OR_q5{Bq<-UsgOM?B`Z!MU8y
zj`jliV55DYnh1*_*N9Ul=MGS0333MFpb}N#`*69e8WjX#fgk0u!zl{xN5w!d|3UJB
zB4SehI`l!Z0gcMow~?np3)TXg5E1%O4|@+Onhw<afQ&*eer2oyv)Q@bN}2>c)6+xC
z7FJ<SBnRAc`$UsrfCoXMeX<0v0@MrmfV}<yxr2m}luxJ}8bgGHY9+2P!fgWxC?wc{
zzqnpRyC`;_Ff<{8S<o%A!Dx#%TL93A-{u}Y05$r-m$`oreKdTXH1?F2jW`#$kRkgz
zxjF=_7N}AP#y7wPn<oTt0a3c})u3`YY%@Df0BGql#3LTMOwn+aH_K@4j3l1+5Jgdy
zAdi7VsSo}nSVTNl{__eVyilOS&bJ$D^>=ELh(_N9+Z^lW==<g$>8H^Uv41Iqd*an*
zlYTYr$}6Hi<r-xU@(2uElrZka@EjmQ21ihzI)}>QMbY6R`@AVrtgcT|ra4gKTFlLn
zVAm!Jb~VSyD#GKBNO|K=J3_)qLx)5&Zzfsk+;K{)AZ<q^0_WYR`?YIP4Lee^2#+YH
zNM1zr>YEqU=+2r&`sR@%Q=BQbUEh*&PMN|?wt!2zE?C3FDLAZeVcSO!AG?bVgX{2D
zv5~70fgOXL+=2M}A}T8LBD2t22{Y%ZK3+e;K$(nD_{dB3fMltLYW$C=)MGVP5L1^+
zQoZI;8$KQi;DI)Afd4&7)cYmxFSOGGaQR|#T?}1jZ2>{2hDDF@Kmum^Vt$MiD&uOy
zph4Z^^YnwbvSRY@DxG&;sW3eED|dVac8o{x$dAa6peKSCP<lklAsU1dK0!dh?ZAF1
zeAvxAEZTqH1sDGOfg7XIuP7GZcYWQSEjy2G+@hFWpLVr-AC>;ldiOmCF1YZ%8FBWg
zx5IUpOIEgQJhpR-(&c~AXI361(s8?l^8u}InM!>nh-LVJDQ@qyj5bK?m=kKR7Q^$&
z)Fx$LsyREriAJFbdAO7MB|J|DwV*2bQKZv@k>L_!Ggxmdgy1!}rVzf?A*1Yr>}CN3
zB#Ob*ip?uhsD8pOb3xpExZfWM`+w*U?_m8q_=dT*u=Vwu&wBh5g_&(OTlRoI=VF<x
zTotPc`0MKJ_N@MMSI$r6{=}yOHF8{T2;5g)eP5sfn>B%wwdS<0=0LouDekb3&R@zi
zs2TOYQ||Y;%Ds42M?6jCY~jloeJP;;J-y?&^o^S!BSxyu<9R?d?EDX|{tD&*cmJqt
zCHu*ECb}P9eynULRZD0xP&&Slas7bi(8xpZ#!B4eFmWgVA)tUs5KTZCLi_`91$>8d
z9v;F#pOoi7pTo0hJWcd0Dc%Osn4|pJz4I$rjiEP_-Ge}sQLKji@j#9c;;Si?KkX01
z5=|{!wgM-`er+t(L{X}U*dJAE4ZDq8ZAd;&AU_$3Rv=-5s3ol12LV@5w~8-NzUA=j
zttzja#2KDyQGsqmNbIvCbcOE3J7sI^HG~+6;x<H9(p36?)Tf$%tWSK&FxUVp<45(0
z)(u)YPSqpy_6Q>J=;;NcJ(4GkQ603k*(Zz;9_cc9geb$EMrfZuz#kq7AcODK)>D<U
zQ;iNvl3;Www~{_jIVvQfC}Qx$G2t!e?WeJr*!Cdi(ur+{4m7##yw-)$cK(>IO4|cL
z{v4!JwB4it20Uqt(WVodsz17$4)3N?f0O0`)f`I$128a4%mWyX@CzlfRH8A-AN5l~
z1R(ZC+fMV;i1?@6tT<}Ud&mt$_yL~VP?<NzbAV1dGq5lwdHKdxCeyMGJ@h2KA-><%
z+}oGh29Ig;wr!~shk*M*R&86eX4@(%nKgNiCwRW=Xx}P5LEh_VPbzIi_S)zik0YFd
z^rw+I-jHhg2rim1$LTSKm=h=Ii@`(S`FjiGJpj=C5i^|dZ`6_<FRzTOr!=CICiiCi
zxQtPr_vU$jptc^R{;2q((Vyr2)wOk~)|mR}9^qLUxd5d;eN=x68%b21qBE%IgZOU}
zSG+UeyNUgw9IhmggNMfYgJ-=oG()RG5&_tcn+wE^sGAFeKAjywrp8NXJU9%G!Kg4G
zv0|vauO?IvEfbg_egUWz_>rDyl;ri^DVhcO9nF+<Nco|Nupblh$kU*tFlf<!%F{Uc
z)C)nLSG<=X5qUJBIm1<S(jkW%^Iu6wFnGNtjW_DQL$!u6We7>`LLxhAJT@1m+zLeY
z0h>b<2zo@Y$|ypIb#oM<qxncZ9!2QrSwOX@Y4n`k<&*fs{(vnbatzM`q*62hPVrEi
z{gx^KXV|63s^NipL6q`zD&*BeRfm&2(oyQk!)By^rvmT774ZWRbn2%&@&y6%l4K@g
z?~LbI#-J1I8R;$RaQSl-xClrRV_%uJ09Yq<7^P3@vc(ur(TO1lL5+C`6jp1pl#LR?
z`zSdGh>cOfCn5)R7)849424EK9m(yLIYAoY6@u{RUf?;(p=x9tP@vctQN~Bnjo_K^
z5r()@gjJp!RHq1!tDzN~l%m3^N%I9VSd2gDpU2-n{;>R_d>U4gm~a)3a03SJ^{7=8
zsRBnLWqE^CkY$FMMTK;YdS&op6Ziwh*JQ+c7Xu-x*RMrLRrSI^(Hw9*Xl`^+;14?8
zC)karE>|h2*$^<E3@CBQ4E2TT>;m@ZQ5eXCb}=Mw;U9Bdx$F(L>(=X@eDb=EwzlUk
z|NO7T!PRUk`iSv=Z~6ae?P`Ofy3X)@*98F)Q4tXo*AGDD!+rOA0f{J5gTzwXM6lK%
zB7zDS!4DdnrY5n}8f(?0CK^qnX%nj!t+B*9Hcf2DwvOo}*0lNPbexRikBsd&X{Y04
zpwGGYS;fSD{K)Q}ecyBLInQ~|-RIuD_uO;dv)26Q9KCTQW$A`@o*9#zva0VXlVYx1
zZnw?!`Ddd?2HpDEm(7w+#(&i~I2kxGJkzWXgRU9djznBB+k?mknBfebfE5X{Uv@3&
zy3-6CappF{*s;H_HS@W~jYmIYiTTfP*0QN~x8nZ70>KC4LKk!5#g9%|@tYenS%TZL
zz8i<l2j&}jes5vnUQ>g4;uf3l+66*~-Fxw$gAr%xqs`0|JU+pso4nyrFy<%EZUct4
znC^TGRmWb9?}|=$w^T(6Of5yBs+L4w$-{M-yOwkwbfqL#wYbg%Ye%J~SG8pKT`VjV
zUv^7X#&}QDj75*d*FAKw(>=`XYB6mvq5Q@E8`~ZnR{9TXJnqKvdNVl@^LicGU);Yh
z?gPxiF<#{DdmCsd7njlhxcyz+_jcR|Hj*h4dmWHoYl=Y|5HP#ZiMzI$lK43(1$WC*
ziK2gIIEc78&gVMPY(rU7-X75G?!hQM8w;MI9Zb_tHyQzX`g@&lN8K?y#v#v2<~8|Q
z#>#Zc8jrGeJ#Jv^gKo;1G{kM)$bsczcE#}TCS#cBCAwu(5ISr%-ZcAPft)a4+W?II
zy+}9ZV`;k?UpF8vwk?L=jcrDc1#UO<x$Qb%b@xar^g;h2nEa-lu@J+*fV5_WSbQRM
zvoB(Ctmo4I2EzfQoA$-F8HsrR7061+V#pEPj`ra`_EuiI&BhlP=DFW0pMWxEUo1s%
zA;fW;k+ER8&)NAK9TH-kZ;cf-BP1~*uo2uH_;#|GZ^Jnhv%j4$^x@s{YBZzr%~1~7
z*uU@2w<(D;?hS0iag4qa=iOu-`fqRX%3P_D$K|kGls;F;wa0bAb$w95pz1*%yVu4w
z#>3}Nd`0|~!PSF%2473qo#;)hPu!i9lvI(_opgQ314DKUxtd&-+%t6S(Dg$Prxd5u
zr)*7mf7qW=t5dsEFAq-{o;!T^h_n&)Bi<dEK5~0na#};$=~20(cBVI^zdO2m^p?@r
zG9nq9GtQ1F7_(>0Cz(~5n=(&jUe5e5D=o{LH9u=h)~T$&W_>(1W$dD{hsItX=NtEW
zc53$4?2pD*j(>jqYvZqY;yu$mm7X@w4$qAVD<_<rIBVkhNsmlAHaTtb&dFDE(sH_U
z_T`+&xt_Zyw>$T2?zOy>yp?$ur$nYSPU)Q*ntEwk+q94JoAXcP-z=yo*i(46@M=+0
z(axfq(~G?s-cy>ZkLX*z1YfVe-oGP|8F(S+4mJhPhSEceLnp&Y;rj5A@F$U)$jN9%
zv^M&5^ipv~@si>##g|J8N;*saQaZD=x%B-R6*FEcOD&sQcBbt5J>Gkso#~ocKl5by
z#PaU)zt7q{>tD0GXaBRJw4%OZzkT+457(5oj~MVo5a6gm;NSqisd){vPV*c$()gsn
z6_>d2*w9*un4=4xl5e8!Lci@H>VwR+H+4692K%VTSsNupJ>Ck*G3p6cx_n4I5&BK)
zL#)ZJRO-pl1Jp-Cucdz8N_WL<_^su2?cA_oL(z)WU2B?KmbJHa6fJ9S#i-48%-Qb3
zl|c*E^=!5}ah32gg3t0|#H=4$1GaiFbAPGT200J;*F!h?SD`1+1Me}b@ix~MF@z2~
zw%qE#>Q!rzdpVAVBFt8;#tH;AIE&wlTEA$`hi@GZVoOoF384k}D^O+u@~?mg`_*<W
zijrR2mJ;iJ)V>hqO74pFS){^GVg0`rcs^C`0lOU?u&~|U2Lo-Yv0LF-c-zuu<m|*+
z+a~{dw9+Y2g!xNeSl^14tpcXW(}eb!wl`pp7hx2=2@&jfAI?>Gv-f|u^6tOX-BUMM
z=3RvSy&Avr8vOn(w7LVS#{O12$LEn}AzIvk_L_ZSSmx}L`|S8_e)+JEJlIPSJOeNc
zEXKYFAjRQh07s(z!pdFtBU2|f;QKusr!FxbXop%U7$*`Z@o;{XAc>MBLj==};nL6a
z?GBd_*55FxH4UAr>3BexA!8&{vSch~`<fXC9(XjGD3fHe<Y3Zk9^67s#jskqtC2$V
z4o}A!Td{__Ujh=85T?3CB#ITSOQaM%vSpZGI8(}HmdwTkl{r!=U%>hOUa69KQZ4t%
ze2lxUkuS*t`LcXP?uWykg;FbZvPixvi{)#wL>@FAdZa;?p-X?cG|37$rfiXwvPxD<
ztF%eGtdWOgt#nAItdsS!K{iU4d|e)vP4W$SM7}AH%C}^*Jcj?2CuEC!Te{^tvQ@q-
z+vG{vF5g3U)b}w^c$e&!r{rn*f$WiI<XPD(`{X%X1|N{;<%jZu9F#-yqWnmHEHBB+
z_;>n=9Fe1POnxdoavaldekLd772JvZTzchIIW51CGZ^)7R(>h3$*<&fc|*?0ujMyb
z+zv~>%J1a&asge!7v)X)16Cq<OWu}C@<+KW@5I}uB^|u3t;Os0RyeZUYoreel=gPS
zeT@4l1C&9^5M`J$LK&qjccib<k-<v$oONs4?MSe4wk<<mr?RluDHQhFndf+&bV%C>
zNZSZVyK+doa!9*!NV{@K8)uGJ?Z!ab_>ja=;;7viq!Ukxr^Hj@De-*7^AXQSJRk9V
z#Pbo)M?4?#e8lq+&rdu*@%+T|6VFdPKk@v;^ApccJU{UQ#0wBFK)e9)0>ldtFF?Ei
z@dCsP5HCo)An}643lc9#ydd#{#0wHHNW38NLc|LZCq$eOaYDoi5hp~P5OG4p2@@ww
zyTZf^6E94>F!92~3llF)yfE=1#ETFwLc9p^BE*XjFG9Qs@gl^F5HCu+DDk4iixMwN
zyeRRa#EUw3O5Q7ZujIXYopMV4EBUYFzmoq-{ww*f<iC>tO8zVPujIdy|4RNV`LE=^
zlK)EnEBUYFzmoq-{ww*f<iC>tO8zVPujIdy|4RNV`Hv+t&3R&ulK)EnEBUYFzmoq-
z{ww*f<iC>tO8zVPujIXw_e$O?d9UO>y#F|MkoQX7D|xTvy^{Az-Ya>pA%_o2{ww*f
z<iC>tO8zVPujIdy|4RNV`LE=^lK)EnV@(LhUh-ebe<lBw{8#c{$$usPmHb!oU&((Z
z|CRh#@?Xh+CI6ND$GmXI4)R~ge<lAl#`~yq9BI@!j_~i(EB#OO$dlH*o`jm(<09MZ
pj#tL#*G}k3t((`AwgAebb>n*C^B33F^`zzF+C&yytvzO0{|1%B6xsj)

literal 45386
zcmd?Sd0-pWwLh*qi$?oCk~i6sWlOeWJC3|4juU5JNSu9hSVACzERcmjLIPn6VTTf0
za0vTL3Zx+cvy?S$DU_mDURw&LEfiXZSNQT;%A+(bkXV!7=iHGjSy|}Y{`$$DnL9Ig
z=AOHqd-gFfgTdf5Tx}2y>!(avFmp}a&i8R;09)DANt36rNe0PaU`03&&7MCzzT$-o
zZo>IUoG)9x=A8BK9r*WaaDKPJVBD~L(<LE8jqsJhV6x%9wBnqL*B?8EHycbYoSRl$
zxaIsS&U$4Xl6c>p-(7j$IZ1iu@ZTB?_Z`Ijww1VGnIyS!ei-LfE7x4I`K{MO%M6D5
zkzc&z!gb5fS$FiVUl<Gz-D)rhO>55Cyq>K#;Q8J3d}!@CYtDPR{-Jwujyj0D*RQ+y
zk{9=U)M_w1a<#!=`PHT8oqPVPMGNK_3{NgVej_%jz2V=+?EWPk-`sS~M*Vp4PJYLM
zGn9;<fOE$D*rPRYhSy8CupI{3Ac;2NO`M;uAK7;eap8HK<5uoR4`hD}XDps&7-t9_
zJ0`w-4DBNO442~`ha{6H#LwsjXgfnaHVZPmuji3g;wt5?$5Fp7v0j|7#9L)UjUi+h
zW_ZZ(aL5uG9y&X;KlFo2Po%VZAj+agV&<5$U+g#c7x&lpxA&jczodUz|Em5i{WtaR
zJY+spe5m$N`=Kd^PCK;Z(5gdQ4&8L<u0y*%G=6CQ(Enlahv5%nAGUvZ+J{R%T=vy5
z^s50S)$x)HCn<^b%l)qYP=8bZxc)gP>D>PH{a5$zIK&RQ4uuXi9U6CN+MzjzmK|Du
z=;}i|4(<HVfRbDv7NMlbhfN=j`*4n4(y@O(_TI7ckDc3Z`okap@clom`oogn%kQV(
z3%*zUZunjAyN*yWR2K4wT&S^Bp;dfU@nywdEB;*ZQN`AZO%>}aR#zk|mRForvAAMx
z#f*x{6_d(;U;cjiugl*l|3&%F%U>)1QTYqyPn%S|by2JT`yb5?gMcy2e;A)=NqwXK
zuERDA8;!JwG8>K6hcla!$&S7^n2;W>Zw4=pXX~56hvR;IGpIQJK;I00gQ3!+Z-#)u
z5GmC+8s*iP^RyX?4TdPj7j1?T9FORm0eNF)eKVBd=+rku&|v6C-hP6;97h=&@)^Q7
zVtn`GeTFEGA#AlsH{nQIJJO?Y9Ea^Rq$lAx2ip>)XW_U^-wfS2o{Mc2uH#<+dTd*e
zJ_pCEvE7991vu`&wi9X0;X{DukQwPKaCBiSM*4ajL)dDOM&3hB*xHf42gh;PrXc-Y
z9H(JB4e7^loP!Nz8V=yN4BINCpTluIHiF^DI9`qICZylMk=}b3((m91SPtz%`gaDy
zhd6vlefWDE&H85e2uBw-^oikP9MK0K79;%^9K-r%_)i=o*kZW;IgU-(+L8V{j^nTq
zoS2Cp&cU_>ID+22Oy3yB!&kUR8}k|1-`#vOFpTtn?BkmO7|kfqI5MEY@IU0oIG&?R
z!jS97pXg6g{}=wGA!xAh?*Bi}F@OK*AB~w)|I}08&fUcr_@*CUyA2GuUBF)rhQvxS
zgjGf{G(O1;!$&`*NQS?}pESzvkA6xNkTg6g(q)-0KcyJi!04wKU2k@W-PO(RNDUjO
zee(I|VrZbh2CF19Bn?TaOX@P5fp^FK6|9^ES)!9wFu&2sn&bX}U-cp7V8d9ToH>~>
zI-KE(VvJNG)yT#$#leQNXxmtZE3s&63sRk|gT)%zSk{I&;!2`T=ypb}R*Uli#cx`z
z2+9Nf7Pnv&1tz#H{SV;6YLj1iz-g(i{3r8CUH^lJPgn@`1)n#(Jut_q`l>q|_XnBJ
z7zw+5#$l{7+UgEhM#r$0w&t+ArH#FkQiE)%8Vsu1?x2bjZ8x2;r9r9d_-mAba_eQS
z$C5G*Z9iErOJPO@rRj~W=2CjOV;IWSo3?c@6^)_gJ6Igu6-R4}?ME!KNxRc1Gn>U|
z+-xkeT*18Al+${r)v5g@dpelfBpbCmO|s=kvFE!cpXs|EsmnqyvDr)ynQTeEf86SH
zS|885U^B7{O%^<W{M2qqgDl-DJ#Og0Nj%^WL|PifNTowm!b;evVplFT$2-N=W<GQ<
zIAW1Rb6WztPKM#}$rtNK8^0fE8P^{04jUP7a<a>lTAz{iU~g_}pU|TE+sCy;9xp%l
zf=7R`scM4l-Q;>Ezn8q;*IBVqdi)0~S2fIN3OlXkjkDv)csx1%k_p3{&dR3g!yda}
z;{#3mE=>+^O)kE!`ZmIym!sXgq+Ua(VJe^v$IE5441?Ms4`X>9aEfL}#|PZa@wV2M
zXoT%&ODC?L(B!u<X7e{qSUvG6frT=Se6!VZm&K|5J#)G-mvTP)#<+%taZ+zd)!6v#
zx+<&HT2(hEKCZe%Z}2Cq4yWabyas2#vp7>)--JaA#!-8x*bb>nI0#O`;2j*I`oKIQ
zhG+;5^kXj^<b#s$Fz5tB3MA|&sC%_xJYIvDJd96gn)Vp(K^Dez?cj5k<~FAE7#2`{
ze$0JLdIxeLLloVIN!^JI;wM2hzI^W7<#9DQ(4R}E#wW@`p|Zqywj-O8dVADh@{GG8
zk-N_5393Cf>(S4WI7=l*FE6siN5^eN%SZS0<een5^O7bF{YC)rV_&d(=@n@_(N7Fm
zs*UC<%~DKIfJQs^<=XGp*Eeq7w{LUWGy9^26NKMN<1anOabWY70~_W{zQAEC-t`;2
zj@Hto)GIv!+6vT?fv{YDTd-KPlL3z<+Qe{76#fx1TW(};m;1_(&cTlL-C!|?sx0f)
zn=fNqo_$q%+8c4bl=fGvb#-dB@TccoRX(%p&K}o5`Feo}3r<B+d0hr8D87gxq4ywW
ze<jW40Q38h2A*kYGXsIDz&p6!q5vaP^%ATtJKf{O(v_I+>3_ql#ZDHP$z;;LGFdF*
ztw>rhi@!3RiFqnpj&4Inq%ghpjplgzUri<<VY0l3Y(B~>TZE`Z);`C>vL*c<Jz_HX
zt_F6%yYMs~#y{#H9{c>*=hBPPiw3j7ZgAlW!Q^wYSi;L<W+r>Z{-|S@-M;+SXIG|o
z{aQF*tI(caE4^sn<%l}Y{Pi;JlJq^eI<R^@n~kS+yxWU$iSf)ZwFXC`n}vmgNA$sU
zM6*e~!p&eb)HueQ5EY{QS%<-d`Fx+D0?$_KEv6V78J3-ZTSoH@o?uX{7p{vn&7U&+
z#;V1$r%g!j?H->=2F0)UILj*sew>&aD6U<zp}5E;nD0&Ru3M&-)ULg#q{uB?6(vqU
zFqn^hCA}m)3Oc)%YF;j=N&tOED<<`!F%nZM8-<omCRI8ZhDf}VwM5yD)U(&lVr&-k
zqKi99YQ5TDF8!7)Byn}twQNK0or@OTNjvG$S=T<B6y)2sXrGl-7mf1ym}e%QyY^YU
z;0!$vGIE^TEj=MkBL0AN3IM|geA_6sw%~*bH#J?pd1H6m#4X$Rc6L5`-R6lSPv5k8
zi}?LX)8vNvo5r<ox%#T77A}11s;jrOkJ~iAK?aqLdG)qosdTw?C-EQ5+ZGQHa#3Wj
z-x#ZwjnRa+I@;FEc3!Kf$~Ej^)#%ptZBv|X?R(ljw^P}sJ?u96#1K2j>(w4~+rHM;
z`K-2od}*`#*p8z%w?W8zf8{AkkRt&l5r`!sv2Q4g{q6JDrvLcW=`a6j*2#-ae(S?q
zZvE)iw^1PKXu#a-CH@C^gRks_-ef|6I{u)wJyA`_O-H9f_txIdsLjmIH`|;vk(_!u
z+KKn{Zavbta)u>f{8$cH&ayb2*ahT|jRDJym5oQX_M$j@rpzvkZ7=3~47}uULo??6
zRKpCzY{PuRVjTm}Oy>xUmKU|TwU$*Han0Wx#!BOEi8kY!j4hmZRKi2^6y7Hc0iXzK
z=fb402a_77nB`9A#mRx9q!`NV59Qq%_|M#RsS8hkOb<yV7H2Y<bXv6Cbjp^}X$n{L
zUBQj)WgXwqdQ0`MK+VS<U)x%AMSktECJ#9;ydP&fIK{P|R=72JC+Q#Loea6dsWHm0
z=H=k&^j^?uC%j_-cBAo<5BqGx*@kt7s|>fJ7934w$%K}+@Hd?6i^~69{y2zBeYIx~
zpC~!-_Y+;s%lnNPs1XO>ae|b#{(p9#O8{wp=Ee%O_i-&v;~{^#7Pjnv^?rWK2?wba
z)042*t{bc@d-$KYe&Xgiaig60Dh)RV+*B`pB85mE1PXw!tQqQ{1w=ky{n@XC4wFxL
z(qtO=D{!%PwaN6P;xj#__}K@z!%qf2H<{SgdalP5ymzf(tu#TJ032js0Z<uczGP#`
zGGpBW57&|~V@E{<s9f>Jr$A2pomow$r%Wj0uy$Bcku))@_ILdnvoV{ZN*zz1@;*I-
z_t+G0u7P8JmR^%~Va=*GkgSAOPg*-cJLqfY@hhjy=hfik;xsFvW=@=Ds8zP>Cr@vi
zIg8bsOltt7)_3W*&VA;ZnKQ3p>z=;5yZi2^cXfAb2YW2e8HBrLI4!xPv}@+Jr_aS|
z`;JL9fyQCO@Ypl-y6#<>XCnoVWS%BzaDIJS|H=9QyA2t={|xNigl{vr_n(0H23|wH
zqcJ65ECr-poW5#6@1rpZ-|GBqOPk#4_keg1(Dtn@o`mWEPr%6*(E36&NfUy0%=zeB
zXWaYiKmGdNGv0c1#nuh4ee&9dtx|73`aJYVr}pmi8<7JUH$Kl|osT3^n=g57!-m%`
z*_;CH3u>OPzk_Q*AuQi?u8)Qs7L^#fQm?J{`)^1}y_u!ZLd&AI-f2mD=wabAob{n~
zJL!zQ0#3_mIYMdd^!6(;luA8P57unZt6;bV;t2c!CE!O=^*IF)e*vQsQ;bMPDu)Y@
zjwsPsA{IrmwPmaTu}G{f5lFNl>8UjO{PDIHp*vg~l}9wl*N+)CM=W-*yJh)q<}4ED
zG>yDou8+&nVHMdNqwA5wF6=ZKcMA4manA5j*U1edkYn>xS6=zll~NC$bQBA7n%eQ?
z2xD|ud1X!1IHDf!uAhr{3p-_br{E|S=TeS_CS$ZN6h@9FD!qP=z)RP5UHRmdS3U{(
z67MHyLcAC`Va(N9Ljz~L_}JBV;IW#CT@0w<RyIhxfH5BO#}2dl+73t|oJXHQ+j=`{
zSv{-os7+6*?I7ZTezLEl7WBgmOwJ^~s`U-@*LHN&f;>r25)S5Xz+;fs%O>epMDKeE
zS%LB%MgU~QGlMB02#;_fP?N9>{LB-)H>sP^sZUsBVYRSKQPK~YEa@NfZogE!i4TUc
z7R(papYzFX!oqktsIb8*qTV|45xS{18CF{r=Yda=dbRbn9qCOpXQVEOgRmqXAw0q7
z-!9NVrG_RQPv{e_fK8y`t?CR=wnE@q{+;GrX6l`BFZ&TD9-n<1w5@Tfj6PDG(yqZg
zG)p`5Jea0-jP1WTEy$}AZhTB1yN`5TzzJ63x@wsi5yPxm#2>>>_N70r{h~JgF?-@y
z>Tchg+5@HirEG_`9yRP^_1b#c>vJPJr&UmQ8Qg+eWEt8HMsl(Y#>vvRkXdC|JRyoj
z_D4ReU3<YErJdFHqoA;WgQ^prNQ&E?9M5zHT-th<i|ud)*ek>o=2N4Pm!KsI+8V+F
zT4PS#){2O=M<huafqII@27b9owb=gvNdI6_Z~BG?2e5wuuwDR*;SWHD4ueyHRt=6T
zZ%kt(C%}!J0<{0f;h}{o1K>%=0s~M12>)m(cmo8U-iz3C%v@}MK7-i4fR`^45cNXr
z0LiYmCE@L4GB^&jm!Eo&#KkyfB);*snApe;0hxNm7ZsCiD?a*+tz0lN<pt3z>`eDr
zJi=nZ1{l3y-MyHG`mx7i!*!3;>#(FRDJs?$(?cf7Ud+B%TqN9Taiknpt<&moSnjrD
zc2@R^)ltx#q>(vkPlMbc*)<7OPSJ?Bq}}ectElLtZFklWZB@1(+N{JlSb>SMt13z6
z6T0Mq8fz?zLiU+q{ac%}gHLFVi%;L6STSgOtderwnrryNh{@cOo3|TZma1-0B&&w5
zv?|wiW#;fDnKhLVf!<#M1LG@ti2-!S2})NZkOMTwy;OXp5(^WrJ(x*InEjB&G94DH
zwiB>izm{MjFgCvYXZ>*B^?=mMRzeDN-P&!qn}KU5t}55hz=BR7rGG^GP1gg#vXyj)
zAO?Vz<5v0{=k%aHzVbOf8ddqcZs96VVCU0J3h)V?6Ux_x@&CK`uOMzW!}*FY4?IpM
z;ymorCXShC_ZATf8KU8b|KqDeX%o;Nxk9lt4!(Xcg&hBri~1PCo=d`uIZr_1Z1h7A
zi`$USi0DFLYGHBv#`#*`yiHi9u{v+3eR^-XFXby2L#g>2H_c1Y1-dMB*LFa}3(>B=
znsP4M%%z=tEr?($%Fq;`*A)j;1<(jIVw{p<3An~hT7hygP>vCtXuAS6O*+MwCD|p0
zCypCYRx-9OR$D){eBlhmWRxBL%^iW7MsK@R+b}t}VvfRv7C)DoEzTwZBC0ct#*R5v
zcDuvjbUNE*QE{?o6N^Pbv>JWP;czU5NR#VIf&X@b+8IHzan6|xk`gVAECi}JcaG_k
zS<<pZbhzN0{qd9E?^(`!>9#*=NB(#lPcGk62c-&^>)V87gGp)U@;$%5MC+pg#p<v6
z)rJkfx+;5i$?x~1U$&XF7J82T8|`!HY(Ks&O%*?YWdU$^Rt6fYj%Hy4l9m%XCkZlD
zXSP6}>RcZP(+t<g#xucevzawbE!N53VxfDp;!`RWW%FhQ2Ok~z`K6cY=VIf2qe67F
zV%!gv1+gjHPm)!C)I<Vgj0uC`ZE*vKnW%=0+;%9;)y-W02%4IKKW)U2Xl;p+s<G_^
zkg~TVi*ecMMyqI6f>@!Z%`%E6B#wtK$;{XM%RN__88ZeHuW7}V+gF22_R9npjf0;^
z=Zc?#P8$LF9OxNc2dWqqko6fLupAN;@_!L(@pTNj8zzlYEP%1jBpBCqB#eT&PDyV&
zuHjEsollwh>33JXv4D7XqtDdy)am=DntjHw{KMn=;Y9URje0$^QpsM(xKwcCK~Cj2
zKz}#ZFfk*UMBUYh8df9jFpH?oYS<ldM_R)&bjkE5M_QX{W29VerXzAkT5$y%&!uE@
z&@tQ^W`~nWZGDm*77nJM%St7M?xW9u9oWI@2l|sq;b0QveoC{YkR?T8#T2VgPh$08
z5yb6y)Rx2zqC4pf590!Iu=*6Vgdj<=kvvkfX*QIk^&yRyprFikx<GxbOZ7+!Oqz6}
zeu>K|1wR4FNFw5H_F`jsM<~6*0n~vusxg0W5)%Cs%EQZ31O1soGUqArlYye4+tE46
z<QeqS$G$~+1m)Yw7Kp?!I<f2pXCXy(<`9jv4`P!h((No_m{=1#=6B#<>P;^qZA}w&
zH~UB_`16jA1szbk>SNa;zs28MjQ%Wmb2wAZaAsyFD@8O8mO7H{O;6I^K1r#AK#XMj
zgo8O4NE4isu!rM7nHj>1))pj5oXzP<B9uUn(PXX{+h=&jnJnPPClw<BJ=8(MgtP>D
zZUJRDV_>U(U3?Z-c+P?8ltcVwF*2a;(1;#8#@8}f&k*&hy3It*b7iR3sda)g3#v!A
zv4h$~=_*|VpT+sT=!MCKg?Nch+Y(s|C~1ZhMN7*eDdh=ZLI6Oje0e0wH;?upikQpk
z=`ERxwo!huO`BwOu~~|v9eM!}4FO}PLz&N9Y*CNJFU^wtq-)a?Ao?<r8<I(6#2Qa(
zHcl#AEkd`&O0+W(3)<U7>V<@@FI0<I1Bo;2=KIWczC%N9%05m!0Yn@(Tb${=ITD)2
zi-b+rMAGc9<@|j!Na%{=xwTG-LF*u8<Q7$Nzt311ZNV%Zc~(o6V(g(6f1rr=J%Tyb
zd=|r${N)dCxZ#I4X#crr^yo#Sr7ql5!RP0w15@eb)?qYDry$!6KQtlN=tTsVKol+3
z;wKCtnvs|vP(N2Nh#BH&&@l9QAPaCtD(JC{iD6Or9=pa@<Eb`Vw6k05-Sf09qbjZD
zx_G(vosng>5=CLR?`I2kOHT}x#Ou5&6DCYp-0=H5mQ*&D*(OXVDzjDF?c!(Y)7igL
z`6B23KgT?Z8RFccq1;HiHPAtw3`4e2inYpIaOn_~YHkP6D1ckjEdquy;jgl{wW*^n
znCM<}VUuQq_`_%ogiF|O+BYumtY~O(X}8}pYn8ihe&?p&&Y5?`(g%fWm{JsM9yPCV
z;>KBtk|j!Wjo4A-E3>-H%2ZZ++Qk!_&lok#JmQ?`wH+;`1CO6K=k#m%m<O=y04Hex
z0}e)f8A)T>z$_A!(O9dvMwmZA*>0|%uGwC691umPtwIghjZ$yBx3y;Ag%LHzbIx(i
z6UVtrye_j9tepT70)24o`x)s#HRtMK&jIrY$U*defF*|;ERIZTgA7cm#9&;MkbQBJ
zwb&aiDo(|Viy<m-RF?Qt#YItXvDFk8KRJ5uj2Ty4flb`5hE#`1WCM@;i<tl<Dw|b@
zIFE@Y2kro+4)j0zs2F+_V<CL(`_k>G<2S<LRiGM+B~X8<>(p>ed{lq^AQ<UQd0+@P
z4}x)Y8$pYW&lMVzInBgzb{B+o@_CeRI*$w8L?5U3(q8<8_5(#cowMKIG9=)wXK<a=
z3t3sL*7wcne+Fjp8(=QHe<V*0@-)e}GO&GclI#B)Fq1V3(D7i~7M^>*;XXSYRC7&D
z0=Zmcr*JaZ+SI7II*HF_8#}1|$2TN(T>8H~K60?+!*$a1f4QwWAwFbGXL<DhbB!CV
zF!}s@p~fyg*x+n@u7mPB;(v5Kzo||<k^XyE;ln^uRo<o|*Y?-JqIx<^uOsdbVQ7^L
z(SxjT(pk<M=|o)=W@9^&$)3U1QQ2XdgPIL{?Z~646nll$^DBL{&kg&NVvi$N%t+37
z;>6X(I>7B+AtlaQFJ$UdsQV^rnY8x#_)jK&AeQ*13gx<5T#-x;Jf2r0X?QC2=%YtJ
z{wJz*^ckruA1S7iz}qLU7Uw@xQm^<4sDIFp)XK!&XNb}^voJ&WtfIcYBJIIm+D_!X
z_z6xo(M93r3eJ~60G_2GseJ-mBT?|CfIA__nAa_3Xr_9p+f!2FIl347>0h$C>8$$G
zfw$JrnzeqG)K%gcu+d%du%{%Mu6Xv^`&g&e&kkQQYu)VG>-f41>vdUblkR}!8?4n>
zyd1hZ80I+{t@mX5<IgIWZru3Oi>FL}s;$i&UfR8;cJ!o+AAIh)ZQGvPCf%|5XB#iR
zea(N2?KFkYUwQYm?HjxIY?=1zw&$<8=6PECGjdJRRzUkPM5@Z%x?r<ViaLXfG7AK!
z1M9>^Tz*OK+-MNRKgdp4*@3!aIz^>4iU3&_9YUa73iyfQhH;?~izeD4QK3#fZT8|>
zoz=~Y)?YDp!M$6jSB>pjJm<87f!Z38m4-)@c~!pv{@E;hYHcMU0ak0yX}52@^x};-
zOrCo6(kW3%9<_YulF2u0x_I-Z9ce8*W80|e@v(@*q}W`QmLf%Rjjvtutd*gTdOyA)
zT?p+`9jAB_WJN_b&q8%L9>_Pe8N(9!Lxm{`*g;+>7=3Ec;kU@f3)3>&5l_6N?I41f
z9j@(2y|hPL|L_Yhh$FS0e@U?A;@>Z3f*?5^{yMAW;*|ZRj#?rUJ8GXzY0n_v!)(XH
zFKEBfdgA-oaz0iK(swWiOAT#kJ5a#+61qgz@R1~HI*$j!FA7_*PGbTTD_hD|eYfS+
zL0DdRn8PAm#pZ*-+^<+!NqcfZcZsF3{j_mY>b%S<b$z=n3(>9>S$Imdx5?Dt7e>ka
z1{3W5rf|o(<6DB@UEi{B*$K&X4AT98Gsye+_-4z4G~cp;Y!A@&x@E&swsiEwr?fqV
z@Uow=TTuRa(AoV3$FCG5Rb`zCxGC^t7TU?F-(|tonvtL9Nq?#!JAZT?+4?g`r-}c5
zglKz$L)RdJ!GSU}(||B9P_ahklvu4108fUPFu(+wgN&mx3PX3;N1B+V$d-L6m`G;q
zFH`$0vZ4)SjVhnOEm&95ZA%K8N3mxx;{l6=jDSu1QjshN@-xycX2vbNp5G!K7Xx)W
z+86XbVPMq_SO{&!a_Ud8yjUIBn@&}AYE3#`r{zwY&R%nvh{7~E*lXH!S{{fF;_X5G
zMzk%st-SZ<zkEmugtDoGY$+!!>9_(<Q11PPVwBrVQV^;EFC^Q>ymC@6y&Id)>13bk
zB}yf^O5mOSjyl?zGBxD&Ng4c7v(yIJ4m89$d)mK=jULayTb|-#DXuxJ<yPz*)CvyF
zv6KNqCcYk!Ub#S+TPWN;0;T0~wpL^e&8@EUXiA;Fq%nv0!)bxm8(!D!N<)+_^-u0W
z@!4ED<0$|iFv**3r`#ZIb!T*10W6x-KGaUC)<k_TB-yj*YAuB3!Oo<zXSEI-P+Jq+
zDA_U1AV^P3v$^CyfwAPp>Zd>?Bhowd9hD?zc2ZH&S1$AMBxoZXs-VT4s*F<K68J7C
z&0;zOg9H1%Hp*$HL%YN5Ly=~u*2$jrnH|~~fQ4EyQXWIY&c||A-k^)C2kQiUCeF)}
zI(n_xo1Bo*`K0_BX&w4|Npp{NU7CizFXgfWzNVAabRm5rJkI{^H2aT!<~KW$s!M-K
z^C828N$u%BI{kj9Q07ce%TY(@#~Y6gh#RHp<VR%|U_&Kt)E;8XUQ7R0s1dho4{8to
zRH)&G$*5z;u>q+jlb7tG6H-n3-Jh~^C{u)|*f~GN*vnZ5G-LecYcXYDdajTGWd#Wn
zY*lr!6J!mb4k6%&(xz}Nz5;Egt6n(ZnPkD*{30|n`L~I+L{1bx1Rl(VA@DG+AkvLe
z34nsKg~^;0)ydL=616My+VNC%mLMmLMM+rbtALUMJMwM`a2J=B;m`tLS5PkdsMx%D
zv$@!Oo0*O{6r2~pa^S?d2A>+z233V^FbJGKj)4VeqLoS^K<Wb6p<w~~f-pFACA4-G
z0HKXoi0fD-{))BXQawAhf4-SO2k9V&^neVn8VJ&uAJQ+vQm}7_AV%RDd5C4;cjM(_
zCOcA&>mxQcIC?@n?7OyHHU=wv0f(0rJ4!rWo51Xj14?;Kq^Poa(&$lxvd99k@358+
zpB*ojT|SrU3HTM0;_#K#6`S0ynvrL=4WCw5YEJ)qMv94d46RQEylx8WQvfY=ff(_8
zuxC<0k(t2`E9k;@?imDAx7Z>hB3%tdMtcRIFUo;MhCom&=BZJ+k%msgkZxc&S)S^A
zD(FD8w9c<W%7!K<Of?3w-PoWJA{3S&AH0M2kZ<rAJdb;rxOfNh4L;KdG78|Y*jdUo
z$*+{|T)_bxa^VGjY0~+Dy;QNif%7L7ULa}kiJv9eul_Ra=O=wU`@SLLu9WPwhm5;?
zX9k$PL9BmLMIt%NoWfY;o^gt@b*rL`!<4{LMPkT#L8s-+m`*?06PY&@%$-wPT2UQ{
zyvq@vrv&=i)rz9MjLG^l6FeAIW%g?@d_9@H)fJRO`;nr&f#YhE37HFED<b{OkoLvA
z26_*$C`eE;&uDEa9O}eljTdID`g{8Ml^2si#&N}8vU!y-WBi-x=R0AZaWM+OdKECt
z2cP>j(O9sS1Gxx-Lub=D#T9Ld2^LpCh|<!RelOrk|HCCrVUJl<?E_BXXdl4hi9Kc~
zUmLv6fY<HPUzbr_L5l;;h^`62k}X_?_t9Gd>G$ZJLNp-$Ra;2LT?;KLi}06%x+X7Y
zM!wt9S<<eI9t>+WfYQkTypvXKD7j7mi*(bF0$eCE^SS_DM+zN2b$Mm8G(30M<mP5n
zI-tpcM7p6&-RV`lHT23p2OFEShzrhDmKZB3F{GwTdmp~0O0GZShS#qQNDK4cEL2U}
zICIsL_g^#xP@u{=^rBKo0U}9=ejlQXZ^IhPZFTrG(*3Feej}vgknE_ArC(zZVlaNa
z)M3)X8st1fuW>`UJ`j0Jzg95zd?sX6kIn&6R$p)tEhfMS`!s2Vv;r+g@MPxopd3V>
z$tQ$T{6_`|H3vi5c07#IvMdle5Ym4ILsAGMz!`#q$XTRdieNzqcy*gIs5qjzr9xjI
z3Mb6dZ~BU)QBuU$=8NE1G-7bAD404g27TIFzF^SD8ht?xZa&$J1QX|NK~najtrjB4
z!AdxQK=1-h2>l2AFzF><GhlnV0-=G9==nItN=91qFsL+r$>7TX%oymAPARi&b2XtH
zi*mIg(RW@x0&0mT!i->&*(b|>|4&qB&}5DN#2;|0fhO3qNW~^-hR4vlfTc`ZpCXfH
zZWT1f>M$3}4#B7bqWd2K1Nl361vZN=t@TNh3ki$m|5?RyvUp`X;GAvIZbA(O!D8QJ
zx2k5lf0IQCyIpG0<@ILRtMPX}K`M4`Yl>5&EHzzS>=R9Xw`0q0#o~aYtF-Ta6m&b%
z0~@deb9-8ZWWkSyy$!x<k6@6&>Yvb%QE*6DKch;NgjZlWT0qa>AHJn@GzOyNZwkGu
zgo7WAB_ujU+?Q@Ml?V+JE<ER!bH6od<QTW)ZZ6$b;;%C;Eb@j#v)~#vA~x@wGjF*3
z<!V!~BD#A_=g2cJSu!tB<nT0vi*LT@j49__a7L|Pk{%Jgrl+(IQg?NaaGR`FxbF(3
zrMrr}mE)qO>8g8lMdIwMt{dAty|p@0I((A3C_4P2aJal}-s}~vBS%ZIn({Noji?@X
z_Eihxh~;27%TO+DkbcRn!yOF5tVRXZC>K!)NimW@3*C+S`W+&<&%&ovN*K$jLL~0$
z6ouPj6_(h@sS`p{sinx`5}DcKSa$QYkkMuDoIbzPKP^$=F<R}hVU=e8tnn7Lb><n%
zhR<06DU$3Dchs1S!C1Vg!dX-qRh*Tlox4Q(<;1JcJ9AQdl}#BL7+KyH8Bty9sk`=$
zM|Vz7te83~Wb|8&c2SZ;Bd4Bu&c^nY`_|0}Dr(hzXMt21J$iCw>+-oH{bqaPxbX|a
z3wN!YTTA^Y9(&)gTI!RgfVUcJn2RfLo`&OeWux4J(Hu4MZ~?$xEs3@$EM^=Kph<B1
z##t;X(<$bQF6E<E5RBiw|MIo7+sn#E&0c%?{k!R8R9RU&P6VgZXe#dgsy6`ga?0s;
z$?A`ve)hFDUVHZGalcivot{1xahlE5BV7%Sh(mPNH&`pBDGjHcdG48~)$x5p{>l4J
zqqn_tEBy635?-To^2M$Zo~kKJCyi*DymWGvXM}rWd6jdxXHt`0a#lL4o%N@ANINc}
zz6R8{7x7zSkQQ~3BtOAjEMcJ-NHlvBB!9(<K!cYmS)HkLAkl~w9G3!vwMIWvo#)(H
zamM#HEve_#yno)9@u54T!!NukHfQzS^BQMvilTCD>AAehp1NsWD_d(XxE+nKb+EcN
zzeu&+>^tX@%g!xT^~yT8X!E|m@YgLRr*BxhyyU=$8^@wjQ#SC5mXDr0zTJM0=h3xP
z`SpVpwJwq}^%Rdi06gcB9s}20L~$l!n4%;VBPm5Suvdn74RfMak5E9y5Ye{Ng>Al(
zK4F_$T7Be;>QZK5OE~sqOSFkA3(#*;s;iL0NBculCvDgLaD=!25cCZY;>8Z_P1YkS
zN40>#zy(~oV`i+{&50ITD2dcaxZ#aTBu4^99zxgFZgzpwU*y(yB}=?N|GBp$sqJzX
z!O-;rskggRJD|Pf7~!k++2N7;^;y1gs>^)!)n=DE&UY45zP8zMYlMSMX7h<Rabwf1
zB7=Fpn)!B7<gs}MxP#>YnA7-tr?*nBsgTm~H!bGm&q@B9`5XCa=AUQ%I}5LI83_EH
zk3IvxXU;-Hqsg4QpaP~yncu+HY$}<TBx(Q;^?<d<D|E+cZGGCqDYMVWTq^TBaS}~I
zlJR2sQfVioj@4wpnW6j9{1Kv5s24imF;DeXviwkUI4@T$5um%$y04wiuN~@x>Aj#S
z0n4w1?!T((@7;FUujq_L#1cKjU%!9bWe=*-Z68B)^)W<NJ>;SZ@r2Ob1J|y*Z@Y}2
zX)_1!BR}o{P9jfrN#+op4uh=%r>K(RCnQ!*@7LZW3s$L1w?`rEj&8Av$GP<fw<Iz{
zg9k21*L6|%h6g(uJ<G8kNMF^5=n>_{cqgr4V^|L)gHS{XztWG)X)LPgI{&_x?>oP%
zrpO2_l4AE&#M&mb#VWi`S!UEhN8mW3@5!yA_O#WD&g`tI={$4M>eJv~a>VRWhsCPH
zrGA&m><W~Ht7CPl+k_}kJTgolq>8T)k-{L1iZQ9{rzC`WO^C63Unfb^>q3mT%V*L|
z@qJxt1wTJ&X8OI107_KT?+UTkwFlWb)O^CRxrU^CHYAlk@^9BkR8$;`H1SI4Yj?OB
z^eC)B!U0aFpm9lh&+ZidL^323IxW+2+O=94??HCWZ)nVAZjzuh{jTcJyPMtdJVphm
z7vdG@A_^tFqx1mqE_`LE{VNCzMI<Av08&I-fzzhJhxX@305KdcEU-#y8@be7CPl@o
zi^}DsTpv!~&?E$?f#bnC>YBP>g(ql~|Fz9mUM}_eUAwD`v}$!&3O5F)2r~Q37V*cp
z#@mE;z)KXffxv@}NwaR0pvo|XlzNZOf#EYbI;AJkiTFv9TS&u<MJM^?_wlTaA|-f5
zclOb+Dzh+y5g|QVH;O!^w7#QrFh)Y!da|GHs7-PICrA<}V_;q&JwY-}%q(jBp<R;c
z1L1Ps+(SAcb0R&2R!%>fZFOOZ-qdJo#wJNmh!<qu&F%H{cFnNHz`Qj2#l2rU&^u(X
zf@w@CsF%fMA31BCA34pwojZMIB>0JX*IlZank>_9WM!(`m>L)?>aeQ7(1>jQNzjuO
z@5mW!DBZDNuJWaq`KsjoQiE<)#^<f}7;qKH)%ODpHEKGTgwq(c5q2DTp)3*F_iSv9
z2-&moHG~ET%(lep2)t?{l|+cg1fVUb9zm;DGqti&#3?9DX;obiU7k#z6&)_RRascz
z3rY#WYD)=w28y^j69y9WV?e%-(~uJ9sRO%G+NUm4nabumjtG*=X+NU%9br~)ZCSje
z#%Cj(B#;e&bUwy&J=cu!zJpZAOL8R&tRlexULs>b!lmS91INKO5psZp1JDY!OMM=r
zXZ~f*v76l9vJ#J}Jh}S8+3lB{xv+D%&FU#B^SU>UbzU~#WAs+VTUtlh5>rM(b>gk|
zUNuvD;Xtsq1|B74evifB_Bdq8R8t!~z^2Z;(iifU9Q~ouIAY8gj02y+C*6lQ8sK(W
zLV<6i5{SX0F{UKo$C!u(;Jqk@`e*&=nP>hqtH0sidmHl7;#0?6(r@$igZiWw5|0MM
z7`z*G4)RDl=zW^g)FH#kqmIl$g-#Z5Vsr<Zy{+LyD`h4QS(gbwx^Q#6W^@^wRx>*I
znX5i<M43`iF{UBmyJMMsL@5j-Zv6ETtuvn9lvNwR>~n5?&lPj)lMO*_Z&4U_X;m?{
zqpI{LKP{_C_PwLslw_A)ap(!M9mt8UY1rx-VVd(HV4=}E-0+FgWheZ=0T=kn(gADm
z0#L(B#0^u*)>ybz6uOTD>Rq1&N7rc2myNE8myWP6yTg}g7_&8<vn>+Nz7aKu$Jr}K
zq^@w0wl~<2te?9{>8YPvQ})xJlvc4Fv8p7Z<>UZOYB#;p_r#$q*rj?q%MNICN_lJv
zvZ*IaRwtoOYCw)X^>r{2a0kK|WyEVnBjGxcj0fNcP*??)WEWKU*V>tF0c%`v;o1eO
zuQirBwSCGXWsXrvR!wJbs9uj>8!1=>vxrG8GMoF`i_)_PJ3w6ZvCF^S9(8W%+A&Kz
zpw{fR3wC$4WtwJQ!se?rsIMT1vQX@QZvG$h>qdQ$na{JKQEoF#K_AHFQr1o*repi&
zux^YGd7k2s>x2m6W03P&IN`27u0FqGYXy_fW#6x8`<$i5YgaE^b0Mm>(8}y<{nNkg
zwgD2<!Yo>tR{epq%(#t3S8Mx(IfK=aW`E3Nmpfoh|INO;MrHG7?daO#jM~@xAAinY
zEXblDuw;#@9azG?{Pei`P>e*WOLk=Y2>2<8I&seuqP4Mv@gQFnAZx*hMPX=MCK3k;
z!k5<w=EUeueGKZf7yJE=S=5fZ?diXvS<Ttj{%L;0e#*XFLT%rZXI&#ZhV-W+zpH<J
z!d}%5=zX5H=4o=oV`+m?`~<$jPRwuO?la<g!t#XQ^_9BS4ayx03Xq#bI#23Fg^6&8
z4wTDf0#5zhnmSSKj=^H#Fkx3d&Y5$tg<YAZ7wpvZ>6<>CKiK5)IQ7Mne8aARk5?~P
zOTD|mM!j3XE)Yy!r|l8F>)9{01B=k%Oz&_EUu~q{<5l0FVZo}Cz}bFik?)c2LA|Om
z7W1`otU5}Po$UGrtz4qIt%ZH~sqUt$AB5|V^R$%ifrni#lh$77wMk3G$&0l^BNmXU
zod%nj)PF;ZW!3p!r;zOYB~Vc8Cxia0B<F&^C~9}AVlgHw$+Q@hpRQDDB~#~uVucxn
zZ!IWQ8wXcY@`%kjpPsr{QhlnR+#&LVo(<wY5Ix7&cBfv2JfGa5ZTu2%fdWrl5nOJO
zbhmUj`nJdLNI~ybgP%7>!M8)Hmf8FK3M{SQj)wn)pTrtMz=zI&5>5c8PZFI<7=uI5
z)7FY~TO(rm=~5qhM65u3CJG})BCIHs?eVrmqZk9l5sj5om_*2cj0!?7s7N4}AL4(w
zkG*s6nP=Ynj(%WC=diL-7UvkJZ>%VKnK(i=ml-P&a;{i$RSvhRW7~s@uUNGEB3?ya
zxv@N4CEA;8&dF|1V@<uQ*(ot&t;9rYi6`LoT8%DaO{r0V*54=#R#_D70m*1qiu^{G
zDdY~AEp_4XR!Lx@Sdp;W<Y4_syC>}On8wz*#1hfsvACtX2Vo-+-8Q#k7DS`0#GKZE
zQn|rjxv9)NwaDU=Ob(Z1ZY-Ca(K@$US|%wTIQ(u1R&|C<Oi^4`CRnYJ02{&VX2Dre
zEcl9pW#uj-V~WLA<hCQ8b9Kn&@dxaVI$yEH;}Ol)K+IQZWDc`UVI;#UtFn2l(h7GR
zc41~j(yPXkoQ>zS7vzrDVNyZr7?1-AKM81J8NE*e{ETq;yWi5%cN{g&nK}CUj`V)#
zFy}g_Q|PXoEnRo!c{hJ@<&qnQRa*V&{Vvy9=P;MB_`HARR*}m<)9lCi(PKI#$d<@k
zfSP645EYs~%3(EpqH7t}l#{!X8!kogA0p~DbAeo%3NL|cmG<X|U^qLS^n}mwB&|K5
z!>lCZAXs&KN0L)0h_luMb9f-#fvwmJ9Vu-$OpSU$4dWk<Kz%9jClm#o=pvn-BcCZ?
zMxCDHC_M}-sW3DnnYa+mt%Un&T^qyTD*`_Va7b|P(rm=>fV*Lb^$JS8fE+el>xsTc
z1PC4k0<K`31wwf_K7!N~<FgU7hNvJp8J3L{RiIEgp;`kTk$e>*_;Nmwaa~RFx~@BU
z9lDdC*qYI5ysm3raM7d<hxUUKS?vez32#vDjAA460#M<OrFqYh7KT<fuKdU=BpoF!
z2`?_AsCixa#n9K2(g$q;&KM1{SK5oQR|@N$4*2U8+6d(9YO~Hd{78=AWHJCU5P@1j
zy0&EPQnT6E@4oop!L!eP@PjWtcxdU;huBa1f3$Ahk7%bgG=xG8A=ZV1-{DNSo2NC`
zR$Ru++70}M5ab7G@8H9D$AgRYhw%nus39DtEMdzXfwHRR=Bm&L`ARt82EL2eX8$46
z_^sh|=>_Q^#iXq!%?iY-Jd~&bd=d;Y!4$zU3tS|eg%$W^!6eTB@hjx9z|b_kfqKDA
z02L!2>18t4k(K1HmF%4}Ov<LS{l%5zo5qGi+KtZg@&>P6HZMs`Zx*VmTuRVWQe-dD
z9&^@~IoQ<7$oNKwvwn=-Q53P&T)Os_3l=#>j+?TnvZ-VeJ2tiEj0@&Wo3+B}9yviP
zch<RF;sN&SGtN8rUbo~ciH9q+o1CS=)|y1Ha{|3R=JEw>CEDXoR#xj^Gb<xuW=hl!
zUmmg6ZC-oR`CUrsxb|5;#EYjDCBjwLFFx!06SOKP#NknNJ6ShnWByIT%sVdX9~p;$
zo28Z0hm{A8Q@Z#a$_G#iCy5CNetc}ap)MS&Z5UfQab4;7c(YS+jv6*1Y_Dvt9cPnF
z!)nI{1FKIFJFo%kUNqX;7F{<pFmig!2&dv0UDsGt)KoLhDw%8RCe_8gv)2Ir_G4d2
zmr6ebkJ*U&ki{oPqmzL$OvG3~A&CR5X%nPM%hS%|R0%NQv6m*?HeqCCu%gj(_Lth_
zeXG2;O_;z+J*zBcB(#qvyomb~5<$Anu9JR<v!!(xR0dmd;Va}{?YRwESgAH;l?hM0
zNRJ@TOA``_;qJ4)V%O2s61kNn#YlBSDN5oWa`obxIL<tEG6nvwhOCvfao;`3QMwp$
z^!c6eNj<h`%$P-Eq~7wzxH>SEFqrs)+T5^@2eI+v)|f?H9!K(|URsw(vrM8j2EtcH
z_{=c0LoEoubv-L}2J0ME+JE$E|E7KN25Wu`&aT!7E=vEReeA3YIwRWOwZ6BspTEJ1
zSW6!ZR5^5cmB?ZSw`7+3;lDPHdoim}Nku?&xG^Ho;tCvfxgM$+bH*LhgGMG=iy7G#
zm5UfS?oO$tQ4kJBC(j#QFFYvOgUzvVm80h*YM#0`*|WH&SiD7EJiWAW!mOrHeBsJb
zLBu<Cc%#L|=9T{15tT*7%?YW0mh7z`yJ|vJV|}Tj{oJm28%8HPZ`o&?Ioq|k=7L2t
z&vmicCP(q`_U^VR>!;NjXKEhiksQIcXmD7u&tw$e)P5$I{h^kLE!D7jMY|;p=Zkkr
z2S}d6ZQtRShNuCU@f5KNV8iDCD8LBiTXP$UPXc;u0j&A3DeIJhCt`5mMb#l^K-}RG
z3wABt6&u}AQoX=eTUt_N6#x2~NmU!#D$n(YZmpc(8n0*@Sr!Vcz9br3R1`=^MT*zv
zHaFR-K6oUcDi*=fP<4)UV9qVGYQ|Q2f@*zx$@Hc=vz&}?EANDwlvS30#~U!Q$_hy=
zv03jBU9#Qkwj^$!njGHl8#ZZtR~XUsF)xbYy}A?Qf#PEE6*W)X+AQl5KX_kfB&|D!
z2>4P$fJ^;SnX9bc?>ORg9&z}^?JfxY2DV~l=W<nv%HeU16wE+<^@hhb_wWYOJfuu$
zC%g)|Stj7kO#)4LI;ZyzEtuVrT+ThY;f77#+n`al=E_c{QfbeTWX};09<+vM%XUH*
zNHL|3ujgQS@H6L7DS(0%*0wuaB!}sBz?CZ#h2fu^t>FTmg1xj}E~k5(n9t<peO$Tl
zUcsR7qD*)A#3k||m#E~>!a$Vmpt7*%MHQ4)eB!dQrHH)L<7#)1eA-bC_kPb+48HEX
z7&y%D;O!~%F+(^c=f8ej&B$Bb3-9&pR#+OSGTnI|e))JWQJMLziH0U>jsBrIpfUPQ
z<)JJwyP@pD@*vsfzWKZ`(64B>la;5N%4B128c2$jhlSe;BgQ~xuw(bZjGu+DLU*Si
z-wSAYGFQ1*1!&~lJsOv~oG)8Wo>30bg^)-dR}yAp)~CIVN+pK_ZT+5?4hm>L!uPyX
zZCy5)P*=v`0>$rnX-M(ghJ+LPZ^43A$<A7WWzS1l?~eQy(0IHe1TNyii=?iDySWF*
z@c^ZYTsqYMEm(l1bXpp^puBc@VMuRiM=5?10<KyK9*H*&+HN<s<B-PrB}HNaIMhdc
zEO0Nhii~H;;8-B_BWV!OQ;=lpA~A|5341HjQ0f<WL~{W#nDxFQ3Y@({U8Qv*{UbIB
zf{BAJzpjRZIlkVAT*#$&Cr|!|_D4jo#?C^f)6nnrkm!UN-Zco~Z=?sfB|U_YMmU8-
zSyc({7E)K3evp@XxRPu@3`CEL#b%Qz-Yu~DBDaHSUuu7oYz{NLn1ng8nD$n{WO2=4
z_LpR{OM1X;aa*<d3X6EOpJ}hjP7{oCK3cmLW~PhS@VAX*^rp`f4RY$iw#kSGvq5|Y
z#f5w{pRjGHzc^pg$p<iEtAR&ZkJb|YdR*gVnuW$XPwL)ECu|%YHo_Syk1mjz!=QC^
zyUPTcr;Xw(kob>!aj0umb6EI{;8GoHv=lT;x4{Wy<Qgzv|9M|_o@G6&9tJNAO)AEf
ziDyRMTAmrKR(8hUnbLlp^$wzW?=U!|-O}z1A2n3Mm(M|EStNGovv==5>#Y0V)er2|
zk6*dyqE~3AUH;I94G(RQb`Rd9JX7_X$Z;`lZg?n%Yp6YVv=Lpsfu%QVq^O6WLp$j@
zH?k4n-<bHj&*IRoam4J}b#}9Q1hHw!Spg;iaGK;5-|cs5i_kv%oPPSk#K2Zvp$v5b
z#z+>&?a!7AniFFagdnLf_%unt?22$~u3TX%y9`79aHT)xD>~w{I@nc?So-U{av#uU
zIzvZ%<tQrbWKXz+fva+*X3Lxby;8ZMlIYyyW7!6DX*Q`Bc~x&^7r|l{X7lO4kp=Dh
zWFN08eYrA)w~>QiO#cm5^ARx3l>4n*xw@>NOS+fq94X$m!OLSGDIlvk&rgaFne+UK
zp*6nYTTooj?3?Kj{BOa-1&%D~$1tAWyr)kalLJ9K_ALi;bvf(qc?<l1`g<g}bG&(P
zUwTvyimc3n<Sj(+a5%W6AAUBFPC%a)ZSxLBU>XVsTPiHhzVu#{@hZx4P@&q992f|N
zp9dg7QPXo~I*<)j(7JPw2(V)M6zldASixZ<QH`)DVKY-<c%TKfpK2FL`_s+BV=I_X
zyNEq1mJNLUvG@Xp496?<Z5SG>puNeKg;f4oQwlNzK->qc@g#HaNl)T#CP#?sLbRSw
zNIgo?BFV|jSI(p3fEc4OF<JTm@AShD6y}{w0S17l#|d6b1|&2qGD>K$iWoom=7sjo
z*>KaiO9QnFB$X+U^+GtJor%$qHP2?X3W~mqa+|+16pr*SxOw&&IrD5}=CIjiB?B8Q
zfglxwyg)e_Y(s=k87MKr$P$8E%}QM>u6I_uw0~&N4T1C@Q=HCguXQ@7072nci^Py~
z@e}QDcv5uW$sx^`zV&2}WL}}Sugdud>N9Fzm}cuXs5&i^>owh~WeCxaNeCxue7{Ds
z<wH!~=0nK-AV7q=w5I?(80j2QVf%r9B)Hv#jsu9V8H5MjeZnU7avmoiBT-9AT@PbC
zYhP<?^C9{(XLtDGlK~76t$!HqZ(kO`blpcz6$q-_cSMD40`Ft;4(kGLpqNh?i7la@
zoUN7@JP!&6cAXQHzM}`Y0PW3(IiS$`vUcr|iDFC}@zyJ(1JX`D&x1TpE@Z(pd_kF!
zg-R=b{~#$sQKZ0o5~f9PEy4!COOe)Gd;sy$uN;oA$Rq}fUwXK1l!95MZTr#zN)BtB
z<4dP_4Y;3XGM#JAvy>thP`i$|44AJshOmWOU|@r;)aN!>h>ZMUE?~{XG1Hao5C(wi
z1qlNsBw|NG8J|_Z^E;gs_zt(4-J>CY%BEX7MR6(f6<2e@h+9fjYlol^WtgQ_OYSP9
z`d+)QSP+v4`Qi)|Gw7I+l15zO@l_n<MiuNfW-6^{EoUn#Cf!kNvumAYV@K3lt=f2+
z@$5&Ev$1hp8GA)g+;%J7-wlLWnC7wqs$&<vwE&A9@|qe9Uju3}OcV$8G=;Khf&2-<
zV~7rc_&OSC#d8$9hDWiPQLNdDXJn$;;0oI@qnI5oo*{LOWU|HQ7`Tyw$BZ0luVy!E
zo2u<2^~>Vs>}72eyBU|!@Ve}lcnurA*cUQX!Pc?`(D8LQBEwW5!IcB~j1CX4EVow6
z09M9uiQr>O$k#0FVVA1GRoc6-`i2dIR!zcnkUD*wGy*$L!)Ks~7<14?H^EW>gE+N{
zY_EFGJr{A&vSbmlE8xSlFR$Bk-A_}g^S{DpdXg!$pUdEq9+V!WZ)IQwC6OE?b&#@v
zpw$fvjFpYXSfiY9?{+sjZgCjhm!3ax+ogz~_Oe%T?-A{dBf4gvcmC#%>6cE4d#z0T
z&)sgL_Z8m=_oi<RoVUp>Ic{_eckgDBNe#75T;4H#*Vc;{j?2-s)OV3gEJg`&hiIzM
zSBat_a>3FkSEuZOcn&uKSiV*~!6+628+iVajmfd~W^>T@GhgsF?UmbjLbQ+QIRBEL
zt)Cb5Gsf1C)Sg1@An^Gb!5_uk57*RGS}ZBGNURhq)o&LSeOpCBEK*aFJyta=r2Wxb
zR%WrpwO={oKDb~6)jnU`$%e-zdl-wQj`xV}wL^jk3IygZG54ThC-pbYsX&-~!C+Z6
zNOwtHsq|i0gyA>vxE@o-cGJN0n`|h8$J+r;qTqSNw^P_TGFD1rNBEe&iGwkw+b?Eu
z9Ioi}HI3`M6lrP5PeFy)hV(KWY=wSImlDB@G#N+g8Yj9y(#zV8fqqiYbZ}d6c`(um
z$sZ~p&%tHVDh(ODm`|hybHiYc<Q}pcMlsC_kVi^5Naon-N!S;`an_a<>ToGX5|l^p
zR?S9P*x{|cDJq{N6(ohC1LzDQDp22l8V;t*lz1<k0uG>6{7w!9^-o4@G6;n<q%BA*
zbCQ<87zpbTv*>ujHlTQj)D~c9PS6C|s-tMseQ3FUqSH>)1FV7B+3_t-Wnejh0qJo~
z4GI9i6SQvtSnDMHETTp{Fa;S2kbNTmK3YK?xjkcYTeQ8ccAI9~R@>H&>2_T4>AmRR
zMdQaWAdAQa<Hu82xPQ8z^T(Sm*%Pti7QiuNyaD^2a=>vp9|UlD(S2yllYCF-FHSV-
zc~nfje9qb&4+F)z>_Zq!VB7Rw8rLTr^g!c>IRKdO$X?J6W#Fs`Kc4^s2I4$Hp*T;`
z2(Kq!hX4+PJ(+s_gvG-wH=e>*_(;-8EkO9iY%oiYN{@2BxzI8upKn%(z6r-#6Jgf>
z`R^WBy7YnH=?C`OABl6O-Gwv=Q7u$odUP-Y<?GTjAlIAdofMaON<+$~FDadzYX|=r
zP$RLN82RKd#4+J}06{8sau|~Mt{_JX6hl-v_QkRL`S<5SJR%G1&B*_Ya5~g%5JQ3H
z24)9YNuQ$YWO_IW<jBhEbT&Wtg}SS`N;vrYIqMgV7tY;x*>OfK<LS$Fe?6c}s4kw3
z&)0c9$$jUhpVrM=4!c~32gA&B@a~gd#pm(LIPsGK4;Cv5cU2z(nyy>Ol6bfUS0xDW
z{;~Gi`eBV*_OZ>UYuDSW?b@~G*%uLT-}`uo(bDTh-eUT$p7X%w<=-u1D<Mhyjt-wU
z`Mu@oZ~rmR-pBQCMPBrn9wW3%S_3N_Lp8=HLdTkE2Z9)~ATEK3MudaFO<(Mz|30mc
zAHP6Y9bzj%$D+6JH&c6>Zo(uov-siNTYwf5;QopGLB+{GhYVdnI90~ftbC)nl~lxV
z&>=4!QW3XMX9?X)zf-d0@{YK9)$~LIx8qkE64O^n!`oL)mp#HB>E4T$7_U8j%!-O&
z$@Ep_NA+@#mam%b@u}Ud(^m<COTJ_e>S)BO?~`tVHLV-*geE{=buN8(lKDLXbWx<8
z7CfM%;(obOH!%WrMWL?APmI2&8jA*o+<>+!bKRc_5S!rl9rUTz06j|jEReDE94Ww#
zzaf4>L8Rut`~JK0vk7gCByD-JQnK5sL@8h_ojPTi)eh@Nt5PP(b2b)9HhZNc`Hh~r
z?KT^~{`K-(m*amCT^nW9ubK3`c3Y)%+mM%-a&JfB+B@1i>*g<BJbxW5euq)2j8#6l
z1@26cMlG8%wNzAX5k#iELnzuf$4*z(QFA?_YK_<w=?Im&T*Vc)q+c1#Rh9qn;2Y5g
zGPH&IS3GRMRenqcNTG<G2dS@HsemL9DRyORvk1{~tDER+#P2-F>Yvf}Yugbvbu7gW
z-rd)?JNb;Zk$;H7@+y=V+fymwZ}ia^&|rOi(2v01@s`x9`qyG|<(fg~dm-rv^KyAW
zT6o4pTD?3_a)JsS!)kRoTq_l;?M}a!DYbJq%H5~k4<+JO!Q`~uD~8fvv8Czvq^Wwr
zTT`h%E$Or*5*FtiR5wd?iiaWR(RELtyaK3i0(P*_VWZaMd;qc-)n#Gn=H1{a`*!!G
zJ*m=?u!GclsiY%ZB3%6W=b-fJ*<l2A$3*Mvlib6ql3=r5sT$^%;G=>iX|O!vW{RO_
zZbuz~;WFP5&6@oXm5G@pw+_;UF>={zYlh7v34ECz^-j1MoGE8?$(b0_D#$J-LKB35
z_aEAe9ktz^tiH25{R~)cV#IYnD9+E~sUtlgRq??X=^tzgn}oRYo!#B(kI`qlGt}@w
z4r5!+`kVuLLKs1w(gzdxa5xT3_R5LCOr_9hrFvjn9Zq)NN#R6v>ON{k`nb&yNYQ`C
zc4N@`r9N0_aXlqTX$cbYgQuV#Lwuhh85X`RToDM>AC>Au0pSY&xJd;Lcl{~pz|r1l
zA`zA5#I&xVPR{wUu(R4P`Z`}W2ITG8{?wNS(zEC?quhBo(~P<h88VcD^TPXu=l|vW
z-_xVglf(01irq7q9Qe~<GVf|$@*6YImjklC-xMJvo6e<9eD$BdKR9oCVKH3{TAHL2
zJkC0&4wNwAaA>r6Fi0L#k=pxsPLZqImv)XQn^0RbFi=xFp=?AaTM9x+>&)?uH{0|0
zMyWTIoSoP{zqxt-_QY&ZRL~I|$39AgNF;&{`d-jitvJQhjkG9XtfBhnk;4#OH;1uc
z65mSD!3nCG;-TepvO?3G_E$!;Q67;^t5qtWNT2>xrKOfl6Q9t*>tWu3>C8)Fy)0u(
zpMk2qtvYIQhy8cl;Sak_QSB~(NUSan<ORr=`3#KG{fOS~gA9dR5|Ir}w1pE|zCakP
z2R_o20q+EjXYX0Px@Yxsjg`Y<+QHbci1u?GD*Md^%(iqt@~!UC{@gyQ>w*iqMzw1j
zj%&1Bn>n$@)aw)>r#m=_5lF=N%t3IEZ-lFR_!-UX?ps&6W8I$0if@Ka_FZsG+pKl#
zW_8ZJechfC&2kDT2iFJLgNT=vfD_&nYM88j!bAnZkogo1)=gA;_1Lj9z3I<JkD0LM
z_UYR0lQmiIzueM({@k(Cis%1e!GeF;G(#G=^0+pmcxzajxz_-R6KLTe2~HRthd??s
zvI1DW)Xb)%YLZI|!{>E0wrT6z8o{HtomsM<Mn?)?C0Rdz<3<`mvr5ivi^p+iR;@M_
zx#)*m^VyF18>tPFJWf2t>!h!+9>+Q9vKT540$kEQgrTG%u|8j`v64ZOlW!?2QAm0a
z;UD$eORDYN>BEcd(Gq*V_6J;L`;u%Dm^u*mB*5WOvC;^)1H+(xdv&S3yW3t`ZO2Ef
zZ~;*AsmFIDy&;`Z1OHwM+5+qZk04>hOpF5E;)sSKSh>V9FYXXYly!WZ5<~Mh!m9QN
z#C!UFqnm7skIv~p_zf&%Bnreq>e@J;TiVisi;uXFbuMvbWU9-TWSVrCdT2Y?Q%m2I
z_Cu=W#tOwP*Py%6gCfSwqTY7Yg{)uLS5a}TR*^m$3b9zl5^X<&##(!9H%0RW;*oAk
zFRWNnajjs)p4C)nYqfo>i7gx`%}jE%gFs(dmEc_oNj*{XgPwy%kPe_9NL>sm1ME#Q
zR0g;ze0(lLgQ!yY2c{Tlgkz>3n7pcR5eDHEs&{Yt0H+_CQo}jPA>6=@K$z#%jNUS?
zWaueN--;UJpT<1T3otVMLJ~a}_<o&|q+#O5+yOcSRR_{CH%|E#aXYKW*tm%n4R$F=
zNzgO6pa<vY7eLhE>vO_vR=<E#b(&588Xb))P?uok;L!-nhpF&>f)oVx<z}4-h|$I^
z3qbpW)E@@h)~r|lSVsLH<5x+^iS>kprqo1jq;w=tHO^(_1ql1&t24f}`ZSxzT`|#O
zDfU`qXTVk~h>ON_DkIBckbov33AK%=d$p+6nmH?3Q2(H}EU0d^Hmq|g>Km7^$%Bip
zG<Ez1H=pJ(TEd~q>Qa}<XtLFh8M`>KHTow~SWI!4#?kTq>F2d7Q56lnc=p*2?|Elu
z0*zockfi0<$Ef#};P|T`BOh&;2M)?WnhISGU5$R`Ucn^wRS*pTM#7mX8qljp&TZhv
zW6|tq3y6h+_?kQ}!1R**n3mdV#Yoa@Xq(830|vs^ut&X(j*vri-7+w2^~7oA=Zgt7
zSmsSv1S-vSqqIIymoLomdg`usSwmJ2yLwzh!?*^`dABE2?sb(ll#Fe%hnwdN-&(t^
z#>{HZuLxJ$gYGe2S@0=Vm$>~)lhqY<*4a0wD%)sysZnLS<a18!?o4%d?=MqFHoIKb
zN$#?L#akQ3X}{a%wYWXrNJx~Q9&_5T$u;KTJBMFU)?FGM<}_PdU18revyBf=UGm$G
z`7+nAj0dUVbAjw4NsWV09SBtc=~xy)<fXD^GNj$r#|ocQd@3O&s^NI2(3(JSxd_Wk
z3m1Vvn!S>-P-COZZS=G>jj9U<D%%>yMM^kH1oi|uc+eO<FxwNE%fDetSuJz|+)q~f
znq81Pqi|+x!fU2C&TObK8bznCCO)g7<E+tjs#Va#M(BI~CW>8y5(ckh&H!0iEnIyA
z;Z^R0aKD6@m%Y;Cz$dk|{$-_R*{^%RDwLKO$gm`6cf*NBS&Vr5MBAdvsyv?HHS^Lx
znYXRXR8(`B5W4k>MN@|bjmG<gruzg_sP?pl;rm~e9=~jnwygO%d|l$wP2FXuzt+qi
zT6Ed2K(wKu+GhLP-(+Wf&4`Hh3X_4`X#LyH*FQ*Yi4xA2o9iqg^#%J~&x-vEV5n5P
zU_YDIruL|9vTr|GcP&@|OS2XG2Z|1<ZEfly!j}c_1dEl2k@DZU?CGAuclJE3O*qjz
z4F(^)N=ra#l@P|SR@8tRQy^JviFSfLMpR3=x>c^09qDb_^|O*a5Tr3COT)h-Y-49?
zyGc0*_1rP-qkW_MdtSfuu2jzv$!@e5#hUS~G=1(Pk9_Chhxxk94okga2s9m!I_)9S
z5({tEFClw8xV5_*;XXdeKZqe*8v0M@TBP7Z0`Y#CcY?~`@65hCd(6Bo{|!<XKhskA
z2YM%D3S<>Q^aBr2MPn#m@$^mSSLpOY=JPec^7zb+{wbSWdI%SSkWLujd`ID(vT4AQ
zTa$EHh?C$HL2eZ)w2~yxqx^Bkm5cDU<d%~*viEu;_kos<^pkmhm{Xww?}a5L<$9PM
z=GJ<-yyTV4Id}4JfjphspX7YxDb$tqjpDolM*8tbLfw23=UfCt21AZLWc8xc1w;3G
z9M}wfqEjif2gL=hA#ck|(q+JgNE`+kme6}JHtZQ$ejPwAhvQx&K1qaTLgX7XBxsqu
zG_2z>D94bjPPlpT*s+VTX<u*c-P$W0#4i2vV3ItiYDBlRXW~;&O_=c1Q`*b8zm;xl
zeS@jDxzXLX(2)$^TS-ZGiq}9^NMCad02020$APmYEa>i*1S}`~staj~n%;~S!fFoD
z0IgmQ$P7W4Dn`IA{Kw>CAFH$C%XlSD1gEx_#>Uou`+19RfogsJTTQ3MiWNa|78{Kw
zE35OBboo?E#Mk_+c=@ySzKF#yuJsx{+Pl^Yr^9OxwoMrsFJqyifFu<KwEnu$^Cw2^
zUWc>7!fHH<SB}*9jkX{E*e3gHp!6afgdh5xzSlAlH95t1W9Xg;lOi9t+HZ~XFUp7@
zY(epz`ui>TN|eb`<Z>sA?Y2}r>2?)aOi;-We$M4&UzJIFoS<!(w%BTC@i@LO3jMv;
z*+U?U9PTcx4M9W5&;-a^D?tpvQZa%NLDUu0??g_4Eigt@R>}ySW+{$lOe^t|;&O*y
zmb5=i*7`iExx#8??hzfH$*g*eJsi_My?zUOG80{xqA-KHjE5YR_@L9D(~gL0_R4ZR
zKCH3#k;?ILb^}|a?MweVsB=!D2Q%<dyE^f8Hh4c|*DeBq7A??pu$CgxFR&5lV?81s
zeN2(VOfFGF?!<5>7GY6u#LJCcG9PjgrcANR+B<HKCu*}oU`byaOt>tTvCPtLb=!*g
zHwfEJHmk{9T<m08zwCHz1sNdnPt@?wr_8gZoguFWo(^%!ja|S|yk}QMk(-}jr`T9=
zX_fG)O_P}^ACKwZ%piR^jAjaPRo1sJTjKz9%M@${+qR7L>Uy-7uqN+hDrr%ZFnr-&
zjjHb92$q1DG0Z((hddOIo=~G#h*zm>vZ;^fl~q`9ia?{L$(60yfF_5Q4$U78J(@Sb
zm592-wOV@bQq&|GT9B!N5zY>`NdB4*I5-Tzzq~?(hfzT05ELGy?^fX2Zk@GB>IX9N
z(j$|T`h?WHxi+9a2$0P}Gen^jY-h-Nf$|F50-S44UNfM{$#s+p;1!p8v%ut<d}ur9
z^+z*sYeQcDEIkC-QUL@c8Pi8RRtZ=VgxwSt3WfF17ooF_&6Z~B3+*Q7zw_Ee2P4y7
zT+t2yPEh|a>R&hpsox9hj|wK!n})W)z~leL7NB_OP2xJ~YRqp?SzJ3sVsiR6floX~
z^8`E&m&@S^u+JPqD^5#`fpAI#n#X}<3loNoH^jy5;Fql2(w6rch0<rU*=O+03L>L$
zIg)PjD0T<&8vQv#oQ;>R6t~lJH0rX3$mEagrl(+j=Lx#S?fexEdKoVd&(-6(b$WR@
zIdx$n1Ur?F0_iz{Y)~;RYM>#r0Bn`DHZX9`tzmrTy^GziEtmEV^ot?kqi3}reDLER
ze{l4-oR-MU58yv5w<IUI5bRI6dK)SY8LU5<1QC+P>IfkKm>p=~A@f8JlatBOIoUNO
z$!)kegOJRAn+!#6C!Hb`A~se3G+Fw+{BMFq2fqoHUE?U0f3*(F$-j+8Uy;bdDTeYP
z$k>w&LLi1n|E$9b!CDRmgcH#}j|TsR?B~(wYnlIFYv&$bMRA7l{q~&PP7-p%+zb$t
z5JC*$%$$3Sf!t0mC>Qa9H^3M$KnO@6ctL7g%0sD7Yn5Vay->7Dt))mQQj3-%wP<Ne
zkrq)(m0Fs%7Oho^RFb~4=M9FGr|lm-=h-u}vor60v*$NEvpci1##kIcwE5?{mSB!~
z%y?!>4JH9IL%WOk8U_3L4e6egKCkRg@uY9?^o_;4@D6$0t=S0c^QL4c$sr7yl|xAe
zp&Cf_o|Q7>fd*)mV!|+t)1SV<BZn}|cC07Wh{}ElKq{$kEF}8ICS@ZC`@tiPV$DTs
zrq#8?SY?^^F|jh&mN}Sx%%43Zm23GR^Bj3&GZI5eY9Q5Xq>wk$*2Xo5Gy9+E7qREV
z_;YgOdh1*Zk!_gmuy?rsBR3w+#J%k*C_Ak?GeyiOGa0Kr(j9wtxTq9WB`SZHxp7kC
z#^p2GS*~8wa=W@67wc2vl8efw`kKlwPK(3bteH9GzRN38t6GwWHHFe6vqGf_32E_Z
zqswbTQ8nuRlvKBA?rqsykhL2VUM3{OrHu+qT3DZuH>v4{*1C+ixP*kf1xq_iiYIim
zgbK3~Fo(jfOmvJJ&h}cUvS6<nEq%7eN0SNDQ<&D0Q}LT7{OQ<>p4Rtg<(u=~w^1}v
z@0g09FJ&txI<(ggR1ZML(am$twZqIojny@A8Kcoth*OSS5Q5%`F_&V<)r>O@?V}_W
z71OkekFQ_m+I|;i!IB*RnH$@Ox8twDL9{Pl^rCy#thDM6tx>QPpZz`E4-B~d)A}EZ
zJA$iR3+3Kv8^VWlal`xZuq}S4^&N~m;wYIU1E0rahna;EQE>%lRI$K_v;M{QT9X=C
zp)1cIZX*)B#$_Yc%{jd}=9+EPxDzhM09zQuWy0`0@>$*f_vjx6Hwg>&+5c*6IlJ!x
zdyHF(r3*{WpvBmkkHxqtbg{kvp-=oye3O1?IukZHpM&=`*l*&PJPd?kysDE9VR&02
zX4)FGZ6FR@$A&@c)*FatY*;oVz6a|A`VZ6Z9J5%w{yz5>gP60=HSpuDwCChyaK6m`
z2Co~x344~yfITgYH?V#q>^;KeQEVG}T(EAQM|A$fX>jpM%Yow|jqnS%nd9DyWq53T
zAdYh^Zi2=cgl7*~a-Fz)oVcdM;DcES+R?|2%1Fk*mv_!L7RCG?cDzni$3R2jCm-kj
z0anwUpmyBlJm+i1H(_ki``E+nXoKPUneo8$pby?9gEcYt$4z>yxnY^9DA6h6Y(w>6
z-r#x82Wil$k9GpSiO!b2=9G``VWuv}SQYc#YV}&ZGWkDzAIFQgitLs4YWr#XZCBLQ
z<+{hU$DQcb?lwGAbtLYFxaZ=R#D9=bn9!E+O5(`Gw!{~bf=R2AwkI9+lzA@mtn(a8
z_9m}QekCO_Wkzaw>de$FcoTcaux)8&X-}jbPtQ!hGX384r!vYjdNQ_WdNRYAD>8Rw
z<!3F;+CRJ;BW|lN*mS|ZY<G4rdv^Ag?7o~Ua-PVwb1QS_=dRD)lKW<EUtU>WN8Y-;
zJ$bL^oyZU7cjWKLKY8KI3%3>Mf^`MQMih)_7|}Um-H4qdj*qMy*)ww2sJ2lD3ZsQD
zT%<4RxoAhx#G>^@JBo)D7Zrz#?<n3~{AP(=;w_n3vcBZlX#eQhqj#1LFI`!Be9Y7_
zJI9<V^Or3ydwT4KvHQwP%UjD=UF^B|j*7&Jj*90h-WgXgZq2w4D$6S8R&K0(ZTztD
z(eW$CZykTiTjO2jJ)knxY_(bS>JmLuKd6uTihMP`4&Qcvu79?Flm9@VBJfC{H&_!~
z5j+yg4^0l;7djYD57&iPhxbN2k=DqX$iAwAs?MqhtBzi>;gTcOxz$svH&&mzRA2f|
zO;yc3H3uh@P3W5N)P&O$n<w5q@ugb3c4b{|-KM$|^||$R^*!|)>R)L{Z<yV%x#48v
zb&cDj@zJHxZPAlW!KR+3?M)|}vzvAE<mUO!tDE<=WVVD`X11(qd8*ZJt!%x*oV6v#
zdeY1$gO548i*qKQ==8{%uypGsCj^y@(-J@rk{c}zYd+Rue!+Qu1^qUj$a|cA7v@^t
zO269*TYdD$S+_}${&*`Wo9R!qvgK|1li)v1f3j6#r_-MTzn}gr_-D|Mw?)|lHoR<k
z?fYWkhh0{_y?goc<(0Q|-oChF-pz};x+`y9v=H|-7Fml?K9^YYtXnW0{8HR8_!bsz
zdC?y9!`Ftbg}6$;$?AeT3GsX2H}MzX*c4(+dndkygA}@*wK-O|H3y+R_-#kbCLD!p
zt*NNRTCmqC)?{ls;x$976Q#BjdR?%f8+{{l;4VXm*^5F-FTN4nce@IEzXs_pIj`2g
zD~%hX^}kwBI3(TGPCmL};Uec447O>ilM7?v;7~KI{!+}TY~uGIm$7Y?=mGV@`i02Z
z0%)2zbCExj_ck2yN{mo2OBj8*W(?B#?EUY#JpVs+{?O%?`Bvh1cj8}OjQ@Wgt?ovs
zv45cx<Np!o8sxYQ`8CJHP!>BTCbS)EQ?NG^YVuu(qZCA|*5~|sanwHHF?u%rbn8}7
zG7pR_fkr1vBHLuBE3_%FLq90rXyS<rB_h=th8ER&iIaFd6qksX$a^GNFtwi3_n0mj
zk||l%yD}WtblH-F8A<XaANR=$(5r7=-(84~;v(ElE5VGbrI>-MOvXw%dM+z4I^Eo8
z^I`@tjWM8pTn+{$Bw>k26=tZcM(3q@f_kFVN}be8119Q@N|Q88i?qrlxlArcJvBw9
z$~3t`rpuLb6}p<Qkr{HWTqoDd4RRxTAZE#Ixk=jOW;|{*N9M{c(joI?zATVVStwny
zNEXYjvP8ONsVtKo^v&KTx62)Jr>u~>WTkvc?v_u>XXLZ8N<Js6af5D+d|uYd7vvs1
zuJlFulH4m_miy#>StnnS_40sxRlX(<%Gc!~c~~BiM`eS2LpI7|^0<6co{%SH6K+4^
z-6rz1d`C9RcV&w_BU|NrvQ54(+vQo=AwQ7k<cG3To|hNoN3u(PEW71J*&{!Zm*l6i
zS6;>|5q~E8<md7W`6VvBekBLwRXHfXmfy%Bc})(>>+*&ik>AQu`JKEeZ^<$Fy}T`d
zkmK@4>6JgppXD#|j{H?l$h-2M{7v4MzheT359Or%Lr%#@a$5c=AIll(lYZN>F;A!M
zvfXwZ>iz^f(N4moiOF_~oob_d(N4EB?96!QRH<T)PFU78&+D!A8drP01Fqt_vmN0+
zuKVc*=mzPA=!WS==+?$u9gVqxsJn65l0~tVx(3JfsXE6EMC%<l=#A|>7>y+kd1GQB
zuOrgvjcteP7zfue4z6PqT*oN5j!|$Oqu@F^jb7zs60Wl!xYSY9QBEciPCZ3EMLk75
zMLkVDO+8ILO+8ILO+8ILO+8ILO+6p=eAM$%&qqBU^?cOxQO`#`AN73H^Ha}HJwNsQ
z)bmr%Pdz{N{M7SP&riJo^#arjP!G5I08yhiK)nF<0@MpoFF?Hj^@7w3QYT2AAa#P&
z2~sCWogj6B)Co~1M7u)N3sEmby%6<6)C*BBM7<F8!qf{>FHF5K^}^H(Q!h-tF!jRJ
z3sWyby$JOp)QeCrLcIv}BGik-^c1;Q<X(|`<&C9N<X@40MgA4}SL9!je?|Tk`B&s$
zk$*-075P`>Uy*-B{uTLG<X@40MgA4}SL9!je?|Tk`B&s$k$*-075P`>Uy*-B{uTLG
z<X@40MgA4}SL9!je?|Tk`B&s$k$*+*6}eaBUXgo6?iIOL<X(|`MeY^3SL9xidqwV5
zFvf!-|BC!8@~_ChBL9l~EAp?%zasyN{44UW$iE{0iu^0`ugJe5|BC!8@~_ChBL9l~
zEAp?%zasyN{44UW$iE{0iu^0`ugJe5|BC#p0q!HQa-<@$a)jE*InQX82hH-JSspaY
zgJyZqEDxIeYx1wjzb5~h{A=>B$-gH5n%rx0ugSY6=bD^ra*hFxF+0h*CfAx=YjUm0
zwI<h^Tx)Wz$+afenp|sgt;w|}*P2{wa*fI6V|I{h&GWh@-<o`D@~z3YCf}NTYx1qh
ow<h13d~5Qp$+wR29SujL@yk>+pp<cfwY8=JD_2f^5$)E00mV~C#{d8T

diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.woff b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.woff
index 9e612858f802245ddcbf59788a0db942224bab35..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 100644
GIT binary patch
literal 23320
zcmY&<V{j&2v~_ITn%EQDwryvUOl&(7+qP}nwr%T)@#Xz))vdaxYSlh#^~UKsfBJOq
zc9j<s0|Ey68QNGt$p6_qf&bzE&HwKZ6H}1|0s{8?QStu6AJzU_aS>6mA1(8T6a0V(
z7zzkXUYUXEN9+9I!ap!DFOd#1wlTB=0s{G=z_>rwLFyJd-Ppy62nY!Dzg$rNAC#b>
zW_IQ_KN{(eU)_(Nsd6JjiMgTUPb}E#|M~#|A(>mdoBe3JKtOVEKtTU^2nd*oEldqf
zfPj=PfBaZ}zy@NZ@n!KN0s$!#{qX<lkisy5AzIitx&3H7KQ+*PYCQJ!AxB%=8vppI
zDEw#@KWJr%QIoSVbo;5R`tcL@Upx^A7;x@iLmN{dAhn-dzyUw&^jfS*yRx%&bOHiW
z&;8*7KerOpCRS`|=V1C1tF`+RNB<vc?`hCnO^trmtc~=;A^w9#jneUt1^xlhByaxA
ze|82A<NkjvG`-upv4M$!!7iu~Gz5}?kpWo0w!kFF@oyj?_)=haAfW%Qn^~G<_V$kV
z_D>Et`TP45!w50c8!{TL10RAG)dniu*zrR^LTrn}O+tRb0xd~0E&>H($0brSGJ*iX
z8bUAs<d}-%mmV-c8osevmk6I%5UC7vh0-by)a@7&y&?k3<Z9wTgT)U|*lKsVAQ_rM
z+&xXPgm8?(&&*sD4SGrU6V}DU^V<FD+WbVgCL;-D+8{ONP3x|b(K?Z}FqQyDA8lEK
zfxcR(LOT*zcWBYweqCi%t<h2v=dH4k#a&-ac4;gT#=k%#pf1hx|HU#VgeV+oAC)04
z6<?!EWj}**203RT=#5@wm77PFeIX#u<?oLuhz~4>lphEzmTHiWB72`anLv4VuEY~_
za}WVZu^zT;R-~y&T~BYSiJ>00^O~gpl9q$zHI%Y>Lhsr-MaOrb%y%q|(42pX<4bce
z&%S(EIYGx}q8~@4pX*EKdS?h=SI&tEv`GGM8)AScL0;U}brn10v;~p2;1NOn2Um$W
z*U=i%VuwBRz@Z11qKr(qgO8vr*&X5{?12dd{6*l`Yp`?k3MDcih%qI+g!qV2n61L{
zS-80y9H-NmrN`sSUC*p$lut-w`?nyb*goYXni_zf3okCBA{zrCwXDq^$DQB5U?DQ*
z61o2X9r4;yA!5sN`)f6pe9e8pguH(cK5%0-vMf9<azURFgB@qsO9$RyPqj}Vz6C7p
z88I>zrWWth^A{_9wXmH0nW$}wo9hf@Mt&V*5m2_W0Zac{Bwl*3N0W}7D6V5mO|AbT
zMePe7b5d1qntWOB)2(kfH3+1h@`qd<P;-YPKtLo%n{Oc<r-es;GO8GaLQcSg;XK+L
z`zjQ8l|UKpl$7E=2x)>Cj$7%?Ws`6C=E;z?vBmFy(ZuU>?ZKAjdKnE_$3iyZHlp%_
z77-FteGS2x>7s==RC=EgNc20pi}B5ZYP?<*;Yn$7M)<7;<>9ljc|Q@}q1HAXA>?XX
z{-<=FYU*8Yx_bmPn*eq|(6}#S=KV{`|BZ*Xn#BSEOxT0n<2%3UJglM<ldqm)p{Gvk
zznudH0{;F6LUdd2>Vh`FJxT)N*_o6m(8iH0h%=F{CzZaZ8j3d^x{KT0bRC__^79ko
z=tr+cA_{hBgbop+gr}pTjdh4lR9OGJYID{f-h7TdFVsTYrJ)sVL)@`Nes|mRJSCBQ
z1vY;D{cTS=MK<Mm<GJ&`%?mft_#5sOZl&KYvbRt=XbdhHJlmT=n+fO3rgpNfb}W&D
z$GUgGv~Lt2mll;L8@0fQgkpGOlooKs|D9&V`DBLsjvB%!T0F|Im%_-jFit5WR(FD?
zq*|$&|H2%85^FR{eO*psA`Lu0CUbFjSWp%~dpsCGD^gTSTR7NCSqLNA&)akG3eyQy
z61~KRD9@D}JvRXa5Aikku9YS#v)0d;<>u(Wy%|e~Iy~QIi?KJEB~oXKHbERbMSWb}
zZ$4oLo6Q7!JY7E&nSn99sadal3PMV~{548>MpAHY2H1T`ZcmF;%7p*Gd@)Z2X$V%V
z$1bYU`a7{N-&8b(7EKxaD_#{2yNI&{t3rygLIQh8i%wdtQ^A4QWPw@AUkIZjStyRy
zt6gfVP}$xz$w}4TO!~910gWc?ujr|I`%rxo*~ZRJj0)|c2kf0tb<J$b#5f=4c81x(
zZ%7)E;8Mka7RH<jgof8lMaE&{G8Renh!ku+hV5hxuca?UHbk792|7)*r{|fpGvXD@
zr9iQI*zKu>H}jLi*?h7#a}r#3UcIh%=Rq+9Oy<}9gOY2vy$@K}ixTio-4X=M1@9qI
z^=K!qz=h?boc7!Dn&O<!kiOq#v5G#>o<J`XvhMyBD8Vy{aO<O>iZq*aBh4h7*kXhO
z>pcXk->0DSLp`H8gAy`9imj3RrTwYMLn%~ax2R;y6z$S#bv?dXh$n!f{I%|F6CUzH
zNglJr&iX(OdhO|M-zijiorLRikL!4b&v<-I;cb2U*9AhJqg6Km0|C@3UPi3VuIeHB
zE<VAre{dbMO!g>vJkk^d768V;-U<9n39<fS4Z!%OE6P*)w|cf~z&NJ9q>OEzwHebV
z^!;=ohVM{+SKmNmc(fHuOajOg)eZg4gP9Z?_0r_5C&wd<_hxoo_+<48kwZJ{Y3kdj
z-euRxbNtS4ORoUDw~*0{d?YbybVf*Z&j3f0Df|p6wtg}#){z60vHIVDYyvXYiqt<E
zv42ntRD|g6;QriC<grTFp5B)Lqd3|98*VJr$rST6j1b8XNyF5`p`cVWJdx#RkA#3e
zK~fI0Lv34q9~2^ftGRpUzt2|_Cshs_!#Ws{m%d-|Pq~eGfxM2-tNOYQxA)ybo&tPr
zy}D*~4m(FY$#qBh{JlV|hcVkn-@(3qcZ{-=R5EM+SZ&PVI;!a`!xqz&hp{B8=wre4
zg1>w5fLstI@;wPh+Bd5ldW?|#AJXDCfR%eUYew_;&(+g6-=ThC?S3>8w7??8cY@rx
zXANRWBOACbA6cC_l4+aF!&NSKMmj<F50TeM^11=0$IbOguWx+Ry>mK4PZoF7UG%C5
zf)X%cLC&;>^$NdUhi>}OaeOh-03Qt>c;rBMl8FXlh6u#+T;)aNQAM7iYm9MwQAwQ$
zauN?iXC->xfF|9A>Yn3rfOkVpm+8&z?LmtUcZTECdVP6@K8N`=NVn%wvgYT?wv(~@
zRQi1syDn_w+iAw6*B2j_C#*4Oa=3>>HsxLFzfc-lqHiBWPsG=v_Rqfna_4v6=XxDj
zbWvX=bCj4jf>-mGLa)^qT)yEMN*AOa6}Y=z5r^W#5+eB*=NMYFLlxp|l;Umkrykmm
z>1Pb@=d7ZMXh-p<@vNTD{%C%$y%YYN-VTD)5%>5QvQP<I{bfuNJ!2gb6l~c^l`rwM
zG@=4mWTj39^|f+JZJM_C@N;q3-yGkk&ndIcW8)lqt|q(bP^jigG875^*m;bm5S(E(
z$scq?l);fG6I8|J^XaOU*kozS)~ZEx6&%b`;&S$?N!6A6W0Yr^`&HBn^<lmo8Nv=o
zMJdt0^ta6G+d8Wp)b?~K^PkeL@`F0Q%ID#3aMVNUrKFwpt+ZEIc$W65Mfb)<JY5m5
z9hQ^`z!Rom0;pCOcWO9>lpLYJRS<O<9_~I0F{K1kixeF)9XlPIeCxgt2d7r`-nbZj
zV)f_UpvRSv<VKp8V;I}L7M8^*W*G-2O~g{`@yk|{KpW#s@*<feBo|;ie@Dy@h^~n9
zcXmk8`Eejsb(PD^B+KP{f!^mKl2*&37|ImXnfS?UQsmh2f$0zh3&po%?~Jsp0Vuc<
zY&a(MHfx!m`u|Nc67f<TbZ2r#v?aF1wZSg`kqVyQ73C}xE^A2@l}b#uo+74`a;y&e
zyp}n8Wa#y=YHEB-rd2RUD^qqLUP$wQU9V3RS`bj0(gNQ2T$&F6yqr<n_!(!|23*0G
z7g_zCF_U&x9^cc!B3idTC9Nw={eJO||Nee@i&YT}$l8sH{Mwl|zwkVqJFp>mulc?J
zubo~#6g|MIS#tM^y?0~C`jU2#a#T$VEGW;6HZHFWLEd6C6gfhTw6Hw56Q8*V+~VWN
z4AL!NdF6?QxaUpsR*ZThZ22BrG(+5-Ud8j`|8n^?HPZ7*MH$Y-GdTEy_<}Ip%UH`%
zC_ybkuvZT`(*5-7zTSgt1y-AX_=4Vq{_y1PK|t=n8Jsz8N`x^1R#L(Hf(SZ(R}et=
z20=K0`i!{GTB{~I3$HZ!fZ7PE0K3mgrlOj^=HLjmlzB{Q!INjU2`4JhvkVArhWI3g
z2BFDRMNusx)0QK>n-{_BPLkO*tH<t6Dz(DCVw{(pWg4$U6mjW^M?!b)K>?}~b^*t2
zL|B8@3a#it1GzFLG>-jntCpno1TF0OMs-3&ICPgAm$awK{?_0%(W?W=|3Ym<2B399
z6?sOv=odFeFq-4ZH~dK}*A#W0I_F%hOcy3B(B=(oS9N?rZK6R)u8SFgYl67%j$Vzn
zT2com)G;k5ej>5&f(ldAjf;DQ6!5hOSn{C{3@HGgJ<Y#}SD=GkOhxTYRR&WZgTQhx
zH_d=VT<?t*N+>fyHHbCwb;JWINl)t_@@KmMH+bk8Q`tU&fRBnQ(#)4NSadxDOZI(w
zdDV`IZHTev{l3e|YJOjG)!*{Qd3Bbc-oK>W2LbR{;`&r7v=uuYN}Q!j?bR6qQf6%Z
zD|U^HaP=Duw&<9^4wcHPM`Vo0d8#?cwduvt)W!CY2}SzBBsBVDmS^qNq)C$4z-w!v
zu|}GDNU(nCqGP?m2nGh>so7Y#2j<s;oMD)xzvzC@oAEg^IkE-H)aIAdPE&ddbR{Kv
zz?P4Ls9REPf?_nP3Y37utt$xkK1mOG%TcYwRL-8$gEJXuB&z{Uq<|?HBo6KK(Wj?J
zn7?lpO((?e@oqz1L?HE1V44tGAJ;Rlb*G73(-gvZ*QVV})sDeYktz#OLucHjCa`iz
zj#G{XAhW@jqDko)(_*u1&v1QghF|w-!*B71m}pm0C9o7Ths?<4GzUCzkEOtcFd(N)
zR-NK}WafFMD|Yn9UNLQQ#p?BeUtWHSIeazWv%Sn@qu9vfc(%jk;7a67g6}2v+3{N;
zI#9U6dr!|U1?vC3mcwzx51E-7&71_sTc6<u*&Iv5&S5s0A3kjCeY4qE&Z)P-9ToDY
z@_9tA!RpL?j<L!GKSn6V8){pIS^jF=rlmzMlWF_4kpk+RR|Z2(PK_Q-&yhW*(1AYr
zzDum*tfgB7Ha$=|AChj#IVVPj1`4-zEaYA&14_4~dhTC!T{*9<db#Fci>SAF;UD3l
zTWTJlAQB4XoWDz=q%Vn+jEY#AwT@9A52;uB*W>Xje?f=`^s2DJ+s}<wE);O8ttKAV
zVVdi0E%z=EH;#44EW3V7YGseH0SU3b=c!pSV1J2X(*4xe=knCMiuVMhF)aRUm66^B
z<_q!fn{|~)S7uEH;JoWOJ2Mrkpw6zyi(3XJqtBEoaErvHIYp}H*j`(3Nrw&~`l>6b
zZHctO--vJs(vA6u2D!C~MMV%ZF_OWKERqY*L7bn~pu>emnX~};w>xKsx+HmlModD*
zRe7jxvS`Tr6uHz_O`!|yld+VyK0FQd$icoJ&6I5J_C@tYl{!GM>wg8ezB^sMFG{SP
z+~tO=8DM|68>>8kL{vLa+9stZVE2&^q(j<a=P=MIUQl<~6qs3Whk!U)8BaM7o#vWf
zHIdjUw~C6@0W0r*n-~|yri;{}t?kwlaip!a)eiKO8x;G(J1BdM^qkFm{(cS&@ZJeE
zxe6sLm!E`;yNen|^?a%|FO&BQD;ZHCIurauQ%lG@$_T+Qi*}@{)lwgXX9S0l#4L=D
zD0l8gWM*QRXx!cyo`47GOFBNpDIXnyIo80RMDX+##KZlh_6}*oYs<#lM{_E`*&a|0
z9?IH-SaET>&WrimlxADG12>h3l$)M<qSLSC7+dyn!#^5>nnoG~F+Q9%u&_RYNWV-S
zu8Zij1T3udO7yF++y7qK8?@Qy;j&>d29gBr(=CZ4lKGZq^?3#ajS1CkdX7~BF>3+>
zYZVG#qpmz`T?l5}q@jYe4}&tAuC*{c-?JynbwY*R0wc+;hotR!1CBsHEV}H{pEV_Q
zQbs{v@#pEsI<-g|xh#rQJeXH}di`N|kNqjL$UE~3So5<F@?4q5Mb!nL7@lG`&~&MU
zulIpEtGc%l)tznBy7I1aI$su^HayiY>Z0bsl-UTxtBvq=J|gu+RP<bZ7mBGQ#%SN3
zgj~!&&tvvZGu|rTA0DRsV8TQU-kP&fwaU!0U7k$;vNuead<VU(pSX@nojEX>Erd8o
zq%Cu)1CPBz7A=EEzAUR|YC=IU9%hvt-M5s$vP}yYbrS8_xEfnDFCI~k&{z?<!G1!E
zK^iZQe+bHf`7!IHXQ83rJd#1}5)~%c_&+uxINN4BK3{JfWuezYs-XMRHwoBD>w$lx
zkHl$$>l6w9E<=%h&m}p0DcU+fGPM`d($iGo+S3fJhaypcIE2yU{5H<0HCgoFK{GLe
zCVD+P9e_etX_H9_t6xc?c?>7@pb;TOf<dm}8%_nHJ)`I(F}c!$ODTK9uZilbNw2u_
zeb8C*HyGMNBey@3QUre)`94+`W7q(zLbH@7+)X-{T$!=p$K>6%r&2oND`VL682Y@H
zo9cs|v@$?BZbm;;TeI&1a|hDjryghe`LAHHYtRh=V`G;8&hH=u_R(Y1pv%n=LH^3^
zFkvIs>V~3aP^2c9bjt$HI!&KIsHF;<6GGV<&cs3&h&!7&F_0TJrW*V^F`?h4z4b9P
z)shrVOIq;gnBtPE8xy|c?B+5Qhe9v=A{q0$_8i?gn>U-#3cMhdDV#r)gg$jBSHuwk
zk}gryawT5)H|i8gP1CW0tGr3sKVvSH=C;mKYmExi&<#lKQbxbVfh72pcQ7oRvXB%=
zj1OXzBoz0nqSwe)?dUE|N0dA`Jm0((=&k$p`<hR}4eiPswo$9aPyxLO4i~!g=mnTx
zE>L1c)=>Mo*a}LJx~+>;2tcjSh+G1pg5Y6PO}pj8+;D<i%(EpdjDHzVa5^P(H!aRN
zDG9aJ;;WOiOGzB8X)Nf8hRU|IOjcSDRn-2j)z^c-OzLsWd>LXc4La-kzxi{dPSiJ7
z8<GOI{i~RF1BpdCtTs;#S~FBa!Y7@=1{d(WZMJIG^D(UJx_Z+Vv+cN7VVIAJM38F`
z&w!hdCl8g+wz9NpnB>JC>pyci_t`xsI3_*zD$W!<hdW6$Q9Ua-zyo25I&FrlHu{|_
zYp#0clvH2Ks-Oy?Lx!n}E7joN)Q~0cD}!}Wrbv<rv_aX<y%W!&1%8=}Vw|(??+{!<
zGGpBE^MdtcpA><jqcoA=99>*$<4tXVP|Lyd;LAI{(?h2Cw%dD@_;lH-jHe9S+i*4E
z4mm+=yxP3;fjmRcM+tj5WK$Q-9_(!w&4?Zu{~+v=o|o<F@{wDx{!G^tmVmkOV5uOB
zh$QgAFD4CeDn>`vvKeY_m&uw>iUOhrn)3ws&_6vxHpM+hCYx}osCc0Y-Tyq0z<hZX
zfpCQ-{8OvGpZwcW^f)}Lo+>_HH?lw9s=QM+-Q{gQx~FocK9j!8!mtbNX&zBR0Xt$l
zvErya$XNJ@m2B@ie45(Z(19?S0|j@Eej=zw0gE??YVlwp4LSl7VHUHoo|LraFf00W
znbw<}e@I<Hbw;);W7UCbDgM&wIGk*$E`08I8>Uzes(fu}n<{VdSNo|T`)7axnJ2E3
zGN-K>ywjN_qvqSYS+3(Tift}Ac+Th~V)w~#F13j;D~$iUE^?zyrm7R;K!FVAfwf4+
zgEe5#q65&2_@2P9Xi0@IzKK<kAr!<DPjQ=xFOaLN-rrtR7gc3RK{~fhjwdfH&csKj
zaZe1M4|b616oGh|PlK!ylqSbV+%BkUfh6LMQBPDHedW1RPRNBs6bBoa-b;N6+{mbS
z!$ND!ZmgFWmo}hTfxvinE|g{AU`~8Q0za+=Z8c0n=;zija<Evjk@?80M4rrT#ZQRO
zrBy?VgD@Zjk%XQb5U2>B$Mr=t77zjDw^ry*`L~i%3hjv^6l}?gMTjnmHPNyRD!RE?
zVzeC>gkFuW>V5P|ms&5GT4O@NM-mhCx+a!f0)LQsDAs{!i(cE9Ov8j9Ot~S$SX^Tu
zbvv@~cen9fE3YI>r2~|YyQVnWpZ-X~m^M6OE$L`m&MG`G=33X8DprYlBgvrAjN>#)
zf7F5}TO}Od#i%Pvr08HxB1L|F7Lms;vt;^z`LYoE^HAlcM$*80N!_Nc@Z0C)>z37!
zB*8pC&7s#0b$L(fb6zzb_{hxyz+_iYonkQLn|M^r48oOlXXt>e7{zFo03wLhcxL@>
zruxmZD;ZM5U?3RR7ni`br#{#)H87#K@FBbE7!;=-Y}c+8!h3d5JExlz2JatQJ+?rH
zEiUGqC0jaoW>(Evnh`H^?>C|E?;wdM>7y!8D4dVkC<+|T0zP?LNZT4#$T22k5m50<
zzoALNpZ84Yo=WEiK^k;g##y>nq*73%RqJFJOX%P{Sin)USV69lwgt`-QDJjC{IgNf
zBW4`*siNB=F5h|FpHc}mY9&H}jGvvlX!|~~dIc_J`?;(WsSic(jU>39iqS|Q7u!DA
zY&kA%G@cdsQv^FWgQ+Nx#A;({7tI>&nigS1N0T`xz+mg6@_{zT%;E%P(``j&bsETN
zs(q(bWF8KI1M_eY6S%3}4I-pbgJgDL2EYIzP<M(+c_8ONwVQS94>p(Kd(4_CqWI0N
zt8t_kb+H2&h#4kT$#q>Ac%Z2bj@0N+O;y@sWv$8hU9Zv@p#uT7sP~{kG6820-K~jc
zzx+zAW+=CEi%kufkYzrAXi1hFg5D^8VfWJSQx~1y>x~0bBV$33&FY`a087m+i@@r#
zv~L(PphOgimWm81wL^lXk96(eK$#U=hQ}pu<-Srb@X)RzEK4@vVL9cwNBv&D7`P0@
zqV@&7+T19`yV}oc>o1R%dLPHOtgykfkQ$mBKeZU*==5=O;{`t7RV`&nOFus5HWa@{
zXbhx+TZxRv=(Ko|DZe>7Tjhggvxn2ed0umrYSl8cq1^h1GLxv~Ovi$ld?|yHWQbL0
z!Ivh5s&TPz0K^%VfE05%mJqQKs?A%Hu%Xt@^>Aoa$L6|fp<>G;+%>slePPEnR_yRL
zj;yc0lCyoP$Ic|g#bX(o<$00nsg*!S33aGHMx(FL1IZKmm2(3;)8v<UYB+5=P6wsg
zSniF&#fPt2L{XsG-fQTT_#$ivPp_t^(ahKd(Rh(8Ou|TmUnGJfHU<g0KoA^t>{BEh
zq+0};_3dYnO)g&8rn2p~Esgh&5iy4}Tc`s#l(NQVP*B`-s(Tsgb%=E*x!`vNJk-`k
z+fm(7Qcae_0=zlj<0~2F)s}a7tknTT`cdo_)g;9@CX6}Sx(tZ<L{_8e_IXE&8e26V
z;CLS(t^T)iM*3Q*+_UBMm!L%|#-JZ)!8T?7qZ1fd)9%>-vBXh9eV`-C^l3uT_&kk_
zy!QGr?i9qmGaJ`03`VTK^)eYd43pD#6!NwJr0B=zjQz5pDVIxqPspfGxc527cKuN}
zM+02tzw?((Ojfsh0mh)!EsE8yz$@B*zv5LC{@~DSWie_CKtd_%3$Mw8a()p(IDD|g
zE`aGjSXm`BggX|S0Iz8=DQwWq7Y>nH=l2gF6&gHY9=4{U@)*&>a5Lg$i6r`O!H}dD
zW;VLr?c@ISTZz-X^w-r)NsJz*7Ik*4Ly0i!Bq{Zd;rF?m8fkO1OM@>WW%j&Gv#v`$
zQmZ$kLeIBScr38Jb@l%c_PQ|;xB~H7qh?jaoofQxl!Mou$divTfpW_5t{jt5n6rPK
z!vRqg8v?Nc`M^e6lM(@2!!NA&BnKun1vVjc1z9YJv06oEUF=G;UtEZ%aSas1z8-O2
z9BC#xzszD?1bF!myHOXw5=A=9o9-@Lhm!h0YZ-|@A8@Y(+_Z-DK5aN{$p1>cump2t
zD5Y<$oDGvcGH&@I&=`_@&z9%lM_#_W8iyXJa<&`Ydn;~#brX*PwN-j%3h<fB>f05d
z4E%>Bj9t_c-iGDTJ%p5oMe%gVzvc6bd`PTb9cQF~$q=bA787VjPi04Chi`i>W<+{G
zV&FRA7KPur^W&w!IseMOaI{i>RU}bnWQwl$BQA-{N7}-t4=-KVk!vbXQ}zLtKK~Vb
zh}Ni+HS~8TjiAhC5SP%}5)++t1N`_`^O*%;^P^`Rj#KY=<U1<4iRfgcC$Gn}AMb1M
zN?s6PT##cH6iIlsJTd~6{wMa#z>G1%z*MAySF&MiUH~wJ&BDU^kXcQH6%9!xbzqRA
z*C;FT!ttCmLLmGAVU95En90d_(qX5~%fa`pstx}K4cq`D|L4WUM|^?pXIDSM7j{_`
z3G3~Fb+5YFcta__mAzP+vqYM1(W%@8)d!*dz-)tf@tMWp!rn*|T0x9DwQmg`{~HF^
z(&{06L_~x$VO)QgY!}xSiz9L|mX<F;xlthCD7a~1a@Gs3cyPn{grQxByg1GOXdc~g
zC&tNHba*q4{u+aEh4(Vc$rrXWAwRiwf_2gno6<9!ufwpdCfLD}U<ho-u{69IiT5KA
z8$Az5fb@wbUgN&CY#$^xNtXax7fm*Q|0*Y)gFOLDY4DfWRy#SN)58U?zu(EJo@?!k
z`g~m&={E0ikHy-t=>(gredtzS?t3cy_RjmTIU(u5dB$Pw+b^CLxKo!Kal-ql57<b|
z#z$iOz*q>+p#JJ3zg*_!Lh#CTQlhLZaSdUpir$y9?7cH^D{5SFz4E4#R}~cZf9Y7m
zo;9Cm&MV)C>%p+!bv-*M+$WJVT;|<w-@zHzJ>RqRPchoQ_7BbK-|yWM-<~FecpFY<
z*+V%yqBEN@TuW|VvPKxu;wzn6PE#vLx(^m2Npl0_=R`(f{eE#>@hhO=C}MNbxWW_v
z>i*?56p5poIt)%$`T(F>Fbvwm_u72fIj{*&-QjYl(EG&}&x2XCp-|gm&6LNw(*^~r
z(;e^7)q{$HCsydP(lnZ{CMFoZw`Di*O0teoyeuOUSTp1qVs*`Z9<21;EeAe2nsvN~
zRC6*s$3cgHx807}TdF!K-J0iGN^SO{w>QZ;&Y$k3Kg?6j$YHFGxQg*a{%}-aq4xqy
z&jBywOH07(H!X%N)*9k*pouLg-u)|*fP*&bSExgq7b56vts%pZKc$!0Wz)kTr{n^c
zH0~1dFP!u<3h8{HY$Lt50id%$jqN@8k8{VALlSz2UVh`a-#R#>zHXSNNR|{7e9pN>
z7TX5KSq#wFmVO-1xo)>HN)vR#Rlnv;&}%R75X^KT9xE{?m|>iz_BH-9O;l0+ZPl<=
zgateSH#Dy&8cL!Z-sT5hq(D<^FoqY@mUzl=C-x$<T+(cfwtvuiXjK|(NH0Xn9A|_8
zN@Q$ctLyk|VnTqJ<NKw#hx8ix=C`ZQ=y`SN17CnncVUIa8w(jE!LoMo8}(k9DHQHI
z-g&fb4KwDTDdi1#zx9j#%q^`6*=ori8}VKF8$0S2b`R=}fw6)b=D-v}<oUJtcxAX^
z5yb{cj{=L1IfI0%x5~<*u#%4nyRE74AKhkNb*K1%B>j>?y7nvAexvXwZ#MsHgqBZp
zatbN4V_H3K-L2vU@+EGATIm6Ap`GU7lnAV|6g`8C(61y*zDel%2}VNAy1~`blPHN=
zu~bPszDZI<LbFNp<XK!85Ox6XIee9uyf^$d&821GmFd;!#5u!KAcJ}-GvLVn{Rtzt
z4zjdT6ugS_{As}g_ErL5f<PA_xGS&hN1g8BpwToJRatyg9x>*Nw<W)=hPmW`YgJD`
z=B+8j-?sG+Thqq_vo3^H8CG)Xn#qUaQ;fyaV0>!P&qvtzvpA@&tGdJu;DIn1jLdX;
z)t`xZwPI`TdB?s+nt}J71mU}hawwEbPnX$OL8-5nO5zHu%kT?MIW=*XjkB-H;p1>i
zcVuPz(G&BP?D09Rzm-PH5sJ;n5|jQEen*(AWy!9%8%FrobT2yz?d&1r2KSS&4>U<6
zI`!cdm9dC1Hqn|R>+xX&B?|~3hd5zh)13!mfVsLczdYF0Z^iL|oZ=M%0c8`h0j{;h
z%1hkP*~06j7+rI@eA;#HV5_3yPVSKp^*V2eP_Sfgqg3u-*%?R0LP3RyTYh<}z$74T
zm;u}KQ$iP(LarIp;*m~l_iNZU>-f~@+~!>SGMv8xF)qs2Y$b}ymmJp+*51+kk=cjL
zmrRQpnwbhoGj^9~t(5N((?x;Acs$~9zAnWpC^CsfbL2PPH_JB*;3Rr>5>gypdKu}@
z_u^!zU-oM)A~Rv>w@^Qe=A>t8Iv^I5(_hL|C*0994Dztje1-tP3-Ei}#z%jPDdt{8
zyj~NQD-NaTJp#iw;$eW^b71W?UD@s5BzgyHwZ@1vXRIB(t^Jc6R_Dv)Hs|F8qoLtu
zkC$6KPc3aY4^Z{pf-Y8+AhHwBfE}WYF<334Vo!l}AXb%trV`AC8!T6My>xRvk#pm3
zHHM+JX=1+RLngN;k-3IQ<#A5MJ7DB2=>^LqD<l_g_~$luZN9^63q#scdK0@f)9IOw
zA&(zw%*8yaBSL&uLmjAs8KwkiSI6xl=341jC97;R1@1QVV~D(vZNyy8Xl&h?Y?;E!
z9Z1Dl3|0IWE(K{uonkZ1LcQK)G$v8J8#|F7>b1%kc#Q5A6%d%>IN;UIK4n-`2>D{q
z6jHM}#0~z-%3!K9@Y#+aN0N<0nV7!}Yjdma*li{=yZCa<F`-5NNS&=0#|ERXw{Gy_
zeoZGR<(IJJ^nA8%&J>;H1McT5{GWCXe?F`+{8IZy5lj<y+5J1!-z#B+u2;#MN>QQS
zrTFrqEl5LQ6y%wNh;`4Sr5J9RFfaH9Na!?n-M<k|Af+EbiZ7QA?2xsPhD^qz1z5x*
zO2?bs*rPyYgwJ%?SXv5v2bAex_t4(hJro?l(T((Jv!`eG90#&V04Z296VLz}5!%p=
z^(GEIK6V+H*Gx1sQ-NMVFsf|%1QmoudyaMWuoK5xSjasUxi`JT<{9<3W^0G<T}b~E
z`7*D)r(1~cq6nI2K(`WfW=CoL3(B|r*xoq&GdK<UP58`oRb~tO+q|^w^G@xp(RYjw
z%T+~^DCV2*3+QV;IC_*m?!z(30jGX;JG913#sV23j!!DHsAG3$-@h??7KUB0F?)DT
zL<*@-Ew>FD%$2Vk4(|tbc=g}P52_RgNSWcn3t)I333gCka0q_DoXC$EE|u?la)3Hi
z^Oqsl%8F|h!W<CC1cZi|dVYNdge6i>fxtA3&}E0KOg)%}(*;8p7JP~oIr7x~qr5ZS
zt}-eG#D;|kb-q_a=YwMke!SFlTUXIIIyhgBr@r1$`M=v573zGUZ&Z;ovB#T+9BM0n
zr7D53GV;cMPnitw@6~l#XLgD-r1|n4y?bO!UcEc(qc7(MCKr0=6j!>Gfu7UOSM}Wr
zrxrvQMB^yRGbu2{3OLrjP=6`>V`nK;{YAu2$`B8FPF$7gZq2ZawtwRV0kK!LeuHJz
zBRuR2nG8L&T7&sF(BmF^9-`K%l-a6BxnQhEsSCcMv@ca`7C+N|8~^)`NY6R>9&v-F
zrSt9am3)7()<FA2XNl4(@>aGkIp=6JF|$3I0`=vgS2}W>J>gIe0La)`lZ<Dt$gm|Z
zcmtk}6gR;1VHh5K&H9jg^Mu1{S46hfy;3(K4aO|1iR)rdSd;@aWuSB9|J|<c9zMPs
zQQ}@)X*RZjpDOe6J72Ol<6K(TDwoQ9YY<M;G6T1Cf=OeoVA$=yl*-788E&GT<ruYO
zrdKCMK3(HqvlZkq4EVz}e4!vKUZ*=zxyU!Vj_tL%aT4{w?AG%<67P#6akCSh6N>1P
z{l;udc}QmIM(7D`(wZl?Lb}i=W9(rVd}caMm3YX@2^XEe7&6ov>SA_Ul!YAv^tDYe
z*R}KK;n3W|(DgTksHFp3@6t-fBvNI)YrjgMY^JK*K9SzP<OUBT4KSew8yLe$5W*qA
zp;CX{?+b-;vd0|07I6=L94UCseOgaTWXHY;oyh|qfO@U_$}@a42Kz*l1%^?a25)hR
z(!!u($BZqmb4dbO!itc^ir)ZkvFR6f%i`1~9mCrC3g8!^_anuZrWSW1{>;OKf3rVT
zZIRx%tWtOEFkX+LaNh*i3kxphn^$o6AR{?)Vf=48wJF#hmJAL{4=%^PHvR5{s~IP{
zw@K5SuH&}_b<P?45;M%vM|WKItmW$i*#LIx;T|TI!fog9o9dfmNLwz?_uk!f9oJU=
zkASy<oJ+j~W?bIs{-`I_U!DofGwqhn%T{bbAZ;{ST6%B9(`nM!xcs5th-Scc*oqiR
z(dpW%$L&&qjA#+NtQ?rD=3<1hUG|=)8qnT2wT2+I0raTkVTk&t#>#waDN@Dr*1#;8
zj3>L`zy2mj!ymgpko;mUZsF9%+di@q6&^JI&CNM|2-W!Zeqx=@JCWw~Na&^Xr+cBx
zD~Z_rhQn8JeQezgl~_%EHY<}DHhMelQ2W>38M}*g^5Ct4+hNyYc-PQrKYdKg5LHHH
z5W7c4sF^;~J5~Mpel;s1wg&NA+sZYw=yb=+oocgx@pdsA=k7k;S&^0Ye2PKV+jA=J
z%kv8!s;L>%L)sb~z5JD`X-KkMJ5d1~ffCHpybzHPuu8Wkh9i;1AKMAU1s;ZClWgMl
z9P`0tCm%NxKJ+&MOk+0dFd)syx<+DEDBOC1G?twC@TmJP@Pf+(*wj=;G#0iQZJ(iJ
zhG-xA3G|5*R@}e@#7hh_*PQ0J_Ka#hcc~Q+8mb_($57A2Z^ikOt#!vf@PA|k3?1E5
z^UZ$&A+KqZAMh0`O@?fzgWeM%dCVoQ%|~*CFOh+?GLu=z8cs0Doi&=R*WpzS47aux
zHba&$jRt-gFb4(L@D#uGjmM|c$++VCtQCqFUas=KKW6lql}beIi}Ay+xI^LtKc@0l
zdkQ#o-z()ZN*r?{x*<<JW4l}CpTW9Q_N*te=v;@R3~~W9{yt=@HH}X+|9pnlXLxLz
z)^z<1tVpW9e>KqloOm<s7_-#Oz@ZD~a284&Nu$B&TjMIZ{LN9)-+<N8;u)c65uo%b
zUIOy^2D{EDp2^ktTwcMcCa!aMb5@-&$^M8T%-C^BXwR=?{gZt#86BQpyv$g5GEk7n
z^ti?x8Kb-AY2T+m+kB|Wy0%u{Ip5gx`9O)vPjjB4$p|ox*}0N2OJM$NSj8>bT5w&V
zwbjn3a$Q(Enfrp$2j4p_eha~MoJ&}&iUWxSZ!8q_P97wWkI`RGWaL1RonK|Uak^P;
z{w86F#atZuy~}Jq{ejU<W@f?ZQ9AnNRoM|10M`+?c;7@y?Yd#8W_(ZS;3zI8sla(L
z5Y1sqI2Hf+I+b-4RHIg)bq*%?OlHs?+HaANHc)#etx)3C-BRPX4S5~|gZhYGh(ZFu
zHj&U_G|CAMuwW#Q;G<Y;^tte;A3J-9I0qfdJ(*;megylO=I3B-bnzlErBveR_4sIb
zYki7~$Fyu&wS3BcZdi6}>dkdpr)fS;-)D&h^{m;kRv&q0P&gY>_Wn_t;WSnIeQ`eb
z%#)mE*~XX(4i>^EwvF2`&wtc>49nS`qmL5rVz_@uPo?s)>dW#p*sb5eNQ$qmB5fE7
zIKEk*|9H&Y!}-D<?r#-H;rn-P>4T&BI9rH|YQxZHIugY!WQFWiyQn?n9k3;PL8)U<
z#A$~V3iae6z(8e(o%*Jz6x-yjLA3G>j@cDD{8TQFa@~$UQzl;@bJcoH%=3~W6|DQs
z<e{K1lyude^*(aF;ojwvJEwmPp{rB@?BY+HmT_vDjz#dxh$p$yG$M+(=&LYn?J*Up
z_-N)AJ0hc2Hah+{n4KeggFlt{?eo-9eOmIL)Za1k<3<QF;s{f3a=BvZZ%PTPXrQ?E
zcGdA2vv7vk(gf1jyABAdI<Y)|>(HWs+Dv4k7d(U{^^k~iOA&FEyEHm?ov{QGSJr>~
zNBu!tDZKyZ{}g5cj*I*BSypu7bHuIB>1sJ{JNP717@@1r>7Y4r23)bUfoFRm^)9*)
zCp9u|gQ?d{lA>+D7QCSr-=sytp!RCmlefdPbI3o?<*$WGQBXkp!Cmif{c*L*AGg&b
z?7DWdx+ZbqK6&wh=w7UbYfJvH%6U0zyA-;}t7CBq?(%dq3th6bFl7)PLYI4xVL;II
zyHxo?4$HrM`P6?8Tvl|24X-t54n_i-h0-n0Sl27fDZZL8HpAEcQr6*yVHCb~N7E27
zmK=cCh>pD6WTW;ikgkvgiM7ROCf}QC3cT(BH$oGu-0t^8PgZ6MX?z=8Lz0ne4T4^V
z-thAcyiPMh&#zu3J_ES$FBkO~$SuMt-s!u@48@57H?*$e8Pwbi2Yrp3CQGtR8@!yj
zUk8<?1<K6e*y=Nk6->vkyy#dDr0sf^D6wod7j5Ylf6w`wCmvcUyN^|w?dyUD_KL31
zE~V1>J!2e)z`E#xwN&7d0=DYa2DB6pQ4$wj;@8aSM@4AZA{vjr3qxAHqrY=7T1`94
z_r7;6x{PXo9hdnJ!N8{tBM9uaKE8=KN-T_n=P(rOra}Vi)`j2v%gIZ{7+g3|lAtj*
zB}}a4stt3~a*NENyqPR5c(%njgkzR6v4J&RA53RN_zXRj1VRWa@ng<k!Qa@m6fFa`
zYzyZkjpB6J>nMMCvLZvQ@+s}}=U?P|DLxeem<(Nuv7p63NlkA7!CE10D3wO$!ANw9
zObXX`YL=R6%2TeGd1?xrLK$VEwP`qN7HPlo`MM}dK3I_H9Mzu;W}$)%JINEGUpF90
z<gvB7E(zrOZxcP#6{UX~`yp&i;NQ9R%e4utineLnt8bPaovVl{U<?4W^;QtD0q6x4
zi@>#}mTOLB17SWhL}ZMRGTaFgmU`2O4g(>;@kprlF*Cp)kpy38(i>~14$R3s?6^?3
z(HgVQFov4jM7QWqadph`*vm$aIIXJNNcy|m2$G|ntBgb!GwWC48iMztD|o=(>;15q
z{$%3Oyvm9@O`4JoB64cJ6IF%XU*;BiuoJW(Z#j^UH$l#9HR{Mm7GhSUp-f9TbS(>+
z=TBhELjbeJW#KE%-tr3Zh`nd{*Z|1O0F`(MTCf5%G2HfRAaIr0SmvO)Tb5xAR`)IS
zDJQ*_aT_PknaBS3@{3I7may&O+zm8(y_ea0+%G2M5N-*A7TFy3Ev_pPhhj93^hy2p
zsf~STscg0VHv6)-suJJ_HvfhYQrC_Zn#OPKnOTJx<X2^otW&`+!NnGf3aSt3yp|54
z+yQPf*!ss2Q(Kpt?XAz_dj6}O?~?T=!sj^5(-A(8x4!Bf+V_L6PhXv<jB3ax*7njB
z(ZN)fN?(@hO&2KRV~x^%E70YK<#LQLS3d(0I9eOJyQ1uyeG@@(Wb^n;QV}xx?EYO-
zdy9$(39dUI3(6v&26xINoAl#VyOx&L3aF5W2yuk1Xqz-X9i2;xi(gqo)d?+79qn>|
zt$bef1E2v24uA^CoX;uvbNr#<^;$Bn%#1V#=IB2G9-e7<Y@mLs%DwUC)-Hx+BO`{b
zhM$L)vLPrd>lqg49ji0~i?uStqONO;%fa+^ReCL3RZjio@nXo^g1nNPbwp1HNQV$>
z1@gTfZyF)87$l6~%5yxJnEQ+ie9+G%;f-}&?6HbOe(kPIzzE$iqX`vfok4&ai`W-d
zwC99WD{QBt=6MXVD;D962#XX?i!3ihIshIg{q>fXgAMys=@kLkS%9d+mfwd@#_C~~
zWK@5#ngAyP8WOs%@7M-tVjQG={`OIT#6O?~USMV}Aqz>h#^!wFb!x$Ak5eY`gw_Il
z+T)(XzI$10nIxlz0YQ2v4bhDugbSQ_y@s>>rHp1+Svi2@-tSsqlpIzzPTyUJ4&6Wg
z8t%*#w>(z0UiMXQELXctsZ9~k5wCOwHVp$8E;=11PHAtA3;??YDwCu|jO0#YA&u$Y
zH5r8Whl=eb)AhDqcB?eTs5~8M?tF{1{8~NvkvAAqv1XpE@W8WAi4NlSL<2eyn*gM<
z`9H|9_I|T^m{J0!3b3`LzciFAtd2LRu7s*s_Jsb0!7S+S7aJc*lt;`*gA-fKO8ArY
zhA?VR7)jaRX;6nU@n|8Tf?%{mBM3tZ{xr8|dm^KZpSP}F*K>^y1+c#*N_x*PnQV4j
zHXXs6C)_oV)=7T8wRg}#7y$*Oxzi|WxACj3t`$g+Hqob;^h}z0MYNO*)*)W%TP2K^
z8+E9AzoFgl+*G|4FIloWVp$TG!&6mGHAR&+;NTh5J^p6y6{5nltCkJrWQ|oU6qW*h
zPfOY$qZTp;a(A%n4fddVdJyiB=7!MR^#1%L6Aw9d{;jcxYG!qJqe2pMrVyVhg_AWH
zCaVB55F%KKa5^A)lmMTPG=x(hh32&U*SA$xDMyd3{ZPxizi!QSz5K)*82;WGBaTay
zHDeWU8ME{rnLTO@q8U-xW(Oe4ST5z)w)yoW?X}$W+<N7V69>~i-yIXAq7T_olt03#
zG2Gu}eml^<1&ha=qIj=`nCg>Wm_0+Cwd6oS*LRkQkSgAw;gvpLKW`3noP`D1=r5(`
zPz>bAt@<5_%*bgTP#IghY!XJ=NFJ98zDt@(K^*}B$ts!PZjYpvq%tq5kYKLcJ@r)h
zpjGeWgspjG<GafDL_GP^8o5K}%PZ<VzL7lT5HNT1e$4Cl)*p6*!d+KArn*qU&~5?<
z=13dW+N(1QRo+4<sP69GTD|<}p1FF83s<#E<LG!Ncw!3Yh<M|eOrXGqtYl$!`uRHo
zz|PwfS$tzTC9KQlG}_)o;2jyN7L+2h{pBIsO2B3y2#z@^!j#!`va-UfgP7FS5lX6|
zkTc4APIj4o;nQ_e$$Q@60kkMgThl2KUwA;KtM83s;LumjuG=zc0Q1I@+Gq_Ckvy(&
zZ*)V(e(an?7r9!aT2>$}U5I3;E(wFu-T*ttBj99nkVSJy04B*>3M>M=4CJBW{W+wr
zmo8Lbm?dVE#ijL><;n9dCt|#Od|9HFF4#}Y<2rV})IKejs~q4`MWlQNc41Kjp$r;F
zAUY8dDHmc{hLF%=Kik+j1W{WEZP4aaE0T_9G2k3)50J+n4@!F~;6Mm#3~zA2!(uNW
zD?3~9!k5Ez<bEJKo|shg=HV_MzmL2RhEsG=wqr%^(7TYkCpz}~z1~}mY0ilUA<weS
z)oL-t+Op{}(shbk+iI?PS$EjzuRODJ-<wi~q__QZ411Qnz|CwinBwX@hTW%a2)?WC
zIbFu*zA5@EHzSgLi{%}#LSZt;N*lTsfT(My2Pv30h+)9h?|TVl4Q7f|Q08qJuo2uX
zl$ta^3L?dsNd@N^YyvEN6wH!xF1;5SN~1iS2ue=X9E!fnhmiRJu8*<Z$wxJX?vPlx
zqO@;G`k7HShV_drXXjA=3ilc@ZC*#bB@T<vQI!MZ1kbX=INO5Yk7P$ZeKyvH`!X8T
zI6=(PDN{2mwv7!!Xy^%QXCKLnw^$0*e)3fE(~C^T65d&ZX7Hp`$;j0u970B>u$*P;
z0Z-5cF&^e2ZT=G7;H2(U6=DL_gI^{}SNj?dg8|^Sxt0p`cq^jwVM;7!Xjm8d4}Ns&
zKcd#kpeC&YrVPU?^63<(P>{Ui+6jp;gFDhm^1pecu3C8b+kR_Tdy{IMWKB?1fmzJA
zRrWbi2iAWJf`OWX5*Mgp>n7+MnqV+8M&DPEmPa?H%ZJ7^zBIqoh9?*U3kCchz3T<(
z{o=DphBZPs)&O&+xL<}PTrSUw@BBJF-j`J7B@go*T)LO-j{0ZZpPSq}+fSEg4@}1L
zZ8|B8jgb2gyHh2Popw{~EdhN#pk1m(0#ygca8F4f!i2@Brzr~+t!U)sEME!yD(7c}
zH<p^y$`^Do%eXFLgQ>IM`C5Sn4OHuPfASSw^KEK{5G&ZKT-udhQ|yIrv`02n2nEE6
zJaaj=cYtkxDp%*vn;v7!mw#(ERHUI8&%?XwWWwd<KpDk(zORy8V*vJGdJ4n9x6cKw
zfd*LCF)T_bQsEZ^g)LOAC_~c&_(PViw7@Nx3OEp{ey=;vVhe)=`~fkT72CG2q9Dcy
z8L~9Qav?TpXuW14gRE?o5^+S7io#dEAR}0`65pC{WVViSDYVM%n&<QLfgr;B6o)rv
zTIb6}hLPs7#OGq}s~%}B#cV9lGRx);Rdk6gx7t&ilp$ilgyv0LB@Cu9KvHdOt8WNU
zRKE)Jmffi^kZ1~E;OK3djWI^Fpjc~Zw8H9AKhg7Hm~#E+7sc04Yv@z#YVE2vr`%0h
z0#-i0Nt+D*ywDBSwdR0Zq`4t^JgxPfRRm83TuXWye4%JX;j%9Ar})cG729R5bu8e#
zyFXy9Sgt5k3m1GHQhvrqBSebv3B8uXLOW`nQDR5wndp=soDn~pnVZ*3Y=R5Minq-=
ze;L<YU;KHO@o%%GB!`p^tto`v-d)0h^XuIi{>^?J-?@A*9kw-cvd2{8XJT$}8H$!5
z(CR70IjoaC>DD~Sdvbq8(GW$Ab&QVq<a+b~w99k=9&}6LFT3*KMEP01Q?{#*n~r?C
zvt-+rN33S#(1B3y<PPt=Wu3o8HQ=_wp9MW85HGf%H?)vfFc0`js*U>s>5qM-s&(pM
zPqqe9RFj;kYc-8w?^V+V%7{u54k`7Ve?+hh+r~`oRnKXVB3p_X{b-SP*}HtZ{G!PA
zYJH&DPN4_-LI0Qq?XoMhMUDvc#~1H5z9hRdmx!A;m8^?6m~Y-#b1hlP<)Eq8U>?U?
zbrG~tojEl{f3~|C?x{5NaaOUOJ;yJ2hOz;`4;z|OgBGHrpdB>_F3<8WI*%OHZMd3j
zy2oRMzZ)xk)fy^F3L0R20hg0paZ$rdG{I|!)H%|BW%n4OCnFJO{@5hlKEt@{ZF)bo
zm3&_P62l@ToZ9vsZl7rqgY|j&J=M}0aCXo$QWJ`uVjhB(*uS+H^UDM}9<dRkDnlc*
znAM;mGTO}Ao1UY|3y&UBgw?_ap9soX+%OBoMMb88N+Y<dHS*nr(I!;0QO8(LisB$V
z<!{@?<-<+;>(ER4+JpW&Q9Bny4m*?YQ~L|5@IZr?xwVdan$7a%9{gv7nROdai@`14
zG+-^|Z})4_OtE~I#aE~AS0(LCtNXU(!?C{8pLWYD$$@TV2HsDljoVJZ)B}69$9)?5
ziNy=R_Yv5a^;<rYaG7BE09?Qz657Ti2c;I2FS5a)kV2poDVF{gnp}ioiqH@FhH&lo
zNh7nE#KPz(LINNl@EqXFJCTKeE`|_&iDZq5N7~ZwLyi}YDdrNHX}?ShK>THLpxNLO
zy{q2MTR&jkfAcY;d3}8rjNG3Cyi-4GYlGzJkoOXtWoKd{@;N{&Tdn@M?Y}BW7UX`*
zGLMt1)|BC45~;O<iG{uDYNd+R7zlyRioO0-GzLFjJh!_*Fra|clo*|^suLEj*rJ!F
zkIi$_N71d5nHQ`UZc+L*F}t3Z*Ccwat;B|pP|`48_exav-A};rgp-YxJ}bS&pN)<>
zYEbYSZ2{~+yv)QlkAVg?M_pjZ-!GCpjqn>zMaydQ%*lyE0`=2E_1o>1!sJ380i_My
zB})!KN8vNL^sR*WbvXhjt`v!TIljZl+nd*r_Ksa?e3=XQf1O-aR2;mzg<{2Bixzj6
z!AsHN?hb=%ahKw5#bL1GFgQgEgBN$VL0hCa#pd##a~|%x_wD3M@@21Y<s~o4TG@Li
zKvvuZRmC`t6i7fS^4={cls_z;u{+2QrjY^QMeFKzNuY5V$E^Or1}_&O4u*=0RhIMj
zPfa1o)WSIp2R)SrIdRH~T%FOUx*gJk@uA7DqTX{|<N+71#BcK$WWROSv$&%-U8mg!
z`C`id2GkcYkNkAQK`V~WxR)I#9w_!s5*&xmjKSJ1QZ`librtCu7f&f5*2so$+#Bf2
z4e;JKW4ueQbeXAH-j0<r^!2__bXa}kZ)_3OroSCU^l}_?!>V9+3{YvzBcTXYf<5#f
zw@nazWj_=%=H(>O2QSy@P=u8`{8`_bk}x;!P%>I-jlqoScuG}=Yua=oBl+#ICF~F+
znS@$6yzx^4vw5R$n+4Gep@PYrOxf{U!b#0SW0W|~0Cd`pg<Rvo4*OxzaYeP0>H+d9
z<CT0ieN&>HF2Y}rq%oV6;IeW|n{J_U0dOcSD`AWh!D^dDYCb*c8^ladlx6e8v=7}U
zpGCJ-DErivDK7O9PLYZ!KW$fh`Bl7Ghke)_A2^fB_mP3$@dtVOu4PdD;J9^%pt#r7
z9aUCSF@MAA8f69~*msmp;gomRMsbEyIuir9mRT;mS7@#2U>)4Yq%WOoTL5&hULy8K
z>kDnMX|3fn-RNuw(0Sen*8dtIY+Cz>5U7I^6VXeO{2jLdd$q><>Xl&1Vu0p7fs&1|
z$PbIJ`zdYzEI~m!7&#%G%tX&h5*}N*sl~^UqaR>nhk<lr{hTHXZ>NBS8AZM}wh=ZX
zrjv;)`|w%_y2#qZAId_YsddV+wJ2*du<$W+5t&FUFZk{rEi3ntr&SUnt|%1C=Jd5_
ze_<yanX6@z147LHKx@j@TnwK7aynuRYD8{a33Sf1D$a1HOjlmEEBTsOo+Yh^|Ko^%
z#z20MgXKL|1u#y|Zpseh+BP9sNZlb;3yv@~@Ov0{>CF4u9zeMdmT+erqTwwyjqRMS
zXmyK_a6D!#O9m>R+q5u*q)F~4F&iq;iKuj7YDjg=gR!K0M@3p&cI+#a>do7bc+EFf
zp}{hAArKj;X%SHZ6D9Rz4`|SSmahv#VAGy11cXaX)Mt;d8M1&}1|-hAvZVNiXA6o<
z6cfy5!JL;QBlt}Ru*oAMLs~|FY5`ga72TPzIc9tZFpU~37kdem-*}k9(J*PIpJJ^J
zsSU)i+YsOesy~Wy%t%w6zMqz(_qC;@@v>^vIJuyqXhxU}irkNHR{VlcZHy_J-_{`!
z{(i{Z^`o?+;-T}NH3_eik^=@7nJ{&KH>NC>I8$+d06Es1h|Pqo^o{1;)^}_EW(|57
zyJj+53*y)m6e5F~AR#?Ia_O;t0+cCf@_;lqd9@>cWM%$cNkbgsDZ7Cp`OsmBv5a<U
zjh^{aGIUo4i-y!0T=1g3w9$iB8CV261F0G%lg>=TQADA0^??l-fO1^j=fqzmv>$Ik
zsF<+b%&B*pk!HX9Wifnau{En>S<+**we#g+tIq++C!fFshl@IZ%_AS&j%yNkj=w#j
zV1zL4>BCBv?8m!_A8vU5w_+jRJAUa*K$Sh=>u;o)@%gZm(Hl#>>H9yA=VD<p@r1Rd
z>eWW`zerl}&-1icy~%Cs2WRZT1JiK;)SUZQ>Vwq?HIZ#4y{7%`Ht@uU9-2mT?U8mz
zC94OXy-c}dfYYZ@TnK!7OnYwUnU#=S)k-Tj1Py{Y_*g>!$igUn_8Hg?Yd`YAZ|<hh
zk~N=8h?1_pr*6E4d9TU>zO)ET;+xY)CD|&4M8hSGJ5rwlLozN)`xJkphmTWhnkH7R
zp|GN?8<bnBp;)ahkVscbCR7;QM!t_lE8kzXl={MGio#(UZs0#}ScXhYD&vDw7yAHy
z;1Wl6l%nBSxH3Wb;2jNP!5@sLiaK}~M&FPvTgpw^zf?p2F<tcN!h2T<sXv6B_`}ck
zq|uwu9pKSt;s+j3OlaNU+o2^T9))uOl5t=Y1ZbT<U@kEFYicx8UxzC<pXepzVaI})
z)n{JDWYpe$bp>6tSl;KdX2OoQGhRYBxMNYX@MpSn5D7F}DSPf1*q`Ib#*a4Jg@qHh
z`7qyVkKaMCcRemWNY651aHvi)D<vKqkvwl1p<meSi&(~-=)zFH@IDQaI7VtC`hZoZ
zq;&+xoxe4EbjNODw&HE8CRyV6QCTwD&RXY{f_q#{hWG;yvo%}$YL8BRA0h1o5KK*O
zXD3rjd>t;N!*0nRH%gv3csv7=?{>O*|2rMzztJ4FC53iHh~I24S*ZN8u3B45qTO2k
zV#a%<aCGQ#Wan|7k?*UJ|IW?bBFS}!^|`1$gTuL|(_JODa-|cXMJH)anre2(uEuqy
z${k#Ws8<}?5mj|d-F)cVG`Qp8-~37TJ8B|MiCI&p^uZT?;hIgoU1@FM%YA>2-hio?
zIFEIohf8EYWRDv0QIK6XdRv9JD+t>+-4?eH^&08HLs(EaIj}>ufdPG-&FK`ox(hP)
zSX*Zqbos^?mzT7`kU=2R(_sFto#;e1-jS!3{wMk2OMcoJ>~6zIk%mvT-Jh7Kvbt$B
z8|rO?J^g2Xr^H3M{Vu`P<)l*|Vr*E1X<+$j`p8kgt6ScMbN952xjmdzc;`Uu<QHf4
zl~+TX!1`0?ucVcQ&IRAQq=}Km!mS9OlBq@0VWTPwxEavR`#bgV!0ScvE>BmU19zH1
zdQm<7)we%}!ruutZS5wmd;bx?EJ416t*z8Mi{3Jr!!9It;_W3U$&c}W?2NupfPAbz
zaEvS>tF=;!K5Ao~-wL{`AaKW`2vX9W!v);+3<v!_qH4;)NV~`;e`*3LWP>Ne%UcVx
zb;L=lm)%rYtA=x^cwa@f^IsmG_fHBMF!yLCJ+BFOHR>7stJd)?=Nxz%<lP`F<7F6i
zl(Ho9v=s6I2a&Xf0<qVjc%moSjV*_;&?jyU+`ZB>8iP-Ve6eSZD~t{%G|HvhpWj*;
za3=~ov&HyCmD2vW$N+mUE$10$G3&6M?QY&iR^o`>Vh|lw=YCxOOE?w`X@(U<9Y7~6
z)Fcq!<`YOUk`P*#e17Azvnu6Onjf2;iYsll!t!`CbngkGOAaC^m4^RW((d+S-n)L~
zTM!mauKzQ?74*h_S1<vmr>@6)A_2|}RmHj8#A&~vV*Vg@W*Y<^Q_2%(ZD@hdlKyCe
zl)xetJ8!pZ#}qf;Cj>*iNq*>30qx?euIoKYV8uSrbVuX;KB~UnQ#KvGL+w`BNcSS1
z;U~2{1T}vKDOh?GjZqA^@8P+OEsh={qVYmQ$vY&4jYp=IpNGGesr;aBWx6o41JoSQ
z(}BH4cv2?sB~?BFm6;E1bvk7aC#n*P%Oi?dG5L^1-hlm5(P&r2+cnG+!{_XV`;L8<
zl|p)Pedy^d3gl4Zq{eg%;hsN&<yB-qP%*JDx-dYQv_c*-)yQp|O~sa@A@qd80>VW1
z*YjjpggMwY-|~3Adr8jW^cl@Ov{4xMvHHP;dHlW{U@^uuI}B#!zEBT+oebadmu;(T
zo?I5REG^zcKLB?tC^&z^j$_l$2Lu>djULQa(#{(k8C0@jcH@Y5plQC>XSdZR<%2Fn
zC1CnY9?x1zI@i<LQ@m?QRaFCg8bH71r7>^uFuX5uMtLaq!#%??TkQR2I!ifI;x}j8
zfr`BP^Q6sA8vDu}yITqBe`9jn(s4p+U@XAi4YXGwT!~ej6K_%!Fo)U1FJx5?IX7s?
znI|z&$~=$$T+LNGw@LY9(K6|S?R%;K9(2@!slJPxmJQWG-*CpPI!DGkfnTM3=U`@k
zo*N7*koGrw`pli4^pJpjgSMLFVm&}>!aSM4cPn7hzsL14QkK>UK(EW*q=T~B>6G2r
z3kc0PU=Gmf_i1!^$IwY;XsZc*z39uQZd1T0?3v{XK|jR#Tw@inoudHrzw!~8x`ZUL
zP>9mhb4GJ95$7l35USY0dK*R}JR4u>ysHdTTaV{r`q%*N4gv7}Dp8PMMD8}ve;U><
zz?5tAj*Jp><IN%YdB8@cm3jxX9*mppISr~d;tk2{_{IB?(_%J4+iwPWLW7@J_VAYL
zzdJ+ZteN4DN{i_VlbhK-Ppe=T&+r+1hx5qxl(|W?sBMQw=h7sewyaRI({(_eSk4<;
z`Bh}Gu})Q+7wA<cBygT$NEPbl#?A3U^Fk9K3l<q4HRljayEgA*#Nkrbh%gU3hN$em
zPucOG6oHlBnNr1wzDFxK_wh3}^r95;j<fX$*qk{H%6beur0}K?J%93#EZ#HsUUlmX
zCvMC0cRVC&7=A1sW)c_WZlhXii{CUwErjM2`T8?jf1<sH=Tx>e1)7Dm#5|^+uIQ)R
zX62|+|J^j_h#O};zES66?fadp5IKr-?2tmw=@pHfATcp)iM6Rfhw?q^hF;g%B>Ngy
zio;8u$*OB7`R;LZ8jGhZ+?gbNu(sYs<hh|bmbY{K;N*kL<Od%8%}u=IF69X#MV;qL
z+QUIFpOZ9=kfclQW6E9_B{Om^e5D0i-uxVg%-U+Pj$+`81*I#9GMEux<W9CsnlD1k
zn7%enEHH*A&~I37UC<en1fA}f)b*k$QY{?{{&i4%_PJsMq9n4~{0rC1CGnHUPnuuK
ziw|0M=%KfWDSpsigScFy!0PBq<YuYpAc7l;3G(_fS1<}+T`>cLxZ<bt%BXGvu)SmG
znX2o;X+a%wa9G7({6BvKi{r!*K=hl7MV_>v$G)#thMhWlfXW2Q$W_rJ(Q!NDXH0+x
zQ<!jQ;88~H34Bc(d2W+-QGOZ|#FCQ*l>3s->rPUy=JY3Vfy|$uMz(uPW}@g0hNlv$
z8ijAn!zVyZm6Y}Z3dOh3D#DU@xDFGReL@V#ku=QZMao^QT&DAIy!9<RP@~8U+%)@q
zVkwJ4LLwV=RLDq9_{*r$_FzdGgK3W-h=qmW$65GyKEm5=t>xSy^UP-`SW&!tYS7JG
zFuK6m-6-0VSp-+>X2;maXQ{4IlvcA2;7P8*nSegnv|P;nf$F9NvbhM?*;a6o)S^Gb
z(#qjN-*PB$lw~&sFU;|DeLP1Jbw(%3@f$Qif%2~O;`X-ZWzTE(*kP+j%s0<2)Gc{o
zZK-afhs+SDT!8Ina4zgiAp9*+$_7H7)cTEKJW8+e^gJKxMz$6cypGY^89fs|HazKi
z9n3p~+HR|@$_yMOa9sUnF;{1K)uoFj5JlS{O;LE*{bHusUdI3Tf@H8^QTqikAog%~
zKpdW@gb&u4i17=8{|9yEsYL~NCnUb3#Jq@Qp#7zhik~?7U0OP-<_c7yiHiuw$`g5h
z4Dk+W4~Sojj=p;}luTuL6Lg+6F>9i|YRt#X8cuo(eUrk>Z>~;aJ7ZEaCnWA`MdBc)
zf<hNND~}u*o2Xd)Iri|0H9swb`LbSWn2cDSh0gA+o%>cc&Z3TO&v%@gFl5^ijq;B^
zvz8RN(2l6Y91W9g(>MrZChD2F_&#rCv~!<f45JT6M}OHkUN^WVXTJV^{V`r3C9l0(
zr3a_1_2aelWao5ys`qZW$Sl%_pU=?0-NJS3ApDa`^LG;=z>t_Y<!og5^sFzg=y_9L
z4Q*po6iL{|iHL<GG9-zr)%V!Mm$b;e2U>mXK2dn;Sfp`KiR*b4t{fjQf3Q%`r#62E
zj5SJx>6Fh)rVp`o2&;!MR!DuBI_q1wKrBVwev-|v@UfT;AjKp)rCR(I^k*jgDeg((
zdIc?W4ny#lvCc_WrNwMjR|zJNNMLrso)T%|FFxc4pSXieYJ+Job9`0RJB;*H!b0G7
zyjcJul}ATXgRQD@Yuqc@Nx`3oT8^GKT7Y2wB1^J~i?05JS~|{5gv0O!nY8;jhq0iY
zVPoNDo!<0;UZgQ{97H7O8$7r_f}$GyC*2ad(Cb5O_SsS6e2xlbCFI@169mKacNBKf
zncO?#D0m>Z?KHU#0TyrHUQLXd?I=E6L`*<Nz{R)&V^|S@lZo6^n-eRj%x7Xwle&*T
z{OEfJad==KTsS)DNLC@yY)&opBP2c#6`1|dhksAi^QACjV`HPU^3JTXqh9CSkNrs{
zbPLk~3wrTjRiiX&jsE@#R3YeFEL7@&5r7AT7_SxXaO&}Oqo1dq8G3{QL|mVl`#1}H
z_i1Y&T}N+jC4;*6F4;S%YhEfkbFCo6Y?pEdlkbFYnuatv{P#X>jy4f<!LT_BWAOgt
zr)Xy7YV-ipR2A)=&_(wBiYbX3c_o_X$Mw*=00Y!`>(hrAVIealGr`&NqObgCPsaV$
z8;05!V_^4BID!xGSMV_+$cnGE^*&HvV`wNmYWa_4B{2+)8oakTZumHz++1AiUv>v2
z#nF>*L#C+#6)*VlrjjSHLTcbM41+%nJ9?1D{^dNxjG)t8k0`ncWIu@OM^XynqfH0G
z=WwG`Md9|NH0e)Y7u}<yL}vTGQ5YwnxeaDb))}a~gE>|NWi1mh^%BJSW&Nd4yG7L!
zA@u}#ogp?Nh4ArWVO%kyr}loh$H1|nzQ_RWz(EfYHvCCq4=quN)z(Gd%sNZ1qRFGv
z^hc><PfVFevc;BWBCr&^9Z-@SM<cY6>BnG`qrT+|>4Uw)fXDcX!5DHZN5M4o<qhsO
zLzdMCJX{+|BxW;wB<dR2XEhr6LzpT|0)C$bUW2SI;Ggp{n-1&ei=@A&E`cvWv4pck
zhq4TPj)!H9X92nL&HaXJASaNgh_Yz@h=e5Nn2Cr}+)nIA<Xd8LO(9Gne4%nzH@EMu
zp03?cENH=x=lJ178-#ic7t(VUan>Hh9*!Q7CqcvjL}A1_)JxPVR25u2+)p?i^lS|4
zjQzB!bd8Ey${wkDsmttcR2Kpl#CSw_%6N}-o^&?yFDaL)RVk|sp31*snxmUTn+rX1
zuLX`#W=*Z`t%|L_j&!B*r;5=rQZLcp$!;nKg+9Uml|yqxGeC1j^F_la5N8H5Q>wdb
z2p1WZcd5uoTc?ikYU3_oEdZ)=wYDl{Dm^PsHT{bw%L~eaR3K8cGL})_vJVJrMQa6D
zNmp~5gOA&f#-}&RAC)+jT~aqW16dJJ!<{1SBRwNC<AvhANEk^}xl(xat;Q^JfE`mx
z<7`8Yaez$Uu)kzi5=8JshHUg~v~1=2CJm|J*e3g?4q&aNu|?q2P#**2Ah9;?6iozP
z1iMqr>-+@s#0J0xpc8U*({ev?ecGPiyM}y+{LPI^Pz?Ji3a8#5efn?b(KWc-fBU|^
znzO>c4x)cqC;rQm)MvF;V?w20k|d9a4=;gCLFjI~FAkIXegCKr4lG7?rbLS=Ln@|L
z3$L)>=Fje6xLl#+7Nq=-S)MTw-AEsaotO9R?|`NzO}OzLB(ed{M5IYv+ZmE2)-yjn
z2;LdNB6l201nn}Usb78XPvsv(=a!oOv=Mt%G*z0SZdP*I7d0QUxQDKO-T~4G=ztAc
z@B5-Vu`Zg*ttfNbRp&NiZ?^jV+^<Um45H05gZ$*n6|^Cta*2GY^5zj0{cXrzuAxLr
z#+M=kVOt@iW5`D0L&;&B-r9BAbrh4CR?Zg(hfGD$P6d9^2;^zHrC;O7qCN)ZiplM*
zwVTW2rCQi%_%UyPDbHNdC8@sAwDXnz-G&vP(xd5%U3e~*-3KmDoj*G5srKYS&`aGS
z^~lnL8cC*AVcMgqBxt+2N5tgnWzY_<&*{OS?8Cv87Yl0Q44uY7`vQR?V=Yrvk`uwu
z^y5aU!(uWFo)z8f+vl?Elo8&ju5q3zHlA>p<pFxaXmrFs9<NRd+DqxyaI!lqA!eZ)
z8?~Q%uNIfzUaf3wyon8AV)62RZRXzI!=V!Wg`oS1+wr?S6J7_P#8e-@gRrG=$<!9Q
zu*@N>KthCKh^v*imA8R6#*MAthXKqK*C3<_ro+!3&|sV3VO#qfx35<~sF#wVm#wXr
zv7ndFub0-Mm+PsQd81c|xtyG^oTa>+{`$UVUrwz(!b9^**P7>RzFx_3TK;;vTtKm$
zGI}yV@QugpOa4lP@k+wRO1RicT=z;;;7ZanAOryr9S->N5fBdngwX<GO8}9UfJ7)D
z6dw>{r(}c7_!*5CkfA>g#46{`oCAdW=8fv-O$1Et7)?S0IJTuYb}cw|G&rE{b=#ln
zcJ1qS4C<hM&fBuiyFlk19cQT5*|y5ruJhTB$r&_=a{B}2t~uq7IwjPtU|XSJ*REhk
zzX0lMvMpn>Yi+WlZDI*ue}(LFN#t^cb$&^Ceg#i;iA!~bT6jrXc!gwoNoab7xphgg
zb%h{ti7#=5-h273_iFgwj`wgXy8!hHIC13FsTn2m{qdX#eajU}<UGZ`F;=@V<h0Qv
z;@dtr;#!^J7Vi7mCaI@F_FKI3sd<8_eMbourB6&~Cdum*g)JJey@P;F<#P|pt$Y2u
zv|ucA;JmeX?e$>YW!4kITQvWO?tT;Vf8g(x{~xTU8MmMO%erSx?CP6!SO0-5{u$k4
zCf4<hx+~Qu+W&&9CQjw8nroG(^IrBME%~b|mgN^F3Ee{`mh}xw%MK^}w`Bgc-HRp;
z^({-Q4yP@*2LFOvCjUEvm*dV#9*@K!R9pSE>#NV_{<R`qa@SPPa<G};|2}QV-OU7g
zQ2n1&-dYYjl6XjZDfw>_?ECrJF}4UgOzZ`I+?ZFg9Uc||hEIS~1iw|&Yk-GO)NhbQ
mX4Rts<LE1b2{c|8A^H?xWL6_ReJ}y*KfbXV2YPjIaQ_1m_8C<G

literal 23424
zcmY&eV{m0%u#Iioo_J#0nb?@vwry)-+qNe*Z>))v8{5gt_uj9!t5)^yb-JtjRGrhi
zYInOUNJxNyf_yKX01)K=WP|Si>HqEj|B{eUl?MR<)%<1&{(~)D+NPwKxWqT-@~snp
zg9KCz1VTZDiS?UH`PRk1VPM{29cgT9=<v;Lf`EYagMdIet=H@a8oRlWfPg?`f7?L(
zFKED?%?+Ku?I7~Mb(sI~^#uZMZsTe8&6R_I$YX<mq!jz=4cJ?l8k&HBDD{8auziCA
zQl4qm;+y>D?!Wc_@}qzggFv;gb@2cJQAYWWtpEZ7?y@jSVqjx${B5UV@SO|wH<<0;
z{><1KdVI%Ki}>~<`46C0AggwUwx-|QcU;iiZ{NZu`ur>hd*|<W)sXtmhXDixZoaeV
zklo$X=sQ21?>Hb(|6veERq<PbegkBRzi{?HIp-GW`hU_n&12ozz{J4dAGi@L6pDe-
z_ud2pJc-_b2pj}b3Pc9vzvpJBX4(Dy6a52IgD!!AfuwLEKN$^~jn+XAz)Mg9U?T~E
zgqNfL`tz^91n&aBz=T}M5SD}tB`7H25Mn@BQsEK4gL$l9qzGE52osF@rxjbO42^t7
z#@g=mu(37N%+Vt`PAJL-lQ=FQENF`3={3?oV6ei1hBKA`DuVTzgGk7b#0j#++TdzR
zI(97e!~g}_G7m33x=^Ssom?;fl4q}a+^;UP-1|ZzG9$*2kpk7p8YI9lAxj<90CjKp
zE8u&KGi5Zv=157hgKP@$c2&H4zuKcOmHoZD%?+qY(Kf~v8|7crq{Nr<WvZ$ts)Fb$
z8!IcdkQ`H>xu=b@5Bab=rqptGxd{QJg!4*-i_$sES~)AB46}Fjg|ea#e@?J}z%CUJ
zOsLWRQR1#<tB|QIEY)&I*ZbudHp)E;$><nb=BbXZ4tHi(jj=+TGtb?X^faOKFyozE
zS@PKF)~8;5xRSNpTm4ugp<(oc@Q3%7K-)@eyP?m1z&l;rf%%J4?;rfzsBU`M+aNyb
z*@?y5Vm{LN@ggUHmiuxx_Dtj5rsol#BM~=pjyHqe<HcvPas11*o_#i9ZJ%`X+7&6Y
z4F}#7CrnT%)O76bs<&03Bs~CBL9-lPzgZEx+oS+S$-gV~5q;R39w5(FZ(Km5B%*l&
z(rrr`BO68!fN#?(kC!s6W?du1@vWLl$02}9k4Iw`sS*azt|mzMLd*ov1C_X-Z_DEc
zA>ng^sD)A4FDuY!iUhzlgfJh(J@BRqd&P#v2B`+saBx>m+M&q7vk-75$NH%T5pi%m
z5FX?`2-5l53=a&GkC9^NZCLpN5(DMKMwwab$FDIs?q>4!!xBS}75gX_5;(luk;3Vl
zLCLd5a_8`Iyz}K}+#RMwu6DVk3O_-}n>aE!4NaD*sQn`GxY?cHe!Bl9n?u&g6?aKm
z-P8z&;Q3gr;h`YIxX%z^o&GZZg1=>_+hP2$$-DnL_?7?3^!WAsY4I7|@K;aL<>OTK
zByfjl2PA$T83*LM9(;espx-qB%wv7H2i6CFsfAg<9V>Pj*OpwX)l?^mQfr$*OPPS$
z=`mzTYs{*(UW^ij1U8UfXjNoY7GK*+YHht(2oKE&tfZuvAyoN(;_OF>-J6AMmS5fB
z<XKU7YH10@@&WJhj71Cj$=TP(r@q<cW{2}t$FbdUw)ad2!elcuLPw0X5toDsPadV*
zO3EPF>^sY6wea&&${+!}@R1f$5oC-2J>J-A${@r(dRzc`wnK>a7~8{Y-scc|ETOI8
zjtNY%Y2!PI;8-@a=O}+{ap1Ewk0@T`C`q!|=KceX9gK8wtOtIC96}-^7)v23Mu;MH
zhKyLGOQMujfRG$p(s`(2*nP4EH7*J57^=|%t(#PwCcW7U%e=8Jb>p6~<TTQ9e?y3C
zdb|J>>RAlY4a*t<yx)M!`#-^(n~+nSXHt)XXPCd>s=pl}_J{->@kKzxH|8XQ5{t=E
zV&o`$D#ZHdv&iZWFa)(~o<E{GN9+27JE4iktONzQ1b)q{Sex30G?of$HMKN~8KD%g
zA+E{L7XRV>Bh-Osl{~CS0hfM7?PyWUWsr5oYlsyC1cwULoQ4|Y5RHA2*rN+EnFPnu
z`Y_&Yz*#550YJwDy@brZU>0pWV^RxRjL221@2ABq)AtA%Cz?+FG(}Yh?^v)1Lnh%D
zeM{{3&-4#F9rZhS@DT0E(WRkrG!jC<!Dwf@j`RqVrLtHFoIyn_L9bxbWrgS*Z9wMu
z#p1&N;H{ZGv&zD_N*zbkas>#5?OFjZv*xQjUP~XsaxL2rqRKvPW$zHqHr8Urp2Z)L
z+)EvQeoeJ8c6A#Iy9>3lxiH3=@86uiTbnnJJJoypZ7gco_*Hv<E!$|Yb^#x+eGvv(
zIp;Wt3|Xgi12|CZQBu5wnkbr4Z_o<}@wU&ThE&G4r6LGOs?2M%<}Vu1j2>KOH97B?
zWiwp>+r}*Zf9b3ImxwvjL~h~j<<3shN8$k-$V1p|96I!=N6VBqmb==Bec|*;HUg?)
z4!5#R*(#Fe)w%+RH#y{8&%%!|<UeDoR>fQ5JcFzUE;-yVYR^&Ek55AXb{^w|@j|&G
z|6C-+*On%j;W|f8mj?;679?!qY86c{(s1-PI2Wahoclf%1*8%JAvRh1(0)5Vu37Iz
z`JY?RW@qKr+FMmBC{TC7k@}fv-k8t6iO}4K-i3WkF!Lc=D`<I4n3h#nG>nuD)v#Na
zA|R*no51fkUN3^rmI;tty#IK284*2Zu!kG13<C=xWI7mp_-$=}wb|<b)!OZRv-HEP
z{%b~I$E(4`VZ#-glOe-5)a2pflY1Bz-1#4je?)~T9!X4-E;pkTTM{XAe2I!K$wY&{
zHEYHdnV_WuXSOaFHmg_J8USFkT|e)_-*FkL@p7z7`X=kCplNBVHgHbdYiIA4b&ia%
zF^b30NW{}~a)`)^H3EMpr)@2a^C3(yt-t3eigT2)odQdx2zf*pafN9pF#;@+u4LZa
z7x<*Yxq9&rRf5M3B$p^s`skXsITAn=Zo(y=33sGRSGWuaK?&Ne`Pj#q{feF+D~&z+
zEyT)MiaBL7L|^V76c6eAiTxZof6@zS20aGf%dzLc3HH8OA(-=u{w4pJ6%*OO;uayC
zzR4O{sz+f(78K2km*}=(W9{c=$lUj4eqLf#^t$Qwnbo?bEXMO?j$N^G)CbdGe8!P9
zJnZQX@k)7bzDG0I8w{~ZPTf4?D$;UGe$M~$TSzciU_@dS=0n{mhB=qm5O0^X+E9+o
z1x?ef8>!$OlxJAt@zLU`kvsazO25TpJLbK&;M8kw*0)*14kpf*)3<d6yUQxMZe%8t
zXy(eYN2(&WrmwSg<nK0tWy!~|3-Ib)_FW|=FVb)tUsL?PQ@qp22p>;GiDh;C(F}$-
z1;!=OBkW#ctacN=je*Pr)lnGzX=OwgNZjTpVbFxqb;8kTc@X&L2XR0A7oc!Mf2?u9
zcctQLCCr+tYip<jrMK$>a_k=;1ETIpHt!Jeo;iy^xqBES^Ct6-+wHi%2g&)?7N^Yy
zUrMIu){Jk)luDa@7We5U!$$3XFNbyRT!YPIbMKj5$IEpTX1IOtVP~(UPO2-+9ZFi6
z-$3<|{Xb#@tABt0M0s1TVCWKwveDy^S!!@4$s|DAqhsEv--Z}Dl)t%0G>U#ycJ7cy
z^8%;|pg32=7~MJmqlC-x07Sd!2YX^|2D`?y;-$a!rZ3R5ia{v1QI_^>gi(HSS_e%2
zUbdg^zjMBBiLr8eSI^BqXM6HKKg#@-w`a**w(}RMe%XWl3MipvBODo*hi?+ykYq)z
ziqy4goZw0@VIUY65+L7DaM5q=KWFd$;W3S!Zi>sOzpEF#(*3V-27N;^pDRoMh~(ZD
zJLZXIam0lM7U#)119Hm947W)p3$%V`0Tv+*n=&ybF&}h~FA}7hEpA&1Y!BiYIb~~D
z$TSo9#3ee02e^%*@4|*+=Nq6&JG5>zX4k5f?)z*#pI-G(+j|jye%13CUdcSP;rNlY
z#Q!X%zHf|V)GWIcEz-=fW6AahfxI~y7w7i|PK6H@@twdgH>D_R@>&OtKl}%MuAQ7I
zcpFmV^~w~8$4@zzh~P~+?B~%L@EM3x(^KXJSg<wVEvJN(*DSLK{@lLZ^>c6I=;)B6
zpRco2LKIlURPE*XUmZ^|1vb?w*ZfF}EXvY13I4af+()bAI5V?BRbFp`Sb{8GRJHd*
z4S2s%4A)<beb5!5W2AL1ws>6Uc=PK%4@PbJ<{1R6+2THMk0c+kif**#ZGE)w6WsqH
z`r^DL&r8|OEAumm^qyrryd(HQ9olv$ltnVGB{aY?_76Uk%6p;e)2DTvF(;t=Q+|8b
zqfT(u5@BP);6;jmRAEV057E*2d^wx@*aL1GqWU|$6h5%O@cQtVtC^isd%gD7PZ_Io
z_BDP5w(2*)Mu&JxS@X%%ByH_@+l>y07jIc~!@;Raw)q_;9oy@*U#mCnc7%t85qa4?
z%_Vr5tkN^}(^>`EFhag;!MpRh!&bKnveQZAJ4)gEJo1@wHtT$Gs6IpznN$Lk-$NcM
z3ReVC&qcXvfGX$I0nfkS$a|Pm%x+lq{WweNc;K>a1M@EAVWs2IBcQPi<R5t!qadV8
z`@w2vB^p<`Z$u8twt230^FDUXk@KFGRjk|Wy)IU*vs&-S4^@ur^QOw}{f&PX2ZUtx
z2^VHiFLv0j^tM_qTCdnm{?$%kSnzz+Rz#c}<%d@@&Y%vBngG@bQjNu*$QIzHiMtlr
z%<!I8J_+!}g1P;40riIDVp#J58>EJNt}+Ea8~WiapASoMvo(&PdUO}AfC~>ZGzq<X
zA{wc(2{B`w8<FdY#fUA=!$2hWfZJFFh^biG^FRul&;5HGQt3HYB*8-U;tAm`ZDrW?
zLGzSCAtG}^Y%BI&AQbV|jc8`aQkJs}$KZGr4&D`BKH5)pk?++zISItrK-zIx+|7D6
zd{(|~knMc?H%TN~Ttm8w#&X{*x_x0Tx_urTbWQT(rM-zoT(XUHVI3m?V@uQP4J|db
z_OkbMEz8a;6}80;ZBwYhBLn3A0_Q%9Xo7*<Qa^td-Q$KXkb<^$rXNS+J!!v~e_27-
z?B(DtKu5zrraAfXQ`1kqTCnO1=JFF~4jJA+&eXD+hsTX=d50Jrj6yJ)U-=XHF8z-o
z1o@Y7@sl2x7U<!Ygv?%s5eyX!wKt`l=(%|REJ0yS<TOH?s9B)is6Iv13lr}2%hiI}
zPUW^d?_dD#I&an8I8t^fY)SnDOhO39OTDNje$JA5dr5!UH92rZ)87wX;yQSp&mZg<
zmgmz=w6D&%v&B;c-vM3DEvl$Gev##x*ndtU#f^N2I}99-3HZpRE^$`D%!0A_ujaQb
zI5z(Mh2X@IN1#BF?<;^jK#~(MAEc`h<3P$Nghud=)(&&|-qnC?^x{5VK>Wjd)4no(
ziLi#e3lOU~sI*XPH&n&J0cWfoh*}eWEEZW%vX?YK!$?w}htY|GALx3;YZoo=JCF4@
zdiaA-uq!*L5;Yg)z-_`MciiIwDAAR3-snC4V+<n|J*V*n#h?&wg+C8sg$z312~u%3
zz$RVnQhlm*2c)>KA>&V%Ak;p{1u>{Lw$NFj)Yn0Ms2*kxUZ)OTddbiJM}PK!DM}Ot
zczn?EZXhx3wyu6i{QMz_Ht%b?K&-@5r;8b076YDir`KXF0&2i9NQ~#JYaq*}Ylb}^
z<{{6xy&;dQ;|@k_(31PDr!}}W$zF7Jv@f%um0M$#=8ygpu%j(VU-d5JtQwT714#<!
z&vm@KPB=l<TMpuv%DS+RW~~WnEOz5WiaSxW4<ph#&0;zqiCMt1ekX<hrb8#^mBYaW
zJA2vi7UWJVhfbeu%Rejgz>f0z+Cm$F9J<FFP&8OfSp_OMl7>jGr_G!~NS@L9P;C1?
z;Ij2YVYuv}tzU+HugU=f9b1Wbx3418+xj$RKD;$gf$0j_A&c;-OhoF*z@DhEW@d9o
zbQBjqEQnn2aG?N9{bmD^A#Um6SDKsm0g{g_<4^dJjg_l_HXdDMk!p`oFv8+@_v_9>
zq;#WkQ!GNGfLT7f8m60H@$tu?p;o_It#TApmE`xnZr|_|cb3XXE)N^buLE`9R=Qbg
zXJu}6r07me2HU<)S7m?@GzrQDTE3UH?FXM7V+-lT#l}P(U>Fvnyw8T7RTeP`R579m
zj=Y>qDw1h-;|mX-)cSXCc$?hr;43LQt)7z$1QG^pyclQ1Bd!jbzsVEgIg~u9b38;>
zfsRa%U`l%did6HzPRd;TK{_EW;n^Ivp-%pu0%9G-z@Au{Ry+EqEcqW=z-#6;-!{WA
z;l+xC6Zke>dl+(R1q7B^Hu~HmrG~Kt575mzve>x*cL-shl+zqp6yuGX)DDGm`cid!
znlnZY=+a5*xQ=$qM}5$N+o!^(TqTFHDdyCcL8NM4VY@2gnNXF|D?5a558Lb*Yfm4)
z_;0%2EF7k{)i(tTvS`l5he^KvW%l&-suPwpIlWB_Za1Hfa$@J!emrcyPpTKKM@NqL
z?X_SqHt#DucWm<3Lp}W|&YyQE27zbGP55=HtZmB(k*WZA79f##?TweCt{%5yuc+Kx
zgfSrIZI*Y57FOD9l@H0nzq<E4Q@_YK<1;`>Ou|Bhrm&^m_RK6^Z<^N($=DDxyyPLA
z+J)E(gs9AfaO`5qk$IGGY+_*tEk0n_wrM}n4G#So>8Dw6#K7tx@g;U`8hN_R<bPv^
zP6}0b!dly7dCc=KnICM>;^Uw9JLRUgOQ?PTMr<oQ9o~>4YD5H7=ryv)bPtl=<&4&%
z*w6k|D-%Tg*F~sh0Ns(h&mOQ_Qf{`#_XU44(VDY8b})RFpLykg10uxUztD>gswTH}
z&&xgt>zc(+=GdM2gIQ%3V4AGxPFW0*l0YsbA|nFZpN~ih4u-P!{39d@_MN)DC%d1w
z7>SaUs-g@Hp7xqZ3Tn)e<dV~D-0@M0u`KSW@qBLlIFNKze0?;|tm!<F9_5{TDKnUY
zJB8#(%G(di5;`|v12#{)=^Bhy!6zu5lq~#Rj8QgnK?%W-bqS8Lq9_xGRU?MD1Z_M>
z7x^sC`xJ{V<3YrmbB{h9i5rdancCEyL=9ZOJXoVHo@$$-%Za<Y<=Dws@<HVOn84kp
zy7czzAj#&D?|uHYH^U!oq7C#CS4C-HKPWUJ-r}5;#IkR`+-?7IMg|O#r^#PS@coAT
z<xl(XMO(JUH%Fc8@Q;tlw>Nm-75Z-Ry9Z%!^+STWyv~To>{^T&MW0-;$3yc9L2mhq
z;ZbQ5LGNM+aN628)Cs16>p55^T^*8$Dw&ss_~4G5Go63gW^CY+0+Z07f2WB4Dh0^q
z-|6QgV8__5>~&z1gq0FxDWr`OzmR}3aJmCA^d_eufde7;d|OCrKdnaM>4(M%4<dMy
z`?Qi<9Ebh#nVT{&VVFv66RU??kcC8}u+l^~F(m>V`PxpCJc~UhEuddx9)@)9qe_|i
z)0EA%&P@_&9&o#9eqZCUCbh?`j!zgih5sJ%c4(7_#|Xt#r7MVL&Q+^PQEg3MBW;4T
zG^4-*<N;_j_KF=#ltp<I^9_IU8#T_ulQ_w;P&0IS=TATWkvf^^ks|nDnb@T^ShFUW
ztuyr~q)6&!?68RQ-V8G+#+EoOhWE-6A7rk5HfHxAG?Sknf`kY=i0}11&e`cz`MCO{
zQd*rofIJ{OtoMr$=gf?H!$EPT16>8L%s|A}R%*eGdx&i}B1He(mLygTmIAc^G(9Si
zK7e{Ngoq>r-r-zhyyg<ieAPsqNv@SQwQ@xsNn5Vw2I}E18CcU&C?((>K)*9cj8_%g
z)`>ANlipCdzw(raeqP-+ldhy<kGNs8`S#*G-e>Uv_VOht+!w*>Sh+Z7(7(l=9~_Vk
ztsM|g1xW`?)?|@m2jyAgC_IB`Mtz(O`mwgP15`lPb2V+VihV#29>y=H6ujE#rdnK`
zH`EaHzABs~teIrh`ScxMz}FC**_Ii?^EbL(n90b(F0r0PMQ70UkL}tv;*4~bKCiYm
zqngRuGy`^c_*M6{*_~%7FmOMquOEZXAg1^kM`)0ZrFqgC>C%R<qRBgHG)$UB@XBA@
zshx3_1QSr};A7TJ_s8FNBrzB>JvQSo_OAA(WF3{euE}GaeA?tu5kF@#62mM$a051I
zNhE>u>!gFE8g#Jj95BqHQS%|>DOj71MZ?EYfM+MiJcX?>*}vKfGaBfQFZ3f^Q-R1#
znhyK1*RvO@nHb|^i4Ep_0s{lZwCNa;Ix<{E5cUReguJf+72QRZIc%`9-Vy)D<o;c>
zWKhb?FbluyDTgT^naN%l2|rm}oO6D0=3kfXO2L{tqj(kDqjbl(pYz9DykeZlk4iW5
zER`)vqJxx(NOa;so@buE!389-YLbEi@6rZG0#GBsC+Z0fzT6+d7deYVU;dy!rPXiE
zmu73@Jr&~K{-9MVQD}&`)e>yLNWr>Yh8CXae9XqfvVQ&eC_;#zpoaMxZ0GpZz7xjx
z`t_Q-F?u=vr<JfY4KbWG<xAz}usjoo`>RPaj3r<9&t6K=+egimiJ8D4gh-rUYvaVy
zG($v+3zk5sMuOhjxkH7bQ}(5{PD3Mg?!@8PkK&w>n7tO8FmAmoF30_#^B~c(Q_`4L
zYWOoDVSnK|1=p{+@`Fk^Qb81Xf89_S`RSTzv(a4ID%71nll%{Wad$!CKfeTKkyC?n
zCkMKHU#*nz_(tO$M)UP&Zf<GNy8?Xs8hUzIu0nqFC9@Ka{&R$vXnbN*?hR?iwv-x*
zPrH;>J#*q(0Gr!E(l5(ce<3xut+_i8XrK8?Xr7_oeHz(bZ?~8q5q~$Rah{5@@7SMN
zx9PnJ-5?^xeW2m?yC_7A#<rjP_en{9P5bFL68vgKu`Lv^loBE5&?9+BtYGMUT06bd
zXEt*_Sdl_o?{!kSnxeJB_xVtFwR-bF`2MlsSO1bZtN)M(j%)mHVUj4b&G~L_`|PNv
zb05EL`!%-lV_>WK*B@oIy*Y@iC1n7lYKj&m7vV;KP4TVll=II)$39dOJ^czLRU>L>
z68P*PFMN+WXxdAu=Hyt3g$l(GTeTVOZYw3KY|W0Fk-$S_`@9`K=60)bEy?Z%tT+Iq
z7f>%M9P)FGg3EY$ood+v<G?d-tNS5y+I=S1dlJZvs-NC{^w-&Jr{gfwR>$pdsXvG?
zd2q3abeu-}LfAQWY@=*+#`CX8RChoA`=1!hS1x5dOF)rGjX4KFg!iPHZE2E=rv|A}
zro(8h38LLFljl^>?nJkc+wdY&MOOlVa@6>vBki#gKhNVv+%Add{g6#-@Z$k*ps}0Y
zQ=8$)+Nm||)mVz^aa4b-Vpg=1daRaOU)8@BY4j<Xy)*mrZf+Eqj^RX06GbC^vLKT|
zpteFBLq#626+?=M@k2|V@k{2aN?cRlCum?`TP_u}%3Y{AVZHbKwm{q2d`D~XsJSyD
zl=xk@5@i0e1=0fu$jfj1+lTA1h#%78*$MuUCU^B9>S>=5n#6abG@(F2`=k-eQ9@u#
zxfNFHv=z2w@{p1dzSOgHokX1AUGT0DY4jQI@YMw)EWQ~q5wmR$KQ}Y;(HPMSQCwzu
zdli|G?bj(>++CP)yQ4s6YfpDc3KqPmquQSxg%*EnTWumWugbDW5ef%8j-rT#3rJu?
z)5n;4b2c*;2LIW%LmvUu6t1~di~}0&Svy}QX#ER|hDFZwl!~zUP&}B1o<!gKVHBj1
z!0%hK_{Iy`*BgY<Qck8#<-rH4Lg1;Qj-hq2OvPXM$(Gkmg`0T7B6Gm*>KAxIzt~so
zb!GaJYOb#&qRUjEI1xe_`@<o~iP+Rf(GIMHq*yg6%vf7Mu<-aQ)$}%3o$R+x;;~W%
zCQ~RFyB5g)F1k-t!#^TN>7qv_-LggQ$JE8+{ryT4%ldwC5ete+{G3C#g@^oxfY3#F
zcLlj(l2G8>tC<5XWV|6_DZQZ7ow?MD8EZ9mM2oV~WoV-uoExmbwpzc6eMV}%J_{3l
zW(4t2a-o}XRlU|NSiYn!*nR(Sc>*@TuU*(S77gfCi7+WR%2b;4#RiyxWR3(u5BIdf
zo@#g4wQjtG3T$PqdX$2z8Zi|QP~I^*9iC+(!;?qkyk&Q7v>DLJGjS44q|%yBz}}>i
z&Ve%^6>xY<=Pi9WlwpWB%K10Iz`*#gS^YqMeV9$4qFchMFO}(%y}xs2Hn_E}s4=*3
z+lAeCKtS}9E{l(P=PBI;rsYVG-gw}-_x;KwUefIB@V%RLA&}WU2XCL_?hZHoR<7ED
zY}4#P_MmX(_G_lqfp=+iX|!*)RdLCr-1w`4rB_@bI&<E#m-6fJX?!@HMojcz?@FV(
zEwb`K9p)6DH8Vt-HX;X2^%28zP(BOT@+<+Oy5Uv8eD=4p<t0n4?tw(5<&#sr?h6zV
z!&Zb?gM&8<%??jXTdmMb1(#@6)m(rk*#aUo^iqOs4-#{`NA;|yExPzdS?_q~O>Uz#
z!>9C3&LdoB$r+O#n);WTPi;V52OhNeKfW6_NLn<EDp2Lr=qOaId}Ifx9lEG?H#PEN
zbI74Vx*PNK+cvB53_AWmzs=zCb5!9-mCcW#<QbIdOJM|=ASw5QpF+P}oobETGwNf<
z0{kapJo<fgf(@=YJA0C%pNqB2CMVFcToi3AV3#1!n@Z&vX@98&`Sz6*SUYY~uWq>w
zpFTuLC^@aPy~ZGUPZr;)=-p|b$-R8htO)JXy{ecE5a|b{{&0O%H2rN&9(VHxmvNly
zbY?sVk}@^{aw)%#J}|UW=ucLWs%%j)^n7S%8D1Woi$UT}VuU6@Sd6zc2+t_2IMBxd
zb4R#ykMr8s5gKy=v+opw6;4R&&46$V+OOpDZwp3iR0Osqpjx))joB*iX+diVl?E~Q
zc|$qmb#T#7Kcal042LUNAoPTPUxF-iGFw>ZFnUqU@y$&s8%h-HGD`EoNBbe#S>Y-4
zlkeAP>6<Z7QQ9XL^<-l?vhbA^VVM{w_AGyBxGo2D4xc6Tl~BnC{PHYDLP{4>2k~-N
zHQqXXyN6<L3Gg$i2mMBKaSbx<i~TEhvQ{`W#&P&}*M*bY-+RuxoiU+jyjZtu*2#d`
z4;V{mY|5$$TfD^8s7AA{v{=Q~S8RRnPkT2vB+qp-b$~mY>7hGD6CxQIq_zoepU&j0
zYO&}<4cS^2sp!;5))(aAD!KmUED#QGr48DVlwbyft31WlS2yU<1>#VMp?>D1BCFfB
z_JJ-kxTB{OLI}5XcPHXUo}x~->VP%of!G_N-(3Snvq`*gX3u0GR&}*fFwHo3-vIw0
zeiWskq3ZT9hTg^je{sC^@+z<IC+@jyb5}hL&*c9&Uv=C+8r5MFr<BeiUxikY7v-2j
z#^Wp1Woo#;-OnJd6+u?>3FAd}KNhbpE5RO+lsLgv$;1igG7pRwI|;BO7o($2>mS(E
z$CO@qYf5i=Zh6-xB=U8@mR7Yjk%OUp;_MMBfe_v1A(Hqk6!D})x%JNl838^ZA13Xu
zz}LyD@X2;5o1P61Rc$%jcUnJ>`;6r{h5yrEbnbM$$ntA@P2IS1PyW^RyG0$S2tUlh
z8?E(McS?7}X3n<sX7)_F=$tGzECOdx`5F$56$H6$2HeHDocU>AAJs2u_n{^05)*D7
zW{Y>o99!I9&KQdzgtG(k@BT|J*;{Pt*b|?A_})e98pXCbMWbhBZ$t&YbNQOwN^=F)
z_yIb_az2Pyya2530n@Y@<KMNVgC+@Hh^eD5>s>s>n?L79;U-O9oPY$==~f1gXro5Y
z*3~JaenSl_I}1*&dpYD?i8s<7w%~sEojqq~iFnaYyLgM#so%_ZZ^WTV0`R*H@{m2+
zja4MX^|#>xS9YQo{@F1I)!%<Q9x6E+JCnjAm>RhM{4ZUapHTKgLZLcn$ehRq(emb8
z9<w{<)uy~=x}G;ZX+CDl#T7`~iRBx5XO`@><&Nx*RLcS#)SdTxcURrJhxPM2IBP%I
zf1bWu&uRf{60-?Gclb5(IFI*!%tU*7d`i!l@>TaHzYQqH4_Y*6!Wy0d-B#Lz7Rg3l
zqKsvXUk9@6iKV6#!bDy5n&j9MYpcKm!vG7z*2&4G*Yl}iccl*@WqKZWQSJCgQSj+d
ze&}E1mAs^hP}>`{BJ6lv<q%AGiq()8hz}1^1ex;^<jj#cc=g{s#0iIU-+2jVmxWDS
zd7qq)5u4+Paaui>*>0-ft<;P@`u&VFI~P3qRtufE11+|#Y6|RJccqo27Wzr}Tp|DH
z`G4^v)_8}R24X3}=6X&@Uqu;hKEQV^-)VKnBzI*|Iskecw~l?+R|WKO*~(1LrpdJ?
z0!JKnCe<|m*WR>m+Qm+NKNH<_ye<gDWD0Fl@Ho4<!fm=u&SGgDO!cbo+8PUwfWk+V
z)@b~#GtD0d4#K=39kiev5hj=8h(Nljd<HunOw<O@9z?#m(rb)ZnCBDPu~!uM>fIml
z+x32qzkNRrhR^IhT#yCiYU{3oq196nC3ePkB)f%7X1G^Ibog$ZnYu4(HyHUiFB`6x
zo$ty-8pknmO|B9|(5TzoHG|%><C<pr4&IxzPg{!KcQqRSE~Tvrur~GxUa*ce)ipeE
zWgS=NE-mtVKb)JH#~V9~Hf<heFWK%N<`blD%sTD$A|XGR=J%4vWJQ9B3q;($v$3~e
zpgG#}?8+2jU@b$OcWYMF>s#7)CM(i=M7Nl=@GyDi-*ng6ahK(&-_4h(lyUN-oOa$`
zo+P;<GhFDlQ-b}GJ)A97b8DT!@21D?+G`33xflj&^Ajw)WxefL*Yy?uny35myNvN;
zJu2^EIk(I5BXd2N-yKn?<jAHF(>C4d@m^p9J4c~rbi$rq9nhGxayFjhg+Rqa{l#`Y
z!(P6K7fK3T;y!VZhGiC#)|pl$QX?a)a9$(4l(usVSH>2&5pIu5ALn*CqBt)9$yAl;
z-{fOmgu><7Y<XFolPQk)mb~-4Wz2OqAihGXbfUWv<O@$JoEd1wcAoD{S1ZgFTS^!t
z+_d^VD?_*`AXb~e&yM8k-n#rSNZe`F1hkVx1o46tWKB^*u4Iztzf9jS`;huL0efN_
zw(C5^O4iFb>J5k>*0Q~>lq72!XFX6P5Z{vW&zLsraKq5H%Z26}$OKDMv=sim;K<Yz
zr-(K#w$yhGyI)R05r<FcNBPUs!f8{%L|!+M;WNfIk0#<kNVlmop1dan3IH7GPG0zR
zbu5#oKma)07cl(sMbhFbgIx|mM?)DnP$;1oA~OW0kph!a5>?vsoVs(JNbgTU8-M%+
zN(+7Xl}`BDl=KDkUHM9fLlV)gN&PqbyX)$86!Wv!y+r*~kAyjFUKPDWL3A)m$@ir9
zjJ;uQV9#3$*`Dqo1Cy5*;^8DQcid^Td=CivAP+D;gl4b7*xa9IQ-R|lY5tIpiM~9-
z%Hm9*vDV@_1FfiR|Kqh_5Ml0sm?abD>@peo(cnhiSWs$uy&$RYcd+m`6%X9<SS+iH
zB{MTIilfs+m}FIm`WFe<b<`1NL(_5%pWxy`61V?hXOmI!N62_Zv-n^jPyCieqxTv3
zu0_=zb8f!dMp?R&UxGJe1qNBBRLXVmj-(R6+9rkXoo6CT-@FKe>FN%?<F{pFRdeJu
z{9WJNuwr(Se^zX7t-vqF<$J*yv&MnYO_uaKBS^eIab7YX1r1^(=OyZJp!PzX%0e7b
zeEpxGl+qFvtIR-KD}KZT9sfArU;dGM3-23I#q69NU-%A?w~!T{F+*-_Lil`8wsSSR
zeW-s?xK)R5p&SHb*TI!J314$wOF*NT7qT*&*Og`^+jXq)LaOJ8#&*`Gy)1X0+KiH$
zU-5JNg0Goq-9^C#_ZqHXSIP}b7@(P=L?LSJk~7{IhyH9xAy{$zEDuPUgJ_RJae#PE
zOqO-BK*KnjogIL_)Jz3RACJUY?ZEW~+1H$~{2k_o%Y(uIH3R6z`K|NdGL!=5lV$Vc
z*(&fGI7OherXM4x!s0w3{b4Ax#6<l}lTU2>w}s~Q=3!pJzbN~iJ}bbM*PPi@!E0eN
zhKcuT=kAsz8TQo76CMO+FW#hr6da({mqpGK2K4T|xv9SNIXZ}a=4_K5pbz1HE6T}9
zbApW~m0C`q)S^F}B9Kw5!eT)Bj_h9vlCX8%VRvMOg8PJ*>PU>%yt-hyGOhjg<ke2;
z7Th2%k_wZpW!A{?Dn2nLFJ4=lqYa4jV<d3;8-+Dg@?%0IvOWsDfrv_`J~>!2pZR4{
z=VR_*?Hw|aai##~+^H>3p$W@6Zi`o4^iO2Iy=FPdEAI58Ebc~*%1#sh8KzUKOVHs(
z<3$LMSCFP|!>fmF^oESZR|c|2JI3|gucuLq4R(||_!8L@gHU8hUQZKn2S#z@EVf3?
zTroZd&}JK(mJLe>#x8xL)jfx$6`okcHP?8i%dW?F%nZh=VJ)32CmY;^y5C1^?V0;M
z<3!e8GZcPej-h&-Osc>6PU2f4x=XhA*<_K*D6U6R)4xbEx~{3*ldB#N+7QEXD^v=I
z+i^L+V7_2ld}O2b-(#bmv*PyZI4|U#<t4E{c3+Oa>Q5|22a(-VLOTZc3!9ns1RI-?
zA<~h|tPH0y*bO1#EMrsWN>4yJM7vq<?d%8sAQUGrndP7J-=xw$nCMSpe7!xoUBNp3
zGTsNoHNSmE+wi-t?Vjri@)nrwy)cL`f%zSrKknks+ReH>FZr?uw$H8*P<CaW^*(*P
zrk<ZDEOj-RoW=I>hiHRQg1U9YoscX-G|gck+SSRX<zu*#%uOZJ$&`iwbI4f^EJ9pa
z@T8p1=V0x-K77AYupaOqRJ8Y8`CFqe-OG4O?Pk+3)K=lIg7Aj+5B{LP8{|uD9bb*L
z=JkjZ*a>!(e7@~eeUEw+POsT;=W9J&=EV`cUc{PIg_#TQVGnZsQbCs7#Q-)<h~+VJ
z%O_$A%X$-T2gv^1iV6X%A*e(F(fO?hnMA3<=C!;L;mUog>v#BicxLw#Fb?#)8TYbu
zN)5R=MI1i7FHhF|X}xEl=sW~`-kf;fOR^h1yjthSw?%#F{HqrY2$q>7!nbw~nZ8q9
z<TlAz0DCai`eopoTgUXKr$&x3a%Yszt2{+eo;=r&?LuF;Zj%RNLHAg=LM|in10Rm2
zxd6;k(nHtRPkOmYqHW7fNcCybHEd(KrX46#z77Z9Q1dkPl|2ZTAjBY-ol(B)e&98T
zgr-$?X`Ytyy13^aY2fa`@Y1*X*i2)xR`@;KF^;++G5hoP)3auvu~w3;5+L|E0eJ^s
zgZRj(m;s_<P67c5tRN5r2qBB}z`g`y!oX~V8oXD2oDd8#khWZ&toq|9@%NQ>h{vY!
z<QL?e6`jG`+hK%nypIRco?pA%s6+zYx(b~=Fi(E95-40VeV5w!L2#*>%i=H!!P&wh
z7_E%pB7l5)*VU>_O-S~d5Z!+;f{pQ4e86*&);?G<9*Q$J<tS(vm9lEGpTY@s(2ek+
z8c`{)@2$sFJY{r$73(<V2UKiNm)(n(&DNp1&6b1{q_xZVGIdKSwV*O`Z3q;#cCe`U
zk~C47tS5LEB&@mN%p)_=XY@OEf&MPgH{St5oHz7A*3o-mSC#2S@XC^m@?vD0WoA3+
z%jkw-8_?@Gk~M`p*@7Cp@q?r=ifcr#f5J(+ee*SCy-59!ceTk_CH8c7hwjNA;pzKD
zr8zf+A(f>EJ!ZxY;Oj5&@^eg0Zs!iLCAR`2K?MSFzjX;kHD6)^`&=EZOIdW>L#O`J
z<!j^{WZ{m%sbn?E@W3)ou>f~$M4}JiV}v6B-e{NUBGF<D@nTna4Fj(s(L&KkX*F3!
zglkC}q4NM*a2HP+ijp5<SToUO6J4Q%w}VEJFwp|MQ|{cP2x=Zt1r&nh4>gj-*H%NG
zfY0X(@|S8?V)drF;2OQcpDl2LV=~=%gGx?_$fbSsi@%J~taHcMTLLpjNF8FkjnjyM
zW;4sSf6RHaa~LijL#EJ0W2m!BmQP(f=%Km_N@hsBFw%q#7{Er?y1V~UEPEih87B`~
zv$jE%>Ug9&=o+sZVZL7^+sp)PSrS;ZIJac4S-M>#V;T--4FXZ*>CI7w%583<{>tb6
zOZ8gZ#B0jplyTbzto2VOs)s9U%trre`m=RlKf{I_Nwdxn(xNG%zaVNurEYiMV3*g|
z``3;{j7`UyfFrjlEbIJN{0db|r>|LA@=vX9CHFZYiexnkn$b%8Rvw0TZOQIXa;oTI
zv@j;ZP+#~|!J(aBz9S{wL7W%Dr1H)G-XUNt9-lP?ijJ-XEj1e*CI~-Xz@4(Xg;UoG
z{uzBf-U+(SHe}6oG%;A*93Zb=oE>uTb^%qsL>|bQf?7_6=KIiPU`I|r;YcZ!YG7y~
zQu@UldAwz$^|uoz3mz1;An-WVBtefSh-pv<`n&TU3oM!hrEI?l@v8A4#^$4t&~T32
zl*J=1q~h+60sNc43>0aVvhzyfjshgPYZoQ(<inR$cERK&%N~SSiy;WaiBTgdl;Bz@
zMx7h{4w6)@f3=XUfD<5b*Di$-gK~XeKu8qdfa(KL$OL~#uI0n&gFVreVt1RX*+{5+
z#8$4WWjNT2me=PpYKo4u#73>OOh>LbUIoblb@1z~zp?))n?^)q6WGuDh}gMUaA9|X
z3qq-XlcNl<s-dSKro}45AbD<^IA@6tvSaLv-;sRc5uLj-i(AB^*}0)lznJ6A48b01
zt^mDP9!TqxILrO*cRjO@t^fSYOWb`|vQ*V4*6V-Ii_hT$&15AhsiGo@jvJCCnY0);
z)Gbzh<7K3LRm`L**mLt1MLc+MqqaWkz{2JV0hUf-(7U6vlP$%@`2fR-Dt+r$66q)X
zh2sR=$#8zbejz`}<A~Y#k!TUpiD??3amyj(E}M)o)o#H-j|LmgBHBXsF9$ok?Wh84
zoxjF*=Hw;;!?a%bcJVG|FBP7@_uu_xpir_`+UDHcZX;}|^THjvjdPRUJ+HO3O$%_*
zsal`RIk@07Cuvh)iE1gNnn7n}$9q`Da-o@9CupmsX{@4y;aIQ1WV^7X(Rcx&McA%o
zqa*mh{MZ+m6i(RP#X)4DdX;+iKAzev_!HbYetk>dy5==T4rq*~g@XVY!9sYZjo#R7
zr{n)r5^S{9+$+8l7IVB*3_k5%-TBY@C%`P@&tZf>82sm#nfw7L%92>nN$663yW!yt
zhS>EfLcE_Z)gv-Y^<SaxB6gHmR|E)iyYeg|g|R}ujv8tMcq*gC>h1;xj(<<JyurkO
zku;yk5>4nD4GY{C-nWUgQc9cMmH{qpa!uEznrGF^?bbJHApScQ$j>$JZHAX80DdXu
z--AMgrA0$Otdd#N9#!cg2Z~N8&lj1d+wDh+^ZObWJ$J)_h(&2#msu>q0B$DEERy{1
zCJN{7M@%#E@8pda`@u!v@{gcT3bA*>g*xYLXlbb&o@1vX*x+l}Voys6o~^_7>#GB|
z*r!R%kA9k%J`?m>1tMHB9x$ZRe0$r~ui<kO`4q0h1q9yWTy1Vw;6%l{l&HBbZk8-0
z4ijBu+y@{d)|{@F;ZFKw{xPkg5F+CDU-3fF>}X}jOC)9LH=Po*2SLdtf3^4?VKn<h
zHzQbKiZ9a#y^bZOa6n&Wk$r`rPcR^1TWQZWl`R8PvM?r?^F}g*>u2ox&mV~0oDgi`
z;9d}P$g~9%ThTK8s}5o<m&w0gVXSc39p)SfaC_U5P2<JPm~s|o1ZFngBTt(DrBI%x
z4kDX}YqUJKdxxsso$;8{1MQ;f+HD&9TGSGCQS)Y9GN_l)t8XY5-si=Gs(k<5;!fvW
zxE8*OW}N`jlcqPjb~+szeAOl~e_-nyQAfun)m7Qku$%99s}G7SNoRK-D2Tt?3bf7l
z_f&iauzO~DnLmd4z7qW{*#v(VPN`62cvfV3MGioX->w2V4?(-lU*ed8ro|}mU}pk%
z;bqB0bx3AOk<0Joeh}Vl@_7Po&C`Cg>>gff>e<EyzTH_%h@VP9GTpHG^0d?A+RMpT
z+TYf8aiHmG?aSY>7fu41U3Ic{JQu1W%+!Gvz3GDO2ixKd;KF6UEw8F_cDAh08gB>@
zaRH2Q96sBJ>`4aXvrF0xPtI<C%^cGg^K!B-fX;2xnF2UCh5PH@z5cKKOHR==RLnzf
zSmET?(5QuFJxq~ag0rPdFM7)-DQc6Kkb_;fb-^S9@$f%6aPJ=U;g7Zr?Ox#q(-JyY
zKvu&Cw@3?z3?xc$8o*T2<9qK!(D=t1JD`+Ta(zAy-y-Frq_L?(ciWSU*N3cXEeC5N
zwIavKBghMD()mO&Qc6^H#jRYCBJ}jZ#?v?4($m6CK2G!{)QNVBe9)sd3#Jc(VH2H^
z=FWxE%(d%&VjzHKBh>WoA1pPsRQtU~xDtnEfTJnl{A9u5pR^K8=UdNq%T8F$)FbN>
zgK+_(BF#D>R>kK!M#OT~=@@}3yAYqm33?{Bv?2iBr|-aRK0@uapzuXI)wE0=R@m^7
zQ`wLBn(M*wg!mgmQT1d!@3<2z>~rmDW)KG0*B4>_R6LjiI0^9QT8gtDDT|Lclxppm
z+OeL6H3QpearJAB%1ellZ6d*)wBQ(hPbE=%?y6i^uf%`RXm*JW*WQ%>&J+=V(=qf{
zri~yItvTZbII+7S0>4Q0U9@>HnMP$X>8TqAfD(vAh};2P{QK)ik`a6$W$n<S7xQ?o
z_{n4xoeaH~jS^3HDy+veci7_+aLh^-n?E!YG6S#O$LPEC_>G<{bR2U<qLrkRpb!v0
z%U*eD$^H(<WG-@VF0k%r-g68(2_6$K`r1T6sUwW?8=<u8q_-5ITGbK36tV>fd!^iE
z#1K58$gW!xpeYHeehuhQCXZ9p%N8m<Fx1W4{1&odf~Dg9N*_P3FP{`cbE*_n{Eco>
zB+l~T_u-Ycr!U><XH<{<R0eR`Jn1$qaE<CV>!?xu!!*6rNxq37{`DhMMfY6NpD3Jw
zkYQDstvt30Hc_SaZuuMP2YrdW@HsPMbf^Y9lI<9$bnMil2X7`Ba-DGLbzgqP>mxwe
zf1&JkDH54D3nLar2KjJ3z`*R+rUABq4;>>4Kjc2i<Dy@)!kC&Aw;NA8e)mD}M7}y*
zi5fe;hrp`ef1|wy(>QEj7pVLcZYZ~pteAG4rm1{><Ecc%k1Tki@ADmF<}mEh$<1ax
zS8dQ&w8<!Cd38+}XJ1#f6|D`7AJ6+Fsr$rBs%wDxJx&tw*&5k&wN_-uj!ur;28wi0
zO+Qvl)mUZbXZm|~oa;LAHy_>PQy<rI@3u-En9*i_l~-?$0z#b@Vco$oFcZc}d3oKO
zD*z%H@Hm`{0l9tDx7KHebXBjGPA%mTPf<pnOy#m~KL9BjL-WcR=L#f{u~T2e78Ilg
z(JT)-B~I|YWyGa#aWq+mx~dt<5RI9)@9nr`in)T{m4a6g9DZqFJ{0ZDQ&w4XPvcfW
z)Zgnax(EnBgW0T@l}fNuwENi8sV_h5iwfdBoer10OP+L`!QRkj>=!QiV5G|tVk)53
zP?Azw+N)Yq3zZ`dW7Q9Bq@Y*jSK0<1f`HM;_>GH57pf_S%Ounz_yhTY8lplQSM`xx
zU{r-Deqs+*I~sLI$Oq`>i`J1kJ(+yNOYy$<j89}LeB{DsRRYsqux%gkK#X#@e^U8%
z#M!7}cTMHu<FLh@jarvDc8P_@QfzNdoQi_n+%?2AM>_>R3Jfi680<|^u#J@aY%Q>O
zqfI~sCbk#3--^zMkV&Yj0D(R^rK}+_npgPr_4^kYuG=pO%$C_7v{s@<a9Q#wuB)t?
z#;9BrH!k(Q*;IUj?T<*@HX2{0em!6debb4D8+OTu+|0s%`KdJcokszE{b|_{ztw|2
zP8WR(1+AaeXov%C!=7CsT*LuDx^}pAS;||)2N$TDO}r&-q#K7;nWjNxk~onpjleeK
zUPThfcj0^+;uf%68trL0i1;=y3B3G^4+!l>-{M-P@RL3^<`kO@b=YdKMuccfO1ZW#
zeRYE%D~CMAgPlo?T!O6?b|pOZv{iMWb;sN=jF%=?$Iz_5zH?K;aFGU^8l7u%zHgiy
z%)~y|k;Es-7YX69AMj^epGX#&^c@pp+lc}kKc`5CjPN4Z$$e58$Yn*J?81%`0~A)D
zPg-db*pj-t4-G9>ImW4IMi*v#9z^9V<wSEy0;H<_ip{R`3n$&`z?qY&+x1%E`|f!X
zF^6qcbMj~^Y|&mU__An*YVWv%D)nfhgB<CJl`_02TU%zkuVLq-ifv^5t4@48WjUK6
z<1pI%d1Hq!eHx}*)cFId$Vc5Z{|e7mEOmtuWJf&C8D27?iS2&%o3DCSW(Dy{q!vBU
z<@J%bdvlGuCbxSa3MmV6=PD4kiAVQdnmr=bOicK#q7Xa-!xi^j8Y6rBUZPWqHJ^kK
zO^AmTc89bc5I+T$XZ64^_c1Pnu-4Kq8TW>D9h@9t;3jMAUVxt=oor+16yHf{lT|G4
zya6{4#BxFw!!~UTRwXXawKU4iz$$GMY6=Z8VM{2@0{=5A0+A#p6$aT3ubRyWMWPq9
zCEH5(Il0v4e4=Yxg(tDglfYAy!UpC>&^4=x7#6_S&Ktds)a8^`^tp6RnRd{KImB^o
z2n=t#>iKx<*evmvoE{+fH#@WXGWs$)Uxr<sPjul^54Bff9y%ZVHz+5}qAbDf+|fnm
zNd{_kS$6bt11Qz5?-m)?lU>tf?r>AaxV0?kf0o@oDboJ6z0cgP@A$;k>SK1UqC?Q_
zk_I?j74;}uNXhOf_5ZxQSgB4otDEb9JJrX1kq`-o%T>g%M5~xXf!2_4P~K64tKgXq
z&KHZ0@!cPvUJG<f9>4kw-0;tPo$zJrU-Nop>Uo65Pm|yaNvKjhi7V1g98;^N1~V3%
zTR>yWa+X2FJ_wpPwz3i^6AGwOa_VMS-&`*KoKgF2&oR10Jn6{!pvVG@n=Jk@vjNuY
zL~P7aDGhg~O9G^!bHi$8?G9v9Gp0cmekYkK;(q=47;~gI>h-kx-c<vM%*#w&fX{!h
zF%L>eM{ml$#8KI$4ltyja<rI2qq{$AR1|U_tFD)9Y-d_jShjldAw-)(k${x89fc)V
z^uj$O=9MXT2cL+;^v%uZ%TIiT&+A8q@<LEWivxLuc7cEhkMJup7#M4iRHWn;gs)|%
z*`|SUEl(kbPZ=F^TZ)n%ySX6erWcgVc`2wiVw2VTP%;PP;UMWPi0k}AaIl!DD+>qP
zki^cyDERloAb)dcDBU4na9C(pfD{P@eBGA}0|Rb)p{ISqi60=^FUEdF!ok{Gs;vb)
zfj9(#1QA64w*ud^Y<WE?99td@r;1MVEDo>sN5&PeiI>c`VioE8h)e}W%S9NMA55Gs
zrWL6l+@3CKd@8(UQLTwe12SGWMqRn+j)QZRj*g)Xua)%ayzpqs{pD(WWESJYL3{M$
z%qkpM`jFoqLYVv6{IbCkL?fEiJj$VG=$taup&RL9e{s(Sgse2xVJlw0h74EXJKt<N
zv_^nt|CWo1^pEn7x}Dzrxu#9#iylF>2<mjN(C1_G037wJ*c!9$6Ya%e(y$WXL!EqA
z8HVt{2cY#I$^(s5lIv2_V)0(hY4lKgWN5U}$n%K8Jg_QsDR2~!MLCfAxETJK@puD+
zRpJ+#PBP2wu|C*%vKJ>eX|dx<CQ&quy2)IJEnV9z;^O>z{->0)3W`JN7Bv!rLvRZc
z0tAOZ2yVe4g9iq826qXAg`f!*+}(o1;1FDb>kKexumFS40KvK0yH1_@Z=LgWZ+}(Y
zwYsa;OLz6tTA%gS=>8$=Z7pLh>|K2QElL)E=Q*(n*H`8R`8={-@4mTD-SWBOYRxV?
zmF(-rJB8^Wlp?319rTrh^?QEP?|Msxrv?WbJ-+id+V#F2Y4(JPJ6U9bv+U1cIIH^W
z)lg$_=g^Ma>2~Pyd_YOAv29Cb-U6DJO?NxnW7~QP*SmYi*vdUVuW#LWQ_u0`hymZi
zaQS3Nb^4`ro$>0G%zbXmr5|D|iq0R<;S@?kr0j5Ruq87-Z1>crx%EzVZ9#U;{?}ti
zW2W%*9MQg3Nbh%Ti6LhDd|-aFSgXoPG`mHlUU1iCHr>ru>DX?W_#13(`u*!Plu2OP
z6jk=2>BC0l)aw<WV`x+C!_sw{a5i*Q67F^#P-aA<I@z6VbJW-5&rwZfvvRk3_cA8b
z-o}<6m7#V@uDa<CVdlJ4d|5@tUf!yN<DjY-Ylj}w8VTHcITO{giPiM2=!{`C)-kgy
z4M#`;s$Hx(F&Ry_6@hE&#+WZxZsYohII;=<B$l#U>;HCmxoYD1i4b%m$1`DYC_^L~
zIEAnFcHvad=-aO3(_MI=9#`z6-9*_!&$?<%meb5;jG<wc(D1r`!k7AFaq^l6-TVCr
zn@T;NWtk;qx(I~IDg2;{VNza#Y9hnvC&&D^iJtYTc_&lLexMB!uC87mR>d5Qp=MGf
z6BD{%`L#TAOq%z%@*ib95Ey7NbUF=BlszVk3Iu3imD&*91N-ij%hW?W@~2TtdHTfP
z#n0@Xd7X8Dyu36n{k#PwQ~T~X7mAO^cNV+z<<Rr{6qP*fL{*O`It}aSc#<7ICz`zH
zfdvuUP1@TR@FL!bPH1@um7aB~aO<rmJ%*b)*b*mqm<2+)la8vi-b#-P?L4aM?FRQw
z!SL2{$6_lC;MwX~JFGU~u@(2B?<Z2dhI@qhN$Or_U*}$DGND-zz*x~AawYee{HE;I
zGAb(xm0Nq$##BQLFEgd@aqT*NJhB}}du8b8cj%ob49sgx?Oi-i5sJpioR>HO@3X-#
z_@rAn$k~(l@kciCC;&Qd*fWRI>=;fL{UPlciNDWyj$bX<#r^(r;EE8wwUVQm&7~QY
zCXRj!**r^xybAEPq>h3W$uvI1j=yNIyzkE_D7fpGw)OV{U*Uwm{xB;mEg2(|y|ICd
zMdQVqzMb-=XM6|E-a9kNh)^9lY`-DjhhHD1w5lufRcy+QLgJ47!fFn<KQi>e86#F;
zX{ufroVBEZJOY?rDo!;Te6aOZ^1SO!dYRxQ*2njyA~dCWawn)>!*k7~>8Ikt<J9hI
zLTxVl%^kbxFjaJKz4UwX+jy29ohPH6;RO0%T`A|oSHWhqWuNJ8tYd1Xp}S%w!~<wT
zHSeF;1&d?WDhsdZgTM&TfZ@=Pp`{?gU%*=Eo2o<UfasbP*Vgmv1Y;j}@b2Fxb@=4D
zWq$ckb3BOYn%N0MW}!64?YGvuPD`}=WgRB1BPo(kSV>&e*0>>V5ZbO|*1+2LFOqVe
zXHb!aMk03^h%&9L8GMy7UDI2Kev>V@(R}*Iu6x+!Hn4~D@wj`P%#Hdbf(lK{+DD7f
zJ&(v*mhn_e(R$^5L#bM^^Q@-!*b!l|+Xrb(q*MRFJYnrE7*xko!SJOy9LngR2|q5k
zY`Ioiu+YBfzF{Labszk-E#*BYQk>$()=xWEGZRKwY)*UxP}0dGuPLZOk<u~1pRF`m
zxYnI*6_BmyuVfiETJ#r=!}C__TJ(hS&_}hqJq6T(xXbQJ?{M?GH1d;1)n-8$1pDWw
zJw5OAAMQDHK*ksFYeeo`fz$TbpGy<)Wsk%<#FfYFVTT9*sy=H-wkS^x;7&PL{erf!
zzf{M*8sv9&hkoBZuv}-Nb}O!f7}9<9ZL1vRNUZ5T^4kV6WRoRqMQo_+AH>NJDI9Hy
zFjfwiK6RjhH#rHW#B0(MW}i%V`943<6@Z*Nd^JEP5uZonXm=u%AM>{H^U@&Jy*i0s
za_Da^xI6pMtXzHc{e~_ZcnKP*;=YL2Z^RmzDl{dJTk7*}E_h*NvgnhnxVKB59Duh~
zqouS_WoOR*{UvUw_K#OWz;gMracr%8>QQ&V*jv!8)ho;U8}9~8EU{N<=Z_gR%IpMT
zbkePUG_a<Uo93~%MM1nso9|UdE|j>fm=#|iIfFmdqkpLMGxY5D$`?I}&T7>TexU@v
zkBx09kG)O;09ckj#(_Uov6vv{{HOcr-%H#DUQ@*GzF8Zh{iSM13%fuB%>wjdU@3Nf
zlnYE!GTyNrqes|;nLFXfWU*Wg-9wmr=NBd$nCk+H?iwNvcd0Wab^3CT9a`>3V~oWI
z9=<ivyrYLX+hLVmYbCVC7nx>_H+N-Q=M<NIna#%7G#cG5P!5#|H6`sbgz{jBdvfcF
z%F@i>Q(io4u4mpdQ;k&5FXnKV5M7R`@WJ9h(GrAirO#XXOU{qQpk^B^Vd=Dt{wiqT
zg-#j9J~@o%H2;W9mg)o6@*Vo;BSs2*4HAHpDk02mndAsov08R_48zJZ@J)s7+hyCo
zy*0L#y)?AqZt-wX%+_Vx`8*A95OLHvs1$k~{h-_N<KA7r(+uvizi3XCB3#4TpjNrJ
zvai45nQG0Co%wk~tYgN!u~~y2n6k!jjXBHc$+Gq4hqTzEj>_vov_gHJE=`X>L?5K+
zD?u59=mjtImMvd1GsDytuYp{Iy<NXRrLZ4s+5CA`p}CBZMPL-T31R=B$JFH(h7Qq$
zc5;cO7Li&TJM=S4-dTKdpeXu!TD{GoUj}7yzx4mPG(VBO;Kq@rcXv?}P$X>UkW&?h
zF>$#`n$~bZ)KN0B$<p$VcVWI@lvp&2*7))!ZYjjYh^fBV(ceia`pW>XGeMYh&`;g8
zo_2-koaO6+8O!+L>SpIQbG(i;QW9UJi{Ecewlo?s&D!^>i$|#jaW}#HJuxt|W48=?
zb^Y&O$a1s5ddr8DIt!sD!t=y1g(d4GR(s;s-HfV$GXl&m;+sAAxB^rk(3_NjE$p#L
z*t4em?tA0d+XwRxN^OQwzbDZMuSE0J1)Ky{mq)^t4bnSl*)s>zNM@mMdtd78&ebHN
z`!(|lE5q-p+TsRaNnMXwALaN5QIZ2IUi^Z22tsN5>nvIO+YU}Q*xh6}ee6@rR~<&1
z(PB4z>9ZBUMXZwSMmd9-aKKsmJeJq^G|#JclOh*xf0?^e0(`40nsg1z)(48;4}B_(
zGwPI)yo|{oX{dVDL-5-aMGr;~vU1cPtJP5JM(sswz&Q`e<@0?y{YhsO9YK8EYJA;L
z>7oG_Mts+(wCBC*Md82#XdKw&J*IizR?9k^rf1r{Ot-&>V^ke{9nI9zavlcNkIJtN
z7T>?o|4rENk-?|lewZ(EfdR;%BUrzKJ^UkCpsM)EA9QHBVV8trT&*O(9?FO{MLTFL
z=5P0H+T6C^jAuX0k4U;~GM!x`!X2N~3_n?qXY$HI>x@(DHEy&Q3ucT1R6fj28wX!I
zC=&d$@bJ_v^%?W2Ngl}e8ww`b%BrN-PzGH;$@B2Ky1?%GMkm#~Okj(-Admyy;qya|
zOi7<TIqKLJIjsT6%xMurCppK$`tFA>3kr_pwt?5Nj<kh;AkqM0FqJNvpLG2%nBiEz
zf%ifK$Kw|EzR5(&`uXcro~^V8i}*)jhx5-t$rA$`c)ZqIf9DQr!qkCRbJWjUI$JZJ
zm$fJ9L9f6?UO=_r2e^Rac$+nqbYU6z^YgMBa7iN^LoJ4qw_S?6p!J<$X}7t17(?2t
zcE?oZJ$Jvt+q&PyLJYNC4pJ6B2Qde+jOF0Lu$QB|%Hl8GeqMD>3p=&H>81!w#>Agj
z(QXx{j0r=pTl>micAI_5vUw<3`Sht?Z}-j2Wx~<RLz32QGv22&J{94fr~V)YDG95g
zjef+~vo?CO%A&z(jqgjVppWOfXF_a0rF&LK$Mau_gV9Ob!+u&!{<c^Y1J5Po?`a)A
zQzS-wDNMkxF(uva11Qd*)ipedF7L8cQx?g7Pl*j{fhk~H=G{iXJB{lDwggu}3W3aA
zqf(*0b}y=rmt<QkiQ35c+=PEj9}{Iru7J~e%e$QIlUdUy@-hWEOf@ncen^;YeTZ*X
zH+U;(?Wy8Xl+h@nkoL^sjJj(5zUISeV;JWYIiaB7RDchD*VdjmbXj9)pN{CA%vsJg
zciJ6y-i)!8uXW&CN8ViTMaOYPM$w1*SL53`0@H8hO>F8DKCUQrsXl2?W8hur42(F_
zsSJ)_36&x6A|YkY6c<2a94SXbv~d>4CC4nkDPvf9Z5Fys^6^5r0j5=E>Cgy_Dk@tS
z%?c}9!qB?t6t8(XMH%le8UeNWp@Nsma~Ql+^3Bo%_npMryeQJz4V=BAqE~T?dejng
z3ge<X@Z7g2fW4F?C!aagtvam=!RFFVpJA`q1dy-E%du?YwT%+fTkMY4<03TZ)j<Oe
zuSu|TMbn$JCNKw9K<+@tJ({pU#md3G(`)NO28!Z^`B|&xuS!YWO}}^8(&l&<H`8f(
zO-EXMeXU|crFs+^NzF_IZ*xCTMAZi{Y<c;sK84v<>{fjCHoNAfYBvsfq;G%VL|j7t
z`X0sy1EEgpyD;)tS1x+fnv-?C@glP0{RCW}Ma?3qpoq_&IJAYOy3G#s`rsh5=3>`K
zkj``<PxYPrnJ%66XZ%$jT_UO;S&LzWfo&581S_54ry#ectge+aWQh>=;|*x5HSjZC
zXNvPLh372q;=+6ja|SC!R-`JcL}}wwskajjTUGTpL(1zkN-p?BA2lmf<wk(A{@fWd
zR@`1h3RtSO<YT(S4xL@1hiEAxTBBzva~C*l--DU9m2vX&A2fTNg49@_4&`2Bzy8!U
z)6qtF$FpZMEKdNYC;O-#lGOq92InNM@``qD2YvzcS>+J3WsB7!k`0Brx8^cLTF9<g
z@nKD{&MQpkhV&mNuFe;7?=GL>h)r+LZ$vsZo}`OpOs)?c6$hclR!R#MAeh|_DY|9r
zy+_3c%IO9h9X?ksp?an&>Lw;QeQ`T-Ku6HaK~H?E9-Z5$cZu{YU;1+-6B$|JD;%!^
zt(4l>F8}a-UkC4YtOxFHckhl4VK<o_&-lD0mk1#hZYAraLBA)XZd9SwQ&Pgn$a!)D
z;&eLCGu8&`Ky;&{YdGM4YZMiZi$_@v^1aVdy+K+*Qo!QYDDtW4@Os*LbJ00k{m)5`
zoRKnSu)novfL2Ts{!-4+5Y{b=o+LpM;89G7S{vXl;M_l=ND-Rc5qgt=ci7TpEo=mH
zL6*Xt9up_3hU63OR>r6P$P_O*U!)IDory%}Wz`YeFx6TO{y2Y${SBm?H9cTWV=WWJ
z`_*CGso!ZN>l@~_jkeXtV}<eU5O#LliK7g)klc(Z=e{4*h!dp)V6v<*N!NnT1w~8K
za~UIar=<m6R+`}h>fczfA{TUkyeD>)i3|NFGcCsBmK3HXp&ol_@GVs7PIpfULy!hi
zs+%KYgS%(n7_z_}6<X(k(VFudPeVYWZh9|epL*7btD&ckkCMALmGw(owKL=w(~r63
zOyHtRRzRvkW>)hblk~W#LZ@&2)fwm6xkFP%&Ju|MFWbNiTwy{{g-pV1RK`L&=RE2D
z4|g;~vd<LODHcrO&uLo^tGtrbwh8*iCTXkJcd4-eXXU0I?k1m)6`j}QSOp%!d{k#o
zIrMoZ12w1s%;qprCkWS}WH>8x<?cZds#+JB{z{||9jq*<HT!M-cBcH=;7~J2uQ_26
zvZro;_+w%PUpNkSI<TD8&2%vNAnp4avGA`e@UKhI+!{F{Jx<Cv<%&v?&9%YQ4BL2T
zaOOpQFMay>d|teYS%w!IlT4W$&FTrk-hcTADX!P?*f1YWEIRwq$Ys%^(Z9w&HT$>}
zsMD#6Df=uJrX!JHP7<>Or;e_Cf=}`!`qR=i8fBj)$6Lxx{HRzd8Tnzd0p>kSps{OG
zKJkml>bUj8$u|F=``l(-aMxWBC@CGZ#FXClQZ<4|&%jN}Tkg#q8z)=>Ly{$i0`rjU
zv<vjl^OND_&nt8%K_DY<c$hBE?ht3o;zMF?PraCx<3H?R+3c+lcVP-`!*=iR^+4=@
zjAXY+K30oPt-hFFYy6`C$csm;r=3u|c~FmFo6B7|^>t|QddO&i=91e?h3>s~i;+6{
z8X4i6a1wDLrSuE#W(zhan+U*Zq+8p3a))JFVF4ffaV51K^YgTs<ELvmzH15OGhhY8
zrA_+PnYK;aeddV!Pi3^WYTGZ2*J)4~@C%)8#kRVzSG2!MszRFau_EOo^?}G1$p^yr
zk#PoR%ZY0-+cfohw#0i(2hnkZfA7b9`g0$EfREag|7IgZEqyUPIUSL{ls?ZdY2jlv
zX?1Mzw~@8iav*U46179*NN~X0%-qa(h<B)RSSGS9k|=WNp6TA~=CbwUXG!l)zfkxA
zNej9!)gKN9qFfwPo;8s*!hnDPngF9Kp{ukrX|iXeI3(#zb*h?bb?@D>o~3;Y*NmM;
zx8T?y-N0uyWY(8=me-HUC9xtABvX5~%yg+Cp&XF$Bq=OcK6T*D7eZ2EmIoCFWm{$S
z1PNw8HDpe5hHeCusN8kdeb&f2#=3M^A~7YwJ7FRrhq*)PG9x?JIAaC<n&nyz&js(6
zJeGWn+?QRH9iX#RFkV(w>{MV}5}<q?f|v9)L^XT#O^Q+lTLo@~KU5xyfaaECe?QTB
zEU+ll%CA@S4EasNBgDg3P3g>g#7R$-Ly%)4=IUkRCGOR|XTMjn&okRmFjaO^YF5^*
z@)#MCBOBezD)*xQNxydlUyN?dW{fS(s-T`gv*0BEnk}<MqB*2*JFz@&Ut*5R*2h-J
z)_1&Q{C@mZhFSfyIyZ=2gNVh5&AtuX!f!}*i1VjIDopYKYu?w1#R<cS5`I@F1PQbP
z*(_N34x08$O$DXg^I;Q5K8>`BdmrbmPO8q8y(X$AA}*RH%I7Av!~84pudHb&%Q5-j
zt?=6x(iR?<^_7X0v6Ys#VAL}dKk^hcjI=|EY;kPcZ_w<*H`_*|N7SacaM1ERD@6ab
zg`!iTm7$URV+lpW_{V$ruR&A>jrX68k4x2wo$45}&wf7o<|o(@B!u-L@bKyQBAGwy
z4#}UrRAu>^>Vb6k2-th^>WjvP;Nl|i3WrjWv3ISkj{m{eAcQIW^_ndxSX@|8T(ASJ
z?_<Q%GX;J*nopDj?vlGTW3<2Bi-14h9Ft?$MJo-;vYeHFBv>$fcP2u*6uOBk-{d>^
z0vWlfGQMvysI%R=iE|A+!!Nw?C917EU*_$`;;)px?s83CRd3i_jBN)k#nR5t$dJ(+
z_sP;wG@Ad)^(3LRj7q}0b2O(b`|i0~5SYb%Sjk^*5ISZ-Ab+}DGu$-X1n^TF1Ndw_
zF|e*1)cI2%`TR&AW~XpqpFb!=3cHbS>np9hYD_Mr5}y5Y<hjKC>`SY^r7isA2Q4(z
zazRQEqWDKT2zIEbjSYdCPi1ZOGz80Nsl}gxO^<!<`)h}k*WrLKhVC9A^uqPrAX2rJ
zk_X_<UKVZj#SZ`e5i&Jvd|AuDABtCTp9RP@piFO@ZU#$^j4fEyi5WR4tQO|sRzdLJ
z86FxwO1hlidA6EQ5OI;XPTXTa$K&JwxgTfPhh!ZPwc^HMC{@|JRTI?xh^Ptzlf~Qj
z4+amGs<?A`M~9~Ge+{a1r{l~f$XZHt1Ik1~ki({=W}#a+O?yAslpyDBa!(JThcKg+
z`7_G`o=!47FD0IvP768*p<&Vtm`CtC?;Dj`fo;v%1qH|i1@RjM=o$pEJq4&d1&L7t
zjHm`Qe8@BW2ApUJb#%iMo6qv$oT6Alh&RB*5@4ncFm(r*OBC@so8*msJq8zql&b-+
z5<*+q@YE4P>DWMY0AV<2K&OL{&^6#@L1?lXu#6xSMh%3^5c*}oM6DQGY#(a^@z<&D
zF(43I9e&5`h|A$5!+UFuOH0>F3$shBV4`0#M4RSB8=6F0ZgIbq<2LQ$Hh^(kAJu=!
zt8ZGXTacD{(3W{V1$j_{Jc)Ka7<N6;sXR!iJaN-JXwp2f^gSr_JqZ^)=odUOg+0iG
zJ@H#S=vq9neLbjrJ&FH#F#bWI5hI@wqj2Jp)bXe%8c1>t6u}ho`4kF+4@t_0!mCBn
z)}o%eA}L)_L?=jw6BIfll7tb3n}?*yLt&XADa=rW>qz=_6s9ziOd5sXjil>FVFx3r
zf>Feewk0v#W9>Gp4GacTRr>Sd2T6dWi-{YX`v!D)kCWzG5xQB=?es5ON(%nkwUhNl
zV>@xkWWWv*N+{e$(SrExvN6BXzU(Hxlx27{VYHf+LpIbTO+Yu(ltMk<<mdQtfilQ%
z#zERxP>;)3A(LU@ytVYFkYvTa79idMtUFhfxx?P!)2F`prNWW#Fub#l>N2s@nh&n_
zA4{#}|AIs9|A4P0ZF%fy=hDN!t#ifH<)4u2kirK~JUpjQ-J+~cXOZI&dI<edX<Pe$
z<5K%Sv8eq|W{$&;<^B}h+C6HiudVR>ts;P}UeXslP6zKvpEKSN-$y>kJ^nw2tC9bv
zo(|lT@?vZ!{_l|d^8Yh)eEBh*5ABh<!=o}_%`M5uz0&2FvS#W)djCI>+Lzjw+?V)o
z#P<J#52aEke-8d*<DbLpV99;)|DC457DTn))TG@GiB9R>-W7361>E(Y4;@`sv;VKn
G`u_lkUM?>H

diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.woff2 b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/fonts/glyphicons-halflings-regular.woff2
deleted file mode 100644
index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18028
zcmV(~K+nH-Pew8T0RR9107h&84*&oF0I^&E07eM_0Rl|`00000000000000000000
z0000#Mn+Uk92y`7U;vDA2m}!b3WBL5f#qcZHUcCAhI9*rFaQJ~1&1OBl~F%;WnyLq
z8)b|&?3j;$^FW}&KmNW53flIFARDZ7_Wz%hpoWaWlgHTHEHf()GI0&dMi#DFPaEt6
zCO)z0v0~C~q&0zBj^;=tv8q{$8JxX)>_`b}WQGgXi46R*CHJ}6r+;}OrvwA{_SY+o
zK)H-vy{l!P`+NG*`*x6^PGgHH4!dsolgU4RKj@I8Xz~F6o?quCX&=VQ$Q{w01;M0?
zKe|5r<z7o5`*yS~8)MszG41q#5{WWPpy7G9^(-fD<g4HS2Pp6}MR#f7LIoFspeCvR
z3+c{Ov}|bDFijfL*xJ&DWaU}da`Er7tg~)(Y2IDkd3AD?w7jnSneG!-SaWI)p`xDU
zXH9Mys?(WBfmfBO!_){Max(NjX;ffVH@MAGD6y!?&l=$WE1+*S^Cx4)$U?A><_7CD
z=eO3*x!r$<gNx(8nyyp{U13{MWIQu>aX2iFh3;}xNfx0v;SwB<Fg``NKlv&}sOOia
zl_SskHz$qk-Tj7B2@DHwWBbat?O%&GCL=1*D=EFRpwKHcVF9o~HnwAo=XtT&qlRWE
zVi`v1=H&nBv?M!wAX!1fF?LWbbVvCAjN!ns70n|1u$9{ZL&9b)AXkF-t^%6Wna*`f
z*04(m<0Gx@4&<!XDochu+x!F|DAC{R)c4o_TK-_!s|@9}TbCv3Sp`&zta~M|$%-V1
ztq`DddvEXU8JrjLh=Ul_yYF^%B5>fGG+@Z;->Hhvq<wD;VB@ph6#6G_6lL5#3gkx~
zHFE%Z^IuN$3X)Ju)24Q9Ro)B9zI%GT-16@8|DPH7fB1}tA~RrY4U!xKmRBRxkiA|Q
zKr4+b2V=R(Yj3HIK~EcS6>fF4r__4$mU>Dl_1w;-9`~5rF~@!3;r~xP-hZvOfOx)A
z#>8O3N{L{naf215f>m=bzbp7_(ssu&cx)Qo-{)!)Yz3A@Z0uZaM2yJ8#<s6khOy@V
z&}wI!ds<}Wi3oZ(j|&tv|KA}5cx}QpZ^By#9KFAF@B1dVuQA$!NDxA6LE`KPadPU;
zQjo+AqqndYk0@McX!H;i$Tx}X(u#SHJ%&iNTJu#<Xz9=-I1o~2(*?vBfO^7b&8^8!
zI*Z@{F?FmY+=Z{Cp`Jcc{axky6qgRBtRkQEW;eW-3-wE{UVkT;s_VTolPg6pyu@CK
zSyeS%s7^u`F5b$ErP4Ux#VgLuk2sI{EPRQ3O?-?&iV@{?VSLbGh?0Noj@91Fh1H!U
z01AI>OGlzm?JO5gbrj~@)NB4@?>KE(K-$w}{};@dKY#K3+Vi64S<@!Z{(I{7l=!p9
z&kjG^P~0f46i13(w!hED<gesU<d5XH<k#ev<OXsrxsqH=M#%^{mn<fylX>Jga;*Eb
z`!n|++@H8VaKG<9>VDh(y89J#=;Z$ei=GnD5TesW#|Wf)^D+9NKN4J3H5PF_t=V+Z
zdeo8*h9+8&Zfc?>>1|E4B7MAx)^uy$L>szyXre7W|81fjy+RZ1>Gd}@@${~PCOXo)
z$#HZd3)V3@lNGG%(3PyIbvyJTOJAWcN@Uh!FqUkx^&BuAvc)G}0~SKI`8ZZXw$*xP
zum-ZdtPciTAUn$XWb6vrS=JX~f5?M%9S(=QsdYP?K%Odn0S0-Ad<-tBtS3W06I^FK
z8}d2eR_n!(uK~APZ-#tl@SycxkRJ@5wmypdWV{MFt<T5%<QMMP#rTv8Dn)!jr4End
z8!An$TjN_QZBN_|-%;s$96wO$ZrvL{QYl%F!EaP1Th9SiDvOmh5WrK}3{64{{_F&y
zrSMy`6AG<_-)~t&XssC4d+gCHeK9;{jV1y%Xrvg1Cy#-D2g;>YBUY#g-Vv?5AEBj1
z`$T^tRKca*sn7<ZK}0!&|7AkCI;jT+6~rYE0#BU5AkxqT6Y+wF*hUg{if$klH$Np(
z14lF>gt%s@XUD-t>bij-4q-ilku9^;QJ3Mpc`HJ_EX4TGGQ-Og)`c~qm51<|gp7D@
zp#>Grssv^#A)&M8>ulnDM_5t#Al`#jaFpZ<#YJ@>!a$w@kEZ1<@PGs#L~kxOSz7jj
zEhb?;W)eS}0IQQuk4~JT30>4rFJ3!b+77}>$_>v#2FFEnN^%(ls*o80pv0Q>#t#%H
z@`Yy-FXQ9ULKh{Up&oA_A4B!(x^9&>i`+T|eD!&QOLVd(_avv-bFX~4^><K+`NUjl
zUA`n*5<n{f%?!4-)qpuLcwM`4xUD6=$ki+M2U1n6MQw*G7TmC^qdRw?b*#WSFG;)w
z)HldC)uy>o{%mzzrg_i~SBnr%DeE|i+^}|8?kaV(Z32{`vA^l!sp15>Z72z52FgXf
z^8ZITvJ9eXBT1~iQjW|Q`Fac^ak$^N-vI^*geh5|*CdMz;n16gV_zk|Z7q8tFfCvU
zJK^Pptnn0Rc~<r0!CgppAqmePbR1#5Tubl85FQ4lTg)+g8UrHdY9Ka1?3OcBFeRlE
zzYpoom?Fp2nZ{a4hDYQEn^Tkbje;(-5yZ};a0h|L)2vg*F=grd*^|WBo1OU#S-~Fv
zcDpzl2xPHbu|lC2Y@t*8{!%Fh(i78$=lQReu7C@B0!fO~hV;@Uos_RW`!LXs+NQHy
z@F$dGXT35dG@wzAM4<{W&5|=hvLeY%j@6DPfZK{_NfpP!+NaV|XArkdMWmsrp|+Y0
zNxjY}2dUoGHC2{GT?~El9hnDW?KmWthwM10KJ(#NAOW%mXq6&t9<|PZ;%Xe7E+vTD
zfEY+f$1Mv<nx@^jBQcU4Ljg4P-dWxOH-zo(t`hB8-Ik$N3~vY;K2XYCp*Fv_2blJm
zPc;8GW*QB>egGIAK}uv<M%BWA$}X1PZ}r3ec_|6TIBdoXwlXq~Ws001rqVG;8=+eP
zbcwJ)A;^UcGF*T_xCk`{#MzU|C0f_+{M&2Zk_ZN2^_{NVK>99VZm2WLPezQQ5K<`f
zg{8Ll|GioPYfNheMj-7-S87=w4N0WxHP`1V6Y)0M&SkYzVrwp>yfsEF7wj&T0!}dB
z)R~gGfP9pOR;GY_e0~K^^oJ-3AT+m~?Al!{>>5gNe17?OWz)$)sMH*xuQiB>FT2{i
zQ>6U_<n)x#cJkNUc|V)^vL|15d~)i9%UIk7`0hyQQOX6dwG{=#lR`i}3*A_(-}<aV
z6Bs$mG_#ni!&Ir*LWx4DW1y|U7^_H;P@~Q(g7S%hUz3y7SxDI<tR$+-%3z@EM);%g
zLObKN!YkVml!Zc2Qm{14ydZQ0tvYlF^&(mmMY>8}Ay~r4li;jzG+$&?S12{)+<*k9
z<^SX#xY|jvlvTxt(m~C7{y<eW|86c<M_B#9!3F3@>{3g>7TX#o2q$xQO|fc<%8r<e
zu{@uYv6wTaDS(!pU?WCA5)2p&Mj+Ip;0XTMc8zb%VkCGB2k$Gg;JkJFCbWHte9BlD
zCR^F6kT^z*ExAP|FFuMd7tu$>E@A3=UW(o?gVg?gDV!0q6O!{MlX$6-Bu_m&0ms66
znWS&zr{O_4O&{2uCLQvA?xC5vGZ}KV1v6)#oTewgIMSnBur0PtM0&{R5t#UEy3I9)
z`LVP?3f;o}sz*7g<a{wL*dZXtI5+zcTbzINq%3Vx?sa^oH8-vb96eb6k)$k`VM?dj
z8y1_mUUalhn>5qdTxJl^gk3>;8%SOPH@B)rmFOJ)m6?PlYa$y=RX%;}KId{m<ya`&
zf~xC+0#uqMzpD#MstCV?tz>9R#2=LNwosF@OTivgMqxpRGe}5=LtAn?VVl6VWCFLD
z7l#^^H8jY~42hR)OoVF#YDW(md!g(&pJ;yMj|UBAQa}UH?ED@%ci=*(q~Opn>kE2Q
z_4Kgf|0kEA6ary41A;)^Ku(*nirvP!Y>{FZYBLXLP6QL~vRL+uMlZ?jWukMV*(dsn
zL~~KA@jU)(UeoOz^4Gkw{fJsYQ%|UA7i79qO5=DOPBcWlv%pK!A+)*F`3WJ}t9FU3
zXhC4xMV7Z%5RjDs0=&vC4WdvD?Zi5tg4@xg8-GLUI>N$N&3aS4bHrp%3_1u9wqL)i
z)XQLsI&{Hd&bQE!3m&D0vd!4D`l1$rt_{3NS?~lj#|$GN5RmvP(j3hzJOk=+0B*2v
z)Bw133RMUM%wu<VkMnpWWVN&K8^*s5oqf-N`_{oZG|c^)?fe5daI7j+I{GC?6;bAe
zUSXe$6^9Vy1KrCfsOM#a9`s`Ns00)gifk>_+$vbzOy?yk#kvR?xGsg-ipX4wKyXqd
zROKp5))>tNy$HByaEHK%$mqd>-{Yoj`oSBK;w>+eZ&TVcj^DyXjo{DDbZ>vS2cCWB
z(6&~GZ}kUdN(*2-nI!hvbnVy@z2E#F394OZD&Jb04}`Tgaj?MoY?1`{ejE2iud51%
zQ~J0sijw(hqr_Ckbj@pm$FAVASKY(D4BS0GYPkSMqSDONRaFH+O2+jL{hI<DV209S
z)XR~VgGa)M^-;}1&#S3{@xzwR6~@}^V}twZy;sZcsTJr0S5s{W-N3D9v%1<w%kip_
zCaGQ)_4?SD)S-wrJ3}!#J==&-iR8Kz)nLlnoRC&l|C1fmMV-bqBD82vt61QE6dSAF
z*iJKFHPeAzx_T}Ct>ltJSJT~e)TNDr(}=Xt7|UhcU9eoXl&QZRR<9WomW%&m)FT~j
zTgGd3-j}Uk%CRD;$@X)NNV9+RJbifYu>yr{Fk<C+0Z7wvVjq!VGjwL>O;p>_&njI>
zyBHh_72bW<C>;8}oGeY0gpHOxiV597j7mY<#?WMmkf5x~Kf<RrP*$<_TMcAZ<977s
zG-{sG-<y$aNL=Fg)E11z=zEyh@&Zlt<-N$5T)Lf&<pEj#+<|}`9f4puO~YVB6Jm!v
z!37dKVIz9-hLJpqcp?V#EU09HXG3YfV3A{zn-)630R_n7NwnfVYInEHeM$w$$$F=a
zUOHAT9sN4j{@RNZd%w-R1}Mm~Ligs&9Lc5wlF9RUjyxD1L}DW%Q=_4K^pa5dNOiqV
zfiDy5dvZ1fJ9kyK6XwwJ5_8s27to%QJf!DXz~EWpbJWE5-c5LQu!j^}nqmNv+H<%h
z5ssJ<c#g^_qKPkFd;?x87%*ynZQ!gsBex|=gx*awoyTyPQBBvZ@H#pgVq8NqXJ!Gg
zuwA`+(oi^5nIKiFlTl*U=ybY+9YY+wRG&TyaG*FVHfLWlmTb<UHm6AP5eOjK&H%@T
z4@jLl_YGv5Jmy2q={B>k*re(&tG_mX<3&2cON*2u%V29tsXUv{#-ijs2>EuNH-x3)
zPBpi+V6gI=wn}u164_j8xi-y(B?Au2o;UO=r6&)i5S3Mx*)*{_;u}~i4dh$`VgUS-
zMG6t*?DXDYX0D2Oj31MI!HF>|aG8rjrOPnxHu4wZl;!=NGjjDoBpXf?ntrwt^dqxm
zs(lE@*QB3NH)!`rH)5kks-D89g@UX&@DU9jvrs<xLUb7(M^4Zb6^^3tZR7!hc=SMz
zY6*prxO{uSb2$<j;JZB!{&!N@FRiO@L`rit7J5FDJBlZG-SI^R&~X)B26E|MJx3Zp
zy@feJ>Y)aI=9b4n<X@Mg2JK5FwM5CTI(2DlYHRLE7-h-ky&9}X`qiByDxrocwQ6k!
zk>Py3bfdX_U;#?zsan{G>DKob2LnhCJv8o}duQK)qP{7iaaf2=K`a-VNcfC582d4a
z>sBJA*%S|NEazDxXcGPW_uZ&d7xG`~JB!U>U(}acUSn=FqOA~(pn^!aMXRnqiL0;?
zebEZYouRv}-0r;Dq&<B?o>z9>s#Rt1<!G80gW3Q`9g34ikcEkn<~yB0GE=440i1w9
z%Vr=2{=&=rZq4E{&?AkG<{r866K366I$gg?dF2R5T^g;GEw`9Q*Nk^(b|;|+1mb*%
z#4u&?3d3JFi15;ot8Oc19^cux;^0|4tLG@q3aUT$?2-_vk$Lj@p(S^1tSf2`gC-^+
z=%QnjUZHg-onrhZ@o1lIHV_2Dq?*qAxhgUYKOD3{$4MNkw#KqGMg~{D*qK}6#+(MI
zLiJU8?@7)@l#?NnZ90q6`<!@a)Mc05$F6R?dVF0a42_U&5!rIVRk%it+OLoWl=%^V
zt}(_79f^HAArEdKM!qJXXY$(d|4@mB-2tz!8yh<&*Y>HL`0p4bB)A&sMyn|rE_9nh
z?NO*RrjET8D4s(-`nS{MrdYtv*kyCnJKbsftG2D#ia@;42!8xd?a3P(&Y?vCf9na<
zQ&Ni*1Qel&Xq{Z?=%f0<LS^x97`leNoS?M1&H-Xn(H4XTZqAYsYIOp+zQ7v^2WLR!
z_a_8#QR|eBZg?(rHeyy)Ce#d@UAa5k@2V9cLthMp76uClo{creD&Bgz9m%@;ZGciy
zb&;xZf|B4Crm;}`+FCG!wta2!yrIkn%Jpu&re1E<PjbmrrsBbowaz-9RpTeuXu#&D
zFm4Z8p>SRqQt5m|Myg+8T=GDc)@^};=tM>9IDr7hdvE9-M@@<0pqv45xZTeNecbL-
zWFQt4t`9>j8~X%lz}%We>Kzh_=`XO}!;4!OWH?=p*DOs#Nt({k^IvtBEL~Qafn)I^
zm*k{y7_bIs9YE}0B6%r`EIUH8US+MGY!KQA1fi-jCx9*}oz2k1nBsXp;4K<_&S<R|
z+!NEpcbfYC>N}}w<)!EylI_)v7}3&c)V;Cfuj*eJ2yc8LK=vugqTL><#65r6%#2e|
zdYzZ)9Uq7)A$ol&ynM!|RDHc_7?FlWqjW>8TIHc`jExt)f5W|;D%GC#$u!%B*S%Z0
zsj&;bIU2jrt_7%$=!h4Q29n*A^^AI8R|stsW%O@?i+pN0YOU`z;TVuPy!N#~F8Z29
zzZh1`FU(q31wa>kmw{$q=MY>XBprL<1)Py~5TW4mgY%rg$S=4C^0qr+*A^T)Q)Q-U
zGgRb9%MdE-&i#X3xW=I`%xDzAG95!RG9<s#0S@%P{4ssMj6|f(PFTtK{&eg=M$et?
zer_yKYB>)s?v_5+qx`7NdkQ)If5}BoEp~h}XoeK>kweAMxJ8tehagx~;Nr_WP?jXa
zJ&j7%Ef3w*XWf<k`Dtf*esPy5LFqg?XcIB9IkPk2PVCIR^-+n7<HvnNOxS;rSNY$k
z!q<-6euEMl;SCbnVwt5PhJlC8e8)6(eeUqB*8$mMnR$Q&;ETvMu%R;lTOg&_)?8$`
zEVa^()w5!O5o`IR%tYnnz9leJ+<2|7dp$e$)VGU<0VsrN2!{)e*i2Km_!HkTy_op@
zsnIk4PS0pBq&7e1Cq-WNe*ebQP_BP_b6V^hnOf6Jl*FDBLVJ=#%yjrBiM`Z%lGFDo
zwHH-yVfi&trZbO`$d`z6e!q^9z6z!R^x64FT@j!px;*Fv`gCn5ntcrW!_Q4ZK!=`N
zoJV-<2+l^+1!xdB0GlIyi1aL@Bfyw-3;j%CdMMseXt6XU(|7@G1YlJY;FZ<6E=3Wj
z<90D&lAbgUUnehHsAREwMtG=6$~8Hjj0}TB^$|Sk>?V*nR)|IOMrX;$*$e23m?QN`
zk>sC^GE=h6?*Cr~596s_QE@>Nnr?{EU+_^G=LZr#V&0fEXQ3IWtrM{=t^qJ62Sp=e
zrrc>bzX^6yFV!^v7;>J9>j;`qH<hDH19MMT1+`8y)sG%_MO<QWhJX7}-!&K#jas?d
zy;gZO2VIR5z1H^NXfFwADaHGprj9Kyw6No$Yqd_S(T={z#2gbNW$Y;;P#5j-{0Iqq
z{Yz6(ka&r*xSggxVdEyX?Y53QVJz#Wj2B2nNYC=~i46iAU6ds(WkjB{Reo2yZ2cFH
z1KOLbJ7d1#n3MMhVE&yyAfdi+kxdP<3vBD^E`m_9S2y(rq1mIzE*dZNSDYg|SM_8n
zmO6SnMKXq{pYHbK`f8yE_&F1K$=pH5Q;<_Q=ykx1w&1KgW?4A9Z6Hh0ujuU5gw(c)
z&7nRlgcqO=4PWSIrL^%aZQ)})*BEYH(5EdFt~HS|W2m{IuJL*etT$vJP@H=66XgN5
z8Q}8pvQ~ulll!Gl9Z+^=yi)!QQl!(y;INZ9hFT3RpTQp9WD<t=u9}FyLz|lM^T%K;
z_F;6vJrfj%Yd?0P?KC4$4d|po%oYftn%JedFIyM&26HYvVHGfC#(R&nCXS+Z{t)t^
zVSWJ}WdR7#^Eiv>DQ4uc92eVe6nO@c>H=ouLQot``E~KLNqMqJ7(G+?GWO9Ol+q$w
z!^kMv!n{vF?RqLnxVk{a_Ar;^sw0@=+~6!4&;SCh^u<XeQK8Ry4Gm-T(Vj*P>tT=I
zo&$CwvhNOjQpenw2`5*a6Gos6cs~*TD`8H9P4=#jOU_`%L<QahFX*>!W;$57NjN%4
z39(61ZC#s7^tv`_4j}wMRT9rgDo*XtZwN-L;Qc$6v8kKkhmRrxSDkUAzGPgJ?}~_t
zk<g7QLp>woGS4=6lsD`=RL|8L3O9L()N)lmEn-M15fRC{dhZ}7eYV%O-R^gsAp{q4
z!C1}_T8gy^v@SZ5R&Li5JMJy+K8iZw3LOGA0pN1~y@w7RRl#F()ii6Y5mr~Mdy@Kz
z@FT4cm^I&#Fu_9I<Lt*^+@1e0b(+y4E>X(HAFP{XLbRALqm&)>m_we>a`hfv?eE|t
z?YdDp2yAhj-~vuw^wzVDuj%w?exOcOT(ls(F*ceCe(C5HlN{lcQ;}|mRPqFDqLEzw
zR7ldY+M6xe$$qLwekmk{Z&5cME$gpC?-8)f0m$rqaS|mj9ATNJvvyCgs(f2<G?s#j
zlCyq7V=W|3+#5GMRv3jyMSve^Et#Ab=u*f=lMF{rP2hXbA~Thc4Er=Whg%hdYCNEj
z;kX^FSJSNv%HwF&_?QB}Y>{r;2E!oy$k<WRsM?7~2V-%l??892FJ&Nc|D((m<^gBU
z9InVbh@;KM5Dz*apz7ga>5{jik#(;S>do<#m0wVcU<}>)VtYmF9O0%(C>GDzPgh6X
z9OkQLMR~y7=|MtaU!LDPPY7O)L{X#SC+M|v^X2CZ?$GS>U_|aC(VA(mIvCNk+biD|
zSpj>gd(v>_Cbq>~-x^Y3o|?eHmuC?E&z>;<!5?S(?^O9r&S^X+pEvdora!<1(g^2R
zF}c9cL+{oKVWq$6?rtz|xpFbl44EDmFIBCjiJb-Y3(jwkFAqQImExJNVfoWvtZ)_T
zk4V<B4M+9tw4kQKIG^34KQl&&Fz^SMfZ1Rr!}rgT#M3;D3P+k<)V-V;IAUzgk0mWE
z!YO?vo&!phIu^NE0<F?&&>Ij`%{$Pm$hI}bl0Kd`9KD~AchY+goL1?igDxf$qxL9<
z4sW@sD)nwWr`T>e2B8MQN|p*DVTT8)3(%AZ&D|@Zh6`cJFT4G^y6`(UdPLY-&bJYJ
z*L06f2~BX9qX}u)nrpmHP<M#fk<GgBNMKYA_9QYh8<vJ<9@F-~(AqGXdLPEfJFTIn
zp64R)U5xUof+~(#vZUz{EaXw4SAp0Y;12Y-Y*XpA#>G#La#tiZ23<>`R@u8k;ueM6
znuSTY7>XEc+I-(VvL?Y>)adHo(cZ;1I7QP^q%hu#M{BEd8&mG_!EWR7ZV_&E<NEPM
zcuS4Ye{%Gqtc-n!er+G|*<cWkM>GO;d(hGGJzX|tqyYEg2-m0zLT}a{COi$9!?9yK
zGN7&yP$a|0gL`dPUt=4d^}?zrLN?HfKP0_gdRvb}1D73Hx!tXq>7{DWPV;^X{-)cm
zFa^H5oBDL3uLk<C+v0>aFDWgFF@HL6Bt+_^g~*o*t`Hgy3M?nHhWvTp^|AQDc9_H<
zg>IaSMzd7c(Sey;1SespO=8YUUArZaCc~}}tZZX80w%)fNpMExki-qB+;8xVX@dr;
z#L52S6*aM-_$P9x<jdu9ktlJz@92>FuIui;dN#qZ_MYy^C^hrY;YAMg;K`!ZpKKFc
z9feHsool)`tFSS}Su|cL0%F;h!lpR+ym|P>kE-O`3QnHbJ%gJ$dQ_HPTT~>6WNX41
zoDEUpX-g&Hh&GP3ko<AA>F4##?q*MX1K`@=W6(Gxm1=2Tb{hn8{sJyhQBoq}S>bZT
zisRz-xDBYoYxt6--g2M1yh{#<qP09xNr@s6w?MS->QWFCISux}4==r|7+fYdS$%DZ
zXVQu{yPO<)Hn=TK`E@;l!09aY{!TMbT)H-l!(l{0j=SEj@JwW0a_h-2F0MZNpyucb
zPPb+4&j?a!6Z<r#zSSW!Qu(5~6_6s0G^U8i@%ox>nPTB>$t`(XSf-}`&+#rI#`GB>
zl=$3HORwccTnA2%>$Nmz)u7j%_ywoGri1UXVNRxSf(<@vDLKKxFo;5pTI$R~a|-sQ
zd5Rfwj+$k1t0{J`qOL^q>vZUHc7a^`cKKVa{66z?wMuQAfdZBaVVv@-wamPmes$d!
z>gv^xx<0jXO<J6=m}BiiJow`eU@2UA*K~Z_jqm?*Cp?B28V2;3;6C}+*8byL=EIJc
z@2%))H|zSX{#wNl1dKR;V_`{wA-N5-aN?q$&CIR<EVd6v!|e;ZYX_h;K*-tj_Xr#R
zVD!mpcMXWrZqS|`IB=hKzaZzy6X`0CowC9wPYMg&9n}1avJ{}*L0iZ!p`>z;7HIQS
z4RBIFD?7{o^IQ=sNQ-k!ao*<ZRhqeGmf|{bY%Roxqzv&YHX(&*=PS#s1OR(zw~6*G
zAZll^YspPb$=6UL<F@2FynT_exO*?%>+V*|-^I2=UF?{d>bE9avsWbAs{sRE-y`7r
zxVAKA9amvo4T}ZAHSF-{y1GqUHlDp4DO9I3mz5h8n|}P-9nKD|$r9AS3gbF1AX=2B
zyaK3TbKYqv%~JHKQH8v+%zQ8UVEGDZY|mb>Oe3JD_Z{+Pq%HB+J1s*y6JOlk`6~H)
zKt)YMZ*RkbU!<JI!}T{8zEt+(a&daxMztju*ROn;npHenq}*@86I)b4J&uF~&?iJt
zN?o)&ELAxfueHiio3Ybyik@o*@icyb9qQo*!QuvA1&u?hUYT)4qQ$O|oMH`uQ%7^!
z_}}e+S%sZ4PL@FquF`ewt{)}v@KZ#Df*{vuY6%Mec{@2I-?T|VsMToX1VvAe%n^j)
zvdeu6s1|35v#f;_moF<I`PGAy?=_uDS;`<l<OfIk_>GPHzJltmW-=6zqO=5;S)jz{
zFSx?ryqSMxgx|Nhv3z#kFBTuTBHsViaOHs5e&vXZ@l@mVI37<+^KvTE51!pB4Tggq
zz!NlRY2ZLno0&6bA|KHPYO<dkI`ky_l{+0el>MY;;LZG&_lzuLy{@i$&B(}_*~Zk2
z>bkQ7u&Ww%CFh{aqkT{HCbPbRX&EvPRp=}WKmyHc>S_-qbwAr0<20vEoJ(!?-ucjE
zKQ+nSlRL^VnOX0h+WcjGb6WI(8;7bsMaHXDb6ynPoOXMlf9nLKre;w*#E_whR#5!!
z!^%_+X3eJVKc$fMZP;+xP$~e(CIP1R&{2m+iTQhDoC8Yl@kLM=Wily_cu>7C1wjVU
z-^~I0P06ZSNVaN~A`#cSBH2L&tk6R%dU1(u1XdAx;g+5S^Hn9-L$v@p7C<o$=Hu{J
zxrz+#TM>CF&PqV{Z?R$}4EJi36+u2JP7l(@fYfP!=e#76LGy^f>~vs0%s*x@X8`|5
zGd6JOHsQ=feES4Vo8%1P_7F5qjiIm#oRT0kO1(<jgC4I6wQ2{Xo|wjm0krd64efBC
zGt(LP9FC(njlia=(c_lTukVx-yR9~Gt`YfGKRT==f^$Uqz)t!SwGPI)kuvX+Zjvmv
zgh<^_T!LG;_|>?Z_Dk6<DV?iVez|GsZJ9q9|E_~n&^oZp@ZP#r)@50Y)8mRQBV<Zt
zDX+2G&swV0HIzU2B)jGgp<HCCR~bCFxw$OKhJS{dJFnQcxWhHg&GJ*Y)wr*`8kbb7
zRF?6Y&IrteW+;JBSq`vvJy8vQL|A_+2fW`8-8lH@zNvF93Bm{k%c!o-fCV)*0t~GU
zSfWy;Y#>oX&j=Xd8Klk(;gk3S(ZFnc^8Gc=d;8O-R9tlGyp=2I@1teAZpGWUi;}`n
zbJOS_Z2L16nVtDnPpMn{+wR9&yU9~C<-ncppPee`>@1k7hTl5Fn_3_KzQ)u{iJPp3
z)df?Xo%9ta%(dp@DhKuQj4D8=_!*ra#Ib&OXKrsYvAG%H7Kq|43WbayvsbeeimSa=
z8~{7ya9ZUAIgLLPeuNmSB&#-`Je0Lja)M$}I41KHb7dQq$wgwX+EElNxBgyyLbA2*
z=c1VJR%EPJEw(7!UE?4w@94{pI3E%(acEYd8*Wmr^R7|IM2RZ-RVXSkXy-8$!(iB*
zQA`qh2Ze!EY6}Zs7vRz&nr|L60NlIgnO3L*Yz2k2Ivfen?drnVzzu3)1V&-t5S~S?
zw#=Sdh>K@2vA25su*@>npw&7A%|Uh9T1jR$mV*H@)pU0&2#Se`7iJlOr$mp79`DKM
z5vr*XLrg7w6lc4&S{So1KGKBqcuJ!E|HVFB?vTOjQHi)g+FwJqX@Y3q(qa#6T@3{q
zhc@2T-W}XD9x4u+LCdce$*}x!Sc#+rH-sCz6j}0EE`Tk*irUq<m0`(;!&c&G7p#_P
zOJ|kT&v8z(QpAQ%C~^@e!Ck!ICE1vSkA<!Djfg-q)Xjj-!hve17Fw+LN`@{UJN)Br
zZQc5>)y^za`}^1gFnF)C!yf_l_}I<6qfbT$Gc&Eyr?!QwJR~RE4!gKVmqjbI+I^*^
z&hz^7r-dgm@Mbfc#{JTH&^6sJCZt-NTpChB^fzQ}?etydyf~+)!d%V$0faN(f`rJb
zm_YaJZ@>Fg>Ay2&bzTx3w^u-lsulc{mX4-nH*A(32O&b^EWmSu<mNHl&EF)N<Qwv@
z+ghjNCfO8{=RX6l;$%bV;UJwTS<t3aZ9alZA|`Nj-rR_)P~(S$140`CMywS0w4K@n
zvEbSGG>k{#HJk}_ULC}SB(L7`YAs>opp9o5UcnB^kVB*rmW6{s0&~_>J!_#<Q!IQA
zfO6pF51Khiw-3ES&zJ|$tcLa{0mAHdM*u;#&JjS6&2$71z|3e-)lO=LCK!MP<y1Y+
z19)^hGF`6{P@#NOEe8oq!=8hZ$>+cEWib@v-Ms`?!&=3fDot`oH9v&$f<52>{n2l*
z1FRzJ#yQbTHO}}wt0!y8Eh-0<gy=!05)T$dd<p&_-XL+(loOF(KU||XB_8&Ud`&j6
zW~wWblPi)_Dt+fy0AJi)GpeZiwq|YIuGrGcv(nscAa@~_m+trFF56NgiRrAWJI3uF
z`lhjQpmFmzF^U1!<RrqC-I>*|Um3vjX-nWH>`JN5tWB<ptoGg-$7O92<yOQsP=C)b
zJ`}#bAW@wa=e0GehF6uTNUcd|*Ba&dCiyhdjY(|NMK^uobI9q$ZChi=zU%>_gnW%;
zUJ0V?_a#+!=>ahhrbGvmvObe8=v1uI8#gNHJ#>RwxL>E^pT05Br8+$@a9aDC1~$@*
zicSQCbQcr=DCHM*?G7Hsovk|{$3oIwvymi#YoXeVfWj{Gd#XmnDgzQPRUKNAAI44y
z{1WG&rhIR4ipmvBmq$BZ*5tmPIZmhhWgq|TcuR{6lA)+vhj(cH`0;+B^72{&a7ff*
zkrIo|<cYW*47-TiTWhvB;>pd-Yxm+VVptC@QNCDk0=Re%Sz%ta7y{5Dn9(EapBS0r
zLbDKeZepar5%cAcb<^;m>1{QhMzRmRem=+0I3ERot-)gb`i|sII^A#^Gz+x>TW5A&
z3PQcpM$lDy`zb%1yf!e8&_>D02RN950KzW>GN6n@2so&Wu09x@PB=&IkIf|zZ1W}P
zAKf*&Mo5@@G=w&290aG1@3=IMCB^|G4L7*xn;r3v&HBrD4D)Zg+)f~Ls$7*P-^i#B
z4X7ac=0&58j^@2EBZCs}YPe3rqgL<Jxn$r!S8QWfkb&3miwnf<3dO#?*0r^D`z@0O
zyL}HbgfghMrA1DVzkMTz<h8XjNM2zx@b$YHrE<H$adW4nu!w{$k5e-y$OIJc^n_-#
z?T4cd%<Il(cWf@2Jy-ZR<%BHt;L>AA1L3Y}o?}$%u~)7Rk=LLFbAdSy@-Uw6lv?0K
z&P@@M`o2Rll3GoYjotf@WNNjHbe|R?IKVn*?Rzf9v9QoFMq)ODF~>L}26@z`KA82t
z43e!^z&WGqAk$Ww8j6bc3$I|;5^BHwt`?e)zf|&+l#!8uJV_Cwy-n1yS0^Q{W*a8B
zTzTYL>tt&I&9vzGQUrO?YIm6C1r>eyh|qw~-&;7s7u1achP$K3VnXd8sV8J7ZTxTh
z5+^*J5%_#X)XL2@>h(Gmv$@)fZ@ikR$v(2Rax89xscFEi!3_;ORI0dBxw)S{r50qf
zg&_a*>2Xe{s@)7OX9O!C?^6fD8tc3bQTq9}fxhbx2@QeaO9Ej+2m!u~+u%Q6?Tgz{
zjYS}bleKcVhW~1$?t*AO^p!=Xkkgwx6OTik*R3~yg^L`wUU9Dq#$Z*iW%?s6pO_f8
zJ8w#u#Eaw7=8n{zJ}C>w{enA6XYHfUf7h)!Qaev)?V=yW{b@-z`hAz;I7^|DoFChP
z1aYQnkGauh*ps6x*_S77@z1wwGmF8ky9fMbM$dr*`vsot4uvqWn)0vTRwJqH#&D%g
zL3(0dP>%Oj&vm5Re%>*4x|h<Em3JO)$O&GXE=ft3p^9G|#?0DwWLK`p_K)+<TTv{{
z-sme#4+Oqqf)?$*$pWS2gvP{&alHNwIjdG2eeVgB&W~2ncQkQT<TEB}+r+U*Sz^2(
z{JDq=6~A;9bd6M;^@ummf%1~8*<luPLU&L(KPlUFmFbIAFWF(Em5xC%IhGNzYpP8O
zT+`%G-QRPYJlIrWo{iAsK!Q9!P2vkE5P#|jye^?ECnY~D$0dPb9DZfa1?v)yz@3g&
z;g&G9%`bXU)%GaSxc!s&q+yw?s&G0kHmhpF|71o$Tvo0$rpbSM(^6^d{uv91%{b|=
z$*Kl!b^WeJ@0d+rhNnHIz4cl+;iLmd<L-)VhjV!~YbEu}d>1J2X*mK5BH1?Nx_#7(
zepgF`+n)rHXj!RiipusEq!X81;QQBXlTvLDj=Qub(ha&D=BDx3@-V*d!D9PeXUY?l
zwZ0<4=iY!sUj4G>zTS+eYX7knN-8Oynl=NdwHS*nSz_5}*5LQ@=?Yr?uj$`C1m2OR
zK`f5SD2|;=BhU#Ama<P~$VvhmI_^8ZNrt}1AvOV7X(sz*+2GbCZLT;rBdYe9QGvD6
z)XZ03krf;EL7R4cKP%`*;hM_&31edpDiHr|`}C4$VA4K?4)t-d*ee|SqdnPMHN?%7
zx3<>TKe9QaSHQ_DUj1*cUPa*JICFt1<&S3P3zsrs^yUE;tx=x^cmW!Jq!+hohv_B>
zPDMT<UQS`;VV^r@irLILT~0+N33M1<u)sr18hR(<Wra9eQt=0KCN|yzvNvA<AN<3k
zV|hxRkue$##Qs23TChJ;07NqT3L1xe)KK-*%TLpc>0D&08dC4x@cTD<NY(g*?y)&(
z$O8b2Q6sg#wt{+cv-4vv@-+5_NBvTr6Ex1qad@WizC1F1SdwV9_ihN`8RHq?sk5jC
z#WILtbwaI9L(u>$o1$x%So1Ir(G3_AVQMvQ13un~sP(cEWi$2%5q93E7t{3VJf%K?
zuwSyDke~<K40T94pahUuQl0-LemUU;AvE^<Z_y9Yyr$?J0su3Gy5f{LKemD(&L1%W
zWEvyy)Y1GLmYP8(i-d%GK_O{23yX~H+%H&Rou8u`;RWM|q&*T>7KuB2?*#DV8YzJw
z&}SCDexnUPD!%4|y~7}VzvJ4ch)WT4%sw@ItwoNt(C*RP)h?&~^g##vnhR0!HvIYx
z0td2yz9=>t3JNySl*TszmfH6`Ir;ft@RdWs3}!J88UE|gj_GMQ6$ZYphUL2~4OY7}
zB*33_bjkRf_@l;Y!7MIdb~bVe;-m78Pz|pdy=O*3kjak63UnLt!{^!!Ljg0rJD3a~
z1Q;y5Z^MF<=Hr}rd<hCKOY==|sWDSuzL8iiX7^T&s)i%HRX)g)$n}ULLiX`pwGBZP
z9gmSoR&T(}(1y>oz>yRczx+p3RxxgJE2GX&Si)14B@2t21j4hnnP#U?T3g#+{W+Zb
z5s^@>->~-}4|_*!5pIzMCEp|3+i1XKcfUxW`8|ezAh>y{WiRcjSG*asw6;Ef(k#>V
ztguN?EGkV_mGFdq!n#W)<7E}1#EZN8O$O|}qdoE|7K?F4zo1jL-v}E8v?9qz(d$&2
zMwyK&xlC9rXo_2xw7Qe0caC?o?Pc*-QAOE!+UvRuKjG+;dk|jQhDDBe?`XT7Y5lte
zqSu0t5`;>Wv%|nhj|ZiE^IqA_lZu7OWh!2Y(627zb=r7Ends}wVk7Q5o09a@ojhH7
zU0m&h*8+j4e|OqWyJ&B`V`y=>MVO;K9=hk^6EsmVAGkLT{oUtR{JqSRY{Qi{kKw1k
z6s;0SMPJOLp!som|A`*q3t0wIj-=bG8a#MC)MHcMSQU98Juv$?$CvYX)(n`P^!`5|
zv3q@@|G@6wMqh;d;m4qvdibx2Yjml}vG9mDv&!0ne02M#D`Bo}xIB0VWh8>>WtNZQ
z$&ISlJX;*ORQIO;k62qA{^6P%3!Z=Y1EbmY02{w^yB$`;%!{kur&XTGDiO2cjA)lr
zsY^XZWy^DSAaz;kZ_VG?uWnJR7qdN18$~)>(kOoybY0~QYu9||K#|$Mby{3GduV~N
zk9H7$7=RSo+?CUYF502`b76ytBy}sFak&|HIwRvB=0D|S`c#QCJ<t@a2hh9FA+>Pq
zP)uOWI)#(n&{6|C4A^G~%B~BY21aOMoz9RuuM`Ip%oBz+NoAlb7?#`E^}7xXo!4S?
zFg8I~G%!@nXi8&aJSGFcZAxQf;0m}942=i#p-&teLvE{AKm7Sl2f}Io?!IqbC|J;h
z`=5LFOnU5?^w~SV@YwNZx$k_(kLNxZ<T-w9G;`)wdHJoGV2amO-<vG?pZ@XJ#Uo$J
zb+q{_L}lvg?U~@|P1*dSegkN;ajNUGhmyA=S^CQ6@p}9uJKGF3&96BmwaXxSvK>DE
z3cf08^-rIT_>A$}B%IJBPcN^)4;90BQtiEi!gT#+EqyAUZ|}*b_}R>SGloq&6?opL
zuT_+lwQMgg6!Cso$BwUA;k-1NcrzyE>(_X$B0HocjY~=Pk~Q08+N}(|%HjO_i+*=o
z%G6C6A30Ch<0UlG;Zdj@ed!rfUY_i9mYwK8(aYuzcUzlTJ1yPz|Bb-9b33A9zRh<?
zEh+^J@0OOsX>Gl>Ny-Q<wjX~nWiOR}_^4D)POdKUaI)X<DM%#y>#JAq-+qtI@B@&w
z$;PJbyiW=!py@g2hAi0)U1v=;avka`gd@8LC4=BEbNqL&K^UAQ5%r95#x%<j2Twi<
zWI28Jof9kY(Ikv>^qRB%KLaqMnG|6xKAm}sx!Q<xJn;TKhAi-lV_zy<;)6u(yxe`r
zG8s+nu+7X=I2SJx?KI|R<|o>wo}J=2C;NROi$mfADui4)y(3wVA3k~{j^_5%H)C6K
zlYAm1eY**HZOj($)xfKIQFtIVw<YDEZ~5huBx;6h(9UoYDe-u{#QQBex`xo0d_SF-
zZ{zr8r-x@oa=@P7G8Gz%Q<2A7_lyD&aeZ-!inR%aZ-5;iEO&XuPoZbZ6OcnjG1hFD
z=btAA?MyXPGxhQ_`_b@us-{heIodKJbCj6!H57FlM3sv+z|<{D?1@zfhGGSCy3ZI2
zt4}F|%ocaJQVlIK<}Wp7+&rp6QOq<JYmAuckgc6Zxd{^=DJ9>$4&yvz9>(Crs>Gh{
zya6-FG7Dgi92#K)64=9Csj5?Zqe~_9TwSI!2quAwa1w-*uC5!}xY`?tltb0Hq740<
zsq2QelPveZ4chr$=~U3!+c&>xyfvA1`)owOqj=i4wjY=A1577Gwg&Ko7;?il9r|_*
z8P&IDV_g2D{in5OLFxsO!kx3AhO$5aKeoM|!q|VokqMlYM@HtsRuMtBY%I35#5$+G
zpp|JOeoj^U=95HLemB04Yqv{a8X<^K9G2`&ShM_6&Bi1n?o?@MXsDj9Z*A3>#XK%J
zRc*&SlFl>l)9DyRQ{*%Z+^e1XpH?0@vhpXrnPPU*d%vOhKkimm-u<I9o!2{*RVUW0
zkpjTAF;dx9>3c%Q^v3RKp9kx@A2dS?QfS=iigGr7m><)YkV=%LA5h@Uj@9=~ABPMJ
z1UE;F&;Ttg5Kc^Qy!1SuvbNEqdgu3*l`=>s5_}dUv$B%BJbMiWrrMm7OXOdi=GOmh
zZBvXXK7VqO&zojI2Om9};zCB5i|<210I{iwiGznGCx=FT89=Ef)5!lB1cZ6lbz<Vs
z!O6)(KPRgm>gDn07*he}G&w7m!;|E(L-?+<?McI~@TA!vj4RjYnCoT*FH)-pRq74Q
z67E9_umMJOIut_@Dx-Z2hEzHqy0(3L!ra}x0phZ^)OD)P*BAJetYupvu9iOfKMRY*
z59R&ZxVR$6O$s<?dV};ZTu5t!)CO9!I>cz@0<9Z<nFBx*sw*AzBdboG>I~LqYQE<f
zdA084i)nAbA%sHr3I6f)x0A6_C#f|)+7km{+VWc=8p6a>7>HnPA436}oeN2Y(VfG6
zxNZuMK3Crm^Z_AFeHc~CVRrSl0W^?+Gbteu1g8NGYa3(8f*P{(ZT>%!jtSl6WbYVv
zmE(37t0C8vJ6O-5+o*lL9XRcFbd~GSBGbGh3~R!67g&l)7n!kJlWd)~TUy<jO~Zhv
z@xvBaLkBZ#>Xus#!&G6sR%(l(h1$xyrR5j_jM1zj#giA&@(Xl26@n<9>folx!92bQ
z24h<Dc4e3SQJcr^RE3|QaY*5jX?vj3>570+<)4!$!IQ(5yOU|4_E6aN@4v0+{Kx~Z
z;q7fp%0cHziuI%!kB~w}g9@V+1wDz0wFlzX2UOvOy|&;e;t!lAR8tV2KQHgtfk8Uf
zw;rs!(4JPODERk4ckd5I2Vq|0rd@@Mwd8MID%0^fITjYIQom^q;qhP8@|eJx{?5xX
zc1@Fj*kDknlk{c-rnCloQ3hGh7OU+@e<M~mcEvZ$(y*X$K0x5}s~CQD$(YxML3psk
zFM|TBc-aWBLjK@0qr{-u^ogBxgUZ2q9fo2sjGh*5M_>fO3>fkRMcM>J?AeVP<Ux|u
zIt<28*boJGNgvZU&+HIxSJU@0MMOMk7(|dJT9}B#3C^H5%`@R9`pq2cDNIDmG&|fk
z=;qP1KP0X0%WFW{10wdnB1|TJr}_3V9m=|9t1&c+%CUUz+SxZxbB`X)efq{sF+1tq
zKf-%4B#;+_1Fv@}nSe1EebC@A=zceZ+9L=HMG!TLs$d<`aVBpK$8UGu%?r!ZUz3ID
zw2G?KI8ia%8jnZwySwx2`P0dY`Re&F893$F0%*A8SHESTm@B%nT<YZ$)QN^ti`2>&
zlfzX%cdp=N+4S#E*%^=BQ+N`A7C}|k%$|QUn0yI6S3$MS-NjO!4hm55uyju)Q6e!}
z*OVO@A#-mfC9Pha6ng((Xl^V7{d+&u+yx)_B1{~t7d5e8L^i4J>;x<7@5;+l7-Gge
zf#9diXJ$&v^rbN5V(ee%q0xBMEgS6%qZm7hNUP%G;^J44I!BmI@M*+FWz0!+s;+iQ
zU4CuI+27bvNK8v>?7PZnVxB=heJ&_ymE0nN^W#-rqB%+JXkYGDuRw>JM_LdtLkiq*
z6%%3&^BX$jnM@2bjiGc-DymKly)wVkA-pq;jSWL#7_*moZZ4I|-N}o8SK?sIv)p|c
zu~9-B%tMc=!)YMFp*SiC0>kfnH8+X5>;+FFVN{~a9YVdIg1uGkZ~kegFy{^PU(4{(
z`CbY`XmVA3esai686Yw8djCEyF7`bfB^F1)nwv+AqYLZ&Zy=eFhYT2uMd@{sP_qS4
zbJ&>PxajjZt?&c<1^!T|pLHfX=E^FJ>-l_XCZzvRV%x}@u(FtF(mS+Umw<d2c`9Rr
zR+?yr(!A0r|CD~t7GFV?aaA(6z5nz_Nm0i$V6I-ucK$u?K&%hkODCkY(1+;DS|bQF
zb4mg|54xl}b6Ewc=m`{a+NEN`d1?%=>$e+IA74e>gCdTqi;6&=euAIpxd=Y3I5xWR
zBhGoT+T`V1@91OlQ}2YO*~P4ukd*TBBdt?Plt)_ou6Y@Db`ss+Q~A-48s>?eaJYA2
zRGOa8^~Em}EFTmKIVVbMb|ob)hJJ7ITg>yHAn2i|{2ZJU!cwt9YNDT0=*WO7Bq#Xj
zg@FjEaKoolrF8%c;49|`IT&25?O$dq<?{UbIQ0;9Tr9TA6pzz%=H>8kp3#la9&6aH
z6G|{>^C(>yP7#Dr$aeFyS0Ai_$ILhL43#*mgEl(c*4?Ae;tRL&S7Vc}Szl>B`mBuI
zB9Y%xp%CZwlH!3V(`6W4-ZuETssvI&B~_O;CbULfl)X1V%(H7VSPf`_Ka9ak@8A=z
z1l|B1QKT}NLI`WVTRd;2En5u{0CRqy9PTi$ja^inu){LJ&E&6W%JJPw#&PaTxpt?k
zpC~gjN*22Q8tpGHR|tg~ye#9a8N<%odhZJnk7Oh=(PKfhYfzLAxdE36r<6<oD}e5;
zMPsE4+rk0d2jE*#p84SO^!fW~`j-|(WExf+!}WMlI2oGcLeMqZ%ofC97d<+nflE=C
zww(j#(;Qr&ut3IEyIwm>a?A;rO&ELp_Y?8Pdw(PT^Fxn!eG_|LEbSYoBrsBA|6Fgr
zt5LntyusI{Q2fdy=>ditS;}^B;I2MD4=(>7fWt0Jp~y=?VvfvzHvQhj6dyIef46J$
zl4Xu7U9v_NJV?uBBC0!kcTS0UcrV7+<p(Ba=Bk7*SXvlcpQJatnzmyl-^GA6y=0YH
zU!Qp*(5v5`qcU7GH`fZ53mR)&#Os~1d`1FKAc~R?v^F@3sPXWHk(`{v@BF<NgpL1h
zOYj$ZQX-EI8H4?Ypq8IMFE`LLGMYNju;D(Aux0jFNCc@>@~is?Fi+jrr@l3XwD|uG
zr26jUWiv>Ju48Y<K5Q0UFt#$Wh-3Y^huuiZIhuP~4SRD>^#qn7r9mwIH-<mOw=)2D
z<iCzV917q@YTEy}IJiO<?It)?BnA;jg`vU#wb|e4BpbC^HJE}Jh7S%#;t@=RHEzf3
zve@!5mXtmM3~}?iGNYp|t2UDZWtZs+?hWj`+Vz*5E0~r*FRY^QnYC-}Vte5CD38TA
z2heFf8>Pv6Y|V|V-GZ&+&gQ?S?-`&ts{@5GXPqbmyZjUACC&oVXfNwUX0}ba(v978
zp8z!v9~8Zx8qB<QXT5I&+92wF0pO{dS4(N<h_+P+tKZn8-IlF)tWr~gMeIiH-&7y0
zvL&hwU_I>@7>oFPDm^iR@+yw`79YF)w^OHB_N;&&x7c3l^3!)IY#)}x)@D(iNaOm9
zC=^*!{`7<aJO;!0Q_GA?kGJMA-q_;pS6#JcnV+|?H`ki8UM3IyaP&Y_Cob&3B{Pk)
zm4w3$nw_t--`?`O5&1RGdSO&%Hqq;;K{ebNOqKIk%%SGD!F=%uOt^n7pXHX$w+HIP
z8dL)o*Jpb{DXQ+Ru13)nl`bL_X#5zH`D&t|K|2sG@Zx^L{-A|#-X*Z;4E;wV8qs|w
zT>={3*S=%iU=KsPXh=DDZcc``Ss>057i{pdW8M@4q+Ba@Tt%OytH!4>rbIbQw^-pR
zGGYNPzw@n=PV@)b7yVbFr;glF*Qq3>F9oBN5PUXt!?2mdGcpv^o1?Thp`jP10G2Yi
z(c93td3F3SW!Le5DUwdub!aDKoVLU6g!O?Ret21l$qOC;kdd@L#M&baVu&JZGt&<6
z!VCkvgRaav6QDW2x}tUy4~Y5(B+#Ej-8vM?DM-1?J_*&PntI3E96M!`WL#<&Z5n2u
z<QPxSVI}f8nvsYEV@sQO)6fswrNtp@sU=8(-b8Mb5P$r8S==I%7kh4B)_n@!DLI2Z
z4PP(&9*0`aDCzk=7Hs;qt@l};2A|ee_lp|_XHg@k->o`P!~vBT$YOT~gU9#PB)%JZ
zcd_u<u8SkTyW@XV6qrAJ#qjS(2-MC6glNGYe|r3T`ER-;ck$QHoSn3~1RN=RR%nUZ
zKf8<#6k1k~H@+pG{73t5FQeCnhxF-1&my@?)3Sx2>=m^LYzC!pH#W`yA1!(fA;D~b
zG#73@l)NNd;n#XrKXZEfab;@kQRnOFU2Th-1m<4mJzlj9<frYer6HiQx@?8?NJ2Do
zObcl_ecl~1qF&eiOVBk0#ZN-|Dd_D_4Xx*PUVf?)>b3pv-GF$elX7ib9!uILM_$ke
zHIGB*&=5=;ynQA{y7H93%i^d)T}y@(p>8vVhJ4L)M{0Q*@D^+SPp`EW+G6E%+`Z;u
zS3goV@Dic7vc5`?!pCN4<JvL_48+Q8LQ@>4Ts@*{)zwy)9?B||AM{zKlN4T}qQRL2
zgv+{K8bv7w)#xge16;kI1fU87!W4pX)N&|cq8&i^1r`W|Hg4366r(?-ecEJ9u&Eaw
zrhyikXQB>C9d>cpPGiu=VU3Z-u4|0V_iap!_J3o+K_R5EXk@sfu~zHwwYkpncVh!R
zqNe7Cmf_|Wmeq4#(mIO&(wCK@b4(x0?W1Qtk(`$?+$uCJCGZm_%k?l32vuShgDFMa
ztc`{$8DhB9)&?~(m&EUc=LzI1=qo#zjy#2{hLT_*aj<618qQ7mD#k2ZFGou&69;=2
z1j7=Su8k}{L*h&mfs7jg^PN&9C1Z@U!p6gXk&-7xM~{X<iLOVw!aav*!V=`4l#Z}C
z96Cuv>`nqH#aGO`;Xy_zbz^rYacIq0AH%4!Oh93TzJ820%ur)8OyeS@K?sF1V(iFO
z37Nnqj1z#1{|v7=_CX`lQA|$<1gtuNMHGNJYp1D_k;WQk-b+T6VmUK(x=bWviOZ~T
z|4e%SpuaWLWD?qN2%`S*`P;BQBw(B__wTD6epvGdJ+>DBq2oV<pcqb&6wR<4FA$2v
z5~)nCP^#1#txj(+n#>lf&F*lz+#avb4<LeKI6+c0!*aYJO0uGAzkT?h&<)eF9oO@N
zFp85j%ZswAo3`tRahjKP+mG|QpZEJg2u4s0CrFBBSdJG&Nmf)%H%!ZRT+a`}C{EHW
zFUqQJ+O8kQX<pWCKhEoZ-tYH^5fsA-lA;-w;{{QY6;;y>)3P1c^Mf#olQheVvZ|Z5
z>xXfgmv!5Z^SYn+_x}K5B%G^sRwiez&z9|f!E!#oJlT2k<v)*-8Izce`)2-oo#(W-
zoudGWwGo@1CGNHF$IO1;TKoQC#d=r1zr6R{_1!X`9kp|Iknh0E@*R+w*=1K9s{o0$
zk>COV0000$L_|bHBqAarB4TD{W@grX1CUr72@caw0faEd7-K|4L_|cawbojjHdpd6
zI6~Iv5J?-Q4*&oF000000FV;^004t70Z6Qk1Xl<E0000001Beth!e-qIiLWEb%ZLV
zlu{~6UVVTb6vR4Bl(ZyCk|ase4n~5DnVFfHdC{Mq``+`wUsuh>{X9oJ{sRC2(cs?-

diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/bootstrap.min.js b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/bootstrap.min.js
index c6d36920be36e3d61f7807f56db65cfe25d28f35..7c1561a8b96d7b6242c0b2135eafa28796603cbf 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/bootstrap.min.js
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/bootstrap.min.js
@@ -1,7 +1,6 @@
 /*!
- * Bootstrap v3.3.2 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.2",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.2",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.2",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.2",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.2",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.2",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.2",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.2",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.2",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.2",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()
-}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.2",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/d3.min.js b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/d3.min.js
index d7cfb702fc4d45226772f7f0428678d44f44130c..88550ae5124aa569de51a05a62b667d1f7b9cf9b 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/d3.min.js
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/d3.min.js
@@ -1,5 +1,5 @@
-!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null===n?0/0:+n}function e(n){return!isNaN(n)}function r(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function u(n){return n.length}function i(n){for(var t=1;n*t%1;)t*=10;return t}function o(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function a(){this._=Object.create(null)}function c(n){return(n+="")===la||n[0]===sa?sa+n:n}function l(n){return(n+="")[0]===sa?n.slice(1):n}function s(n){return c(n)in this._}function f(n){return(n=c(n))in this._&&delete this._[n]}function h(){var n=[];for(var t in this._)n.push(l(t));return n}function g(){var n=0;for(var t in this._)++n;return n}function p(){for(var n in this._)return!1;return!0}function v(){this._=Object.create(null)}function d(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function m(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=fa.length;r>e;++e){var u=fa[e]+t;if(u in n)return u}}function y(){}function x(){}function M(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new a;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function _(){Bo.event.preventDefault()}function b(){for(var n,t=Bo.event;n=t.sourceEvent;)t=n;return t}function w(n){for(var t=new x,e=0,r=arguments.length;++e<r;)t[arguments[e]]=M(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Bo.event;u.target=n,Bo.event=u,t[u.type].apply(e,r)}finally{Bo.event=i}}},t}function S(n){return ga(n,ya),n}function k(n){return"function"==typeof n?n:function(){return pa(n,this)}}function E(n){return"function"==typeof n?n:function(){return va(n,this)}}function A(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Bo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function C(n){return n.trim().replace(/\s+/g," ")}function N(n){return new RegExp("(?:^|\\s+)"+Bo.requote(n)+"(?:\\s+|$)","g")}function z(n){return(n+"").trim().split(/^|\s+/)}function L(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=z(n).map(T);var u=n.length;return"function"==typeof t?r:e}function T(n){var t=N(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",C(u+" "+n))):e.setAttribute("class",C(u.replace(t," ")))}}function q(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function R(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function D(n){return"function"==typeof n?n:(n=Bo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function P(n){return{__data__:n}}function U(n){return function(){return ma(this,n)}}function j(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function F(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function H(n){return ga(n,Ma),n}function O(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function Y(){var n=this.__transition__;n&&++n.active}function I(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,Jo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Bo.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=Z;a>0&&(n=n.slice(0,a));var l=ba.get(n);return l&&(n=l,c=V),a?t?u:r:t?y:i}function Z(n,t){return function(e){var r=Bo.event;Bo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Bo.event=r}}}function V(n,t){var e=Z(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function X(){var n=".dragsuppress-"+ ++Sa,t="click"+n,e=Bo.select(Qo).on("touchmove"+n,_).on("dragstart"+n,_).on("selectstart"+n,_);if(wa){var r=Ko.style,u=r[wa];r[wa]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),wa&&(r[wa]=u),i&&(e.on(t,function(){_(),o()},!0),setTimeout(o,0))}}function $(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>ka&&(Qo.scrollX||Qo.scrollY)){e=Bo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();ka=!(u.f||u.e),e.remove()}return ka?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function B(){return Bo.event.changedTouches[0].identifier}function W(){return Bo.event.target}function J(){return Qo}function G(n){return n>0?1:0>n?-1:0}function K(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function Q(n){return n>1?0:-1>n?Ea:Math.acos(n)}function nt(n){return n>1?Ca:-1>n?-Ca:Math.asin(n)}function tt(n){return((n=Math.exp(n))-1/n)/2}function et(n){return((n=Math.exp(n))+1/n)/2}function rt(n){return((n=Math.exp(2*n))-1)/(n+1)}function ut(n){return(n=Math.sin(n/2))*n}function it(){}function ot(n,t,e){return this instanceof ot?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ot?new ot(n.h,n.s,n.l):Mt(""+n,_t,ot):new ot(n,t,e)}function at(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new dt(u(n+120),u(n),u(n-120))}function ct(n,t,e){return this instanceof ct?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof ct?new ct(n.h,n.c,n.l):n instanceof st?ht(n.l,n.a,n.b):ht((n=bt((n=Bo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new ct(n,t,e)}function lt(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new st(e,Math.cos(n*=La)*t,Math.sin(n)*t)}function st(n,t,e){return this instanceof st?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof st?new st(n.l,n.a,n.b):n instanceof ct?lt(n.h,n.c,n.l):bt((n=dt(n)).r,n.g,n.b):new st(n,t,e)}function ft(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=gt(u)*Ya,r=gt(r)*Ia,i=gt(i)*Za,new dt(vt(3.2404542*u-1.5371385*r-.4985314*i),vt(-.969266*u+1.8760108*r+.041556*i),vt(.0556434*u-.2040259*r+1.0572252*i))}function ht(n,t,e){return n>0?new ct(Math.atan2(e,t)*Ta,Math.sqrt(t*t+e*e),n):new ct(0/0,0/0,n)}function gt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function pt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function vt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function dt(n,t,e){return this instanceof dt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof dt?new dt(n.r,n.g,n.b):Mt(""+n,dt,at):new dt(n,t,e)}function mt(n){return new dt(n>>16,255&n>>8,255&n)}function yt(n){return mt(n)+""}function xt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function Mt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(St(u[0]),St(u[1]),St(u[2]))}return(i=$a.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function _t(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new ot(r,u,c)}function bt(n,t,e){n=wt(n),t=wt(t),e=wt(e);var r=pt((.4124564*n+.3575761*t+.1804375*e)/Ya),u=pt((.2126729*n+.7151522*t+.072175*e)/Ia),i=pt((.0193339*n+.119192*t+.9503041*e)/Za);return st(116*u-16,500*(r-u),200*(u-i))}function wt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function St(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function kt(n){return"function"==typeof n?n:function(){return n}}function Et(n){return n}function At(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Ct(t,e,n,r)}}function Ct(n,t,e,r){function u(){var n,t=c.status;if(!t&&zt(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Bo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!Qo.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Bo.event;Bo.event=n;try{o.progress.call(i,c)}finally{Bo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Jo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Bo.rebind(i,o,"on"),null==r?i:i.get(Nt(r))}function Nt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function zt(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function Lt(){var n=Tt(),t=qt()-n;t>24?(isFinite(t)&&(clearTimeout(Ga),Ga=setTimeout(Lt,t)),Ja=0):(Ja=1,Qa(Lt))}function Tt(){var n=Date.now();for(Ka=Ba;Ka;)n>=Ka.t&&(Ka.f=Ka.c(n-Ka.t)),Ka=Ka.n;return n}function qt(){for(var n,t=Ba,e=1/0;t;)t.f?t=n?n.n=t.n:Ba=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Wa=n,e}function Rt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Dt(n,t){var e=Math.pow(10,3*ca(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Pt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r&&e?function(n,t){for(var u=n.length,i=[],o=0,a=r[0],c=0;u>0&&a>0&&(c+a+1>t&&(a=Math.max(1,t-c)),i.push(n.substring(u-=a,u+a)),!((c+=a+1)>t));)a=r[o=(o+1)%r.length];return i.reverse().join(e)}:Et;return function(n){var e=tc.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1,y=!0;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":y=!1;case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=ec.get(g)||Ut;var x=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>p){var c=Bo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var M,_,b=n.lastIndexOf(".");if(0>b){var w=y?n.lastIndexOf("e"):-1;0>w?(M=n,_=""):(M=n.substring(0,w),_=n.substring(w))}else M=n.substring(0,b),_=t+n.substring(b+1);!l&&f&&(M=i(M,1/0));var S=v.length+M.length+_.length+(x?0:u.length),k=s>S?new Array(S=s-S+1).join(r):"";return x&&(M=i(k+M,k.length?s-_.length:1/0)),u+=v,n=M+_,("<"===o?u+n+k:">"===o?k+u+n:"^"===o?k.substring(0,S>>=1)+u+n+k.substring(S):u+(x?n:k+n))+e}}}function Ut(n){return n+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ft(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new uc(e-1)),1),e}function i(n,e){return t(n=new uc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{uc=jt;var r=new jt;return r._=n,o(r,t,e)}finally{uc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ht(n);return c.floor=c,c.round=Ht(r),c.ceil=Ht(u),c.offset=Ht(i),c.range=a,n}function Ht(n){return function(t,e){try{uc=jt;var r=new jt;return r._=t,n(r,e)._}finally{uc=Date}}}function Ot(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(c,a)),null!=(u=oc[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=C[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.slice(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&uc!==jt,o=new(i?jt:uc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(0|r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,l=e.length;c>a;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in oc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.slice(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function l(n,t,r){return e(n,C.X.toString(),t,r)}function s(n,t,e){var r=x.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{uc=jt;var t=new uc;return t._=n,r(t)}finally{uc=Date}}var r=t(n);return e.parse=function(n){try{uc=jt;var t=r.parse(n);return t&&t._}finally{uc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ae;var x=Bo.map(),M=It(v),_=Zt(v),b=It(d),w=Zt(d),S=It(m),k=Zt(m),E=It(y),A=Zt(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Yt(n.getDate(),t,2)},e:function(n,t){return Yt(n.getDate(),t,2)},H:function(n,t){return Yt(n.getHours(),t,2)},I:function(n,t){return Yt(n.getHours()%12||12,t,2)},j:function(n,t){return Yt(1+rc.dayOfYear(n),t,3)},L:function(n,t){return Yt(n.getMilliseconds(),t,3)},m:function(n,t){return Yt(n.getMonth()+1,t,2)},M:function(n,t){return Yt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Yt(n.getSeconds(),t,2)},U:function(n,t){return Yt(rc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Yt(rc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Yt(n.getFullYear()%100,t,2)},Y:function(n,t){return Yt(n.getFullYear()%1e4,t,4)},Z:ie,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Qt,e:Qt,H:te,I:te,j:ne,L:ue,m:Kt,M:ee,p:s,S:re,U:Xt,w:Vt,W:$t,x:c,X:l,y:Wt,Y:Bt,Z:Jt,"%":oe};return t}function Yt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function It(n){return new RegExp("^(?:"+n.map(Bo.requote).join("|")+")","i")}function Zt(n){for(var t=new a,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Vt(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Xt(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function $t(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Bt(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Wt(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+2));return r?(n.y=Gt(+r[0]),e+r[0].length):-1}function Jt(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Gt(n){return n+(n>68?1900:2e3)}function Kt(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qt(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function ne(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function te(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ee(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function re(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ue(n,t,e){ac.lastIndex=0;var r=ac.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ie(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=0|ca(t)/60,u=ca(t)%60;return e+Yt(r,"0",2)+Yt(u,"0",2)}function oe(n,t,e){cc.lastIndex=0;var r=cc.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ae(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ce(){}function le(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function se(n,t){n&&hc.hasOwnProperty(n.type)&&hc[n.type](n,t)}function fe(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function he(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)fe(n[e],t,1);t.polygonEnd()}function ge(){function n(n,t){n*=La,t=t*La/2+Ea/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);pc.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;vc.point=function(o,a){vc.point=n,r=(t=o)*La,u=Math.cos(a=(e=a)*La/2+Ea/4),i=Math.sin(a)},vc.lineEnd=function(){n(t,e)}}function pe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function ve(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function de(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function me(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ye(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function xe(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function Me(n){return[Math.atan2(n[1],n[0]),nt(n[2])]}function _e(n,t){return ca(n[0]-t[0])<Na&&ca(n[1]-t[1])<Na}function be(n,t){n*=La;var e=Math.cos(t*=La);we(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function we(n,t,e){++dc,yc+=(n-yc)/dc,xc+=(t-xc)/dc,Mc+=(e-Mc)/dc}function Se(){function n(n,u){n*=La;var i=Math.cos(u*=La),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),l=Math.atan2(Math.sqrt((l=e*c-r*a)*l+(l=r*o-t*c)*l+(l=t*a-e*o)*l),t*o+e*a+r*c);mc+=l,_c+=l*(t+(t=o)),bc+=l*(e+(e=a)),wc+=l*(r+(r=c)),we(t,e,r)}var t,e,r;Ac.point=function(u,i){u*=La;var o=Math.cos(i*=La);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),Ac.point=n,we(t,e,r)}}function ke(){Ac.point=be}function Ee(){function n(n,t){n*=La;var e=Math.cos(t*=La),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),l=u*c-i*a,s=i*o-r*c,f=r*a-u*o,h=Math.sqrt(l*l+s*s+f*f),g=r*o+u*a+i*c,p=h&&-Q(g)/h,v=Math.atan2(h,g);Sc+=p*l,kc+=p*s,Ec+=p*f,mc+=v,_c+=v*(r+(r=o)),bc+=v*(u+(u=a)),wc+=v*(i+(i=c)),we(r,u,i)}var t,e,r,u,i;Ac.point=function(o,a){t=o,e=a,Ac.point=n,o*=La;var c=Math.cos(a*=La);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),we(r,u,i)},Ac.lineEnd=function(){n(t,e),Ac.lineEnd=ke,Ac.point=be}}function Ae(){return!0}function Ce(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(_e(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new ze(e,n,null,!0),l=new ze(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new ze(r,n,null,!1),l=new ze(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),Ne(i),Ne(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function Ne(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function ze(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Le(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function l(){y.point=o,d.lineEnd()}function s(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){s(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(_||(i.polygonStart(),_=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Te))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=Bo.merge(g);var n=je(m,p);g.length?(_||(i.polygonStart(),_=!0),Ce(g,Re,n,e,i)):n&&(_||(i.polygonStart(),_=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),_&&(i.polygonEnd(),_=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=qe(),M=t(x),_=!1;return y}}function Te(n){return n.length>1}function qe(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:y,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Re(n,t){return((n=n.x)[0]<0?n[1]-Ca-Na:Ca-n[1])-((t=t.x)[0]<0?t[1]-Ca-Na:Ca-t[1])}function De(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Ea:-Ea,c=ca(i-e);ca(c-Ea)<Na?(n.point(e,r=(r+o)/2>0?Ca:-Ca),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Ea&&(ca(e-u)<Na&&(e-=u*Na),ca(i-a)<Na&&(i-=a*Na),r=Pe(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function Pe(n,t,e,r){var u,i,o=Math.sin(n-e);return ca(o)>Na?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Ue(n,t,e,r){var u;if(null==n)u=e*Ca,r.point(-Ea,u),r.point(0,u),r.point(Ea,u),r.point(Ea,0),r.point(Ea,-u),r.point(0,-u),r.point(-Ea,-u),r.point(-Ea,0),r.point(-Ea,u);else if(ca(n[0]-t[0])>Na){var i=n[0]<t[0]?Ea:-Ea;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function je(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;pc.reset();for(var a=0,c=t.length;c>a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+Ea/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+Ea/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>Ea,k=p*x;if(pc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*Aa:_,S^h>=e^m>=e){var E=de(pe(f),pe(n));xe(E);var A=de(u,E);xe(A);var C=(S^_>=0?-1:1)*nt(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-Na>i||Na>i&&0>pc)^1&o}function Fe(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Ea:-Ea),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(_e(e,g)||_e(p,g))&&(p[0]+=Na,p[1]+=Na,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&_e(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=pe(n),u=pe(t),o=[1,0,0],a=de(r,u),c=ve(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=de(o,a),p=ye(o,f),v=ye(a,h);me(p,v);var d=g,m=ve(p,d),y=ve(d,d),x=m*m-y*(ve(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=ye(d,(-m-M)/y);if(me(_,p),_=Me(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=ca(A-Ea)<Na,N=C||Na>A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(ca(_[0]-w)<Na?k:E):k<=_[1]&&_[1]<=E:A>Ea^(w<=_[0]&&_[0]<=S)){var z=ye(d,(-m+M)/y);return me(z,p),[_,Me(z)]}}}function u(t,e){var r=o?n:Ea-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ca(i)>Na,c=gr(n,6*La);return Le(t,e,c,o?[0,-n]:[-Ea,n-Ea])}function He(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function Oe(n,t,e,r){function u(r,u){return ca(r[0]-n)<Na?u>0?0:3:ca(r[0]-e)<Na?u>0?2:1:ca(r[1]-t)<Na?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&K(l,i,n)>0&&++t:i[1]<=r&&K(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Nc,Math.min(Nc,n)),t=Math.max(-Nc,Math.min(Nc,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=qe(),C=He(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Bo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&Ce(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return N}}function Ye(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function Ie(n){var t=0,e=Ea/3,r=ir(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Ea/180,e=n[1]*Ea/180):[180*(t/Ea),180*(e/Ea)]},u}function Ze(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,nt((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ve(){function n(n,t){Lc+=u*n-r*t,r=n,u=t}var t,e,r,u;Pc.point=function(i,o){Pc.point=n,t=r=i,e=u=o},Pc.lineEnd=function(){n(t,e)}}function Xe(n,t){Tc>n&&(Tc=n),n>Rc&&(Rc=n),qc>t&&(qc=t),t>Dc&&(Dc=t)}function $e(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Be(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Be(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Be(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function We(n,t){yc+=n,xc+=t,++Mc}function Je(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);_c+=o*(t+n)/2,bc+=o*(e+r)/2,wc+=o,We(t=n,e=r)}var t,e;jc.point=function(r,u){jc.point=n,We(t=r,e=u)}}function Ge(){jc.point=We}function Ke(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);_c+=o*(r+n)/2,bc+=o*(u+t)/2,wc+=o,o=u*n-r*t,Sc+=o*(r+n),kc+=o*(u+t),Ec+=3*o,We(r=n,u=t)}var t,e,r,u;jc.point=function(i,o){jc.point=n,We(t=r=i,e=u=o)},jc.lineEnd=function(){n(t,e)}}function Qe(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,Aa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:y};return a}function nr(n){function t(n){return(a?r:e)(n)}function e(t){return rr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=pe([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function s(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=l+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=ca(ca(w)-1)<Na||ca(r-h)<Na?(r+h)/2:Math.atan2(b,_),A=n(E,k),C=A[0],N=A[1],z=C-t,L=N-e,T=x*z-y*L;
-(T*T/M>i||ca((y*z+x*L)/M-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*La),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Ta,e*Ta])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*La,n[1]*La),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ta,n[1]*Ta]}function r(){a=Ye(o=lr(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Cc,_=Et,b=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(M(o,f(_(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Cc):Fe((b=+n)*La),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Oe(n[0][0],n[0][1],n[1][0],n[1][1]):Et,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*La,d=n[1]%360*La,r()):[v*Ta,d*Ta]},t.rotate=function(n){return arguments.length?(m=n[0]%360*La,y=n[1]%360*La,x=n.length>2?n[2]%360*La:0,r()):[m*Ta,y*Ta,x*Ta]},Bo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*La,e*La)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>Ea?n-Aa:-Ea>n?n+Aa:n,t]}function lr(n,t,e){return n?t||e?Ye(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>Ea?t-Aa:-Ea>t?t+Aa:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),nt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),nt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*Aa)):(u=n+o*Aa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=Me([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,xe(e);var r=Q(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Na)%(2*Math.PI)}function vr(n,t,e){var r=Bo.range(n,t-Na,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=Bo.range(n,t-Na,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function xr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(ut(r-t)+u*o*ut(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ta,Math.atan2(o,Math.sqrt(r*r+u*u))*Ta]}:function(){return[n*Ta,t*Ta]};return p.distance=h,p}function Mr(){function n(n,u){var i=Math.sin(u*=La),o=Math.cos(u),a=ca((n*=La)-t),c=Math.cos(a);Fc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Hc.point=function(u,i){t=u*La,e=Math.sin(i*=La),r=Math.cos(i),Hc.point=n},Hc.lineEnd=function(){Hc.point=Hc.lineEnd=y}}function _r(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function br(n,t){function e(n,t){o>0?-Ca+Na>t&&(t=-Ca+Na):t>Ca-Na&&(t=Ca-Na);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Ea/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=G(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Ca]},e):Sr}function wr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ca(u)<Na?ar:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-G(u)*Math.sqrt(n*n+e*e)]},e)}function Sr(n,t){return[n,Math.log(Math.tan(Ea/4+t/2))]}function kr(n){var t,e=ur(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=Ea*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Er(n,t){return[Math.log(Math.tan(Ea/4+t/2)),-n]}function Ar(n){return n[0]}function Cr(n){return n[1]}function Nr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&K(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function zr(n,t){return n[0]-t[0]||n[1]-t[1]}function Lr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Tr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function qr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Rr(){tu(this),this.edge=this.site=this.circle=null}function Dr(n){var t=Kc.pop()||new Rr;return t.site=n,t}function Pr(n){Xr(n),Wc.remove(n),Kc.push(n),tu(n)}function Ur(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Pr(n);for(var c=i;c.circle&&ca(e-c.circle.x)<Na&&ca(r-c.circle.cy)<Na;)i=c.P,a.unshift(c),Pr(c),c=i;a.unshift(c),Xr(c);for(var l=o;l.circle&&ca(e-l.circle.x)<Na&&ca(r-l.circle.cy)<Na;)o=l.N,a.push(l),Pr(l),l=o;a.push(l),Xr(l);var s,f=a.length;for(s=1;f>s;++s)l=a[s],c=a[s-1],Kr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=Jr(c.site,l.site,null,u),Vr(c),Vr(l)}function jr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Wc._;a;)if(r=Fr(a,o)-i,r>Na)a=a.L;else{if(u=i-Hr(a,o),!(u>Na)){r>-Na?(t=a.P,e=a):u>-Na?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Dr(n);if(Wc.insert(t,c),t||e){if(t===e)return Xr(t),e=Dr(t.site),Wc.insert(c,e),c.edge=e.edge=Jr(t.site,c.site),Vr(t),Vr(e),void 0;if(!e)return c.edge=Jr(t.site,c.site),void 0;Xr(t),Xr(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+s,y:(h*x-v*y)/m+f};Kr(e.edge,l,p,M),c.edge=Jr(l,n,null,M),e.edge=Jr(n,p,null,M),Vr(t),Vr(e)}}function Fr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Hr(n,t){var e=n.N;if(e)return Fr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Or(n){this.site=n,this.edges=[]}function Yr(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Bc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(ca(r-t)>Na||ca(u-e)>Na)&&(a.splice(o,0,new Qr(Gr(i.site,s,ca(r-f)<Na&&p-u>Na?{x:f,y:ca(t-f)<Na?e:p}:ca(u-p)<Na&&h-r>Na?{x:ca(e-p)<Na?t:h,y:p}:ca(r-h)<Na&&u-g>Na?{x:h,y:ca(t-h)<Na?e:g}:ca(u-g)<Na&&r-f>Na?{x:ca(e-g)<Na?t:f,y:g}:null),i.site,null)),++c)}function Ir(n,t){return t.angle-n.angle}function Zr(){tu(this),this.x=this.y=this.arc=this.site=this.cy=null}function Vr(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,l=r.y-a,s=i.x-o,f=i.y-a,h=2*(c*f-l*s);if(!(h>=-za)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=Qc.pop()||new Zr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=Gc._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}Gc.insert(y,m),y||(Jc=m)}}}}function Xr(n){var t=n.circle;t&&(t.P||(Jc=t.N),Gc.remove(t),Qc.push(t),tu(t),n.circle=null)}function $r(n){for(var t,e=$c,r=He(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Br(t,n)||!r(t)||ca(t.a.x-t.b.x)<Na&&ca(t.a.y-t.b.y)<Na)&&(t.a=t.b=null,e.splice(u,1))}function Br(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],l=t[1][1],s=n.l,f=n.r,h=s.x,g=s.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.y<c)return}else i={x:d,y:l};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.y<c)return}else i={x:(l-u)/r,y:l};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Wr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Jr(n,t,e,r){var u=new Wr(n,t);return $c.push(u),e&&Kr(u,n,t,e),r&&Kr(u,t,n,r),Bc[n.i].edges.push(new Qr(u,n,t)),Bc[t.i].edges.push(new Qr(u,t,n)),u}function Gr(n,t,e){var r=new Wr(n,null);return r.a=t,r.b=e,$c.push(r),r}function Kr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Qr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function nu(){this._=null}function tu(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function eu(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ru(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function uu(n){for(;n.L;)n=n.L;return n}function iu(n,t){var e,r,u,i=n.sort(ou).pop();for($c=[],Bc=new Array(n.length),Wc=new nu,Gc=new nu;;)if(u=Jc,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Bc[i.i]=new Or(i),jr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;Ur(u.arc)}t&&($r(t),Yr(t));var o={cells:Bc,edges:$c};return Wc=Gc=$c=Bc=null,o}function ou(n,t){return t.y-n.y||t.x-n.x}function au(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function cu(n){return n.x}function lu(n){return n.y}function su(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function fu(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&fu(n,c[0],e,r,o,a),c[1]&&fu(n,c[1],o,r,u,a),c[2]&&fu(n,c[2],e,a,o,i),c[3]&&fu(n,c[3],o,a,u,i)}}function hu(n,t){n=Bo.rgb(n),t=Bo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+xt(Math.round(e+i*n))+xt(Math.round(r+o*n))+xt(Math.round(u+a*n))}}function gu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=du(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function pu(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function vu(n,t){var e,r,u,i=tl.lastIndex=el.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=tl.exec(n))&&(r=el.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:pu(e,r)})),i=el.lastIndex;return i<t.length&&(u=t.slice(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function du(n,t){for(var e,r=Bo.interpolators.length;--r>=0&&!(e=Bo.interpolators[r](n,t)););return e}function mu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(du(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function yu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function xu(n){return function(t){return 1-n(1-t)}}function Mu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function _u(n){return n*n}function bu(n){return n*n*n}function wu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Su(n){return function(t){return Math.pow(t,n)}}function ku(n){return 1-Math.cos(n*Ca)}function Eu(n){return Math.pow(2,10*(n-1))}function Au(n){return 1-Math.sqrt(1-n*n)}function Cu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Aa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Aa/t)}}function Nu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function zu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Lu(n,t){n=Bo.hcl(n),t=Bo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return lt(e+i*n,r+o*n,u+a*n)+""}}function Tu(n,t){n=Bo.hsl(n),t=Bo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return at(e+i*n,r+o*n,u+a*n)+""}}function qu(n,t){n=Bo.lab(n),t=Bo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ft(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Du(n){var t=[n.a,n.b],e=[n.c,n.d],r=Uu(t),u=Pu(t,e),i=Uu(ju(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ta,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Ta:0}function Pu(n,t){return n[0]*t[0]+n[1]*t[1]}function Uu(n){var t=Math.sqrt(Pu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function ju(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Fu(n,t){var e,r=[],u=[],i=Bo.transform(n),o=Bo.transform(t),a=i.translate,c=o.translate,l=i.rotate,s=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:pu(a[0],c[0])},{i:3,x:pu(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:pu(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:pu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:pu(g[0],p[0])},{i:e-2,x:pu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Hu(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Ou(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Yu(n){for(var t=n.source,e=n.target,r=Zu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Iu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Zu(n,t){if(n===t)return n;for(var e=Iu(n),r=Iu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Vu(n){n.fixed|=2}function Xu(n){n.fixed&=-7}function $u(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Bu(n){n.fixed&=-5}function Wu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Wu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,u+=l*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Ju(n,t){return Bo.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=ei,n}function Gu(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function Ku(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function Qu(n){return n.children}function ni(n){return n.value}function ti(n,t){return t.value-n.value}function ei(n){return Bo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ri(n){return n.x}function ui(n){return n.y}function ii(n,t,e){n.y0=t,n.y=e}function oi(n){return Bo.range(n.length)}function ai(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function ci(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function li(n){return n.reduce(si,0)}function si(n,t){return n+t[1]}function fi(n,t){return hi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function hi(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function gi(n){return[Bo.min(n),Bo.max(n)]}function pi(n,t){return n.value-t.value}function vi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function di(n,t){n._pack_next=t,t._pack_prev=n}function mi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function yi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(xi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],bi(r,u,i),t(i),vi(r,i),r._pack_prev=i,vi(i,u),u=r._pack_next,o=3;l>o;o++){bi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(mi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!mi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?di(r,u=a):di(r=c,u),o--):(vi(r,i),u=i,t(i))}var m=(s+f)/2,y=(h+g)/2,x=0;for(o=0;l>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(Mi)}}function xi(n){n._pack_next=n._pack_prev=n}function Mi(n){delete n._pack_next,delete n._pack_prev}function _i(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)_i(u[i],t,e,r)}function bi(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),l=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+l*i,e.y=n.y+c*i-l*u}else e.x=n.x+r,e.y=n.y}function wi(n,t){return n.parent==t.parent?1:2}function Si(n){var t=n.children;return t.length?t[0]:n.t}function ki(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ei(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Ai(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Ci(n,t,e){return n.a.parent===t.parent?n.a:e}function Ni(n){return 1+Bo.max(n,function(n){return n.y})}function zi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Li(n){var t=n.children;return t&&t.length?Li(t[0]):n}function Ti(n){var t,e=n.children;return e&&(t=e.length)?Ti(e[t-1]):n}function qi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ri(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Di(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Pi(n){return n.rangeExtent?n.rangeExtent():Di(n.range())}function Ui(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function ji(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Fi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:gl}function Hi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Bo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Oi(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Hi:Ui,c=r?Ou:Hu;return o=u(n,t,c,e),a=u(t,n,c,du),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Ru)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Vi(n,t)},i.tickFormat=function(t,e){return Xi(n,t,e)},i.nice=function(t){return Ii(n,t),u()},i.copy=function(){return Oi(n,t,e,r)},u()}function Yi(n,t){return Bo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Ii(n,t){return ji(n,Fi(Zi(n,t)[2]))}function Zi(n,t){null==t&&(t=10);var e=Di(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Vi(n,t){return Bo.range.apply(Bo,Zi(n,t))}function Xi(n,t,e){var r=Zi(n,t);if(e){var u=tc.exec(e);if(u.shift(),"s"===u[8]){var i=Bo.formatPrefix(Math.max(ca(r[0]),ca(r[1])));return u[7]||(u[7]="."+$i(i.scale(r[2]))),u[8]="f",e=Bo.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Bi(u[8],r)),e=u.join("")}else e=",."+$i(r[2])+"f";return Bo.format(e)}function $i(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Bi(n,t){var e=$i(t[2]);return n in pl?Math.abs(e-$i(Math.max(ca(t[0]),ca(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Wi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=ji(r.map(u),e?Math:dl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Di(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++<s;)for(var h=f-1;h>0;h--)o.push(i(l)*h);for(l=0;o[l]<a;l++);for(s=o.length;o[s-1]>c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return vl;arguments.length<2?t=vl:"function"!=typeof t&&(t=Bo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Wi(n.copy(),t,e,r)},Yi(o,n)}function Ji(n,t,e){function r(t){return n(u(t))}var u=Gi(t),i=Gi(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Vi(e,n)},r.tickFormat=function(n,t){return Xi(e,n,t)},r.nice=function(n){return r.domain(Ii(e,n))},r.exponent=function(o){return arguments.length?(u=Gi(t=o),i=Gi(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Ji(n.copy(),t,e)},Yi(r,n)}function Gi(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Ki(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Bo.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new a;for(var i,o=-1,c=r.length;++o<c;)u.has(i=r[o])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,o=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,a){arguments.length<2&&(a=0);var c=u[0],l=u[1],s=(l-c)/(Math.max(1,n.length-1)+a);return i=r(n.length<2?(c+l)/2:c+s*a/2,s),o=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,a,c){arguments.length<2&&(a=0),arguments.length<3&&(c=a);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=(f-s)/(n.length-a+2*c);return i=r(s+h*c,h),l&&i.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,a,c){arguments.length<2&&(a=0),arguments.length<3&&(c=a);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=Math.floor((f-s)/(n.length-a+2*c)),g=f-s-(n.length-a)*h;return i=r(s+Math.round(g/2),h),l&&i.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Di(t.a[0])},e.copy=function(){return Ki(n,t)},e.domain(n)}function Qi(r,u){function i(){var n=0,t=u.length;for(a=[];++n<t;)a[n-1]=Bo.quantile(r,n/t);return o}function o(n){return isNaN(n=+n)?void 0:u[Bo.bisect(a,n)]}var a;return o.domain=function(u){return arguments.length?(r=u.map(t).filter(e).sort(n),i()):r},o.range=function(n){return arguments.length?(u=n,i()):u},o.quantiles=function(){return a},o.invertExtent=function(n){return n=u.indexOf(n),0>n?[0/0,0/0]:[n>0?a[n-1]:r[0],n<a.length?a[n]:r[r.length-1]]},o.copy=function(){return Qi(r,u)},i()}function no(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return no(n,t,e)},u()}function to(n,t){function e(e){return e>=e?t[Bo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return to(n,t)},e}function eo(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Vi(n,t)},t.tickFormat=function(t,e){return Xi(n,t,e)},t.copy=function(){return eo(n)},t}function ro(n){return n.innerRadius}function uo(n){return n.outerRadius}function io(n){return n.startAngle}function oo(n){return n.endAngle}function ao(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=kt(e),p=kt(r);++f<h;)u.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(o(),s=[]);return s.length&&o(),l.length?l.join(""):null}var e=Ar,r=Cr,u=Ae,i=co,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=wl.get(n)||co).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function co(n){return n.join("L")}function lo(n){return co(n)+"Z"}function so(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function fo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function ho(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function go(n,t){return n.length<4?co(n):n[1]+mo(n.slice(1,n.length-1),yo(n,t))}function po(n,t){return n.length<3?co(n):n[0]+mo((n.push(n[0]),n),yo([n[n.length-2]].concat(n,[n[1]]),t))}function vo(n,t){return n.length<3?co(n):n[0]+mo(n,yo(n,t))}function mo(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return co(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l<t.length;l++,c++)i=n[c],a=t[l],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var s=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+s[0]+","+s[1]}return r}function yo(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function xo(n){if(n.length<3)return co(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",wo(El,o),",",wo(El,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),So(c,o,a);return n.pop(),c.push("L",r),c.join("")}function Mo(n){if(n.length<4)return co(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(wo(El,i)+","+wo(El,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),So(e,i,o);return e.join("")}function _o(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[wo(El,o),",",wo(El,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),So(t,o,a);return t.join("")}function bo(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,l=-1;++l<=e;)r=n[l],u=l/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return xo(n)}function wo(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function So(n,t,e){n.push("C",wo(Sl,t),",",wo(Sl,e),",",wo(kl,t),",",wo(kl,e),",",wo(El,t),",",wo(El,e))}function ko(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Eo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=ko(u,i);++t<e;)r[t]=(o+(o=ko(u=i,i=n[t+1])))/2;return r[t]=o,r}function Ao(n){for(var t,e,r,u,i=[],o=Eo(n),a=-1,c=n.length-1;++a<c;)t=ko(n[a],n[a+1]),ca(t)<Na?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function Co(n){return n.length<3?co(n):n[0]+mo(n,Ao(n))}function No(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+_l,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function zo(n){function t(t){function c(){v.push("M",a(n(m),f),s,l(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=kt(e),_=kt(u),b=e===r?function(){return g}:kt(r),w=u===i?function(){return p}:kt(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=Ar,r=Ar,u=0,i=Cr,o=Ae,a=co,c=a.key,l=a,s="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=wl.get(n)||co).key,l=a.reverse||a,s=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Lo(n){return n.radius}function To(n){return[n.x,n.y]}function qo(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+_l;return[e*Math.cos(r),e*Math.sin(r)]}}function Ro(){return 64}function Do(){return"circle"}function Po(n){var t=Math.sqrt(n/Ea);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Uo(n,t){return ga(n,Tl),n.id=t,n}function jo(n,t,e,r){var u=n.id;return F(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Fo(n){return null==n&&(n=""),function(){this.textContent=n}}function Ho(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),i=u[e];if(!i){var o=r.time;i=u[e]={tween:new a,time:o,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Bo.timer(function(r){function a(r){return u.active>e?l():(u.active=e,i.event&&i.event.start.call(n,s,t),i.tween.forEach(function(e,r){(r=r.call(n,s,t))&&v.push(r)
-}),Bo.timer(function(){return p.c=c(r||1)?Ae:c,1},0,o),void 0)}function c(r){if(u.active!==e)return l();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a);return o>=1?(i.event&&i.event.end.call(n,s,t),l()):void 0}function l(){return--u.count?delete u[e]:delete n.__transition__,1}var s=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Ka,v=[];return p.t=h+o,r>=h?a(r-h):(p.c=a,void 0)},0,o)}}function Oo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Yo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Io(n){return n.toISOString()}function Zo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Bo.bisect(Ol,u);return i==Ol.length?[t.year,Zi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Ol[i-1]<Ol[i]/u?i-1:i]:[Zl,Zi(n,e)[2]]}return r.invert=function(t){return Vo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Vo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Vo(+e+1),t).length}var i=r.domain(),o=Di(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(ji(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Vo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Vo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Di(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Vo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Zo(n.copy(),t,e)},Yi(r,n)}function Vo(n){return new Date(n)}function Xo(n){return JSON.parse(n.responseText)}function $o(n){var t=Go.createRange();return t.selectNode(Go.body),t.createContextualFragment(n.responseText)}var Bo={version:"3.4.13"};Date.now||(Date.now=function(){return+new Date});var Wo=[].slice,Jo=function(n){return Wo.call(n)},Go=document,Ko=Go.documentElement,Qo=window;try{Jo(Ko.childNodes)[0].nodeType}catch(na){Jo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{Go.createElement("div").style.setProperty("opacity",0,"")}catch(ta){var ea=Qo.Element.prototype,ra=ea.setAttribute,ua=ea.setAttributeNS,ia=Qo.CSSStyleDeclaration.prototype,oa=ia.setProperty;ea.setAttribute=function(n,t){ra.call(this,n,t+"")},ea.setAttributeNS=function(n,t,e){ua.call(this,n,t,e+"")},ia.setProperty=function(n,t,e){oa.call(this,n,t+"",e)}}Bo.ascending=n,Bo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Bo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Bo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Bo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Bo.sum=function(n,t){var r,u=0,i=n.length,o=-1;if(1===arguments.length)for(;++o<i;)e(r=+n[o])&&(u+=r);else for(;++o<i;)e(r=+t.call(n,n[o],o))&&(u+=r);return u},Bo.mean=function(n,r){var u,i=0,o=n.length,a=-1,c=o;if(1===arguments.length)for(;++a<o;)e(u=t(n[a]))?i+=u:--c;else for(;++a<o;)e(u=t(r.call(n,n[a],a)))?i+=u:--c;return c?i/c:void 0},Bo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Bo.median=function(r,u){var i,o=[],a=r.length,c=-1;if(1===arguments.length)for(;++c<a;)e(i=t(r[c]))&&o.push(i);else for(;++c<a;)e(i=t(u.call(r,r[c],c)))&&o.push(i);return o.length?Bo.quantile(o.sort(n),.5):void 0};var aa=r(n);Bo.bisectLeft=aa.left,Bo.bisect=Bo.bisectRight=aa.right,Bo.bisector=function(t){return r(1===t.length?function(e,r){return n(t(e),r)}:t)},Bo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Bo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Bo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Bo.zip=function(){if(!(r=arguments.length))return[];for(var n=-1,t=Bo.min(arguments,u),e=new Array(t);++n<t;)for(var r,i=-1,o=e[n]=new Array(r);++i<r;)o[i]=arguments[i][n];return e},Bo.transpose=function(n){return Bo.zip.apply(Bo,n)},Bo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Bo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Bo.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Bo.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ca=Math.abs;Bo.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,u=[],o=i(ca(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)u.push(r/o);else for(;(r=n+e*++a)<t;)u.push(r/o);return u},Bo.map=function(n){var t=new a;if(n instanceof a)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t};var la="__proto__",sa="\x00";o(a,{has:s,get:function(n){return this._[c(n)]},set:function(n,t){return this._[c(n)]=t},remove:f,keys:h,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:l(t),value:this._[t]});return n},size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t),this._[t])}}),Bo.nest=function(){function n(t,o,c){if(c>=i.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,v=i[c++],d=new a;++g<p;)(h=d.get(l=v(s=o[g])))?h.push(s):d.set(l,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,c))}):(s={},f=function(e,r){s[e]=n(t,r,c)}),d.forEach(f),s}function t(n,e){if(e>=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Bo.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Bo.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),Bo.behavior={},Bo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=d(n,t,t[e]);return n};var fa=["webkit","ms","moz","Moz","o","O"];Bo.dispatch=function(){for(var n=new x,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=M(n);return n},x.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Bo.event=null,Bo.requote=function(n){return n.replace(ha,"\\$&")};var ha=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ga={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},pa=function(n,t){return t.querySelector(n)},va=function(n,t){return t.querySelectorAll(n)},da=Ko.matches||Ko[m(Ko,"matchesSelector")],ma=function(n,t){return da.call(n,t)};"function"==typeof Sizzle&&(pa=function(n,t){return Sizzle(n,t)[0]||null},va=Sizzle,ma=Sizzle.matchesSelector),Bo.selection=function(){return _a};var ya=Bo.selection.prototype=[];ya.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,l=r.length;++c<l;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return S(i)},ya.selectAll=function(n){var t,e,r=[];n=E(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Jo(n.call(e,e.__data__,a,u))),t.parentNode=e);return S(r)};var xa={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Bo.ns={prefix:xa,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.slice(0,t),n=n.slice(t+1)),xa.hasOwnProperty(e)?{space:xa[e],local:n}:n}},ya.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Bo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ya.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!N(n[u]).test(t))return!1;return!0}for(t in n)this.each(L(t,n[t]));return this}return this.each(L(n,t))},ya.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(q(e,n[e],t));return this}if(2>r)return Qo.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(q(n,t,e))},ya.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},ya.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},ya.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},ya.append=function(n){return n=D(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},ya.insert=function(n,t){return n=D(n),t=k(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},ya.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},ya.data=function(n,t){function e(n,e){var r,u,i,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),v=new Array(o);if(t){var d,m=new a,y=new Array(o);for(r=-1;++r<o;)m.has(d=t.call(u=n[r],u.__data__,r))?v[r]=u:m.set(d,u),y[r]=d;for(r=-1;++r<f;)(u=m.get(d=t.call(e,i=e[r],r)))?u!==!0&&(g[r]=u,u.__data__=i):p[r]=P(i),m.set(d,!0);for(r=-1;++r<o;)m.get(y[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=P(i);for(;f>r;++r)p[r]=P(e[r]);for(;o>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),l.push(g),s.push(v)}var r,u,i=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++i<o;)(u=r[i])&&(n[i]=u.__data__);return n}var c=H([]),l=S([]),s=S([]);if("function"==typeof n)for(;++i<o;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<o;)e(r=this[i],n);return l.enter=function(){return c},l.exit=function(){return s},l},ya.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},ya.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=U(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return S(u)},ya.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},ya.sort=function(n){n=j.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},ya.each=function(n){return F(this,function(t,e,r){n.call(t,t.__data__,e,r)})},ya.call=function(n){var t=Jo(arguments);return n.apply(t[0]=this,t),this},ya.empty=function(){return!this.node()},ya.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},ya.size=function(){var n=0;return F(this,function(){++n}),n};var Ma=[];Bo.selection.enter=H,Bo.selection.enter.prototype=Ma,Ma.append=ya.append,Ma.empty=ya.empty,Ma.node=ya.node,Ma.call=ya.call,Ma.size=ya.size,Ma.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var l=-1,s=u.length;++l<s;)(i=u[l])?(t.push(r[l]=e=n.call(u.parentNode,i.__data__,l,a)),e.__data__=i.__data__):t.push(null)}return S(o)},Ma.insert=function(n,t){return arguments.length<2&&(t=O(this)),ya.insert.call(this,n,t)},ya.transition=function(){for(var n,t,e=Cl||++ql,r=[],u=Nl||{time:Date.now(),ease:wu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,l=a.length;++c<l;)(t=a[c])&&Ho(t,c,e,u),n.push(t)}return Uo(r,e)},ya.interrupt=function(){return this.each(Y)},Bo.select=function(n){var t=["string"==typeof n?pa(n,Go):n];return t.parentNode=Ko,S([t])},Bo.selectAll=function(n){var t=Jo("string"==typeof n?va(n,Go):n);return t.parentNode=Ko,S([t])};var _a=Bo.select(Ko);ya.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(I(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(I(n,t,e))};var ba=Bo.map({mouseenter:"mouseover",mouseleave:"mouseout"});ba.forEach(function(n){"on"+n in Go&&ba.remove(n)});var wa="onselectstart"in Go?null:m(Ko.style,"userSelect"),Sa=0;Bo.mouse=function(n){return $(n,b())};var ka=/WebKit/.test(Qo.navigator.userAgent)?-1:0;Bo.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=b().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return $(n,r)},Bo.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Bo.event.target===f),g({type:"dragend"}))}var l,s=this,f=Bo.event.target,h=s.parentNode,g=e.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Bo.select(u()).on(i+d,a).on(o+d,c),y=X(),x=t(h,v);r?(l=r.apply(s,arguments),l=[l.x-x[0],l.y-x[1]]):l=[0,0],g({type:"dragstart"})}}var e=w(n,"drag","dragstart","dragend"),r=null,u=t(y,Bo.mouse,J,"mousemove","mouseup"),i=t(B,Bo.touch,W,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Bo.rebind(n,e,"on")},Bo.touches=function(n,t){return arguments.length<2&&(t=b().touches),t?Jo(t).map(function(t){var e=$(n,t);return e.identifier=t.identifier,e}):[]};var Ea=Math.PI,Aa=2*Ea,Ca=Ea/2,Na=1e-6,za=Na*Na,La=Ea/180,Ta=180/Ea,qa=Math.SQRT2,Ra=2,Da=4;Bo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=et(v),o=i/(Ra*h)*(e*rt(qa*t+v)-tt(v));return[r+o*l,u+o*s,i*e/et(qa*t+v)]}return[r+n*l,u+n*s,i*Math.exp(qa*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Da*f)/(2*i*Ra*h),p=(c*c-i*i-Da*f)/(2*c*Ra*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/qa;return e.duration=1e3*y,e},Bo.behavior.zoom=function(){function n(n){n.on(A,l).on(ja+".zoom",f).on("dblclick.zoom",h).on(z,s)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){x&&x.domain(y.range().map(function(n){return(n-S.x)/S.k}).map(y.invert)),b&&b.domain(M.range().map(function(n){return(n-S.y)/S.k}).map(M.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function l(){function n(){s=1,u(Bo.mouse(r),h),a(l)}function e(){f.on(C,null).on(N,null),g(s&&Bo.event.target===i),c(l)}var r=this,i=Bo.event.target,l=L.of(r,arguments),s=0,f=Bo.select(Qo).on(C,n).on(N,e),h=t(Bo.mouse(r)),g=X();Y.call(r),o(l)}function s(){function n(){var n=Bo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){var t=Bo.event.target;Bo.select(t).on(x,i).on(M,f),b.push(t);for(var e=Bo.event.changedTouches,o=0,c=e.length;c>o;++o)v[e[o].identifier]=null;var l=n(),s=Date.now();if(1===l.length){if(500>s-m){var h=l[0],g=v[h.identifier];r(2*S.k),u(h,g),_(),a(p)}m=s}else if(l.length>1){var h=l[0],y=l[1],w=h[0]-y[0],k=h[1]-y[1];d=w*w+k*k}}function i(){for(var n,t,e,i,o=Bo.touches(g),c=0,l=o.length;l>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=d&&Math.sqrt(s/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Bo.event.touches.length){for(var t=Bo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}Bo.selectAll(b).on(y,null),w.on(A,l).on(z,s),k(),c(p)}var h,g=this,p=L.of(g,arguments),v={},d=0,y=".zoom-"+Bo.event.changedTouches[0].identifier,x="touchmove"+y,M="touchend"+y,b=[],w=Bo.select(g),k=X();Y.call(g),e(),o(p),w.on(A,null).on(z,e)}function f(){var n=L.of(this,arguments);d?clearTimeout(d):(g=t(p=v||Bo.mouse(this)),Y.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),_(),r(Math.pow(2,.002*Pa())*S.k),u(p,g),a(n)}function h(){var n=L.of(this,arguments),e=Bo.mouse(this),i=t(e),l=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Bo.event.shiftKey?Math.ceil(l)-1:Math.floor(l)+1)),u(e,i),a(n),c(n)}var g,p,v,d,m,y,x,M,b,S={x:0,y:0,k:1},k=[960,500],E=Ua,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",z="touchstart.zoom",L=w(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=L.of(this,arguments),t=S;Cl?Bo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Bo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?Ua:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(x=t,y=t.copy(),S={x:0,y:0,k:1},n):x},n.y=function(t){return arguments.length?(b=t,M=t.copy(),S={x:0,y:0,k:1},n):b},Bo.rebind(n,L,"on")};var Pa,Ua=[0,1/0],ja="onwheel"in Go?(Pa=function(){return-Bo.event.deltaY*(Bo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in Go?(Pa=function(){return Bo.event.wheelDelta},"mousewheel"):(Pa=function(){return-Bo.event.detail},"MozMousePixelScroll");Bo.color=it,it.prototype.toString=function(){return this.rgb()+""},Bo.hsl=ot;var Fa=ot.prototype=new it;Fa.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,this.l/n)},Fa.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,n*this.l)},Fa.rgb=function(){return at(this.h,this.s,this.l)},Bo.hcl=ct;var Ha=ct.prototype=new it;Ha.brighter=function(n){return new ct(this.h,this.c,Math.min(100,this.l+Oa*(arguments.length?n:1)))},Ha.darker=function(n){return new ct(this.h,this.c,Math.max(0,this.l-Oa*(arguments.length?n:1)))},Ha.rgb=function(){return lt(this.h,this.c,this.l).rgb()},Bo.lab=st;var Oa=18,Ya=.95047,Ia=1,Za=1.08883,Va=st.prototype=new it;Va.brighter=function(n){return new st(Math.min(100,this.l+Oa*(arguments.length?n:1)),this.a,this.b)},Va.darker=function(n){return new st(Math.max(0,this.l-Oa*(arguments.length?n:1)),this.a,this.b)},Va.rgb=function(){return ft(this.l,this.a,this.b)},Bo.rgb=dt;var Xa=dt.prototype=new it;Xa.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new dt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new dt(u,u,u)},Xa.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new dt(n*this.r,n*this.g,n*this.b)},Xa.hsl=function(){return _t(this.r,this.g,this.b)},Xa.toString=function(){return"#"+xt(this.r)+xt(this.g)+xt(this.b)};var $a=Bo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});$a.forEach(function(n,t){$a.set(n,mt(t))}),Bo.functor=kt,Bo.xhr=At(Et),Bo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Ct(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<l;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(u=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;l>s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,f++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new v,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Bo.csv=Bo.dsv(",","text/csv"),Bo.tsv=Bo.dsv("	","text/tab-separated-values");var Ba,Wa,Ja,Ga,Ka,Qa=Qo[m(Qo,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Bo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Wa?Wa.n=i:Ba=i,Wa=i,Ja||(Ga=clearTimeout(Ga),Ja=1,Qa(Lt))},Bo.timer.flush=function(){Tt(),qt()},Bo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var nc=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Dt);Bo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Bo.round(n,Rt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),nc[8+e/3]};var tc=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,ec=Bo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Bo.round(n,Rt(n,t))).toFixed(Math.max(0,Math.min(20,Rt(n*(1+1e-15),t))))}}),rc=Bo.time={},uc=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ic.setUTCDate.apply(this._,arguments)},setDay:function(){ic.setUTCDay.apply(this._,arguments)},setFullYear:function(){ic.setUTCFullYear.apply(this._,arguments)},setHours:function(){ic.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ic.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ic.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ic.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ic.setUTCSeconds.apply(this._,arguments)},setTime:function(){ic.setTime.apply(this._,arguments)}};var ic=Date.prototype;rc.year=Ft(function(n){return n=rc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),rc.years=rc.year.range,rc.years.utc=rc.year.utc.range,rc.day=Ft(function(n){var t=new uc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),rc.days=rc.day.range,rc.days.utc=rc.day.utc.range,rc.dayOfYear=function(n){var t=rc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=rc[n]=Ft(function(n){return(n=rc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=rc.year(n).getDay();return Math.floor((rc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});rc[n+"s"]=e.range,rc[n+"s"].utc=e.utc.range,rc[n+"OfYear"]=function(n){var e=rc.year(n).getDay();return Math.floor((rc.dayOfYear(n)+(e+t)%7)/7)}}),rc.week=rc.sunday,rc.weeks=rc.sunday.range,rc.weeks.utc=rc.sunday.utc.range,rc.weekOfYear=rc.sundayOfYear;var oc={"-":"",_:" ",0:"0"},ac=/^\s*\d+/,cc=/^%/;Bo.locale=function(n){return{numberFormat:Pt(n),timeFormat:Ot(n)}};var lc=Bo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Bo.format=lc.numberFormat,Bo.geo={},ce.prototype={s:0,t:0,add:function(n){le(n,this.t,sc),le(sc.s,this.s,this),this.s?this.t+=sc.t:this.s=sc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var sc=new ce;Bo.geo.stream=function(n,t){n&&fc.hasOwnProperty(n.type)?fc[n.type](n,t):se(n,t)};var fc={Feature:function(n,t){se(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)se(e[r].geometry,t)}},hc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){fe(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)fe(e[r],t,0)},Polygon:function(n,t){he(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)he(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)se(e[r],t)}};Bo.geo.area=function(n){return gc=0,Bo.geo.stream(n,vc),gc};var gc,pc=new ce,vc={sphere:function(){gc+=4*Ea},point:y,lineStart:y,lineEnd:y,polygonStart:function(){pc.reset(),vc.lineStart=ge},polygonEnd:function(){var n=2*pc;gc+=0>n?4*Ea+n:n,vc.lineStart=vc.lineEnd=vc.point=y}};Bo.geo.bounds=function(){function n(n,t){x.push(M=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*La,e*La]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);xe(o),o=Me(o);var c=t-p,l=c>0?1:-1,v=o[0]*Ta*l,d=ca(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Ta;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Ta;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=s,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ca(r)>180?r+(r>0?360:-360):r}else v=n,d=e;vc.point(n,e),t(n,e)}function i(){vc.lineStart()}function o(){u(v,d),vc.lineEnd(),ca(y)>Na&&(s=-(h=180)),M[0]=s,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,vc.polygonStart()},polygonEnd:function(){vc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>pc?(s=-(h=180),f=-(g=90)):y>Na?g=90:-Na>y&&(f=-90),M[0]=s,M[1]=h}};return function(n){g=h=-(s=f=1/0),x=[],Bo.geo.stream(n,_);
-var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return x=M=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),Bo.geo.centroid=function(n){dc=mc=yc=xc=Mc=_c=bc=wc=Sc=kc=Ec=0,Bo.geo.stream(n,Ac);var t=Sc,e=kc,r=Ec,u=t*t+e*e+r*r;return za>u&&(t=_c,e=bc,r=wc,Na>mc&&(t=yc,e=xc,r=Mc),u=t*t+e*e+r*r,za>u)?[0/0,0/0]:[Math.atan2(e,t)*Ta,nt(r/Math.sqrt(u))*Ta]};var dc,mc,yc,xc,Mc,_c,bc,wc,Sc,kc,Ec,Ac={sphere:y,point:be,lineStart:Se,lineEnd:ke,polygonStart:function(){Ac.lineStart=Ee},polygonEnd:function(){Ac.lineStart=Se}},Cc=Le(Ae,De,Ue,[-Ea,-Ea/2]),Nc=1e9;Bo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Oe(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Bo.geo.conicEqualArea=function(){return Ie(Ze)}).raw=Ze,Bo.geo.albers=function(){return Bo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Bo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Bo.geo.albers(),o=Bo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Bo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Na,f+.12*l+Na],[s-.214*l-Na,f+.234*l-Na]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Na,f+.166*l+Na],[s-.115*l-Na,f+.234*l-Na]]).stream(c).point,n},n.scale(1070)};var zc,Lc,Tc,qc,Rc,Dc,Pc={point:y,lineStart:y,lineEnd:y,polygonStart:function(){Lc=0,Pc.lineStart=Ve},polygonEnd:function(){Pc.lineStart=Pc.lineEnd=Pc.point=y,zc+=ca(Lc/2)}},Uc={point:Xe,lineStart:y,lineEnd:y,polygonStart:y,polygonEnd:y},jc={point:We,lineStart:Je,lineEnd:Ge,polygonStart:function(){jc.lineStart=Ke},polygonEnd:function(){jc.point=We,jc.lineStart=Je,jc.lineEnd=Ge}};Bo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Bo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return zc=0,Bo.geo.stream(n,u(Pc)),zc},n.centroid=function(n){return yc=xc=Mc=_c=bc=wc=Sc=kc=Ec=0,Bo.geo.stream(n,u(jc)),Ec?[Sc/Ec,kc/Ec]:wc?[_c/wc,bc/wc]:Mc?[yc/Mc,xc/Mc]:[0/0,0/0]},n.bounds=function(n){return Rc=Dc=-(Tc=qc=1/0),Bo.geo.stream(n,u(Uc)),[[Tc,qc],[Rc,Dc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):Et,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new $e:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Bo.geo.albersUsa()).context(null)},Bo.geo.transform=function(n){return{stream:function(t){var e=new er(t);for(var r in n)e[r]=n[r];return e}}},er.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Bo.geo.projection=ur,Bo.geo.projectionMutator=ir,(Bo.geo.equirectangular=function(){return ur(ar)}).raw=ar.invert=ar,Bo.geo.rotation=function(n){function t(t){return t=n(t[0]*La,t[1]*La),t[0]*=Ta,t[1]*=Ta,t}return n=lr(n[0]%360*La,n[1]*La,n.length>2?n[2]*La:0),t.invert=function(t){return t=n.invert(t[0]*La,t[1]*La),t[0]*=Ta,t[1]*=Ta,t},t},cr.invert=ar,Bo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=lr(-n[0]*La,-n[1]*La,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ta,n[1]*=Ta}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=gr((t=+r)*La,u*La),n):t},n.precision=function(r){return arguments.length?(e=gr(t*La,(u=+r)*La),n):u},n.angle(90)},Bo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*La,u=n[1]*La,i=t[1]*La,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},Bo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Bo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Bo.range(Math.ceil(l/m)*m,c,m).map(g)).concat(Bo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ca(n%d)>Na}).map(s)).concat(Bo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ca(n%m)>Na}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=vr(a,o,90),f=dr(r,e,y),h=vr(l,c,90),g=dr(i,u,y),n):y},n.majorExtent([[-180,-90+Na],[180,90-Na]]).minorExtent([[-180,-80-Na],[180,80+Na]])},Bo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=mr,u=yr;return n.distance=function(){return Bo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Bo.geo.interpolate=function(n,t){return xr(n[0]*La,n[1]*La,t[0]*La,t[1]*La)},Bo.geo.length=function(n){return Fc=0,Bo.geo.stream(n,Hc),Fc};var Fc,Hc={sphere:y,point:y,lineStart:Mr,lineEnd:y,polygonStart:y,polygonEnd:y},Oc=_r(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Bo.geo.azimuthalEqualArea=function(){return ur(Oc)}).raw=Oc;var Yc=_r(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},Et);(Bo.geo.azimuthalEquidistant=function(){return ur(Yc)}).raw=Yc,(Bo.geo.conicConformal=function(){return Ie(br)}).raw=br,(Bo.geo.conicEquidistant=function(){return Ie(wr)}).raw=wr;var Ic=_r(function(n){return 1/n},Math.atan);(Bo.geo.gnomonic=function(){return ur(Ic)}).raw=Ic,Sr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Ca]},(Bo.geo.mercator=function(){return kr(Sr)}).raw=Sr;var Zc=_r(function(){return 1},Math.asin);(Bo.geo.orthographic=function(){return ur(Zc)}).raw=Zc;var Vc=_r(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Bo.geo.stereographic=function(){return ur(Vc)}).raw=Vc,Er.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Ca]},(Bo.geo.transverseMercator=function(){var n=kr(Er),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Er,Bo.geom={},Bo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=kt(e),i=kt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(zr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=Nr(a),s=Nr(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t<s.length-h;++t)g.push(n[a[s[t]][2]]);return g}var e=Ar,r=Cr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Bo.geom.polygon=function(n){return ga(n,Xc),n};var Xc=Bo.geom.polygon.prototype=[];Xc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Xc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Xc.clip=function(n){for(var t,e,r,u,i,o,a=qr(n),c=-1,l=this.length-qr(this),s=this[l-1];++c<l;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Lr(o,s,u)?(Lr(i,s,u)||n.push(Tr(i,o,s,u)),n.push(o)):Lr(i,s,u)&&n.push(Tr(i,o,s,u)),i=o;a&&n.push(n[0]),s=u}return n};var $c,Bc,Wc,Jc,Gc,Kc=[],Qc=[];Or.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ir),t.length},Qr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},nu.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=uu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(eu(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ru(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(ru(this,e),n=e,e=n.U),e.C=!1,r.C=!0,eu(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?uu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,eu(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ru(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,eu(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,ru(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,eu(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,ru(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Bo.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return iu(e(n),a).cells.forEach(function(e,a){var c=e.edges,l=e.site,s=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):l.x>=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Na)*Na,y:Math.round(o(n,t)/Na)*Na,i:t}})}var r=Ar,u=Cr,i=r,o=u,a=nl;return n?t(n):(t.links=function(n){return iu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return iu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Ir),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c<l;)u=s,i=f,s=a[c].edge,f=s.l===o?s.r:s.l,r<i.i&&r<f.i&&au(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=kt(r=n),t):r},t.y=function(n){return arguments.length?(o=kt(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?nl:n,t):a===nl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===nl?null:a&&a[1]},t)};var nl=[[-1e6,-1e6],[1e6,1e6]];Bo.geom.delaunay=function(n){return Bo.geom.voronoi().triangles(n)},Bo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(ca(c-e)+ca(s-r)<.01)l(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,u,i,o,a),l(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,u,i,o,a)}function l(n,t,e,r,u,o,a,c){var l=.5*(u+a),s=.5*(o+c),f=e>=l,h=r>=s,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=su()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,x=kt(a),M=kt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.x<v&&(v=s.x),s.y<d&&(d=s.y),s.x>m&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var _=+x(s=n[g],g),b=+M(s,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=su();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){fu(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=s=null,k}var o,a=Ar,c=Cr;return(o=arguments.length)?(a=cu,c=lu,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Bo.interpolateRgb=hu,Bo.interpolateObject=gu,Bo.interpolateNumber=pu,Bo.interpolateString=vu;var tl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,el=new RegExp(tl.source,"g");Bo.interpolate=du,Bo.interpolators=[function(n,t){var e=typeof t;return("string"===e?$a.has(t)||/^(#|rgb\(|hsl\()/.test(t)?hu:vu:t instanceof it?hu:Array.isArray(t)?mu:"object"===e&&isNaN(t)?gu:pu)(n,t)}],Bo.interpolateArray=mu;var rl=function(){return Et},ul=Bo.map({linear:rl,poly:Su,quad:function(){return _u},cubic:function(){return bu},sin:function(){return ku},exp:function(){return Eu},circle:function(){return Au},elastic:Cu,back:Nu,bounce:function(){return zu}}),il=Bo.map({"in":Et,out:xu,"in-out":Mu,"out-in":function(n){return Mu(xu(n))}});Bo.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=ul.get(e)||rl,r=il.get(r)||Et,yu(r(e.apply(null,Wo.call(arguments,1))))},Bo.interpolateHcl=Lu,Bo.interpolateHsl=Tu,Bo.interpolateLab=qu,Bo.interpolateRound=Ru,Bo.transform=function(n){var t=Go.createElementNS(Bo.ns.prefix.svg,"g");return(Bo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Du(e?e.matrix:ol)})(n)},Du.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ol={a:1,b:0,c:0,d:1,e:0,f:0};Bo.interpolateTransform=Fu,Bo.layout={},Bo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Yu(n[e]));return t}},Bo.layout.chord=function(){function n(){var n,l,f,h,g,p={},v=[],d=Bo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(l=0,g=-1;++g<i;)l+=u[h][g];v.push(l),m.push(Bo.range(i)),n+=l}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(Aa-s*i)/n,l=0,h=-1;++h<i;){for(f=l,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=l,b=l+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,l={},s=0;return l.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,l):u},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(o=n,e=r=null,l):o},l.sortSubgroups=function(n){return arguments.length?(a=n,e=null,l):a},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},Bo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=Bo.event.x,n.py=Bo.event.y,a.resume()}var e,r,u,i,o,a={},c=Bo.dispatch("start","tick","end"),l=[1,1],s=.9,f=al,h=cl,g=-30,p=ll,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=l[0]/2,M=l[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Wu(t=Bo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*s,a.y-=(a.py-(a.py=a.y))*s);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(l=n,a):l},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(s=+n,a):s},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Bo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;l>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++a<l;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,s=y.length,p=l[0],v=l[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Bo.behavior.drag().origin(Et).on("dragstart.force",Vu).on("drag.force",t).on("dragend.force",Xu)),arguments.length?(this.on("mouseover.force",$u).on("mouseout.force",Bu).call(e),void 0):e},Bo.rebind(a,c,"on")};var al=20,cl=1,ll=1/0;Bo.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Ku(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=ti,e=Qu,r=ni;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Gu(t,function(n){n.children&&(n.value=0)}),Ku(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},Bo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++l<o;)n(a=i[l],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Bo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Ju(e,r)},Bo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Bo.sum(o),l=Bo.range(i.length);null!=e&&l.sort(e===sl?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var s=[];return l.forEach(function(n){var t;s[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),s}var t=Number,e=sl,r=0,u=Aa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var sl={};Bo.layout.stack=function(){function n(a,c){if(!(h=a.length))return a;var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=Bo.permute(l,f),s=Bo.permute(s,f);var h,g,p,v,d=r.call(n,s,c),m=l[0].length;for(p=0;m>p;++p)for(u.call(n,l[0][p],v=d[p],s[0][p][1]),g=1;h>g;++g)u.call(n,l[g][p],v+=s[g-1][p][1],s[g][p][1]);return a}var t=Et,e=oi,r=ai,u=ii,i=ri,o=ui;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:fl.get(t)||oi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:hl.get(t)||ai,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var fl=Bo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ci),i=n.map(li),o=Bo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return Bo.range(n.length).reverse()},"default":oi}),hl=Bo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ai});Bo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=l[i],a>=s[0]&&a<=s[1]&&(o=c[Bo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=gi,u=fi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=kt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return hi(n,t)}:kt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Bo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Ku(a,function(n){n.r=+s(n.value)}),Ku(a,yi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Ku(a,function(n){n.r+=f}),Ku(a,yi),Ku(a,function(n){n.r-=f})}return _i(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=Bo.layout.hierarchy().sort(pi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Ju(n,e)},Bo.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(Ku(h,e),h.parent.m=-h.z,Gu(h,r),l)Gu(f,i);else{var g=f,p=f,v=f;Gu(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Gu(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Ai(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=ki(o),u=Si(u),o&&u;)c=Si(c),i=ki(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(Ei(Ci(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!ki(i)&&(i.t=o,i.m+=f-s),u&&!Si(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=Bo.layout.hierarchy().sort(null).value(null),a=wi,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},Ju(n,o)},Bo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Ku(c,function(n){var t=n.children;t&&t.length?(n.x=zi(t),n.y=Ni(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Li(c),f=Ti(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Ku(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Bo.layout.hierarchy().sort(null).value(null),e=wi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Ju(n,t)},Bo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++i<o;)u=n[i],u.x=a,u.y=l,u.dy=s,a+=u.dx=Math.min(e.x+e.dx-a,s?c(u.area/s):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++i<o;)u=n[i],u.x=a,u.y=l,u.dx=s,l+=u.dy=Math.min(e.y+e.dy-l,s?c(u.area/s):0);u.z=!1,u.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Bo.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=qi,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(l=n,i):l},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?qi(t):Ri(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ri(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?qi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Ju(i,a)},Bo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Bo.random.normal.apply(Bo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Bo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Bo.scale={};var gl={floor:Et,ceil:Et};Bo.scale.linear=function(){return Oi([0,1],[0,1],du,!1)};var pl={s:1,g:1,p:1,r:1,e:1};Bo.scale.log=function(){return Wi(Bo.scale.linear().domain([0,1]),10,!0,[1,10])};var vl=Bo.format(".0e"),dl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Bo.scale.pow=function(){return Ji(Bo.scale.linear(),1,[0,1])},Bo.scale.sqrt=function(){return Bo.scale.pow().exponent(.5)},Bo.scale.ordinal=function(){return Ki([],{t:"range",a:[[]]})},Bo.scale.category10=function(){return Bo.scale.ordinal().range(ml)},Bo.scale.category20=function(){return Bo.scale.ordinal().range(yl)},Bo.scale.category20b=function(){return Bo.scale.ordinal().range(xl)},Bo.scale.category20c=function(){return Bo.scale.ordinal().range(Ml)};var ml=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(yt),yl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(yt),xl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(yt),Ml=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(yt);Bo.scale.quantile=function(){return Qi([],[])
-},Bo.scale.quantize=function(){return no(0,1,[0,1])},Bo.scale.threshold=function(){return to([.5],[0,1])},Bo.scale.identity=function(){return eo([0,1])},Bo.svg={},Bo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+_l,a=u.apply(this,arguments)+_l,c=(o>a&&(c=o,o=a,a=c),a-o),l=Ea>c?"0":"1",s=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a);return c>=bl?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+l+",0 "+n*s+","+n*f+"Z":"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=ro,e=uo,r=io,u=oo;return n.innerRadius=function(e){return arguments.length?(t=kt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=kt(t),n):e},n.startAngle=function(t){return arguments.length?(r=kt(t),n):r},n.endAngle=function(t){return arguments.length?(u=kt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+_l;return[Math.cos(i)*n,Math.sin(i)*n]},n};var _l=-Ca,bl=Aa-Na;Bo.svg.line=function(){return ao(Et)};var wl=Bo.map({linear:co,"linear-closed":lo,step:so,"step-before":fo,"step-after":ho,basis:xo,"basis-open":Mo,"basis-closed":_o,bundle:bo,cardinal:vo,"cardinal-open":go,"cardinal-closed":po,monotone:Co});wl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Sl=[0,2/3,1/3,0],kl=[0,1/3,2/3,0],El=[0,1/6,2/3,1/6];Bo.svg.line.radial=function(){var n=ao(No);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},fo.reverse=ho,ho.reverse=fo,Bo.svg.area=function(){return zo(Et)},Bo.svg.area.radial=function(){var n=zo(No);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Bo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+_l,s=l.call(n,u,r)+_l;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Ea)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Lo,c=io,l=oo;return n.radius=function(t){return arguments.length?(a=kt(t),n):a},n.source=function(t){return arguments.length?(i=kt(t),n):i},n.target=function(t){return arguments.length?(o=kt(t),n):o},n.startAngle=function(t){return arguments.length?(c=kt(t),n):c},n.endAngle=function(t){return arguments.length?(l=kt(t),n):l},n},Bo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=To;return n.source=function(e){return arguments.length?(t=kt(e),n):t},n.target=function(t){return arguments.length?(e=kt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Bo.svg.diagonal.radial=function(){var n=Bo.svg.diagonal(),t=To,e=n.projection;return n.projection=function(n){return arguments.length?e(qo(t=n)):t},n},Bo.svg.symbol=function(){function n(n,r){return(Al.get(t.call(this,n,r))||Po)(e.call(this,n,r))}var t=Do,e=Ro;return n.type=function(e){return arguments.length?(t=kt(e),n):t},n.size=function(t){return arguments.length?(e=kt(t),n):e},n};var Al=Bo.map({circle:Po,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Ll)),e=t*Ll;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/zl),e=t*zl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/zl),e=t*zl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Bo.svg.symbolTypes=Al.keys();var Cl,Nl,zl=Math.sqrt(3),Ll=Math.tan(30*La),Tl=[],ql=0;Tl.call=ya.call,Tl.empty=ya.empty,Tl.node=ya.node,Tl.size=ya.size,Bo.transition=function(n){return arguments.length?Cl?n.transition():n:_a.transition()},Bo.transition.prototype=Tl,Tl.select=function(n){var t,e,r,u=this.id,i=[];n=k(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],l=-1,s=c.length;++l<s;)(r=c[l])&&(e=n.call(r,r.__data__,l,o))?("__data__"in r&&(e.__data__=r.__data__),Ho(e,l,u,r.__transition__[u]),t.push(e)):t.push(null)}return Uo(i,u)},Tl.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=E(n);for(var c=-1,l=this.length;++c<l;)for(var s=this[c],f=-1,h=s.length;++f<h;)if(r=s[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Ho(u,g,o,i),t.push(u)}return Uo(a,o)},Tl.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=U(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Uo(u,this.id)},Tl.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):F(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Tl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Fu:du,a=Bo.ns.qualify(n);return jo(this,"attr."+n,t,a.local?i:u)},Tl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Bo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Tl.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Qo.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=du(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return jo(this,"style."+n,t,u)},Tl.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Qo.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Tl.text=function(n){return jo(this,"text",n,Fo)},Tl.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Tl.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Bo.ease.apply(Bo,arguments)),F(this,function(e){e.__transition__[t].ease=n}))},Tl.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:F(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Tl.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:F(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Tl.each=function(n,t){var e=this.id;if(arguments.length<2){var r=Nl,u=Cl;Cl=e,F(this,function(t,r,u){Nl=t.__transition__[e],n.call(t,t.__data__,r,u)}),Nl=r,Cl=u}else F(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Bo.dispatch("start","end"))).on(n,t)});return this},Tl.transition=function(){for(var n,t,e,r,u=this.id,i=++ql,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],l=0,s=t.length;s>l;l++)(e=t[l])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Ho(e,l,i,r)),n.push(e)}return Uo(o,i)},Bo.svg.axis=function(){function n(n){n.each(function(){var n,l=Bo.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):Et:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Na),d=Bo.transition(p.exit()).style("opacity",Na).remove(),m=Bo.transition(p.order()).style("opacity",1),y=Math.max(u,0)+o,x=Pi(f),M=l.selectAll(".domain").data([0]),_=(M.enter().append("path").attr("class","domain"),Bo.transition(M));v.append("line"),v.append("text");var b,w,S,k,E=v.select("line"),A=m.select("line"),C=p.select("text").text(g),N=v.select("text"),z=m.select("text"),L="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=Oo,b="x",S="y",w="x2",k="y2",C.attr("dy",0>L?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+L*i+"V0H"+x[1]+"V"+L*i)):(n=Yo,b="y",S="x",w="y2",k="x2",C.attr("dy",".32em").style("text-anchor",0>L?"end":"start"),_.attr("d","M"+L*i+","+x[0]+"H0V"+x[1]+"H"+L*i)),E.attr(k,L*u),N.attr(S,L*y),A.attr(w,0).attr(k,L*u),z.attr(b,0).attr(S,L*y),f.rangeBand){var T=f,q=T.rangeBand()/2;s=f=function(n){return T(n)+q}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=Bo.scale.linear(),r=Rl,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Dl?t+"":Rl,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Rl="bottom",Dl={top:1,right:1,bottom:1,left:1};Bo.svg.brush=function(){function n(i){i.each(function(){var i=Bo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,Et);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Pl[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var s,f=Bo.transition(i),h=Bo.transition(o);c&&(s=Pi(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),e(f)),l&&(s=Pi(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Bo.event.keyCode&&(C||(y=null,z[0]-=s[1],z[1]-=f[1],C=2),_())}function p(){32==Bo.event.keyCode&&2==C&&(z[0]+=s[1],z[1]+=f[1],C=0,_())}function v(){var n=Bo.mouse(M),u=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(Bo.event.altKey?(y||(y=[(s[0]+s[1])/2,(f[0]+f[1])/2]),z[0]=s[+(n[0]<y[0])],z[1]=f[+(n[1]<y[1])]):y=null),E&&d(n,c,0)&&(e(S),u=!0),A&&d(n,l,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:C?"move":"resize"}))}function d(n,t,e){var r,u,a=Pi(t),c=a[0],l=a[1],p=z[e],v=e?f:s,d=v[1]-v[0];return C&&(c-=p,l-=d+p),r=(e?g:h)?Math.max(c,Math.min(l,n[e])):n[e],C?u=(r+=p)+d:(y&&(p=Math.max(c,Math.min(l,2*y[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Bo.select("body").style("cursor",null),L.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),N(),w({type:"brushend"})}var y,x,M=this,b=Bo.select(Bo.event.target),w=a.of(M,arguments),S=Bo.select(M),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&l,C=b.classed("extent"),N=X(),z=Bo.mouse(M),L=Bo.select(Qo).on("keydown.brush",u).on("keyup.brush",p);if(Bo.event.changedTouches?L.on("touchmove.brush",v).on("touchend.brush",m):L.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),C)z[0]=s[0]-z[0],z[1]=f[0]-z[1];else if(k){var T=+/w$/.test(k),q=+/^n/.test(k);x=[s[1-T]-z[0],f[1-q]-z[1]],z[0]=s[T],z[1]=f[q]}else Bo.event.altKey&&(y=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Bo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=w(n,"brushstart","brush","brushend"),c=null,l=null,s=[0,0],f=[0,0],h=!0,g=!0,p=Ul[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Cl?Bo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,s=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=mu(s,t.x),r=mu(f,t.y);return i=o=null,function(u){s=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Ul[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,p=Ul[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(h=!!t[0],g=!!t[1]):c?h=!!t:l&&(g=!!t),n):c&&l?[h,g]:c?h:l?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),l&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(h=u,u=a,a=h))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&f[0]==f[1]},Bo.rebind(n,a,"on")};var Pl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Ul=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],jl=rc.format=lc.timeFormat,Fl=jl.utc,Hl=Fl("%Y-%m-%dT%H:%M:%S.%LZ");jl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Io:Hl,Io.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Io.toString=Hl.toString,rc.second=Ft(function(n){return new uc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),rc.seconds=rc.second.range,rc.seconds.utc=rc.second.utc.range,rc.minute=Ft(function(n){return new uc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),rc.minutes=rc.minute.range,rc.minutes.utc=rc.minute.utc.range,rc.hour=Ft(function(n){var t=n.getTimezoneOffset()/60;return new uc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),rc.hours=rc.hour.range,rc.hours.utc=rc.hour.utc.range,rc.month=Ft(function(n){return n=rc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),rc.months=rc.month.range,rc.months.utc=rc.month.utc.range;var Ol=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Yl=[[rc.second,1],[rc.second,5],[rc.second,15],[rc.second,30],[rc.minute,1],[rc.minute,5],[rc.minute,15],[rc.minute,30],[rc.hour,1],[rc.hour,3],[rc.hour,6],[rc.hour,12],[rc.day,1],[rc.day,2],[rc.week,1],[rc.month,1],[rc.month,3],[rc.year,1]],Il=jl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ae]]),Zl={range:function(n,t,e){return Bo.range(Math.ceil(n/e)*e,+t,e).map(Vo)},floor:Et,ceil:Et};Yl.year=rc.year,rc.scale=function(){return Zo(Bo.scale.linear(),Yl,Il)};var Vl=Yl.map(function(n){return[n[0].utc,n[1]]}),Xl=Fl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ae]]);Vl.year=rc.year.utc,rc.scale.utc=function(){return Zo(Bo.scale.linear(),Vl,Xl)},Bo.text=At(function(n){return n.responseText}),Bo.json=function(n,t){return Ct(n,"application/json",Xo,t)},Bo.html=function(n,t){return Ct(n,"text/html",$o,t)},Bo.xml=At(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Bo):"object"==typeof module&&module.exports&&(module.exports=Bo),this.d3=Bo}();
\ No newline at end of file
+!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null!=n&&!isNaN(n)}function e(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function r(n){return n.length}function u(n){for(var t=1;n*t%1;)t*=10;return t}function i(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function o(){}function a(n){return ia+n in this}function c(n){return n=ia+n,n in this&&delete this[n]}function s(){var n=[];return this.forEach(function(t){n.push(t)}),n}function l(){var n=0;for(var t in this)t.charCodeAt(0)===oa&&++n;return n}function f(){for(var n in this)if(n.charCodeAt(0)===oa)return!1;return!0}function h(){}function g(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function p(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=aa.length;r>e;++e){var u=aa[e]+t;if(u in n)return u}}function v(){}function d(){}function m(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new o;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function y(){Zo.event.preventDefault()}function x(){for(var n,t=Zo.event;n=t.sourceEvent;)t=n;return t}function M(n){for(var t=new d,e=0,r=arguments.length;++e<r;)t[arguments[e]]=m(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Zo.event;u.target=n,Zo.event=u,t[u.type].apply(e,r)}finally{Zo.event=i}}},t}function _(n){return sa(n,pa),n}function b(n){return"function"==typeof n?n:function(){return la(n,this)}}function w(n){return"function"==typeof n?n:function(){return fa(n,this)}}function S(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Zo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function k(n){return n.trim().replace(/\s+/g," ")}function E(n){return new RegExp("(?:^|\\s+)"+Zo.requote(n)+"(?:\\s+|$)","g")}function A(n){return(n+"").trim().split(/^|\s+/)}function C(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=A(n).map(N);var u=n.length;return"function"==typeof t?r:e}function N(n){var t=E(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",k(u+" "+n))):e.setAttribute("class",k(u.replace(t," ")))}}function z(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function L(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function T(n){return"function"==typeof n?n:(n=Zo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function q(n){return{__data__:n}}function R(n){return function(){return ga(this,n)}}function D(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function P(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function U(n){return sa(n,da),n}function j(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function H(){var n=this.__transition__;n&&++n.active}function F(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,Xo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Zo.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=O;a>0&&(n=n.substring(0,a));var s=ya.get(n);return s&&(n=s,c=Y),a?t?u:r:t?v:i}function O(n,t){return function(e){var r=Zo.event;Zo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Zo.event=r}}}function Y(n,t){var e=O(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function I(){var n=".dragsuppress-"+ ++Ma,t="click"+n,e=Zo.select(Wo).on("touchmove"+n,y).on("dragstart"+n,y).on("selectstart"+n,y);if(xa){var r=Bo.style,u=r[xa];r[xa]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),xa&&(r[xa]=u),i&&(e.on(t,function(){y(),o()},!0),setTimeout(o,0))}}function Z(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>_a&&(Wo.scrollX||Wo.scrollY)){e=Zo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();_a=!(u.f||u.e),e.remove()}return _a?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function V(){return Zo.event.changedTouches[0].identifier}function X(){return Zo.event.target}function $(){return Wo}function B(n){return n>0?1:0>n?-1:0}function W(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function J(n){return n>1?0:-1>n?ba:Math.acos(n)}function G(n){return n>1?Sa:-1>n?-Sa:Math.asin(n)}function K(n){return((n=Math.exp(n))-1/n)/2}function Q(n){return((n=Math.exp(n))+1/n)/2}function nt(n){return((n=Math.exp(2*n))-1)/(n+1)}function tt(n){return(n=Math.sin(n/2))*n}function et(){}function rt(n,t,e){return this instanceof rt?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof rt?new rt(n.h,n.s,n.l):mt(""+n,yt,rt):new rt(n,t,e)}function ut(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new gt(u(n+120),u(n),u(n-120))}function it(n,t,e){return this instanceof it?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof it?new it(n.h,n.c,n.l):n instanceof at?st(n.l,n.a,n.b):st((n=xt((n=Zo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new it(n,t,e)}function ot(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new at(e,Math.cos(n*=Aa)*t,Math.sin(n)*t)}function at(n,t,e){return this instanceof at?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof at?new at(n.l,n.a,n.b):n instanceof it?ot(n.l,n.c,n.h):xt((n=gt(n)).r,n.g,n.b):new at(n,t,e)}function ct(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=lt(u)*ja,r=lt(r)*Ha,i=lt(i)*Fa,new gt(ht(3.2404542*u-1.5371385*r-.4985314*i),ht(-.969266*u+1.8760108*r+.041556*i),ht(.0556434*u-.2040259*r+1.0572252*i))}function st(n,t,e){return n>0?new it(Math.atan2(e,t)*Ca,Math.sqrt(t*t+e*e),n):new it(0/0,0/0,n)}function lt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function ft(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function ht(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function gt(n,t,e){return this instanceof gt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof gt?new gt(n.r,n.g,n.b):mt(""+n,gt,ut):new gt(n,t,e)}function pt(n){return new gt(n>>16,255&n>>8,255&n)}function vt(n){return pt(n)+""}function dt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function mt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(_t(u[0]),_t(u[1]),_t(u[2]))}return(i=Ia.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.substring(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function yt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new rt(r,u,c)}function xt(n,t,e){n=Mt(n),t=Mt(t),e=Mt(e);var r=ft((.4124564*n+.3575761*t+.1804375*e)/ja),u=ft((.2126729*n+.7151522*t+.072175*e)/Ha),i=ft((.0193339*n+.119192*t+.9503041*e)/Fa);return at(116*u-16,500*(r-u),200*(u-i))}function Mt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function _t(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function bt(n){return"function"==typeof n?n:function(){return n}}function wt(n){return n}function St(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),kt(t,e,n,r)}}function kt(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Zo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,s=null;return!Wo.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Zo.event;Zo.event=n;try{o.progress.call(i,c)}finally{Zo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(s=n,i):s},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Xo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var l in a)c.setRequestHeader(l,a[l]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=s&&(c.responseType=s),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Zo.rebind(i,o,"on"),null==r?i:i.get(Et(r))}function Et(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function At(){var n=Ct(),t=Nt()-n;t>24?(isFinite(t)&&(clearTimeout($a),$a=setTimeout(At,t)),Xa=0):(Xa=1,Wa(At))}function Ct(){var n=Date.now();for(Ba=Za;Ba;)n>=Ba.t&&(Ba.f=Ba.c(n-Ba.t)),Ba=Ba.n;return n}function Nt(){for(var n,t=Za,e=1/0;t;)t.f?t=n?n.n=t.n:Za=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Va=n,e}function zt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Lt(n,t){var e=Math.pow(10,3*ua(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Tt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];t>0&&o>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:wt;return function(n){var e=Ga.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",s=e[5],l=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(s||"0"===r&&"="===o)&&(s=r="0",o="=",f&&(l-=Math.floor((l-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=Ka.get(g)||qt;var y=s&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Zo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!s&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=l>b?new Array(b=l-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function qt(n){return n+""}function Rt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Dt(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new nc(e-1)),1),e}function i(n,e){return t(n=new nc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{nc=Rt;var r=new Rt;return r._=n,o(r,t,e)}finally{nc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Pt(n);return c.floor=c,c.round=Pt(r),c.ceil=Pt(u),c.offset=Pt(i),c.range=a,n}function Pt(n){return function(t,e){try{nc=Rt;var r=new Rt;return r._=t,n(r,e)._}finally{nc=Date}}}function Ut(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.substring(c,a)),null!=(u=ec[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=C[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.substring(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&nc!==Rt,o=new(i?Rt:nc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+Math.floor(r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,s=e.length;c>a;){if(r>=s)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in ec?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.substring(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.substring(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.substring(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.substring(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function s(n,t,r){return e(n,C.X.toString(),t,r)}function l(n,t,e){var r=x.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{nc=Rt;var t=new nc;return t._=n,r(t)}finally{nc=Date}}var r=t(n);return e.parse=function(n){try{nc=Rt;var t=r.parse(n);return t&&t._}finally{nc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=re;var x=Zo.map(),M=Ht(v),_=Ft(v),b=Ht(d),w=Ft(d),S=Ht(m),k=Ft(m),E=Ht(y),A=Ft(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return jt(n.getDate(),t,2)},e:function(n,t){return jt(n.getDate(),t,2)},H:function(n,t){return jt(n.getHours(),t,2)},I:function(n,t){return jt(n.getHours()%12||12,t,2)},j:function(n,t){return jt(1+Qa.dayOfYear(n),t,3)},L:function(n,t){return jt(n.getMilliseconds(),t,3)},m:function(n,t){return jt(n.getMonth()+1,t,2)},M:function(n,t){return jt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return jt(n.getSeconds(),t,2)},U:function(n,t){return jt(Qa.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return jt(Qa.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return jt(n.getFullYear()%100,t,2)},Y:function(n,t){return jt(n.getFullYear()%1e4,t,4)},Z:te,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Wt,e:Wt,H:Gt,I:Gt,j:Jt,L:ne,m:Bt,M:Kt,p:l,S:Qt,U:Yt,w:Ot,W:It,x:c,X:s,y:Vt,Y:Zt,Z:Xt,"%":ee};return t}function jt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Ht(n){return new RegExp("^(?:"+n.map(Zo.requote).join("|")+")","i")}function Ft(n){for(var t=new o,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Ot(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Yt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function It(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Zt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Vt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.y=$t(+r[0]),e+r[0].length):-1}function Xt(n,t,e){return/^[+-]\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=-t,e+5):-1}function $t(n){return n+(n>68?1900:2e3)}function Bt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Wt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Jt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Gt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Kt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function Qt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ne(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function te(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(ua(t)/60),u=ua(t)%60;return e+jt(r,"0",2)+jt(u,"0",2)}function ee(n,t,e){uc.lastIndex=0;var r=uc.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function re(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ue(){}function ie(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function oe(n,t){n&&cc.hasOwnProperty(n.type)&&cc[n.type](n,t)}function ae(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function ce(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)ae(n[e],t,1);t.polygonEnd()}function se(){function n(n,t){n*=Aa,t=t*Aa/2+ba/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),s=Math.sin(t),l=i*s,f=u*c+l*Math.cos(a),h=l*o*Math.sin(a);lc.add(Math.atan2(h,f)),r=n,u=c,i=s}var t,e,r,u,i;fc.point=function(o,a){fc.point=n,r=(t=o)*Aa,u=Math.cos(a=(e=a)*Aa/2+ba/4),i=Math.sin(a)},fc.lineEnd=function(){n(t,e)}}function le(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function fe(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function he(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function ge(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function pe(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function ve(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function de(n){return[Math.atan2(n[1],n[0]),G(n[2])]}function me(n,t){return ua(n[0]-t[0])<ka&&ua(n[1]-t[1])<ka}function ye(n,t){n*=Aa;var e=Math.cos(t*=Aa);xe(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function xe(n,t,e){++hc,pc+=(n-pc)/hc,vc+=(t-vc)/hc,dc+=(e-dc)/hc}function Me(){function n(n,u){n*=Aa;var i=Math.cos(u*=Aa),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),s=Math.atan2(Math.sqrt((s=e*c-r*a)*s+(s=r*o-t*c)*s+(s=t*a-e*o)*s),t*o+e*a+r*c);gc+=s,mc+=s*(t+(t=o)),yc+=s*(e+(e=a)),xc+=s*(r+(r=c)),xe(t,e,r)}var t,e,r;wc.point=function(u,i){u*=Aa;var o=Math.cos(i*=Aa);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),wc.point=n,xe(t,e,r)}}function _e(){wc.point=ye}function be(){function n(n,t){n*=Aa;var e=Math.cos(t*=Aa),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),s=u*c-i*a,l=i*o-r*c,f=r*a-u*o,h=Math.sqrt(s*s+l*l+f*f),g=r*o+u*a+i*c,p=h&&-J(g)/h,v=Math.atan2(h,g);Mc+=p*s,_c+=p*l,bc+=p*f,gc+=v,mc+=v*(r+(r=o)),yc+=v*(u+(u=a)),xc+=v*(i+(i=c)),xe(r,u,i)}var t,e,r,u,i;wc.point=function(o,a){t=o,e=a,wc.point=n,o*=Aa;var c=Math.cos(a*=Aa);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),xe(r,u,i)},wc.lineEnd=function(){n(t,e),wc.lineEnd=_e,wc.point=ye}}function we(){return!0}function Se(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(me(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Ee(e,n,null,!0),s=new Ee(e,null,c,!1);c.o=s,i.push(c),o.push(s),c=new Ee(r,n,null,!1),s=new Ee(r,null,c,!0),c.o=s,i.push(c),o.push(s)}}),o.sort(t),ke(i),ke(o),i.length){for(var a=0,c=e,s=o.length;s>a;++a)o[a].e=c=!c;for(var l,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;l=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,s=l.length;s>a;++a)u.point((f=l[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){l=g.p.z;for(var a=l.length-1;a>=0;--a)u.point((f=l[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,l=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ke(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function Ee(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Ae(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function s(){y.point=o,d.lineEnd()}function l(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){l(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(_||(i.polygonStart(),_=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Ce))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:s,polygonStart:function(){y.point=l,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=s,g=Zo.merge(g);var n=Le(m,p);g.length?(_||(i.polygonStart(),_=!0),Se(g,ze,n,e,i)):n&&(_||(i.polygonStart(),_=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),_&&(i.polygonEnd(),_=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=Ne(),M=t(x),_=!1;return y}}function Ce(n){return n.length>1}function Ne(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:v,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function ze(n,t){return((n=n.x)[0]<0?n[1]-Sa-ka:Sa-n[1])-((t=t.x)[0]<0?t[1]-Sa-ka:Sa-t[1])}function Le(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;lc.reset();for(var a=0,c=t.length;c>a;++a){var s=t[a],l=s.length;if(l)for(var f=s[0],h=f[0],g=f[1]/2+ba/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===l&&(d=0),n=s[d];var m=n[0],y=n[1]/2+ba/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>ba,k=p*x;if(lc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*wa:_,S^h>=e^m>=e){var E=he(le(f),le(n));ve(E);var A=he(u,E);ve(A);var C=(S^_>=0?-1:1)*G(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-ka>i||ka>i&&0>lc)^1&o}function Te(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?ba:-ba,c=ua(i-e);ua(c-ba)<ka?(n.point(e,r=(r+o)/2>0?Sa:-Sa),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=ba&&(ua(e-u)<ka&&(e-=u*ka),ua(i-a)<ka&&(i-=a*ka),r=qe(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function qe(n,t,e,r){var u,i,o=Math.sin(n-e);return ua(o)>ka?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Re(n,t,e,r){var u;if(null==n)u=e*Sa,r.point(-ba,u),r.point(0,u),r.point(ba,u),r.point(ba,0),r.point(ba,-u),r.point(0,-u),r.point(-ba,-u),r.point(-ba,0),r.point(-ba,u);else if(ua(n[0]-t[0])>ka){var i=n[0]<t[0]?ba:-ba;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function De(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,s,l;return{lineStart:function(){s=c=!1,l=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?ba:-ba),h):0;if(!e&&(s=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(me(e,g)||me(p,g))&&(p[0]+=ka,p[1]+=ka,v=t(p[0],p[1]))),v!==c)l=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(l=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&me(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return l|(s&&c)<<1}}}function r(n,t,e){var r=le(n),u=le(t),o=[1,0,0],a=he(r,u),c=fe(a,a),s=a[0],l=c-s*s;if(!l)return!e&&n;var f=i*c/l,h=-i*s/l,g=he(o,a),p=pe(o,f),v=pe(a,h);ge(p,v);var d=g,m=fe(p,d),y=fe(d,d),x=m*m-y*(fe(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=pe(d,(-m-M)/y);if(ge(_,p),_=de(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=ua(A-ba)<ka,N=C||ka>A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(ua(_[0]-w)<ka?k:E):k<=_[1]&&_[1]<=E:A>ba^(w<=_[0]&&_[0]<=S)){var z=pe(d,(-m+M)/y);return ge(z,p),[_,de(z)]}}}function u(t,e){var r=o?n:ba-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ua(i)>ka,c=sr(n,6*Aa);return Ae(t,e,c,o?[0,-n]:[-ba,n-ba])}function Pe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,s=o.y,l=a.x,f=a.y,h=0,g=1,p=l-c,v=f-s;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-s,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-s,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:s+h*v}),1>g&&(u.b={x:c+g*p,y:s+g*v}),u}}}}}}function Ue(n,t,e,r){function u(r,u){return ua(r[0]-n)<ka?u>0?0:3:ua(r[0]-e)<ka?u>0?2:1:ua(r[1]-t)<ka?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,s=a[0];c>o;++o)i=a[o],s[1]<=r?i[1]>r&&W(s,i,n)>0&&++t:i[1]<=r&&W(s,i,n)<0&&--t,s=i;return 0!==t}function s(i,a,c,s){var l=0,f=0;if(null==i||(l=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do s.point(0===l||3===l?n:e,l>1?r:t);while((l=(l+c+4)%4)!==f)}else s.point(a[0],a[1])}function l(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){l(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-kc,Math.min(kc,n)),t=Math.max(-kc,Math.min(kc,t));var e=l(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=Ne(),C=Pe(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Zo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),s(null,null,1,a),a.lineEnd()),u&&Se(v,i,t,s,a),a.polygonEnd()),v=d=m=null}};return N}}function je(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function He(n){var t=0,e=ba/3,r=tr(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*ba/180,e=n[1]*ba/180):[180*(t/ba),180*(e/ba)]},u}function Fe(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,G((i-(n*n+e*e)*u*u)/(2*u))]},e}function Oe(){function n(n,t){Ac+=u*n-r*t,r=n,u=t}var t,e,r,u;Tc.point=function(i,o){Tc.point=n,t=r=i,e=u=o},Tc.lineEnd=function(){n(t,e)}}function Ye(n,t){Cc>n&&(Cc=n),n>zc&&(zc=n),Nc>t&&(Nc=t),t>Lc&&(Lc=t)}function Ie(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Ze(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Ze(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Ze(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Ve(n,t){pc+=n,vc+=t,++dc}function Xe(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);mc+=o*(t+n)/2,yc+=o*(e+r)/2,xc+=o,Ve(t=n,e=r)}var t,e;Rc.point=function(r,u){Rc.point=n,Ve(t=r,e=u)}}function $e(){Rc.point=Ve}function Be(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);mc+=o*(r+n)/2,yc+=o*(u+t)/2,xc+=o,o=u*n-r*t,Mc+=o*(r+n),_c+=o*(u+t),bc+=3*o,Ve(r=n,u=t)}var t,e,r,u;Rc.point=function(i,o){Rc.point=n,Ve(t=r=i,e=u=o)},Rc.lineEnd=function(){n(t,e)}}function We(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,wa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:v};return a}function Je(n){function t(n){return(a?r:e)(n)}function e(t){return Qe(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=le([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=s,S.lineEnd=l}function s(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function l(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,s,l,f,h,g,p,v,d,m){var y=l-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=s+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=ua(ua(w)-1)<ka||ua(r-h)<ka?(r+h)/2:Math.atan2(b,_),A=n(E,k),C=A[0],N=A[1],z=C-t,L=N-e,T=x*z-y*L;(T*T/M>i||ua((y*z+x*L)/M-.5)>.3||o>a*g+c*p+s*v)&&(u(t,e,r,a,c,s,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,l,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Aa),a=16;
+return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function Ge(n){var t=Je(function(t,e){return n([t*Ca,e*Ca])});return function(n){return er(t(n))}}function Ke(n){this.stream=n}function Qe(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function nr(n){return tr(function(){return n})()}function tr(n){function t(n){return n=a(n[0]*Aa,n[1]*Aa),[n[0]*h+c,s-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(s-n[1])/h),n&&[n[0]*Ca,n[1]*Ca]}function r(){a=je(o=ir(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,s=p+n[1]*h,u()}function u(){return l&&(l.valid=!1,l=null),t}var i,o,a,c,s,l,f=Je(function(n,t){return n=i(n,t),[n[0]*h+c,s-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Sc,_=wt,b=null,w=null;return t.stream=function(n){return l&&(l.valid=!1),l=er(M(o,f(_(n)))),l.valid=!0,l},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Sc):De((b=+n)*Aa),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Ue(n[0][0],n[0][1],n[1][0],n[1][1]):wt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Aa,d=n[1]%360*Aa,r()):[v*Ca,d*Ca]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Aa,y=n[1]%360*Aa,x=n.length>2?n[2]%360*Aa:0,r()):[m*Ca,y*Ca,x*Ca]},Zo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function er(n){return Qe(n,function(t,e){n.point(t*Aa,e*Aa)})}function rr(n,t){return[n,t]}function ur(n,t){return[n>ba?n-wa:-ba>n?n+wa:n,t]}function ir(n,t,e){return n?t||e?je(ar(n),cr(t,e)):ar(n):t||e?cr(t,e):ur}function or(n){return function(t,e){return t+=n,[t>ba?t-wa:-ba>t?t+wa:t,e]}}function ar(n){var t=or(n);return t.invert=or(-n),t}function cr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*r+a*u;return[Math.atan2(c*i-l*o,a*r-s*u),G(l*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*i-c*o;return[Math.atan2(c*i+s*o,a*r+l*u),G(l*r-a*u)]},e}function sr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=lr(e,u),i=lr(e,i),(o>0?i>u:u>i)&&(u+=o*wa)):(u=n+o*wa,i=n-.5*c);for(var s,l=u;o>0?l>i:i>l;l-=c)a.point((s=de([e,-r*Math.cos(l),-r*Math.sin(l)]))[0],s[1])}}function lr(n,t){var e=le(t);e[0]-=n,ve(e);var r=J(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-ka)%(2*Math.PI)}function fr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function hr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function gr(n){return n.source}function pr(n){return n.target}function vr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),s=u*Math.sin(n),l=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(tt(r-t)+u*o*tt(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*l,u=e*s+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ca,Math.atan2(o,Math.sqrt(r*r+u*u))*Ca]}:function(){return[n*Ca,t*Ca]};return p.distance=h,p}function dr(){function n(n,u){var i=Math.sin(u*=Aa),o=Math.cos(u),a=ua((n*=Aa)-t),c=Math.cos(a);Dc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Pc.point=function(u,i){t=u*Aa,e=Math.sin(i*=Aa),r=Math.cos(i),Pc.point=n},Pc.lineEnd=function(){Pc.point=Pc.lineEnd=v}}function mr(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function yr(n,t){function e(n,t){o>0?-Sa+ka>t&&(t=-Sa+ka):t>Sa-ka&&(t=Sa-ka);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(ba/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=B(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Sa]},e):Mr}function xr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ua(u)<ka?rr:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-B(u)*Math.sqrt(n*n+e*e)]},e)}function Mr(n,t){return[n,Math.log(Math.tan(ba/4+t/2))]}function _r(n){var t,e=nr(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=ba*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function br(n,t){return[Math.log(Math.tan(ba/4+t/2)),-n]}function wr(n){return n[0]}function Sr(n){return n[1]}function kr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&W(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function Er(n,t){return n[0]-t[0]||n[1]-t[1]}function Ar(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Cr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],s=e[1],l=t[1]-c,f=r[1]-s,h=(a*(c-s)-f*(u-i))/(f*o-a*l);return[u+h*o,c+h*l]}function Nr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function zr(){Gr(this),this.edge=this.site=this.circle=null}function Lr(n){var t=Bc.pop()||new zr;return t.site=n,t}function Tr(n){Yr(n),Vc.remove(n),Bc.push(n),Gr(n)}function qr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Tr(n);for(var c=i;c.circle&&ua(e-c.circle.x)<ka&&ua(r-c.circle.cy)<ka;)i=c.P,a.unshift(c),Tr(c),c=i;a.unshift(c),Yr(c);for(var s=o;s.circle&&ua(e-s.circle.x)<ka&&ua(r-s.circle.cy)<ka;)o=s.N,a.push(s),Tr(s),s=o;a.push(s),Yr(s);var l,f=a.length;for(l=1;f>l;++l)s=a[l],c=a[l-1],Br(s.edge,c.site,s.site,u);c=a[0],s=a[f-1],s.edge=Xr(c.site,s.site,null,u),Or(c),Or(s)}function Rr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Vc._;a;)if(r=Dr(a,o)-i,r>ka)a=a.L;else{if(u=i-Pr(a,o),!(u>ka)){r>-ka?(t=a.P,e=a):u>-ka?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Lr(n);if(Vc.insert(t,c),t||e){if(t===e)return Yr(t),e=Lr(t.site),Vc.insert(c,e),c.edge=e.edge=Xr(t.site,c.site),Or(t),Or(e),void 0;if(!e)return c.edge=Xr(t.site,c.site),void 0;Yr(t),Yr(e);var s=t.site,l=s.x,f=s.y,h=n.x-l,g=n.y-f,p=e.site,v=p.x-l,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+l,y:(h*x-v*y)/m+f};Br(e.edge,s,p,M),c.edge=Xr(s,n,null,M),e.edge=Xr(n,p,null,M),Or(t),Or(e)}}function Dr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,s=c-t;if(!s)return a;var l=a-r,f=1/i-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+u-i/2)))/f+r:(r+a)/2}function Pr(n,t){var e=n.N;if(e)return Dr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ur(n){this.site=n,this.edges=[]}function jr(n){for(var t,e,r,u,i,o,a,c,s,l,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Zc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)l=a[o].end(),r=l.x,u=l.y,s=a[++o%c].start(),t=s.x,e=s.y,(ua(r-t)>ka||ua(u-e)>ka)&&(a.splice(o,0,new Wr($r(i.site,l,ua(r-f)<ka&&p-u>ka?{x:f,y:ua(t-f)<ka?e:p}:ua(u-p)<ka&&h-r>ka?{x:ua(e-p)<ka?t:h,y:p}:ua(r-h)<ka&&u-g>ka?{x:h,y:ua(t-h)<ka?e:g}:ua(u-g)<ka&&r-f>ka?{x:ua(e-g)<ka?t:f,y:g}:null),i.site,null)),++c)}function Hr(n,t){return t.angle-n.angle}function Fr(){Gr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Or(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,s=r.y-a,l=i.x-o,f=i.y-a,h=2*(c*f-s*l);if(!(h>=-Ea)){var g=c*c+s*s,p=l*l+f*f,v=(f*g-s*p)/h,d=(c*p-l*g)/h,f=d+a,m=Wc.pop()||new Fr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=$c._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}$c.insert(y,m),y||(Xc=m)}}}}function Yr(n){var t=n.circle;t&&(t.P||(Xc=t.N),$c.remove(t),Wc.push(t),Gr(t),n.circle=null)}function Ir(n){for(var t,e=Ic,r=Pe(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Zr(t,n)||!r(t)||ua(t.a.x-t.b.x)<ka&&ua(t.a.y-t.b.y)<ka)&&(t.a=t.b=null,e.splice(u,1))}function Zr(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],s=t[1][1],l=n.l,f=n.r,h=l.x,g=l.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=s)return}else i={x:d,y:c};e={x:d,y:s}}else{if(i){if(i.y<c)return}else i={x:d,y:s};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=s)return}else i={x:(c-u)/r,y:c};e={x:(s-u)/r,y:s}}else{if(i){if(i.y<c)return}else i={x:(s-u)/r,y:s};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Vr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Xr(n,t,e,r){var u=new Vr(n,t);return Ic.push(u),e&&Br(u,n,t,e),r&&Br(u,t,n,r),Zc[n.i].edges.push(new Wr(u,n,t)),Zc[t.i].edges.push(new Wr(u,t,n)),u}function $r(n,t,e){var r=new Vr(n,null);return r.a=t,r.b=e,Ic.push(r),r}function Br(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Wr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function Jr(){this._=null}function Gr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function Kr(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function Qr(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function nu(n){for(;n.L;)n=n.L;return n}function tu(n,t){var e,r,u,i=n.sort(eu).pop();for(Ic=[],Zc=new Array(n.length),Vc=new Jr,$c=new Jr;;)if(u=Xc,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Zc[i.i]=new Ur(i),Rr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;qr(u.arc)}t&&(Ir(t),jr(t));var o={cells:Zc,edges:Ic};return Vc=$c=Ic=Zc=null,o}function eu(n,t){return t.y-n.y||t.x-n.x}function ru(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function uu(n){return n.x}function iu(n){return n.y}function ou(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function au(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&au(n,c[0],e,r,o,a),c[1]&&au(n,c[1],o,r,u,a),c[2]&&au(n,c[2],e,a,o,i),c[3]&&au(n,c[3],o,a,u,i)}}function cu(n,t){n=Zo.rgb(n),t=Zo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+dt(Math.round(e+i*n))+dt(Math.round(r+o*n))+dt(Math.round(u+a*n))}}function su(n,t){var e,r={},u={};for(e in n)e in t?r[e]=hu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function lu(n,t){return t-=n=+n,function(e){return n+t*e}}function fu(n,t){var e,r,u,i=Gc.lastIndex=Kc.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=Gc.exec(n))&&(r=Kc.exec(t));)(u=r.index)>i&&(u=t.substring(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:lu(e,r)})),i=Kc.lastIndex;return i<t.length&&(u=t.substring(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function hu(n,t){for(var e,r=Zo.interpolators.length;--r>=0&&!(e=Zo.interpolators[r](n,t)););return e}function gu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(hu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function pu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function vu(n){return function(t){return 1-n(1-t)}}function du(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function mu(n){return n*n}function yu(n){return n*n*n}function xu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Mu(n){return function(t){return Math.pow(t,n)}}function _u(n){return 1-Math.cos(n*Sa)}function bu(n){return Math.pow(2,10*(n-1))}function wu(n){return 1-Math.sqrt(1-n*n)}function Su(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/wa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*wa/t)}}function ku(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Eu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Au(n,t){n=Zo.hcl(n),t=Zo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ot(e+i*n,r+o*n,u+a*n)+""}}function Cu(n,t){n=Zo.hsl(n),t=Zo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ut(e+i*n,r+o*n,u+a*n)+""}}function Nu(n,t){n=Zo.lab(n),t=Zo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function zu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Lu(n){var t=[n.a,n.b],e=[n.c,n.d],r=qu(t),u=Tu(t,e),i=qu(Ru(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ca,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Ca:0}function Tu(n,t){return n[0]*t[0]+n[1]*t[1]}function qu(n){var t=Math.sqrt(Tu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Ru(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Du(n,t){var e,r=[],u=[],i=Zo.transform(n),o=Zo.transform(t),a=i.translate,c=o.translate,s=i.rotate,l=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:lu(a[0],c[0])},{i:3,x:lu(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),s!=l?(s-l>180?l+=360:l-s>180&&(s+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:lu(s,l)})):l&&r.push(r.pop()+"rotate("+l+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:lu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:lu(g[0],p[0])},{i:e-2,x:lu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Pu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Uu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function ju(n){for(var t=n.source,e=n.target,r=Fu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Hu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Fu(n,t){if(n===t)return n;for(var e=Hu(n),r=Hu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Ou(n){n.fixed|=2}function Yu(n){n.fixed&=-7}function Iu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Zu(n){n.fixed&=-5}function Vu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Vu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var s=t*e[n.point.index];n.charge+=n.pointCharge=s,r+=s*n.point.x,u+=s*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Xu(n,t){return Zo.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=Ku,n}function $u(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function Bu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function Wu(n){return n.children}function Ju(n){return n.value}function Gu(n,t){return t.value-n.value}function Ku(n){return Zo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function Qu(n){return n.x}function ni(n){return n.y}function ti(n,t,e){n.y0=t,n.y=e}function ei(n){return Zo.range(n.length)}function ri(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function ui(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function ii(n){return n.reduce(oi,0)}function oi(n,t){return n+t[1]}function ai(n,t){return ci(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ci(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function si(n){return[Zo.min(n),Zo.max(n)]}function li(n,t){return n.value-t.value}function fi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function hi(n,t){n._pack_next=t,t._pack_prev=n}function gi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function pi(n){function t(n){l=Math.min(n.x-n.r,l),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(s=e.length)){var e,r,u,i,o,a,c,s,l=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(vi),r=e[0],r.x=-r.r,r.y=0,t(r),s>1&&(u=e[1],u.x=u.r,u.y=0,t(u),s>2))for(i=e[2],yi(r,u,i),t(i),fi(r,i),r._pack_prev=i,fi(i,u),u=r._pack_next,o=3;s>o;o++){yi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(gi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!gi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?hi(r,u=a):hi(r=c,u),o--):(fi(r,i),u=i,t(i))}var m=(l+f)/2,y=(h+g)/2,x=0;for(o=0;s>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(di)}}function vi(n){n._pack_next=n._pack_prev=n}function di(n){delete n._pack_next,delete n._pack_prev}function mi(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)mi(u[i],t,e,r)}function yi(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),s=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+s*i,e.y=n.y+c*i-s*u}else e.x=n.x+r,e.y=n.y}function xi(n,t){return n.parent==t.parent?1:2}function Mi(n){var t=n.children;return t.length?t[0]:n.t}function _i(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function bi(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function wi(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Si(n,t,e){return n.a.parent===t.parent?n.a:e}function ki(n){return 1+Zo.max(n,function(n){return n.y})}function Ei(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ai(n){var t=n.children;return t&&t.length?Ai(t[0]):n}function Ci(n){var t,e=n.children;return e&&(t=e.length)?Ci(e[t-1]):n}function Ni(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function zi(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Li(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ti(n){return n.rangeExtent?n.rangeExtent():Li(n.range())}function qi(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Ri(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Di(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ss}function Pi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Zo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Ui(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Pi:qi,c=r?Uu:Pu;return o=u(n,t,c,e),a=u(t,n,c,hu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(zu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Oi(n,t)},i.tickFormat=function(t,e){return Yi(n,t,e)},i.nice=function(t){return Hi(n,t),u()},i.copy=function(){return Ui(n,t,e,r)},u()}function ji(n,t){return Zo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Hi(n,t){return Ri(n,Di(Fi(n,t)[2]))}function Fi(n,t){null==t&&(t=10);var e=Li(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Oi(n,t){return Zo.range.apply(Zo,Fi(n,t))}function Yi(n,t,e){var r=Fi(n,t);if(e){var u=Ga.exec(e);if(u.shift(),"s"===u[8]){var i=Zo.formatPrefix(Math.max(ua(r[0]),ua(r[1])));return u[7]||(u[7]="."+Ii(i.scale(r[2]))),u[8]="f",e=Zo.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Zi(u[8],r)),e=u.join("")}else e=",."+Ii(r[2])+"f";return Zo.format(e)}function Ii(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Zi(n,t){var e=Ii(t[2]);return n in ls?Math.abs(e-Ii(Math.max(ua(t[0]),ua(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Vi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Ri(r.map(u),e?Math:hs);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Li(r),o=[],a=n[0],c=n[1],s=Math.floor(u(a)),l=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(l-s)){if(e){for(;l>s;s++)for(var h=1;f>h;h++)o.push(i(s)*h);o.push(i(s))}else for(o.push(i(s));s++<l;)for(var h=f-1;h>0;h--)o.push(i(s)*h);for(s=0;o[s]<a;s++);for(l=o.length;o[l-1]>c;l--);o=o.slice(s,l)}return o},o.tickFormat=function(n,t){if(!arguments.length)return fs;arguments.length<2?t=fs:"function"!=typeof t&&(t=Zo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Vi(n.copy(),t,e,r)},ji(o,n)}function Xi(n,t,e){function r(t){return n(u(t))}var u=$i(t),i=$i(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Oi(e,n)},r.tickFormat=function(n,t){return Yi(e,n,t)},r.nice=function(n){return r.domain(Hi(e,n))},r.exponent=function(o){return arguments.length?(u=$i(t=o),i=$i(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Xi(n.copy(),t,e)},ji(r,n)}function $i(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Bi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Zo.range(n.length).map(function(n){return t+e*n})}var u,i,a;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new o;for(var i,a=-1,c=r.length;++a<c;)u.has(i=r[a])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,a=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,o){arguments.length<2&&(o=0);var c=u[0],s=u[1],l=(s-c)/(Math.max(1,n.length-1)+o);return i=r(n.length<2?(c+s)/2:c+l*o/2,l),a=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=(f-l)/(n.length-o+2*c);return i=r(l+h*c,h),s&&i.reverse(),a=h*(1-o),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=Math.floor((f-l)/(n.length-o+2*c)),g=f-l-(n.length-o)*h;return i=r(l+Math.round(g/2),h),s&&i.reverse(),a=Math.round(h*(1-o)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return Li(t.a[0])},e.copy=function(){return Bi(n,t)},e.domain(n)}function Wi(e,r){function u(){var n=0,t=r.length;for(o=[];++n<t;)o[n-1]=Zo.quantile(e,n/t);return i}function i(n){return isNaN(n=+n)?void 0:r[Zo.bisect(o,n)]}var o;return i.domain=function(r){return arguments.length?(e=r.filter(t).sort(n),u()):e},i.range=function(n){return arguments.length?(r=n,u()):r},i.quantiles=function(){return o},i.invertExtent=function(n){return n=r.indexOf(n),0>n?[0/0,0/0]:[n>0?o[n-1]:e[0],n<o.length?o[n]:e[e.length-1]]},i.copy=function(){return Wi(e,r)},u()}function Ji(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return Ji(n,t,e)},u()}function Gi(n,t){function e(e){return e>=e?t[Zo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return Gi(n,t)},e}function Ki(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Oi(n,t)},t.tickFormat=function(t,e){return Yi(n,t,e)},t.copy=function(){return Ki(n)},t}function Qi(n){return n.innerRadius}function no(n){return n.outerRadius}function to(n){return n.startAngle}function eo(n){return n.endAngle}function ro(n){function t(t){function o(){s.push("M",i(n(l),a))}for(var c,s=[],l=[],f=-1,h=t.length,g=bt(e),p=bt(r);++f<h;)u.call(this,c=t[f],f)?l.push([+g.call(this,c,f),+p.call(this,c,f)]):l.length&&(o(),l=[]);return l.length&&o(),s.length?s.join(""):null}var e=wr,r=Sr,u=we,i=uo,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=xs.get(n)||uo).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function uo(n){return n.join("L")}function io(n){return uo(n)+"Z"}function oo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function ao(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function co(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function so(n,t){return n.length<4?uo(n):n[1]+ho(n.slice(1,n.length-1),go(n,t))}function lo(n,t){return n.length<3?uo(n):n[0]+ho((n.push(n[0]),n),go([n[n.length-2]].concat(n,[n[1]]),t))}function fo(n,t){return n.length<3?uo(n):n[0]+ho(n,go(n,t))}function ho(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return uo(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var s=2;s<t.length;s++,c++)i=n[c],a=t[s],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var l=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+l[0]+","+l[1]}return r}function go(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function po(n){if(n.length<3)return uo(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",xo(bs,o),",",xo(bs,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Mo(c,o,a);return n.pop(),c.push("L",r),c.join("")}function vo(n){if(n.length<4)return uo(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(xo(bs,i)+","+xo(bs,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),Mo(e,i,o);return e.join("")}function mo(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[xo(bs,o),",",xo(bs,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Mo(t,o,a);return t.join("")}function yo(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,s=-1;++s<=e;)r=n[s],u=s/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return po(n)}function xo(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Mo(n,t,e){n.push("C",xo(Ms,t),",",xo(Ms,e),",",xo(_s,t),",",xo(_s,e),",",xo(bs,t),",",xo(bs,e))}function _o(n,t){return(t[1]-n[1])/(t[0]-n[0])}function bo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=_o(u,i);++t<e;)r[t]=(o+(o=_o(u=i,i=n[t+1])))/2;return r[t]=o,r}function wo(n){for(var t,e,r,u,i=[],o=bo(n),a=-1,c=n.length-1;++a<c;)t=_o(n[a],n[a+1]),ua(t)<ka?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function So(n){return n.length<3?uo(n):n[0]+ho(n,wo(n))}function ko(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+ms,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Eo(n){function t(t){function c(){v.push("M",a(n(m),f),l,s(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=bt(e),_=bt(u),b=e===r?function(){return g}:bt(r),w=u===i?function(){return p}:bt(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=wr,r=wr,u=0,i=Sr,o=we,a=uo,c=a.key,s=a,l="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=xs.get(n)||uo).key,s=a.reverse||a,l=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Ao(n){return n.radius}function Co(n){return[n.x,n.y]}function No(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+ms;return[e*Math.cos(r),e*Math.sin(r)]}}function zo(){return 64}function Lo(){return"circle"}function To(n){var t=Math.sqrt(n/ba);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function qo(n,t){return sa(n,Cs),n.id=t,n}function Ro(n,t,e,r){var u=n.id;return P(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Do(n){return null==n&&(n=""),function(){this.textContent=n}}function Po(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),i=u[e];if(!i){var a=r.time;i=u[e]={tween:new o,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Zo.timer(function(r){function o(r){return u.active>e?s():(u.active=e,i.event&&i.event.start.call(n,l,t),i.tween.forEach(function(e,r){(r=r.call(n,l,t))&&v.push(r)}),Zo.timer(function(){return p.c=c(r||1)?we:c,1},0,a),void 0)}function c(r){if(u.active!==e)return s();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a);
+return o>=1?(i.event&&i.event.end.call(n,l,t),s()):void 0}function s(){return--u.count?delete u[e]:delete n.__transition__,1}var l=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Ba,v=[];return p.t=h+a,r>=h?o(r-h):(p.c=o,void 0)},0,a)}}function Uo(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function jo(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Ho(n){return n.toISOString()}function Fo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Zo.bisect(Us,u);return i==Us.length?[t.year,Fi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Us[i-1]<Us[i]/u?i-1:i]:[Fs,Fi(n,e)[2]]}return r.invert=function(t){return Oo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Oo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Oo(+e+1),t).length}var i=r.domain(),o=Li(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Ri(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Oo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Oo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Li(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Oo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Fo(n.copy(),t,e)},ji(r,n)}function Oo(n){return new Date(n)}function Yo(n){return JSON.parse(n.responseText)}function Io(n){var t=$o.createRange();return t.selectNode($o.body),t.createContextualFragment(n.responseText)}var Zo={version:"3.4.11"};Date.now||(Date.now=function(){return+new Date});var Vo=[].slice,Xo=function(n){return Vo.call(n)},$o=document,Bo=$o.documentElement,Wo=window;try{Xo(Bo.childNodes)[0].nodeType}catch(Jo){Xo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{$o.createElement("div").style.setProperty("opacity",0,"")}catch(Go){var Ko=Wo.Element.prototype,Qo=Ko.setAttribute,na=Ko.setAttributeNS,ta=Wo.CSSStyleDeclaration.prototype,ea=ta.setProperty;Ko.setAttribute=function(n,t){Qo.call(this,n,t+"")},Ko.setAttributeNS=function(n,t,e){na.call(this,n,t,e+"")},ta.setProperty=function(n,t,e){ea.call(this,n,t+"",e)}}Zo.ascending=n,Zo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Zo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Zo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Zo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Zo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},Zo.mean=function(n,e){var r,u=0,i=n.length,o=-1,a=i;if(1===arguments.length)for(;++o<i;)t(r=n[o])?u+=r:--a;else for(;++o<i;)t(r=e.call(n,n[o],o))?u+=r:--a;return a?u/a:void 0},Zo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Zo.median=function(e,r){return arguments.length>1&&(e=e.map(r)),e=e.filter(t),e.length?Zo.quantile(e.sort(n),.5):void 0};var ra=e(n);Zo.bisectLeft=ra.left,Zo.bisect=Zo.bisectRight=ra.right,Zo.bisector=function(t){return e(1===t.length?function(e,r){return n(t(e),r)}:t)},Zo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Zo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Zo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Zo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,t=Zo.min(arguments,r),e=new Array(t);++n<t;)for(var u,i=-1,o=e[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return e},Zo.transpose=function(n){return Zo.zip.apply(Zo,n)},Zo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Zo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Zo.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Zo.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ua=Math.abs;Zo.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,i=[],o=u(ua(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)i.push(r/o);else for(;(r=n+e*++a)<t;)i.push(r/o);return i},Zo.map=function(n){var t=new o;if(n instanceof o)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},i(o,{has:a,get:function(n){return this[ia+n]},set:function(n,t){return this[ia+n]=t},remove:c,keys:s,values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1),this[t])}});var ia="\x00",oa=ia.charCodeAt(0);Zo.nest=function(){function n(t,a,c){if(c>=i.length)return r?r.call(u,a):e?a.sort(e):a;for(var s,l,f,h,g=-1,p=a.length,v=i[c++],d=new o;++g<p;)(h=d.get(s=v(l=a[g])))?h.push(l):d.set(s,[l]);return t?(l=t(),f=function(e,r){l.set(e,n(t,r,c))}):(l={},f=function(e,r){l[e]=n(t,r,c)}),d.forEach(f),l}function t(n,e){if(e>=i.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Zo.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Zo.set=function(n){var t=new h;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},i(h,{has:a,add:function(n){return this[ia+n]=!0,n},remove:function(n){return n=ia+n,n in this&&delete this[n]},values:s,size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1))}}),Zo.behavior={},Zo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=g(n,t,t[e]);return n};var aa=["webkit","ms","moz","Moz","o","O"];Zo.dispatch=function(){for(var n=new d,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=m(n);return n},d.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Zo.event=null,Zo.requote=function(n){return n.replace(ca,"\\$&")};var ca=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,sa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},la=function(n,t){return t.querySelector(n)},fa=function(n,t){return t.querySelectorAll(n)},ha=Bo.matches||Bo[p(Bo,"matchesSelector")],ga=function(n,t){return ha.call(n,t)};"function"==typeof Sizzle&&(la=function(n,t){return Sizzle(n,t)[0]||null},fa=Sizzle,ga=Sizzle.matchesSelector),Zo.selection=function(){return ma};var pa=Zo.selection.prototype=[];pa.select=function(n){var t,e,r,u,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,s=r.length;++c<s;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return _(i)},pa.selectAll=function(n){var t,e,r=[];n=w(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Xo(n.call(e,e.__data__,a,u))),t.parentNode=e);return _(r)};var va={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Zo.ns={prefix:va,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),va.hasOwnProperty(e)?{space:va[e],local:n}:n}},pa.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Zo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(S(t,n[t]));return this}return this.each(S(n,t))},pa.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=A(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!E(n[u]).test(t))return!1;return!0}for(t in n)this.each(C(t,n[t]));return this}return this.each(C(n,t))},pa.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(z(e,n[e],t));return this}if(2>r)return Wo.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(z(n,t,e))},pa.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(L(t,n[t]));return this}return this.each(L(n,t))},pa.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},pa.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},pa.append=function(n){return n=T(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},pa.insert=function(n,t){return n=T(n),t=b(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},pa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},pa.data=function(n,t){function e(n,e){var r,u,i,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new o,y=new o,x=[];for(r=-1;++r<a;)d=t.call(u=n[r],u.__data__,r),m.has(d)?v[r]=u:m.set(d,u),x.push(d);for(r=-1;++r<f;)d=t.call(e,i=e[r],r),(u=m.get(d))?(g[r]=u,u.__data__=i):y.has(d)||(p[r]=q(i)),y.set(d,i),m.remove(d);for(r=-1;++r<a;)m.has(x[r])&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=q(i);for(;f>r;++r)p[r]=q(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),s.push(g),l.push(v)}var r,u,i=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++i<a;)(u=r[i])&&(n[i]=u.__data__);return n}var c=U([]),s=_([]),l=_([]);if("function"==typeof n)for(;++i<a;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<a;)e(r=this[i],n);return s.enter=function(){return c},s.exit=function(){return l},s},pa.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},pa.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return _(u)},pa.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},pa.sort=function(n){n=D.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},pa.each=function(n){return P(this,function(t,e,r){n.call(t,t.__data__,e,r)})},pa.call=function(n){var t=Xo(arguments);return n.apply(t[0]=this,t),this},pa.empty=function(){return!this.node()},pa.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},pa.size=function(){var n=0;return this.each(function(){++n}),n};var da=[];Zo.selection.enter=U,Zo.selection.enter.prototype=da,da.append=pa.append,da.empty=pa.empty,da.node=pa.node,da.call=pa.call,da.size=pa.size,da.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var s=-1,l=u.length;++s<l;)(i=u[s])?(t.push(r[s]=e=n.call(u.parentNode,i.__data__,s,a)),e.__data__=i.__data__):t.push(null)}return _(o)},da.insert=function(n,t){return arguments.length<2&&(t=j(this)),pa.insert.call(this,n,t)},pa.transition=function(){for(var n,t,e=Ss||++Ns,r=[],u=ks||{time:Date.now(),ease:xu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,s=a.length;++c<s;)(t=a[c])&&Po(t,c,e,u),n.push(t)}return qo(r,e)},pa.interrupt=function(){return this.each(H)},Zo.select=function(n){var t=["string"==typeof n?la(n,$o):n];return t.parentNode=Bo,_([t])},Zo.selectAll=function(n){var t=Xo("string"==typeof n?fa(n,$o):n);return t.parentNode=Bo,_([t])};var ma=Zo.select(Bo);pa.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(F(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(F(n,t,e))};var ya=Zo.map({mouseenter:"mouseover",mouseleave:"mouseout"});ya.forEach(function(n){"on"+n in $o&&ya.remove(n)});var xa="onselectstart"in $o?null:p(Bo.style,"userSelect"),Ma=0;Zo.mouse=function(n){return Z(n,x())};var _a=/WebKit/.test(Wo.navigator.userAgent)?-1:0;Zo.touches=function(n,t){return arguments.length<2&&(t=x().touches),t?Xo(t).map(function(t){var e=Z(n,t);return e.identifier=t.identifier,e}):[]},Zo.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+s[0],y:r[1]+s[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Zo.event.target===f),g({type:"dragend"}))}var s,l=this,f=Zo.event.target,h=l.parentNode,g=e.of(l,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Zo.select(u()).on(i+d,a).on(o+d,c),y=I(),x=t(h,v);r?(s=r.apply(l,arguments),s=[s.x-x[0],s.y-x[1]]):s=[0,0],g({type:"dragstart"})}}var e=M(n,"drag","dragstart","dragend"),r=null,u=t(v,Zo.mouse,$,"mousemove","mouseup"),i=t(V,Zo.touch,X,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Zo.rebind(n,e,"on")};var ba=Math.PI,wa=2*ba,Sa=ba/2,ka=1e-6,Ea=ka*ka,Aa=ba/180,Ca=180/ba,Na=Math.SQRT2,za=2,La=4;Zo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Q(v),o=i/(za*h)*(e*nt(Na*t+v)-K(v));return[r+o*s,u+o*l,i*e/Q(Na*t+v)]}return[r+n*s,u+n*l,i*Math.exp(Na*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],s=o-r,l=a-u,f=s*s+l*l,h=Math.sqrt(f),g=(c*c-i*i+La*f)/(2*i*za*h),p=(c*c-i*i-La*f)/(2*c*za*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Na;return e.duration=1e3*y,e},Zo.behavior.zoom=function(){function n(n){n.on(A,s).on(Ra+".zoom",f).on("dblclick.zoom",h).on(z,l)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function s(){function n(){l=1,u(Zo.mouse(r),h),a(s)}function e(){f.on(C,null).on(N,null),g(l&&Zo.event.target===i),c(s)}var r=this,i=Zo.event.target,s=L.of(r,arguments),l=0,f=Zo.select(Wo).on(C,n).on(N,e),h=t(Zo.mouse(r)),g=I();H.call(r),o(s)}function l(){function n(){var n=Zo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){var t=Zo.event.target;Zo.select(t).on(M,i).on(_,f),b.push(t);for(var e=Zo.event.changedTouches,o=0,c=e.length;c>o;++o)v[e[o].identifier]=null;var s=n(),l=Date.now();if(1===s.length){if(500>l-m){var h=s[0],g=v[h.identifier];r(2*S.k),u(h,g),y(),a(p)}m=l}else if(s.length>1){var h=s[0],x=s[1],w=h[0]-x[0],k=h[1]-x[1];d=w*w+k*k}}function i(){for(var n,t,e,i,o=Zo.touches(g),c=0,s=o.length;s>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var l=(l=e[0]-n[0])*l+(l=e[1]-n[1])*l,f=d&&Math.sqrt(l/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Zo.event.touches.length){for(var t=Zo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}Zo.selectAll(b).on(x,null),w.on(A,s).on(z,l),k(),c(p)}var h,g=this,p=L.of(g,arguments),v={},d=0,x=".zoom-"+Zo.event.changedTouches[0].identifier,M="touchmove"+x,_="touchend"+x,b=[],w=Zo.select(g).on(A,null).on(z,e),k=I();H.call(g),e(),o(p)}function f(){var n=L.of(this,arguments);d?clearTimeout(d):(g=t(p=v||Zo.mouse(this)),H.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),y(),r(Math.pow(2,.002*Ta())*S.k),u(p,g),a(n)}function h(){var n=L.of(this,arguments),e=Zo.mouse(this),i=t(e),s=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Zo.event.shiftKey?Math.ceil(s)-1:Math.floor(s)+1)),u(e,i),a(n),c(n)}var g,p,v,d,m,x,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=qa,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",z="touchstart.zoom",L=M(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=L.of(this,arguments),t=S;Ss?Zo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Zo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?qa:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,x=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Zo.rebind(n,L,"on")};var Ta,qa=[0,1/0],Ra="onwheel"in $o?(Ta=function(){return-Zo.event.deltaY*(Zo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in $o?(Ta=function(){return Zo.event.wheelDelta},"mousewheel"):(Ta=function(){return-Zo.event.detail},"MozMousePixelScroll");Zo.color=et,et.prototype.toString=function(){return this.rgb()+""},Zo.hsl=rt;var Da=rt.prototype=new et;Da.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,this.l/n)},Da.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,n*this.l)},Da.rgb=function(){return ut(this.h,this.s,this.l)},Zo.hcl=it;var Pa=it.prototype=new et;Pa.brighter=function(n){return new it(this.h,this.c,Math.min(100,this.l+Ua*(arguments.length?n:1)))},Pa.darker=function(n){return new it(this.h,this.c,Math.max(0,this.l-Ua*(arguments.length?n:1)))},Pa.rgb=function(){return ot(this.h,this.c,this.l).rgb()},Zo.lab=at;var Ua=18,ja=.95047,Ha=1,Fa=1.08883,Oa=at.prototype=new et;Oa.brighter=function(n){return new at(Math.min(100,this.l+Ua*(arguments.length?n:1)),this.a,this.b)},Oa.darker=function(n){return new at(Math.max(0,this.l-Ua*(arguments.length?n:1)),this.a,this.b)},Oa.rgb=function(){return ct(this.l,this.a,this.b)},Zo.rgb=gt;var Ya=gt.prototype=new et;Ya.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new gt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new gt(u,u,u)},Ya.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new gt(n*this.r,n*this.g,n*this.b)},Ya.hsl=function(){return yt(this.r,this.g,this.b)},Ya.toString=function(){return"#"+dt(this.r)+dt(this.g)+dt(this.b)};var Ia=Zo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ia.forEach(function(n,t){Ia.set(n,pt(t))}),Zo.functor=bt,Zo.xhr=St(wt),Zo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=kt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(l>=s)return o;if(u)return u=!1,i;var t=l;if(34===n.charCodeAt(t)){for(var e=t;e++<s;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}l=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++l):10===r&&(u=!0),n.substring(t+1,e).replace(/""/g,'"')}for(;s>l;){var r=n.charCodeAt(l++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(l)&&(++l,++a);else if(r!==c)continue;return n.substring(t,l-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],s=n.length,l=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new h,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Zo.csv=Zo.dsv(",","text/csv"),Zo.tsv=Zo.dsv("	","text/tab-separated-values"),Zo.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=x().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return Z(n,r)};var Za,Va,Xa,$a,Ba,Wa=Wo[p(Wo,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Zo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Va?Va.n=i:Za=i,Va=i,Xa||($a=clearTimeout($a),Xa=1,Wa(At))},Zo.timer.flush=function(){Ct(),Nt()},Zo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var Ja=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Lt);Zo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Zo.round(n,zt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Ja[8+e/3]};var Ga=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Ka=Zo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Zo.round(n,zt(n,t))).toFixed(Math.max(0,Math.min(20,zt(n*(1+1e-15),t))))}}),Qa=Zo.time={},nc=Date;Rt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){tc.setUTCDate.apply(this._,arguments)},setDay:function(){tc.setUTCDay.apply(this._,arguments)},setFullYear:function(){tc.setUTCFullYear.apply(this._,arguments)},setHours:function(){tc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){tc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){tc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){tc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){tc.setUTCSeconds.apply(this._,arguments)},setTime:function(){tc.setTime.apply(this._,arguments)}};var tc=Date.prototype;Qa.year=Dt(function(n){return n=Qa.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),Qa.years=Qa.year.range,Qa.years.utc=Qa.year.utc.range,Qa.day=Dt(function(n){var t=new nc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),Qa.days=Qa.day.range,Qa.days.utc=Qa.day.utc.range,Qa.dayOfYear=function(n){var t=Qa.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=Qa[n]=Dt(function(n){return(n=Qa.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});Qa[n+"s"]=e.range,Qa[n+"s"].utc=e.utc.range,Qa[n+"OfYear"]=function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)}}),Qa.week=Qa.sunday,Qa.weeks=Qa.sunday.range,Qa.weeks.utc=Qa.sunday.utc.range,Qa.weekOfYear=Qa.sundayOfYear;var ec={"-":"",_:" ",0:"0"},rc=/^\s*\d+/,uc=/^%/;Zo.locale=function(n){return{numberFormat:Tt(n),timeFormat:Ut(n)}};var ic=Zo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Zo.format=ic.numberFormat,Zo.geo={},ue.prototype={s:0,t:0,add:function(n){ie(n,this.t,oc),ie(oc.s,this.s,this),this.s?this.t+=oc.t:this.s=oc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var oc=new ue;Zo.geo.stream=function(n,t){n&&ac.hasOwnProperty(n.type)?ac[n.type](n,t):oe(n,t)};var ac={Feature:function(n,t){oe(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)oe(e[r].geometry,t)}},cc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){ae(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ae(e[r],t,0)},Polygon:function(n,t){ce(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ce(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)oe(e[r],t)}};Zo.geo.area=function(n){return sc=0,Zo.geo.stream(n,fc),sc};var sc,lc=new ue,fc={sphere:function(){sc+=4*ba},point:v,lineStart:v,lineEnd:v,polygonStart:function(){lc.reset(),fc.lineStart=se},polygonEnd:function(){var n=2*lc;sc+=0>n?4*ba+n:n,fc.lineStart=fc.lineEnd=fc.point=v}};Zo.geo.bounds=function(){function n(n,t){x.push(M=[l=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=le([t*Aa,e*Aa]);if(m){var u=he(m,r),i=[u[1],-u[0],0],o=he(i,u);ve(o),o=de(o);var c=t-p,s=c>0?1:-1,v=o[0]*Ca*s,d=ua(c)>180;if(d^(v>s*p&&s*t>v)){var y=o[1]*Ca;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>s*p&&s*t>v)){var y=-o[1]*Ca;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t):h>=l?(l>t&&(l=t),t>h&&(h=t)):t>p?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=l,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ua(r)>180?r+(r>0?360:-360):r}else v=n,d=e;fc.point(n,e),t(n,e)}function i(){fc.lineStart()}function o(){u(v,d),fc.lineEnd(),ua(y)>ka&&(l=-(h=180)),M[0]=l,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function s(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var l,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,fc.polygonStart()},polygonEnd:function(){fc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>lc?(l=-(h=180),f=-(g=90)):y>ka?g=90:-ka>y&&(f=-90),M[0]=l,M[1]=h}};return function(n){g=h=-(l=f=1/0),x=[],Zo.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],s(e[0],u)||s(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);
+for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,l=e[0],h=u[1])}return x=M=null,1/0===l||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[l,f],[h,g]]}}(),Zo.geo.centroid=function(n){hc=gc=pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,wc);var t=Mc,e=_c,r=bc,u=t*t+e*e+r*r;return Ea>u&&(t=mc,e=yc,r=xc,ka>gc&&(t=pc,e=vc,r=dc),u=t*t+e*e+r*r,Ea>u)?[0/0,0/0]:[Math.atan2(e,t)*Ca,G(r/Math.sqrt(u))*Ca]};var hc,gc,pc,vc,dc,mc,yc,xc,Mc,_c,bc,wc={sphere:v,point:ye,lineStart:Me,lineEnd:_e,polygonStart:function(){wc.lineStart=be},polygonEnd:function(){wc.lineStart=Me}},Sc=Ae(we,Te,Re,[-ba,-ba/2]),kc=1e9;Zo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ue(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Zo.geo.conicEqualArea=function(){return He(Fe)}).raw=Fe,Zo.geo.albers=function(){return Zo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Zo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Zo.geo.albers(),o=Zo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Zo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var s=i.scale(),l=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[l-.455*s,f-.238*s],[l+.455*s,f+.238*s]]).stream(c).point,r=o.translate([l-.307*s,f+.201*s]).clipExtent([[l-.425*s+ka,f+.12*s+ka],[l-.214*s-ka,f+.234*s-ka]]).stream(c).point,u=a.translate([l-.205*s,f+.212*s]).clipExtent([[l-.214*s+ka,f+.166*s+ka],[l-.115*s-ka,f+.234*s-ka]]).stream(c).point,n},n.scale(1070)};var Ec,Ac,Cc,Nc,zc,Lc,Tc={point:v,lineStart:v,lineEnd:v,polygonStart:function(){Ac=0,Tc.lineStart=Oe},polygonEnd:function(){Tc.lineStart=Tc.lineEnd=Tc.point=v,Ec+=ua(Ac/2)}},qc={point:Ye,lineStart:v,lineEnd:v,polygonStart:v,polygonEnd:v},Rc={point:Ve,lineStart:Xe,lineEnd:$e,polygonStart:function(){Rc.lineStart=Be},polygonEnd:function(){Rc.point=Ve,Rc.lineStart=Xe,Rc.lineEnd=$e}};Zo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Zo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Ec=0,Zo.geo.stream(n,u(Tc)),Ec},n.centroid=function(n){return pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,u(Rc)),bc?[Mc/bc,_c/bc]:xc?[mc/xc,yc/xc]:dc?[pc/dc,vc/dc]:[0/0,0/0]},n.bounds=function(n){return zc=Lc=-(Cc=Nc=1/0),Zo.geo.stream(n,u(qc)),[[Cc,Nc],[zc,Lc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Ge(n):wt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Ie:new We(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Zo.geo.albersUsa()).context(null)},Zo.geo.transform=function(n){return{stream:function(t){var e=new Ke(t);for(var r in n)e[r]=n[r];return e}}},Ke.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Zo.geo.projection=nr,Zo.geo.projectionMutator=tr,(Zo.geo.equirectangular=function(){return nr(rr)}).raw=rr.invert=rr,Zo.geo.rotation=function(n){function t(t){return t=n(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t}return n=ir(n[0]%360*Aa,n[1]*Aa,n.length>2?n[2]*Aa:0),t.invert=function(t){return t=n.invert(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t},t},ur.invert=rr,Zo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=ir(-n[0]*Aa,-n[1]*Aa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ca,n[1]*=Ca}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=sr((t=+r)*Aa,u*Aa),n):t},n.precision=function(r){return arguments.length?(e=sr(t*Aa,(u=+r)*Aa),n):u},n.angle(90)},Zo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Aa,u=n[1]*Aa,i=t[1]*Aa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),s=Math.cos(u),l=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=s*l-c*f*a)*e),c*l+s*f*a)},Zo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Zo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Zo.range(Math.ceil(s/m)*m,c,m).map(g)).concat(Zo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ua(n%d)>ka}).map(l)).concat(Zo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ua(n%m)>ka}).map(f))}var e,r,u,i,o,a,c,s,l,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(s).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],s=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),s>c&&(t=s,s=c,c=t),n.precision(y)):[[i,s],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,l=fr(a,o,90),f=hr(r,e,y),h=fr(s,c,90),g=hr(i,u,y),n):y},n.majorExtent([[-180,-90+ka],[180,90-ka]]).minorExtent([[-180,-80-ka],[180,80+ka]])},Zo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=gr,u=pr;return n.distance=function(){return Zo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Zo.geo.interpolate=function(n,t){return vr(n[0]*Aa,n[1]*Aa,t[0]*Aa,t[1]*Aa)},Zo.geo.length=function(n){return Dc=0,Zo.geo.stream(n,Pc),Dc};var Dc,Pc={sphere:v,point:v,lineStart:dr,lineEnd:v,polygonStart:v,polygonEnd:v},Uc=mr(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Zo.geo.azimuthalEqualArea=function(){return nr(Uc)}).raw=Uc;var jc=mr(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},wt);(Zo.geo.azimuthalEquidistant=function(){return nr(jc)}).raw=jc,(Zo.geo.conicConformal=function(){return He(yr)}).raw=yr,(Zo.geo.conicEquidistant=function(){return He(xr)}).raw=xr;var Hc=mr(function(n){return 1/n},Math.atan);(Zo.geo.gnomonic=function(){return nr(Hc)}).raw=Hc,Mr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Sa]},(Zo.geo.mercator=function(){return _r(Mr)}).raw=Mr;var Fc=mr(function(){return 1},Math.asin);(Zo.geo.orthographic=function(){return nr(Fc)}).raw=Fc;var Oc=mr(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Zo.geo.stereographic=function(){return nr(Oc)}).raw=Oc,br.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Sa]},(Zo.geo.transverseMercator=function(){var n=_r(br),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=br,Zo.geom={},Zo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=bt(e),i=bt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(Er),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var s=kr(a),l=kr(c),f=l[0]===s[0],h=l[l.length-1]===s[s.length-1],g=[];for(t=s.length-1;t>=0;--t)g.push(n[a[s[t]][2]]);for(t=+f;t<l.length-h;++t)g.push(n[a[l[t]][2]]);return g}var e=wr,r=Sr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Zo.geom.polygon=function(n){return sa(n,Yc),n};var Yc=Zo.geom.polygon.prototype=[];Yc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Yc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Yc.clip=function(n){for(var t,e,r,u,i,o,a=Nr(n),c=-1,s=this.length-Nr(this),l=this[s-1];++c<s;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Ar(o,l,u)?(Ar(i,l,u)||n.push(Cr(i,o,l,u)),n.push(o)):Ar(i,l,u)&&n.push(Cr(i,o,l,u)),i=o;a&&n.push(n[0]),l=u}return n};var Ic,Zc,Vc,Xc,$c,Bc=[],Wc=[];Ur.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Hr),t.length},Wr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Jr.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=nu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(Kr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Qr(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(Qr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Kr(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?nu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,Kr(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,Qr(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,Kr(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,Qr(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,Kr(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,Qr(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Zo.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return tu(e(n),a).cells.forEach(function(e,a){var c=e.edges,s=e.site,l=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):s.x>=r&&s.x<=i&&s.y>=u&&s.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];l.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/ka)*ka,y:Math.round(o(n,t)/ka)*ka,i:t}})}var r=wr,u=Sr,i=r,o=u,a=Jc;return n?t(n):(t.links=function(n){return tu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return tu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Hr),c=-1,s=a.length,l=a[s-1].edge,f=l.l===o?l.r:l.l;++c<s;)u=l,i=f,l=a[c].edge,f=l.l===o?l.r:l.l,r<i.i&&r<f.i&&ru(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=bt(r=n),t):r},t.y=function(n){return arguments.length?(o=bt(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?Jc:n,t):a===Jc?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===Jc?null:a&&a[1]},t)};var Jc=[[-1e6,-1e6],[1e6,1e6]];Zo.geom.delaunay=function(n){return Zo.geom.voronoi().triangles(n)},Zo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,l=n.y;if(null!=c)if(ua(c-e)+ua(l-r)<.01)s(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,s(n,f,c,l,u,i,o,a),s(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else s(n,t,e,r,u,i,o,a)}function s(n,t,e,r,u,o,a,c){var s=.5*(u+a),l=.5*(o+c),f=e>=s,h=r>=l,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=ou()),f?u=s:a=s,h?o=l:c=l,i(n,t,e,r,u,o,a,c)}var l,f,h,g,p,v,d,m,y,x=bt(a),M=bt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)l=n[g],l.x<v&&(v=l.x),l.y<d&&(d=l.y),l.x>m&&(m=l.x),l.y>y&&(y=l.y),f.push(l.x),h.push(l.y);else for(g=0;p>g;++g){var _=+x(l=n[g],g),b=+M(l,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=ou();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){au(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=l=null,k}var o,a=wr,c=Sr;return(o=arguments.length)?(a=uu,c=iu,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Zo.interpolateRgb=cu,Zo.interpolateObject=su,Zo.interpolateNumber=lu,Zo.interpolateString=fu;var Gc=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Kc=new RegExp(Gc.source,"g");Zo.interpolate=hu,Zo.interpolators=[function(n,t){var e=typeof t;return("string"===e?Ia.has(t)||/^(#|rgb\(|hsl\()/.test(t)?cu:fu:t instanceof et?cu:Array.isArray(t)?gu:"object"===e&&isNaN(t)?su:lu)(n,t)}],Zo.interpolateArray=gu;var Qc=function(){return wt},ns=Zo.map({linear:Qc,poly:Mu,quad:function(){return mu},cubic:function(){return yu},sin:function(){return _u},exp:function(){return bu},circle:function(){return wu},elastic:Su,back:ku,bounce:function(){return Eu}}),ts=Zo.map({"in":wt,out:vu,"in-out":du,"out-in":function(n){return du(vu(n))}});Zo.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=ns.get(e)||Qc,r=ts.get(r)||wt,pu(r(e.apply(null,Vo.call(arguments,1))))},Zo.interpolateHcl=Au,Zo.interpolateHsl=Cu,Zo.interpolateLab=Nu,Zo.interpolateRound=zu,Zo.transform=function(n){var t=$o.createElementNS(Zo.ns.prefix.svg,"g");return(Zo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Lu(e?e.matrix:es)})(n)},Lu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var es={a:1,b:0,c:0,d:1,e:0,f:0};Zo.interpolateTransform=Du,Zo.layout={},Zo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(ju(n[e]));return t}},Zo.layout.chord=function(){function n(){var n,s,f,h,g,p={},v=[],d=Zo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(s=0,g=-1;++g<i;)s+=u[h][g];v.push(s),m.push(Zo.range(i)),n+=s}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(wa-l*i)/n,s=0,h=-1;++h<i;){for(f=s,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=s,b=s+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:s,value:(s-f)/n},s+=l}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,s={},l=0;return s.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,s):u},s.padding=function(n){return arguments.length?(l=n,e=r=null,s):l},s.sortGroups=function(n){return arguments.length?(o=n,e=r=null,s):o},s.sortSubgroups=function(n){return arguments.length?(a=n,e=null,s):a},s.sortChords=function(n){return arguments.length?(c=n,e&&t(),s):c},s.chords=function(){return e||n(),e},s.groups=function(){return r||n(),r},s},Zo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var s=t.charge/c;n.px-=i*s,n.py-=o*s}return!0}if(t.point&&c&&p>c){var s=t.pointCharge/c;n.px-=i*s,n.py-=o*s}}return!t.charge}}function t(n){n.px=Zo.event.x,n.py=Zo.event.y,a.resume()}var e,r,u,i,o,a={},c=Zo.dispatch("start","tick","end"),s=[1,1],l=.9,f=rs,h=us,g=-30,p=is,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=s[0]/2,M=s[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Vu(t=Zo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*l,a.y-=(a.py-(a.py=a.y))*l);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(s=n,a):s},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(l=+n,a):l},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Zo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,s=o.length;++a<s;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,l=y.length,p=s[0],v=s[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;l>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;l>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;l>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;l>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;l>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Zo.behavior.drag().origin(wt).on("dragstart.force",Ou).on("drag.force",t).on("dragend.force",Yu)),arguments.length?(this.on("mouseover.force",Iu).on("mouseout.force",Zu).call(e),void 0):e},Zo.rebind(a,c,"on")};var rs=20,us=1,is=1/0;Zo.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(s=e.call(n,i,i.depth))&&(c=s.length)){for(var c,s,l;--c>=0;)o.push(l=s[c]),l.parent=i,l.depth=i.depth+1;r&&(i.value=0),i.children=s}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Bu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=Gu,e=Wu,r=Ju;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&($u(t,function(n){n.children&&(n.value=0)}),Bu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},Zo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,s=-1;for(r=t.value?r/t.value:0;++s<o;)n(a=i[s],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Zo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Xu(e,r)},Zo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Zo.sum(o),s=Zo.range(i.length);null!=e&&s.sort(e===os?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var l=[];return s.forEach(function(n){var t;l[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),l}var t=Number,e=os,r=0,u=wa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var os={};Zo.layout.stack=function(){function n(a,c){var s=a.map(function(e,r){return t.call(n,e,r)}),l=s.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,l,c);s=Zo.permute(s,f),l=Zo.permute(l,f);var h,g,p,v=r.call(n,l,c),d=s.length,m=s[0].length;for(g=0;m>g;++g)for(u.call(n,s[0][g],p=v[g],l[0][g][1]),h=1;d>h;++h)u.call(n,s[h][g],p+=l[h-1][g][1],l[h][g][1]);return a}var t=wt,e=ei,r=ri,u=ti,i=Qu,o=ni;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:as.get(t)||ei,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:cs.get(t)||ri,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var as=Zo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ui),i=n.map(ii),o=Zo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,s=[],l=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],s.push(e)):(c+=i[e],l.push(e));return l.reverse().concat(s)},reverse:function(n){return Zo.range(n.length).reverse()},"default":ei}),cs=Zo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,s,l=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=s=0,e=1;h>e;++e){for(t=0,u=0;l>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];l>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,s>c&&(s=c)}for(e=0;h>e;++e)g[e]-=s;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ri});Zo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],s=n.map(e,this),l=r.call(this,s,i),f=u.call(this,l,s,i),i=-1,h=s.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=s[i],a>=l[0]&&a<=l[1]&&(o=c[Zo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=si,u=ai;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=bt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return ci(n,t)}:bt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Zo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],s=u[1],l=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Bu(a,function(n){n.r=+l(n.value)}),Bu(a,pi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/s))/2;Bu(a,function(n){n.r+=f}),Bu(a,pi),Bu(a,function(n){n.r-=f})}return mi(a,c/2,s/2,t?1:1/Math.max(2*a.r/c,2*a.r/s)),o}var t,e=Zo.layout.hierarchy().sort(li),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Xu(n,e)},Zo.layout.tree=function(){function n(n,u){var l=o.call(this,n,u),f=l[0],h=t(f);if(Bu(h,e),h.parent.m=-h.z,$u(h,r),s)$u(f,i);else{var g=f,p=f,v=f;$u(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);$u(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return l}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){wi(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],s=u.m,l=i.m,f=o.m,h=c.m;o=_i(o),u=Mi(u),o&&u;)c=Mi(c),i=_i(i),i.a=n,r=o.z+f-u.z-s+a(o._,u._),r>0&&(bi(Si(o,n,e),n,r),s+=r,l+=r),f+=o.m,s+=u.m,h+=c.m,l+=i.m;o&&!_i(i)&&(i.t=o,i.m+=f-l),u&&!Mi(c)&&(c.t=u,c.m+=s-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=Zo.layout.hierarchy().sort(null).value(null),a=xi,c=[1,1],s=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(s=null==(c=t)?i:null,n):s?null:c},n.nodeSize=function(t){return arguments.length?(s=null==(c=t)?null:i,n):s?c:null},Xu(n,o)},Zo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],s=0;Bu(c,function(n){var t=n.children;t&&t.length?(n.x=Ei(t),n.y=ki(t)):(n.x=o?s+=e(n,o):0,n.y=0,o=n)});var l=Ai(c),f=Ci(c),h=l.x-e(l,f)/2,g=f.x+e(f,l)/2;return Bu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Zo.layout.hierarchy().sort(null).value(null),e=xi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Xu(n,t)},Zo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,s=f(e),l=[],h=i.slice(),p=1/0,v="slice"===g?s.dx:"dice"===g?s.dy:"slice-dice"===g?1&e.depth?s.dy:s.dx:Math.min(s.dx,s.dy);for(n(h,s.dx*s.dy/e.value),l.area=0;(c=h.length)>0;)l.push(o=h[c-1]),l.area+=o.area,"squarify"!==g||(a=r(l,v))<=p?(h.pop(),p=a):(l.area-=l.pop().area,u(l,v,s,!1),v=Math.min(s.dx,s.dy),l.length=l.area=0,p=1/0);l.length&&(u(l,v,s,!0),l.length=l.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,s=e.y,l=t?c(n.area/t):0;if(t==e.dx){for((r||l>e.dy)&&(l=e.dy);++i<o;)u=n[i],u.x=a,u.y=s,u.dy=l,a+=u.dx=Math.min(e.x+e.dx-a,l?c(u.area/l):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=l,e.dy-=l}else{for((r||l>e.dx)&&(l=e.dx);++i<o;)u=n[i],u.x=a,u.y=s,u.dx=l,s+=u.dy=Math.min(e.y+e.dy-s,l?c(u.area/l):0);u.z=!1,u.dy+=e.y+e.dy-s,e.x+=l,e.dx-=l}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=s[0],i.dy=s[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Zo.layout.hierarchy(),c=Math.round,s=[1,1],l=null,f=Ni,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(s=n,i):s},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Ni(t):zi(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return zi(t,n)}if(!arguments.length)return l;var r;return f=null==(l=n)?Ni:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Xu(i,a)},Zo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Zo.random.normal.apply(Zo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Zo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Zo.scale={};var ss={floor:wt,ceil:wt};Zo.scale.linear=function(){return Ui([0,1],[0,1],hu,!1)};var ls={s:1,g:1,p:1,r:1,e:1};Zo.scale.log=function(){return Vi(Zo.scale.linear().domain([0,1]),10,!0,[1,10])};var fs=Zo.format(".0e"),hs={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Zo.scale.pow=function(){return Xi(Zo.scale.linear(),1,[0,1])},Zo.scale.sqrt=function(){return Zo.scale.pow().exponent(.5)},Zo.scale.ordinal=function(){return Bi([],{t:"range",a:[[]]})},Zo.scale.category10=function(){return Zo.scale.ordinal().range(gs)},Zo.scale.category20=function(){return Zo.scale.ordinal().range(ps)},Zo.scale.category20b=function(){return Zo.scale.ordinal().range(vs)},Zo.scale.category20c=function(){return Zo.scale.ordinal().range(ds)};var gs=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(vt),ps=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(vt),vs=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(vt),ds=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(vt);Zo.scale.quantile=function(){return Wi([],[])},Zo.scale.quantize=function(){return Ji(0,1,[0,1])},Zo.scale.threshold=function(){return Gi([.5],[0,1])},Zo.scale.identity=function(){return Ki([0,1])},Zo.svg={},Zo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+ms,a=u.apply(this,arguments)+ms,c=(o>a&&(c=o,o=a,a=c),a-o),s=ba>c?"0":"1",l=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a);
+return c>=ys?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+s+",0 "+n*l+","+n*f+"Z":"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=Qi,e=no,r=to,u=eo;return n.innerRadius=function(e){return arguments.length?(t=bt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=bt(t),n):e},n.startAngle=function(t){return arguments.length?(r=bt(t),n):r},n.endAngle=function(t){return arguments.length?(u=bt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+ms;return[Math.cos(i)*n,Math.sin(i)*n]},n};var ms=-Sa,ys=wa-ka;Zo.svg.line=function(){return ro(wt)};var xs=Zo.map({linear:uo,"linear-closed":io,step:oo,"step-before":ao,"step-after":co,basis:po,"basis-open":vo,"basis-closed":mo,bundle:yo,cardinal:fo,"cardinal-open":so,"cardinal-closed":lo,monotone:So});xs.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Ms=[0,2/3,1/3,0],_s=[0,1/3,2/3,0],bs=[0,1/6,2/3,1/6];Zo.svg.line.radial=function(){var n=ro(ko);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},ao.reverse=co,co.reverse=ao,Zo.svg.area=function(){return Eo(wt)},Zo.svg.area.radial=function(){var n=Eo(ko);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Zo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),s=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,s)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,s.r,s.p0)+r(s.r,s.p1,s.a1-s.a0)+u(s.r,s.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+ms,l=s.call(n,u,r)+ms;return{r:i,a0:o,a1:l,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(l),i*Math.sin(l)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>ba)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=gr,o=pr,a=Ao,c=to,s=eo;return n.radius=function(t){return arguments.length?(a=bt(t),n):a},n.source=function(t){return arguments.length?(i=bt(t),n):i},n.target=function(t){return arguments.length?(o=bt(t),n):o},n.startAngle=function(t){return arguments.length?(c=bt(t),n):c},n.endAngle=function(t){return arguments.length?(s=bt(t),n):s},n},Zo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=gr,e=pr,r=Co;return n.source=function(e){return arguments.length?(t=bt(e),n):t},n.target=function(t){return arguments.length?(e=bt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Zo.svg.diagonal.radial=function(){var n=Zo.svg.diagonal(),t=Co,e=n.projection;return n.projection=function(n){return arguments.length?e(No(t=n)):t},n},Zo.svg.symbol=function(){function n(n,r){return(ws.get(t.call(this,n,r))||To)(e.call(this,n,r))}var t=Lo,e=zo;return n.type=function(e){return arguments.length?(t=bt(e),n):t},n.size=function(t){return arguments.length?(e=bt(t),n):e},n};var ws=Zo.map({circle:To,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*As)),e=t*As;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Zo.svg.symbolTypes=ws.keys();var Ss,ks,Es=Math.sqrt(3),As=Math.tan(30*Aa),Cs=[],Ns=0;Cs.call=pa.call,Cs.empty=pa.empty,Cs.node=pa.node,Cs.size=pa.size,Zo.transition=function(n){return arguments.length?Ss?n.transition():n:ma.transition()},Zo.transition.prototype=Cs,Cs.select=function(n){var t,e,r,u=this.id,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],s=-1,l=c.length;++s<l;)(r=c[s])&&(e=n.call(r,r.__data__,s,o))?("__data__"in r&&(e.__data__=r.__data__),Po(e,s,u,r.__transition__[u]),t.push(e)):t.push(null)}return qo(i,u)},Cs.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=w(n);for(var c=-1,s=this.length;++c<s;)for(var l=this[c],f=-1,h=l.length;++f<h;)if(r=l[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Po(u,g,o,i),t.push(u)}return qo(a,o)},Cs.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return qo(u,this.id)},Cs.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):P(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Cs.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Du:hu,a=Zo.ns.qualify(n);return Ro(this,"attr."+n,t,a.local?i:u)},Cs.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Zo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Cs.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Wo.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=hu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Ro(this,"style."+n,t,u)},Cs.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Wo.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Cs.text=function(n){return Ro(this,"text",n,Do)},Cs.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Cs.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Zo.ease.apply(Zo,arguments)),P(this,function(e){e.__transition__[t].ease=n}))},Cs.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Cs.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Cs.each=function(n,t){var e=this.id;if(arguments.length<2){var r=ks,u=Ss;Ss=e,P(this,function(t,r,u){ks=t.__transition__[e],n.call(t,t.__data__,r,u)}),ks=r,Ss=u}else P(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Zo.dispatch("start","end"))).on(n,t)});return this},Cs.transition=function(){for(var n,t,e,r,u=this.id,i=++Ns,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],s=0,l=t.length;l>s;s++)(e=t[s])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Po(e,s,i,r)),n.push(e)}return qo(o,i)},Zo.svg.axis=function(){function n(n){n.each(function(){var n,s=Zo.select(this),l=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):wt:t,p=s.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",ka),d=Zo.transition(p.exit()).style("opacity",ka).remove(),m=Zo.transition(p.order()).style("opacity",1),y=Ti(f),x=s.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Zo.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=Uo,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=Uo,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=jo,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=jo,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,A=E.rangeBand()/2;l=f=function(n){return E(n)+A}}else l.rangeBand?l=f:d.call(n,f);v.call(n,l),m.call(n,f)})}var t,e=Zo.scale.linear(),r=zs,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Ls?t+"":zs,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var zs="bottom",Ls={top:1,right:1,bottom:1,left:1};Zo.svg.brush=function(){function n(i){i.each(function(){var i=Zo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,wt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Ts[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,f=Zo.transition(i),h=Zo.transition(o);c&&(l=Ti(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),e(f)),s&&(l=Ti(s),h.attr("y",l[0]).attr("height",l[1]-l[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+l[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",l[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",l[1]-l[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Zo.event.keyCode&&(C||(x=null,z[0]-=l[1],z[1]-=f[1],C=2),y())}function p(){32==Zo.event.keyCode&&2==C&&(z[0]+=l[1],z[1]+=f[1],C=0,y())}function v(){var n=Zo.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(Zo.event.altKey?(x||(x=[(l[0]+l[1])/2,(f[0]+f[1])/2]),z[0]=l[+(n[0]<x[0])],z[1]=f[+(n[1]<x[1])]):x=null),E&&d(n,c,0)&&(e(S),u=!0),A&&d(n,s,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:C?"move":"resize"}))}function d(n,t,e){var r,u,a=Ti(t),c=a[0],s=a[1],p=z[e],v=e?f:l,d=v[1]-v[0];return C&&(c-=p,s-=d+p),r=(e?g:h)?Math.max(c,Math.min(s,n[e])):n[e],C?u=(r+=p)+d:(x&&(p=Math.max(c,Math.min(s,2*x[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Zo.select("body").style("cursor",null),L.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),N(),w({type:"brushend"})}var x,M,_=this,b=Zo.select(Zo.event.target),w=a.of(_,arguments),S=Zo.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&s,C=b.classed("extent"),N=I(),z=Zo.mouse(_),L=Zo.select(Wo).on("keydown.brush",u).on("keyup.brush",p);if(Zo.event.changedTouches?L.on("touchmove.brush",v).on("touchend.brush",m):L.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),C)z[0]=l[0]-z[0],z[1]=f[0]-z[1];else if(k){var T=+/w$/.test(k),q=+/^n/.test(k);M=[l[1-T]-z[0],f[1-q]-z[1]],z[0]=l[T],z[1]=f[q]}else Zo.event.altKey&&(x=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Zo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=M(n,"brushstart","brush","brushend"),c=null,s=null,l=[0,0],f=[0,0],h=!0,g=!0,p=qs[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:l,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ss?Zo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,l=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=gu(l,t.x),r=gu(f,t.y);return i=o=null,function(u){l=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=qs[!c<<1|!s],n):c},n.y=function(t){return arguments.length?(s=t,p=qs[!c<<1|!s],n):s},n.clamp=function(t){return arguments.length?(c&&s?(h=!!t[0],g=!!t[1]):c?h=!!t:s&&(g=!!t),n):c&&s?[h,g]:c?h:s?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=l[0]||r!=l[1])&&(l=[e,r])),s&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],s.invert&&(u=s(u),a=s(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=l[0],r=l[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),s&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],s.invert&&(u=s.invert(u),a=s.invert(a)),u>a&&(h=u,u=a,a=h))),c&&s?[[e,u],[r,a]]:c?[e,r]:s&&[u,a])},n.clear=function(){return n.empty()||(l=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&l[0]==l[1]||!!s&&f[0]==f[1]},Zo.rebind(n,a,"on")};var Ts={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},qs=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Rs=Qa.format=ic.timeFormat,Ds=Rs.utc,Ps=Ds("%Y-%m-%dT%H:%M:%S.%LZ");Rs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Ho:Ps,Ho.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Ho.toString=Ps.toString,Qa.second=Dt(function(n){return new nc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),Qa.seconds=Qa.second.range,Qa.seconds.utc=Qa.second.utc.range,Qa.minute=Dt(function(n){return new nc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),Qa.minutes=Qa.minute.range,Qa.minutes.utc=Qa.minute.utc.range,Qa.hour=Dt(function(n){var t=n.getTimezoneOffset()/60;return new nc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),Qa.hours=Qa.hour.range,Qa.hours.utc=Qa.hour.utc.range,Qa.month=Dt(function(n){return n=Qa.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),Qa.months=Qa.month.range,Qa.months.utc=Qa.month.utc.range;var Us=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],js=[[Qa.second,1],[Qa.second,5],[Qa.second,15],[Qa.second,30],[Qa.minute,1],[Qa.minute,5],[Qa.minute,15],[Qa.minute,30],[Qa.hour,1],[Qa.hour,3],[Qa.hour,6],[Qa.hour,12],[Qa.day,1],[Qa.day,2],[Qa.week,1],[Qa.month,1],[Qa.month,3],[Qa.year,1]],Hs=Rs.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",we]]),Fs={range:function(n,t,e){return Zo.range(Math.ceil(n/e)*e,+t,e).map(Oo)},floor:wt,ceil:wt};js.year=Qa.year,Qa.scale=function(){return Fo(Zo.scale.linear(),js,Hs)};var Os=js.map(function(n){return[n[0].utc,n[1]]}),Ys=Ds.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",we]]);Os.year=Qa.year.utc,Qa.scale.utc=function(){return Fo(Zo.scale.linear(),Os,Ys)},Zo.text=St(function(n){return n.responseText}),Zo.json=function(n,t){return kt(n,"application/json",Yo,t)},Zo.html=function(n,t){return kt(n,"text/html",Io,t)},Zo.xml=St(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Zo):"object"==typeof module&&module.exports&&(module.exports=Zo),this.d3=Zo}();
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/holder.js b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/holder.js
index 7cd3ee068c1e7406aa5bc42b8fe5719b2ba30ed8..aa051bf0b867db6b03cef7771095869cf580e4c8 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/holder.js
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/holder.js
@@ -1,1533 +1,658 @@
-/*
-Holder.js - client side image placeholders
-Â© 2012-2014 Ivan Malopinsky - http://imsky.co
-*/
-(function(register, global, undefined) {
+/*!
 
-	//Constants and definitions
+Holder - 2.3.2 - client side image placeholders
+(c) 2012-2014 Ivan Malopinsky / http://imsky.co
 
-	var SVG_NS = 'http://www.w3.org/2000/svg';
-	var document = global.document;
+Provided under the MIT License.
+Commercial use requires attribution.
 
-	var Holder = {
-		/**
-		 * Adds a theme to default settings
-		 *
-		 * @param {string} name Theme name
-		 * @param {Object} theme Theme object, with foreground, background, size, font, and fontweight properties.
-		 */
-		addTheme: function(name, theme) {
-			name != null && theme != null && (App.settings.themes[name] = theme);
-			delete App.vars.cache.themeKeys;
-			return this;
+*/
+var Holder = Holder || {};
+(function (app, win) {
+var system_config = {
+	use_svg: false,
+	use_canvas: false,
+	use_fallback: false
+};
+var instance_config = {};
+var preempted = false;
+canvas = document.createElement('canvas');
+var dpr = 1, bsr = 1;
+var resizable_images = [];
+
+if (!canvas.getContext) {
+	system_config.use_fallback = true;
+} else {
+	if (canvas.toDataURL("image/png")
+		.indexOf("data:image/png") < 0) {
+		//Android doesn't support data URI
+		system_config.use_fallback = true;
+	} else {
+		var ctx = canvas.getContext("2d");
+	}
+}
+
+if(!!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect){
+	system_config.use_svg = true;
+	system_config.use_canvas = false;
+}
+
+if(!system_config.use_fallback){
+    dpr = window.devicePixelRatio || 1,
+    bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
+}
+
+var ratio = dpr / bsr;
+
+var settings = {
+	domain: "holder.js",
+	images: "img",
+	bgnodes: ".holderjs",
+	themes: {
+		"gray": {
+			background: "#eee",
+			foreground: "#aaa",
+			size: 12
 		},
-
-		/**
-		 * Appends a placeholder to an element
-		 *
-		 * @param {string} src Placeholder URL string
-		 * @param {string} el Selector of target element(s)
-		 */
-		addImage: function(src, el) {
-			var node = document.querySelectorAll(el);
-			if (node.length) {
-				for (var i = 0, l = node.length; i < l; i++) {
-					var img = newEl('img');
-					setAttr(img, {
-						'data-src': src
-					});
-					node[i].appendChild(img);
-				}
-			}
-			return this;
+		"social": {
+			background: "#3a5a97",
+			foreground: "#fff",
+			size: 12
 		},
-
-		/**
-		 * Runs Holder with options. By default runs Holder on all images with "holder.js" in their source attributes.
-		 *
-		 * @param {Object} userOptions Options object, can contain domain, themes, images, and bgnodes properties
-		 */
-		run: function(userOptions) {
-			userOptions = userOptions || {};
-			var renderSettings = {};
-
-			App.vars.preempted = true;
-
-			var options = extend(App.settings, userOptions);
-
-			renderSettings.renderer = options.renderer ? options.renderer : App.setup.renderer;
-			if (App.setup.renderers.join(',').indexOf(renderSettings.renderer) === -1) {
-				renderSettings.renderer = App.setup.supportsSVG ? 'svg' : (App.setup.supportsCanvas ? 'canvas' : 'html');
-			}
-
-			//< v2.4 API compatibility
-			if (options.use_canvas) {
-				renderSettings.renderer = 'canvas';
-			} else if (options.use_svg) {
-				renderSettings.renderer = 'svg';
-			}
-
-			var images = getNodeArray(options.images);
-			var bgnodes = getNodeArray(options.bgnodes);
-			var stylenodes = getNodeArray(options.stylenodes);
-			var objects = getNodeArray(options.objects);
-
-			renderSettings.stylesheets = [];
-			renderSettings.svgXMLStylesheet = true;
-			renderSettings.noFontFallback = options.noFontFallback ? options.noFontFallback : false;
-
-			for (var i = 0; i < stylenodes.length; i++) {
-				var styleNode = stylenodes[i];
-				if (styleNode.attributes.rel && styleNode.attributes.href && styleNode.attributes.rel.value == 'stylesheet') {
-					var href = styleNode.attributes.href.value;
-					//todo: write isomorphic relative-to-absolute URL function
-					var proxyLink = newEl('a');
-					proxyLink.href = href;
-					var stylesheetURL = proxyLink.protocol + '//' + proxyLink.host + proxyLink.pathname + proxyLink.search;
-					renderSettings.stylesheets.push(stylesheetURL);
-				}
-			}
-
-			for (i = 0; i < bgnodes.length; i++) {
-				var backgroundImage = global.getComputedStyle(bgnodes[i], null).getPropertyValue('background-image');
-				var dataBackgroundImage = bgnodes[i].getAttribute('data-background-src');
-				var rawURL = null;
-
-				if (dataBackgroundImage == null) {
-					rawURL = backgroundImage;
-				} else {
-					rawURL = dataBackgroundImage;
-				}
-
-				var holderURL = null;
-				var holderString = '?' + options.domain + '/';
-
-				if (rawURL.indexOf(holderString) === 0) {
-					holderURL = rawURL.slice(1);
-				} else if (rawURL.indexOf(holderString) != -1) {
-					var fragment = rawURL.substr(rawURL.indexOf(holderString)).slice(1);
-					var fragmentMatch = fragment.match(/([^\"]*)"?\)/);
-
-					if (fragmentMatch != null) {
-						holderURL = fragmentMatch[1];
-					}
-				}
-
-				if (holderURL != null) {
-					var holderFlags = parseURL(holderURL, options);
-					if (holderFlags) {
-						prepareDOMElement('background', bgnodes[i], holderFlags, renderSettings);
-					}
-				}
-			}
-
-			for (i = 0; i < objects.length; i++) {
-				var object = objects[i];
-				var objectAttr = {};
-
-				try {
-					objectAttr.data = object.getAttribute('data');
-					objectAttr.dataSrc = object.getAttribute('data-src');
-				} catch (e) {}
-
-				var objectHasSrcURL = objectAttr.data != null && objectAttr.data.indexOf(options.domain) === 0;
-				var objectHasDataSrcURL = objectAttr.dataSrc != null && objectAttr.dataSrc.indexOf(options.domain) === 0;
-
-				if (objectHasSrcURL) {
-					prepareImageElement(options, renderSettings, objectAttr.data, object);
-				} else if (objectHasDataSrcURL) {
-					prepareImageElement(options, renderSettings, objectAttr.dataSrc, object);
-				}
-			}
-
-			for (i = 0; i < images.length; i++) {
-				var image = images[i];
-				var imageAttr = {};
-
-				try {
-					imageAttr.src = image.getAttribute('src');
-					imageAttr.dataSrc = image.getAttribute('data-src');
-					imageAttr.rendered = image.getAttribute('data-holder-rendered');
-				} catch (e) {}
-
-				var imageHasSrc = imageAttr.src != null;
-				var imageHasDataSrcURL = imageAttr.dataSrc != null && imageAttr.dataSrc.indexOf(options.domain) === 0;
-				var imageRendered = imageAttr.rendered != null && imageAttr.rendered == 'true';
-
-				if (imageHasSrc) {
-					if (imageAttr.src.indexOf(options.domain) === 0) {
-						prepareImageElement(options, renderSettings, imageAttr.src, image);
-					} else if (imageHasDataSrcURL) {
-						//Image has a valid data-src and an invalid src
-						if (imageRendered) {
-							//If the placeholder has already been render, re-render it
-							prepareImageElement(options, renderSettings, imageAttr.dataSrc, image);
-						} else {
-							//If the placeholder has not been rendered, check if the image exists and render a fallback if it doesn't
-              (function(src, options, renderSettings, dataSrc, image){
-                imageExists(src, function(exists){
-                  if(!exists){
-                    prepareImageElement(options, renderSettings, dataSrc, image);
-                  }
-                });
-              })(imageAttr.src, options, renderSettings, imageAttr.dataSrc, image);
-						}
-					}
-				} else if (imageHasDataSrcURL) {
-					prepareImageElement(options, renderSettings, imageAttr.dataSrc, image);
-				}
-			}
-
-			return this;
+		"industrial": {
+			background: "#434A52",
+			foreground: "#C2F200",
+			size: 12
 		},
-		//todo: remove invisibleErrorFn for 2.5
-		invisibleErrorFn: function(fn) {
-			return function(el) {
-				if (el.hasAttribute('data-holder-invisible')) {
-					throw 'Holder: invisible placeholder';
-				}
-			};
-		}
-	};
-
-	//< v2.4 API compatibility
-
-	Holder.add_theme = Holder.addTheme;
-	Holder.add_image = Holder.addImage;
-	Holder.invisible_error_fn = Holder.invisibleErrorFn;
-
-	var App = {
-		settings: {
-			domain: 'holder.js',
-			images: 'img',
-			objects: 'object',
-			bgnodes: 'body .holderjs',
-			stylenodes: 'head link.holderjs',
-			stylesheets: [],
-			themes: {
-				'gray': {
-					background: '#EEEEEE',
-					foreground: '#AAAAAA'
-				},
-				'social': {
-					background: '#3a5a97',
-					foreground: '#FFFFFF'
-				},
-				'industrial': {
-					background: '#434A52',
-					foreground: '#C2F200'
-				},
-				'sky': {
-					background: '#0D8FDB',
-					foreground: '#FFFFFF'
-				},
-				'vine': {
-					background: '#39DBAC',
-					foreground: '#1E292C'
-				},
-				'lava': {
-					background: '#F8591A',
-					foreground: '#1C2846'
-				}
-			}
+		"sky": {
+			background: "#0D8FDB",
+			foreground: "#fff",
+			size: 12
 		},
-    defaults: {
-      size: 10,
-      units: 'pt',
-      scale: 1/16
-    },
-		flags: {
-			dimensions: {
-				regex: /^(\d+)x(\d+)$/,
-				output: function(val) {
-					var exec = this.regex.exec(val);
-					return {
-						width: +exec[1],
-						height: +exec[2]
-					};
-				}
-			},
-			fluid: {
-				regex: /^([0-9]+%?)x([0-9]+%?)$/,
-				output: function(val) {
-					var exec = this.regex.exec(val);
-					return {
-						width: exec[1],
-						height: exec[2]
-					};
-				}
-			},
-			colors: {
-				regex: /(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,
-				output: function(val) {
-					var exec = this.regex.exec(val);
-					return {
-						foreground: '#' + exec[2],
-						background: '#' + exec[1]
-					};
-				}
-			},
-			text: {
-				regex: /text\:(.*)/,
-				output: function(val) {
-					return this.regex.exec(val)[1].replace('\\/', '/');
-				}
-			},
-			font: {
-				regex: /font\:(.*)/,
-				output: function(val) {
-					return this.regex.exec(val)[1];
-				}
-			},
-			auto: {
-				regex: /^auto$/
-			},
-			textmode: {
-				regex: /textmode\:(.*)/,
-				output: function(val) {
-					return this.regex.exec(val)[1];
-				}
-			},
-			random: {
-				regex: /^random$/
-			}
-		}
-	};
-
-	/**
-	 * Processes provided source attribute and sets up the appropriate rendering workflow
-	 *
-	 * @private
-	 * @param options Instance options from Holder.run
-	 * @param renderSettings Instance configuration
-	 * @param src Image URL
-	 * @param el Image DOM element
-	 */
-	function prepareImageElement(options, renderSettings, src, el) {
-		var holderFlags = parseURL(src.substr(src.lastIndexOf(options.domain)), options);
-		if (holderFlags) {
-			prepareDOMElement(null, el, holderFlags, renderSettings);
+		"vine": {
+			background: "#39DBAC",
+			foreground: "#1E292C",
+			size: 12
+		},
+		"lava": {
+			background: "#F8591A",
+			foreground: "#1C2846",
+			size: 12
+		}
+	},
+	stylesheet: ""
+};
+app.flags = {
+	dimensions: {
+		regex: /^(\d+)x(\d+)$/,
+		output: function (val) {
+			var exec = this.regex.exec(val);
+			return {
+				width: +exec[1],
+				height: +exec[2]
+			}
+		}
+	},
+	fluid: {
+		regex: /^([0-9%]+)x([0-9%]+)$/,
+		output: function (val) {
+			var exec = this.regex.exec(val);
+			return {
+				width: exec[1],
+				height: exec[2]
+			}
+		}
+	},
+	colors: {
+		regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i,
+		output: function (val) {
+			var exec = this.regex.exec(val);
+			return {
+				size: settings.themes.gray.size,
+				foreground: "#" + exec[2],
+				background: "#" + exec[1]
+			}
+		}
+	},
+	text: {
+		regex: /text\:(.*)/,
+		output: function (val) {
+			return this.regex.exec(val)[1];
+		}
+	},
+	font: {
+		regex: /font\:(.*)/,
+		output: function (val) {
+			return this.regex.exec(val)[1];
+		}
+	},
+	auto: {
+		regex: /^auto$/
+	},
+	textmode: {
+		regex: /textmode\:(.*)/,
+		output: function(val){
+			return this.regex.exec(val)[1];
 		}
 	}
+}
+
+function text_size(width, height, template) {
+	height = parseInt(height, 10);
+	width = parseInt(width, 10);
+	var bigSide = Math.max(height, width)
+	var smallSide = Math.min(height, width)
+	var scale = 1 / 12;
+	var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale);
+	return {
+		height: Math.round(Math.max(template.size, newHeight))
+	}
+}
+
+var svg_el = (function(){
+	//Prevent IE <9 from initializing SVG renderer
+	if(!window.XMLSerializer) return;
+	var serializer = new XMLSerializer();
+	var svg_ns = "http://www.w3.org/2000/svg"
+	var svg = document.createElementNS(svg_ns, "svg");
+	//IE throws an exception if this is set and Chrome requires it to be set
+	if(svg.webkitMatchesSelector){
+		svg.setAttribute("xmlns", "http://www.w3.org/2000/svg")
+	}
+	var bg_el = document.createElementNS(svg_ns, "rect")
+	var text_el = document.createElementNS(svg_ns, "text")
+	var textnode_el = document.createTextNode(null)
+	text_el.setAttribute("text-anchor", "middle")
+	text_el.appendChild(textnode_el)
+	svg.appendChild(bg_el)
+	svg.appendChild(text_el)
+
+	return function(props){
+		svg.setAttribute("width",props.width);
+		svg.setAttribute("height", props.height);
+		bg_el.setAttribute("width", props.width);
+		bg_el.setAttribute("height", props.height);
+		bg_el.setAttribute("fill", props.template.background);
+		text_el.setAttribute("x", props.width/2)
+		text_el.setAttribute("y", props.height/2)
+		textnode_el.nodeValue=props.text
+		text_el.setAttribute("style", css_properties({
+		"fill": props.template.foreground,
+		"font-weight": "bold",
+		"font-size": props.text_height+"px",
+		"font-family":props.font,
+		"dominant-baseline":"central"
+		}))
+		return serializer.serializeToString(svg)
+	}
+})()
 
-	/**
-	 * Processes a Holder URL and extracts flags
-	 *
-	 * @private
-	 * @param url URL
-	 * @param options Instance options from Holder.run
-	 */
-	function parseURL(url, options) {
-		var ret = {
-			theme: extend(App.settings.themes.gray, null),
-			stylesheets: options.stylesheets,
-			holderURL: []
-		};
-		var render = false;
-		var vtab = String.fromCharCode(11);
-		var flags = url.replace(/([^\\])\//g, '$1' + vtab).split(vtab);
-		var uriRegex = /%[0-9a-f]{2}/gi;
-		for (var fl = flags.length, j = 0; j < fl; j++) {
-			var flag = flags[j];
-			if (flag.match(uriRegex)) {
-				try {
-					flag = decodeURIComponent(flag);
-				} catch (e) {
-					flag = flags[j];
-				}
-			}
-
-			var push = false;
-
-			if (App.flags.dimensions.match(flag)) {
-				render = true;
-				ret.dimensions = App.flags.dimensions.output(flag);
-				push = true;
-			} else if (App.flags.fluid.match(flag)) {
-				render = true;
-				ret.dimensions = App.flags.fluid.output(flag);
-				ret.fluid = true;
-				push = true;
-			} else if (App.flags.textmode.match(flag)) {
-				ret.textmode = App.flags.textmode.output(flag);
-				push = true;
-			} else if (App.flags.colors.match(flag)) {
-				var colors = App.flags.colors.output(flag);
-				ret.theme = extend(ret.theme, colors);
-				//todo: convert implicit theme use to a theme: flag
-				push = true;
-			} else if (options.themes[flag]) {
-				//If a theme is specified, it will override custom colors
-				if (options.themes.hasOwnProperty(flag)) {
-					ret.theme = extend(options.themes[flag], null);
-				}
-				push = true;
-			} else if (App.flags.font.match(flag)) {
-				ret.font = App.flags.font.output(flag);
-				push = true;
-			} else if (App.flags.auto.match(flag)) {
-				ret.auto = true;
-				push = true;
-			} else if (App.flags.text.match(flag)) {
-				ret.text = App.flags.text.output(flag);
-				push = true;
-			} else if (App.flags.random.match(flag)) {
-				if (App.vars.cache.themeKeys == null) {
-					App.vars.cache.themeKeys = Object.keys(options.themes);
-				}
-				var theme = App.vars.cache.themeKeys[0 | Math.random() * App.vars.cache.themeKeys.length];
-				ret.theme = extend(options.themes[theme], null);
-				push = true;
-			}
-
-			if (push) {
-				ret.holderURL.push(flag);
-			}
+function css_properties(props){
+	var ret = [];
+	for(p in props){
+		if(props.hasOwnProperty(p)){
+			ret.push(p+":"+props[p])
 		}
-		ret.holderURL.unshift(options.domain);
-		ret.holderURL = ret.holderURL.join('/');
-		return render ? ret : false;
 	}
+	return ret.join(";")
+}
+
+function draw_canvas(args) {
+	var ctx = args.ctx,
+		dimensions = args.dimensions,
+		template = args.template,
+		ratio = args.ratio,
+		holder = args.holder,
+		literal = holder.textmode == "literal",
+		exact = holder.textmode == "exact";
+
+	var ts = text_size(dimensions.width, dimensions.height, template);
+	var text_height = ts.height;
+	var width = dimensions.width * ratio,
+		height = dimensions.height * ratio;
+	var font = template.font ? template.font : "Arial,Helvetica,sans-serif";
+	canvas.width = width;
+	canvas.height = height;
+	ctx.textAlign = "center";
+	ctx.textBaseline = "middle";
+	ctx.fillStyle = template.background;
+	ctx.fillRect(0, 0, width, height);
+	ctx.fillStyle = template.foreground;
+	ctx.font = "bold " + text_height + "px " + font;
+	var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
+	if (literal) {
+		var dimensions = holder.dimensions;
+		text = dimensions.width + "x" + dimensions.height;
+	}
+	else if(exact && holder.exact_dimensions){
+		var dimensions = holder.exact_dimensions;
+		text = (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
+	}
+	var text_width = ctx.measureText(text).width;
+	if (text_width / width >= 0.75) {
+		text_height = Math.floor(text_height * 0.75 * (width / text_width));
+	}
+	//Resetting font size if necessary
+	ctx.font = "bold " + (text_height * ratio) + "px " + font;
+	ctx.fillText(text, (width / 2), (height / 2), width);
+	return canvas.toDataURL("image/png");
+}
+
+function draw_svg(args){
+	var dimensions = args.dimensions,
+		template = args.template,
+		holder = args.holder,
+		literal = holder.textmode == "literal",
+		exact = holder.textmode == "exact";
+
+	var ts = text_size(dimensions.width, dimensions.height, template);
+	var text_height = ts.height;
+	var width = dimensions.width,
+		height = dimensions.height;
+
+	var font = template.font ? template.font : "Arial,Helvetica,sans-serif";
+	var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
+
+	if (literal) {
+		var dimensions = holder.dimensions;
+		text = dimensions.width + "x" + dimensions.height;
+	}
+	else if(exact && holder.exact_dimensions){
+		var dimensions = holder.exact_dimensions;
+		text = (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
+	}
+	var string = svg_el({
+		text: text,
+		width:width,
+		height:height,
+		text_height:text_height,
+		font:font,
+		template:template
+	})
+	return "data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(string)));
+}
+
+function draw(args) {
+	if(instance_config.use_canvas && !instance_config.use_svg){
+		return draw_canvas(args);
+	}
+	else{
+		return draw_svg(args);
+	}
+}
+
+function render(mode, el, holder, src) {
+	var dimensions = holder.dimensions,
+		theme = holder.theme,
+		text = holder.text ? decodeURIComponent(holder.text) : holder.text;
+	var dimensions_caption = dimensions.width + "x" + dimensions.height;
+	theme = (text ? extend(theme, {
+		text: text
+	}) : theme);
+	theme = (holder.font ? extend(theme, {
+		font: holder.font
+	}) : theme);
+	el.setAttribute("data-src", src);
+	holder.theme = theme;
+	el.holder_data = holder;
+
+	if (mode == "image") {
+		el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
+		if (instance_config.use_fallback || !holder.auto) {
+			el.style.width = dimensions.width + "px";
+			el.style.height = dimensions.height + "px";
+		}
+		if (instance_config.use_fallback) {
+			el.style.backgroundColor = theme.background;
+		} else {
+			el.setAttribute("src", draw({ctx: ctx, dimensions: dimensions, template: theme, ratio:ratio, holder: holder}));
 
-	/**
-	 * Modifies the DOM to fit placeholders and sets up resizable image callbacks (for fluid and automatically sized placeholders)
-	 *
-	 * @private
-	 * @param el Image DOM element
-	 * @param flags Placeholder-specific configuration
-	 * @param _renderSettings Instance configuration
-	 */
-	function prepareDOMElement(mode, el, flags, _renderSettings) {
-		var dimensions = flags.dimensions,
-			theme = flags.theme;
-		var dimensionsCaption = dimensions.width + 'x' + dimensions.height;
-		mode = mode == null ? (flags.fluid ? 'fluid' : 'image') : mode;
-
-		if (flags.text != null) {
-			theme.text = flags.text;
-
-			//<object> SVG embedding doesn't parse Unicode properly
-			if (el.nodeName.toLowerCase() === 'object') {
-				var textLines = theme.text.split('\\n');
-				for (var k = 0; k < textLines.length; k++) {
-					textLines[k] = encodeHtmlEntity(textLines[k]);
-				}
-				theme.text = textLines.join('\\n');
+			if(holder.textmode && holder.textmode == "exact"){
+				resizable_images.push(el);
+				resizable_update(el);
 			}
-		}
-
-		var holderURL = flags.holderURL;
-		var renderSettings = extend(_renderSettings, null);
 
-		if (flags.font) {
-			theme.font = flags.font;
-			//Only run the <canvas> webfont fallback if noFontFallback is false, if the node is not an image, and if canvas is supported
-			if (!renderSettings.noFontFallback && el.nodeName.toLowerCase() === 'img' && App.setup.supportsCanvas && renderSettings.renderer === 'svg') {
-				renderSettings = extend(renderSettings, {
-					renderer: 'canvas'
-				});
-			}
 		}
-
-		//Chrome and Opera require a quick 10ms re-render if web fonts are used with canvas
-		if (flags.font && renderSettings.renderer == 'canvas') {
-			renderSettings.reRender = true;
+	} else if (mode == "background") {
+		if (!instance_config.use_fallback) {
+			el.style.backgroundImage = "url(" + draw({ctx:ctx, dimensions: dimensions, template: theme, ratio: ratio, holder: holder}) + ")";
+			el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px";
 		}
-
-		if (mode == 'background') {
-			if (el.getAttribute('data-background-src') == null) {
-				setAttr(el, {
-					'data-background-src': holderURL
-				});
-			}
-		} else {
-			setAttr(el, {
-				'data-src': holderURL
-			});
+	} else if (mode == "fluid") {
+		el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
+		if (dimensions.height.slice(-1) == "%") {
+			el.style.height = dimensions.height
+		} else if(holder.auto == null || !holder.auto){
+			el.style.height = dimensions.height + "px"
 		}
-
-		flags.theme = theme;
-
-		el.holderData = {
-			flags: flags,
-			renderSettings: renderSettings
-		};
-
-		if (mode == 'image' || mode == 'fluid') {
-			setAttr(el, {
-				'alt': (theme.text ? (theme.text.length > 16 ? theme.text.substring(0, 16) + 'â€¦' : theme.text) + ' [' + dimensionsCaption + ']' : dimensionsCaption)
-			});
+		if (dimensions.width.slice(-1) == "%") {
+			el.style.width = dimensions.width
+		} else if(holder.auto == null || !holder.auto){
+			el.style.width = dimensions.width + "px"
 		}
-
-		if (mode == 'image') {
-			if (renderSettings.renderer == 'html' || !flags.auto) {
-				el.style.width = dimensions.width + 'px';
-				el.style.height = dimensions.height + 'px';
-			}
-			if (renderSettings.renderer == 'html') {
-				el.style.backgroundColor = theme.background;
-			} else {
-				render(mode, {
-					dimensions: dimensions,
-					theme: theme,
-					flags: flags
-				}, el, renderSettings);
-
-				if (flags.textmode && flags.textmode == 'exact') {
-					App.vars.resizableImages.push(el);
-					updateResizableElements(el);
-				}
-			}
-		} else if (mode == 'background' && renderSettings.renderer != 'html') {
-			render(mode, {
-					dimensions: dimensions,
-					theme: theme,
-					flags: flags
-				},
-				el, renderSettings);
-		} else if (mode == 'fluid') {
-			if (dimensions.height.slice(-1) == '%') {
-				el.style.height = dimensions.height;
-			} else if (flags.auto == null || !flags.auto) {
-				el.style.height = dimensions.height + 'px';
-			}
-			if (dimensions.width.slice(-1) == '%') {
-				el.style.width = dimensions.width;
-			} else if (flags.auto == null || !flags.auto) {
-				el.style.width = dimensions.width + 'px';
-			}
-			if (el.style.display == 'inline' || el.style.display === '' || el.style.display == 'none') {
-				el.style.display = 'block';
-			}
-
-			setInitialDimensions(el);
-
-			if (renderSettings.renderer == 'html') {
-				el.style.backgroundColor = theme.background;
-			} else {
-				App.vars.resizableImages.push(el);
-				updateResizableElements(el);
-			}
+		if (el.style.display == "inline" || el.style.display === "" || el.style.display == "none") {
+			el.style.display = "block";
 		}
-	}
 
-	/**
-	 * Core function that takes output from renderers and sets it as the source or background-image of the target element
-	 *
-	 * @private
-	 * @param mode Placeholder mode, either background or image
-	 * @param params Placeholder-specific parameters
-	 * @param el Image DOM element
-	 * @param renderSettings Instance configuration
-	 */
+		set_initial_dimensions(el)
 
-	function render(mode, params, el, renderSettings) {
-		var image = null;
-
-		switch (renderSettings.renderer) {
-			case 'svg':
-				if (!App.setup.supportsSVG) return;
-				break;
-			case 'canvas':
-				if (!App.setup.supportsCanvas) return;
-				break;
-			default:
-				return;
-		}
-
-		//todo: move generation of scene up to flag generation to reduce extra object creation
-		var scene = {
-			width: params.dimensions.width,
-			height: params.dimensions.height,
-			theme: params.theme,
-			flags: params.flags
-		};
-
-		var sceneGraph = buildSceneGraph(scene);
-
-		var rendererParams = {
-			text: scene.text,
-			width: scene.width,
-			height: scene.height,
-			textHeight: scene.font.size,
-			font: scene.font.family,
-			fontWeight: scene.font.weight,
-			template: scene.theme
-		};
-
-		function getRenderedImage() {
-			var image = null;
-			switch (renderSettings.renderer) {
-				case 'canvas':
-					image = sgCanvasRenderer(sceneGraph);
-					break;
-				case 'svg':
-					image = sgSVGRenderer(sceneGraph, renderSettings);
-					break;
-				default:
-					throw 'Holder: invalid renderer: ' + renderSettings.renderer;
-			}
-			return image;
-		}
-
-		image = getRenderedImage();
-
-		if (image == null) {
-			throw 'Holder: couldn\'t render placeholder';
-		}
-
-		//todo: add <object> canvas rendering
-		if (mode == 'background') {
-			el.style.backgroundImage = 'url(' + image + ')';
-			el.style.backgroundSize = scene.width + 'px ' + scene.height + 'px';
+		if (instance_config.use_fallback) {
+			el.style.backgroundColor = theme.background;
 		} else {
-			if (el.nodeName.toLowerCase() === 'img') {
-				setAttr(el, {
-					'src': image
-				});
-			} else if (el.nodeName.toLowerCase() === 'object') {
-				setAttr(el, {
-					'data': image
-				});
-				setAttr(el, {
-					'type': 'image/svg+xml'
-				});
-			}
-			if (renderSettings.reRender) {
-				setTimeout(function() {
-					var image = getRenderedImage();
-					if (image == null) {
-						throw 'Holder: couldn\'t render placeholder';
-					}
-					if (el.nodeName.toLowerCase() === 'img') {
-						setAttr(el, {
-							'src': image
-						});
-					} else if (el.nodeName.toLowerCase() === 'object') {
-						setAttr(el, {
-							'data': image
-						});
-						setAttr(el, {
-							'type': 'image/svg+xml'
-						});
-					}
-				}, 100);
-			}
+			resizable_images.push(el);
+			resizable_update(el);
 		}
-		setAttr(el, {
-			'data-holder-rendered': true
-		});
 	}
+}
 
-	/**
-	 * Core function that takes a Holder scene description and builds a scene graph
-	 *
-	 * @private
-	 * @param scene Holder scene object
-	 */
-	function buildSceneGraph(scene) {
-		scene.font = {
-			family: scene.theme.font ? scene.theme.font : 'Arial, Helvetica, Open Sans, sans-serif',
-			size: textSize(scene.width, scene.height, scene.theme.size ? scene.theme.size : App.defaults.size),
-      units: scene.theme.units ? scene.theme.units : App.defaults.units,
-			weight: scene.theme.fontweight ? scene.theme.fontweight : 'bold'
-		};
-		scene.text = scene.theme.text ? scene.theme.text : Math.floor(scene.width) + 'x' + Math.floor(scene.height);
-
-		switch (scene.flags.textmode) {
-			case 'literal':
-				scene.text = scene.flags.dimensions.width + 'x' + scene.flags.dimensions.height;
-				break;
-			case 'exact':
-				if (!scene.flags.exactDimensions) break;
-				scene.text = Math.floor(scene.flags.exactDimensions.width) + 'x' + Math.floor(scene.flags.exactDimensions.height);
-				break;
-		}
-
-		var sceneGraph = new SceneGraph({
-			width: scene.width,
-			height: scene.height
-		});
-
-		var Shape = sceneGraph.Shape;
-
-		var holderBg = new Shape.Rect('holderBg', {
-			fill: scene.theme.background
-		});
-
-		holderBg.resize(scene.width, scene.height);
-		sceneGraph.root.add(holderBg);
-
-		var holderTextGroup = new Shape.Group('holderTextGroup', {
-			text: scene.text,
-			align: 'center',
-			font: scene.font,
-			fill: scene.theme.foreground
-		});
-
-		holderTextGroup.moveTo(null, null, 1);
-		sceneGraph.root.add(holderTextGroup);
-
-		var tpdata = holderTextGroup.textPositionData = stagingRenderer(sceneGraph);
-		if (!tpdata) {
-			throw 'Holder: staging fallback not supported yet.';
-		}
-		holderTextGroup.properties.leading = tpdata.boundingBox.height;
-
-		//todo: alignment: TL, TC, TR, CL, CR, BL, BC, BR
-		var textNode = null;
-		var line = null;
-
-		function finalizeLine(parent, line, width, height) {
-			line.width = width;
-			line.height = height;
-			parent.width = Math.max(parent.width, line.width);
-			parent.height += line.height;
-			parent.add(line);
-		}
-
-		if (tpdata.lineCount > 1) {
-			var offsetX = 0;
-			var offsetY = 0;
-			var maxLineWidth = scene.width * App.setup.lineWrapRatio;
-			var lineIndex = 0;
-			line = new Shape.Group('line' + lineIndex);
+function dimension_check(el, callback) {
+	var dimensions = {
+		height: el.clientHeight,
+		width: el.clientWidth
+	};
+	if (!dimensions.height && !dimensions.width) {
+		el.setAttribute("data-holder-invisible", true)
+		callback.call(this, el)
+	}
+	else{
+		el.removeAttribute("data-holder-invisible")
+		return dimensions;
+	}
+}
 
-			for (var i = 0; i < tpdata.words.length; i++) {
-				var word = tpdata.words[i];
-				textNode = new Shape.Text(word.text);
-				var newline = word.text == '\\n';
-				if (offsetX + word.width >= maxLineWidth || newline === true) {
-					finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);
-					offsetX = 0;
-					offsetY += holderTextGroup.properties.leading;
-					lineIndex += 1;
-					line = new Shape.Group('line' + lineIndex);
-					line.y = offsetY;
-				}
-				if (newline === true) {
-					continue;
-				}
-				textNode.moveTo(offsetX, 0);
-				offsetX += tpdata.spaceWidth + word.width;
-				line.add(textNode);
+function set_initial_dimensions(el){
+	if(el.holder_data){
+		var dimensions = dimension_check(el, app.invisible_error_fn( set_initial_dimensions))
+		if(dimensions){
+			var holder = el.holder_data;
+			holder.initial_dimensions = dimensions;
+			holder.fluid_data = {
+				fluid_height: holder.dimensions.height.slice(-1) == "%",
+				fluid_width: holder.dimensions.width.slice(-1) == "%",
+				mode: null
 			}
-
-			finalizeLine(holderTextGroup, line, offsetX, holderTextGroup.properties.leading);
-
-			for (var lineKey in holderTextGroup.children) {
-				line = holderTextGroup.children[lineKey];
-				line.moveTo(
-					(holderTextGroup.width - line.width) / 2,
-					null,
-					null);
+			if(holder.fluid_data.fluid_width && !holder.fluid_data.fluid_height){
+				holder.fluid_data.mode = "width"
+				holder.fluid_data.ratio = holder.initial_dimensions.width / parseFloat(holder.dimensions.height)
 			}
-
-			holderTextGroup.moveTo(
-				(scene.width - holderTextGroup.width) / 2, (scene.height - holderTextGroup.height) / 2,
-				null);
-
-			//If the text exceeds vertical space, move it down so the first line is visible
-			if ((scene.height - holderTextGroup.height) / 2 < 0) {
-				holderTextGroup.moveTo(null, 0, null);
+			else if(!holder.fluid_data.fluid_width && holder.fluid_data.fluid_height){
+				holder.fluid_data.mode = "height";
+				holder.fluid_data.ratio = parseFloat(holder.dimensions.width) / holder.initial_dimensions.height
 			}
-		} else {
-			textNode = new Shape.Text(scene.text);
-			line = new Shape.Group('line0');
-			line.add(textNode);
-			holderTextGroup.add(line);
-
-			holderTextGroup.moveTo(
-				(scene.width - tpdata.boundingBox.width) / 2, (scene.height - tpdata.boundingBox.height) / 2,
-				null);
 		}
-
-		//todo: renderlist
-
-		return sceneGraph;
 	}
+}
 
-	/**
-	 * Adaptive text sizing function
-	 *
-	 * @private
-	 * @param width Parent width
-	 * @param height Parent height
-	 * @param fontSize Requested text size
-	 */
-	function textSize(width, height, fontSize) {
-		height = parseInt(height, 10);
-		width = parseInt(width, 10);
-		var bigSide = Math.max(height, width);
-		var smallSide = Math.min(height, width);
-		var scale = App.defaults.scale;
-		var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale);
-		return Math.round(Math.max(fontSize, newHeight));
+function resizable_update(element) {
+	var images;
+	if (element.nodeType == null) {
+		images = resizable_images;
+	} else {
+		images = [element]
 	}
-
-	/**
-	 * Iterates over resizable (fluid or auto) placeholders and renders them
-	 *
-	 * @private
-	 * @param element Optional element selector, specified only if a specific element needs to be re-rendered
-	 */
-	function updateResizableElements(element) {
-		var images;
-		if (element == null || element.nodeType == null) {
-			images = App.vars.resizableImages;
-		} else {
-			images = [element];
-		}
-		for (var i in images) {
-			if (!images.hasOwnProperty(i)) {
-				continue;
-			}
-			var el = images[i];
-			if (el.holderData) {
-				var flags = el.holderData.flags;
-				var dimensions = dimensionCheck(el, Holder.invisibleErrorFn(updateResizableElements));
-				if (dimensions) {
-					if (flags.fluid && flags.auto) {
-						var fluidConfig = el.holderData.fluidConfig;
-						switch (fluidConfig.mode) {
-							case 'width':
-								dimensions.height = dimensions.width / fluidConfig.ratio;
-								break;
-							case 'height':
-								dimensions.width = dimensions.height * fluidConfig.ratio;
-								break;
+	for (var i in images) {
+		if (!images.hasOwnProperty(i)) {
+			continue;
+		}
+		var el = images[i]
+		if (el.holder_data) {
+			var holder = el.holder_data;
+			var dimensions = dimension_check(el, app.invisible_error_fn( resizable_update))
+			if(dimensions){
+				if(holder.fluid){
+					if(holder.auto){
+						switch(holder.fluid_data.mode){
+							case "width":
+								dimensions.height = dimensions.width / holder.fluid_data.ratio;
+							break;
+							case "height":
+								dimensions.width = dimensions.height * holder.fluid_data.ratio;
+							break;
 						}
 					}
-
-					var drawParams = {
+					el.setAttribute("src", draw({
+						ctx: ctx,
 						dimensions: dimensions,
-						theme: flags.theme,
-						flags: flags
-					};
-
-					if (flags.textmode && flags.textmode == 'exact') {
-						flags.exactDimensions = dimensions;
-						drawParams.dimensions = flags.dimensions;
-					}
-
-					render('image', drawParams, el, el.holderData.renderSettings);
+						template: holder.theme,
+						ratio: ratio,
+						holder: holder
+					}))
+				}
+				if(holder.textmode && holder.textmode == "exact"){
+					holder.exact_dimensions = dimensions;
+					el.setAttribute("src", draw({
+						ctx: ctx,
+						dimensions: holder.dimensions,
+						template: holder.theme,
+						ratio: ratio,
+						holder: holder
+					}))
 				}
 			}
 		}
 	}
+}
 
-	/**
-	 * Checks if an element is visible
-	 *
-	 * @private
-	 * @param el DOM element
-	 * @param callback Callback function executed if the element is invisible
-	 */
-	function dimensionCheck(el, callback) {
-		var dimensions = {
-			height: el.clientHeight,
-			width: el.clientWidth
-		};
-		if (!dimensions.height && !dimensions.width) {
-			setAttr(el, {
-				'data-holder-invisible': true
-			});
-			callback.call(this, el);
-		} else {
-			el.removeAttribute('data-holder-invisible');
-			return dimensions;
+function parse_flags(flags, options) {
+	var ret = {
+		theme: extend(settings.themes.gray, {})
+	};
+	var render = false;
+	for (var fl = flags.length, j = 0; j < fl; j++) {
+		var flag = flags[j];
+		if (app.flags.dimensions.match(flag)) {
+			render = true;
+			ret.dimensions = app.flags.dimensions.output(flag);
+		} else if (app.flags.fluid.match(flag)) {
+			render = true;
+			ret.dimensions = app.flags.fluid.output(flag);
+			ret.fluid = true;
+		} else if (app.flags.textmode.match(flag)) {
+			ret.textmode = app.flags.textmode.output(flag)
+		} else if (app.flags.colors.match(flag)) {
+			ret.theme = app.flags.colors.output(flag);
+		} else if (options.themes[flag]) {
+			//If a theme is specified, it will override custom colors
+			if(options.themes.hasOwnProperty(flag)){
+				ret.theme = extend(options.themes[flag], {});
+			}
+		} else if (app.flags.font.match(flag)) {
+			ret.font = app.flags.font.output(flag);
+		} else if (app.flags.auto.match(flag)) {
+			ret.auto = true;
+		} else if (app.flags.text.match(flag)) {
+			ret.text = app.flags.text.output(flag);
 		}
 	}
+	return render ? ret : false;
+}
 
-	/**
-	 * Sets up aspect ratio metadata for fluid placeholders, in order to preserve proportions when resizing
-	 *
-	 * @private
-	 * @param el Image DOM element
-	 */
-	function setInitialDimensions(el) {
-		if (el.holderData) {
-			var dimensions = dimensionCheck(el, Holder.invisibleErrorFn(setInitialDimensions));
-			if (dimensions) {
-				var flags = el.holderData.flags;
-
-				var fluidConfig = {
-					fluidHeight: flags.dimensions.height.slice(-1) == '%',
-					fluidWidth: flags.dimensions.width.slice(-1) == '%',
-					mode: null,
-					initialDimensions: dimensions
-				};
-
-				if (fluidConfig.fluidWidth && !fluidConfig.fluidHeight) {
-					fluidConfig.mode = 'width';
-					fluidConfig.ratio = fluidConfig.initialDimensions.width / parseFloat(flags.dimensions.height);
-				} else if (!fluidConfig.fluidWidth && fluidConfig.fluidHeight) {
-					fluidConfig.mode = 'height';
-					fluidConfig.ratio = parseFloat(flags.dimensions.width) / fluidConfig.initialDimensions.height;
-				}
-
-				el.holderData.fluidConfig = fluidConfig;
-			}
-		}
+for (var flag in app.flags) {
+	if (!app.flags.hasOwnProperty(flag)) continue;
+	app.flags[flag].match = function (val) {
+		return val.match(this.regex)
 	}
+}
 
-	//todo: see if possible to convert stagingRenderer to use HTML only
-	var stagingRenderer = (function() {
-		var svg = null,
-			stagingText = null,
-			stagingTextNode = null;
-		return function(graph) {
-			var rootNode = graph.root;
-			if (App.setup.supportsSVG) {
-				var firstTimeSetup = false;
-				var tnode = function(text) {
-					return document.createTextNode(text);
-				};
-				if (svg == null) {
-					firstTimeSetup = true;
-				}
-				svg = initSVG(svg, rootNode.properties.width, rootNode.properties.height);
-				if (firstTimeSetup) {
-					stagingText = newEl('text', SVG_NS);
-					stagingTextNode = tnode(null);
-					setAttr(stagingText, {
-						x: 0
-					});
-					stagingText.appendChild(stagingTextNode);
-					svg.appendChild(stagingText);
-					document.body.appendChild(svg);
-					svg.style.visibility = 'hidden';
-					svg.style.position = 'absolute';
-					svg.style.top = '-100%';
-					svg.style.left = '-100%';
-					//todo: workaround for zero-dimension <svg> tag in Opera 12
-					//svg.setAttribute('width', 0);
-					//svg.setAttribute('height', 0);
-				}
-
-				var holderTextGroup = rootNode.children.holderTextGroup;
-				var htgProps = holderTextGroup.properties;
-				setAttr(stagingText, {
-					'y': htgProps.font.size,
-					'style': cssProps({
-						'font-weight': htgProps.font.weight,
-						'font-size': htgProps.font.size + htgProps.font.units,
-						'font-family': htgProps.font.family,
-						'dominant-baseline': 'middle'
-					})
-				});
-
-				//Get bounding box for the whole string (total width and height)
-				stagingTextNode.nodeValue = htgProps.text;
-				var stagingTextBBox = stagingText.getBBox();
-
-				//Get line count and split the string into words
-				var lineCount = Math.ceil(stagingTextBBox.width / (rootNode.properties.width * App.setup.lineWrapRatio));
-				var words = htgProps.text.split(' ');
-				var newlines = htgProps.text.match(/\\n/g);
-				lineCount += newlines == null ? 0 : newlines.length;
-
-				//Get bounding box for the string with spaces removed
-				stagingTextNode.nodeValue = htgProps.text.replace(/[ ]+/g, '');
-				var computedNoSpaceLength = stagingText.getComputedTextLength();
-
-				//Compute average space width
-				var diffLength = stagingTextBBox.width - computedNoSpaceLength;
-				var spaceWidth = Math.round(diffLength / Math.max(1, words.length - 1));
-
-				//Get widths for every word with space only if there is more than one line
-				var wordWidths = [];
-				if (lineCount > 1) {
-					stagingTextNode.nodeValue = '';
-					for (var i = 0; i < words.length; i++) {
-						if (words[i].length === 0) continue;
-						stagingTextNode.nodeValue = decodeHtmlEntity(words[i]);
-						var bbox = stagingText.getBBox();
-						wordWidths.push({
-							text: words[i],
-							width: bbox.width
-						});
-					}
-				}
-
-				return {
-					spaceWidth: spaceWidth,
-					lineCount: lineCount,
-					boundingBox: stagingTextBBox,
-					words: wordWidths
-				};
-			} else {
-				//todo: canvas fallback for measuring text on android 2.3
-				return false;
-			}
-		};
-	})();
-
-	var sgCanvasRenderer = (function() {
-		var canvas = newEl('canvas');
-		var ctx = null;
-
-		return function(sceneGraph) {
-			if (ctx == null) {
-				ctx = canvas.getContext('2d');
-			}
-			var root = sceneGraph.root;
-			canvas.width = App.dpr(root.properties.width);
-			canvas.height = App.dpr(root.properties.height);
-			ctx.textBaseline = 'middle';
-
-			ctx.fillStyle = root.children.holderBg.properties.fill;
-			ctx.fillRect(0, 0, App.dpr(root.children.holderBg.width), App.dpr(root.children.holderBg.height));
-
-			var textGroup = root.children.holderTextGroup;
-			var tgProps = textGroup.properties;
-			ctx.font = textGroup.properties.font.weight + ' ' + App.dpr(textGroup.properties.font.size) + textGroup.properties.font.units + ' ' + textGroup.properties.font.family + ', monospace';
-			ctx.fillStyle = textGroup.properties.fill;
-
-			for (var lineKey in textGroup.children) {
-				var line = textGroup.children[lineKey];
-				for (var wordKey in line.children) {
-					var word = line.children[wordKey];
-					var x = App.dpr(textGroup.x + line.x + word.x);
-					var y = App.dpr(textGroup.y + line.y + word.y + (textGroup.properties.leading / 2));
-
-					ctx.fillText(word.properties.text, x, y);
-				}
-			}
-
-			return canvas.toDataURL('image/png');
-		};
-	})();
-
-	var sgSVGRenderer = (function() {
-		//Prevent IE <9 from initializing SVG renderer
-		if (!global.XMLSerializer) return;
-		var svg = initSVG(null, 0, 0);
-		var bgEl = newEl('rect', SVG_NS);
-		svg.appendChild(bgEl);
-
-		//todo: create a reusable pool for textNodes, resize if more words present
-
-		return function(sceneGraph, renderSettings) {
-			var root = sceneGraph.root;
-
-			initSVG(svg, root.properties.width, root.properties.height);
-			var groups = svg.querySelectorAll('g');
-
-			for (var i = 0; i < groups.length; i++) {
-				groups[i].parentNode.removeChild(groups[i]);
-			}
-
-			setAttr(bgEl, {
-				'width': root.children.holderBg.width,
-				'height': root.children.holderBg.height,
-				'fill': root.children.holderBg.properties.fill
-			});
-
-			var textGroup = root.children.holderTextGroup;
-			var tgProps = textGroup.properties;
-			var textGroupEl = newEl('g', SVG_NS);
-			svg.appendChild(textGroupEl);
-
-			for (var lineKey in textGroup.children) {
-				var line = textGroup.children[lineKey];
-				for (var wordKey in line.children) {
-					var word = line.children[wordKey];
-					var x = textGroup.x + line.x + word.x;
-					var y = textGroup.y + line.y + word.y + (textGroup.properties.leading / 2);
-
-					var textEl = newEl('text', SVG_NS);
-					var textNode = document.createTextNode(null);
-
-					setAttr(textEl, {
-						'x': x,
-						'y': y,
-						'style': cssProps({
-							'fill': tgProps.fill,
-							'font-weight': tgProps.font.weight,
-							'font-family': tgProps.font.family + ', monospace',
-							'font-size': tgProps.font.size + tgProps.font.units,
-							'dominant-baseline': 'central'
-						})
-					});
-
-					textNode.nodeValue = word.properties.text;
-					textEl.appendChild(textNode);
-					textGroupEl.appendChild(textEl);
-				}
-			}
-
-			var svgString = 'data:image/svg+xml;base64,' +
-				btoa(unescape(encodeURIComponent(serializeSVG(svg, renderSettings))));
-			return svgString;
-		};
-	})();
-
-	//Helpers
-
-	/**
-	 * Generic new DOM element function
-	 *
-	 * @private
-	 * @param tag Tag to create
-	 * @param namespace Optional namespace value
-	 */
-	function newEl(tag, namespace) {
-		if (namespace == null) {
-			return document.createElement(tag);
-		} else {
-			return document.createElementNS(namespace, tag);
+app.invisible_error_fn = function(fn){
+	return function(el){
+		if(el.hasAttribute("data-holder-invisible")){
+			throw new Error("Holder: invisible placeholder")
 		}
 	}
+}
 
-	/**
-	 * Generic setAttribute function
-	 *
-	 * @private
-	 * @param el Reference to DOM element
-	 * @param attrs Object with attribute keys and values
-	 */
-	function setAttr(el, attrs) {
-		for (var a in attrs) {
-			el.setAttribute(a, attrs[a]);
-		}
-	}
+app.add_theme = function (name, theme) {
+	name != null && theme != null && (settings.themes[name] = theme);
+	return app;
+};
 
-	/**
-	 * Generic SVG element creation function
-	 *
-	 * @private
-	 * @param svg SVG context, set to null if new
-	 * @param width Document width
-	 * @param height Document height
-	 */
-	function initSVG(svg, width, height) {
-		if (svg == null) {
-			svg = newEl('svg', SVG_NS);
-			var defs = newEl('defs', SVG_NS);
-			svg.appendChild(defs);
-		}
-		//IE throws an exception if this is set and Chrome requires it to be set
-		if (svg.webkitMatchesSelector) {
-			svg.setAttribute('xmlns', SVG_NS);
+app.add_image = function (src, el) {
+	var node = selector(el);
+	if (node.length) {
+		for (var i = 0, l = node.length; i < l; i++) {
+			var img = document.createElement("img")
+			img.setAttribute("data-src", src);
+			node[i].appendChild(img);
 		}
-
-		setAttr(svg, {
-			'width': width,
-			'height': height,
-			'viewBox': '0 0 ' + width + ' ' + height,
-			'preserveAspectRatio': 'none'
-		});
-		return svg;
 	}
+	return app;
+};
 
-	/**
-	 * Generic SVG serialization function
-	 *
-	 * @private
-	 * @param svg SVG context
-	 * @param stylesheets CSS stylesheets to include
-	 */
-	function serializeSVG(svg, renderSettings) {
-		if (!global.XMLSerializer) return;
-		var serializer = new XMLSerializer();
-		var svgCSS = '';
-		var stylesheets = renderSettings.stylesheets;
-		var defs = svg.querySelector('defs');
+app.run = function (o) {
 
-		//External stylesheets: Processing Instruction method
-		if (renderSettings.svgXMLStylesheet) {
-			var xml = new DOMParser().parseFromString('<xml />', 'application/xml');
-			//Add <?xml-stylesheet ?> directives
-			for (var i = stylesheets.length - 1; i >= 0; i--) {
-				var csspi = xml.createProcessingInstruction('xml-stylesheet', 'href="' + stylesheets[i] + '" rel="stylesheet"');
-				xml.insertBefore(csspi, xml.firstChild);
-			}
+	instance_config = extend({}, system_config)
+	preempted = true;
 
-			//Add <?xml ... ?> UTF-8 directive
-			var xmlpi = xml.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8" standalone="yes"');
-			xml.insertBefore(xmlpi, xml.firstChild);
-			xml.removeChild(xml.documentElement);
-			svgCSS = serializer.serializeToString(xml);
-		}
-
-		/*
+	var options = extend(settings, o),
+		images = [],
+		imageNodes = [],
+		bgnodes = [];
 
-		//External stylesheets: <link> method
-		if (renderSettings.svgLinkStylesheet) {
+	if(options.use_canvas != null && options.use_canvas){
+		instance_config.use_canvas = true;
+		instance_config.use_svg = false;
+	}
 
-			defs.removeChild(defs.firstChild);
-			for (i = 0; i < stylesheets.length; i++) {
-				var link = document.createElementNS('http://www.w3.org/1999/xhtml', 'link');
-				link.setAttribute('href', stylesheets[i]);
-				link.setAttribute('rel', 'stylesheet');
-				link.setAttribute('type', 'text/css');
-				defs.appendChild(link);
-			}
-		}
+	if (typeof (options.images) == "string") {
+		imageNodes = selector(options.images);
+	} else if (window.NodeList && options.images instanceof window.NodeList) {
+		imageNodes = options.images;
+	} else if (window.Node && options.images instanceof window.Node) {
+		imageNodes = [options.images];
+	} else if(window.HTMLCollection && options.images instanceof window.HTMLCollection){
+		imageNodes = options.images
+	}
 
-		//External stylesheets: <style> and @import method
-		if (renderSettings.svgImportStylesheet) {
-			var style = document.createElementNS(SVG_NS, 'style');
-			var styleText = [];
+	if (typeof (options.bgnodes) == "string") {
+		bgnodes = selector(options.bgnodes);
+	} else if (window.NodeList && options.elements instanceof window.NodeList) {
+		bgnodes = options.bgnodes;
+	} else if (window.Node && options.bgnodes instanceof window.Node) {
+		bgnodes = [options.bgnodes];
+	}
+	for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]);
+
+	var holdercss = document.getElementById("holderjs-style");
+	if (!holdercss) {
+		holdercss = document.createElement("style");
+		holdercss.setAttribute("id", "holderjs-style");
+		holdercss.type = "text/css";
+		document.getElementsByTagName("head")[0].appendChild(holdercss);
+	}
 
-			for (i = 0; i < stylesheets.length; i++) {
-				styleText.push('@import url(' + stylesheets[i] + ');');
+	if (!options.nocss) {
+		if (holdercss.styleSheet) {
+			holdercss.styleSheet.cssText += options.stylesheet;
+		} else {
+			if(options.stylesheet.length){
+				holdercss.appendChild(document.createTextNode(options.stylesheet));
 			}
-
-			var styleTextNode = document.createTextNode(styleText.join('\n'));
-			style.appendChild(styleTextNode);
-			defs.appendChild(style);
 		}
-
-		*/
-
-		var svgText = serializer.serializeToString(svg);
-		svgText = svgText.replace(/\&amp;(\#[0-9]{2,}\;)/g, '&$1');
-		return svgCSS + svgText;
 	}
 
-	/**
-	 * Shallow object clone and merge
-	 *
-	 * @param a Object A
-	 * @param b Object B
-	 * @returns {Object} New object with all of A's properties, and all of B's properties, overwriting A's properties
-	 */
-	function extend(a, b) {
-		var c = {};
-		for (var x in a) {
-			if (a.hasOwnProperty(x)) {
-				c[x] = a[x];
+	var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)");
+	for (var l = bgnodes.length, i = 0; i < l; i++) {
+		var src = window.getComputedStyle(bgnodes[i], null)
+			.getPropertyValue("background-image");
+		var flags = src.match(cssregex);
+		var bgsrc = bgnodes[i].getAttribute("data-background-src");
+		if (flags) {
+			var holder = parse_flags(flags[1].split("/"), options);
+			if (holder) {
+				render("background", bgnodes[i], holder, src);
 			}
-		}
-		if (b != null) {
-			for (var y in b) {
-				if (b.hasOwnProperty(y)) {
-					c[y] = b[y];
-				}
+		} else if (bgsrc != null) {
+			var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1)
+				.split("/"), options);
+			if (holder) {
+				render("background", bgnodes[i], holder, src);
 			}
 		}
-		return c;
 	}
-
-	/**
-	 * Takes a k/v list of CSS properties and returns a rule
-	 *
-	 * @param props CSS properties object
-	 */
-	function cssProps(props) {
-		var ret = [];
-		for (var p in props) {
-			if (props.hasOwnProperty(p)) {
-				ret.push(p + ':' + props[p]);
+	for (l = images.length, i = 0; i < l; i++) {
+		var attr_data_src, attr_src;
+		attr_src = attr_data_src = src = null;
+		try {
+			attr_src = images[i].getAttribute("src");
+			attr_datasrc = images[i].getAttribute("data-src");
+		} catch (e) {}
+		if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) {
+			src = attr_src;
+		} else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) {
+			src = attr_datasrc;
+		}
+		if (src) {
+			var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1).split("/"), options);
+			if (holder) {
+				if (holder.fluid) {
+					render("fluid", images[i], holder, src)
+				} else {
+					render("image", images[i], holder, src);
+				}
 			}
 		}
-		return ret.join(';');
 	}
+	return app;
+};
 
-	/**
-	 * Prevents a function from being called too often, waits until a timer elapses to call it again
-	 *
-	 * @param fn Function to call
-	 */
-	function debounce(fn) {
-		if (!App.vars.debounceTimer) fn.call(this);
-		if (App.vars.debounceTimer) clearTimeout(App.vars.debounceTimer);
-		App.vars.debounceTimer = setTimeout(function() {
-			App.vars.debounceTimer = null;
-			fn.call(this);
-		}, App.setup.debounce);
+contentLoaded(win, function () {
+	if (window.addEventListener) {
+		window.addEventListener("resize", resizable_update, false);
+		window.addEventListener("orientationchange", resizable_update, false);
+	} else {
+		window.attachEvent("onresize", resizable_update)
 	}
+	preempted || app.run({});
 
-	/**
-	 * Holder-specific resize/orientation change callback, debounced to prevent excessive execution
-	 */
-	function resizeEvent() {
-		debounce(function() {
-			updateResizableElements(null);
-		});
+	if (typeof window.Turbolinks === "object") {
+		document.addEventListener("page:change", function() { app.run({}) })
 	}
+});
+if (typeof define === "function" && define.amd) {
+	define([], function () {
+		return app;
+	});
+}
 
-	/**
-	 * Converts a value into an array of DOM nodes
-	 *
-	 * @param val A string, a NodeList, a Node, or an HTMLCollection
-	 */
-	function getNodeArray(val) {
-		var retval = null;
-		if (typeof(val) == 'string') {
-			retval = document.querySelectorAll(val);
-		} else if (global.NodeList && val instanceof global.NodeList) {
-			retval = val;
-		} else if (global.Node && val instanceof global.Node) {
-			retval = [val];
-		} else if (global.HTMLCollection && val instanceof global.HTMLCollection) {
-			retval = val;
-		} else if (val === null) {
-			retval = [];
-		}
-		return retval;
-	}
+//github.com/davidchambers/Base64.js
+(function(){function t(t){this.message=t}var e="undefined"!=typeof exports?exports:this,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";t.prototype=Error(),t.prototype.name="InvalidCharacterError",e.btoa||(e.btoa=function(e){for(var o,n,a=0,i=r,c="";e.charAt(0|a)||(i="=",a%1);c+=i.charAt(63&o>>8-8*(a%1))){if(n=e.charCodeAt(a+=.75),n>255)throw new t("'btoa' failed");o=o<<8|n}return c}),e.atob||(e.atob=function(e){if(e=e.replace(/=+$/,""),1==e.length%4)throw new t("'atob' failed");for(var o,n,a=0,i=0,c="";n=e.charAt(i++);~n&&(o=a%4?64*o+n:n,a++%4)?c+=String.fromCharCode(255&o>>(6&-2*a)):0)n=r.indexOf(n);return c})})();
 
-	/**
-	 * Checks if an image exists
-	 *
-	 * @param params Configuration object, must specify at least a src key
-	 * @param callback Callback to call once image status has been found
-	 */
-	function imageExists(src, callback) {
-		var image = new Image();
-		image.onerror = function() {
-			callback.call(this, false);
-		};
-		image.onload = function() {
-			callback.call(this, true);
-		};
-		image.src = src;
-	}
+//getElementsByClassName polyfill
+document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s})
 
-	/**
-	 * Encodes HTML entities in a string
-	 *
-	 * @param str Input string
-	 */
-	function encodeHtmlEntity(str) {
-		var buf = [];
-		var charCode = 0;
-		for (var i = str.length - 1; i >= 0; i--) {
-			charCode = str.charCodeAt(i);
-			if (charCode > 128) {
-				buf.unshift(['&#', charCode, ';'].join(''));
-			} else {
-				buf.unshift(str[i]);
-			}
-		}
-		return buf.join('');
-	}
-
-	/**
-	 * Decodes HTML entities in a stirng
-	 *
-	 * @param str Input string
-	 */
-	function decodeHtmlEntity(str) {
-		return str.replace(/&#(\d+);/g, function(match, dec) {
-			return String.fromCharCode(dec);
-		});
-	}
+//getComputedStyle polyfill
+window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this})
 
-	// Scene graph
+//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications
+function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}}
 
-	var SceneGraph = function(sceneProperties) {
-		var nodeCount = 1;
+//https://gist.github.com/991057 by Jed Schmidt with modifications
+function selector(a,b){var a=a.match(/^(\W)?(.*)/),b=b||document,c=b["getElement"+(a[1]?"#"==a[1]?"ById":"sByClassName":"sByTagName")],d=c.call(b,a[2]),e=[];return null!==d&&(e=d.length||0===d.length?d:[d]),e}
 
-		//todo: move merge to helpers section
-		function merge(parent, child) {
-			for (var prop in child) {
-				parent[prop] = child[prop];
-			}
-			return parent;
+//shallow object property extend
+function extend(a,b){
+	var c={};
+	for(var i in a){
+		if(a.hasOwnProperty(i)){
+			c[i]=a[i];
 		}
-
-		var SceneNode = augment.defclass({
-			constructor: function(name) {
-				nodeCount++;
-				this.parent = null;
-				this.children = {};
-				this.id = nodeCount;
-				this.name = 'n' + nodeCount;
-				if (name != null) {
-					this.name = name;
-				}
-				this.x = 0;
-				this.y = 0;
-				this.z = 0;
-				this.width = 0;
-				this.height = 0;
-			},
-			resize: function(width, height) {
-				if (width != null) {
-					this.width = width;
-				}
-				if (height != null) {
-					this.height = height;
-				}
-			},
-			moveTo: function(x, y, z) {
-				this.x = x != null ? x : this.x;
-				this.y = y != null ? y : this.y;
-				this.z = z != null ? z : this.z;
-			},
-			add: function(child) {
-					var name = child.name;
-					if (this.children[name] == null) {
-						this.children[name] = child;
-						child.parent = this;
-					} else {
-						throw 'SceneGraph: child with that name already exists: ' + name;
-					}
-				}
-				/*,	// probably unnecessary in Holder
-				remove: function(name){
-					if(this.children[name] == null){
-						throw 'SceneGraph: child with that name doesn\'t exist: '+name;
-					}
-					else{
-						child.parent = null;
-						delete this.children[name];
-					}
-				},
-				removeAll: function(){
-					for(var child in this.children){
-						this.remove(child);
-					}
-				}*/
-		});
-
-		var RootNode = augment(SceneNode, function(uber) {
-			this.constructor = function() {
-				uber.constructor.call(this, 'root');
-				this.properties = sceneProperties;
-			};
-		});
-
-		var Shape = augment(SceneNode, function(uber) {
-			function constructor(name, props) {
-				uber.constructor.call(this, name);
-				this.properties = {
-					fill: '#000'
-				};
-				if (props != null) {
-					merge(this.properties, props);
-				} else if (name != null && typeof name !== 'string') {
-					throw 'SceneGraph: invalid node name';
-				}
-			}
-
-			this.Group = augment.extend(this, {
-				constructor: constructor,
-				type: 'group'
-			});
-
-			this.Rect = augment.extend(this, {
-				constructor: constructor,
-				type: 'rect'
-			});
-
-			this.Text = augment.extend(this, {
-				constructor: function(text) {
-					constructor.call(this);
-					this.properties.text = text;
-				},
-				type: 'text'
-			});
-		});
-
-		var root = new RootNode();
-
-		this.Shape = Shape;
-		this.root = root;
-
-		return this;
-	};
-
-	//Set up flags
-
-	for (var flag in App.flags) {
-		if (!App.flags.hasOwnProperty(flag)) continue;
-		App.flags[flag].match = function(val) {
-			return val.match(this.regex);
-		};
 	}
-
-	//Properties set once on setup
-
-	App.setup = {
-		renderer: 'html',
-		debounce: 100,
-		ratio: 1,
-		supportsCanvas: false,
-		supportsSVG: false,
-		lineWrapRatio: 0.9,
-		renderers: ['html', 'canvas', 'svg']
-	};
-
-	App.dpr = function(val) {
-		return val * App.setup.ratio;
-	};
-
-	//Properties modified during runtime
-
-	App.vars = {
-		preempted: false,
-		resizableImages: [],
-		debounceTimer: null,
-		cache: {}
-	};
-
-	//Pre-flight
-
-	(function() {
-		var devicePixelRatio = 1,
-			backingStoreRatio = 1;
-
-		var canvas = newEl('canvas');
-		var ctx = null;
-
-		if (canvas.getContext) {
-			if (canvas.toDataURL('image/png').indexOf('data:image/png') != -1) {
-				App.setup.renderer = 'canvas';
-				ctx = canvas.getContext('2d');
-				App.setup.supportsCanvas = true;
-			}
-		}
-
-		if (App.setup.supportsCanvas) {
-			devicePixelRatio = global.devicePixelRatio || 1;
-			backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
+	for(var i in b){
+		if(b.hasOwnProperty(i)){
+			c[i]=b[i];
 		}
-
-		App.setup.ratio = devicePixelRatio / backingStoreRatio;
-
-		if (!!document.createElementNS && !!document.createElementNS(SVG_NS, 'svg').createSVGRect) {
-			App.setup.renderer = 'svg';
-			App.setup.supportsSVG = true;
-		}
-	})();
-
-	//Exposing to environment and setting up listeners
-	register(Holder, 'Holder', global);
-
-	if (global.onDomReady) {
-		global.onDomReady(function() {
-			if (!App.vars.preempted) {
-				Holder.run();
-			}
-			if (global.addEventListener) {
-				global.addEventListener('resize', resizeEvent, false);
-				global.addEventListener('orientationchange', resizeEvent, false);
-			} else {
-				global.attachEvent('onresize', resizeEvent);
-			}
-
-			if (typeof global.Turbolinks == 'object') {
-				global.document.addEventListener('page:change', function() {
-					Holder.run();
-				});
-			}
-		});
 	}
-
-})(function(fn, name, global) {
-	var isAMD = (typeof define === 'function' && define.amd);
-	var isNode = (typeof exports === 'object');
-	var isWeb = !isNode;
-
-	if (isAMD) {
-		define(fn);
-	} else {
-		//todo: npm/browserify registration
-		global[name] = fn;
+	return c
+}
+
+//hasOwnProperty polyfill
+if (!Object.prototype.hasOwnProperty)
+    /*jshint -W001, -W103 */
+    Object.prototype.hasOwnProperty = function(prop) {
+		var proto = this.__proto__ || this.constructor.prototype;
+		return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
 	}
-}, this);
\ No newline at end of file
+    /*jshint +W001, +W103 */
+
+})(Holder, window);
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/jquery.min.js b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/jquery.min.js
index e6a051d0d1d32752ae08d9cf30fe5952da22a9b0..d1608e37ffa979b8689bfb868ad8b061b191f6f6 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/jquery.min.js
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer/Template/js/jquery.min.js
@@ -1,4 +1,4 @@
-/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
-return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)
-}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
+/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
+if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
+},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node.php
index 223b50c3149bdaf86c12fdf882006731b281ba0e..cc9e8eac0cac8d2b8cf0917c363579a184b5769f 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Directory.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Directory.php
index b424b124463e9a5ce24c8bbc42e1c07af16c2d8f..f4c37e079fb826252d7803d1752559eebd9d7958 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Directory.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Directory.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
@@ -171,11 +206,7 @@ public function addDirectory($name)
     public function addFile($name, array $coverageData, array $testData, $cacheTokens)
     {
         $file = new PHP_CodeCoverage_Report_Node_File(
-            $name,
-            $this,
-            $coverageData,
-            $testData,
-            $cacheTokens
+            $name, $this, $coverageData, $testData, $cacheTokens
         );
 
         $this->children[] = $file;
@@ -229,8 +260,7 @@ public function getClasses()
 
             foreach ($this->children as $child) {
                 $this->classes = array_merge(
-                    $this->classes,
-                    $child->getClasses()
+                    $this->classes, $child->getClasses()
                 );
             }
         }
@@ -250,8 +280,7 @@ public function getTraits()
 
             foreach ($this->children as $child) {
                 $this->traits = array_merge(
-                    $this->traits,
-                    $child->getTraits()
+                    $this->traits, $child->getTraits()
                 );
             }
         }
@@ -271,8 +300,7 @@ public function getFunctions()
 
             foreach ($this->children as $child) {
                 $this->functions = array_merge(
-                    $this->functions,
-                    $child->getFunctions()
+                    $this->functions, $child->getFunctions()
                 );
             }
         }
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/File.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/File.php
index 6f0dcb287527509d12ca3742595a442162fb453a..45ea9fdf313182ff4e75d61c4aab46c87e10eee0 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/File.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/File.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
@@ -115,8 +150,7 @@ public function __construct($name, PHP_CodeCoverage_Report_Node $parent, array $
     {
         if (!is_bool($cacheTokens)) {
             throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory(
-                1,
-                'boolean'
+                1, 'boolean'
             );
         }
 
@@ -374,14 +408,20 @@ protected function calculateStatistics()
                 // Start line of a class.
                 if (isset($this->startLines[$lineNumber]['className'])) {
                     $currentClass = &$this->startLines[$lineNumber];
-                } // Start line of a trait.
-                elseif (isset($this->startLines[$lineNumber]['traitName'])) {
+                }
+
+                // Start line of a trait.
+                else if (isset($this->startLines[$lineNumber]['traitName'])) {
                     $currentTrait = &$this->startLines[$lineNumber];
-                } // Start line of a method.
-                elseif (isset($this->startLines[$lineNumber]['methodName'])) {
+                }
+
+                // Start line of a method.
+                else if (isset($this->startLines[$lineNumber]['methodName'])) {
                     $currentMethod = &$this->startLines[$lineNumber];
-                } // Start line of a function.
-                elseif (isset($this->startLines[$lineNumber]['functionName'])) {
+                }
+
+                // Start line of a function.
+                else if (isset($this->startLines[$lineNumber]['functionName'])) {
                     $currentFunction = &$this->startLines[$lineNumber];
                 }
             }
@@ -431,14 +471,20 @@ protected function calculateStatistics()
                 // End line of a class.
                 if (isset($this->endLines[$lineNumber]['className'])) {
                     unset($currentClass);
-                } // End line of a trait.
-                elseif (isset($this->endLines[$lineNumber]['traitName'])) {
+                }
+
+                // End line of a trait.
+                else if (isset($this->endLines[$lineNumber]['traitName'])) {
                     unset($currentTrait);
-                } // End line of a method.
-                elseif (isset($this->endLines[$lineNumber]['methodName'])) {
+                }
+
+                // End line of a method.
+                else if (isset($this->endLines[$lineNumber]['methodName'])) {
                     unset($currentMethod);
-                } // End line of a function.
-                elseif (isset($this->endLines[$lineNumber]['functionName'])) {
+                }
+
+                // End line of a function.
+                else if (isset($this->endLines[$lineNumber]['functionName'])) {
                     unset($currentFunction);
                 }
             }
@@ -454,8 +500,7 @@ protected function calculateStatistics()
                 }
 
                 $method['crap'] = $this->crap(
-                    $method['ccn'],
-                    $method['coverage']
+                    $method['ccn'], $method['coverage']
                 );
 
                 $trait['ccn'] += $method['ccn'];
@@ -473,8 +518,7 @@ protected function calculateStatistics()
             }
 
             $trait['crap'] = $this->crap(
-                $trait['ccn'],
-                $trait['coverage']
+                $trait['ccn'], $trait['coverage']
             );
         }
 
@@ -488,8 +532,7 @@ protected function calculateStatistics()
                 }
 
                 $method['crap'] = $this->crap(
-                    $method['ccn'],
-                    $method['coverage']
+                    $method['ccn'], $method['coverage']
                 );
 
                 $class['ccn'] += $method['ccn'];
@@ -507,8 +550,7 @@ protected function calculateStatistics()
             }
 
             $class['crap'] = $this->crap(
-                $class['ccn'],
-                $class['coverage']
+                $class['ccn'], $class['coverage']
             );
         }
     }
@@ -655,8 +697,7 @@ protected function crap($ccn, $coverage)
         }
 
         return sprintf(
-            '%01.2F',
-            pow($ccn, 2) * pow(1 - $coverage/100, 3) + $ccn
+            '%01.2F', pow($ccn, 2) * pow(1 - $coverage/100, 3) + $ccn
         );
     }
 }
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Iterator.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Iterator.php
index e9cdbfd4954928dd6b442c55d826ba1de711e196..bbfbede3eb2b8968fef07cfd7aec232b86f741b9 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Iterator.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Node/Iterator.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/PHP.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/PHP.php
index dfcc43dae7a7457ed580fd9696ccf36fd2420c2b..50c534755596481923f7e3c1e56b7ba195369999 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/PHP.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/PHP.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -15,7 +50,7 @@
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     uyga <iamuyga@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Text.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Text.php
index 1f747098ac2f02b60d7c17e8f582980b7b28579a..cec9db96b8a35afc9af53378cc37e39052b6d53f 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Text.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Text.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -16,7 +51,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
@@ -157,9 +192,8 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false)
                 $classMethods           = 0;
 
                 foreach ($class['methods'] as $method) {
-                    if ($method['executableLines'] == 0) {
+                    if ($method['executableLines'] == 0)
                         continue;
-                    }
 
                     $classMethods++;
                     $classStatements        += $method['executableLines'];
@@ -197,6 +231,7 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false)
         foreach ($classCoverage as $fullQualifiedPath => $classInfo) {
             if ($classInfo['statementsCovered'] != 0 ||
                 $this->showUncoveredFiles) {
+
                 if ($showColors) {
                     $methodColor = $this->getCoverageColor($classInfo['methodsCovered'], $classInfo['methodCount']);
                     $linesColor  = $this->getCoverageColor($classInfo['statementsCovered'], $classInfo['statementCount']);
@@ -216,8 +251,7 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false)
     protected function getCoverageColor($numberOfCoveredElements, $totalNumberOfElements)
     {
         $coverage = PHP_CodeCoverage_Util::percent(
-            $numberOfCoveredElements,
-            $totalNumberOfElements
+            $numberOfCoveredElements, $totalNumberOfElements
         );
 
         if ($coverage > $this->highLowerBound) {
@@ -234,10 +268,7 @@ protected function printCoverageCounts($numberOfCoveredElements, $totalNumberOfE
         $format = '%' . $presicion . 's';
 
         return PHP_CodeCoverage_Util::percent(
-            $numberOfCoveredElements,
-            $totalNumberOfElements,
-            true,
-            true
+            $numberOfCoveredElements, $totalNumberOfElements, true, true
         ) .
         ' (' . sprintf($format, $numberOfCoveredElements) . '/' .
         sprintf($format, $totalNumberOfElements) . ')';
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML.php
index 52380e6fcb94626427f41a43c171114e31eef0bc..7f5a773acb78a3d23afb25c8f980faf3a2816f3e 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Directory.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Directory.php
index d73d4ce1578c2efb975ed40176cabb906d3ff305..50aa60759e394b5a8bec590c23d295a650d6ab0a 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Directory.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Directory.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File.php
index 4ea6a45d4a695e45395e0aeebd6ebbec76521828..2548d465d97868ee1d3b97e81ee47d8d7b0c53f3 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -42,8 +77,7 @@ public function getTotals()
         if (!$totalsContainer) {
             $totalsContainer = $this->contextNode->appendChild(
                 $this->dom->createElementNS(
-                    'http://schema.phpunit.de/coverage/1.0',
-                    'totals'
+                    'http://schema.phpunit.de/coverage/1.0', 'totals'
                 )
             );
         }
@@ -54,23 +88,20 @@ public function getTotals()
     public function getLineCoverage($line)
     {
         $coverage = $this->contextNode->getElementsByTagNameNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'coverage'
+            'http://schema.phpunit.de/coverage/1.0', 'coverage'
         )->item(0);
 
         if (!$coverage) {
             $coverage = $this->contextNode->appendChild(
                 $this->dom->createElementNS(
-                    'http://schema.phpunit.de/coverage/1.0',
-                    'coverage'
+                    'http://schema.phpunit.de/coverage/1.0', 'coverage'
                 )
             );
         }
 
         $lineNode = $coverage->appendChild(
             $this->dom->createElementNS(
-                'http://schema.phpunit.de/coverage/1.0',
-                'line'
+                'http://schema.phpunit.de/coverage/1.0', 'line'
             )
         );
 
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Coverage.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Coverage.php
index 4ce8122157682034bd80b61cf9a2a40e204d450e..75dc0827886b22975e9bdcee69ccb9b60076020c 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Coverage.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Coverage.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Method.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Method.php
index 7d234fa0bc292614486a8bb4c0f624819a086b08..416d3d531155eba33700a55d2cab39aa844cebc8 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Method.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Method.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Report.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Report.php
index 74c9ccf8771c5f9f0aa2e2bfa4f048955cde65e3..5892e4a3e795c1b602848db08ea6c2fa139e4980 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Report.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Report.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -25,8 +60,7 @@ public function __construct($name)
         $this->dom->loadXML('<?xml version="1.0" ?><phpunit xmlns="http://schema.phpunit.de/coverage/1.0"><file /></phpunit>');
 
         $this->contextNode = $this->dom->getElementsByTagNameNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'file'
+            'http://schema.phpunit.de/coverage/1.0', 'file'
         )->item(0);
 
         $this->setName($name);
@@ -46,8 +80,7 @@ public function getFunctionObject($name)
     {
         $node = $this->contextNode->appendChild(
             $this->dom->createElementNS(
-                'http://schema.phpunit.de/coverage/1.0',
-                'function'
+                'http://schema.phpunit.de/coverage/1.0', 'function'
             )
         );
 
@@ -68,8 +101,7 @@ private function getUnitObject($tagName, $name)
     {
         $node = $this->contextNode->appendChild(
             $this->dom->createElementNS(
-                'http://schema.phpunit.de/coverage/1.0',
-                $tagName
+                'http://schema.phpunit.de/coverage/1.0', $tagName
             )
         );
 
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Unit.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Unit.php
index 2848ef53fcf4b017defebeb0474309c3149c3bce..6bf7c233eebdd809e4d8e002028811b0953ebb66 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Unit.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/File/Unit.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -51,15 +86,13 @@ public function setCrap($crap)
     public function setPackage($full, $package, $sub, $category)
     {
         $node = $this->contextNode->getElementsByTagNameNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'package'
+            'http://schema.phpunit.de/coverage/1.0', 'package'
         )->item(0);
 
         if (!$node) {
             $node = $this->contextNode->appendChild(
                 $this->contextNode->ownerDocument->createElementNS(
-                    'http://schema.phpunit.de/coverage/1.0',
-                    'package'
+                    'http://schema.phpunit.de/coverage/1.0', 'package'
                 )
             );
         }
@@ -73,15 +106,13 @@ public function setPackage($full, $package, $sub, $category)
     public function setNamespace($namespace)
     {
         $node = $this->contextNode->getElementsByTagNameNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'namespace'
+            'http://schema.phpunit.de/coverage/1.0', 'namespace'
         )->item(0);
 
         if (!$node) {
             $node = $this->contextNode->appendChild(
                 $this->contextNode->ownerDocument->createElementNS(
-                    'http://schema.phpunit.de/coverage/1.0',
-                    'namespace'
+                    'http://schema.phpunit.de/coverage/1.0', 'namespace'
                 )
             );
         }
@@ -93,8 +124,7 @@ public function addMethod($name)
     {
         $node = $this->contextNode->appendChild(
             $this->contextNode->ownerDocument->createElementNS(
-                'http://schema.phpunit.de/coverage/1.0',
-                'method'
+                'http://schema.phpunit.de/coverage/1.0', 'method'
             )
         );
 
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Node.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Node.php
index 1e8daa589f33920deea5d21da031a2c667842980..aaecb0be60b3c8ab9312a106871fc00caa8926cb 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Node.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Node.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -57,8 +92,7 @@ public function getTotals()
         if (!$totalsContainer) {
             $totalsContainer = $this->getContextNode()->appendChild(
                 $this->dom->createElementNS(
-                    'http://schema.phpunit.de/coverage/1.0',
-                    'totals'
+                    'http://schema.phpunit.de/coverage/1.0', 'totals'
                 )
             );
         }
@@ -69,8 +103,7 @@ public function getTotals()
     public function addDirectory($name)
     {
         $dirNode = $this->getDom()->createElementNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'directory'
+            'http://schema.phpunit.de/coverage/1.0', 'directory'
         );
 
         $dirNode->setAttribute('name', $name);
@@ -82,8 +115,7 @@ public function addDirectory($name)
     public function addFile($name, $href)
     {
         $fileNode = $this->getDom()->createElementNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'file'
+            'http://schema.phpunit.de/coverage/1.0', 'file'
         );
 
         $fileNode->setAttribute('name', $name);
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Project.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Project.php
index e7ae225145231f5eb5a20e3775a25bf8fc2b8346..fd25a964797fc2a71209791c3f527a2d71fa4f0e 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Project.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Project.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -32,8 +67,7 @@ private function init()
 
         $this->setContextNode(
             $dom->getElementsByTagNameNS(
-                'http://schema.phpunit.de/coverage/1.0',
-                'project'
+                'http://schema.phpunit.de/coverage/1.0', 'project'
             )->item(0)
         );
     }
@@ -46,15 +80,13 @@ private function setProjectName($name)
     public function getTests()
     {
         $testsNode = $this->getContextNode()->getElementsByTagNameNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'tests'
+            'http://schema.phpunit.de/coverage/1.0', 'tests'
         )->item(0);
 
         if (!$testsNode) {
             $testsNode = $this->getContextNode()->appendChild(
                 $this->getDom()->createElementNS(
-                    'http://schema.phpunit.de/coverage/1.0',
-                    'tests'
+                    'http://schema.phpunit.de/coverage/1.0', 'tests'
                 )
             );
         }
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Tests.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Tests.php
index c689bc1f53018d0a8e42d410d484dcb715e32162..85bcd1eb2bfe4d2f2d4b0d08df22cc414c0cc961 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Tests.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Tests.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -39,8 +74,7 @@ public function addTest($test, $result)
     {
         $node = $this->contextNode->appendChild(
             $this->contextNode->ownerDocument->createElementNS(
-                'http://schema.phpunit.de/coverage/1.0',
-                'test'
+                'http://schema.phpunit.de/coverage/1.0', 'test'
             )
         );
         $node->setAttribute('name', $test);
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Totals.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Totals.php
index fdc84ca4259d635dd7d5ab8f4c4528683ba42e60..8e8bb8923ab2c2a907e45d6450d44d2fad0d3a37 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Totals.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/XML/Totals.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Arne Blankerts <arne@blankerts.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @category   PHP
  * @package    CodeCoverage
  * @author     Arne Blankerts <arne@blankerts.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 2.0.0
@@ -55,29 +90,23 @@ public function __construct(DOMElement $container)
         $dom             = $container->ownerDocument;
 
         $this->linesNode = $dom->createElementNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'lines'
-        )
+            'http://schema.phpunit.de/coverage/1.0', 'lines')
         ;
 
         $this->methodsNode = $dom->createElementNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'methods'
+            'http://schema.phpunit.de/coverage/1.0', 'methods'
         );
 
         $this->functionsNode = $dom->createElementNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'functions'
+            'http://schema.phpunit.de/coverage/1.0', 'functions'
         );
 
         $this->classesNode = $dom->createElementNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'classes'
+            'http://schema.phpunit.de/coverage/1.0', 'classes'
         );
 
         $this->traitsNode = $dom->createElementNS(
-            'http://schema.phpunit.de/coverage/1.0',
-            'traits'
+            'http://schema.phpunit.de/coverage/1.0', 'traits'
         );
 
         $container->appendChild($this->linesNode);
@@ -100,8 +129,7 @@ public function setNumLines($loc, $cloc, $ncloc, $executable, $executed)
         $this->linesNode->setAttribute('executable', $executable);
         $this->linesNode->setAttribute('executed', $executed);
         $this->linesNode->setAttribute(
-            'percent',
-            PHP_CodeCoverage_Util::percent($executed, $executable, true)
+            'percent', PHP_CodeCoverage_Util::percent($executed,$executable, true)
         );
     }
 
@@ -110,8 +138,7 @@ public function setNumClasses($count, $tested)
         $this->classesNode->setAttribute('count', $count);
         $this->classesNode->setAttribute('tested', $tested);
         $this->classesNode->setAttribute(
-            'percent',
-            PHP_CodeCoverage_Util::percent($tested, $count, true)
+            'percent', PHP_CodeCoverage_Util::percent($tested,$count, true)
         );
     }
 
@@ -120,8 +147,7 @@ public function setNumTraits($count, $tested)
         $this->traitsNode->setAttribute('count', $count);
         $this->traitsNode->setAttribute('tested', $tested);
         $this->traitsNode->setAttribute(
-            'percent',
-            PHP_CodeCoverage_Util::percent($tested, $count, true)
+            'percent', PHP_CodeCoverage_Util::percent($tested,$count, true)
         );
     }
 
@@ -130,8 +156,7 @@ public function setNumMethods($count, $tested)
         $this->methodsNode->setAttribute('count', $count);
         $this->methodsNode->setAttribute('tested', $tested);
         $this->methodsNode->setAttribute(
-            'percent',
-            PHP_CodeCoverage_Util::percent($tested, $count, true)
+            'percent', PHP_CodeCoverage_Util::percent($tested,$count, true)
         );
     }
 
@@ -140,8 +165,7 @@ public function setNumFunctions($count, $tested)
         $this->functionsNode->setAttribute('count', $count);
         $this->functionsNode->setAttribute('tested', $tested);
         $this->functionsNode->setAttribute(
-            'percent',
-            PHP_CodeCoverage_Util::percent($tested, $count, true)
+            'percent', PHP_CodeCoverage_Util::percent($tested,$count, true)
         );
     }
 }
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util.php
index 2d5a8faa0b82cd0eb66c6a5ff2e03ca740aa8091..f179042792856c9267ff4e64ca537d1263fd6bdc 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util/InvalidArgumentHelper.php b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util/InvalidArgumentHelper.php
index 5fba9ca133bf52e90ace414760161deb1c7108ab..6637a978d0d7f6730e611ecbe3601d6752466d5d 100644
--- a/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util/InvalidArgumentHelper.php
+++ b/core/vendor/phpunit/php-code-coverage/src/CodeCoverage/Util/InvalidArgumentHelper.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.2.0
  */
 
 /**
@@ -15,7 +50,7 @@
  * @category   PHP
  * @package    CodeCoverage
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.2.0
diff --git a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/FilterTest.php b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/FilterTest.php
index 894cb187c170153f5357399aea6aa819891393e5..155f68941ec55df1d65828012b79058f0e7c1ed8 100644
--- a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/FilterTest.php
+++ b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/FilterTest.php
@@ -1,11 +1,47 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 if (!defined('TEST_FILES_PATH')) {
@@ -23,7 +59,7 @@
  * @package    CodeCoverage
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/CloverTest.php b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/CloverTest.php
index a850bb582505d4804cd5fdef29c9757a57b0fb93..b0933cac1ca7083d543584fd204fdf92f52ed30f 100644
--- a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/CloverTest.php
+++ b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/CloverTest.php
@@ -1,11 +1,47 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 if (!defined('TEST_FILES_PATH')) {
@@ -25,7 +61,7 @@
  * @package    CodeCoverage
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/FactoryTest.php b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/FactoryTest.php
index b08b7a8df988501fa43cdf1da07299870703bb5e..b0f4388561dc938aef08ae73f703c596791ea6a4 100644
--- a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/FactoryTest.php
+++ b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/Report/FactoryTest.php
@@ -1,11 +1,47 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.1.0
  */
 
 if (!defined('TEST_FILES_PATH')) {
@@ -25,7 +61,7 @@
  * @package    CodeCoverage
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.1.0
diff --git a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/UtilTest.php b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/UtilTest.php
index 82ab7701949e41cb00f816b2440970f166ca443c..e3d8f9fc3a45475205a734c86c3ea3413873ea9e 100644
--- a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/UtilTest.php
+++ b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverage/UtilTest.php
@@ -1,11 +1,47 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -15,7 +51,7 @@
  * @package    CodeCoverage
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverageTest.php b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverageTest.php
index b5f012e4b1077697c687be6b7c030a9592122314..e167b1a8feb7b1cb03d771112e3bc7c2663687f4 100644
--- a/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverageTest.php
+++ b/core/vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverageTest.php
@@ -1,11 +1,47 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 if (!defined('TEST_FILES_PATH')) {
@@ -27,7 +63,7 @@
  * @package    CodeCoverage
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-code-coverage/tests/TestCase.php b/core/vendor/phpunit/php-code-coverage/tests/TestCase.php
index 2bfdb968cdebf0f6beadfccc431571af06e90700..73ce71b99da48fd4abc7ba83b1faf358210c8ded 100644
--- a/core/vendor/phpunit/php-code-coverage/tests/TestCase.php
+++ b/core/vendor/phpunit/php-code-coverage/tests/TestCase.php
@@ -1,11 +1,47 @@
 <?php
-/*
- * This file is part of the PHP_CodeCoverage package.
+/**
+ * PHP_CodeCoverage
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @category   PHP
+ * @package    CodeCoverage
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/php-code-coverage
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -15,7 +51,7 @@
  * @package    CodeCoverage
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-code-coverage
  * @since      Class available since Release 1.0.0
diff --git a/core/vendor/phpunit/php-timer/ChangeLog.markdown b/core/vendor/phpunit/php-timer/ChangeLog.markdown
new file mode 100644
index 0000000000000000000000000000000000000000..392892f6ed60352334323906a395860062345661
--- /dev/null
+++ b/core/vendor/phpunit/php-timer/ChangeLog.markdown
@@ -0,0 +1,24 @@
+PHP_Timer 1.0
+=============
+
+This is the list of changes for the PHP_Timer 1.0 release series.
+
+PHP_Timer 1.0.3
+---------------
+
+* No changes.
+
+PHP_Timer 1.0.2
+---------------
+
+* `$_SERVER['REQUEST_TIME_FLOAT']` is used when available.
+
+PHP_Timer 1.0.1
+---------------
+
+* No changes.
+
+PHP_Timer 1.0.0
+---------------
+
+* Initial release.
diff --git a/core/vendor/phpunit/php-timer/LICENSE b/core/vendor/phpunit/php-timer/LICENSE
index 581812af37372e8f7f96205d7849df3e6088c07b..b51fc64c47e5f3a35af84bc52107e33d383f3804 100644
--- a/core/vendor/phpunit/php-timer/LICENSE
+++ b/core/vendor/phpunit/php-timer/LICENSE
@@ -1,6 +1,6 @@
 PHP_Timer
 
-Copyright (c) 2010-2013, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2010-2012, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/phpunit/php-timer/PHP/Timer.php b/core/vendor/phpunit/php-timer/PHP/Timer.php
index 0056ea8310889299df492bfb66a63be458b492c8..0f2cc2b5cbbd70dd3839952cbbdd1c34b0155767 100644
--- a/core/vendor/phpunit/php-timer/PHP/Timer.php
+++ b/core/vendor/phpunit/php-timer/PHP/Timer.php
@@ -2,7 +2,7 @@
 /**
  * PHP_Timer
  *
- * Copyright (c) 2010-2013, Sebastian Bergmann <sebastian@phpunit.de>.
+ * Copyright (c) 2010-2012, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,8 +36,8 @@
  *
  * @package    PHP
  * @subpackage Timer
- * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  2010-2013 Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright  2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-timer
  * @since      File available since Release 1.0.0
@@ -48,8 +48,8 @@
  *
  * @package    PHP
  * @subpackage Timer
- * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  2010-2013 Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright  2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-timer
@@ -60,16 +60,7 @@ class PHP_Timer
     /**
      * @var array
      */
-    private static $times = array(
-      'hour'   => 3600000,
-      'minute' => 60000,
-      'second' => 1000
-    );
-
-    /**
-     * @var array
-     */
-    private static $startTimes = array();
+    protected static $startTimes = array();
 
     /**
      * @var float
@@ -102,16 +93,32 @@ public static function stop()
      */
     public static function secondsToTimeString($time)
     {
-        $ms = round($time * 1000);
+        $buffer = '';
+
+        $hours   = sprintf('%02d', ($time >= 3600) ? floor($time / 3600) : 0);
+        $minutes = sprintf(
+                     '%02d',
+                     ($time >= 60)   ? floor($time /   60) - 60 * $hours : 0
+                   );
+        $seconds = sprintf('%02d', $time - 60 * 60 * $hours - 60 * $minutes);
+
+        if ($hours == 0 && $minutes == 0) {
+            $seconds = sprintf('%1d', $seconds);
 
-        foreach (self::$times as $unit => $value) {
-            if ($ms >= $value) {
-                $time = floor($ms / $value * 100.0) / 100.0;
-                return $time . ' ' . ($time == 1 ? $unit : $unit . 's');
+            $buffer .= $seconds . ' second';
+
+            if ($seconds != '1') {
+                $buffer .= 's';
+            }
+        } else {
+            if ($hours > 0) {
+                $buffer = $hours . ':';
             }
+
+            $buffer .= $minutes . ':' . $seconds;
         }
 
-        return $ms . ' ms';
+        return $buffer;
     }
 
     /**
@@ -121,7 +128,7 @@ public static function secondsToTimeString($time)
      */
     public static function timeSinceStartOfRequest()
     {
-        return self::secondsToTimeString(microtime(TRUE) - self::$requestTime);
+        return self::secondsToTimeString(time() - self::$requestTime);
     }
 
     /**
@@ -143,6 +150,10 @@ public static function resourceUsage()
     PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME_FLOAT'];
 }
 
-else {
-    PHP_Timer::$requestTime = microtime(TRUE);
+else if (isset($_SERVER['REQUEST_TIME'])) {
+    PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME'];
 }
+
+else {
+    PHP_Timer::$requestTime = time();
+}
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php b/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php
index 17b781daae8e42f353c93791d536e35c1ce9f586..91b1a56d40354757043034618559ca9f6e2db1de 100644
--- a/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php
+++ b/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php
@@ -2,7 +2,7 @@
 /**
  * PHP_Timer
  *
- * Copyright (c) 2010-2013, Sebastian Bergmann <sebastian@phpunit.de>.
+ * Copyright (c) 2010-2012, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,31 +36,40 @@
  *
  * @package    PHP
  * @subpackage Timer
- * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  2010-2013 Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright  2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-timer
  * @since      File available since Release 1.1.0
  */
 
-spl_autoload_register(
-  function ($class)
-  {
-      static $classes = NULL;
-      static $path = NULL;
+function php_timer_autoload($class = NULL) {
+    static $classes = NULL;
+    static $path = NULL;
 
-      if ($classes === NULL) {
-          $classes = array(
-            'php_timer' => '/Timer.php'
-          );
+    if ($classes === NULL) {
+        $classes = array(
+          'php_timer' => '/Timer.php'
+        );
 
-          $path = dirname(dirname(__FILE__));
-      }
+        $path = dirname(dirname(__FILE__));
+    }
 
-      $cn = strtolower($class);
+    if ($class === NULL) {
+        $result = array(__FILE__);
 
-      if (isset($classes[$cn])) {
-          require $path . $classes[$cn];
-      }
-  }
-);
+        foreach ($classes as $file) {
+            $result[] = $path . $file;
+        }
+
+        return $result;
+    }
+
+    $cn = strtolower($class);
+
+    if (isset($classes[$cn])) {
+        require $path . $classes[$cn];
+    }
+}
+
+spl_autoload_register('php_timer_autoload');
diff --git a/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php.in b/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php.in
index c2681c27a33faeaa574c5e1aed8da907bb3708ce..48dfa5ae74016e854b58a1ecb9323bd00ed0cfb5 100644
--- a/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php.in
+++ b/core/vendor/phpunit/php-timer/PHP/Timer/Autoload.php.in
@@ -2,7 +2,7 @@
 /**
  * PHP_Timer
  *
- * Copyright (c) 2010-2013, Sebastian Bergmann <sebastian@phpunit.de>.
+ * Copyright (c) 2010-2012, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,31 +36,40 @@
  *
  * @package    PHP
  * @subpackage Timer
- * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  2010-2013 Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright  2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-timer
  * @since      File available since Release 1.1.0
  */
 
-spl_autoload_register(
-  function ($class)
-  {
-      static $classes = NULL;
-      static $path = NULL;
+function php_timer_autoload($class = NULL) {
+    static $classes = NULL;
+    static $path = NULL;
 
-      if ($classes === NULL) {
-          $classes = array(
-            ___CLASSLIST___
-          );
+    if ($classes === NULL) {
+        $classes = array(
+          ___CLASSLIST___
+        );
 
-          $path = dirname(dirname(__FILE__));
-      }
+        $path = dirname(dirname(__FILE__));
+    }
 
-      $cn = strtolower($class);
+    if ($class === NULL) {
+        $result = array(__FILE__);
 
-      if (isset($classes[$cn])) {
-          require $path . $classes[$cn];
-      }
-  }
-);
+        foreach ($classes as $file) {
+            $result[] = $path . $file;
+        }
+
+        return $result;
+    }
+
+    $cn = strtolower($class);
+
+    if (isset($classes[$cn])) {
+        require $path . $classes[$cn];
+    }
+}
+
+spl_autoload_register('php_timer_autoload');
diff --git a/core/vendor/phpunit/php-timer/README.markdown b/core/vendor/phpunit/php-timer/README.markdown
new file mode 100644
index 0000000000000000000000000000000000000000..9ff8f78efead01509155d44f0e937a4d1f9efc1a
--- /dev/null
+++ b/core/vendor/phpunit/php-timer/README.markdown
@@ -0,0 +1,23 @@
+PHP_Timer
+=========
+
+Installation
+------------
+
+PHP_Timer should be installed using the [PEAR Installer](http://pear.php.net/). This installer is the backbone of PEAR, which provides a distribution system for PHP packages, and is shipped with every release of PHP since version 4.3.0.
+
+The PEAR channel (`pear.phpunit.de`) that is used to distribute PHP_Timer needs to be registered with the local PEAR environment:
+
+    sb@ubuntu ~ % pear channel-discover pear.phpunit.de
+    Adding Channel "pear.phpunit.de" succeeded
+    Discovery of channel "pear.phpunit.de" succeeded
+
+This has to be done only once. Now the PEAR Installer can be used to install packages from the PHPUnit channel:
+
+    sb@vmware ~ % pear install phpunit/PHP_Timer
+    downloading PHP_Timer-1.0.0.tgz ...
+    Starting to download PHP_Timer-1.0.0.tgz (2,536 bytes)
+    ....done: 2,536 bytes
+    install ok: channel://pear.phpunit.de/PHP_Timer-1.0.0
+
+After the installation you can find the PHP_Timer source files inside your local PEAR directory; the path is usually `/usr/lib/php/PHP`.
diff --git a/core/vendor/phpunit/php-timer/README.md b/core/vendor/phpunit/php-timer/README.md
deleted file mode 100644
index b618de0cb71d7bad7b408c635e9065efb0104203..0000000000000000000000000000000000000000
--- a/core/vendor/phpunit/php-timer/README.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# PHP_Timer
-
-Utility class for timing things, factored out of PHPUnit into a stand-alone component.
-
-## Installation
-
-You can use the [PEAR Installer](http://pear.php.net/manual/en/guide.users.commandline.cli.php) or [Composer](http://getcomposer.org/) to download and install this package as well as its dependencies.
-
-### PEAR Installer
-
-The following two commands (which you may have to run as `root`) are all that is required to install this package using the PEAR Installer:
-
-    pear config-set auto_discover 1
-    pear install pear.phpunit.de/PHP_Timer
-
-### Composer
-
-To add this package as a local, per-project dependency to your project, simply add a dependency on `phpunit/php-timer` to your project's `composer.json` file. Here is a minimal example of a `composer.json` file that just defines a dependency on PHP_Timer:
-
-    {
-        "require": {
-            "phpunit/php-timer": "*"
-        }
-    }
-
-### Usage
-
-#### Basic Timing
-
-```php
-PHP_Timer::start();
-
-$timer->start();
-
-// ...
-
-$time = PHP_Timer::stop();
-var_dump($time);
-
-print PHP_Timer::secondsToTimeString($time);
-```
-
-The code above yields the output below:
-
-    double(1.0967254638672E-5)
-    0 ms
-
-#### Resource Consumption Since PHP Startup
-
-```php
-print PHP_Timer::resourceUsage();
-```
-
-The code above yields the output below:
-
-    Time: 0 ms, Memory: 0.50Mb
diff --git a/core/vendor/phpunit/php-timer/Tests/TimerTest.php b/core/vendor/phpunit/php-timer/Tests/TimerTest.php
index 9cf4cb076df68ebbe05b18113d98fd20e5b5c3fa..1582d3b043bac7a1d63c51a4a0a60fc3ac75330b 100644
--- a/core/vendor/phpunit/php-timer/Tests/TimerTest.php
+++ b/core/vendor/phpunit/php-timer/Tests/TimerTest.php
@@ -2,7 +2,7 @@
 /**
  * PHP_Timer
  *
- * Copyright (c) 2010-2013, Sebastian Bergmann <sebastian@phpunit.de>.
+ * Copyright (c) 2010, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,8 +36,8 @@
  *
  * @package    PHP
  * @subpackage Timer
- * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  2010 Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright  2010 Sebastian Bergmann <sb@sebastian-bergmann.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/php-timer
  * @since      File available since Release 1.0.0
@@ -50,8 +50,8 @@
  *
  * @package    PHP
  * @subpackage Timer
- * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  2010-2013 Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright  2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-timer
@@ -65,18 +65,24 @@ class PHP_TimerTest extends PHPUnit_Framework_TestCase
      */
     public function testStartStop()
     {
+        PHP_Timer::start();
         $this->assertInternalType('float', PHP_Timer::stop());
     }
 
     /**
-     * @covers       PHP_Timer::secondsToTimeString
-     * @dataProvider secondsProvider
+     * @covers PHP_Timer::secondsToTimeString
      */
-    public function testSecondsToTimeString($string, $seconds)
+    public function testSecondsToTimeString()
     {
-        $this->assertEquals(
-          $string, PHP_Timer::secondsToTimeString($seconds)
-        );
+        $this->assertEquals('0 seconds', PHP_Timer::secondsToTimeString(0));
+        $this->assertEquals('1 second', PHP_Timer::secondsToTimeString(1));
+        $this->assertEquals('2 seconds', PHP_Timer::secondsToTimeString(2));
+        $this->assertEquals('01:00', PHP_Timer::secondsToTimeString(60));
+        $this->assertEquals('01:01', PHP_Timer::secondsToTimeString(61));
+        $this->assertEquals('02:00', PHP_Timer::secondsToTimeString(120));
+        $this->assertEquals('02:01', PHP_Timer::secondsToTimeString(121));
+        $this->assertEquals('01:00:00', PHP_Timer::secondsToTimeString(3600));
+        $this->assertEquals('01:00:01', PHP_Timer::secondsToTimeString(3601));
     }
 
     /**
@@ -85,7 +91,7 @@ public function testSecondsToTimeString($string, $seconds)
     public function testTimeSinceStartOfRequest()
     {
         $this->assertStringMatchesFormat(
-          '%f %s', PHP_Timer::timeSinceStartOfRequest()
+          '%i %s', PHP_Timer::timeSinceStartOfRequest()
         );
     }
 
@@ -99,44 +105,4 @@ public function testResourceUsage()
           'Time: %s, Memory: %s', PHP_Timer::resourceUsage()
         );
     }
-
-    public function secondsProvider()
-    {
-        return array(
-          array('0 ms', 0),
-          array('1 ms', .001),
-          array('10 ms', .01),
-          array('100 ms', .1),
-          array('999 ms', .999),
-          array('1 second', .9999),
-          array('1 second', 1),
-          array('2 seconds', 2),
-          array('59.9 seconds', 59.9),
-          array('59.99 seconds', 59.99),
-          array('59.99 seconds', 59.999),
-          array('1 minute', 59.9999),
-          array('59 seconds', 59.001),
-          array('59.01 seconds', 59.01),
-          array('1 minute', 60),
-          array('1.01 minutes', 61),
-          array('2 minutes', 120),
-          array('2.01 minutes', 121),
-          array('59.99 minutes', 3599.9),
-          array('59.99 minutes', 3599.99),
-          array('59.99 minutes', 3599.999),
-          array('1 hour', 3599.9999),
-          array('59.98 minutes', 3599.001),
-          array('59.98 minutes', 3599.01),
-          array('1 hour', 3600),
-          array('1 hour', 3601),
-          array('1 hour', 3601.9),
-          array('1 hour', 3601.99),
-          array('1 hour', 3601.999),
-          array('1 hour', 3601.9999),
-          array('1.01 hours', 3659.9999),
-          array('1.01 hours', 3659.001),
-          array('1.01 hours', 3659.01),
-          array('2 hours', 7199.9999),
-        );
-    }
 }
diff --git a/core/vendor/phpunit/php-timer/build.xml b/core/vendor/phpunit/php-timer/build.xml
index 32469d0c074a7a1e32fb30dbba7d0a6a902b3d05..0b0f80906744ee930cbbb8698fc81344aadeb7d7 100644
--- a/core/vendor/phpunit/php-timer/build.xml
+++ b/core/vendor/phpunit/php-timer/build.xml
@@ -44,10 +44,11 @@
   <exec executable="phpab">
    <arg value="--output" />
    <arg path="PHP/Timer/Autoload.php" />
+   <arg value="--compat" />
    <arg value="--template" />
    <arg path="PHP/Timer/Autoload.php.in" />
    <arg value="--indent" />
-   <arg value="            " />
+   <arg value="          " />
    <arg path="PHP" />
   </exec>
  </target>
diff --git a/core/vendor/phpunit/php-timer/composer.json b/core/vendor/phpunit/php-timer/composer.json
index 211c001786b9d212cbc4d45dbfa4a7a554a513c5..96f4a56e551aae021dba9f4902edc0411378c585 100644
--- a/core/vendor/phpunit/php-timer/composer.json
+++ b/core/vendor/phpunit/php-timer/composer.json
@@ -5,7 +5,7 @@
     "keywords": [
         "timer"
     ],
-    "homepage": "https://github.com/sebastianbergmann/php-timer/",
+    "homepage": "http://www.phpunit.de/",
     "license": "BSD-3-Clause",
     "authors": [
         {
@@ -14,16 +14,18 @@
             "role": "lead"
         }
     ],
+    "version": "1.0.3",
+    "time": "2012-09-23",
     "support": {
         "issues": "https://github.com/sebastianbergmann/php-timer/issues",
         "irc": "irc://irc.freenode.net/phpunit"
     },
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.2.7"
     },
     "autoload": {
-        "classmap": [
-            "PHP/"
+        "files": [
+            "PHP/Timer/Autoload.php"
         ]
     },
     "include-path": [
diff --git a/core/vendor/phpunit/php-timer/package-composer.json b/core/vendor/phpunit/php-timer/package-composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..d6e4c4bb939a783699d2cc1c8ef7aeaefb0a0761
--- /dev/null
+++ b/core/vendor/phpunit/php-timer/package-composer.json
@@ -0,0 +1,17 @@
+{
+    "name": "phpunit/php-timer",
+    "keywords": [ "timer" ],
+    "license": "BSD-3-Clause",
+    "homepage": "http://www.phpunit.de/",
+    "dependency_map": { },
+    "support": {
+        "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+        "irc": "irc://irc.freenode.net/phpunit"
+    },
+    "autoload": {
+        "files": [ "PHP/Timer/Autoload.php" ]
+    },
+    "include_path": [
+        ""
+    ]
+}
\ No newline at end of file
diff --git a/core/vendor/phpunit/php-timer/package.xml b/core/vendor/phpunit/php-timer/package.xml
index 2980a31a93a3b622ac018abf9c35a7a1a5bbf1fb..f41d6415e4cf79f64833e8818456a86b364f6106 100644
--- a/core/vendor/phpunit/php-timer/package.xml
+++ b/core/vendor/phpunit/php-timer/package.xml
@@ -17,9 +17,9 @@
   <email>sb@sebastian-bergmann.de</email>
   <active>yes</active>
  </lead>
- <date>2013-08-02</date>
+ <date>2012-09-23</date>
  <version>
-  <release>1.0.5</release>
+  <release>1.0.3</release>
   <api>1.0.0</api>
  </version>
  <stability>
@@ -40,14 +40,15 @@
      <tasks:replace from="@package_version@" to="version" type="package-info" />
     </file>
    </dir>
+   <file baseinstalldir="/" name="ChangeLog.markdown" role="doc"/>
    <file baseinstalldir="/" name="LICENSE" role="doc"/>
-   <file baseinstalldir="/" name="README.md" role="doc"/>
+   <file baseinstalldir="/" name="README.markdown" role="doc"/>
   </dir>
  </contents>
  <dependencies>
   <required>
    <php>
-    <min>5.3.3</min>
+    <min>5.2.7</min>
    </php>
    <pearinstaller>
     <min>1.9.2</min>
diff --git a/core/vendor/phpunit/php-token-stream/LICENSE b/core/vendor/phpunit/php-token-stream/LICENSE
index 6a176fa0f341e8203d8d5f98510650f82f9d9e1d..3138cf7a29b3a73b948bb6d57cec315e1befe4fe 100644
--- a/core/vendor/phpunit/php-token-stream/LICENSE
+++ b/core/vendor/phpunit/php-token-stream/LICENSE
@@ -1,6 +1,6 @@
 PHP_TokenStream
 
-Copyright (c) 2009-2015, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/phpunit/php-token-stream/composer.json b/core/vendor/phpunit/php-token-stream/composer.json
index dfde7299546b74378ba17c668c822f04687c8c1e..168f3dee51a7a8d16a89d5eb4291bdb9bf6c9363 100644
--- a/core/vendor/phpunit/php-token-stream/composer.json
+++ b/core/vendor/phpunit/php-token-stream/composer.json
@@ -28,7 +28,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "1.4-dev"
+            "dev-master": "1.3-dev"
         }
     }
 }
diff --git a/core/vendor/phpunit/php-token-stream/src/Token.php b/core/vendor/phpunit/php-token-stream/src/Token.php
index 91474992b16074243b84fb47ff425c940992cb51..b9828e3651a677f17cdaa186c323c3955b661785 100644
--- a/core/vendor/phpunit/php-token-stream/src/Token.php
+++ b/core/vendor/phpunit/php-token-stream/src/Token.php
@@ -1,18 +1,51 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package   PHP_TokenStream
+ * @author    Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright 2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since     File available since Release 1.0.0
  */
 
 /**
  * A PHP token.
  *
  * @author    Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright 2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version   Release: @package_version@
  * @link      http://github.com/sebastianbergmann/php-token-stream/tree
@@ -709,15 +742,3 @@ class PHP_Token_YIELD extends PHP_Token {}
 class PHP_Token_ELLIPSIS extends PHP_Token {}
 class PHP_Token_POW extends PHP_Token {}
 class PHP_Token_POW_EQUAL extends PHP_Token {}
-
-
-// Tokens introduced in HackLang
-class PHP_Token_TYPELIST_LT extends PHP_Token {}
-class PHP_Token_TYPELIST_GT extends PHP_Token {}
-class PHP_Token_TYPE extends PHP_Token {}
-class PHP_Token_SHAPE extends PHP_Token {}
-class PHP_Token_LAMBDA_OP extends PHP_Token {}
-class PHP_Token_LAMBDA_CP extends PHP_Token {}
-class PHP_Token_LAMBDA_ARROW extends PHP_Token {}
-class PHP_Token_IN extends PHP_Token {}
-class PHP_Token_JOIN extends PHP_Token {}
diff --git a/core/vendor/phpunit/php-token-stream/src/Token/Stream.php b/core/vendor/phpunit/php-token-stream/src/Token/Stream.php
index e25cbe22aef470d4e12f53a64b362bc0836e028e..654a782f1c7103cdfeaab71e1ff7d7456b1a799a 100644
--- a/core/vendor/phpunit/php-token-stream/src/Token/Stream.php
+++ b/core/vendor/phpunit/php-token-stream/src/Token/Stream.php
@@ -1,18 +1,51 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package   PHP_TokenStream
+ * @author    Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright 2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since     File available since Release 1.0.0
  */
 
 /**
  * A stream of PHP tokens.
  *
  * @author    Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright 2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version   Release: @package_version@
  * @link      http://github.com/sebastianbergmann/php-token-stream/tree
diff --git a/core/vendor/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php b/core/vendor/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php
index a80d41abc2f6a74046fc86f30185d9936cabcc71..f5ef61820e41c076c47bc5f89173cc51bfeb8d01 100644
--- a/core/vendor/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php
+++ b/core/vendor/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php
@@ -1,18 +1,51 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package   PHP_TokenStream
+ * @author    Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright 2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since     File available since Release 1.0.0
  */
 
 /**
  * A caching factory for token stream objects.
  *
  * @author    Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright 2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version   Release: @package_version@
  * @link      http://github.com/sebastianbergmann/php-token-stream/tree
diff --git a/core/vendor/phpunit/php-token-stream/tests/Token/ClassTest.php b/core/vendor/phpunit/php-token-stream/tests/Token/ClassTest.php
index d2a64b650b1b68e1ee0f5f175991d109341abbd6..afcd1a1fade388152e13e7baeaeb6484867e0465 100644
--- a/core/vendor/phpunit/php-token-stream/tests/Token/ClassTest.php
+++ b/core/vendor/phpunit/php-token-stream/tests/Token/ClassTest.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHP_TokenStream
+ * @subpackage Tests
+ * @author     Laurent Laville <pear@laurent-laville.org>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since      File available since Release 1.0.2
  */
 
 /**
@@ -14,7 +48,7 @@
  * @package    PHP_TokenStream
  * @subpackage Tests
  * @author     Laurent Laville <pear@laurent-laville.org>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-token-stream/
diff --git a/core/vendor/phpunit/php-token-stream/tests/Token/ClosureTest.php b/core/vendor/phpunit/php-token-stream/tests/Token/ClosureTest.php
index f1e508cf264a51af60ec77d89baaa3549da976d8..895529aba4d045ab433fc0d6976804212829d304 100644
--- a/core/vendor/phpunit/php-token-stream/tests/Token/ClosureTest.php
+++ b/core/vendor/phpunit/php-token-stream/tests/Token/ClosureTest.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHP_TokenStream
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +48,7 @@
  * @package    PHP_TokenStream
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-token-stream/
diff --git a/core/vendor/phpunit/php-token-stream/tests/Token/FunctionTest.php b/core/vendor/phpunit/php-token-stream/tests/Token/FunctionTest.php
index 4f23c39d8f2e650153e512647fcc9ff06a083692..d43abaacf6165e8c3d7685ff55a67802fb5e7834 100644
--- a/core/vendor/phpunit/php-token-stream/tests/Token/FunctionTest.php
+++ b/core/vendor/phpunit/php-token-stream/tests/Token/FunctionTest.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHP_TokenStream
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +48,7 @@
  * @package    PHP_TokenStream
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-token-stream/
diff --git a/core/vendor/phpunit/php-token-stream/tests/Token/IncludeTest.php b/core/vendor/phpunit/php-token-stream/tests/Token/IncludeTest.php
index 1e43351292175d187e2e79522164b38ece3fd448..440e1fa2c38eabceece43f1827c2292e8ee0e06a 100644
--- a/core/vendor/phpunit/php-token-stream/tests/Token/IncludeTest.php
+++ b/core/vendor/phpunit/php-token-stream/tests/Token/IncludeTest.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHP_TokenStream
+ * @subpackage Tests
+ * @author     Laurent Laville <pear@laurent-laville.org>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since      File available since Release 1.0.2
  */
 
 /**
@@ -15,7 +49,7 @@
  * @package    PHP_TokenStream
  * @subpackage Tests
  * @author     Laurent Laville <pear@laurent-laville.org>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-token-stream/
diff --git a/core/vendor/phpunit/php-token-stream/tests/Token/InterfaceTest.php b/core/vendor/phpunit/php-token-stream/tests/Token/InterfaceTest.php
index 56caede2afa9988b64041acefc806b8bea927725..ebe1f6315628b93b69e703647842661f523bdb65 100644
--- a/core/vendor/phpunit/php-token-stream/tests/Token/InterfaceTest.php
+++ b/core/vendor/phpunit/php-token-stream/tests/Token/InterfaceTest.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    PHP_TokenStream
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Laurent Laville <pear@laurent-laville.org>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -15,7 +50,7 @@
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Laurent Laville <pear@laurent-laville.org>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-token-stream/
diff --git a/core/vendor/phpunit/php-token-stream/tests/Token/NamespaceTest.php b/core/vendor/phpunit/php-token-stream/tests/Token/NamespaceTest.php
index 469f787261eaecac7caded52e30fb5d1c2c638bf..7a0bb7c3eae29288a41f1fff07fa9f35037c910c 100644
--- a/core/vendor/phpunit/php-token-stream/tests/Token/NamespaceTest.php
+++ b/core/vendor/phpunit/php-token-stream/tests/Token/NamespaceTest.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHP_TokenStream
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +48,7 @@
  * @package    PHP_TokenStream
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-token-stream/
diff --git a/core/vendor/phpunit/php-token-stream/tests/TokenTest.php b/core/vendor/phpunit/php-token-stream/tests/TokenTest.php
index 67bf79a0553e771f703d21590096443c9e7de0d7..b0b3d03b1cf2ea1bf5f54d8b61631fbfd7045b0a 100644
--- a/core/vendor/phpunit/php-token-stream/tests/TokenTest.php
+++ b/core/vendor/phpunit/php-token-stream/tests/TokenTest.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHP_TokenStream package.
+/**
+ * php-token-stream
+ *
+ * Copyright (c) 2009-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHP_TokenStream
+ * @subpackage Tests
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +48,7 @@
  * @package    PHP_TokenStream
  * @subpackage Tests
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2009-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/php-token-stream/
diff --git a/core/vendor/phpunit/phpunit-mock-objects/.travis.yml b/core/vendor/phpunit/phpunit-mock-objects/.travis.yml
index 127bb651df4b4154d5f46f2089814dac7b3f33ad..e536e651f3dd50d2a8e2b40492b76654610c323f 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/.travis.yml
+++ b/core/vendor/phpunit/phpunit-mock-objects/.travis.yml
@@ -12,7 +12,6 @@ php:
   - 5.4
   - 5.5
   - 5.6
-  - 7.0
   - hhvm
 
 notifications:
diff --git a/core/vendor/phpunit/phpunit-mock-objects/LICENSE b/core/vendor/phpunit/phpunit-mock-objects/LICENSE
index 3705d2be2f1ae4ce3fef2dacd683769acea3bfe4..6c7e93b14fb12d3dbea4a91bb370d4fd0e7ca1cc 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/LICENSE
+++ b/core/vendor/phpunit/phpunit-mock-objects/LICENSE
@@ -1,6 +1,6 @@
 PHPUnit_MockObject
 
-Copyright (c) 2002-2015, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2002-2014, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/phpunit/phpunit-mock-objects/composer.json b/core/vendor/phpunit/phpunit-mock-objects/composer.json
index 7cbf44275674847a9b67c65b4b2fe69541f052d5..87f270e8124dc6b676fd202857e16bf6f9e91894 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/composer.json
+++ b/core/vendor/phpunit/phpunit-mock-objects/composer.json
@@ -22,10 +22,10 @@
     "require": {
         "php": ">=5.3.3",
         "phpunit/php-text-template": "~1.2",
-        "doctrine/instantiator": "~1.0,>=1.0.2"
+        "doctrine/instantiator": "~1.0,>=1.0.1"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.4"
+        "phpunit/phpunit": "~4.3"
     },
     "suggest": {
         "ext-soap": "*"
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php
index c963a79cb2988034c2b89d95e74047472db394e1..67c2b6c07245de6909a50fbaeba4f7bbc629c6de 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -18,7 +52,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php
index 4a5be925388f789dec102d57bee8c8ea01d1bfb1..9b83c1734c53c07bf393421e37c65a70d691b182 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -18,7 +52,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php
index 4bc48d54b1cd58352ce9cd9c86882ca30b23f608..4acedd30ca289af0fe5189bd8e3ec2aa74320ac8 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php
index f41c65ed8c8b537e0bac4b735ba015f25484d263..3576a56faea2a3a9fe12f143fb2d862335126b91 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php
index 83db918f2a0cc105f9db164cb5958c931278f9b1..7b5c70273eb23efacca52785b4a801e0c7502c20 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -15,7 +49,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php
index a9b406cc4b1049b08c86e7377f205d2cbdbe1b1a..2bd8849c714b28589639cd34ee5675a23d61e1bc 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php
index 89c08c618e200d543857a5d175c953e86c8bef96..156e0f800c15d060f1e49e79706e0f241a5169b4 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php
index 2e341560a237c2f16da6ea8e95ae0c303f0f0c45..a0cd1f30377ee5a159a5be3393387bc577d979ff 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php
@@ -1,17 +1,51 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 2.0.6
  */
 
 /**
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
  * @since      Class available since Release 2.0.6
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php
index 4a3edb4a25be6f59eeb75b300a1e772cb493cbd9..8ce99ff2a8c764a73b7c615fd596cf724523d1e9 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 2.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
  * @since      Interface available since Release 2.0.6
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php
index 3516fc04cc7adf9566e5cb14aca4560cfdf4a3be..b13ab68568b5d89e477249c7b617089499938bd1 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php
@@ -1,17 +1,51 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 2.0.6
  */
 
 /**
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
  * @since      Class available since Release 2.0.6
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php
index 7b18cd00ec85e2f06269e9645f2479aefe7e1b76..8d9151c34f91fd077b31f980ef6fd5538051a794 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 use Doctrine\Instantiator\Instantiator;
@@ -24,7 +58,7 @@ function trait_exists($traitname, $autoload = true)
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
@@ -335,8 +369,8 @@ public function getMockForAbstractClass($originalClassName, array $arguments = a
             $reflector = new ReflectionClass($originalClassName);
             $methods   = $mockedMethods;
 
-            foreach ($reflector->getMethods(ReflectionMethod::IS_ABSTRACT) as $method) {
-                if (!in_array($method->getName(), $methods)) {
+            foreach ($reflector->getMethods() as $method) {
+                if ($method->isAbstract() && !in_array($method->getName(), $methods)) {
                     $methods[] = $method->getName();
                 }
             }
@@ -544,7 +578,7 @@ public function generateClassFromWsdl($wsdlFile, $className, array $methods = ar
         }
 
         if ($this->soapLoaded) {
-            $options = array_merge($options, array('cache_wsdl' => WSDL_CACHE_NONE));
+            $options = array_merge($options, array('cache_wsdl'=>FALSE));
             $client   = new SoapClient($wsdlFile, $options);
             $_methods = array_unique($client->__getFunctions());
             unset($client);
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php
index 9fe998c84744b9078899d4231d84b2a6798b31b3..992b927a7ac47ae12cd3480e889c7f3a23c94a95 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php
index a8fdfd1dba5622082088622f83b984fca8de3916..6cb98e7076142056f91c682f239c3d71025341b3 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php
index 6b570e695c996fae6742a6017a3f476ea6c8230e..862367a0f367b506bddda1b8ebcd6790a8687344 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 use SebastianBergmann\Exporter\Exporter;
@@ -15,7 +49,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php
index e6627e131f7132cea6428be7870286547b2e9ec2..ac407207ff09cc1f122008d270feb72fb13228c4 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -17,7 +51,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php
index 30da9b7ed0bd40e9afb5e0c86bda85a1225fdb7f..e02b2c29e81d6af2bc6ae3de338f85422ec12c1e 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -16,7 +50,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php
index 044350156f8615796f066997cc9221c78364e183..219c0d02bb50279cd003f7d3d136584083781a27 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -19,7 +53,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php
index 8d0b00ef0418b8030e327a14007bd29507ff2825..cf066da8266cfff0da169b5378b08d26057437de 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +48,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php
index ae6cc25e5353a48795efe41f61575136ef8ac8ca..e69b65c5f23e14a5b8bd65a5314d371c866846a2 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php
index e7b577c8fe49f14d0d3fd10edc0de958b94d1f53..5c9368b8c1b10aea05ccb87c6daf520560031c38 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
  */
 
 /**
@@ -20,7 +53,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php
index 470cb29913e6153319d3443898f0f4483cdded18..7891a7b491b3d80b1481fe7536f06a5c6315b37d 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +48,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php
index a4ffe2a8df0df52ba874414dc562bf35caf9e16a..0d3a8e8970ed03c86494a43dcc68427cc149c61e 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -20,7 +54,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php
index b8caca37d9f44e861bd29e0c71bf69bb2ef4de19..7723be67f66e72f078d1790ac294af33c2bd1746 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 2.2.0
  */
 
 /**
@@ -14,7 +48,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php
index a2a93011482dfda23f514fb090ac51d1cb6f1354..5b4d36f2102737b7575302c68aa438169a531a3c 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -16,7 +50,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php
index 3a015966208f468e0a64d5d2fba5ec9ba6e6fe04..b6fee24d4e92acf4ce3d6866a1b9266aec2e122e 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 2.2.0
  */
 
 /**
@@ -14,7 +48,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php
index d98eb7689c5d77fd8d06103f0cf189d154138d03..848f420e2cb0f5749973de04c7faf0ef0964ed82 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -18,7 +52,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php
index 1548ab304dd56c2bb6158c3fa7efb4314ac037ee..9a34516472bc9cb0a5202177fd9e58be21e3b306 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -16,7 +50,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php
index 11fc4994d612d1b65d6ec8ecaabb7ff268891f03..8b9ec10dcba4ab5d2f9b6e1ac07c6be8af0bfddd 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -17,7 +51,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php
index 4922e6280800db2b247b8060b3d994fb0a1a9745..ebd5c697a82331ba9bca5f6489407f1d6945edf4 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -17,7 +51,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php
index fd8fa7acbf0bcc69ee7ef194158bb30f066a035e..3d0283ee07c113a564afb137e40efd94272f3a93 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -17,7 +51,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php
index f59c23d368ab3062ae9ee8213df045a776752ddd..3ff865567c821443a79b194fdad07147656904ba 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    PHPUnit_MockObject
+ * @author     Giorgio Sironi <piccoloprincipeazzurro@gmail.com>
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @package    PHPUnit_MockObject
  * @author     Giorgio Sironi <piccoloprincipeazzurro@gmail.com>
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
  * @since      File available since Release 1.0.0
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php
index 5501762a9cc6fda634ee7c0f578066fbe41112fa..1fbfeb4d2b7b2dd6be0d5b6899d3df3547a25a6c 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +48,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php
index 4e3d06eab32fb959534aadd64d986cec2639c1e9..ca8f26279b3349290f9e498b82702c48be4fb225 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -16,7 +50,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php
index 05c0faa051f4d8bccb629b72795667f238f46b5a..10563c187d2bc5416f12d29f35e0d8e25b1387d8 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    PHPUnit_MockObject
+ * @author     Patrick MÃ¼ller <elias0@gmx.net>
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @package    PHPUnit_MockObject
  * @author     Patrick MÃ¼ller <elias0@gmx.net>
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php
index 9203365346c12640801e7388af8d9536b6cdbea5..1a4d476c550ebdd92805a652c9639fd7788f8170 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    PHPUnit_MockObject
+ * @author     Oliver Schlicht <o.schlicht@bitExpert.de>
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @package    PHPUnit_MockObject
  * @author     Oliver Schlicht <o.schlicht@bitExpert.de>
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php
index 254c164c2fa48abc5924f115303ad726a60c9d0e..cfdd6b778baab0265432ac1eea6f75b09a3c7a99 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php
index 9aea78ef426bc0d8f1152f96bac88e17f4e023a9..9ef71ef65eb9e6079ec703eee3e69dc7497924cf 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php
index c84f962a6ee88ac332a5fa5a969c996908365798..68f6564c3664f8c921e9cbb3036ee6f4684ce00c 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php
index 34318e60c224896d13af18c9a56930e442bc12d4..a093abf1df1e8119e8a0b5b5550b4770d980c53f 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php
index 8cc34737e96f1e94a9f7fdc76e28988b23604c1c..b24bdb537e506a11e3ea64089c2c60cb2184bba9 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php
@@ -1,11 +1,46 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kris Wallsmith <kris.wallsmith@gmail.com>
+ * @copyright  2010 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -14,7 +49,7 @@
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kris Wallsmith <kris.wallsmith@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php
index ddda8e52a45a12e3f695d90cf43c057457581fe9..36e82c667096334264c0aae066750ff487286def 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.1.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php
index 376b7fe8e3daed879cdf1e450894b95416917700..21ccbf48ae315e7533355ce9201d54ed725d5fe2 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
@@ -13,7 +47,7 @@
  *
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
diff --git a/core/vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php b/core/vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php
index 8c0a08e74ddf1af56810c0af12b814314f7a7835..045b85167347f6c7c00d1103bcfb10c1a00a4c5d 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php
@@ -100,7 +100,7 @@ public function testGetMockForAbstractClassExpectingInvalidArgumentException($cl
      * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
      * @expectedException PHPUnit_Framework_MockObject_RuntimeException
      */
-    public function testGetMockForAbstractClassAbstractClassDoesNotExist()
+    public function testGetMockForAbstractClassAnstractClassDoesNotExist()
     {
         $mock = $this->generator->getMockForAbstractClass('Tux');
     }
diff --git a/core/vendor/phpunit/phpunit-mock-objects/tests/MockBuilderTest.php b/core/vendor/phpunit/phpunit-mock-objects/tests/MockBuilderTest.php
index b5a6bb9c3418ea82c4050c61f101441d1ee120f8..c770e2a936f1da45b9b49f104056581de6c5d237 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/tests/MockBuilderTest.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/tests/MockBuilderTest.php
@@ -1,18 +1,53 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    PHPUnit_MockObject
+ * @author     Giorgio Sironi <piccoloprincipeazzurro@gmail.com>
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since      File available since Release 1.0.0
  */
 
 /**
  * @package    PHPUnit_MockObject
  * @author     Giorgio Sironi <piccoloprincipeazzurro@gmail.com>
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
  * @since      File available since Release 1.0.0
diff --git a/core/vendor/phpunit/phpunit-mock-objects/tests/MockObjectTest.php b/core/vendor/phpunit/phpunit-mock-objects/tests/MockObjectTest.php
index 6ad3fd0ba7f9f6e73f7bd634ddb90e636d89f39c..f3d8a73602448d5ab66e676e159b24b975e442ed 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/tests/MockObjectTest.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/tests/MockObjectTest.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.phpunit.de/
+ * @since      File available since Release 3.0.0
  */
 
 /**
@@ -15,7 +49,7 @@
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Patrick Mueller <elias0@gmx.net>
  * @author     Frank Kleine <mikey@stubbles.net>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://www.phpunit.de/
diff --git a/core/vendor/phpunit/phpunit-mock-objects/tests/ProxyObjectTest.php b/core/vendor/phpunit/phpunit-mock-objects/tests/ProxyObjectTest.php
index 829621fcfa4a7acfc8c6d64f8a7ea64f08609bd6..3e735211fbd84cf27041843405141959edcc677f 100644
--- a/core/vendor/phpunit/phpunit-mock-objects/tests/ProxyObjectTest.php
+++ b/core/vendor/phpunit/phpunit-mock-objects/tests/ProxyObjectTest.php
@@ -1,17 +1,51 @@
 <?php
-/*
- * This file is part of the PHPUnit_MockObject package.
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    PHPUnit_MockObject
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.phpunit.de/
+ * @since      File available since Release 2.0.0
  */
 
 /**
  * @package    PHPUnit_MockObject
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @version    Release: @package_version@
  * @link       http://www.phpunit.de/
diff --git a/core/vendor/phpunit/phpunit/ChangeLog-4.6.md b/core/vendor/phpunit/phpunit/ChangeLog-4.6.md
index 7c0ea25c6dd999ec41f9692f7ec8979eba747a05..40e180996d02a6c096744cd52bf9bd00c61adbca 100644
--- a/core/vendor/phpunit/phpunit/ChangeLog-4.6.md
+++ b/core/vendor/phpunit/phpunit/ChangeLog-4.6.md
@@ -1,21 +1,5 @@
 # Changes in PHPUnit 4.6
 
-## PHPUnit 4.6.4
-
-* The default list of blacklisted classes is now always passed to PHP_CodeCoverage
-
-## PHPUnit 4.6.3
-
-* Updated the default list of blacklisted classes
-
-## PHPUnit 4.6.2
-
-* Fixed [#1667](https://github.com/sebastianbergmann/phpunit/issues/1667): Loading `src/Framework/Assert/Functions.php` by default causes collisions
-
-## PHPUnit 4.6.1
-
-* Fixed [#1665](https://github.com/sebastianbergmann/phpunit/issues/1665): PHPUnit 4.6.0 PHAR does not work when renamed to `phpunit`
-
 ## PHPUnit 4.6.0
 
 * Added the `--strict-global-state` command-line option and the `beStrictAboutChangesToGlobalState` configuration setting for enabling a check that global variabes, super-global variables, and static attributes in user-defined classes are not modified during a test
diff --git a/core/vendor/phpunit/phpunit/build/phar-autoload.php.in b/core/vendor/phpunit/phpunit/build/phar-autoload.php.in
index c2b2d159f7ecf80f6b686fcbabb8cb9438677689..a04eb373a9427d9a09a1fb2ba2a0545607872893 100644
--- a/core/vendor/phpunit/phpunit/build/phar-autoload.php.in
+++ b/core/vendor/phpunit/phpunit/build/phar-autoload.php.in
@@ -12,9 +12,10 @@ if (__FILE__ == realpath($GLOBALS['_SERVER']['SCRIPT_NAME'])) {
 define('__PHPUNIT_PHAR__', str_replace(DIRECTORY_SEPARATOR, '/', $phar));
 define('__PHPUNIT_PHAR_ROOT__', 'phar://___PHAR___');
 
-Phar::mapPhar('___PHAR___');
-
 ___FILELIST___
+require __PHPUNIT_PHAR_ROOT__ . '/phpunit/Framework/Assert/Functions.php';
+
+Phar::mapPhar('___PHAR___');
 
 if ($execute) {
     if (isset($_SERVER['argv'][1]) && $_SERVER['argv'][1] == '--manifest') {
diff --git a/core/vendor/phpunit/phpunit/composer.json b/core/vendor/phpunit/phpunit/composer.json
index f5f65b9aa53c59ffbb3e2dbdb56349f3a2b063c6..67d7cd36a514a1a133f3d244a1d34900e5bce6af 100644
--- a/core/vendor/phpunit/phpunit/composer.json
+++ b/core/vendor/phpunit/phpunit/composer.json
@@ -53,6 +53,9 @@
     "autoload": {
         "classmap": [
             "src/"
+        ],
+        "files": [
+            "src/Framework/Assert/Functions.php"
         ]
     },
     "autoload-dev": {
@@ -60,7 +63,6 @@
             "tests/"
         ],
         "files": [
-            "src/Framework/Assert/Functions.php",
             "tests/_files/CoveredFunction.php"
         ]
     },
diff --git a/core/vendor/phpunit/phpunit/src/Runner/Version.php b/core/vendor/phpunit/phpunit/src/Runner/Version.php
index 23349a8d8fe01d6d033ef59c9ed4c358359e6438..4fa3bf483180723c455bae3a809eb51deeeb617a 100644
--- a/core/vendor/phpunit/phpunit/src/Runner/Version.php
+++ b/core/vendor/phpunit/phpunit/src/Runner/Version.php
@@ -36,7 +36,7 @@ public static function id()
         }
 
         if (self::$version === null) {
-            $version = new SebastianBergmann\Version('4.6.4', dirname(dirname(__DIR__)));
+            $version = new SebastianBergmann\Version('4.6.0', dirname(dirname(__DIR__)));
             self::$version = $version->getVersion();
         }
 
diff --git a/core/vendor/phpunit/phpunit/src/TextUI/TestRunner.php b/core/vendor/phpunit/phpunit/src/TextUI/TestRunner.php
index bc93e3a395adb82ed35338ebaf2ea8ed18849ad8..35bfd13f4dc6d117b8170daf95b0381a6cee15cf 100644
--- a/core/vendor/phpunit/phpunit/src/TextUI/TestRunner.php
+++ b/core/vendor/phpunit/phpunit/src/TextUI/TestRunner.php
@@ -66,7 +66,7 @@ class PHPUnit_TextUI_TestRunner extends PHPUnit_Runner_BaseTestRunner
     public function __construct(PHPUnit_Runner_TestSuiteLoader $loader = null, PHP_CodeCoverage_Filter $filter = null)
     {
         if ($filter === null) {
-            $filter = $this->getCodeCoverageFilter();
+            $filter = new PHP_CodeCoverage_Filter;
         }
 
         $this->codeCoverageFilter = $filter;
@@ -837,6 +837,16 @@ protected function handleConfiguration(array &$arguments)
 
                 if (empty($filterConfiguration['whitelist']['include']['directory']) &&
                     empty($filterConfiguration['whitelist']['include']['file'])) {
+                    if (defined('__PHPUNIT_PHAR__')) {
+                        $this->codeCoverageFilter->addFileToBlacklist(__PHPUNIT_PHAR__);
+                    }
+
+                    $blacklist = new PHPUnit_Util_Blacklist;
+
+                    foreach ($blacklist->getBlacklistedDirectories() as $directory) {
+                        $this->codeCoverageFilter->addDirectoryToBlacklist($directory);
+                    }
+
                     foreach ($filterConfiguration['blacklist']['include']['directory'] as $dir) {
                         $this->codeCoverageFilter->addDirectoryToBlacklist(
                             $dir['path'],
@@ -961,24 +971,4 @@ private function showMessage($message, $exit = false)
             exit(self::EXCEPTION_EXIT);
         }
     }
-
-    /**
-     * @return PHP_CodeCoverage_Filter
-     */
-    private function getCodeCoverageFilter()
-    {
-        $filter = new PHP_CodeCoverage_Filter;
-
-        if (defined('__PHPUNIT_PHAR__')) {
-            $filter->addFileToBlacklist(__PHPUNIT_PHAR__);
-        }
-
-        $blacklist = new PHPUnit_Util_Blacklist;
-
-        foreach ($blacklist->getBlacklistedDirectories() as $directory) {
-            $filter->addDirectoryToBlacklist($directory);
-        }
-
-        return $filter;
-    }
 }
diff --git a/core/vendor/phpunit/phpunit/src/Util/Blacklist.php b/core/vendor/phpunit/phpunit/src/Util/Blacklist.php
index 367c33d7108bfe66d9916abf077405362c57d4fd..fb10e0bd27dec4bd9d1e67d4b3dfba481ea9783b 100644
--- a/core/vendor/phpunit/phpunit/src/Util/Blacklist.php
+++ b/core/vendor/phpunit/phpunit/src/Util/Blacklist.php
@@ -41,13 +41,10 @@ class PHPUnit_Util_Blacklist
         'SebastianBergmann\Environment\Runtime' => 1,
         'SebastianBergmann\Comparator\Comparator' => 1,
         'SebastianBergmann\Exporter\Exporter' => 1,
-        'SebastianBergmann\GlobalState\Snapshot' => 1,
         'SebastianBergmann\RecursionContext\Context' => 1,
         'SebastianBergmann\Version' => 1,
         'Composer\Autoload\ClassLoader' => 1,
-        'Doctrine\Instantiator\Instantiator' => 1,
-        'phpDocumentor\Reflection\DocBlock' => 1,
-        'Prophecy\Prophet' => 1
+        'Doctrine\Instantiator\Instantiator' => 1
     );
 
     /**
diff --git a/core/vendor/sebastian/comparator/LICENSE b/core/vendor/sebastian/comparator/LICENSE
index 334b637a48cd27a5bee416d93df39bfb267cb56c..0b41d32a027543795e2e811008df2b109c0ce2ed 100644
--- a/core/vendor/sebastian/comparator/LICENSE
+++ b/core/vendor/sebastian/comparator/LICENSE
@@ -1,6 +1,6 @@
 Comparator
 
-Copyright (c) 2002-2015, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2002-2014, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/sebastian/comparator/composer.json b/core/vendor/sebastian/comparator/composer.json
index 6e133e4750198df771ad7197a75e60b94381bd76..5097ae91790324ba253307a5b43834659a57078e 100644
--- a/core/vendor/sebastian/comparator/composer.json
+++ b/core/vendor/sebastian/comparator/composer.json
@@ -24,11 +24,11 @@
     ],
     "require": {
         "php": ">=5.3.3",
-        "sebastian/diff": "~1.2",
-        "sebastian/exporter": "~1.2"
+        "sebastian/diff": "~1.1",
+        "sebastian/exporter": "~1.0"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.4"
+        "phpunit/phpunit": "~4.1"
     },
     "autoload": {
         "classmap": [
diff --git a/core/vendor/sebastian/comparator/src/ArrayComparator.php b/core/vendor/sebastian/comparator/src/ArrayComparator.php
index 17a3c8525b1994214d5ad529cfc01c8565c960cf..9c048e95c49a3b0c94145fbcc13089645fe9b97a 100644
--- a/core/vendor/sebastian/comparator/src/ArrayComparator.php
+++ b/core/vendor/sebastian/comparator/src/ArrayComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/Comparator.php b/core/vendor/sebastian/comparator/src/Comparator.php
index 75e8b0133d2f793b19831503f9b135a260cec999..4d2716a5396a47ae6798b099f3004292a8c9c428 100644
--- a/core/vendor/sebastian/comparator/src/Comparator.php
+++ b/core/vendor/sebastian/comparator/src/Comparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -18,7 +51,7 @@
  * @package    Comparator
  * @subpackage Framework
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/ComparisonFailure.php b/core/vendor/sebastian/comparator/src/ComparisonFailure.php
index a75815dc8701d8b0dade6fdff13a4474aa38c641..e1e053d5c1c5ead0e1cd2c254a3d4ed221200494 100644
--- a/core/vendor/sebastian/comparator/src/ComparisonFailure.php
+++ b/core/vendor/sebastian/comparator/src/ComparisonFailure.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    Comparator
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -18,7 +52,7 @@
  * @package    Comparator
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/DOMNodeComparator.php b/core/vendor/sebastian/comparator/src/DOMNodeComparator.php
index c76d1c77d5ba1d777afe4de2c2538f68b956a618..f69bc8fbc768f06c6050c6184537b0e4889beb95 100644
--- a/core/vendor/sebastian/comparator/src/DOMNodeComparator.php
+++ b/core/vendor/sebastian/comparator/src/DOMNodeComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -18,7 +51,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/DateTimeComparator.php b/core/vendor/sebastian/comparator/src/DateTimeComparator.php
index 65a7744ff7557a77891be9e658048a008534b2c3..ed2e2ba5bf93ecbd7e8c68e5adb4a4c65e0921e3 100644
--- a/core/vendor/sebastian/comparator/src/DateTimeComparator.php
+++ b/core/vendor/sebastian/comparator/src/DateTimeComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/DoubleComparator.php b/core/vendor/sebastian/comparator/src/DoubleComparator.php
index 76dd3a23f6a818b45bd01625d53ab2eed9363d27..9e06ab79ea6e9bdc383de05ba92f08a1b35f7619 100644
--- a/core/vendor/sebastian/comparator/src/DoubleComparator.php
+++ b/core/vendor/sebastian/comparator/src/DoubleComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/ExceptionComparator.php b/core/vendor/sebastian/comparator/src/ExceptionComparator.php
index 9da557b24fac74a743c51ff0414ce6f9e71598a2..e45e5660967c0ff59ab78d634ed4b54745f949b5 100644
--- a/core/vendor/sebastian/comparator/src/ExceptionComparator.php
+++ b/core/vendor/sebastian/comparator/src/ExceptionComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/Factory.php b/core/vendor/sebastian/comparator/src/Factory.php
index d841ef21edf922a80e6493a0f62fa9b62403bc5d..837e09059a1ad60e4ddd560f7e4786f22f9b1d14 100644
--- a/core/vendor/sebastian/comparator/src/Factory.php
+++ b/core/vendor/sebastian/comparator/src/Factory.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/MockObjectComparator.php b/core/vendor/sebastian/comparator/src/MockObjectComparator.php
index ecd275ee3826384901eb6eed3759692d981e3c2c..d9275edc36832cf3b5863c926591854269f73509 100644
--- a/core/vendor/sebastian/comparator/src/MockObjectComparator.php
+++ b/core/vendor/sebastian/comparator/src/MockObjectComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/NumericComparator.php b/core/vendor/sebastian/comparator/src/NumericComparator.php
index a3453a9b656ad4e40218054df6c1af5caa7319e7..51b8de9c1c2b5cc5c0075066d400750bc49fc490 100644
--- a/core/vendor/sebastian/comparator/src/NumericComparator.php
+++ b/core/vendor/sebastian/comparator/src/NumericComparator.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @author     Alexander <iam.asm89@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -16,7 +50,7 @@
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
  * @author     Alexander <iam.asm89@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/ObjectComparator.php b/core/vendor/sebastian/comparator/src/ObjectComparator.php
index 44375d93e83f7d83631b46d3c583ec85d19a17a4..3da5231626b01acd4a50a9cdc30bda0bdc76c52e 100644
--- a/core/vendor/sebastian/comparator/src/ObjectComparator.php
+++ b/core/vendor/sebastian/comparator/src/ObjectComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/ResourceComparator.php b/core/vendor/sebastian/comparator/src/ResourceComparator.php
index 043a4ce9576e2eb6bdeabb2f23d2cbf176f7ebf4..38578a11392f74d863c7d41e3980cb2a17c1de5a 100644
--- a/core/vendor/sebastian/comparator/src/ResourceComparator.php
+++ b/core/vendor/sebastian/comparator/src/ResourceComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/ScalarComparator.php b/core/vendor/sebastian/comparator/src/ScalarComparator.php
index 7de108e139c7967a827909011781c93d1dad68be..26f13fc38920dc5641ce17207732b9739c29780c 100644
--- a/core/vendor/sebastian/comparator/src/ScalarComparator.php
+++ b/core/vendor/sebastian/comparator/src/ScalarComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/SplObjectStorageComparator.php b/core/vendor/sebastian/comparator/src/SplObjectStorageComparator.php
index 5de7dac57d221efa86e2fef4c5c3b41f3f9fd07e..2ff0828e91e771606aacf451efc2ba9a2808e834 100644
--- a/core/vendor/sebastian/comparator/src/SplObjectStorageComparator.php
+++ b/core/vendor/sebastian/comparator/src/SplObjectStorageComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/src/TypeComparator.php b/core/vendor/sebastian/comparator/src/TypeComparator.php
index 27a9581a34078dea8be5c87f99f7086a64309486..3c4e87023c6045c2857034e7883848645d3d6451 100644
--- a/core/vendor/sebastian/comparator/src/TypeComparator.php
+++ b/core/vendor/sebastian/comparator/src/TypeComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/ArrayComparatorTest.php b/core/vendor/sebastian/comparator/tests/ArrayComparatorTest.php
index 1874e71e8dd79621b681a1717fba8907cb4ede41..e977ca90a24543ebc2bda77ff38a51da40670b0c 100644
--- a/core/vendor/sebastian/comparator/tests/ArrayComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/ArrayComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/DOMNodeComparatorTest.php b/core/vendor/sebastian/comparator/tests/DOMNodeComparatorTest.php
index 7bad48ca05d7bce966c85bbfadef24ab066ec4ce..da4e1339af781220d6d1a913464a2a41f7dff9aa 100644
--- a/core/vendor/sebastian/comparator/tests/DOMNodeComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/DOMNodeComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -18,7 +51,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/DateTimeComparatorTest.php b/core/vendor/sebastian/comparator/tests/DateTimeComparatorTest.php
index 22672ab7bf3bd78b9902d0d0b68d5be155c40a48..b03a5393ed4d579d9c93ca02577443295bc712b7 100644
--- a/core/vendor/sebastian/comparator/tests/DateTimeComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/DateTimeComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -18,7 +51,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/DoubleComparatorTest.php b/core/vendor/sebastian/comparator/tests/DoubleComparatorTest.php
index 8c47101dfcc60dd1679925d72a8c82a8b4481c46..205ac3824de042a0ca66757ae72a479d66e6cf74 100644
--- a/core/vendor/sebastian/comparator/tests/DoubleComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/DoubleComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/ExceptionComparatorTest.php b/core/vendor/sebastian/comparator/tests/ExceptionComparatorTest.php
index 7150285e3b337c4048935771ef8251d069b62342..f5750da4b3da4be4df6572cf6e24b8cb80dec7d8 100644
--- a/core/vendor/sebastian/comparator/tests/ExceptionComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/ExceptionComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -18,7 +51,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/FactoryTest.php b/core/vendor/sebastian/comparator/tests/FactoryTest.php
index 0964067ecd30f2a42cef6cf2ce46b9ca4e13e53e..4ae4c72f13ec422890421e365477dbde715433ef 100644
--- a/core/vendor/sebastian/comparator/tests/FactoryTest.php
+++ b/core/vendor/sebastian/comparator/tests/FactoryTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/MockObjectComparatorTest.php b/core/vendor/sebastian/comparator/tests/MockObjectComparatorTest.php
index 01e0352396c35c6e012f4e612b913c6f262a87ba..fa696b960353e49c1fbfd3be589d0ddcf0cf82ee 100644
--- a/core/vendor/sebastian/comparator/tests/MockObjectComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/MockObjectComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/NumericComparatorTest.php b/core/vendor/sebastian/comparator/tests/NumericComparatorTest.php
index cf121d4b0dc137c6a769849e6839bc754886d54c..6c119d3222a7520eb00516e6375ba6780c99a248 100644
--- a/core/vendor/sebastian/comparator/tests/NumericComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/NumericComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
@@ -34,7 +67,7 @@ public function acceptsSucceedsProvider()
           array(5, 10),
           array(8, '0'),
           array('10', 0),
-          array(0x74c3b00c, 42),
+          array(0xf4c3b00c, 42),
           array(0755, 0777)
         );
     }
diff --git a/core/vendor/sebastian/comparator/tests/ObjectComparatorTest.php b/core/vendor/sebastian/comparator/tests/ObjectComparatorTest.php
index b11bbe05816839627086c9ea64407581c90e2ae9..39a582dc51d702be714641f8f9c8ec411f9f2308 100644
--- a/core/vendor/sebastian/comparator/tests/ObjectComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/ObjectComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -17,7 +50,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/ResourceComparatorTest.php b/core/vendor/sebastian/comparator/tests/ResourceComparatorTest.php
index 9aea3ee6a349f025c6c0afdf3aa5eb124b618679..9e7b148c23b6fee39da929b2980d4595694c65f3 100644
--- a/core/vendor/sebastian/comparator/tests/ResourceComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/ResourceComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/ScalarComparatorTest.php b/core/vendor/sebastian/comparator/tests/ScalarComparatorTest.php
index a37e1c92da9a507fdcc96e48bf31302cfa37ffa1..3cea113066d38d53e4807e478c159a64be3b6832 100644
--- a/core/vendor/sebastian/comparator/tests/ScalarComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/ScalarComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/SplObjectStorageComparatorTest.php b/core/vendor/sebastian/comparator/tests/SplObjectStorageComparatorTest.php
index 40be43d138d3e2a98fe0ad7da4d877dce837c4e9..00b2d66ab3d60f578372ee024ff7970cf03ee5c6 100644
--- a/core/vendor/sebastian/comparator/tests/SplObjectStorageComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/SplObjectStorageComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -18,7 +51,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/TypeComparatorTest.php b/core/vendor/sebastian/comparator/tests/TypeComparatorTest.php
index 57ff39ede9178d9af21177ea3fd38b99795dfc70..94f0d0b3b52ab3291a0c4153b51df64f2b4bb62c 100644
--- a/core/vendor/sebastian/comparator/tests/TypeComparatorTest.php
+++ b/core/vendor/sebastian/comparator/tests/TypeComparatorTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Jeff Welch <whatthejeff@gmail.com>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -17,7 +50,7 @@
  *
  * @package    Comparator
  * @author     Jeff Welch <whatthejeff@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/_files/Author.php b/core/vendor/sebastian/comparator/tests/_files/Author.php
index d516955dd5aafca2df49c663386e9b19200e5eb2..a39c582e7e03ddba542b6ca5f37173fd9fd23569 100644
--- a/core/vendor/sebastian/comparator/tests/_files/Author.php
+++ b/core/vendor/sebastian/comparator/tests/_files/Author.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/_files/Book.php b/core/vendor/sebastian/comparator/tests/_files/Book.php
index 91b857103195b0ded3ab6de81ae8f78af4274c20..20de0b568549a81a1804e2edcdd4bb299307b2dd 100644
--- a/core/vendor/sebastian/comparator/tests/_files/Book.php
+++ b/core/vendor/sebastian/comparator/tests/_files/Book.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Bernhard Schussek <bschussek@2bepublished.at>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/_files/ClassWithToString.php b/core/vendor/sebastian/comparator/tests/_files/ClassWithToString.php
index e8e03bc7fe683ba91dad8bcb53a281da469522c2..38ece4e65cc9e488e7c8f2bc551e618ae2c2a813 100644
--- a/core/vendor/sebastian/comparator/tests/_files/ClassWithToString.php
+++ b/core/vendor/sebastian/comparator/tests/_files/ClassWithToString.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
diff --git a/core/vendor/sebastian/comparator/tests/_files/SampleClass.php b/core/vendor/sebastian/comparator/tests/_files/SampleClass.php
index de6476f226967b05706dcd9fcfbe322f376f580a..8c1a245d704ca159972126b3ca5f2d875c77adfe 100644
--- a/core/vendor/sebastian/comparator/tests/_files/SampleClass.php
+++ b/core/vendor/sebastian/comparator/tests/_files/SampleClass.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/_files/Struct.php b/core/vendor/sebastian/comparator/tests/_files/Struct.php
index 05615af4e4dc98252f52cc0ed718d806be656a1c..96ffe449cb5a608a28c19a7689ce276841473a90 100644
--- a/core/vendor/sebastian/comparator/tests/_files/Struct.php
+++ b/core/vendor/sebastian/comparator/tests/_files/Struct.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
@@ -15,7 +48,7 @@
  *
  * @package    Comparator
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/comparator
  */
diff --git a/core/vendor/sebastian/comparator/tests/_files/TestClass.php b/core/vendor/sebastian/comparator/tests/_files/TestClass.php
index e4c9b78ca6d4cbc1521b4d7fc777b20872bb2b3d..a0f711d2434e9084db09df68eab76687caa915eb 100644
--- a/core/vendor/sebastian/comparator/tests/_files/TestClass.php
+++ b/core/vendor/sebastian/comparator/tests/_files/TestClass.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
diff --git a/core/vendor/sebastian/comparator/tests/_files/TestClassComparator.php b/core/vendor/sebastian/comparator/tests/_files/TestClassComparator.php
index 52aac3fdf3a165d443b9746d289955e62ba4fe29..fbfc92a40e8e6dc9bbb220e00bebaf57d229c7a1 100644
--- a/core/vendor/sebastian/comparator/tests/_files/TestClassComparator.php
+++ b/core/vendor/sebastian/comparator/tests/_files/TestClassComparator.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Comparator package.
+/**
+ * Comparator
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package    Comparator
+ * @author     Bernhard Schussek <bschussek@2bepublished.at>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/comparator
  */
 
 namespace SebastianBergmann\Comparator;
diff --git a/core/vendor/sebastian/diff/.travis.yml b/core/vendor/sebastian/diff/.travis.yml
index c5ea677ff4b7b9f57e6f6252bf075f3d2ae91a7f..4309f78c6113f4075d49d7831477131aea500e68 100644
--- a/core/vendor/sebastian/diff/.travis.yml
+++ b/core/vendor/sebastian/diff/.travis.yml
@@ -1,7 +1,8 @@
 language: php
 
-install:
-  - travis_retry composer install --no-interaction --prefer-source
+before_script:
+  - composer self-update
+  - composer install --no-interaction --prefer-source --dev
 
 php:
   - 5.3.3
diff --git a/core/vendor/sebastian/diff/LICENSE b/core/vendor/sebastian/diff/LICENSE
index 0941c065ec0dc87ab6f1cb827acb23589de2ae40..2f61c4ff715f274b66d671c529b054beeb7b4fcb 100644
--- a/core/vendor/sebastian/diff/LICENSE
+++ b/core/vendor/sebastian/diff/LICENSE
@@ -1,6 +1,6 @@
 Diff
 
-Copyright (c) 2002-2015, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2002-2014, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/sebastian/diff/composer.json b/core/vendor/sebastian/diff/composer.json
index 3c04952d352562f2520db20ec0ba12992985d8f5..c6dbdfc367c2e1af1f55351fce609a8dda4cdfa8 100644
--- a/core/vendor/sebastian/diff/composer.json
+++ b/core/vendor/sebastian/diff/composer.json
@@ -27,7 +27,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "1.3-dev"
+            "dev-master": "1.2-dev"
         }
     }
 }
diff --git a/core/vendor/sebastian/diff/src/Chunk.php b/core/vendor/sebastian/diff/src/Chunk.php
index 79d13fc865a870a08bd8957d5d50708b1291ba9c..91ab7388feda09e6cd1cc215baa1a61207c938e2 100644
--- a/core/vendor/sebastian/diff/src/Chunk.php
+++ b/core/vendor/sebastian/diff/src/Chunk.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff;
@@ -14,7 +48,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kore Nordmann <mail@kore-nordmann.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
diff --git a/core/vendor/sebastian/diff/src/Diff.php b/core/vendor/sebastian/diff/src/Diff.php
index 45aaae6ff27593104e6d6e300bab900ca78109a7..3b5db8fdb38560fdc13da55baad35b802be34c8a 100644
--- a/core/vendor/sebastian/diff/src/Diff.php
+++ b/core/vendor/sebastian/diff/src/Diff.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff;
@@ -14,7 +48,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kore Nordmann <mail@kore-nordmann.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
diff --git a/core/vendor/sebastian/diff/src/Differ.php b/core/vendor/sebastian/diff/src/Differ.php
index 76630ed2205a48d6270e4c37e6ffb331ec5724ef..e7e5204d53280aed079b778cc0a254f4987676bb 100644
--- a/core/vendor/sebastian/diff/src/Differ.php
+++ b/core/vendor/sebastian/diff/src/Differ.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff;
@@ -20,7 +54,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kore Nordmann <mail@kore-nordmann.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
@@ -49,14 +83,6 @@ public function __construct($header = "--- Original\n+++ New\n")
      */
     public function diff($from, $to, LongestCommonSubsequence $lcs = null)
     {
-        if (!is_array($from) && !is_string($from)) {
-            $from = (string) $from;
-        }
-
-        if (!is_array($to) && !is_string($to)) {
-            $to = (string) $to;
-        }
-
         $buffer = $this->header;
         $diff   = $this->diffToArray($from, $to, $lcs);
 
diff --git a/core/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php b/core/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php
index 803647454129867a07415a126725677f7543941d..ed356fd4c3849a9c5032eb452ee8b3510a7ab227 100644
--- a/core/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php
+++ b/core/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff\LCS;
@@ -16,7 +50,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kore Nordmann <mail@kore-nordmann.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
diff --git a/core/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php b/core/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php
index 6213607a32931aded50bf1332ab789eccf95b23c..3abca36016e376f6f9a4c79f2006366ebdd2e8b1 100644
--- a/core/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php
+++ b/core/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff\LCS;
@@ -16,7 +50,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Denes Lados <lados.denes@gmail.com>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
diff --git a/core/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php b/core/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php
index b569586dd5bc062035c6f982cc5ebf2775566dd4..a6c0e855a1ff9830464c683b3f43747402a0659f 100644
--- a/core/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php
+++ b/core/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff\LCS;
@@ -16,7 +50,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kore Nordmann <mail@kore-nordmann.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
@@ -32,26 +66,24 @@ class TimeEfficientImplementation implements LongestCommonSubsequence
     public function calculate(array $from, array $to)
     {
         $common     = array();
+        $matrix     = array();
         $fromLength = count($from);
         $toLength   = count($to);
-        $width      = $fromLength + 1;
-        $matrix     = new \SplFixedArray($width * ($toLength + 1));
 
         for ($i = 0; $i <= $fromLength; ++$i) {
-            $matrix[$i] = 0;
+            $matrix[$i][0] = 0;
         }
 
         for ($j = 0; $j <= $toLength; ++$j) {
-            $matrix[$j * $width] = 0;
+            $matrix[0][$j] = 0;
         }
 
         for ($i = 1; $i <= $fromLength; ++$i) {
             for ($j = 1; $j <= $toLength; ++$j) {
-                $o = ($j * $width) + $i;
-                $matrix[$o] = max(
-                    $matrix[$o - 1],
-                    $matrix[$o - $width],
-                    $from[$i - 1] === $to[$j - 1] ? $matrix[$o - $width - 1] + 1 : 0
+                $matrix[$i][$j] = max(
+                    $matrix[$i-1][$j],
+                    $matrix[$i][$j-1],
+                    $from[$i-1] === $to[$j-1] ? $matrix[$i-1][$j-1] + 1 : 0
                 );
             }
         }
@@ -61,19 +93,16 @@ public function calculate(array $from, array $to)
 
         while ($i > 0 && $j > 0) {
             if ($from[$i-1] === $to[$j-1]) {
-                $common[] = $from[$i-1];
+                array_unshift($common, $from[$i-1]);
                 --$i;
                 --$j;
+            } elseif ($matrix[$i][$j-1] > $matrix[$i-1][$j]) {
+                --$j;
             } else {
-                $o = ($j * $width) + $i;
-                if ($matrix[$o - $width] > $matrix[$o - 1]) {
-                    --$j;
-                } else {
-                    --$i;
-                }
+                --$i;
             }
         }
 
-        return array_reverse($common);
+        return $common;
     }
 }
diff --git a/core/vendor/sebastian/diff/src/Line.php b/core/vendor/sebastian/diff/src/Line.php
index 28c66aa2a44e16db7c7fbd84d679acc5173c2c84..10455d2b4225d90cbb2606049ccc9302e620d79a 100644
--- a/core/vendor/sebastian/diff/src/Line.php
+++ b/core/vendor/sebastian/diff/src/Line.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff;
@@ -14,7 +48,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kore Nordmann <mail@kore-nordmann.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
diff --git a/core/vendor/sebastian/diff/src/Parser.php b/core/vendor/sebastian/diff/src/Parser.php
index 79e2413ebe10094225ba6cda9b4ba5e448b5fbb7..fc8abdc96dd04b54e5d3e7640bc4d8bcc2fcc39c 100644
--- a/core/vendor/sebastian/diff/src/Parser.php
+++ b/core/vendor/sebastian/diff/src/Parser.php
@@ -1,11 +1,45 @@
 <?php
-/*
- * This file is part of the Diff package.
+/**
+ * Diff
+ *
+ * Copyright (c) 2001-2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Diff
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @author     Kore Nordmann <mail@kore-nordmann.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/diff
  */
 
 namespace SebastianBergmann\Diff;
@@ -16,7 +50,7 @@
  * @package    Diff
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
  * @author     Kore Nordmann <mail@kore-nordmann.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2001-2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/diff
  */
@@ -46,9 +80,6 @@ public function parse($string)
                 $diff = new Diff($fromMatch['file'], $toMatch['file']);
                 ++$i;
             } else {
-                if (preg_match('/^(?:diff --git |index [\da-f\.]+|[+-]{3} [ab])/', $lines[$i])) {
-                    continue;
-                }
                 $collected[] = $lines[$i];
             }
         }
@@ -69,35 +100,46 @@ private function parseFileDiff(Diff $diff, array $lines)
     {
         $chunks = array();
 
-        foreach ($lines as $line) {
-            if (preg_match('/^@@\s+-(?P<start>\d+)(?:,\s*(?P<startrange>\d+))?\s+\+(?P<end>\d+)(?:,\s*(?P<endrange>\d+))?\s+@@/', $line, $match)) {
-                $chunk = new Chunk(
-                    $match['start'],
-                    isset($match['startrange']) ? max(1, $match['startrange']) : 1,
-                    $match['end'],
-                    isset($match['endrange']) ? max(1, $match['endrange']) : 1
-                );
-
-                $chunks[] = $chunk;
-                $diffLines = array();
-                continue;
+        while (count($lines)) {
+            while (!preg_match('(^@@\\s+-(?P<start>\\d+)(?:,\\s*(?P<startrange>\\d+))?\\s+\\+(?P<end>\\d+)(?:,\\s*(?P<endrange>\\d+))?\\s+@@)', $last = array_shift($lines), $match)) {
+                if ($last === null) {
+                    break 2;
+                }
             }
 
-            if (preg_match('/^(?P<type>[+ -])?(?P<line>.*)/', $line, $match)) {
-                $type = Line::UNCHANGED;
+            $chunk = new Chunk(
+                $match['start'],
+                isset($match['startrange']) ? max(1, $match['startrange']) : 1,
+                $match['end'],
+                isset($match['endrange']) ? max(1, $match['endrange']) : 1
+            );
 
-                if ($match['type'] == '+') {
-                    $type = Line::ADDED;
-                } elseif ($match['type'] == '-') {
-                    $type = Line::REMOVED;
-                }
+            $diffLines = array();
+            $last      = null;
+
+            while (count($lines) &&
+                  (preg_match('(^(?P<type>[+ -])?(?P<line>.*))', $last = array_shift($lines), $match) ||
+                  (strpos($last, '\\ No newline at end of file') === 0))) {
+                if (count($match)) {
+                    $type = Line::UNCHANGED;
 
-                $diffLines[] = new Line($type, $match['line']);
+                    if ($match['type'] == '+') {
+                        $type = Line::ADDED;
+                    } elseif ($match['type'] == '-') {
+                        $type = Line::REMOVED;
+                    }
 
-                if (isset($chunk)) {
-                    $chunk->setLines($diffLines);
+                    $diffLines[] = new Line($type, $match['line']);
                 }
             }
+
+            $chunk->setLines($diffLines);
+
+            $chunks[] = $chunk;
+
+            if ($last !== null) {
+                array_unshift($lines, $last);
+            }
         }
 
         $diff->setChunks($chunks);
diff --git a/core/vendor/sebastian/diff/tests/DifferTest.php b/core/vendor/sebastian/diff/tests/DifferTest.php
index a786325bc1b8beae1133a7e459df7563585fa218..317d54005868d6929ea034717cf9ee3a5261ceae 100644
GIT binary patch
delta 1856
zcmb_dL2lbd6a~8I!U4J|&`mZUS;dBIIcZmkftn&m(i9Y_&QO-Mq{xv(MC1r0Wx<Pr
zXUHLXfTGvw0SfdIeV>vd1@5w3kb{{&@4x^4<IF#gf8E{Q{k&OiF1lA&7j#8lwpifH
zL)UJe%WS!->1}dJ?{9D4UBAD5_fzNd-BokL0nU0&Z9qk(sZ9A~Ql94}Wzwvw%WS@_
zGh0wxq_nLJWd&7sTPCKRnP){@KGVXMdDWp^R<FpG?bmK=M#*iOEwUtLj1I-6p^Yi?
ztgaiA(x$XeS&Biuifg<KfYxif%Zeo>wn#JHRWS^2%uW5_z>Qw;tH>^n#1fk#dRx_~
zsg6OIk>k02GC(~Da?t>SpTgEzVmgS)Dq5pr20A5gtNfZ7WJ%U>mYeb@)ql}J+B0#E
zbWm}+g?9C-c}eMiV1)LtT>LQU)F#{96m=^<m(oRdELKWt^0+o-7O$&Q8`}P1^$2lp
zfb&`dgGK{`QxtJ-STb$qaaCt=K|ND0^SCG=?J1<~4<tT9Cyg!k=CWl)dHhUs!~TL7
zESVz3EMQCKmfISxX@#pRN<kVfJ>o2|zVBUS7xj*P!d1Y1RBcSc-oxIEO<BTqrr7(h
zsv219SW`5VnsnHYrj8PX@mPfq(i0x_W)uwtx#4)G<X{-lF!Vj4G&zBX*&tG~H;F=}
zna>+XWAmGK%?V~C9>+>(O`#$=8v7D>NT8e`l0r8fl7Z__JQ)l+1P}_sh*5kwk`Y3q
zu+!##xs}2`jf8TCKyrH0m(i@v*_Tm(d<@b@PKU;hiljU79Yy1b8i!gC7wAdt`i&z;
z!n*+pBqs47f{66c@qJFp5T}~MX&@9=ab7U>1gJVaU+j~iUQa6FMqJln#4solN`k20
zAw3qZ<bik;4HR+ItaHHC;@1hHuu7gYat1=v+mk*FbdcyPeb6U&qQr>FLliyf=}1PC
zNYEe*y;gZG)Pr<|{>T`9$nEIUL<{KeIg!)m2Mn~+ADK&Uq9v;c;*n5lGLB>zT%zw&
zXrx+U9BlVm#lrxf)*_*rF)%CAHl#z-p@5QTeX!TfVQDlB<F;*X&O(tE9*WK?ra%mQ
zIS_#>m{iC}Q>n!z8Yn?<09fY2*{2Rt!#_yRUIn@R@XXUt91SMfC&zmLj7Q-wZ8T%R
z7g`={)Qad14?Q^kANQL$`4le=A1jC3h3?}mezTINKHpvcK=)scRytiYSZU~fjRUs8
z?~G?v*P9RB?ryicu^UXbH_44Hm)%29)$M8T`p0W`9rJBN5snzl(3cs155~j+Tzq0w
sJZHd5{QukeO=9zIW#-@SPo??cQ0n43TKw_%>sNn%``z!azWMFqUoONlFaQ7m

literal 11371
zcmeHNZExC05YAWpD^@5{NPq-GAgRgqk|tEGl$IzV_X(+5>?K$Qo3odsxhVhrW_E33
zgN<<tSL^OvskrNTdFEwzW_Nq``*bu_jt&%ZKzbw7B|~$}2>ec|!-+j4e8k9=IUK@(
z{+&LsL!d<BlD<#w*nqm+q!#(WoQDauEOO@hW9J}vW|{oZVDCMikG3P^4QJyq(e3H8
zV?K;Hp_W0$rp_!EG+RU4nNV)pR)tK*jKbKX$({t?_2<jZ*Sij?7clvVa`Hr7Vwf&>
z%)yK^gFKmh1k_-HYtI~=fg(eoK2j8mPM8aZusL)ec^{2zE6NNM-h8^b2jt&AIzazq
zJKw+cn9DB#OIv&o?2a(^uP^WVU)aQUo;$;#shiB=pC@3$1YU$isoXtt!V-BEeN0_f
z1cNyUh_D}=S%$j;ukxZ0cy!wW^4rdr?jM~i@*AnQL&FzWS7J~N4|cDSt_BW4{-Xnk
zIX(yE{E<2y25;y{{7xP7k#a_M4e%p#JjSVGbEachhBHgYs1ld)`)O%kFiCVMco!p9
zeJ`0ovjri?h@d3={<;hVGL%jTbsYK({Ore6DDps&bNLzb!g?UPL&u&ZeByTS!JwSp
zIQFAyFh@%E{}qtv_9Js#gal7QB1qtxhSv1#3q+WS9}{UsDtNLyzt09RcjoTpkQhSa
zEt@*b^;54qL{OL1`oL}>XPCo`dlx(tQFE=k(S$8Y?*`7TNJqjCw-X`=Dast)`Ey3c
zZYj(d4zLWg=bDlTj*wXqagSh%0@~kCNe4gPn@<N0v+bv|;U7(d9w6RG7KFoy6KO;7
z-)P|ft?R(bg0jh#U_nt%)`A68|MAser8iQOVg2=BLC<n7{8KB!0+6-C?^WqF>T{~s
zE@v*cC!ZLFqABX<y~~W{{sn72G!5a-rL=c>f7k1NA)h)ISDo8Es9jPUbPis>6RDQL
zM{F&M5#IB2a(>>os<dyF2YstpiO_mIm#nI#J-SyRdxJe$pix$|Xij4~hTij(xn1b>
zo!*FAqJOxsj62ah38QZiX^h#js;@AkTCI{U^!cVm#{j-uCSTc8-|`JoVXVGv&~md-
zQY)k$XHo&1(*ky;(T)!T5*}YF5P~Pt@gYl4;>G86y1g6fK+B_Ppx$Mu@klAe`B>7G
zM6jTO`W?!?Qg~4cg<Zk!Cy=CV<2W>NvoVLn@+hkB1*MdODFrk!Q3&LNDk%bJ3tk(&
z2v7LNw|ptL9mZ#lCHvu0B=H1abO`e;VR-&Yq^QfrLrwEGCHv8gMpAsFBuM58>>H3=
zY*yxJAgLh3m)TKA1T4~mq{!F;Ujp!iVHD^C#5tG6AU&YZV9_AnBz-$J(Ye>x3X(pj
z&tMa3iG)Oi31meEHx(y3m^*$gqo^@w$Yd3;MJy0zp|r^8=IjdcX+5(-e#m52tW_Xv
zD^`U-Zqq7M6TvTIwJoc%=ingZh)mH+Fl>vK83xOoi6NG3)(K^?kpq#D@p;8a>xJf<
z{GYFb#gyhJzMGTT7nhQ6S`^bj3<L^&sRt7<Hd%4ffKX^`%ldM6>&?bEhrF#!qyqtO
zlwqxo_lcOlk?fKP-?p}=gF!5VL@aS`L4*;2>y?=_C<r1M3a(KRrC!{&0!26kuq68>
z0nK(i18`t1lHS4Jh5ecDi45!2+?DeMYiU;z-mk!FCHE1q7cuGB{EHdipgDzo!`azc
zr+ckXP1RmZt=8^p^%JeQVryK~8rqAiH5yuRX9d{~9t9TLt_ITVv2n<MaQs(8O=07<
z#{_5m0aG)DNgvIu?{2Y85u0blX`&UENL|#L!i*K71>KIz;jXLLHZ>LCAJ>wRgvf8H
z^}vv)fhMo;l;nXUcV9sRU?;gXAP&SIqxe({#-_!DbB+V&B!~DKh>Kc1EyPH+!{J;Y
z0NzRlE{Nfl3GSmr5`gwPJgTY|+pp-@l}Yy&M8fac5CIx|1fqKG5H)g!=+%$g#-~~H
z4bx1mWtnF!B+fL?PP5H3b)B{J7o_$76Ky!`$1Fy2=F6#{gNX*ISyt6L{E?83b2j%)
zt@-N_fs?A?xV7>J=_DVJu++jM3ft+ghvXH1AJMzqA%bF(hkir^O@s|=t>{QLUTf8p
zHxyee(ChcK*^8~<Sih+~*-}&ch8A)jvb;34VMO_8YQu<fQfr~o!e&G+kol;!VJGFF
z)-EjBIViQT4TpLr9tDms@G3NV4_PP_yn8u#D~Piz?-Zg?uc^n-I#g@Nq;{$`RjpP(
zY_-(W*6B(89VyouwHln&z*V$&0+GPbM21GqXMii~s#<A~vRXM7xAA2RB6KKyi+FuX
z{2MYhD=G+TRZa!xYI@Khd&7u0zZZhR@T-?dFuL+hfIq1;L3XRsk|0(xkg_*v;w8fg
f7rK20|7X`bZYu2tuj1qh&Z7zi{7c?DzbbzN(hb7J

diff --git a/core/vendor/sebastian/diff/tests/LCS/TimeEfficientImplementationTest.php b/core/vendor/sebastian/diff/tests/LCS/TimeEfficientImplementationTest.php
deleted file mode 100644
index babc407636e336853672a238dc97aec89ffd3f98..0000000000000000000000000000000000000000
--- a/core/vendor/sebastian/diff/tests/LCS/TimeEfficientImplementationTest.php
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-/*
- * This file is part of the Diff package.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace SebastianBergmann\Diff\LCS;
-
-use PHPUnit_Framework_TestCase;
-
-/**
- * Some of these tests are volontary stressfull, in order to give some approximative benchmark hints.
- */
-class TimeEfficientImplementationTest extends PHPUnit_Framework_TestCase
-{
-    private $implementation;
-    private $memory_limit;
-    private $stress_sizes = array(1, 2, 3, 100, 500, 1000, 2000);
-
-    protected function setUp()
-    {
-        $this->memory_limit = ini_get('memory_limit');
-        ini_set('memory_limit', '256M');
-
-        $this->implementation = new TimeEfficientImplementation;
-    }
-
-    protected function tearDown()
-    {
-        ini_set('memory_limit', $this->memory_limit);
-    }
-
-    public function testBothEmpty()
-    {
-        $from   = array();
-        $to     = array();
-        $common = $this->implementation->calculate($from, $to);
-
-        $this->assertEquals(array(), $common);
-    }
-
-    public function testIsStrictComparison()
-    {
-        $from = array(
-            false, 0, 0.0, '', null, array(),
-            true, 1, 1.0, 'foo', array('foo', 'bar'), array('foo' => 'bar')
-        );
-        $to = $from;
-        $common = $this->implementation->calculate($from, $to);
-
-        $this->assertEquals($from, $common);
-
-        $to = array(
-            false, false, false, false, false, false,
-            true, true, true, true, true, true
-        );
-        $expected = array(
-            false,
-            true,
-        );
-        $common = $this->implementation->calculate($from, $to);
-
-        $this->assertEquals($expected, $common);
-    }
-
-    public function testEqualSequences()
-    {
-        foreach ($this->stress_sizes as $size) {
-            $range  = range(1, $size);
-            $from   = $range;
-            $to     = $range;
-            $common = $this->implementation->calculate($from, $to);
-
-            $this->assertEquals($range, $common);
-        }
-    }
-
-    public function testDistinctSequences()
-    {
-        $from  = array('A');
-        $to    = array('B');
-        $common = $this->implementation->calculate($from, $to);
-        $this->assertEquals(array(), $common);
-
-        $from  = array('A', 'B', 'C');
-        $to    = array('D', 'E', 'F');
-        $common = $this->implementation->calculate($from, $to);
-        $this->assertEquals(array(), $common);
-
-        foreach ($this->stress_sizes as $size) {
-            $from  = range(1, $size);
-            $to    = range($size + 1, $size * 2);
-            $common = $this->implementation->calculate($from, $to);
-            $this->assertEquals(array(), $common);
-        }
-    }
-
-    public function testCommonSubsequence()
-    {
-        $from     = array('A',      'C',      'E', 'F', 'G'     );
-        $to       = array('A', 'B',      'D', 'E',           'H');
-        $expected = array('A',                'E'               );
-        $common   = $this->implementation->calculate($from, $to);
-        $this->assertEquals($expected, $common);
-
-        $from     = array('A',      'C',      'E', 'F', 'G'     );
-        $to       = array(     'B', 'C', 'D', 'E', 'F',      'H');
-        $expected = array('C',                'E', 'F'          );
-        $common   = $this->implementation->calculate($from, $to);
-        $this->assertEquals($expected, $common);
-
-        foreach ($this->stress_sizes as $size) {
-            $from     = $size < 2 ? array(1) : range(1, $size + 1, 2);
-            $to       = $size < 3 ? array(1) : range(1, $size + 1, 3);
-            $expected = $size < 6 ? array(1) : range(1, $size + 1, 6);
-            $common   = $this->implementation->calculate($from, $to);
-
-            $this->assertEquals($expected, $common);
-        }
-    }
-
-    public function testSingleElementSubsequenceAtStart()
-    {
-        foreach ($this->stress_sizes as $size) {
-            $from   = range(1, $size);
-            $to     = array_slice($from, 0, 1);
-            $common = $this->implementation->calculate($from, $to);
-
-            $this->assertEquals($to, $common);
-        }
-    }
-
-    public function testSingleElementSubsequenceAtMiddle()
-    {
-        foreach ($this->stress_sizes as $size) {
-            $from   = range(1, $size);
-            $to     = array_slice($from, (int) $size / 2, 1);
-            $common = $this->implementation->calculate($from, $to);
-
-            $this->assertEquals($to, $common);
-        }
-    }
-
-    public function testSingleElementSubsequenceAtEnd()
-    {
-        foreach ($this->stress_sizes as $size) {
-            $from   = range(1, $size);
-            $to     = array_slice($from, $size - 1, 1);
-            $common = $this->implementation->calculate($from, $to);
-
-            $this->assertEquals($to, $common);
-        }
-    }
-
-    public function testReversedSequences()
-    {
-        $from     = array('A', 'B');
-        $to       = array('B', 'A');
-        $expected = array('A');
-        $common   = $this->implementation->calculate($from, $to);
-        $this->assertEquals($expected, $common);
-
-        foreach ($this->stress_sizes as $size) {
-            $from   = range(1, $size);
-            $to     = array_reverse($from);
-            $common = $this->implementation->calculate($from, $to);
-
-            $this->assertEquals(array(1), $common);
-        }
-    }
-}
diff --git a/core/vendor/sebastian/diff/tests/ParserTest.php b/core/vendor/sebastian/diff/tests/ParserTest.php
deleted file mode 100644
index 3a7b97204f61a697d2e6599818042ee53ac055ff..0000000000000000000000000000000000000000
--- a/core/vendor/sebastian/diff/tests/ParserTest.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/*
- * This file is part of the Diff package.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace SebastianBergmann\Diff;
-
-use PHPUnit_Framework_TestCase;
-
-class ParserTest extends PHPUnit_Framework_TestCase
-{
-    /**
-     * @var Parser
-     */
-    private $parser;
-
-    protected function setUp()
-    {
-        $this->parser = new Parser;
-    }
-
-    public function testParse()
-    {
-        $content = file_get_contents(__DIR__ . '/fixtures/patch.txt');
-
-        $diffs = $this->parser->parse($content);
-
-        $this->assertCount(1, $diffs);
-
-        $chunks = $diffs[0]->getChunks();
-        $this->assertCount(1, $chunks);
-
-        $this->assertEquals(20, $chunks[0]->getStart());
-
-        $this->assertCount(5, $chunks[0]->getLines());
-    }
-
-    public function testParseWithMultipleChunks()
-    {
-        $content = file_get_contents(__DIR__ . '/fixtures/patch2.txt');
-
-        $diffs = $this->parser->parse($content);
-
-        $this->assertCount(1, $diffs);
-
-        $chunks = $diffs[0]->getChunks();
-        $this->assertCount(3, $chunks);
-
-        $this->assertEquals(20, $chunks[0]->getStart());
-        $this->assertEquals(320, $chunks[1]->getStart());
-        $this->assertEquals(600, $chunks[2]->getStart());
-
-        $this->assertCount(5, $chunks[0]->getLines());
-        $this->assertCount(5, $chunks[1]->getLines());
-        $this->assertCount(5, $chunks[2]->getLines());
-    }
-}
diff --git a/core/vendor/sebastian/diff/tests/fixtures/patch.txt b/core/vendor/sebastian/diff/tests/fixtures/patch.txt
deleted file mode 100644
index 144b61d0154364b464c0a664df6140ed7bcd9e19..0000000000000000000000000000000000000000
--- a/core/vendor/sebastian/diff/tests/fixtures/patch.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-diff --git a/Foo.php b/Foo.php
-index abcdefg..abcdefh 100644
---- a/Foo.php
-+++ b/Foo.php
-@@ -20,4 +20,5 @@ class Foo
-     const ONE = 1;
-     const TWO = 2;
-+    const THREE = 3;
-     const FOUR = 4;
diff --git a/core/vendor/sebastian/diff/tests/fixtures/patch2.txt b/core/vendor/sebastian/diff/tests/fixtures/patch2.txt
deleted file mode 100644
index 41fbc9597a481ab533fb0a02d7815bd1cfeddd34..0000000000000000000000000000000000000000
--- a/core/vendor/sebastian/diff/tests/fixtures/patch2.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/Foo.php b/Foo.php
-index abcdefg..abcdefh 100644
---- a/Foo.php
-+++ b/Foo.php
-@@ -20,4 +20,5 @@ class Foo
-     const ONE = 1;
-     const TWO = 2;
-+    const THREE = 3;
-     const FOUR = 4;
-
-@@ -320,4 +320,5 @@ class Foo
-     const A = 'A';
-     const B = 'B';
-+    const C = 'C';
-     const D = 'D';
-
-@@ -600,4 +600,5 @@ class Foo
-     public function doSomething() {
-
-+        return 'foo';
-     }
diff --git a/core/vendor/sebastian/environment/LICENSE b/core/vendor/sebastian/environment/LICENSE
index 08539af44db58ef4d5e0ceb5d1de1a0b8e1e9f6a..f2eec040989b0e95256ffe396941fd4e587dc0cd 100644
--- a/core/vendor/sebastian/environment/LICENSE
+++ b/core/vendor/sebastian/environment/LICENSE
@@ -1,6 +1,6 @@
 Environment
 
-Copyright (c) 2014-2015, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2014, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/sebastian/environment/composer.json b/core/vendor/sebastian/environment/composer.json
index fd3ec7dc3bce7365d682626fd2cc6e9fcb611408..15d81887b73690fc410b2470460ea2c0baf0641b 100644
--- a/core/vendor/sebastian/environment/composer.json
+++ b/core/vendor/sebastian/environment/composer.json
@@ -14,7 +14,7 @@
         "php": ">=5.3.3"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.4"
+        "phpunit/phpunit": "~4.3"
     },
     "autoload": {
         "classmap": [
@@ -23,7 +23,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "1.3.x-dev"
+            "dev-master": "1.2.x-dev"
         }
     }
 }
diff --git a/core/vendor/sebastian/environment/src/Console.php b/core/vendor/sebastian/environment/src/Console.php
index 287bce1e7eccd6eecb6d8a0920c89a23353971d7..3c7b7f9ebfb1e8b6f1a4f468b70f68e780dd8a29 100644
--- a/core/vendor/sebastian/environment/src/Console.php
+++ b/core/vendor/sebastian/environment/src/Console.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Environment package.
+/**
+ * Environment
+ *
+ * Copyright (c) 2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * @package    Environment
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/environment
  */
 
 namespace SebastianBergmann\Environment;
@@ -19,10 +52,6 @@
  */
 class Console
 {
-    const STDIN  = 0;
-    const STDOUT = 1;
-    const STDERR = 2;
-
     /**
      * Returns true if STDOUT supports colorization.
      *
@@ -37,11 +66,7 @@ public function hasColorSupport()
             return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI');
         }
 
-        if (!defined('STDOUT')) {
-            return false;
-        }
-
-        return $this->isInteractive(STDOUT);
+        return function_exists('posix_isatty') && @posix_isatty(STDOUT);
     }
 
     /**
@@ -57,10 +82,6 @@ public function getNumberOfColumns()
             return 79;
         }
 
-        if (!$this->isInteractive(self::STDIN)) {
-            return 80;
-        }
-
         if (preg_match('#\d+ (\d+)#', shell_exec('stty size'), $match) === 1) {
             return (int) $match[1];
         }
@@ -71,16 +92,4 @@ public function getNumberOfColumns()
 
         return 80;
     }
-
-    /**
-     * Returns if the file descriptor is an interactive terminal or not.
-     *
-     * @param  int|resource $fileDescriptor
-     *
-     * @return boolean
-     */
-    public function isInteractive($fileDescriptor = self::STDOUT)
-    {
-        return function_exists('posix_isatty') && @posix_isatty($fileDescriptor);
-    }
 }
diff --git a/core/vendor/sebastian/environment/src/Runtime.php b/core/vendor/sebastian/environment/src/Runtime.php
index 74f6e2c810e60616ca0c00ed8144f4149f7f9c1d..b241ca0d7c97324ab1a4ab04dca462896fb0037a 100644
--- a/core/vendor/sebastian/environment/src/Runtime.php
+++ b/core/vendor/sebastian/environment/src/Runtime.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Environment package.
+/**
+ * Environment
+ *
+ * Copyright (c) 2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * 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.
+ *
+ * @package    Environment
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/environment
  */
 
 namespace SebastianBergmann\Environment;
@@ -15,7 +48,7 @@
  *
  * @package    Environment
  * @author     Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright  Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2014 Sebastian Bergmann <sebastian@phpunit.de>
  * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link       http://www.github.com/sebastianbergmann/environment
  */
diff --git a/core/vendor/sebastian/environment/tests/ConsoleTest.php b/core/vendor/sebastian/environment/tests/ConsoleTest.php
index 6b40172b0cf1293dd749672fadcdc128514e4e6a..cb80a62c354919c94bf7eb60c7f20ce4a3b1d94f 100644
--- a/core/vendor/sebastian/environment/tests/ConsoleTest.php
+++ b/core/vendor/sebastian/environment/tests/ConsoleTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Environment package.
+/**
+ * Environment
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * Copyright (c) 2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package    Environment
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/environment
  */
 
 namespace SebastianBergmann\Environment;
@@ -25,24 +58,7 @@ protected function setUp()
     }
 
     /**
-     * @covers \SebastianBergmann\Environment\Console::isInteractive
-     */
-    public function testCanDetectIfStdoutIsInteractiveByDefault()
-    {
-        $this->assertInternalType('boolean', $this->console->isInteractive());
-    }
-
-    /**
-     * @covers \SebastianBergmann\Environment\Console::isInteractive
-     */
-    public function testCanDetectIfFileDescriptorIsInteractive()
-    {
-        $this->assertInternalType('boolean', $this->console->isInteractive(STDOUT));
-    }
-
-    /**
      * @covers \SebastianBergmann\Environment\Console::hasColorSupport
-     * @uses   \SebastianBergmann\Environment\Console::isInteractive
      */
     public function testCanDetectColorSupport()
     {
@@ -50,8 +66,7 @@ public function testCanDetectColorSupport()
     }
 
     /**
-     * @covers \SebastianBergmann\Environment\Console::getNumberOfColumns
-     * @uses   \SebastianBergmann\Environment\Console::isInteractive
+     * @covers \SebastianBergmann\Environment\Console::hasColorSupport
      */
     public function testCanDetectNumberOfColumns()
     {
diff --git a/core/vendor/sebastian/environment/tests/RuntimeTest.php b/core/vendor/sebastian/environment/tests/RuntimeTest.php
index 8ea8373056586a22e4aca160994ad695f391cac2..e86d6fa88cdc3d7d31521f7b9b841bcfd20ca860 100644
--- a/core/vendor/sebastian/environment/tests/RuntimeTest.php
+++ b/core/vendor/sebastian/environment/tests/RuntimeTest.php
@@ -1,11 +1,44 @@
 <?php
-/*
- * This file is part of the Environment package.
+/**
+ * Environment
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * Copyright (c) 2014, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
+ *
+ * @package    Environment
+ * @author     Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright  2014 Sebastian Bergmann <sebastian@phpunit.de>
+ * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+ * @link       http://www.github.com/sebastianbergmann/environment
  */
 
 namespace SebastianBergmann\Environment;
diff --git a/core/vendor/sebastian/version/.gitignore b/core/vendor/sebastian/version/.gitignore
index 7d07093152757bdf5ebe22df11ed10118a413a85..534971c4b4146a2f4177450031c7e432a2d9d0e0 100644
--- a/core/vendor/sebastian/version/.gitignore
+++ b/core/vendor/sebastian/version/.gitignore
@@ -7,4 +7,3 @@ build/phpdox
 build/SebastianBergmann
 build/*.tgz
 cache.properties
-/.idea
diff --git a/core/vendor/sebastian/version/ChangeLog.md b/core/vendor/sebastian/version/ChangeLog.md
index d01318e252870f14292f9d0d4d96b4bd555b124e..48d689247931688de8e4f7d9d19f3524c2f14424 100644
--- a/core/vendor/sebastian/version/ChangeLog.md
+++ b/core/vendor/sebastian/version/ChangeLog.md
@@ -1,19 +1,9 @@
-# Version 1.0
+Version 1.0
+===========
 
 This is the list of changes for the Version 1.0 release series.
 
-## Version 1.0.3
-
-* Only look for Git repository in the supplied path (and not in its parent directories).
-
-## Version 1.0.2
-
-* Errors from `exec()`uting the Git command are now suppressed.
-
-## Version 1.0.1
-
-* Fixed #2: `getVersion()` fails on Windows.
-
-## Version 1.0.0
+Version 1.0.0
+-------------
 
 * Initial release.
diff --git a/core/vendor/sebastian/version/LICENSE b/core/vendor/sebastian/version/LICENSE
index 5b79c41f6392cb6d2e583574c4a1db282bb34195..dd61d48f1c5e352e8fd5adb1cabcf7d44b3e7e79 100644
--- a/core/vendor/sebastian/version/LICENSE
+++ b/core/vendor/sebastian/version/LICENSE
@@ -1,6 +1,6 @@
 Version
 
-Copyright (c) 2013-2015, Sebastian Bergmann <sebastian@phpunit.de>.
+Copyright (c) 2013, Sebastian Bergmann <sebastian@phpunit.de>.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/core/vendor/sebastian/version/README.md b/core/vendor/sebastian/version/README.md
index be6b687b0f6eabbc577f93428bb245b9c4af77cb..3c2cfaca135a4a408de10cabcb528c0f3b8ccda6 100644
--- a/core/vendor/sebastian/version/README.md
+++ b/core/vendor/sebastian/version/README.md
@@ -4,7 +4,20 @@
 
 ## Installation
 
-Simply add a dependency on `sebastian/version` to your project's `composer.json` file if you use [Composer](http://getcomposer.org/) to manage the dependencies of your project.
+There are two supported ways of installing Version.
+
+You can use the [PEAR Installer](http://pear.php.net/manual/en/guide.users.commandline.cli.php) or [Composer](http://getcomposer.org/) to download and install Version.
+
+### PEAR Installer
+
+The following two commands (which you may have to run as `root`) are all that is required to install Version using the PEAR Installer:
+
+    pear config-set auto_discover 1
+    pear install pear.phpunit.de/Version
+
+### Composer
+
+To add Version as a local, per-project dependency to your project, simply add a dependency on `sebastian/version` to your project's `composer.json` file.
 
 ## Usage
 
@@ -33,5 +46,5 @@ When a new release is prepared, the string that is passed to the constructor as
 
 * If `$path` is not (part of) a Git repository and `$release` is in `X.Y.Z` format then `$release` is returned as-is.
 * If `$path` is not (part of) a Git repository and `$release` is in `X.Y` format then `$release` is returned suffixed with `-dev`.
-* If `$path` is (part of) a Git repository and `$release` is in `X.Y.Z` format then the output of `git describe --tags` is returned as-is.
+* If `$path` is (part of) a Git repository and `$release` is in `X.Y.Z` format then the output of `git describe --tags` is returned as is.
 * If `$path` is (part of) a Git repository and `$release` is in `X.Y` format then a string is returned that begins with `X.Y` and ends with information from `git describe --tags`.
diff --git a/core/vendor/sebastian/version/build.xml b/core/vendor/sebastian/version/build.xml
index 67f1d095ef4168f8ada996b474e48c1454abf453..6ffcb35fe921468a074deae797c45b2b0fbc0427 100644
--- a/core/vendor/sebastian/version/build.xml
+++ b/core/vendor/sebastian/version/build.xml
@@ -1,14 +1,51 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project name="version" default="build">
+
+<project name="Version" default="build">
  <property name="php" value="php"/>
  <property name="phpunit" value="phpunit"/>
 
- <target name="build" depends="prepare,lint,phpcs,phpunit"/>
+ <target name="build"
+   depends="prepare,lint,phploc,pdepend,phpmd-ci,phpcs-ci,phpcpd,phpunit,phpcb,phpdox"/>
+
+ <target name="build-parallel"
+   depends="prepare,lint,tools-parallel,phpunit,phpcb"/>
+
+ <target name="tools-parallel"
+         description="Run tools in parallel">
+  <parallel threadCount="2">
+   <sequential>
+    <antcall target="pdepend"/>
+    <antcall target="phpmd-ci"/>
+   </sequential>
+   <antcall target="phpcpd"/>
+   <antcall target="phpcs-ci"/>
+   <antcall target="phploc"/>
+  </parallel>
+ </target>
 
  <target name="clean" description="Cleanup build artifacts">
+  <delete dir="${basedir}/build/api"/>
+  <delete dir="${basedir}/build/code-browser"/>
+  <delete dir="${basedir}/build/coverage"/>
+  <delete dir="${basedir}/build/logs"/>
+  <delete dir="${basedir}/build/pdepend"/>
+  <delete dir="${basedir}/build/phpdox"/>
+  <delete dir="${basedir}/build/SebastianBergmann"/>
+  <delete file="${basedir}/build/ChangeLog.md"/>
+  <delete file="${basedir}/build/LICENSE"/>
+  <delete file="${basedir}/build/README.md"/>
+  <delete>
+   <fileset dir="${basedir}/build" includes="**/*.tgz"/>
+  </delete>
  </target>
 
- <target name="prepare" depends="clean,phpab" description="Prepare for build">
+ <target name="prepare" depends="clean,phpab"
+         description="Prepare for build">
+  <mkdir dir="${basedir}/build/api"/>
+  <mkdir dir="${basedir}/build/code-browser"/>
+  <mkdir dir="${basedir}/build/coverage"/>
+  <mkdir dir="${basedir}/build/logs"/>
+  <mkdir dir="${basedir}/build/pdepend"/>
  </target>
 
  <target name="phpab" description="Generate autoloader script">
@@ -35,12 +72,73 @@
   </apply>
  </target>
 
- <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer">
+ <target name="phploc" description="Measure project size using PHPLOC">
+  <exec executable="phploc">
+   <arg value="--log-csv" />
+   <arg path="${basedir}/build/logs/phploc.csv" />
+   <arg path="${basedir}/src" />
+  </exec>
+ </target>
+
+ <target name="pdepend"
+         description="Calculate software metrics using PHP_Depend">
+  <exec executable="pdepend">
+   <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
+   <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
+   <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
+   <arg path="${basedir}/src" />
+  </exec>
+ </target>
+
+ <target name="phpmd"
+         description="Perform project mess detection using PHPMD">
+  <exec executable="phpmd">
+   <arg path="${basedir}/src" />
+   <arg value="text" />
+   <arg path="${basedir}/build/phpmd.xml" />
+  </exec>
+ </target>
+
+ <target name="phpmd-ci"
+         description="Perform project mess detection using PHPMD">
+  <exec executable="phpmd">
+   <arg path="${basedir}/src" />
+   <arg value="xml" />
+   <arg path="${basedir}/build/phpmd.xml" />
+   <arg value="--reportfile" />
+   <arg path="${basedir}/build/logs/pmd.xml" />
+  </exec>
+ </target>
+
+ <target name="phpcs"
+         description="Find coding standard violations using PHP_CodeSniffer">
   <exec executable="phpcs">
-   <arg value="--standard=PSR2" />
+   <arg value="--standard=${basedir}/build/PHPCS" />
+   <arg value="--extensions=php" />
+   <arg value="--ignore=autoload.php" />
+   <arg path="${basedir}/src" />
+   <arg path="${basedir}/tests" />
+  </exec>
+ </target>
+
+ <target name="phpcs-ci"
+         description="Find coding standard violations using PHP_CodeSniffer">
+  <exec executable="phpcs" output="/dev/null">
+   <arg value="--report=checkstyle" />
+   <arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
+   <arg value="--standard=${basedir}/build/PHPCS" />
    <arg value="--extensions=php" />
    <arg value="--ignore=autoload.php" />
    <arg path="${basedir}/src" />
+   <arg path="${basedir}/tests" />
+  </exec>
+ </target>
+
+ <target name="phpcpd" description="Find duplicate code using PHPCPD">
+  <exec executable="phpcpd">
+   <arg value="--log-pmd" />
+   <arg path="${basedir}/build/logs/pmd-cpd.xml" />
+   <arg path="${basedir}/src" />
   </exec>
  </target>
 
@@ -57,6 +155,23 @@
   </exec>
  </target>
 
+ <target name="phpcb"
+         description="Aggregate tool output with PHP_CodeBrowser">
+  <exec executable="phpcb">
+   <arg value="--log" />
+   <arg path="${basedir}/build/logs" />
+   <arg value="--source" />
+   <arg path="${basedir}/src" />
+   <arg value="--output" />
+   <arg path="${basedir}/build/code-browser" />
+  </exec>
+ </target>
+
+ <target name="phpdox"
+         description="Generate API documentation using phpDox">
+  <exec executable="phpdox" dir="${basedir}/build"/>
+ </target>
+
  <target name="pear">
   <mkdir dir="${basedir}/build/SebastianBergmann/Version"/>
 
diff --git a/core/vendor/sebastian/version/build/PHPCS/Sniffs/ControlStructures/ControlSignatureSniff.php b/core/vendor/sebastian/version/build/PHPCS/Sniffs/ControlStructures/ControlSignatureSniff.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf9d520d3842e61c4602b5c46b5aaef140451248
--- /dev/null
+++ b/core/vendor/sebastian/version/build/PHPCS/Sniffs/ControlStructures/ControlSignatureSniff.php
@@ -0,0 +1,22 @@
+<?php
+class PHPCS_Sniffs_ControlStructures_ControlSignatureSniff extends PHP_CodeSniffer_Standards_AbstractPatternSniff
+{
+    public function __construct()
+    {
+        parent::__construct(true);
+    }
+
+    protected function getPatterns()
+    {
+        return array(
+          'do {EOL...} while (...);EOL',
+          'while (...) {EOL',
+          'for (...) {EOL',
+          'if (...) {EOL',
+          'foreach (...) {EOL',
+          '}EOLelse if (...) {EOL',
+          '}EOLelse {EOL',
+          'do {EOL',
+        );
+    }
+}
diff --git a/core/vendor/sebastian/version/build/PHPCS/Sniffs/Whitespace/ConcatenationSpacingSniff.php b/core/vendor/sebastian/version/build/PHPCS/Sniffs/Whitespace/ConcatenationSpacingSniff.php
new file mode 100644
index 0000000000000000000000000000000000000000..e91d6c6dd543832cfdb097d8430b656eb8d7ff0d
--- /dev/null
+++ b/core/vendor/sebastian/version/build/PHPCS/Sniffs/Whitespace/ConcatenationSpacingSniff.php
@@ -0,0 +1,22 @@
+<?php
+class PHPCS_Sniffs_Whitespace_ConcatenationSpacingSniff implements PHP_CodeSniffer_Sniff
+{
+    public function register()
+    {
+        return array(T_STRING_CONCAT);
+    }
+
+    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
+    {
+        $tokens = $phpcsFile->getTokens();
+
+        if ($tokens[($stackPtr - 1)]['code'] !== T_WHITESPACE ||
+            $tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE) {
+
+            $phpcsFile->addError(
+              'Concatenation operator must be surrounded by whitespace',
+              $stackPtr
+            );
+        }
+    }
+}
diff --git a/core/vendor/sebastian/version/build/PHPCS/ruleset.xml b/core/vendor/sebastian/version/build/PHPCS/ruleset.xml
new file mode 100644
index 0000000000000000000000000000000000000000..402f2140b598cc2774a08155070c91900996c87a
--- /dev/null
+++ b/core/vendor/sebastian/version/build/PHPCS/ruleset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<ruleset name="Sebastian">
+ <description>Sebastian Bergmann's coding standard</description>
+
+ <rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop"/>
+ <rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall"/>
+ <rule ref="Generic.CodeAnalysis.JumbledIncrementer"/>
+ <rule ref="Generic.CodeAnalysis.UnconditionalIfStatement"/>
+ <rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier"/>
+ <rule ref="Generic.CodeAnalysis.UselessOverridingMethod"/>
+
+ <rule ref="Generic.Commenting.Todo"/>
+
+ <rule ref="Generic.ControlStructures.InlineControlStructure"/>
+
+ <rule ref="Generic.Files.LineEndings"/>
+
+ <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
+ <rule ref="Generic.Formatting.NoSpaceAfterCast"/>
+
+ <rule ref="Generic.Functions.OpeningFunctionBraceBsdAllman"/>
+ <rule ref="PEAR.Functions.ValidDefaultValue"/>
+
+ <rule ref="Generic.NamingConventions.ConstructorName"/>
+ <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
+ <rule ref="PEAR.NamingConventions.ValidClassName"/>
+
+ <rule ref="Generic.PHP.DisallowShortOpenTag"/>
+ <rule ref="Generic.PHP.NoSilencedErrors"/>
+ <rule ref="Generic.PHP.UpperCaseConstant"/>
+
+ <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
+ <rule ref="Generic.WhiteSpace.ScopeIndent"/>
+ <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace"/>
+</ruleset>
diff --git a/core/vendor/sebastian/version/build/package.xml b/core/vendor/sebastian/version/build/package.xml
index 479da159367d36250ee180dfb9bfef5d0c31b3c0..0d158846f7a031edd5a53492b7ebab3f886095cc 100644
--- a/core/vendor/sebastian/version/build/package.xml
+++ b/core/vendor/sebastian/version/build/package.xml
@@ -17,9 +17,9 @@
   <email>sebastian@phpunit.de</email>
   <active>yes</active>
  </lead>
- <date>2014-03-07</date>
+ <date>2013-01-05</date>
  <version>
-  <release>1.0.3</release>
+  <release>1.0.0</release>
   <api>1.0.0</api>
  </version>
  <stability>
diff --git a/core/vendor/sebastian/version/build/phpdox.xml b/core/vendor/sebastian/version/build/phpdox.xml
new file mode 100644
index 0000000000000000000000000000000000000000..806ca93837f5dcf270edb9cb80f22ecbe0a623c1
--- /dev/null
+++ b/core/vendor/sebastian/version/build/phpdox.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<phpdox xmlns="http://phpdox.de/config">
+ <project name="Version" source="../src" workdir="phpdox">
+  <collector publiconly="false">
+   <include mask="*.php" />
+   <exclude mask="*autoload.php" />
+  </collector>
+
+  <generator output=".">
+   <build engine="html" enabled="true" output="api"/>
+  </generator>
+ </project>
+</phpdox>
diff --git a/core/vendor/sebastian/version/build/phpmd.xml b/core/vendor/sebastian/version/build/phpmd.xml
new file mode 100644
index 0000000000000000000000000000000000000000..23ecb8b0b6310c84cba60ba87378fa04aa7ee361
--- /dev/null
+++ b/core/vendor/sebastian/version/build/phpmd.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+
+<ruleset name="Sebastian"
+         xmlns="http://pmd.sf.net/ruleset/1.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
+         xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
+  <description>Sebastian Bergmann's ruleset</description>
+
+  <rule ref="rulesets/codesize.xml/CyclomaticComplexity" />
+  <rule ref="rulesets/codesize.xml/NPathComplexity" />
+  <rule ref="rulesets/codesize.xml/ExcessiveClassComplexity" />
+  <rule ref="rulesets/codesize.xml/ExcessiveClassLength" />
+  <rule ref="rulesets/codesize.xml/ExcessiveMethodLength" />
+  <rule ref="rulesets/codesize.xml/ExcessiveParameterList" />
+
+  <rule ref="rulesets/design.xml/EvalExpression" />
+  <rule ref="rulesets/design.xml/ExitExpression" />
+  <rule ref="rulesets/design.xml/GotoStatement" />
+
+  <rule ref="rulesets/naming.xml/ConstructorWithNameAsEnclosingClass" />
+
+  <rule ref="rulesets/unusedcode.xml/UnusedFormalParameter" />
+  <rule ref="rulesets/unusedcode.xml/UnusedLocalVariable" />
+  <rule ref="rulesets/unusedcode.xml/UnusedPrivateField" />
+  <rule ref="rulesets/unusedcode.xml/UnusedPrivateMethod" />
+</ruleset>
diff --git a/core/vendor/sebastian/version/src/Version.php b/core/vendor/sebastian/version/src/Version.php
index 0d93741c2ce518bb9c9a677b77b180d71fda5309..8d87c431f5a749441afa6fa4e69d5fc547a42427 100644
--- a/core/vendor/sebastian/version/src/Version.php
+++ b/core/vendor/sebastian/version/src/Version.php
@@ -1,87 +1,138 @@
 <?php
-/*
- * This file is part of the Version package.
+/**
+ * Copyright (c) 2013, Sebastian Bergmann <sebastian@phpunit.de>.
+ * All rights reserved.
  *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Sebastian Bergmann nor the names of his
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * 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.
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace SebastianBergmann;
-
-/**
  * @package   Version
  * @author    Sebastian Bergmann <sebastian@phpunit.de>
- * @copyright Sebastian Bergmann <sebastian@phpunit.de>
+ * @copyright 2013 Sebastian Bergmann <sebastian@phpunit.de>
  * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
  * @link      http://github.com/sebastianbergmann/version
- * @since     Class available since Release 1.0.0
+ * @since     File available since Release 1.0.0
  */
-class Version
-{
-    private $path;
-    private $release;
-    private $version;
-
-    /**
-     * @param string $release
-     * @param string $path
-     */
-    public function __construct($release, $path)
-    {
-        $this->release = $release;
-        $this->path    = $path;
-    }
 
+namespace SebastianBergmann
+{
     /**
-     * @return string
+     * @package   Version
+     * @author    Sebastian Bergmann <sebastian@phpunit.de>
+     * @copyright 2013 Sebastian Bergmann <sebastian@phpunit.de>
+     * @license   http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
+     * @link      http://github.com/sebastianbergmann/version
+     * @since     Class available since Release 1.0.0
      */
-    public function getVersion()
+    class Version
     {
-        if ($this->version === null) {
-            if (count(explode('.', $this->release)) == 3) {
-                $this->version = $this->release;
-            } else {
-                $this->version = $this->release . '-dev';
-            }
+        private $path;
+        private $release;
+        private $version;
 
-            $git = $this->getGitInformation($this->path);
+        /**
+         * @param string $release
+         * @param string $path
+         */
+        public function __construct($release, $path)
+        {
+            $this->release = $release;
+            $this->path    = $path;
+        }
 
-            if ($git) {
+        /**
+         * @return string
+         */
+        public function getVersion()
+        {
+            if ($this->version === NULL) {
                 if (count(explode('.', $this->release)) == 3) {
-                    $this->version = $git;
+                    $this->version = $this->release;
                 } else {
-                    $git = explode('-', $git);
+                    $this->version = $this->release . '-dev';
+                }
+
+                $git = $this->getGitInformation($this->path);
+
+                if ($git) {
+                    if (count(explode('.', $this->release)) == 3) {
+                        $this->version = $git;
+                    } else {
+                        $git = explode('-', $git);
 
-                    $this->version = $this->release . '-' . end($git);
+                        $this->version = $this->release . '-' . $git[2];
+                    }
                 }
             }
+
+            return $this->version;
         }
 
-        return $this->version;
-    }
+        /**
+         * @param  string $path
+         * @return boolean|string
+         */
+        private function getGitInformation($path)
+        {
+            if (!$this->isGitRepository($path)) {
+                return FALSE;
+            }
 
-    /**
-     * @param  string $path
-     * @return boolean|string
-     */
-    private function getGitInformation($path)
-    {
-        if (!is_dir($path . DIRECTORY_SEPARATOR . '.git')) {
-            return false;
-        }
+            $dir = getcwd();
+            chdir($path);
+            $result = exec('git describe --tags 2>&1', $output, $returnCode);
+            chdir($dir);
 
-        $dir = getcwd();
-        chdir($path);
-        $returnCode = 1;
-        $result = @exec('git describe --tags 2>&1', $output, $returnCode);
-        chdir($dir);
+            if ($returnCode !== 0) {
+                return FALSE;
+            }
 
-        if ($returnCode !== 0) {
-            return false;
+            return $result;
         }
 
-        return $result;
+        /**
+         * @param  string $path
+         * @return boolean
+         */
+        private function isGitRepository($path)
+        {
+            if (is_dir($path . DIRECTORY_SEPARATOR . '.git')) {
+                return TRUE;
+            }
+
+            $path = dirname($path);
+
+            if ($path == '/') {
+                return FALSE;
+            }
+
+            return $this->isGitRepository($path);
+        }
     }
 }
diff --git a/core/vendor/sebastian/version/src/autoload.php b/core/vendor/sebastian/version/src/autoload.php
index 20157ea6cb2f0a98406bbf07eccdbadc104235b4..93a266992f0f04cf388dd47faeda3d879e15c552 100644
--- a/core/vendor/sebastian/version/src/autoload.php
+++ b/core/vendor/sebastian/version/src/autoload.php
@@ -1,13 +1,4 @@
 <?php
-/*
- * This file is part of the Version package.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
 // @codingStandardsIgnoreFile
 // @codeCoverageIgnoreStart
 // this is an autogenerated file - do not edit
@@ -25,4 +16,4 @@ function($class) {
         }
     }
 );
-// @codeCoverageIgnoreEnd
+// @codeCoverageIgnoreEnd
\ No newline at end of file
diff --git a/core/vendor/stack/builder/.gitignore b/core/vendor/stack/builder/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..22d0d82f8095e9c0ed572776afb47f9ca293ce00
--- /dev/null
+++ b/core/vendor/stack/builder/.gitignore
@@ -0,0 +1 @@
+vendor
diff --git a/core/vendor/stack/builder/.travis.yml b/core/vendor/stack/builder/.travis.yml
deleted file mode 100644
index 1d50df4d17bbca867c1a938c10094e0031d2603b..0000000000000000000000000000000000000000
--- a/core/vendor/stack/builder/.travis.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-language: php
-
-php:
-  - 5.3.3
-  - 5.3
-  - 5.4
-  - 5.5
-  - hhvm
-
-before_script:
-  - composer self-update
-  - composer install --no-interaction --prefer-source
-
-script: phpunit --coverage-text
-
-matrix:
-  allow_failures:
-    - php: hhvm
-  fast_finish: true
diff --git a/core/vendor/stack/builder/CHANGELOG.md b/core/vendor/stack/builder/CHANGELOG.md
deleted file mode 100644
index f6f35d6d71c6bdf06660941fa285f8b1ec0cc6a5..0000000000000000000000000000000000000000
--- a/core/vendor/stack/builder/CHANGELOG.md
+++ /dev/null
@@ -1,14 +0,0 @@
-CHANGELOG
-=========
-
-* 1.0.2 (2014-xx-xx)
-
-  * Validate missing arguments (@bajbnet).
-
-* 1.0.1 (2013-10-25)
-
-  * Lower PHP requirement to 5.3.
-
-* 1.0.0 (2013-08-02)
-
-  * Initial release.
diff --git a/core/vendor/stack/builder/composer.json b/core/vendor/stack/builder/composer.json
index e9f164cccdabbef3dd1e8599c25a67c96f08ebb7..ca69952c0e2504a623c6a61a43361d342c00fb48 100644
--- a/core/vendor/stack/builder/composer.json
+++ b/core/vendor/stack/builder/composer.json
@@ -10,12 +10,12 @@
         }
     ],
     "require": {
-        "php": ">=5.3.0",
+        "php": ">=5.4.0",
         "symfony/http-foundation": "~2.1",
         "symfony/http-kernel": "~2.1"
     },
     "require-dev": {
-        "silex/silex": "~1.0"
+        "silex/silex": "1.0.*@dev"
     },
     "autoload": {
         "psr-0": { "Stack": "src" }
diff --git a/core/vendor/stack/builder/composer.lock b/core/vendor/stack/builder/composer.lock
index 26c6a994a7258d54ccb22551e2994f8b88eb82b8..5cb824b8369f1214e3b91bfa291f11c3ccd277ff 100644
--- a/core/vendor/stack/builder/composer.lock
+++ b/core/vendor/stack/builder/composer.lock
@@ -1,22 +1,18 @@
 {
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
-    ],
-    "hash": "78698481679eca710495d5aca028baaa",
+    "hash": "fbb187ada9fb0d5206c173fea45ff452",
     "packages": [
         {
             "name": "psr/log",
             "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+                "url": "https://github.com/php-fig/log",
+                "reference": "1.0.0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
-                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+                "url": "https://github.com/php-fig/log/archive/1.0.0.zip",
+                "reference": "1.0.0",
                 "shasum": ""
             },
             "type": "library",
@@ -44,89 +40,34 @@
             "time": "2012-12-21 11:40:51"
         },
         {
-            "name": "symfony/debug",
-            "version": "v2.4.1",
-            "target-dir": "Symfony/Component/Debug",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Debug.git",
-                "reference": "74110be5ec681a83fc5bd66dd5fd29fe85fe9c1f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Debug/zipball/74110be5ec681a83fc5bd66dd5fd29fe85fe9c1f",
-                "reference": "74110be5ec681a83fc5bd66dd5fd29fe85fe9c1f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "symfony/http-foundation": "~2.1",
-                "symfony/http-kernel": "~2.1"
-            },
-            "suggest": {
-                "symfony/http-foundation": "",
-                "symfony/http-kernel": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Symfony\\Component\\Debug\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "http://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Debug Component",
-            "homepage": "http://symfony.com",
-            "time": "2014-01-01 09:02:49"
-        },
-        {
             "name": "symfony/event-dispatcher",
-            "version": "v2.4.1",
+            "version": "v2.2.1",
             "target-dir": "Symfony/Component/EventDispatcher",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/EventDispatcher.git",
-                "reference": "e3ba42f6a70554ed05749e61b829550f6ac33601"
+                "reference": "v2.2.1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/e3ba42f6a70554ed05749e61b829550f6ac33601",
-                "reference": "e3ba42f6a70554ed05749e61b829550f6ac33601",
+                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/v2.2.1",
+                "reference": "v2.2.1",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~2.0"
+                "symfony/dependency-injection": ">=2.0,<3.0"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "symfony/dependency-injection": "2.2.*",
+                "symfony/http-kernel": "2.2.*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.2-dev"
                 }
             },
             "autoload": {
@@ -150,21 +91,21 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "http://symfony.com",
-            "time": "2013-12-28 08:12:03"
+            "time": "2013-02-11 11:26:43"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v2.4.1",
+            "version": "v2.2.1",
             "target-dir": "Symfony/Component/HttpFoundation",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpFoundation.git",
-                "reference": "6c6b8a7bcd7e2cc920cd6acace563fdbf121d844"
+                "reference": "v2.2.1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/6c6b8a7bcd7e2cc920cd6acace563fdbf121d844",
-                "reference": "6c6b8a7bcd7e2cc920cd6acace563fdbf121d844",
+                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/v2.2.1",
+                "reference": "v2.2.1",
                 "shasum": ""
             },
             "require": {
@@ -173,7 +114,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.2-dev"
                 }
             },
             "autoload": {
@@ -200,54 +141,52 @@
             ],
             "description": "Symfony HttpFoundation Component",
             "homepage": "http://symfony.com",
-            "time": "2014-01-05 02:10:50"
+            "time": "2013-04-06 10:15:43"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v2.4.1",
+            "version": "v2.2.1",
             "target-dir": "Symfony/Component/HttpKernel",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpKernel.git",
-                "reference": "0605eedeb52c4d3a3144128d8336395a57be60d4"
+                "reference": "v2.2.1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/0605eedeb52c4d3a3144128d8336395a57be60d4",
-                "reference": "0605eedeb52c4d3a3144128d8336395a57be60d4",
+                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/v2.2.1",
+                "reference": "v2.2.1",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3",
-                "psr/log": "~1.0",
-                "symfony/debug": "~2.3",
-                "symfony/event-dispatcher": "~2.1",
-                "symfony/http-foundation": "~2.4"
+                "psr/log": ">=1.0,<2.0",
+                "symfony/event-dispatcher": ">=2.1,<3.0",
+                "symfony/http-foundation": ">=2.2,<2.3-dev"
             },
             "require-dev": {
-                "symfony/browser-kit": "~2.2",
-                "symfony/class-loader": "~2.1",
-                "symfony/config": "~2.0",
-                "symfony/console": "~2.2",
-                "symfony/dependency-injection": "~2.0",
-                "symfony/finder": "~2.0",
-                "symfony/process": "~2.0",
-                "symfony/routing": "~2.2",
-                "symfony/stopwatch": "~2.2",
-                "symfony/templating": "~2.2"
+                "symfony/browser-kit": "2.2.*",
+                "symfony/class-loader": ">=2.1,<3.0",
+                "symfony/config": ">=2.0,<3.0",
+                "symfony/console": "2.2.*",
+                "symfony/dependency-injection": ">=2.0,<3.0",
+                "symfony/finder": ">=2.0,<3.0",
+                "symfony/process": ">=2.0,<3.0",
+                "symfony/routing": ">=2.2,<2.3-dev",
+                "symfony/stopwatch": ">=2.2,<2.3-dev"
             },
             "suggest": {
-                "symfony/browser-kit": "",
-                "symfony/class-loader": "",
-                "symfony/config": "",
-                "symfony/console": "",
-                "symfony/dependency-injection": "",
-                "symfony/finder": ""
+                "symfony/browser-kit": "2.2.*",
+                "symfony/class-loader": "2.2.*",
+                "symfony/config": "2.2.*",
+                "symfony/console": "2.2.*",
+                "symfony/dependency-injection": "2.2.*",
+                "symfony/finder": "2.2.*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.2-dev"
                 }
             },
             "autoload": {
@@ -271,22 +210,22 @@
             ],
             "description": "Symfony HttpKernel Component",
             "homepage": "http://symfony.com",
-            "time": "2014-01-05 02:12:11"
+            "time": "2013-04-06 10:16:33"
         }
     ],
     "packages-dev": [
         {
             "name": "pimple/pimple",
-            "version": "v1.1.0",
+            "version": "v1.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/fabpot/Pimple.git",
-                "reference": "471c7d7c52ad6594e17b8ec33efdd1be592b5d83"
+                "reference": "v1.0.2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/fabpot/Pimple/zipball/471c7d7c52ad6594e17b8ec33efdd1be592b5d83",
-                "reference": "471c7d7c52ad6594e17b8ec33efdd1be592b5d83",
+                "url": "https://api.github.com/repos/fabpot/Pimple/zipball/v1.0.2",
+                "reference": "v1.0.2",
                 "shasum": ""
             },
             "require": {
@@ -295,7 +234,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
@@ -319,63 +258,61 @@
                 "container",
                 "dependency injection"
             ],
-            "time": "2013-09-19 04:53:08"
+            "time": "2013-03-08 08:21:40"
         },
         {
             "name": "silex/silex",
-            "version": "v1.1.2",
+            "version": "dev-master",
             "source": {
                 "type": "git",
-                "url": "https://github.com/silexphp/Silex.git",
-                "reference": "47cc7d6545450ef8a91f50c04e8c7b3b04fceae9"
+                "url": "https://github.com/fabpot/Silex.git",
+                "reference": "7244eb8e5c3bff655291f6e3addc942b27c369ff"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/silexphp/Silex/zipball/47cc7d6545450ef8a91f50c04e8c7b3b04fceae9",
-                "reference": "47cc7d6545450ef8a91f50c04e8c7b3b04fceae9",
+                "url": "https://api.github.com/repos/fabpot/Silex/zipball/7244eb8e5c3bff655291f6e3addc942b27c369ff",
+                "reference": "7244eb8e5c3bff655291f6e3addc942b27c369ff",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3",
-                "pimple/pimple": "~1.0",
-                "symfony/event-dispatcher": ">=2.3,<2.5-dev",
-                "symfony/http-foundation": ">=2.3,<2.5-dev",
-                "symfony/http-kernel": ">=2.3,<2.5-dev",
-                "symfony/routing": ">=2.3,<2.5-dev"
+                "pimple/pimple": "1.*",
+                "symfony/event-dispatcher": ">=2.1,<2.4-dev",
+                "symfony/http-foundation": ">=2.1,<2.4-dev",
+                "symfony/http-kernel": ">=2.1,<2.4-dev",
+                "symfony/routing": ">=2.1,<2.4-dev"
             },
             "require-dev": {
                 "doctrine/dbal": ">=2.2.0,<2.4.0-dev",
-                "monolog/monolog": "~1.4,>=1.4.1",
-                "phpunit/phpunit": "~3.7",
-                "swiftmailer/swiftmailer": "5.*",
-                "symfony/browser-kit": ">=2.3,<2.5-dev",
-                "symfony/config": ">=2.3,<2.5-dev",
-                "symfony/css-selector": ">=2.3,<2.5-dev",
-                "symfony/debug": ">=2.3,<2.5-dev",
-                "symfony/dom-crawler": ">=2.3,<2.5-dev",
-                "symfony/finder": ">=2.3,<2.5-dev",
-                "symfony/form": ">=2.3,<2.5-dev",
-                "symfony/locale": ">=2.3,<2.5-dev",
-                "symfony/monolog-bridge": ">=2.3,<2.5-dev",
-                "symfony/options-resolver": ">=2.3,<2.5-dev",
-                "symfony/process": ">=2.3,<2.5-dev",
-                "symfony/security": ">=2.3,<2.5-dev",
-                "symfony/serializer": ">=2.3,<2.5-dev",
-                "symfony/translation": ">=2.3,<2.5-dev",
-                "symfony/twig-bridge": ">=2.3,<2.5-dev",
-                "symfony/validator": ">=2.3,<2.5-dev",
+                "monolog/monolog": ">=1.4,<2.0,>=1.4.1",
+                "swiftmailer/swiftmailer": "4.2.*",
+                "symfony/browser-kit": ">=2.1,<2.4-dev",
+                "symfony/config": ">=2.1,<2.4-dev",
+                "symfony/css-selector": ">=2.1,<2.4-dev",
+                "symfony/dom-crawler": ">=2.1,<2.4-dev",
+                "symfony/finder": ">=2.1,<2.4-dev",
+                "symfony/form": ">=2.1.4,<2.4-dev",
+                "symfony/locale": ">=2.1,<2.4-dev",
+                "symfony/monolog-bridge": ">=2.1,<2.4-dev",
+                "symfony/options-resolver": ">=2.1,<2.4-dev",
+                "symfony/process": ">=2.1,<2.4-dev",
+                "symfony/security": ">=2.1,<2.4-dev",
+                "symfony/serializer": ">=2.1,<2.4-dev",
+                "symfony/translation": ">=2.1,<2.4-dev",
+                "symfony/twig-bridge": ">=2.1,<2.4-dev",
+                "symfony/validator": ">=2.1,<2.4-dev",
                 "twig/twig": ">=1.8.0,<2.0-dev"
             },
             "suggest": {
-                "symfony/browser-kit": ">=2.3,<2.5-dev",
-                "symfony/css-selector": ">=2.3,<2.5-dev",
-                "symfony/dom-crawler": ">=2.3,<2.5-dev",
-                "symfony/form": ">=2.3,<2.5-dev"
+                "symfony/browser-kit": ">=2.1,<2.4-dev",
+                "symfony/css-selector": ">=2.1,<2.4-dev",
+                "symfony/dom-crawler": ">=2.1,<2.4-dev",
+                "symfony/form": ">= 2.1.4,<2.4-dev"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
@@ -403,43 +340,41 @@
             "keywords": [
                 "microframework"
             ],
-            "time": "2013-10-30 08:53:26"
+            "time": "2013-04-27 07:31:15"
         },
         {
             "name": "symfony/routing",
-            "version": "v2.4.1",
+            "version": "v2.2.1",
             "target-dir": "Symfony/Component/Routing",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Routing.git",
-                "reference": "4abfb500aab8be458c9e3a227ea56b190584f78a"
+                "reference": "v2.2.1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Routing/zipball/4abfb500aab8be458c9e3a227ea56b190584f78a",
-                "reference": "4abfb500aab8be458c9e3a227ea56b190584f78a",
+                "url": "https://api.github.com/repos/symfony/Routing/zipball/v2.2.1",
+                "reference": "v2.2.1",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
             "require-dev": {
-                "doctrine/annotations": "~1.0",
-                "psr/log": "~1.0",
-                "symfony/config": "~2.2",
-                "symfony/expression-language": "~2.4",
-                "symfony/yaml": "~2.0"
+                "doctrine/common": ">=2.2,<3.0",
+                "psr/log": ">=1.0,<2.0",
+                "symfony/config": ">=2.2,<2.3-dev",
+                "symfony/yaml": ">=2.0,<3.0"
             },
             "suggest": {
-                "doctrine/annotations": "For using the annotation loader",
-                "symfony/config": "For using the all-in-one router or any loader",
-                "symfony/expression-language": "For using expression matching",
-                "symfony/yaml": "For using the YAML loader"
+                "doctrine/common": "~2.2",
+                "symfony/config": "2.2.*",
+                "symfony/yaml": "2.2.*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.2-dev"
                 }
             },
             "autoload": {
@@ -463,24 +398,18 @@
             ],
             "description": "Symfony Routing Component",
             "homepage": "http://symfony.com",
-            "keywords": [
-                "router",
-                "routing",
-                "uri",
-                "url"
-            ],
-            "time": "2014-01-05 02:10:50"
+            "time": "2013-03-23 12:03:22"
         }
     ],
     "aliases": [
 
     ],
     "minimum-stability": "stable",
-    "stability-flags": [
-
-    ],
+    "stability-flags": {
+        "silex/silex": 20
+    },
     "platform": {
-        "php": ">=5.3.0"
+        "php": ">=5.4.0"
     },
     "platform-dev": [
 
diff --git a/core/vendor/stack/builder/src/Stack/Builder.php b/core/vendor/stack/builder/src/Stack/Builder.php
index c7ee05a196d4b1710295dac505c3b12478ef80af..06c9d195e969b358556e61e58ac5c7abbef0e431 100644
--- a/core/vendor/stack/builder/src/Stack/Builder.php
+++ b/core/vendor/stack/builder/src/Stack/Builder.php
@@ -15,10 +15,6 @@ public function __construct()
 
     public function unshift(/*$kernelClass, $args...*/)
     {
-        if (func_num_args() === 0) {
-            throw new \InvalidArgumentException("Missing argument(s) when calling unshift");
-        }
-
         $spec = func_get_args();
         $this->specs->unshift($spec);
 
@@ -27,10 +23,6 @@ public function unshift(/*$kernelClass, $args...*/)
 
     public function push(/*$kernelClass, $args...*/)
     {
-        if (func_num_args() === 0) {
-            throw new \InvalidArgumentException("Missing argument(s) when calling push");
-        }
-
         $spec = func_get_args();
         $this->specs->push($spec);
 
@@ -39,7 +31,7 @@ public function push(/*$kernelClass, $args...*/)
 
     public function resolve(HttpKernelInterface $app)
     {
-        $middlewares = array($app);
+        $middlewares = [$app];
 
         foreach ($this->specs as $spec) {
             $args = $spec;
diff --git a/core/vendor/stack/builder/src/Stack/StackedHttpKernel.php b/core/vendor/stack/builder/src/Stack/StackedHttpKernel.php
index 2b96dd95209645ac0d43e63d5d45cf80329a1347..39635552d85ead24a5570282f42896626c53090a 100644
--- a/core/vendor/stack/builder/src/Stack/StackedHttpKernel.php
+++ b/core/vendor/stack/builder/src/Stack/StackedHttpKernel.php
@@ -10,7 +10,7 @@
 class StackedHttpKernel implements HttpKernelInterface, TerminableInterface
 {
     private $app;
-    private $middlewares = array();
+    private $middlewares = [];
 
     public function __construct(HttpKernelInterface $app, array $middlewares)
     {
diff --git a/core/vendor/stack/builder/tests/functional/SilexApplicationTest.php b/core/vendor/stack/builder/tests/functional/SilexApplicationTest.php
index 5636336a8478c49bc49905d9e325552eb0205eae..82bb127a81ab10b781515215bdcfdaa450c9a377 100644
--- a/core/vendor/stack/builder/tests/functional/SilexApplicationTest.php
+++ b/core/vendor/stack/builder/tests/functional/SilexApplicationTest.php
@@ -23,8 +23,7 @@ public function testWithAppendMiddlewares()
             $finished = true;
         });
 
-        $stack = new Builder();
-        $stack
+        $stack = (new Builder())
             ->push('functional\Append', '.A')
             ->push('functional\Append', '.B');
 
diff --git a/core/vendor/stack/builder/tests/unit/Stack/BuilderTest.php b/core/vendor/stack/builder/tests/unit/Stack/BuilderTest.php
index 4092d01a54fd393d7def6e2f98b725e59d61b69e..33227a5ca77338fddc9497013e3d0acf4f26b9b7 100644
--- a/core/vendor/stack/builder/tests/unit/Stack/BuilderTest.php
+++ b/core/vendor/stack/builder/tests/unit/Stack/BuilderTest.php
@@ -48,14 +48,6 @@ public function pushShouldReturnSelf()
     }
 
     /** @test */
-    public function pushShouldThrowOnInvalidInput()
-    {
-        $this->setExpectedException('InvalidArgumentException', 'Missing argument(s) when calling push');
-        $stack = new Builder();
-        $stack->push();
-    }
-
-    /** @test */
     public function unshiftShouldReturnSelf()
     {
         $stack = new Builder();
@@ -63,14 +55,6 @@ public function unshiftShouldReturnSelf()
     }
 
     /** @test */
-    public function unshiftShouldThrowOnInvalidInput()
-    {
-        $this->setExpectedException('InvalidArgumentException', 'Missing argument(s) when calling unshift');
-        $stack = new Builder();
-        $stack->unshift();
-    }
-
-    /** @test */
     public function appendMiddlewareShouldAppendToBody()
     {
         $app = $this->getHttpKernelMock(new Response('ok'));
diff --git a/core/vendor/stack/builder/tests/unit/Stack/StackedHttpKernelTest.php b/core/vendor/stack/builder/tests/unit/Stack/StackedHttpKernelTest.php
index e2ced544afa4a05a56cfd8805b91278d157623c1..3d877d35eb87a16e262695e4951adc16d0412c33 100644
--- a/core/vendor/stack/builder/tests/unit/Stack/StackedHttpKernelTest.php
+++ b/core/vendor/stack/builder/tests/unit/Stack/StackedHttpKernelTest.php
@@ -13,7 +13,7 @@ class StackedHttpKernelTest extends \PHPUnit_Framework_TestCase
     public function handleShouldDelegateToApp()
     {
         $app = $this->getHttpKernelMock(new Response('ok'));
-        $kernel = new StackedHttpKernel($app, array($app));
+        $kernel = new StackedHttpKernel($app, [$app]);
 
         $request = Request::create('/');
         $response = $kernel->handle($request);
@@ -27,7 +27,7 @@ public function handleShouldStillDelegateToAppWithMiddlewares()
         $app = $this->getHttpKernelMock(new Response('ok'));
         $foo = $this->getHttpKernelMock(new Response('foo'));
         $bar = $this->getHttpKernelMock(new Response('bar'));
-        $kernel = new StackedHttpKernel($app, array($app, $foo, $bar));
+        $kernel = new StackedHttpKernel($app, [$app, $foo, $bar]);
 
         $request = Request::create('/');
         $response = $kernel->handle($request);
@@ -41,7 +41,7 @@ public function terminateShouldDelegateToMiddlewares()
         $app = $this->getTerminableMock(new Response('ok'));
         $foo = $this->getTerminableMock();
         $bar = $this->getTerminableMock();
-        $kernel = new StackedHttpKernel($app, array($app, $foo, $bar));
+        $kernel = new StackedHttpKernel($app, [$app, $foo, $bar]);
 
         $request = Request::create('/');
         $response = $kernel->handle($request);
diff --git a/core/vendor/symfony-cmf/routing/.gitignore b/core/vendor/symfony-cmf/routing/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..c089b09520c224f7fedcfcef90e5cbd3e4199c33
--- /dev/null
+++ b/core/vendor/symfony-cmf/routing/.gitignore
@@ -0,0 +1,3 @@
+phpunit.xml
+composer.lock
+/vendor/
diff --git a/core/vendor/symfony/browser-kit/.gitignore b/core/vendor/symfony/browser-kit/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/browser-kit/CHANGELOG.md b/core/vendor/symfony/browser-kit/CHANGELOG.md
deleted file mode 100644
index d2b1074029fd1b7255812e962a0a414c09e01000..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/CHANGELOG.md
+++ /dev/null
@@ -1,18 +0,0 @@
-CHANGELOG
-=========
-
-2.3.0
------
-
- * [BC BREAK] `Client::followRedirect()` won't redirect responses with
-   a non-3xx Status Code and `Location` header anymore, as per 
-   http://tools.ietf.org/html/rfc2616#section-14.30
-
- * added `Client::getInternalRequest()` and `Client::getInternalResponse()` to
-   have access to the BrowserKit internal request and response objects
-
-2.1.0
------
-
- * [BC BREAK] The CookieJar internals have changed to allow cookies with the
-   same name on different sub-domains/sub-paths
diff --git a/core/vendor/symfony/browser-kit/Client.php b/core/vendor/symfony/browser-kit/Client.php
deleted file mode 100644
index f41f156ac4cec4d22a7437c9f05e3d4471a02bd1..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Client.php
+++ /dev/null
@@ -1,619 +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\BrowserKit;
-
-use Symfony\Component\DomCrawler\Crawler;
-use Symfony\Component\DomCrawler\Link;
-use Symfony\Component\DomCrawler\Form;
-use Symfony\Component\Process\PhpProcess;
-
-/**
- * Client simulates a browser.
- *
- * To make the actual request, you need to implement the doRequest() method.
- *
- * If you want to be able to run requests in their own process (insulated flag),
- * you need to also implement the getScript() method.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-abstract class Client
-{
-    protected $history;
-    protected $cookieJar;
-    protected $server = array();
-    protected $internalRequest;
-    protected $request;
-    protected $internalResponse;
-    protected $response;
-    protected $crawler;
-    protected $insulated = false;
-    protected $redirect;
-    protected $followRedirects = true;
-
-    private $maxRedirects = -1;
-    private $redirectCount = 0;
-    private $isMainRequest = true;
-
-    /**
-     * Constructor.
-     *
-     * @param array     $server    The server parameters (equivalent of $_SERVER)
-     * @param History   $history   A History instance to store the browser history
-     * @param CookieJar $cookieJar A CookieJar instance to store the cookies
-     *
-     * @api
-     */
-    public function __construct(array $server = array(), History $history = null, CookieJar $cookieJar = null)
-    {
-        $this->setServerParameters($server);
-        $this->history = $history ?: new History();
-        $this->cookieJar = $cookieJar ?: new CookieJar();
-    }
-
-    /**
-     * Sets whether to automatically follow redirects or not.
-     *
-     * @param bool $followRedirect Whether to follow redirects
-     *
-     * @api
-     */
-    public function followRedirects($followRedirect = true)
-    {
-        $this->followRedirects = (bool) $followRedirect;
-    }
-
-    /**
-     * Sets the maximum number of requests that crawler can follow.
-     *
-     * @param int $maxRedirects
-     */
-    public function setMaxRedirects($maxRedirects)
-    {
-        $this->maxRedirects = $maxRedirects < 0 ? -1 : $maxRedirects;
-        $this->followRedirects = -1 != $this->maxRedirects;
-    }
-
-    /**
-     * Sets the insulated flag.
-     *
-     * @param bool $insulated Whether to insulate the requests or not
-     *
-     * @throws \RuntimeException When Symfony Process Component is not installed
-     *
-     * @api
-     */
-    public function insulate($insulated = true)
-    {
-        if ($insulated && !class_exists('Symfony\\Component\\Process\\Process')) {
-            throw new \RuntimeException('Unable to isolate requests as the Symfony Process Component is not installed.');
-        }
-
-        $this->insulated = (bool) $insulated;
-    }
-
-    /**
-     * Sets server parameters.
-     *
-     * @param array $server An array of server parameters
-     *
-     * @api
-     */
-    public function setServerParameters(array $server)
-    {
-        $this->server = array_merge(array(
-            'HTTP_HOST' => 'localhost',
-            'HTTP_USER_AGENT' => 'Symfony2 BrowserKit',
-        ), $server);
-    }
-
-    /**
-     * Sets single server parameter.
-     *
-     * @param string $key   A key of the parameter
-     * @param string $value A value of the parameter
-     */
-    public function setServerParameter($key, $value)
-    {
-        $this->server[$key] = $value;
-    }
-
-    /**
-     * Gets single server parameter for specified key.
-     *
-     * @param string $key     A key of the parameter to get
-     * @param string $default A default value when key is undefined
-     *
-     * @return string A value of the parameter
-     */
-    public function getServerParameter($key, $default = '')
-    {
-        return (isset($this->server[$key])) ? $this->server[$key] : $default;
-    }
-
-    /**
-     * Returns the History instance.
-     *
-     * @return History A History instance
-     *
-     * @api
-     */
-    public function getHistory()
-    {
-        return $this->history;
-    }
-
-    /**
-     * Returns the CookieJar instance.
-     *
-     * @return CookieJar A CookieJar instance
-     *
-     * @api
-     */
-    public function getCookieJar()
-    {
-        return $this->cookieJar;
-    }
-
-    /**
-     * Returns the current Crawler instance.
-     *
-     * @return Crawler|null A Crawler instance
-     *
-     * @api
-     */
-    public function getCrawler()
-    {
-        return $this->crawler;
-    }
-
-    /**
-     * Returns the current BrowserKit Response instance.
-     *
-     * @return Response|null A BrowserKit Response instance
-     *
-     * @api
-     */
-    public function getInternalResponse()
-    {
-        return $this->internalResponse;
-    }
-
-    /**
-     * Returns the current origin response instance.
-     *
-     * The origin response is the response instance that is returned
-     * by the code that handles requests.
-     *
-     * @return object|null A response instance
-     *
-     * @see doRequest()
-     *
-     * @api
-     */
-    public function getResponse()
-    {
-        return $this->response;
-    }
-
-    /**
-     * Returns the current BrowserKit Request instance.
-     *
-     * @return Request|null A BrowserKit Request instance
-     *
-     * @api
-     */
-    public function getInternalRequest()
-    {
-        return $this->internalRequest;
-    }
-
-    /**
-     * Returns the current origin Request instance.
-     *
-     * The origin request is the request instance that is sent
-     * to the code that handles requests.
-     *
-     * @return object|null A Request instance
-     *
-     * @see doRequest()
-     *
-     * @api
-     */
-    public function getRequest()
-    {
-        return $this->request;
-    }
-
-    /**
-     * Clicks on a given link.
-     *
-     * @param Link $link A Link instance
-     *
-     * @return Crawler
-     *
-     * @api
-     */
-    public function click(Link $link)
-    {
-        if ($link instanceof Form) {
-            return $this->submit($link);
-        }
-
-        return $this->request($link->getMethod(), $link->getUri());
-    }
-
-    /**
-     * Submits a form.
-     *
-     * @param Form  $form   A Form instance
-     * @param array $values An array of form field values
-     *
-     * @return Crawler
-     *
-     * @api
-     */
-    public function submit(Form $form, array $values = array())
-    {
-        $form->setValues($values);
-
-        return $this->request($form->getMethod(), $form->getUri(), $form->getPhpValues(), $form->getPhpFiles());
-    }
-
-    /**
-     * Calls a URI.
-     *
-     * @param string $method        The request method
-     * @param string $uri           The URI to fetch
-     * @param array  $parameters    The Request parameters
-     * @param array  $files         The files
-     * @param array  $server        The server parameters (HTTP headers are referenced with a HTTP_ prefix as PHP does)
-     * @param string $content       The raw body data
-     * @param bool   $changeHistory Whether to update the history or not (only used internally for back(), forward(), and reload())
-     *
-     * @return Crawler
-     *
-     * @api
-     */
-    public function request($method, $uri, array $parameters = array(), array $files = array(), array $server = array(), $content = null, $changeHistory = true)
-    {
-        if ($this->isMainRequest) {
-            $this->redirectCount = 0;
-        } else {
-            ++$this->redirectCount;
-        }
-
-        $uri = $this->getAbsoluteUri($uri);
-
-        if (!empty($server['HTTP_HOST'])) {
-            $uri = preg_replace('{^(https?\://)'.preg_quote($this->extractHost($uri)).'}', '${1}'.$server['HTTP_HOST'], $uri);
-        }
-
-        if (isset($server['HTTPS'])) {
-            $uri = preg_replace('{^'.parse_url($uri, PHP_URL_SCHEME).'}', $server['HTTPS'] ? 'https' : 'http', $uri);
-        }
-
-        $server = array_merge($this->server, $server);
-
-        if (!$this->history->isEmpty()) {
-            $server['HTTP_REFERER'] = $this->history->current()->getUri();
-        }
-
-        $server['HTTP_HOST'] = $this->extractHost($uri);
-        $server['HTTPS'] = 'https' == parse_url($uri, PHP_URL_SCHEME);
-
-        $this->internalRequest = new Request($uri, $method, $parameters, $files, $this->cookieJar->allValues($uri), $server, $content);
-
-        $this->request = $this->filterRequest($this->internalRequest);
-
-        if (true === $changeHistory) {
-            $this->history->add($this->internalRequest);
-        }
-
-        if ($this->insulated) {
-            $this->response = $this->doRequestInProcess($this->request);
-        } else {
-            $this->response = $this->doRequest($this->request);
-        }
-
-        $this->internalResponse = $this->filterResponse($this->response);
-
-        $this->cookieJar->updateFromResponse($this->internalResponse, $uri);
-
-        $status = $this->internalResponse->getStatus();
-
-        if ($status >= 300 && $status < 400) {
-            $this->redirect = $this->internalResponse->getHeader('Location');
-        } else {
-            $this->redirect = null;
-        }
-
-        if ($this->followRedirects && $this->redirect) {
-            return $this->crawler = $this->followRedirect();
-        }
-
-        return $this->crawler = $this->createCrawlerFromContent($this->internalRequest->getUri(), $this->internalResponse->getContent(), $this->internalResponse->getHeader('Content-Type'));
-    }
-
-    /**
-     * Makes a request in another process.
-     *
-     * @param object $request An origin request instance
-     *
-     * @return object An origin response instance
-     *
-     * @throws \RuntimeException When processing returns exit code
-     */
-    protected function doRequestInProcess($request)
-    {
-        // We set the TMPDIR (for Macs) and TEMP (for Windows), because on these platforms the temp directory changes based on the user.
-        $process = new PhpProcess($this->getScript($request), null, array('TMPDIR' => sys_get_temp_dir(), 'TEMP' => sys_get_temp_dir()));
-        $process->run();
-
-        if (!$process->isSuccessful() || !preg_match('/^O\:\d+\:/', $process->getOutput())) {
-            throw new \RuntimeException(sprintf('OUTPUT: %s ERROR OUTPUT: %s', $process->getOutput(), $process->getErrorOutput()));
-        }
-
-        return unserialize($process->getOutput());
-    }
-
-    /**
-     * Makes a request.
-     *
-     * @param object $request An origin request instance
-     *
-     * @return object An origin response instance
-     */
-    abstract protected function doRequest($request);
-
-    /**
-     * Returns the script to execute when the request must be insulated.
-     *
-     * @param object $request An origin request instance
-     *
-     * @throws \LogicException When this abstract class is not implemented
-     */
-    protected function getScript($request)
-    {
-        throw new \LogicException('To insulate requests, you need to override the getScript() method.');
-    }
-
-    /**
-     * Filters the BrowserKit request to the origin one.
-     *
-     * @param Request $request The BrowserKit Request to filter
-     *
-     * @return object An origin request instance
-     */
-    protected function filterRequest(Request $request)
-    {
-        return $request;
-    }
-
-    /**
-     * Filters the origin response to the BrowserKit one.
-     *
-     * @param object $response The origin response to filter
-     *
-     * @return Response An BrowserKit Response instance
-     */
-    protected function filterResponse($response)
-    {
-        return $response;
-    }
-
-    /**
-     * Creates a crawler.
-     *
-     * This method returns null if the DomCrawler component is not available.
-     *
-     * @param string $uri     A URI
-     * @param string $content Content for the crawler to use
-     * @param string $type    Content type
-     *
-     * @return Crawler|null
-     */
-    protected function createCrawlerFromContent($uri, $content, $type)
-    {
-        if (!class_exists('Symfony\Component\DomCrawler\Crawler')) {
-            return;
-        }
-
-        $crawler = new Crawler(null, $uri);
-        $crawler->addContent($content, $type);
-
-        return $crawler;
-    }
-
-    /**
-     * Goes back in the browser history.
-     *
-     * @return Crawler
-     *
-     * @api
-     */
-    public function back()
-    {
-        return $this->requestFromRequest($this->history->back(), false);
-    }
-
-    /**
-     * Goes forward in the browser history.
-     *
-     * @return Crawler
-     *
-     * @api
-     */
-    public function forward()
-    {
-        return $this->requestFromRequest($this->history->forward(), false);
-    }
-
-    /**
-     * Reloads the current browser.
-     *
-     * @return Crawler
-     *
-     * @api
-     */
-    public function reload()
-    {
-        return $this->requestFromRequest($this->history->current(), false);
-    }
-
-    /**
-     * Follow redirects?
-     *
-     * @return Crawler
-     *
-     * @throws \LogicException If request was not a redirect
-     *
-     * @api
-     */
-    public function followRedirect()
-    {
-        if (empty($this->redirect)) {
-            throw new \LogicException('The request was not redirected.');
-        }
-
-        if (-1 !== $this->maxRedirects) {
-            if ($this->redirectCount > $this->maxRedirects) {
-                throw new \LogicException(sprintf('The maximum number (%d) of redirections was reached.', $this->maxRedirects));
-            }
-        }
-
-        $request = $this->internalRequest;
-
-        if (in_array($this->internalResponse->getStatus(), array(302, 303))) {
-            $method = 'get';
-            $files = array();
-            $content = null;
-        } else {
-            $method = $request->getMethod();
-            $files = $request->getFiles();
-            $content = $request->getContent();
-        }
-
-        if ('get' === strtolower($method)) {
-            // Don't forward parameters for GET request as it should reach the redirection URI
-            $parameters = array();
-        } else {
-            $parameters = $request->getParameters();
-        }
-
-        $server = $request->getServer();
-        $server = $this->updateServerFromUri($server, $this->redirect);
-
-        $this->isMainRequest = false;
-
-        $response = $this->request($method, $this->redirect, $parameters, $files, $server, $content);
-
-        $this->isMainRequest = true;
-
-        return $response;
-    }
-
-    /**
-     * Restarts the client.
-     *
-     * It flushes history and all cookies.
-     *
-     * @api
-     */
-    public function restart()
-    {
-        $this->cookieJar->clear();
-        $this->history->clear();
-    }
-
-    /**
-     * Takes a URI and converts it to absolute if it is not already absolute.
-     *
-     * @param string $uri A URI
-     *
-     * @return string An absolute URI
-     */
-    protected function getAbsoluteUri($uri)
-    {
-        // already absolute?
-        if (0 === strpos($uri, 'http://') || 0 === strpos($uri, 'https://')) {
-            return $uri;
-        }
-
-        if (!$this->history->isEmpty()) {
-            $currentUri = $this->history->current()->getUri();
-        } else {
-            $currentUri = sprintf('http%s://%s/',
-                isset($this->server['HTTPS']) ? 's' : '',
-                isset($this->server['HTTP_HOST']) ? $this->server['HTTP_HOST'] : 'localhost'
-            );
-        }
-
-        // protocol relative URL
-        if (0 === strpos($uri, '//')) {
-            return parse_url($currentUri, PHP_URL_SCHEME).':'.$uri;
-        }
-
-        // anchor?
-        if (!$uri || '#' == $uri[0]) {
-            return preg_replace('/#.*?$/', '', $currentUri).$uri;
-        }
-
-        if ('/' !== $uri[0]) {
-            $path = parse_url($currentUri, PHP_URL_PATH);
-
-            if ('/' !== substr($path, -1)) {
-                $path = substr($path, 0, strrpos($path, '/') + 1);
-            }
-
-            $uri = $path.$uri;
-        }
-
-        return preg_replace('#^(.*?//[^/]+)\/.*$#', '$1', $currentUri).$uri;
-    }
-
-    /**
-     * Makes a request from a Request object directly.
-     *
-     * @param Request $request       A Request instance
-     * @param bool    $changeHistory Whether to update the history or not (only used internally for back(), forward(), and reload())
-     *
-     * @return Crawler
-     */
-    protected function requestFromRequest(Request $request, $changeHistory = true)
-    {
-        return $this->request($request->getMethod(), $request->getUri(), $request->getParameters(), $request->getFiles(), $request->getServer(), $request->getContent(), $changeHistory);
-    }
-
-    private function updateServerFromUri($server, $uri)
-    {
-        $server['HTTP_HOST'] = $this->extractHost($uri);
-        $scheme = parse_url($uri, PHP_URL_SCHEME);
-        $server['HTTPS'] = null === $scheme ? $server['HTTPS'] : 'https' == $scheme;
-        unset($server['HTTP_IF_NONE_MATCH'], $server['HTTP_IF_MODIFIED_SINCE']);
-
-        return $server;
-    }
-
-    private function extractHost($uri)
-    {
-        $host = parse_url($uri, PHP_URL_HOST);
-
-        if ($port = parse_url($uri, PHP_URL_PORT)) {
-            return $host.':'.$port;
-        }
-
-        return $host;
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Cookie.php b/core/vendor/symfony/browser-kit/Cookie.php
deleted file mode 100644
index e690cdacd51140a889d32bac26233d01418c8e11..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Cookie.php
+++ /dev/null
@@ -1,335 +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\BrowserKit;
-
-/**
- * Cookie represents an HTTP cookie.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class Cookie
-{
-    /**
-     * Handles dates as defined by RFC 2616 section 3.3.1, and also some other
-     * non-standard, but common formats.
-     *
-     * @var array
-     */
-    private static $dateFormats = array(
-        'D, d M Y H:i:s T',
-        'D, d-M-y H:i:s T',
-        'D, d-M-Y H:i:s T',
-        'D, d-m-y H:i:s T',
-        'D, d-m-Y H:i:s T',
-        'D M j G:i:s Y',
-        'D M d H:i:s Y T',
-    );
-
-    protected $name;
-    protected $value;
-    protected $expires;
-    protected $path;
-    protected $domain;
-    protected $secure;
-    protected $httponly;
-    protected $rawValue;
-
-    /**
-     * Sets a cookie.
-     *
-     * @param string $name         The cookie name
-     * @param string $value        The value of the cookie
-     * @param string $expires      The time the cookie expires
-     * @param string $path         The path on the server in which the cookie will be available on
-     * @param string $domain       The domain that the cookie is available
-     * @param bool   $secure       Indicates that the cookie should only be transmitted over a secure HTTPS connection from the client
-     * @param bool   $httponly     The cookie httponly flag
-     * @param bool   $encodedValue Whether the value is encoded or not
-     *
-     * @api
-     */
-    public function __construct($name, $value, $expires = null, $path = null, $domain = '', $secure = false, $httponly = true, $encodedValue = false)
-    {
-        if ($encodedValue) {
-            $this->value = urldecode($value);
-            $this->rawValue = $value;
-        } else {
-            $this->value = $value;
-            $this->rawValue = urlencode($value);
-        }
-        $this->name = $name;
-        $this->path = empty($path) ? '/' : $path;
-        $this->domain = $domain;
-        $this->secure = (bool) $secure;
-        $this->httponly = (bool) $httponly;
-
-        if (null !== $expires) {
-            $timestampAsDateTime = \DateTime::createFromFormat('U', $expires);
-            if (false === $timestampAsDateTime) {
-                throw new \UnexpectedValueException(sprintf('The cookie expiration time "%s" is not valid.', $expires));
-            }
-
-            $this->expires = $timestampAsDateTime->getTimestamp();
-        }
-    }
-
-    /**
-     * Returns the HTTP representation of the Cookie.
-     *
-     * @return string The HTTP representation of the Cookie
-     *
-     * @throws \UnexpectedValueException
-     *
-     * @api
-     */
-    public function __toString()
-    {
-        $cookie = sprintf('%s=%s', $this->name, $this->rawValue);
-
-        if (null !== $this->expires) {
-            $dateTime = \DateTime::createFromFormat('U', $this->expires, new \DateTimeZone('GMT'));
-            $cookie .= '; expires='.str_replace('+0000', '', $dateTime->format(self::$dateFormats[0]));
-        }
-
-        if ('' !== $this->domain) {
-            $cookie .= '; domain='.$this->domain;
-        }
-
-        if ($this->path) {
-            $cookie .= '; path='.$this->path;
-        }
-
-        if ($this->secure) {
-            $cookie .= '; secure';
-        }
-
-        if ($this->httponly) {
-            $cookie .= '; httponly';
-        }
-
-        return $cookie;
-    }
-
-    /**
-     * Creates a Cookie instance from a Set-Cookie header value.
-     *
-     * @param string $cookie A Set-Cookie header value
-     * @param string $url    The base URL
-     *
-     * @return Cookie A Cookie instance
-     *
-     * @throws \InvalidArgumentException
-     *
-     * @api
-     */
-    public static function fromString($cookie, $url = null)
-    {
-        $parts = explode(';', $cookie);
-
-        if (false === strpos($parts[0], '=')) {
-            throw new \InvalidArgumentException(sprintf('The cookie string "%s" is not valid.', $parts[0]));
-        }
-
-        list($name, $value) = explode('=', array_shift($parts), 2);
-
-        $values = array(
-            'name' => trim($name),
-            'value' => trim($value),
-            'expires' => null,
-            'path' => '/',
-            'domain' => '',
-            'secure' => false,
-            'httponly' => false,
-            'passedRawValue' => true,
-        );
-
-        if (null !== $url) {
-            if ((false === $urlParts = parse_url($url)) || !isset($urlParts['host'])) {
-                throw new \InvalidArgumentException(sprintf('The URL "%s" is not valid.', $url));
-            }
-
-            $values['domain'] = $urlParts['host'];
-            $values['path'] = isset($urlParts['path']) ? substr($urlParts['path'], 0, strrpos($urlParts['path'], '/')) : '';
-        }
-
-        foreach ($parts as $part) {
-            $part = trim($part);
-
-            if ('secure' === strtolower($part)) {
-                // Ignore the secure flag if the original URI is not given or is not HTTPS
-                if (!$url || !isset($urlParts['scheme']) || 'https' != $urlParts['scheme']) {
-                    continue;
-                }
-
-                $values['secure'] = true;
-
-                continue;
-            }
-
-            if ('httponly' === strtolower($part)) {
-                $values['httponly'] = true;
-
-                continue;
-            }
-
-            if (2 === count($elements = explode('=', $part, 2))) {
-                if ('expires' === strtolower($elements[0])) {
-                    $elements[1] = self::parseDate($elements[1]);
-                }
-
-                $values[strtolower($elements[0])] = $elements[1];
-            }
-        }
-
-        return new static(
-            $values['name'],
-            $values['value'],
-            $values['expires'],
-            $values['path'],
-            $values['domain'],
-            $values['secure'],
-            $values['httponly'],
-            $values['passedRawValue']
-        );
-    }
-
-    private static function parseDate($dateValue)
-    {
-        // trim single quotes around date if present
-        if (($length = strlen($dateValue)) > 1 && "'" === $dateValue[0] && "'" === $dateValue[$length - 1]) {
-            $dateValue = substr($dateValue, 1, -1);
-        }
-
-        foreach (self::$dateFormats as $dateFormat) {
-            if (false !== $date = \DateTime::createFromFormat($dateFormat, $dateValue, new \DateTimeZone('GMT'))) {
-                return $date->getTimestamp();
-            }
-        }
-
-        // attempt a fallback for unusual formatting
-        if (false !== $date = date_create($dateValue, new \DateTimeZone('GMT'))) {
-            return $date->getTimestamp();
-        }
-
-        throw new \InvalidArgumentException(sprintf('Could not parse date "%s".', $dateValue));
-    }
-
-    /**
-     * Gets the name of the cookie.
-     *
-     * @return string The cookie name
-     *
-     * @api
-     */
-    public function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     * Gets the value of the cookie.
-     *
-     * @return string The cookie value
-     *
-     * @api
-     */
-    public function getValue()
-    {
-        return $this->value;
-    }
-
-    /**
-     * Gets the raw value of the cookie.
-     *
-     * @return string The cookie value
-     *
-     * @api
-     */
-    public function getRawValue()
-    {
-        return $this->rawValue;
-    }
-
-    /**
-     * Gets the expires time of the cookie.
-     *
-     * @return string The cookie expires time
-     *
-     * @api
-     */
-    public function getExpiresTime()
-    {
-        return $this->expires;
-    }
-
-    /**
-     * Gets the path of the cookie.
-     *
-     * @return string The cookie path
-     *
-     * @api
-     */
-    public function getPath()
-    {
-        return $this->path;
-    }
-
-    /**
-     * Gets the domain of the cookie.
-     *
-     * @return string The cookie domain
-     *
-     * @api
-     */
-    public function getDomain()
-    {
-        return $this->domain;
-    }
-
-    /**
-     * Returns the secure flag of the cookie.
-     *
-     * @return bool The cookie secure flag
-     *
-     * @api
-     */
-    public function isSecure()
-    {
-        return $this->secure;
-    }
-
-    /**
-     * Returns the httponly flag of the cookie.
-     *
-     * @return bool The cookie httponly flag
-     *
-     * @api
-     */
-    public function isHttpOnly()
-    {
-        return $this->httponly;
-    }
-
-    /**
-     * Returns true if the cookie has expired.
-     *
-     * @return bool true if the cookie has expired, false otherwise
-     *
-     * @api
-     */
-    public function isExpired()
-    {
-        return null !== $this->expires && 0 !== $this->expires && $this->expires < time();
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/CookieJar.php b/core/vendor/symfony/browser-kit/CookieJar.php
deleted file mode 100644
index 1a36818d0213be266e25a1ccbd76ae2881f8ea6b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/CookieJar.php
+++ /dev/null
@@ -1,265 +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\BrowserKit;
-
-/**
- * CookieJar.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class CookieJar
-{
-    protected $cookieJar = array();
-
-    /**
-     * Sets a cookie.
-     *
-     * @param Cookie $cookie A Cookie instance
-     *
-     * @api
-     */
-    public function set(Cookie $cookie)
-    {
-        $this->cookieJar[$cookie->getDomain()][$cookie->getPath()][$cookie->getName()] = $cookie;
-    }
-
-    /**
-     * Gets a cookie by name.
-     *
-     * You should never use an empty domain, but if you do so,
-     * this method returns the first cookie for the given name/path
-     * (this behavior ensures a BC behavior with previous versions of
-     * Symfony).
-     *
-     * @param string $name   The cookie name
-     * @param string $path   The cookie path
-     * @param string $domain The cookie domain
-     *
-     * @return Cookie|null A Cookie instance or null if the cookie does not exist
-     *
-     * @api
-     */
-    public function get($name, $path = '/', $domain = null)
-    {
-        $this->flushExpiredCookies();
-
-        if (!empty($domain)) {
-            foreach ($this->cookieJar as $cookieDomain => $pathCookies) {
-                if ($cookieDomain) {
-                    $cookieDomain = '.'.ltrim($cookieDomain, '.');
-                    if ($cookieDomain != substr('.'.$domain, -strlen($cookieDomain))) {
-                        continue;
-                    }
-                }
-
-                foreach ($pathCookies as $cookiePath => $namedCookies) {
-                    if ($cookiePath != substr($path, 0, strlen($cookiePath))) {
-                        continue;
-                    }
-                    if (isset($namedCookies[$name])) {
-                        return $namedCookies[$name];
-                    }
-                }
-            }
-
-            return;
-        }
-
-        // avoid relying on this behavior that is mainly here for BC reasons
-        foreach ($this->cookieJar as $cookies) {
-            if (isset($cookies[$path][$name])) {
-                return $cookies[$path][$name];
-            }
-        }
-    }
-
-    /**
-     * Removes a cookie by name.
-     *
-     * You should never use an empty domain, but if you do so,
-     * all cookies for the given name/path expire (this behavior
-     * ensures a BC behavior with previous versions of Symfony).
-     *
-     * @param string $name   The cookie name
-     * @param string $path   The cookie path
-     * @param string $domain The cookie domain
-     *
-     * @api
-     */
-    public function expire($name, $path = '/', $domain = null)
-    {
-        if (null === $path) {
-            $path = '/';
-        }
-
-        if (empty($domain)) {
-            // an empty domain means any domain
-            // this should never happen but it allows for a better BC
-            $domains = array_keys($this->cookieJar);
-        } else {
-            $domains = array($domain);
-        }
-
-        foreach ($domains as $domain) {
-            unset($this->cookieJar[$domain][$path][$name]);
-
-            if (empty($this->cookieJar[$domain][$path])) {
-                unset($this->cookieJar[$domain][$path]);
-
-                if (empty($this->cookieJar[$domain])) {
-                    unset($this->cookieJar[$domain]);
-                }
-            }
-        }
-    }
-
-    /**
-     * Removes all the cookies from the jar.
-     *
-     * @api
-     */
-    public function clear()
-    {
-        $this->cookieJar = array();
-    }
-
-    /**
-     * Updates the cookie jar from a response Set-Cookie headers.
-     *
-     * @param array  $setCookies Set-Cookie headers from an HTTP response
-     * @param string $uri        The base URL
-     */
-    public function updateFromSetCookie(array $setCookies, $uri = null)
-    {
-        $cookies = array();
-
-        foreach ($setCookies as $cookie) {
-            foreach (explode(',', $cookie) as $i => $part) {
-                if (0 === $i || preg_match('/^(?P<token>\s*[0-9A-Za-z!#\$%\&\'\*\+\-\.^_`\|~]+)=/', $part)) {
-                    $cookies[] = ltrim($part);
-                } else {
-                    $cookies[count($cookies) - 1] .= ','.$part;
-                }
-            }
-        }
-
-        foreach ($cookies as $cookie) {
-            try {
-                $this->set(Cookie::fromString($cookie, $uri));
-            } catch (\InvalidArgumentException $e) {
-                // invalid cookies are just ignored
-            }
-        }
-    }
-
-    /**
-     * Updates the cookie jar from a Response object.
-     *
-     * @param Response $response A Response object
-     * @param string   $uri      The base URL
-     */
-    public function updateFromResponse(Response $response, $uri = null)
-    {
-        $this->updateFromSetCookie($response->getHeader('Set-Cookie', false), $uri);
-    }
-
-    /**
-     * Returns not yet expired cookies.
-     *
-     * @return Cookie[] An array of cookies
-     */
-    public function all()
-    {
-        $this->flushExpiredCookies();
-
-        $flattenedCookies = array();
-        foreach ($this->cookieJar as $path) {
-            foreach ($path as $cookies) {
-                foreach ($cookies as $cookie) {
-                    $flattenedCookies[] = $cookie;
-                }
-            }
-        }
-
-        return $flattenedCookies;
-    }
-
-    /**
-     * Returns not yet expired cookie values for the given URI.
-     *
-     * @param string $uri             A URI
-     * @param bool   $returnsRawValue Returns raw value or urldecoded value
-     *
-     * @return array An array of cookie values
-     */
-    public function allValues($uri, $returnsRawValue = false)
-    {
-        $this->flushExpiredCookies();
-
-        $parts = array_replace(array('path' => '/'), parse_url($uri));
-        $cookies = array();
-        foreach ($this->cookieJar as $domain => $pathCookies) {
-            if ($domain) {
-                $domain = '.'.ltrim($domain, '.');
-                if ($domain != substr('.'.$parts['host'], -strlen($domain))) {
-                    continue;
-                }
-            }
-
-            foreach ($pathCookies as $path => $namedCookies) {
-                if ($path != substr($parts['path'], 0, strlen($path))) {
-                    continue;
-                }
-
-                foreach ($namedCookies as $cookie) {
-                    if ($cookie->isSecure() && 'https' != $parts['scheme']) {
-                        continue;
-                    }
-
-                    $cookies[$cookie->getName()] = $returnsRawValue ? $cookie->getRawValue() : $cookie->getValue();
-                }
-            }
-        }
-
-        return $cookies;
-    }
-
-    /**
-     * Returns not yet expired raw cookie values for the given URI.
-     *
-     * @param string $uri A URI
-     *
-     * @return array An array of cookie values
-     */
-    public function allRawValues($uri)
-    {
-        return $this->allValues($uri, true);
-    }
-
-    /**
-     * Removes all expired cookies.
-     */
-    public function flushExpiredCookies()
-    {
-        foreach ($this->cookieJar as $domain => $pathCookies) {
-            foreach ($pathCookies as $path => $namedCookies) {
-                foreach ($namedCookies as $name => $cookie) {
-                    if ($cookie->isExpired()) {
-                        unset($this->cookieJar[$domain][$path][$name]);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/History.php b/core/vendor/symfony/browser-kit/History.php
deleted file mode 100644
index 8e38fe5ca8711f7d4f4e326f79f314831e359be0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/History.php
+++ /dev/null
@@ -1,102 +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\BrowserKit;
-
-/**
- * History.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-class History
-{
-    protected $stack = array();
-    protected $position = -1;
-
-    /**
-     * Clears the history.
-     */
-    public function clear()
-    {
-        $this->stack = array();
-        $this->position = -1;
-    }
-
-    /**
-     * Adds a Request to the history.
-     *
-     * @param Request $request A Request instance
-     */
-    public function add(Request $request)
-    {
-        $this->stack = array_slice($this->stack, 0, $this->position + 1);
-        $this->stack[] = clone $request;
-        $this->position = count($this->stack) - 1;
-    }
-
-    /**
-     * Returns true if the history is empty.
-     *
-     * @return bool true if the history is empty, false otherwise
-     */
-    public function isEmpty()
-    {
-        return count($this->stack) == 0;
-    }
-
-    /**
-     * Goes back in the history.
-     *
-     * @return Request A Request instance
-     *
-     * @throws \LogicException if the stack is already on the first page
-     */
-    public function back()
-    {
-        if ($this->position < 1) {
-            throw new \LogicException('You are already on the first page.');
-        }
-
-        return clone $this->stack[--$this->position];
-    }
-
-    /**
-     * Goes forward in the history.
-     *
-     * @return Request A Request instance
-     *
-     * @throws \LogicException if the stack is already on the last page
-     */
-    public function forward()
-    {
-        if ($this->position > count($this->stack) - 2) {
-            throw new \LogicException('You are already on the last page.');
-        }
-
-        return clone $this->stack[++$this->position];
-    }
-
-    /**
-     * Returns the current element in the history.
-     *
-     * @return Request A Request instance
-     *
-     * @throws \LogicException if the stack is empty
-     */
-    public function current()
-    {
-        if (-1 == $this->position) {
-            throw new \LogicException('The page history is empty.');
-        }
-
-        return clone $this->stack[$this->position];
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/LICENSE b/core/vendor/symfony/browser-kit/LICENSE
deleted file mode 100644
index 43028bc600f26ec5599ab339d83cd70f70dfcdab..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2004-2015 Fabien Potencier
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/core/vendor/symfony/browser-kit/README.md b/core/vendor/symfony/browser-kit/README.md
deleted file mode 100644
index 3c0ee3a040998866f93e542d8a1c9dcb9094eb34..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-BrowserKit Component
-====================
-
-BrowserKit simulates the behavior of a web browser.
-
-The component only provide an abstract client and does not provide any
-"default" backend for the HTTP layer.
-
-Resources
----------
-
-For a simple implementation of a browser based on an HTTP layer, have a look
-at [Goutte](https://github.com/fabpot/Goutte).
-
-For an implementation based on HttpKernelInterface, have a look at the
-[Client](https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/Client.php)
-provided by the HttpKernel component.
-
-You can run the unit tests with the following command:
-
-    $ cd path/to/Symfony/Component/BrowserKit/
-    $ composer install
-    $ phpunit
diff --git a/core/vendor/symfony/browser-kit/Request.php b/core/vendor/symfony/browser-kit/Request.php
deleted file mode 100644
index 6d381d2cb332b67218d3994baaa9b95079971e0d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Request.php
+++ /dev/null
@@ -1,138 +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\BrowserKit;
-
-/**
- * Request object.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class Request
-{
-    protected $uri;
-    protected $method;
-    protected $parameters;
-    protected $files;
-    protected $cookies;
-    protected $server;
-    protected $content;
-
-    /**
-     * Constructor.
-     *
-     * @param string $uri        The request URI
-     * @param string $method     The HTTP method request
-     * @param array  $parameters The request parameters
-     * @param array  $files      An array of uploaded files
-     * @param array  $cookies    An array of cookies
-     * @param array  $server     An array of server parameters
-     * @param string $content    The raw body data
-     *
-     * @api
-     */
-    public function __construct($uri, $method, array $parameters = array(), array $files = array(), array $cookies = array(), array $server = array(), $content = null)
-    {
-        $this->uri = $uri;
-        $this->method = $method;
-        $this->parameters = $parameters;
-        $this->files = $files;
-        $this->cookies = $cookies;
-        $this->server = $server;
-        $this->content = $content;
-    }
-
-    /**
-     * Gets the request URI.
-     *
-     * @return string The request URI
-     *
-     * @api
-     */
-    public function getUri()
-    {
-        return $this->uri;
-    }
-
-    /**
-     * Gets the request HTTP method.
-     *
-     * @return string The request HTTP method
-     *
-     * @api
-     */
-    public function getMethod()
-    {
-        return $this->method;
-    }
-
-    /**
-     * Gets the request parameters.
-     *
-     * @return array The request parameters
-     *
-     * @api
-     */
-    public function getParameters()
-    {
-        return $this->parameters;
-    }
-
-    /**
-     * Gets the request server files.
-     *
-     * @return array The request files
-     *
-     * @api
-     */
-    public function getFiles()
-    {
-        return $this->files;
-    }
-
-    /**
-     * Gets the request cookies.
-     *
-     * @return array The request cookies
-     *
-     * @api
-     */
-    public function getCookies()
-    {
-        return $this->cookies;
-    }
-
-    /**
-     * Gets the request server parameters.
-     *
-     * @return array The request server parameters
-     *
-     * @api
-     */
-    public function getServer()
-    {
-        return $this->server;
-    }
-
-    /**
-     * Gets the request raw body data.
-     *
-     * @return string The request raw body data.
-     *
-     * @api
-     */
-    public function getContent()
-    {
-        return $this->content;
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Response.php b/core/vendor/symfony/browser-kit/Response.php
deleted file mode 100644
index 7a7130b95e92ad6d474f3f0aa3f380b855002266..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Response.php
+++ /dev/null
@@ -1,139 +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\BrowserKit;
-
-/**
- * Response object.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class Response
-{
-    protected $content;
-    protected $status;
-    protected $headers;
-
-    /**
-     * Constructor.
-     *
-     * The headers array is a set of key/value pairs. If a header is present multiple times
-     * then the value is an array of all the values.
-     *
-     * @param string $content The content of the response
-     * @param int    $status  The response status code
-     * @param array  $headers An array of headers
-     *
-     * @api
-     */
-    public function __construct($content = '', $status = 200, array $headers = array())
-    {
-        $this->content = $content;
-        $this->status = $status;
-        $this->headers = $headers;
-    }
-
-    /**
-     * Converts the response object to string containing all headers and the response content.
-     *
-     * @return string The response with headers and content
-     */
-    public function __toString()
-    {
-        $headers = '';
-        foreach ($this->headers as $name => $value) {
-            if (is_string($value)) {
-                $headers .= $this->buildHeader($name, $value);
-            } else {
-                foreach ($value as $headerValue) {
-                    $headers .= $this->buildHeader($name, $headerValue);
-                }
-            }
-        }
-
-        return $headers."\n".$this->content;
-    }
-
-    /**
-     * Returns the build header line.
-     *
-     * @param string $name  The header name
-     * @param string $value The header value
-     *
-     * @return string The built header line
-     */
-    protected function buildHeader($name, $value)
-    {
-        return sprintf("%s: %s\n", $name, $value);
-    }
-
-    /**
-     * Gets the response content.
-     *
-     * @return string The response content
-     *
-     * @api
-     */
-    public function getContent()
-    {
-        return $this->content;
-    }
-
-    /**
-     * Gets the response status code.
-     *
-     * @return int The response status code
-     *
-     * @api
-     */
-    public function getStatus()
-    {
-        return $this->status;
-    }
-
-    /**
-     * Gets the response headers.
-     *
-     * @return array The response headers
-     *
-     * @api
-     */
-    public function getHeaders()
-    {
-        return $this->headers;
-    }
-
-    /**
-     * Gets a response header.
-     *
-     * @param string $header The header name
-     * @param bool   $first  Whether to return the first value or all header values
-     *
-     * @return string|array The first header value if $first is true, an array of values otherwise
-     */
-    public function getHeader($header, $first = true)
-    {
-        $normalizedHeader = str_replace('-', '_', strtolower($header));
-        foreach ($this->headers as $key => $value) {
-            if (str_replace('-', '_', strtolower($key)) === $normalizedHeader) {
-                if ($first) {
-                    return is_array($value) ? (count($value) ? $value[0] : '') : $value;
-                }
-
-                return is_array($value) ? $value : array($value);
-            }
-        }
-
-        return $first ? null : array();
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/.gitignore b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..d1502b087b4d4ede40ddbbf64a8b87a6348b17d8
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/.gitignore
@@ -0,0 +1,2 @@
+vendor/
+composer.lock
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/CHANGELOG.md b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..42d32a7efef904515de7436bff571c3513ccb715
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/CHANGELOG.md
@@ -0,0 +1,8 @@
+CHANGELOG
+=========
+
+2.1.0
+-----
+
+ * [BC BREAK] The CookieJar internals have changed to allow cookies with the
+   same name on different sub-domains/sub-paths
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php
new file mode 100644
index 0000000000000000000000000000000000000000..c57b9e37a1b35421743a8a65a303e82bdf001ecd
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php
@@ -0,0 +1,492 @@
+<?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\BrowserKit;
+
+use Symfony\Component\DomCrawler\Crawler;
+use Symfony\Component\DomCrawler\Link;
+use Symfony\Component\DomCrawler\Form;
+use Symfony\Component\Process\PhpProcess;
+
+/**
+ * Client simulates a browser.
+ *
+ * To make the actual request, you need to implement the doRequest() method.
+ *
+ * If you want to be able to run requests in their own process (insulated flag),
+ * you need to also implement the getScript() method.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+abstract class Client
+{
+    protected $history;
+    protected $cookieJar;
+    protected $server;
+    protected $request;
+    protected $response;
+    protected $crawler;
+    protected $insulated;
+    protected $redirect;
+    protected $followRedirects;
+
+    /**
+     * Constructor.
+     *
+     * @param array     $server    The server parameters (equivalent of $_SERVER)
+     * @param History   $history   A History instance to store the browser history
+     * @param CookieJar $cookieJar A CookieJar instance to store the cookies
+     *
+     * @api
+     */
+    public function __construct(array $server = array(), History $history = null, CookieJar $cookieJar = null)
+    {
+        $this->setServerParameters($server);
+        $this->history = null === $history ? new History() : $history;
+        $this->cookieJar = null === $cookieJar ? new CookieJar() : $cookieJar;
+        $this->insulated = false;
+        $this->followRedirects = true;
+    }
+
+    /**
+     * Sets whether to automatically follow redirects or not.
+     *
+     * @param Boolean $followRedirect Whether to follow redirects
+     *
+     * @api
+     */
+    public function followRedirects($followRedirect = true)
+    {
+        $this->followRedirects = (Boolean) $followRedirect;
+    }
+
+    /**
+     * Sets the insulated flag.
+     *
+     * @param Boolean $insulated Whether to insulate the requests or not
+     *
+     * @throws \RuntimeException When Symfony Process Component is not installed
+     *
+     * @api
+     */
+    public function insulate($insulated = true)
+    {
+        if ($insulated && !class_exists('Symfony\\Component\\Process\\Process')) {
+            // @codeCoverageIgnoreStart
+            throw new \RuntimeException('Unable to isolate requests as the Symfony Process Component is not installed.');
+            // @codeCoverageIgnoreEnd
+        }
+
+        $this->insulated = (Boolean) $insulated;
+    }
+
+    /**
+     * Sets server parameters.
+     *
+     * @param array $server An array of server parameters
+     *
+     * @api
+     */
+    public function setServerParameters(array $server)
+    {
+        $this->server = array_merge(array(
+            'HTTP_HOST'       => 'localhost',
+            'HTTP_USER_AGENT' => 'Symfony2 BrowserKit',
+        ), $server);
+    }
+
+    /**
+     * Sets single server parameter.
+     *
+     * @param string $key   A key of the parameter
+     * @param string $value A value of the parameter
+     */
+    public function setServerParameter($key, $value)
+    {
+        $this->server[$key] = $value;
+    }
+
+    /**
+     * Gets single server parameter for specified key.
+     *
+     * @param string $key     A key of the parameter to get
+     * @param string $default A default value when key is undefined
+     *
+     * @return string A value of the parameter
+     */
+    public function getServerParameter($key, $default = '')
+    {
+        return (isset($this->server[$key])) ? $this->server[$key] : $default;
+    }
+
+    /**
+     * Returns the History instance.
+     *
+     * @return History A History instance
+     *
+     * @api
+     */
+    public function getHistory()
+    {
+        return $this->history;
+    }
+
+    /**
+     * Returns the CookieJar instance.
+     *
+     * @return CookieJar A CookieJar instance
+     *
+     * @api
+     */
+    public function getCookieJar()
+    {
+        return $this->cookieJar;
+    }
+
+    /**
+     * Returns the current Crawler instance.
+     *
+     * @return Crawler A Crawler instance
+     *
+     * @api
+     */
+    public function getCrawler()
+    {
+        return $this->crawler;
+    }
+
+    /**
+     * Returns the current Response instance.
+     *
+     * @return Response A Response instance
+     *
+     * @api
+     */
+    public function getResponse()
+    {
+        return $this->response;
+    }
+
+    /**
+     * Returns the current Request instance.
+     *
+     * @return Request A Request instance
+     *
+     * @api
+     */
+    public function getRequest()
+    {
+        return $this->request;
+    }
+
+    /**
+     * Clicks on a given link.
+     *
+     * @param Link $link A Link instance
+     *
+     * @return Crawler
+     *
+     * @api
+     */
+    public function click(Link $link)
+    {
+        if ($link instanceof Form) {
+            return $this->submit($link);
+        }
+
+        return $this->request($link->getMethod(), $link->getUri());
+    }
+
+    /**
+     * Submits a form.
+     *
+     * @param Form  $form   A Form instance
+     * @param array $values An array of form field values
+     *
+     * @return Crawler
+     *
+     * @api
+     */
+    public function submit(Form $form, array $values = array())
+    {
+        $form->setValues($values);
+
+        return $this->request($form->getMethod(), $form->getUri(), $form->getPhpValues(), $form->getPhpFiles());
+    }
+
+    /**
+     * Calls a URI.
+     *
+     * @param string  $method        The request method
+     * @param string  $uri           The URI to fetch
+     * @param array   $parameters    The Request parameters
+     * @param array   $files         The files
+     * @param array   $server        The server parameters (HTTP headers are referenced with a HTTP_ prefix as PHP does)
+     * @param string  $content       The raw body data
+     * @param Boolean $changeHistory Whether to update the history or not (only used internally for back(), forward(), and reload())
+     *
+     * @return Crawler
+     *
+     * @api
+     */
+    public function request($method, $uri, array $parameters = array(), array $files = array(), array $server = array(), $content = null, $changeHistory = true)
+    {
+        $uri = $this->getAbsoluteUri($uri);
+
+        $server = array_merge($this->server, $server);
+        if (!$this->history->isEmpty()) {
+            $server['HTTP_REFERER'] = $this->history->current()->getUri();
+        }
+        $server['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
+        $server['HTTPS'] = 'https' == parse_url($uri, PHP_URL_SCHEME);
+
+        $request = new Request($uri, $method, $parameters, $files, $this->cookieJar->allValues($uri), $server, $content);
+
+        $this->request = $this->filterRequest($request);
+
+        if (true === $changeHistory) {
+            $this->history->add($request);
+        }
+
+        if ($this->insulated) {
+            $this->response = $this->doRequestInProcess($this->request);
+        } else {
+            $this->response = $this->doRequest($this->request);
+        }
+
+        $response = $this->filterResponse($this->response);
+
+        $this->cookieJar->updateFromResponse($response);
+
+        $this->redirect = $response->getHeader('Location');
+
+        if ($this->followRedirects && $this->redirect) {
+            return $this->crawler = $this->followRedirect();
+        }
+
+        return $this->crawler = $this->createCrawlerFromContent($request->getUri(), $response->getContent(), $response->getHeader('Content-Type'));
+    }
+
+    /**
+     * Makes a request in another process.
+     *
+     * @param Request $request A Request instance
+     *
+     * @return Response A Response instance
+     *
+     * @throws \RuntimeException When processing returns exit code
+     */
+    protected function doRequestInProcess($request)
+    {
+        // We set the TMPDIR (for Macs) and TEMP (for Windows), because on these platforms the temp directory changes based on the user.
+        $process = new PhpProcess($this->getScript($request), null, array('TMPDIR' => sys_get_temp_dir(), 'TEMP' => sys_get_temp_dir()));
+        $process->run();
+
+        if (!$process->isSuccessful() || !preg_match('/^O\:\d+\:/', $process->getOutput())) {
+            throw new \RuntimeException('OUTPUT: '.$process->getOutput().' ERROR OUTPUT: '.$process->getErrorOutput());
+        }
+
+        return unserialize($process->getOutput());
+    }
+
+    /**
+     * Makes a request.
+     *
+     * @param Request $request A Request instance
+     *
+     * @return Response A Response instance
+     */
+    abstract protected function doRequest($request);
+
+    /**
+     * Returns the script to execute when the request must be insulated.
+     *
+     * @param Request $request A Request instance
+     *
+     * @throws \LogicException When this abstract class is not implemented
+     */
+    protected function getScript($request)
+    {
+        // @codeCoverageIgnoreStart
+        throw new \LogicException('To insulate requests, you need to override the getScript() method.');
+        // @codeCoverageIgnoreEnd
+    }
+
+    /**
+     * Filters the request.
+     *
+     * @param Request $request The request to filter
+     *
+     * @return Request
+     */
+    protected function filterRequest(Request $request)
+    {
+        return $request;
+    }
+
+    /**
+     * Filters the Response.
+     *
+     * @param Response $response The Response to filter
+     *
+     * @return Response
+     */
+    protected function filterResponse($response)
+    {
+        return $response;
+    }
+
+    /**
+     * Creates a crawler.
+     *
+     * This method returns null if the DomCrawler component is not available.
+     *
+     * @param string $uri     A uri
+     * @param string $content Content for the crawler to use
+     * @param string $type    Content type
+     *
+     * @return Crawler|null
+     */
+    protected function createCrawlerFromContent($uri, $content, $type)
+    {
+        if (!class_exists('Symfony\Component\DomCrawler\Crawler')) {
+            return null;
+        }
+
+        $crawler = new Crawler(null, $uri);
+        $crawler->addContent($content, $type);
+
+        return $crawler;
+    }
+
+    /**
+     * Goes back in the browser history.
+     *
+     * @return Crawler
+     *
+     * @api
+     */
+    public function back()
+    {
+        return $this->requestFromRequest($this->history->back(), false);
+    }
+
+    /**
+     * Goes forward in the browser history.
+     *
+     * @return Crawler
+     *
+     * @api
+     */
+    public function forward()
+    {
+        return $this->requestFromRequest($this->history->forward(), false);
+    }
+
+    /**
+     * Reloads the current browser.
+     *
+     * @return Crawler
+     *
+     * @api
+     */
+    public function reload()
+    {
+        return $this->requestFromRequest($this->history->current(), false);
+    }
+
+    /**
+     * Follow redirects?
+     *
+     * @return Crawler
+     *
+     * @throws \LogicException If request was not a redirect
+     *
+     * @api
+     */
+    public function followRedirect()
+    {
+        if (empty($this->redirect)) {
+            throw new \LogicException('The request was not redirected.');
+        }
+
+        return $this->request('get', $this->redirect);
+    }
+
+    /**
+     * Restarts the client.
+     *
+     * It flushes history and all cookies.
+     *
+     * @api
+     */
+    public function restart()
+    {
+        $this->cookieJar->clear();
+        $this->history->clear();
+    }
+
+    /**
+     * Takes a URI and converts it to absolute if it is not already absolute.
+     *
+     * @param string $uri A uri
+     *
+     * @return string An absolute uri
+     */
+    protected function getAbsoluteUri($uri)
+    {
+        // already absolute?
+        if (0 === strpos($uri, 'http')) {
+            return $uri;
+        }
+
+        if (!$this->history->isEmpty()) {
+            $currentUri = $this->history->current()->getUri();
+        } else {
+            $currentUri = sprintf('http%s://%s/',
+                isset($this->server['HTTPS']) ? 's' : '',
+                isset($this->server['HTTP_HOST']) ? $this->server['HTTP_HOST'] : 'localhost'
+            );
+        }
+
+        // anchor?
+        if (!$uri || '#' == $uri[0]) {
+            return preg_replace('/#.*?$/', '', $currentUri).$uri;
+        }
+
+        if ('/' !== $uri[0]) {
+            $path = parse_url($currentUri, PHP_URL_PATH);
+
+            if ('/' !== substr($path, -1)) {
+                $path = substr($path, 0, strrpos($path, '/') + 1);
+            }
+
+            $uri = $path.$uri;
+        }
+
+        return preg_replace('#^(.*?//[^/]+)\/.*$#', '$1', $currentUri).$uri;
+    }
+
+    /**
+     * Makes a request from a Request object directly.
+     *
+     * @param Request $request       A Request instance
+     * @param Boolean $changeHistory Whether to update the history or not (only used internally for back(), forward(), and reload())
+     *
+     * @return Crawler
+     */
+    protected function requestFromRequest(Request $request, $changeHistory = true)
+    {
+        return $this->request($request->getMethod(), $request->getUri(), $request->getParameters(), $request->getFiles(), $request->getServer(), $request->getContent(), $changeHistory);
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Cookie.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Cookie.php
new file mode 100644
index 0000000000000000000000000000000000000000..148767d17b403db23940d15b86a9557361268986
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Cookie.php
@@ -0,0 +1,315 @@
+<?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\BrowserKit;
+
+/**
+ * Cookie represents an HTTP cookie.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Cookie
+{
+    /**
+     * Handles dates as defined by RFC 2616 section 3.3.1, and also some other
+     * non-standard, but common formats.
+     *
+     * @var array
+     */
+    private static $dateFormats = array(
+        'D, d M Y H:i:s T',
+        'D, d-M-y H:i:s T',
+        'D, d-M-Y H:i:s T',
+        'D M j G:i:s Y',
+    );
+
+    protected $name;
+    protected $value;
+    protected $expires;
+    protected $path;
+    protected $domain;
+    protected $secure;
+    protected $httponly;
+    protected $rawValue;
+
+    /**
+     * Sets a cookie.
+     *
+     * @param string  $name         The cookie name
+     * @param string  $value        The value of the cookie
+     * @param string  $expires      The time the cookie expires
+     * @param string  $path         The path on the server in which the cookie will be available on
+     * @param string  $domain       The domain that the cookie is available
+     * @param Boolean $secure       Indicates that the cookie should only be transmitted over a secure HTTPS connection from the client
+     * @param Boolean $httponly     The cookie httponly flag
+     * @param Boolean $encodedValue Whether the value is encoded or not
+     *
+     * @api
+     */
+    public function __construct($name, $value, $expires = null, $path = null, $domain = '', $secure = false, $httponly = true, $encodedValue = false)
+    {
+        if ($encodedValue) {
+            $this->value    = urldecode($value);
+            $this->rawValue = $value;
+        } else {
+            $this->value    = $value;
+            $this->rawValue = urlencode($value);
+        }
+        $this->name     = $name;
+        $this->expires  = null === $expires ? null : (integer) $expires;
+        $this->path     = empty($path) ? '/' : $path;
+        $this->domain   = $domain;
+        $this->secure   = (Boolean) $secure;
+        $this->httponly = (Boolean) $httponly;
+    }
+
+    /**
+     * Returns the HTTP representation of the Cookie.
+     *
+     * @return string The HTTP representation of the Cookie
+     *
+     * @api
+     */
+    public function __toString()
+    {
+        $cookie = sprintf('%s=%s', $this->name, $this->rawValue);
+
+        if (null !== $this->expires) {
+            $cookie .= '; expires='.substr(\DateTime::createFromFormat('U', $this->expires, new \DateTimeZone('GMT'))->format(self::$dateFormats[0]), 0, -5);
+        }
+
+        if ('' !== $this->domain) {
+            $cookie .= '; domain='.$this->domain;
+        }
+
+        if ('/' !== $this->path) {
+            $cookie .= '; path='.$this->path;
+        }
+
+        if ($this->secure) {
+            $cookie .= '; secure';
+        }
+
+        if ($this->httponly) {
+            $cookie .= '; httponly';
+        }
+
+        return $cookie;
+    }
+
+    /**
+     * Creates a Cookie instance from a Set-Cookie header value.
+     *
+     * @param string $cookie A Set-Cookie header value
+     * @param string $url    The base URL
+     *
+     * @return Cookie A Cookie instance
+     *
+     * @api
+     */
+    public static function fromString($cookie, $url = null)
+    {
+        $parts = explode(';', $cookie);
+
+        if (false === strpos($parts[0], '=')) {
+            throw new \InvalidArgumentException('The cookie string "%s" is not valid.');
+        }
+
+        list($name, $value) = explode('=', array_shift($parts), 2);
+
+        $values = array(
+            'name'     => trim($name),
+            'value'    => trim($value),
+            'expires'  => null,
+            'path'     => '/',
+            'domain'   => '',
+            'secure'   => false,
+            'httponly' => false,
+            'passedRawValue' => true,
+        );
+
+        if (null !== $url) {
+            if ((false === $urlParts = parse_url($url)) || !isset($urlParts['host']) || !isset($urlParts['path'])) {
+                throw new \InvalidArgumentException(sprintf('The URL "%s" is not valid.', $url));
+            }
+            $parts = array_merge($urlParts, $parts);
+
+            $values['domain'] = $parts['host'];
+            $values['path'] = substr($parts['path'], 0, strrpos($parts['path'], '/'));
+        }
+
+        foreach ($parts as $part) {
+            $part = trim($part);
+
+            if ('secure' === strtolower($part)) {
+                // Ignore the secure flag if the original URI is not given or is not HTTPS
+                if (!$url || !isset($urlParts['scheme']) || 'https' != $urlParts['scheme']) {
+                    continue;
+                }
+
+                $values['secure'] = true;
+
+                continue;
+            }
+
+            if ('httponly' === strtolower($part)) {
+                $values['httponly'] = true;
+
+                continue;
+            }
+
+            if (2 === count($elements = explode('=', $part, 2))) {
+                if ('expires' === strtolower($elements[0])) {
+                    $elements[1] = self::parseDate($elements[1]);
+                }
+
+                $values[strtolower($elements[0])] = $elements[1];
+            }
+        }
+
+        return new static(
+            $values['name'],
+            $values['value'],
+            $values['expires'],
+            $values['path'],
+            $values['domain'],
+            $values['secure'],
+            $values['httponly'],
+            $values['passedRawValue']
+        );
+    }
+
+    private static function parseDate($dateValue)
+    {
+        // trim single quotes around date if present
+        if (($length = strlen($dateValue)) > 1 && "'" === $dateValue[0] && "'" === $dateValue[$length-1]) {
+            $dateValue = substr($dateValue, 1, -1);
+        }
+
+        foreach (self::$dateFormats as $dateFormat) {
+            if (false !== $date = \DateTime::createFromFormat($dateFormat, $dateValue, new \DateTimeZone('GMT'))) {
+                return $date->getTimestamp();
+            }
+        }
+
+        throw new \InvalidArgumentException(sprintf('Could not parse date "%s".', $dateValue));
+    }
+
+    /**
+     * Gets the name of the cookie.
+     *
+     * @return string The cookie name
+     *
+     * @api
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Gets the value of the cookie.
+     *
+     * @return string The cookie value
+     *
+     * @api
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    /**
+     * Gets the raw value of the cookie.
+     *
+     * @return string The cookie value
+     *
+     * @api
+     */
+    public function getRawValue()
+    {
+        return $this->rawValue;
+    }
+
+    /**
+     * Gets the expires time of the cookie.
+     *
+     * @return string The cookie expires time
+     *
+     * @api
+     */
+    public function getExpiresTime()
+    {
+        return $this->expires;
+    }
+
+    /**
+     * Gets the path of the cookie.
+     *
+     * @return string The cookie path
+     *
+     * @api
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * Gets the domain of the cookie.
+     *
+     * @return string The cookie domain
+     *
+     * @api
+     */
+    public function getDomain()
+    {
+        return $this->domain;
+    }
+
+    /**
+     * Returns the secure flag of the cookie.
+     *
+     * @return Boolean The cookie secure flag
+     *
+     * @api
+     */
+    public function isSecure()
+    {
+        return $this->secure;
+    }
+
+    /**
+     * Returns the httponly flag of the cookie.
+     *
+     * @return Boolean The cookie httponly flag
+     *
+     * @api
+     */
+    public function isHttpOnly()
+    {
+        return $this->httponly;
+    }
+
+    /**
+     * Returns true if the cookie has expired.
+     *
+     * @return Boolean true if the cookie has expired, false otherwise
+     *
+     * @api
+     */
+    public function isExpired()
+    {
+        return null !== $this->expires && 0 !== $this->expires && $this->expires < time();
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/CookieJar.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/CookieJar.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a5c170884caf643a77059fa2413ed005cbb9e41
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/CookieJar.php
@@ -0,0 +1,215 @@
+<?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\BrowserKit;
+
+/**
+ * CookieJar.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class CookieJar
+{
+    protected $cookieJar = array();
+
+    /**
+     * Sets a cookie.
+     *
+     * @param Cookie $cookie A Cookie instance
+     *
+     * @api
+     */
+    public function set(Cookie $cookie)
+    {
+        $this->cookieJar[$cookie->getDomain()][$cookie->getPath()][$cookie->getName()] = $cookie;
+    }
+
+    /**
+     * Gets a cookie by name.
+     *
+     * @param string $name   The cookie name
+     * @param string $path   The cookie path
+     * @param string $domain The cookie domain
+     *
+     * @return Cookie|null A Cookie instance or null if the cookie does not exist
+     *
+     * @api
+     */
+    public function get($name, $path = '/', $domain = null)
+    {
+        $this->flushExpiredCookies();
+
+        return isset($this->cookieJar[$domain][$path][$name]) ? $this->cookieJar[$domain][$path][$name] : null;
+    }
+
+    /**
+     * Removes a cookie by name.
+     *
+     * @param string $name   The cookie name
+     * @param string $path   The cookie path
+     * @param string $domain The cookie domain
+     *
+     * @api
+     */
+    public function expire($name, $path = '/', $domain = null)
+    {
+        if (null === $path) {
+            $path = '/';
+        }
+
+        unset($this->cookieJar[$domain][$path][$name]);
+
+        if (empty($this->cookieJar[$domain][$path])) {
+            unset($this->cookieJar[$domain][$path]);
+
+            if (empty($this->cookieJar[$domain])) {
+                unset($this->cookieJar[$domain]);
+            }
+        }
+    }
+
+    /**
+     * Removes all the cookies from the jar.
+     *
+     * @api
+     */
+    public function clear()
+    {
+        $this->cookieJar = array();
+    }
+
+    /**
+     * Updates the cookie jar from a response Set-Cookie headers.
+     *
+     * @param array  $setCookies Set-Cookie headers from an HTTP response
+     * @param string $uri        The base URL
+     */
+    public function updateFromSetCookie(array $setCookies, $uri = null)
+    {
+        $cookies = array();
+
+        foreach ($setCookies as $cookie) {
+            foreach (explode(',', $cookie) as $i => $part) {
+                if (0 === $i || preg_match('/^(?P<token>\s*[0-9A-Za-z!#\$%\&\'\*\+\-\.^_`\|~]+)=/', $part)) {
+                    $cookies[] = ltrim($part);
+                } else {
+                    $cookies[count($cookies) - 1] .= ','.$part;
+                }
+            }
+        }
+
+        foreach ($cookies as $cookie) {
+            $this->set(Cookie::fromString($cookie, $uri));
+        }
+    }
+
+    /**
+     * Updates the cookie jar from a Response object.
+     *
+     * @param Response $response A Response object
+     * @param string   $uri      The base URL
+     */
+    public function updateFromResponse(Response $response, $uri = null)
+    {
+        $this->updateFromSetCookie($response->getHeader('Set-Cookie', false), $uri);
+    }
+
+    /**
+     * Returns not yet expired cookies.
+     *
+     * @return array An array of cookies
+     */
+    public function all()
+    {
+        $this->flushExpiredCookies();
+
+        $flattenedCookies = array();
+        foreach ($this->cookieJar as $path) {
+            foreach ($path as $cookies) {
+                foreach ($cookies as $cookie) {
+                    $flattenedCookies[] = $cookie;
+                }
+            }
+        }
+
+        return $flattenedCookies;
+    }
+
+    /**
+     * Returns not yet expired cookie values for the given URI.
+     *
+     * @param string  $uri             A URI
+     * @param Boolean $returnsRawValue Returns raw value or urldecoded value
+     *
+     * @return array An array of cookie values
+     */
+    public function allValues($uri, $returnsRawValue = false)
+    {
+        $this->flushExpiredCookies();
+
+        $parts = array_replace(array('path' => '/'), parse_url($uri));
+        $cookies = array();
+        foreach ($this->cookieJar as $domain => $pathCookies) {
+            if ($domain) {
+                $domain = ltrim($domain, '.');
+                if ($domain != substr($parts['host'], -strlen($domain))) {
+                    continue;
+                }
+            }
+
+            foreach ($pathCookies as $path => $namedCookies) {
+                if ($path != substr($parts['path'], 0, strlen($path))) {
+                    continue;
+                }
+
+                foreach ($namedCookies as $cookie) {
+                    if ($cookie->isSecure() && 'https' != $parts['scheme']) {
+                        continue;
+                    }
+
+                    $cookies[$cookie->getName()] = $returnsRawValue ? $cookie->getRawValue() : $cookie->getValue();
+                }
+            }
+        }
+
+        return $cookies;
+    }
+
+    /**
+     * Returns not yet expired raw cookie values for the given URI.
+     *
+     * @param string $uri A URI
+     *
+     * @return array An array of cookie values
+     */
+    public function allRawValues($uri)
+    {
+        return $this->allValues($uri, true);
+    }
+
+    /**
+     * Removes all expired cookies.
+     */
+    public function flushExpiredCookies()
+    {
+        foreach ($this->cookieJar as $domain => $pathCookies) {
+            foreach ($pathCookies as $path => $namedCookies) {
+                foreach ($namedCookies as $name => $cookie) {
+                    if ($cookie->isExpired()) {
+                        unset($this->cookieJar[$domain][$path][$name]);
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/History.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/History.php
new file mode 100644
index 0000000000000000000000000000000000000000..a22847ef1395f39ecb419529e9a70a6add6080da
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/History.php
@@ -0,0 +1,110 @@
+<?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\BrowserKit;
+
+/**
+ * History.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class History
+{
+    protected $stack = array();
+    protected $position = -1;
+
+    /**
+     * Constructor.
+     */
+    public function __construct()
+    {
+        $this->clear();
+    }
+
+    /**
+     * Clears the history.
+     */
+    public function clear()
+    {
+        $this->stack = array();
+        $this->position = -1;
+    }
+
+    /**
+     * Adds a Request to the history.
+     *
+     * @param Request $request A Request instance
+     */
+    public function add(Request $request)
+    {
+        $this->stack = array_slice($this->stack, 0, $this->position + 1);
+        $this->stack[] = clone $request;
+        $this->position = count($this->stack) - 1;
+    }
+
+    /**
+     * Returns true if the history is empty.
+     *
+     * @return Boolean true if the history is empty, false otherwise
+     */
+    public function isEmpty()
+    {
+        return count($this->stack) == 0;
+    }
+
+    /**
+     * Goes back in the history.
+     *
+     * @return Request A Request instance
+     *
+     * @throws \LogicException if the stack is already on the first page
+     */
+    public function back()
+    {
+        if ($this->position < 1) {
+            throw new \LogicException('You are already on the first page.');
+        }
+
+        return clone $this->stack[--$this->position];
+    }
+
+    /**
+     * Goes forward in the history.
+     *
+     * @return Request A Request instance
+     *
+     * @throws \LogicException if the stack is already on the last page
+     */
+    public function forward()
+    {
+        if ($this->position > count($this->stack) - 2) {
+            throw new \LogicException('You are already on the last page.');
+        }
+
+        return clone $this->stack[++$this->position];
+    }
+
+    /**
+     * Returns the current element in the history.
+     *
+     * @return Request A Request instance
+     *
+     * @throws \LogicException if the stack is empty
+     */
+    public function current()
+    {
+        if (-1 == $this->position) {
+            throw new \LogicException('The page history is empty.');
+        }
+
+        return clone $this->stack[$this->position];
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/LICENSE b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..cdffe7aebc04acd5c2b9c3042a0923d8e8f31998
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2012 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/README.md b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..061c2d7d6beba589b814b7a7e7fe521f08e0bc63
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/README.md
@@ -0,0 +1,26 @@
+BrowserKit Component
+====================
+
+BrowserKit simulates the behavior of a web browser.
+
+The component only provide an abstract client and does not provide any
+"default" backend for the HTTP layer.
+
+Resources
+---------
+
+For a simple implementation of a browser based on an HTTP layer, have a look
+at [Goutte](https://github.com/fabpot/Goutte).
+
+For an implementation based on HttpKernelInterface, have a look at the
+[Client](https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/Client.php)
+provided by the HttpKernel component.
+
+You can run the unit tests with the following command:
+
+    phpunit
+
+If you also want to run the unit tests that depend on other Symfony
+Components, install dev dependencies before running PHPUnit:
+
+    php composer.phar install --dev
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Request.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Request.php
new file mode 100644
index 0000000000000000000000000000000000000000..c02f6578ac9a1bef25bb3afb75e836856f5d4144
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Request.php
@@ -0,0 +1,138 @@
+<?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\BrowserKit;
+
+/**
+ * Request object.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Request
+{
+    protected $uri;
+    protected $method;
+    protected $parameters;
+    protected $files;
+    protected $cookies;
+    protected $server;
+    protected $content;
+
+    /**
+     * Constructor.
+     *
+     * @param string $uri        The request URI
+     * @param array  $method     The HTTP method request
+     * @param array  $parameters The request parameters
+     * @param array  $files      An array of uploaded files
+     * @param array  $cookies    An array of cookies
+     * @param array  $server     An array of server parameters
+     * @param string $content    The raw body data
+     *
+     * @api
+     */
+    public function __construct($uri, $method, array $parameters = array(), array $files = array(), array $cookies = array(), array $server = array(), $content = null)
+    {
+        $this->uri = $uri;
+        $this->method = $method;
+        $this->parameters = $parameters;
+        $this->files = $files;
+        $this->cookies = $cookies;
+        $this->server = $server;
+        $this->content = $content;
+    }
+
+    /**
+     * Gets the request URI.
+     *
+     * @return string The request URI
+     *
+     * @api
+     */
+    public function getUri()
+    {
+        return $this->uri;
+    }
+
+    /**
+     * Gets the request HTTP method.
+     *
+     * @return string The request HTTP method
+     *
+     * @api
+     */
+    public function getMethod()
+    {
+        return $this->method;
+    }
+
+    /**
+     * Gets the request parameters.
+     *
+     * @return array The request parameters
+     *
+     * @api
+     */
+    public function getParameters()
+    {
+        return $this->parameters;
+    }
+
+    /**
+     * Gets the request server files.
+     *
+     * @return array The request files
+     *
+     * @api
+     */
+    public function getFiles()
+    {
+        return $this->files;
+    }
+
+    /**
+     * Gets the request cookies.
+     *
+     * @return array The request cookies
+     *
+     * @api
+     */
+    public function getCookies()
+    {
+        return $this->cookies;
+    }
+
+    /**
+     * Gets the request server parameters.
+     *
+     * @return array The request server parameters
+     *
+     * @api
+     */
+    public function getServer()
+    {
+        return $this->server;
+    }
+
+    /**
+     * Gets the request raw body data.
+     *
+     * @return string The request raw body data.
+     *
+     * @api
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Response.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Response.php
new file mode 100644
index 0000000000000000000000000000000000000000..182fdda48d49762d657a016f85a0b7c9e2e02a75
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Response.php
@@ -0,0 +1,138 @@
+<?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\BrowserKit;
+
+/**
+ * Response object.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Response
+{
+    protected $content;
+    protected $status;
+    protected $headers;
+
+    /**
+     * Constructor.
+     *
+     * The headers array is a set of key/value pairs. If a header is present multiple times
+     * then the value is an array of all the values.
+     *
+     * @param string  $content The content of the response
+     * @param integer $status  The response status code
+     * @param array   $headers An array of headers
+     *
+     * @api
+     */
+    public function __construct($content = '', $status = 200, array $headers = array())
+    {
+        $this->content = $content;
+        $this->status  = $status;
+        $this->headers = $headers;
+    }
+
+    /**
+     * Converts the response object to string containing all headers and the response content.
+     *
+     * @return string The response with headers and content
+     */
+    public function __toString()
+    {
+        $headers = '';
+        foreach ($this->headers as $name => $value) {
+            if (is_string($value)) {
+                $headers .= $this->buildHeader($name, $value);
+            } else {
+                foreach ($value as $headerValue) {
+                    $headers .= $this->buildHeader($name, $headerValue);
+                }
+            }
+        }
+
+        return $headers."\n".$this->content;
+    }
+
+    /**
+     * Returns the build header line.
+     *
+     * @param string $name  The header name
+     * @param string $value The header value
+     *
+     * @return string The built header line
+     */
+    protected function buildHeader($name, $value)
+    {
+        return sprintf("%s: %s\n", $name, $value);
+    }
+
+    /**
+     * Gets the response content.
+     *
+     * @return string The response content
+     *
+     * @api
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Gets the response status code.
+     *
+     * @return integer The response status code
+     *
+     * @api
+     */
+    public function getStatus()
+    {
+        return $this->status;
+    }
+
+    /**
+     * Gets the response headers.
+     *
+     * @return array The response headers
+     *
+     * @api
+     */
+    public function getHeaders()
+    {
+        return $this->headers;
+    }
+
+    /**
+     * Gets a response header.
+     *
+     * @param string  $header The header name
+     * @param Boolean $first  Whether to return the first value or all header values
+     *
+     * @return string|array The first header value if $first is true, an array of values otherwise
+     */
+    public function getHeader($header, $first = true)
+    {
+        foreach ($this->headers as $key => $value) {
+            if (str_replace('-', '_', strtolower($key)) == str_replace('-', '_', strtolower($header))) {
+                if ($first) {
+                    return is_array($value) ? (count($value) ? $value[0] : '') : $value;
+                }
+
+                return is_array($value) ? $value : array($value);
+            }
+        }
+
+        return $first ? null : array();
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/ClientTest.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/ClientTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..91d52df6376d8d0e49b96ae987820a9ff353c9ce
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/ClientTest.php
@@ -0,0 +1,419 @@
+<?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\Tests\BrowserKit;
+
+use Symfony\Component\BrowserKit\Client;
+use Symfony\Component\BrowserKit\History;
+use Symfony\Component\BrowserKit\CookieJar;
+use Symfony\Component\BrowserKit\Request;
+use Symfony\Component\BrowserKit\Response;
+
+class TestClient extends Client
+{
+    protected $nextResponse = null;
+    protected $nextScript = null;
+
+    public function setNextResponse(Response $response)
+    {
+        $this->nextResponse = $response;
+    }
+
+    public function setNextScript($script)
+    {
+        $this->nextScript = $script;
+    }
+
+    protected function doRequest($request)
+    {
+        if (null === $this->nextResponse) {
+            return new Response();
+        }
+
+        $response = $this->nextResponse;
+        $this->nextResponse = null;
+
+        return $response;
+    }
+
+    protected function getScript($request)
+    {
+        $r = new \ReflectionClass('Symfony\Component\BrowserKit\Response');
+        $path = $r->getFileName();
+
+        return <<<EOF
+<?php
+
+require_once('$path');
+
+echo serialize($this->nextScript);
+EOF;
+    }
+}
+
+class ClientTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @covers Symfony\Component\BrowserKit\Client::getHistory
+     */
+    public function testGetHistory()
+    {
+        $client = new TestClient(array(), $history = new History());
+        $this->assertSame($history, $client->getHistory(), '->getHistory() returns the History');
+    }
+
+    /**
+     * @covers Symfony\Component\BrowserKit\Client::getCookieJar
+     */
+    public function testGetCookieJar()
+    {
+        $client = new TestClient(array(), null, $cookieJar = new CookieJar());
+        $this->assertSame($cookieJar, $client->getCookieJar(), '->getCookieJar() returns the CookieJar');
+    }
+
+    /**
+     * @covers Symfony\Component\BrowserKit\Client::getRequest
+     */
+    public function testGetRequest()
+    {
+        $client = new TestClient();
+        $client->request('GET', 'http://example.com/');
+
+        $this->assertEquals('http://example.com/', $client->getRequest()->getUri(), '->getCrawler() returns the Request of the last request');
+    }
+
+    /**
+     * @covers Symfony\Component\BrowserKit\Client::getResponse
+     */
+    public function testGetResponse()
+    {
+        $client = new TestClient();
+        $client->setNextResponse(new Response('foo'));
+        $client->request('GET', 'http://example.com/');
+
+        $this->assertEquals('foo', $client->getResponse()->getContent(), '->getCrawler() returns the Response of the last request');
+    }
+
+    public function testGetContent()
+    {
+        $json = '{"jsonrpc":"2.0","method":"echo","id":7,"params":["Hello World"]}';
+
+        $client = new TestClient();
+        $client->request('POST', 'http://example.com/jsonrpc', array(), array(), array(), $json);
+        $this->assertEquals($json, $client->getRequest()->getContent());
+    }
+
+    /**
+     * @covers Symfony\Component\BrowserKit\Client::getCrawler
+     */
+    public function testGetCrawler()
+    {
+        $client = new TestClient();
+        $client->setNextResponse(new Response('foo'));
+        $crawler = $client->request('GET', 'http://example.com/');
+
+        $this->assertSame($crawler, $client->getCrawler(), '->getCrawler() returns the Crawler of the last request');
+    }
+
+    public function testRequestHttpHeaders()
+    {
+        $client = new TestClient();
+        $client->request('GET', '/');
+        $headers = $client->getRequest()->getServer();
+        $this->assertEquals('localhost', $headers['HTTP_HOST'], '->request() sets the HTTP_HOST header');
+
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com');
+        $headers = $client->getRequest()->getServer();
+        $this->assertEquals('www.example.com', $headers['HTTP_HOST'], '->request() sets the HTTP_HOST header');
+
+        $client->request('GET', 'https://www.example.com');
+        $headers = $client->getRequest()->getServer();
+        $this->assertTrue($headers['HTTPS'], '->request() sets the HTTPS header');
+    }
+
+    public function testRequestURIConversion()
+    {
+        $client = new TestClient();
+        $client->request('GET', '/foo');
+        $this->assertEquals('http://localhost/foo', $client->getRequest()->getUri(), '->request() converts the URI to an absolute one');
+
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com');
+        $this->assertEquals('http://www.example.com', $client->getRequest()->getUri(), '->request() does not change absolute URIs');
+
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com/');
+        $client->request('GET', '/foo');
+        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
+
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com/foo');
+        $client->request('GET', '#');
+        $this->assertEquals('http://www.example.com/foo#', $client->getRequest()->getUri(), '->request() uses the previous request for #');
+        $client->request('GET', '#');
+        $this->assertEquals('http://www.example.com/foo#', $client->getRequest()->getUri(), '->request() uses the previous request for #');
+        $client->request('GET', '#foo');
+        $this->assertEquals('http://www.example.com/foo#foo', $client->getRequest()->getUri(), '->request() uses the previous request for #');
+
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com/foo/');
+        $client->request('GET', 'bar');
+        $this->assertEquals('http://www.example.com/foo/bar', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
+
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+        $client->request('GET', 'bar');
+        $this->assertEquals('http://www.example.com/foo/bar', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
+    }
+
+    public function testRequestReferer()
+    {
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+        $client->request('GET', 'bar');
+        $server = $client->getRequest()->getServer();
+        $this->assertEquals('http://www.example.com/foo/foobar', $server['HTTP_REFERER'], '->request() sets the referer');
+    }
+
+    public function testRequestHistory()
+    {
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+        $client->request('GET', 'bar');
+
+        $this->assertEquals('http://www.example.com/foo/bar', $client->getHistory()->current()->getUri(), '->request() updates the History');
+        $this->assertEquals('http://www.example.com/foo/foobar', $client->getHistory()->back()->getUri(), '->request() updates the History');
+    }
+
+    public function testRequestCookies()
+    {
+        $client = new TestClient();
+        $client->setNextResponse(new Response('<html><a href="/foo">foo</a></html>', 200, array('Set-Cookie' => 'foo=bar')));
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+        $this->assertEquals(array('foo' => 'bar'), $client->getCookieJar()->allValues('http://www.example.com/foo/foobar'), '->request() updates the CookieJar');
+
+        $client->request('GET', 'bar');
+        $this->assertEquals(array('foo' => 'bar'), $client->getCookieJar()->allValues('http://www.example.com/foo/foobar'), '->request() updates the CookieJar');
+    }
+
+    public function testClick()
+    {
+        if (!class_exists('Symfony\Component\DomCrawler\Crawler')) {
+            $this->markTestSkipped('The "DomCrawler" component is not available');
+        }
+
+        if (!class_exists('Symfony\Component\CssSelector\CssSelector')) {
+            $this->markTestSkipped('The "CssSelector" component is not available');
+        }
+
+        $client = new TestClient();
+        $client->setNextResponse(new Response('<html><a href="/foo">foo</a></html>'));
+        $crawler = $client->request('GET', 'http://www.example.com/foo/foobar');
+
+        $client->click($crawler->filter('a')->link());
+
+        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->click() clicks on links');
+    }
+
+    public function testClickForm()
+    {
+        if (!class_exists('Symfony\Component\DomCrawler\Crawler')) {
+            $this->markTestSkipped('The "DomCrawler" component is not available');
+        }
+
+        if (!class_exists('Symfony\Component\CssSelector\CssSelector')) {
+            $this->markTestSkipped('The "CssSelector" component is not available');
+        }
+
+        $client = new TestClient();
+        $client->setNextResponse(new Response('<html><form action="/foo"><input type="submit" /></form></html>'));
+        $crawler = $client->request('GET', 'http://www.example.com/foo/foobar');
+
+        $client->click($crawler->filter('input')->form());
+
+        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->click() Form submit forms');
+    }
+
+    public function testSubmit()
+    {
+        if (!class_exists('Symfony\Component\DomCrawler\Crawler')) {
+            $this->markTestSkipped('The "DomCrawler" component is not available');
+        }
+
+        if (!class_exists('Symfony\Component\CssSelector\CssSelector')) {
+            $this->markTestSkipped('The "CssSelector" component is not available');
+        }
+
+        $client = new TestClient();
+        $client->setNextResponse(new Response('<html><form action="/foo"><input type="submit" /></form></html>'));
+        $crawler = $client->request('GET', 'http://www.example.com/foo/foobar');
+
+        $client->submit($crawler->filter('input')->form());
+
+        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->submit() submit forms');
+    }
+
+    public function testFollowRedirect()
+    {
+        $client = new TestClient();
+        $client->followRedirects(false);
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+
+        try {
+            $client->followRedirect();
+            $this->fail('->followRedirect() throws a \LogicException if the request was not redirected');
+        } catch (\Exception $e) {
+            $this->assertInstanceof('LogicException', $e, '->followRedirect() throws a \LogicException if the request was not redirected');
+        }
+
+        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected')));
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+        $client->followRedirect();
+
+        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() follows a redirect if any');
+
+        $client = new TestClient();
+        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected')));
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+
+        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() automatically follows redirects if followRedirects is true');
+    }
+
+    public function testFollowRedirectWithCookies()
+    {
+        $client = new TestClient();
+        $client->followRedirects(false);
+        $client->setNextResponse(new Response('', 302, array(
+            'Location'   => 'http://www.example.com/redirected',
+            'Set-Cookie' => 'foo=bar',
+        )));
+        $client->request('GET', 'http://www.example.com/');
+        $this->assertEquals(array(), $client->getRequest()->getCookies());
+        $client->followRedirect();
+        $this->assertEquals(array('foo' => 'bar'), $client->getRequest()->getCookies());
+    }
+
+    public function testBack()
+    {
+        $client = new TestClient();
+
+        $parameters = array('foo' => 'bar');
+        $files = array('myfile.foo' => 'baz');
+        $server = array('X_TEST_FOO' => 'bazbar');
+        $content = 'foobarbaz';
+
+        $client->request('GET', 'http://www.example.com/foo/foobar', $parameters, $files, $server, $content);
+        $client->request('GET', 'http://www.example.com/foo');
+        $client->back();
+
+        $this->assertEquals('http://www.example.com/foo/foobar', $client->getRequest()->getUri(), '->back() goes back in the history');
+        $this->assertArrayHasKey('foo', $client->getRequest()->getParameters(), '->back() keeps parameters');
+        $this->assertArrayHasKey('myfile.foo', $client->getRequest()->getFiles(), '->back() keeps files');
+        $this->assertArrayHasKey('X_TEST_FOO', $client->getRequest()->getServer(), '->back() keeps $_SERVER');
+        $this->assertEquals($content, $client->getRequest()->getContent(), '->back() keeps content');
+    }
+
+    public function testForward()
+    {
+        $client = new TestClient();
+
+        $parameters = array('foo' => 'bar');
+        $files = array('myfile.foo' => 'baz');
+        $server = array('X_TEST_FOO' => 'bazbar');
+        $content = 'foobarbaz';
+
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+        $client->request('GET', 'http://www.example.com/foo', $parameters, $files, $server, $content);
+        $client->back();
+        $client->forward();
+
+        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->forward() goes forward in the history');
+        $this->assertArrayHasKey('foo', $client->getRequest()->getParameters(), '->forward() keeps parameters');
+        $this->assertArrayHasKey('myfile.foo', $client->getRequest()->getFiles(), '->forward() keeps files');
+        $this->assertArrayHasKey('X_TEST_FOO', $client->getRequest()->getServer(), '->forward() keeps $_SERVER');
+        $this->assertEquals($content, $client->getRequest()->getContent(), '->forward() keeps content');
+    }
+
+    public function testReload()
+    {
+        $client = new TestClient();
+
+        $parameters = array('foo' => 'bar');
+        $files = array('myfile.foo' => 'baz');
+        $server = array('X_TEST_FOO' => 'bazbar');
+        $content = 'foobarbaz';
+
+        $client->request('GET', 'http://www.example.com/foo/foobar', $parameters, $files, $server, $content);
+        $client->reload();
+
+        $this->assertEquals('http://www.example.com/foo/foobar', $client->getRequest()->getUri(), '->reload() reloads the current page');
+        $this->assertArrayHasKey('foo', $client->getRequest()->getParameters(), '->reload() keeps parameters');
+        $this->assertArrayHasKey('myfile.foo', $client->getRequest()->getFiles(), '->reload() keeps files');
+        $this->assertArrayHasKey('X_TEST_FOO', $client->getRequest()->getServer(), '->reload() keeps $_SERVER');
+        $this->assertEquals($content, $client->getRequest()->getContent(), '->reload() keeps content');
+    }
+
+    public function testRestart()
+    {
+        $client = new TestClient();
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+        $client->restart();
+
+        $this->assertTrue($client->getHistory()->isEmpty(), '->restart() clears the history');
+        $this->assertEquals(array(), $client->getCookieJar()->all(), '->restart() clears the cookies');
+    }
+
+    public function testInsulatedRequests()
+    {
+        if (!class_exists('Symfony\Component\Process\Process')) {
+            $this->markTestSkipped('The "Process" component is not available');
+        }
+
+        $client = new TestClient();
+        $client->insulate();
+        $client->setNextScript("new Symfony\Component\BrowserKit\Response('foobar')");
+        $client->request('GET', 'http://www.example.com/foo/foobar');
+
+        $this->assertEquals('foobar', $client->getResponse()->getContent(), '->insulate() process the request in a forked process');
+
+        $client->setNextScript("new Symfony\Component\BrowserKit\Response('foobar)");
+
+        try {
+            $client->request('GET', 'http://www.example.com/foo/foobar');
+            $this->fail('->request() throws a \RuntimeException if the script has an error');
+        } catch (\Exception $e) {
+            $this->assertInstanceof('RuntimeException', $e, '->request() throws a \RuntimeException if the script has an error');
+        }
+    }
+
+    public function testGetServerParameter()
+    {
+        $client = new TestClient();
+        $this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
+        $this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
+        $this->assertEquals('testvalue', $client->getServerParameter('testkey', 'testvalue'));
+    }
+
+    public function testSetServerParameter()
+    {
+        $client = new TestClient();
+
+        $this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
+        $this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
+
+        $client->setServerParameter('HTTP_HOST', 'testhost');
+        $this->assertEquals('testhost', $client->getServerParameter('HTTP_HOST'));
+
+        $client->setServerParameter('HTTP_USER_AGENT', 'testua');
+        $this->assertEquals('testua', $client->getServerParameter('HTTP_USER_AGENT'));
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/CookieJarTest.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/CookieJarTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c077d37236c70e97a2f340b9882c796d42c2b8c
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/CookieJarTest.php
@@ -0,0 +1,191 @@
+<?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\Tests\BrowserKit;
+
+use Symfony\Component\BrowserKit\CookieJar;
+use Symfony\Component\BrowserKit\Cookie;
+use Symfony\Component\BrowserKit\Response;
+
+class CookieJarTest extends \PHPUnit_Framework_TestCase
+{
+    public function testSetGet()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie = new Cookie('foo', 'bar'));
+
+        $this->assertEquals($cookie, $cookieJar->get('foo'), '->set() sets a cookie');
+
+        $this->assertNull($cookieJar->get('foobar'), '->get() returns null if the cookie does not exist');
+
+        $cookieJar->set($cookie = new Cookie('foo', 'bar', time() - 86400));
+        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
+    }
+
+    public function testExpire()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie = new Cookie('foo', 'bar'));
+        $cookieJar->expire('foo');
+        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
+    }
+
+    public function testAll()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie1 = new Cookie('foo', 'bar'));
+        $cookieJar->set($cookie2 = new Cookie('bar', 'foo'));
+
+        $this->assertEquals(array($cookie1, $cookie2), $cookieJar->all(), '->all() returns all cookies in the jar');
+    }
+
+    public function testClear()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie1 = new Cookie('foo', 'bar'));
+        $cookieJar->set($cookie2 = new Cookie('bar', 'foo'));
+
+        $cookieJar->clear();
+
+        $this->assertEquals(array(), $cookieJar->all(), '->clear() expires all cookies');
+    }
+
+    public function testUpdateFromResponse()
+    {
+        $response = new Response('', 200, array('Set-Cookie' => 'foo=foo'));
+
+        $cookieJar = new CookieJar();
+        $cookieJar->updateFromResponse($response);
+
+        $this->assertEquals('foo', $cookieJar->get('foo')->getValue(), '->updateFromResponse() updates cookies from a Response objects');
+    }
+
+    public function testUpdateFromSetCookie()
+    {
+        $setCookies = array('foo=foo');
+
+        $cookieJar = new CookieJar();
+        $cookieJar->set(new Cookie('bar', 'bar'));
+        $cookieJar->updateFromSetCookie($setCookies);
+
+        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $cookieJar->get('foo'));
+        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $cookieJar->get('bar'));
+        $this->assertEquals('foo', $cookieJar->get('foo')->getValue(), '->updateFromSetCookie() updates cookies from a Set-Cookie header');
+        $this->assertEquals('bar', $cookieJar->get('bar')->getValue(), '->updateFromSetCookie() keeps existing cookies');
+    }
+
+    public function testUpdateFromSetCookieWithMultipleCookies()
+    {
+        $timestamp = time() + 3600;
+        $date = gmdate('D, d M Y H:i:s \G\M\T', $timestamp);
+        $setCookies = array(sprintf('foo=foo; expires=%s; domain=.symfony.com; path=/, bar=bar; domain=.blog.symfony.com, PHPSESSID=id; expires=%s', $date, $date));
+
+        $cookieJar = new CookieJar();
+        $cookieJar->updateFromSetCookie($setCookies);
+
+        $fooCookie = $cookieJar->get('foo', '/', '.symfony.com');
+        $barCookie = $cookieJar->get('bar', '/', '.blog.symfony.com');
+        $phpCookie = $cookieJar->get('PHPSESSID');
+
+        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $fooCookie);
+        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $barCookie);
+        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $phpCookie);
+        $this->assertEquals('foo', $fooCookie->getValue());
+        $this->assertEquals('bar', $barCookie->getValue());
+        $this->assertEquals('id', $phpCookie->getValue());
+        $this->assertEquals($timestamp, $fooCookie->getExpiresTime());
+        $this->assertNull($barCookie->getExpiresTime());
+        $this->assertEquals($timestamp, $phpCookie->getExpiresTime());
+    }
+
+    /**
+     * @dataProvider provideAllValuesValues
+     */
+    public function testAllValues($uri, $values)
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie1 = new Cookie('foo_nothing', 'foo'));
+        $cookieJar->set($cookie2 = new Cookie('foo_expired', 'foo', time() - 86400));
+        $cookieJar->set($cookie3 = new Cookie('foo_path', 'foo', null, '/foo'));
+        $cookieJar->set($cookie4 = new Cookie('foo_domain', 'foo', null, '/', '.example.com'));
+        $cookieJar->set($cookie4 = new Cookie('foo_strict_domain', 'foo', null, '/', '.www4.example.com'));
+        $cookieJar->set($cookie5 = new Cookie('foo_secure', 'foo', null, '/', '', true));
+
+        $this->assertEquals($values, array_keys($cookieJar->allValues($uri)), '->allValues() returns the cookie for a given URI');
+    }
+
+    public function provideAllValuesValues()
+    {
+        return array(
+            array('http://www.example.com', array('foo_nothing', 'foo_domain')),
+            array('http://www.example.com/', array('foo_nothing', 'foo_domain')),
+            array('http://foo.example.com/', array('foo_nothing', 'foo_domain')),
+            array('http://foo.example1.com/', array('foo_nothing')),
+            array('https://foo.example.com/', array('foo_nothing', 'foo_secure', 'foo_domain')),
+            array('http://www.example.com/foo/bar', array('foo_nothing', 'foo_path', 'foo_domain')),
+            array('http://www4.example.com/', array('foo_nothing', 'foo_domain', 'foo_strict_domain')),
+        );
+    }
+
+    public function testEncodedValues()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie = new Cookie('foo', 'bar%3Dbaz', null, '/', '', false, true, true));
+
+        $this->assertEquals(array('foo' => 'bar=baz'), $cookieJar->allValues('/'));
+        $this->assertEquals(array('foo' => 'bar%3Dbaz'), $cookieJar->allRawValues('/'));
+    }
+
+    public function testCookieExpireWithSameNameButDifferentPaths()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/foo'));
+        $cookieJar->set($cookie2 = new Cookie('foo', 'bar2', null, '/bar'));
+        $cookieJar->expire('foo', '/foo');
+
+        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
+        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
+        $this->assertEquals(array(), $cookieJar->allValues('http://example.com/foo'));
+        $this->assertEquals(array('foo' => 'bar2'), $cookieJar->allValues('http://example.com/bar'));
+    }
+
+    public function testCookieExpireWithNullPaths()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/'));
+        $cookieJar->expire('foo', null);
+
+        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
+        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
+    }
+
+    public function testCookieWithSameNameButDifferentPaths()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/foo'));
+        $cookieJar->set($cookie2 = new Cookie('foo', 'bar2', null, '/bar'));
+
+        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
+        $this->assertEquals(array('foo' => 'bar1'), $cookieJar->allValues('http://example.com/foo'));
+        $this->assertEquals(array('foo' => 'bar2'), $cookieJar->allValues('http://example.com/bar'));
+    }
+
+    public function testCookieWithSameNameButDifferentDomains()
+    {
+        $cookieJar = new CookieJar();
+        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/', 'foo.example.com'));
+        $cookieJar->set($cookie2 = new Cookie('foo', 'bar2', null, '/', 'bar.example.com'));
+
+        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
+        $this->assertEquals(array('foo' => 'bar1'), $cookieJar->allValues('http://foo.example.com/'));
+        $this->assertEquals(array('foo' => 'bar2'), $cookieJar->allValues('http://bar.example.com/'));
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/CookieTest.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/CookieTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2db3ac6f247177d46030228e3ea6b47cc239ba87
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/CookieTest.php
@@ -0,0 +1,174 @@
+<?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\Tests\BrowserKit;
+
+use Symfony\Component\BrowserKit\Cookie;
+
+class CookieTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getTestsForToFromString
+     */
+    public function testToFromString($cookie, $url = null)
+    {
+        $this->assertEquals($cookie, (string) Cookie::fromString($cookie, $url));
+    }
+
+    public function getTestsForToFromString()
+    {
+        return array(
+            array('foo=bar'),
+            array('foo=bar; path=/foo'),
+            array('foo=bar; domain=google.com'),
+            array('foo=bar; domain=example.com; secure', 'https://example.com/'),
+            array('foo=bar; httponly'),
+            array('foo=bar; domain=google.com; path=/foo; secure; httponly', 'https://google.com/'),
+            array('foo=bar=baz'),
+            array('foo=bar%3Dbaz'),
+        );
+    }
+
+    public function testFromStringIgnoreSecureFlag()
+    {
+        $this->assertFalse(Cookie::fromString('foo=bar; secure')->isSecure());
+        $this->assertFalse(Cookie::fromString('foo=bar; secure', 'http://example.com/')->isSecure());
+    }
+
+    /**
+     * @dataProvider getExpireCookieStrings
+     */
+    public function testFromStringAcceptsSeveralExpiresDateFormats($cookie)
+    {
+        $this->assertEquals(1596185377, Cookie::fromString($cookie)->getExpiresTime());
+    }
+
+    public function getExpireCookieStrings()
+    {
+        return array(
+            array('foo=bar; expires=Fri, 31-Jul-2020 08:49:37 GMT'),
+            array('foo=bar; expires=Fri, 31 Jul 2020 08:49:37 GMT'),
+            array('foo=bar; expires=Friday, 31-Jul-20 08:49:37 GMT'),
+            array('foo=bar; expires=Fri Jul 31 08:49:37 2020'),
+            array('foo=bar; expires=\'Fri Jul 31 08:49:37 2020\''),
+        );
+    }
+
+    public function testFromStringWithCapitalization()
+    {
+        $this->assertEquals('Foo=Bar', (string) Cookie::fromString('Foo=Bar'));
+        $this->assertEquals('foo=bar; expires=Fri, 31 Dec 2010 23:59:59 GMT', (string) Cookie::fromString('foo=bar; Expires=Fri, 31 Dec 2010 23:59:59 GMT'));
+        $this->assertEquals('foo=bar; domain=www.example.org; httponly', (string) Cookie::fromString('foo=bar; DOMAIN=www.example.org; HttpOnly'));
+    }
+
+    public function testFromStringWithUrl()
+    {
+        $this->assertEquals('foo=bar; domain=www.example.com', (string) Cookie::FromString('foo=bar', 'http://www.example.com/'));
+        $this->assertEquals('foo=bar; domain=www.example.com; path=/foo', (string) Cookie::FromString('foo=bar', 'http://www.example.com/foo/bar'));
+        $this->assertEquals('foo=bar; domain=www.example.com', (string) Cookie::FromString('foo=bar; path=/', 'http://www.example.com/foo/bar'));
+        $this->assertEquals('foo=bar; domain=www.myotherexample.com', (string) Cookie::FromString('foo=bar; domain=www.myotherexample.com', 'http://www.example.com/'));
+    }
+
+    public function testFromStringThrowsAnExceptionIfCookieIsNotValid()
+    {
+        $this->setExpectedException('InvalidArgumentException');
+        Cookie::FromString('foo');
+    }
+
+    public function testFromStringThrowsAnExceptionIfCookieDateIsNotValid()
+    {
+        $this->setExpectedException('InvalidArgumentException');
+        Cookie::FromString('foo=bar; expires=foo');
+    }
+
+    public function testFromStringThrowsAnExceptionIfUrlIsNotValid()
+    {
+        $this->setExpectedException('InvalidArgumentException');
+        Cookie::FromString('foo=bar', 'foobar');
+    }
+
+    public function testGetName()
+    {
+        $cookie = new Cookie('foo', 'bar');
+        $this->assertEquals('foo', $cookie->getName(), '->getName() returns the cookie name');
+    }
+
+    public function testGetValue()
+    {
+        $cookie = new Cookie('foo', 'bar');
+        $this->assertEquals('bar', $cookie->getValue(), '->getValue() returns the cookie value');
+
+        $cookie = new Cookie('foo', 'bar%3Dbaz', null, '/', '', false, true, true); // raw value
+        $this->assertEquals('bar=baz', $cookie->getValue(), '->getValue() returns the urldecoded cookie value');
+    }
+
+    public function testGetRawValue()
+    {
+        $cookie = new Cookie('foo', 'bar=baz'); // decoded value
+        $this->assertEquals('bar%3Dbaz', $cookie->getRawValue(), '->getRawValue() returns the urlencoded cookie value');
+        $cookie = new Cookie('foo', 'bar%3Dbaz', null, '/', '', false, true, true); // raw value
+        $this->assertEquals('bar%3Dbaz', $cookie->getRawValue(), '->getRawValue() returns the non-urldecoded cookie value');
+    }
+
+    public function testGetPath()
+    {
+        $cookie = new Cookie('foo', 'bar', 0);
+        $this->assertEquals('/', $cookie->getPath(), '->getPath() returns / is no path is defined');
+
+        $cookie = new Cookie('foo', 'bar', 0, '/foo');
+        $this->assertEquals('/foo', $cookie->getPath(), '->getPath() returns the cookie path');
+    }
+
+    public function testGetDomain()
+    {
+        $cookie = new Cookie('foo', 'bar', 0, '/', 'foo.com');
+        $this->assertEquals('foo.com', $cookie->getDomain(), '->getDomain() returns the cookie domain');
+    }
+
+    public function testIsSecure()
+    {
+        $cookie = new Cookie('foo', 'bar');
+        $this->assertFalse($cookie->isSecure(), '->isSecure() returns false if not defined');
+
+        $cookie = new Cookie('foo', 'bar', 0, '/', 'foo.com', true);
+        $this->assertTrue($cookie->isSecure(), '->isSecure() returns the cookie secure flag');
+    }
+
+    public function testIsHttponly()
+    {
+        $cookie = new Cookie('foo', 'bar');
+        $this->assertTrue($cookie->isHttpOnly(), '->isHttpOnly() returns false if not defined');
+
+        $cookie = new Cookie('foo', 'bar', 0, '/', 'foo.com', false, true);
+        $this->assertTrue($cookie->isHttpOnly(), '->isHttpOnly() returns the cookie httponly flag');
+    }
+
+    public function testGetExpiresTime()
+    {
+        $cookie = new Cookie('foo', 'bar');
+        $this->assertNull($cookie->getExpiresTime(), '->getExpiresTime() returns the expires time');
+
+        $cookie = new Cookie('foo', 'bar', $time = time() - 86400);
+        $this->assertEquals($time, $cookie->getExpiresTime(), '->getExpiresTime() returns the expires time');
+    }
+
+    public function testIsExpired()
+    {
+        $cookie = new Cookie('foo', 'bar');
+        $this->assertFalse($cookie->isExpired(), '->isExpired() returns false when the cookie never expires (null as expires time)');
+
+        $cookie = new Cookie('foo', 'bar', time() - 86400);
+        $this->assertTrue($cookie->isExpired(), '->isExpired() returns true when the cookie is expired');
+
+        $cookie = new Cookie('foo', 'bar', 0);
+        $this->assertFalse($cookie->isExpired());
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/HistoryTest.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/HistoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6794f31ddee64c23afe7f50e7ce0cb929696127d
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/HistoryTest.php
@@ -0,0 +1,101 @@
+<?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\Tests\BrowserKit;
+
+use Symfony\Component\BrowserKit\History;
+use Symfony\Component\BrowserKit\Request;
+
+class HistoryTest extends \PHPUnit_Framework_TestCase
+{
+    public function testAdd()
+    {
+        $history = new History();
+        $history->add(new Request('http://www.example1.com/', 'get'));
+        $this->assertSame('http://www.example1.com/', $history->current()->getUri(), '->add() adds a request to the history');
+
+        $history->add(new Request('http://www.example2.com/', 'get'));
+        $this->assertSame('http://www.example2.com/', $history->current()->getUri(), '->add() adds a request to the history');
+
+        $history->add(new Request('http://www.example3.com/', 'get'));
+        $history->back();
+        $history->add(new Request('http://www.example4.com/', 'get'));
+        $this->assertSame('http://www.example4.com/', $history->current()->getUri(), '->add() adds a request to the history');
+
+        $history->back();
+        $this->assertSame('http://www.example2.com/', $history->current()->getUri(), '->add() adds a request to the history');
+    }
+
+    public function testClearIsEmpty()
+    {
+        $history = new History();
+        $history->add(new Request('http://www.example.com/', 'get'));
+
+        $this->assertFalse($history->isEmpty(), '->isEmpty() returns false if the history is not empty');
+
+        $history->clear();
+
+        $this->assertTrue($history->isEmpty(), '->isEmpty() true if the history is empty');
+    }
+
+    public function testCurrent()
+    {
+        $history = new History();
+
+        try {
+            $history->current();
+            $this->fail('->current() throws a \LogicException if the history is empty');
+        } catch (\Exception $e) {
+            $this->assertInstanceof('LogicException', $e, '->current() throws a \LogicException if the history is empty');
+        }
+
+        $history->add(new Request('http://www.example.com/', 'get'));
+
+        $this->assertSame('http://www.example.com/', $history->current()->getUri(), '->current() returns the current request in the history');
+    }
+
+    public function testBack()
+    {
+        $history = new History();
+        $history->add(new Request('http://www.example.com/', 'get'));
+
+        try {
+            $history->back();
+            $this->fail('->back() throws a \LogicException if the history is already on the first page');
+        } catch (\Exception $e) {
+            $this->assertInstanceof('LogicException', $e, '->current() throws a \LogicException if the history is already on the first page');
+        }
+
+        $history->add(new Request('http://www.example1.com/', 'get'));
+        $history->back();
+
+        $this->assertSame('http://www.example.com/', $history->current()->getUri(), '->back() returns the previous request in the history');
+    }
+
+    public function testForward()
+    {
+        $history = new History();
+        $history->add(new Request('http://www.example.com/', 'get'));
+        $history->add(new Request('http://www.example1.com/', 'get'));
+
+        try {
+            $history->forward();
+            $this->fail('->forward() throws a \LogicException if the history is already on the last page');
+        } catch (\Exception $e) {
+            $this->assertInstanceof('LogicException', $e, '->forward() throws a \LogicException if the history is already on the last page');
+        }
+
+        $history->back();
+        $history->forward();
+
+        $this->assertSame('http://www.example1.com/', $history->current()->getUri(), '->forward() returns the next request in the history');
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/RequestTest.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/RequestTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c567faddeed339ee0abe6d6800859619d4d4e8d3
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/RequestTest.php
@@ -0,0 +1,53 @@
+<?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\Tests\BrowserKit;
+
+use Symfony\Component\BrowserKit\Request;
+
+class RequestTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetUri()
+    {
+        $request = new Request('http://www.example.com/', 'get');
+        $this->assertEquals('http://www.example.com/', $request->getUri(), '->getUri() returns the URI of the request');
+    }
+
+    public function testGetMethod()
+    {
+        $request = new Request('http://www.example.com/', 'get');
+        $this->assertEquals('get', $request->getMethod(), '->getMethod() returns the method of the request');
+    }
+
+    public function testGetParameters()
+    {
+        $request = new Request('http://www.example.com/', 'get', array('foo' => 'bar'));
+        $this->assertEquals(array('foo' => 'bar'), $request->getParameters(), '->getParameters() returns the parameters of the request');
+    }
+
+    public function testGetFiles()
+    {
+        $request = new Request('http://www.example.com/', 'get', array(), array('foo' => 'bar'));
+        $this->assertEquals(array('foo' => 'bar'), $request->getFiles(), '->getFiles() returns the uploaded files of the request');
+    }
+
+    public function testGetCookies()
+    {
+        $request = new Request('http://www.example.com/', 'get', array(), array(), array('foo' => 'bar'));
+        $this->assertEquals(array('foo' => 'bar'), $request->getCookies(), '->getCookies() returns the cookies of the request');
+    }
+
+    public function testGetServer()
+    {
+        $request = new Request('http://www.example.com/', 'get', array(), array(), array(), array('foo' => 'bar'));
+        $this->assertEquals(array('foo' => 'bar'), $request->getServer(), '->getServer() returns the server parameters of the request');
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/ResponseTest.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/ResponseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e8c638a3bca5f5d127c5939aee9e451fea9c880
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/ResponseTest.php
@@ -0,0 +1,76 @@
+<?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\Tests\BrowserKit;
+
+use Symfony\Component\BrowserKit\Response;
+
+class ResponseTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetUri()
+    {
+        $response = new Response('foo');
+        $this->assertEquals('foo', $response->getContent(), '->getContent() returns the content of the response');
+    }
+
+    public function testGetStatus()
+    {
+        $response = new Response('foo', 304);
+        $this->assertEquals('304', $response->getStatus(), '->getStatus() returns the status of the response');
+    }
+
+    public function testGetHeaders()
+    {
+        $response = new Response('foo', 200, array('foo' => 'bar'));
+        $this->assertEquals(array('foo' => 'bar'), $response->getHeaders(), '->getHeaders() returns the headers of the response');
+    }
+
+    public function testGetHeader()
+    {
+        $response = new Response('foo', 200, array(
+            'Content-Type' => 'text/html',
+            'Set-Cookie'   => array('foo=bar', 'bar=foo'),
+        ));
+
+        $this->assertEquals('text/html', $response->getHeader('Content-Type'), '->getHeader() returns a header of the response');
+        $this->assertEquals('text/html', $response->getHeader('content-type'), '->getHeader() returns a header of the response');
+        $this->assertEquals('text/html', $response->getHeader('content_type'), '->getHeader() returns a header of the response');
+        $this->assertEquals('foo=bar', $response->getHeader('Set-Cookie'), '->getHeader() returns the first header value');
+        $this->assertEquals(array('foo=bar', 'bar=foo'), $response->getHeader('Set-Cookie', false), '->getHeader() returns all header values if first is false');
+
+        $this->assertNull($response->getHeader('foo'), '->getHeader() returns null if the header is not defined');
+        $this->assertEquals(array(), $response->getHeader('foo', false), '->getHeader() returns an empty array if the header is not defined and first is set to false');
+    }
+
+    public function testMagicToString()
+    {
+        $response = new Response('foo', 304, array('foo' => 'bar'));
+
+        $this->assertEquals("foo: bar\n\nfoo", $response->__toString(), '->__toString() returns the headers and the content as a string');
+    }
+
+    public function testMagicToStringWithMultipleSetCookieHeader()
+    {
+        $headers = array(
+            'content-type' => 'text/html; charset=utf-8',
+            'set-cookie'   => array('foo=bar', 'bar=foo')
+        );
+
+        $expected = 'content-type: text/html; charset=utf-8'."\n";
+        $expected.= 'set-cookie: foo=bar'."\n";
+        $expected.= 'set-cookie: bar=foo'."\n\n";
+        $expected.= 'foo';
+
+        $response = new Response('foo', 304, $headers);
+
+        $this->assertEquals($expected, $response->__toString(), '->__toString() returns the headers and the content as a string');
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/bootstrap.php b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b326ffd2e72bee69ced862f599a1d8b820e47bd
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Tests/bootstrap.php
@@ -0,0 +1,22 @@
+<?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.
+ */
+
+spl_autoload_register(function ($class) {
+    if (0 === strpos(ltrim($class, '/'), 'Symfony\Component\BrowserKit')) {
+        if (file_exists($file = __DIR__.'/../'.substr(str_replace('\\', '/', $class), strlen('Symfony\Component\BrowserKit')).'.php')) {
+            require_once $file;
+        }
+    }
+});
+
+if (file_exists($loader = __DIR__.'/../vendor/autoload.php')) {
+    require_once $loader;
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/composer.json b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..f40ddfae25a254426d7b00e48a9f4a161b7da46e
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/composer.json
@@ -0,0 +1,39 @@
+{
+    "name": "symfony/browser-kit",
+    "type": "library",
+    "description": "Symfony BrowserKit Component",
+    "keywords": [],
+    "homepage": "http://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "http://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.3",
+        "symfony/dom-crawler": "2.1.*"
+    },
+    "require-dev": {
+        "symfony/process": "2.1.*",
+        "symfony/css-selector": "2.1.*"
+    },
+    "suggest": {
+        "symfony/process": "self.version"
+    },
+    "autoload": {
+        "psr-0": { "Symfony\\Component\\BrowserKit": "" }
+    },
+    "target-dir": "Symfony/Component/BrowserKit",
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.1-dev"
+        }
+    }
+}
diff --git a/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/phpunit.xml.dist b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..0ddabeda0e5ed8092f8d636e57dc5fe20a831f00
--- /dev/null
+++ b/core/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/phpunit.xml.dist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+         bootstrap="Tests/bootstrap.php"
+>
+    <testsuites>
+        <testsuite name="Symfony BrowserKit Component Test Suite">
+            <directory>./Tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./</directory>
+            <exclude>
+                <directory>./Resources</directory>
+                <directory>./Tests</directory>
+                <directory>./vendor</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/core/vendor/symfony/browser-kit/Tests/ClientTest.php b/core/vendor/symfony/browser-kit/Tests/ClientTest.php
deleted file mode 100644
index cc7db71fd2f94dab7e5ed3b7daa8658fe9629eb8..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Tests/ClientTest.php
+++ /dev/null
@@ -1,639 +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\BrowserKit\Tests;
-
-use Symfony\Component\BrowserKit\Client;
-use Symfony\Component\BrowserKit\History;
-use Symfony\Component\BrowserKit\CookieJar;
-use Symfony\Component\BrowserKit\Response;
-
-class SpecialResponse extends Response
-{
-}
-
-class TestClient extends Client
-{
-    protected $nextResponse = null;
-    protected $nextScript = null;
-
-    public function setNextResponse(Response $response)
-    {
-        $this->nextResponse = $response;
-    }
-
-    public function setNextScript($script)
-    {
-        $this->nextScript = $script;
-    }
-
-    protected function doRequest($request)
-    {
-        if (null === $this->nextResponse) {
-            return new Response();
-        }
-
-        $response = $this->nextResponse;
-        $this->nextResponse = null;
-
-        return $response;
-    }
-
-    protected function filterResponse($response)
-    {
-        if ($response instanceof SpecialResponse) {
-            return new Response($response->getContent(), $response->getStatus(), $response->getHeaders());
-        }
-
-        return $response;
-    }
-
-    protected function getScript($request)
-    {
-        $r = new \ReflectionClass('Symfony\Component\BrowserKit\Response');
-        $path = $r->getFileName();
-
-        return <<<EOF
-<?php
-
-require_once('$path');
-
-echo serialize($this->nextScript);
-EOF;
-    }
-}
-
-class ClientTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @covers Symfony\Component\BrowserKit\Client::getHistory
-     */
-    public function testGetHistory()
-    {
-        $client = new TestClient(array(), $history = new History());
-        $this->assertSame($history, $client->getHistory(), '->getHistory() returns the History');
-    }
-
-    /**
-     * @covers Symfony\Component\BrowserKit\Client::getCookieJar
-     */
-    public function testGetCookieJar()
-    {
-        $client = new TestClient(array(), null, $cookieJar = new CookieJar());
-        $this->assertSame($cookieJar, $client->getCookieJar(), '->getCookieJar() returns the CookieJar');
-    }
-
-    /**
-     * @covers Symfony\Component\BrowserKit\Client::getRequest
-     */
-    public function testGetRequest()
-    {
-        $client = new TestClient();
-        $client->request('GET', 'http://example.com/');
-
-        $this->assertEquals('http://example.com/', $client->getRequest()->getUri(), '->getCrawler() returns the Request of the last request');
-    }
-
-    public function testGetRequestWithIpAsHost()
-    {
-        $client = new TestClient();
-        $client->request('GET', 'https://example.com/foo', array(), array(), array('HTTP_HOST' => '127.0.0.1'));
-
-        $this->assertEquals('https://127.0.0.1/foo', $client->getRequest()->getUri());
-    }
-
-    public function testGetResponse()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('foo'));
-        $client->request('GET', 'http://example.com/');
-
-        $this->assertEquals('foo', $client->getResponse()->getContent(), '->getCrawler() returns the Response of the last request');
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Response', $client->getResponse(), '->getCrawler() returns the Response of the last request');
-    }
-
-    public function testGetInternalResponse()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new SpecialResponse('foo'));
-        $client->request('GET', 'http://example.com/');
-
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Response', $client->getInternalResponse());
-        $this->assertNotInstanceOf('Symfony\Component\BrowserKit\Tests\SpecialResponse', $client->getInternalResponse());
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Tests\SpecialResponse', $client->getResponse());
-    }
-
-    public function testGetContent()
-    {
-        $json = '{"jsonrpc":"2.0","method":"echo","id":7,"params":["Hello World"]}';
-
-        $client = new TestClient();
-        $client->request('POST', 'http://example.com/jsonrpc', array(), array(), array(), $json);
-        $this->assertEquals($json, $client->getRequest()->getContent());
-    }
-
-    /**
-     * @covers Symfony\Component\BrowserKit\Client::getCrawler
-     */
-    public function testGetCrawler()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('foo'));
-        $crawler = $client->request('GET', 'http://example.com/');
-
-        $this->assertSame($crawler, $client->getCrawler(), '->getCrawler() returns the Crawler of the last request');
-    }
-
-    public function testRequestHttpHeaders()
-    {
-        $client = new TestClient();
-        $client->request('GET', '/');
-        $headers = $client->getRequest()->getServer();
-        $this->assertEquals('localhost', $headers['HTTP_HOST'], '->request() sets the HTTP_HOST header');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com');
-        $headers = $client->getRequest()->getServer();
-        $this->assertEquals('www.example.com', $headers['HTTP_HOST'], '->request() sets the HTTP_HOST header');
-
-        $client->request('GET', 'https://www.example.com');
-        $headers = $client->getRequest()->getServer();
-        $this->assertTrue($headers['HTTPS'], '->request() sets the HTTPS header');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com:8080');
-        $headers = $client->getRequest()->getServer();
-        $this->assertEquals('www.example.com:8080', $headers['HTTP_HOST'], '->request() sets the HTTP_HOST header with port');
-    }
-
-    public function testRequestURIConversion()
-    {
-        $client = new TestClient();
-        $client->request('GET', '/foo');
-        $this->assertEquals('http://localhost/foo', $client->getRequest()->getUri(), '->request() converts the URI to an absolute one');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com');
-        $this->assertEquals('http://www.example.com', $client->getRequest()->getUri(), '->request() does not change absolute URIs');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/');
-        $client->request('GET', '/foo');
-        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo');
-        $client->request('GET', '#');
-        $this->assertEquals('http://www.example.com/foo#', $client->getRequest()->getUri(), '->request() uses the previous request for #');
-        $client->request('GET', '#');
-        $this->assertEquals('http://www.example.com/foo#', $client->getRequest()->getUri(), '->request() uses the previous request for #');
-        $client->request('GET', '#foo');
-        $this->assertEquals('http://www.example.com/foo#foo', $client->getRequest()->getUri(), '->request() uses the previous request for #');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo/');
-        $client->request('GET', 'bar');
-        $this->assertEquals('http://www.example.com/foo/bar', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $client->request('GET', 'bar');
-        $this->assertEquals('http://www.example.com/foo/bar', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo/');
-        $client->request('GET', 'http');
-        $this->assertEquals('http://www.example.com/foo/http', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo');
-        $client->request('GET', 'http/bar');
-        $this->assertEquals('http://www.example.com/http/bar', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
-
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/');
-        $client->request('GET', 'http');
-        $this->assertEquals('http://www.example.com/http', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
-    }
-
-    public function testRequestURIConversionByServerHost()
-    {
-        $client = new TestClient();
-
-        $server = array('HTTP_HOST' => 'www.exampl+e.com:8000');
-        $parameters = array();
-        $files = array();
-
-        $client->request('GET', 'http://exampl+e.com', $parameters, $files, $server);
-        $this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST to add port');
-
-        $client->request('GET', 'http://exampl+e.com:8888', $parameters, $files, $server);
-        $this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST to modify existing port');
-
-        $client->request('GET', 'http://exampl+e.com:8000', $parameters, $files, $server);
-        $this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST respects correct set port');
-    }
-
-    public function testRequestReferer()
-    {
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $client->request('GET', 'bar');
-        $server = $client->getRequest()->getServer();
-        $this->assertEquals('http://www.example.com/foo/foobar', $server['HTTP_REFERER'], '->request() sets the referer');
-    }
-
-    public function testRequestHistory()
-    {
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $client->request('GET', 'bar');
-
-        $this->assertEquals('http://www.example.com/foo/bar', $client->getHistory()->current()->getUri(), '->request() updates the History');
-        $this->assertEquals('http://www.example.com/foo/foobar', $client->getHistory()->back()->getUri(), '->request() updates the History');
-    }
-
-    public function testRequestCookies()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('<html><a href="/foo">foo</a></html>', 200, array('Set-Cookie' => 'foo=bar')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $this->assertEquals(array('foo' => 'bar'), $client->getCookieJar()->allValues('http://www.example.com/foo/foobar'), '->request() updates the CookieJar');
-
-        $client->request('GET', 'bar');
-        $this->assertEquals(array('foo' => 'bar'), $client->getCookieJar()->allValues('http://www.example.com/foo/foobar'), '->request() updates the CookieJar');
-    }
-
-    public function testRequestSecureCookies()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('<html><a href="/foo">foo</a></html>', 200, array('Set-Cookie' => 'foo=bar; path=/; secure')));
-        $client->request('GET', 'https://www.example.com/foo/foobar');
-
-        $this->assertTrue($client->getCookieJar()->get('foo', '/', 'www.example.com')->isSecure());
-    }
-
-    public function testClick()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('<html><a href="/foo">foo</a></html>'));
-        $crawler = $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $client->click($crawler->filter('a')->link());
-
-        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->click() clicks on links');
-    }
-
-    public function testClickForm()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('<html><form action="/foo"><input type="submit" /></form></html>'));
-        $crawler = $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $client->click($crawler->filter('input')->form());
-
-        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->click() Form submit forms');
-    }
-
-    public function testSubmit()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('<html><form action="/foo"><input type="submit" /></form></html>'));
-        $crawler = $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $client->submit($crawler->filter('input')->form());
-
-        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->submit() submit forms');
-    }
-
-    public function testSubmitPreserveAuth()
-    {
-        $client = new TestClient(array('PHP_AUTH_USER' => 'foo', 'PHP_AUTH_PW' => 'bar'));
-        $client->setNextResponse(new Response('<html><form action="/foo"><input type="submit" /></form></html>'));
-        $crawler = $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $server = $client->getRequest()->getServer();
-        $this->assertArrayHasKey('PHP_AUTH_USER', $server);
-        $this->assertEquals('foo', $server['PHP_AUTH_USER']);
-        $this->assertArrayHasKey('PHP_AUTH_PW', $server);
-        $this->assertEquals('bar', $server['PHP_AUTH_PW']);
-
-        $client->submit($crawler->filter('input')->form());
-
-        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->submit() submit forms');
-
-        $server = $client->getRequest()->getServer();
-        $this->assertArrayHasKey('PHP_AUTH_USER', $server);
-        $this->assertEquals('foo', $server['PHP_AUTH_USER']);
-        $this->assertArrayHasKey('PHP_AUTH_PW', $server);
-        $this->assertEquals('bar', $server['PHP_AUTH_PW']);
-    }
-
-    public function testFollowRedirect()
-    {
-        $client = new TestClient();
-        $client->followRedirects(false);
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        try {
-            $client->followRedirect();
-            $this->fail('->followRedirect() throws a \LogicException if the request was not redirected');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('LogicException', $e, '->followRedirect() throws a \LogicException if the request was not redirected');
-        }
-
-        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $client->followRedirect();
-
-        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() follows a redirect if any');
-
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() automatically follows redirects if followRedirects is true');
-
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 201, array('Location' => 'http://www.example.com/redirected')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $this->assertEquals('http://www.example.com/foo/foobar', $client->getRequest()->getUri(), '->followRedirect() does not follow redirect if HTTP Code is not 30x');
-
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 201, array('Location' => 'http://www.example.com/redirected')));
-        $client->followRedirects(false);
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        try {
-            $client->followRedirect();
-            $this->fail('->followRedirect() throws a \LogicException if the request did not respond with 30x HTTP Code');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('LogicException', $e, '->followRedirect() throws a \LogicException if the request did not respond with 30x HTTP Code');
-        }
-    }
-
-    public function testFollowRelativeRedirect()
-    {
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 302, array('Location' => '/redirected')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() follows a redirect if any');
-
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 302, array('Location' => '/redirected:1234')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $this->assertEquals('http://www.example.com/redirected:1234', $client->getRequest()->getUri(), '->followRedirect() follows relative urls');
-    }
-
-    public function testFollowRedirectWithMaxRedirects()
-    {
-        $client = new TestClient();
-        $client->setMaxRedirects(1);
-        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() follows a redirect if any');
-
-        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected2')));
-        try {
-            $client->followRedirect();
-            $this->fail('->followRedirect() throws a \LogicException if the request was redirected and limit of redirections was reached');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('LogicException', $e, '->followRedirect() throws a \LogicException if the request was redirected and limit of redirections was reached');
-        }
-
-        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() follows a redirect if any');
-
-        $client->setNextResponse(new Response('', 302, array('Location' => '/redirected')));
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $this->assertEquals('http://www.example.com/redirected', $client->getRequest()->getUri(), '->followRedirect() follows relative URLs');
-
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 302, array('Location' => '//www.example.org/')));
-        $client->request('GET', 'https://www.example.com/');
-
-        $this->assertEquals('https://www.example.org/', $client->getRequest()->getUri(), '->followRedirect() follows protocol-relative URLs');
-
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 302, array('Location' => 'http://www.example.com/redirected')));
-        $client->request('POST', 'http://www.example.com/foo/foobar', array('name' => 'bar'));
-
-        $this->assertEquals('get', $client->getRequest()->getMethod(), '->followRedirect() uses a get for 302');
-        $this->assertEquals(array(), $client->getRequest()->getParameters(), '->followRedirect() does not submit parameters when changing the method');
-    }
-
-    public function testFollowRedirectWithCookies()
-    {
-        $client = new TestClient();
-        $client->followRedirects(false);
-        $client->setNextResponse(new Response('', 302, array(
-            'Location' => 'http://www.example.com/redirected',
-            'Set-Cookie' => 'foo=bar',
-        )));
-        $client->request('GET', 'http://www.example.com/');
-        $this->assertEquals(array(), $client->getRequest()->getCookies());
-        $client->followRedirect();
-        $this->assertEquals(array('foo' => 'bar'), $client->getRequest()->getCookies());
-    }
-
-    public function testFollowRedirectWithHeaders()
-    {
-        $headers = array(
-            'HTTP_HOST' => 'www.example.com',
-            'HTTP_USER_AGENT' => 'Symfony2 BrowserKit',
-            'CONTENT_TYPE' => 'application/vnd.custom+xml',
-            'HTTPS' => false,
-        );
-
-        $client = new TestClient();
-        $client->followRedirects(false);
-        $client->setNextResponse(new Response('', 302, array(
-            'Location' => 'http://www.example.com/redirected',
-        )));
-        $client->request('GET', 'http://www.example.com/', array(), array(), array(
-            'CONTENT_TYPE' => 'application/vnd.custom+xml',
-        ));
-
-        $this->assertEquals($headers, $client->getRequest()->getServer());
-
-        $client->followRedirect();
-
-        $headers['HTTP_REFERER'] = 'http://www.example.com/';
-
-        $this->assertEquals($headers, $client->getRequest()->getServer());
-    }
-
-    public function testFollowRedirectWithPort()
-    {
-        $headers = array(
-            'HTTP_HOST' => 'www.example.com:8080',
-            'HTTP_USER_AGENT' => 'Symfony2 BrowserKit',
-            'HTTPS' => false,
-            'HTTP_REFERER' => 'http://www.example.com:8080/',
-        );
-
-        $client = new TestClient();
-        $client->setNextResponse(new Response('', 302, array(
-            'Location' => 'http://www.example.com:8080/redirected',
-        )));
-        $client->request('GET', 'http://www.example.com:8080/');
-
-        $this->assertEquals($headers, $client->getRequest()->getServer());
-    }
-
-    public function testBack()
-    {
-        $client = new TestClient();
-
-        $parameters = array('foo' => 'bar');
-        $files = array('myfile.foo' => 'baz');
-        $server = array('X_TEST_FOO' => 'bazbar');
-        $content = 'foobarbaz';
-
-        $client->request('GET', 'http://www.example.com/foo/foobar', $parameters, $files, $server, $content);
-        $client->request('GET', 'http://www.example.com/foo');
-        $client->back();
-
-        $this->assertEquals('http://www.example.com/foo/foobar', $client->getRequest()->getUri(), '->back() goes back in the history');
-        $this->assertArrayHasKey('foo', $client->getRequest()->getParameters(), '->back() keeps parameters');
-        $this->assertArrayHasKey('myfile.foo', $client->getRequest()->getFiles(), '->back() keeps files');
-        $this->assertArrayHasKey('X_TEST_FOO', $client->getRequest()->getServer(), '->back() keeps $_SERVER');
-        $this->assertEquals($content, $client->getRequest()->getContent(), '->back() keeps content');
-    }
-
-    public function testForward()
-    {
-        $client = new TestClient();
-
-        $parameters = array('foo' => 'bar');
-        $files = array('myfile.foo' => 'baz');
-        $server = array('X_TEST_FOO' => 'bazbar');
-        $content = 'foobarbaz';
-
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $client->request('GET', 'http://www.example.com/foo', $parameters, $files, $server, $content);
-        $client->back();
-        $client->forward();
-
-        $this->assertEquals('http://www.example.com/foo', $client->getRequest()->getUri(), '->forward() goes forward in the history');
-        $this->assertArrayHasKey('foo', $client->getRequest()->getParameters(), '->forward() keeps parameters');
-        $this->assertArrayHasKey('myfile.foo', $client->getRequest()->getFiles(), '->forward() keeps files');
-        $this->assertArrayHasKey('X_TEST_FOO', $client->getRequest()->getServer(), '->forward() keeps $_SERVER');
-        $this->assertEquals($content, $client->getRequest()->getContent(), '->forward() keeps content');
-    }
-
-    public function testReload()
-    {
-        $client = new TestClient();
-
-        $parameters = array('foo' => 'bar');
-        $files = array('myfile.foo' => 'baz');
-        $server = array('X_TEST_FOO' => 'bazbar');
-        $content = 'foobarbaz';
-
-        $client->request('GET', 'http://www.example.com/foo/foobar', $parameters, $files, $server, $content);
-        $client->reload();
-
-        $this->assertEquals('http://www.example.com/foo/foobar', $client->getRequest()->getUri(), '->reload() reloads the current page');
-        $this->assertArrayHasKey('foo', $client->getRequest()->getParameters(), '->reload() keeps parameters');
-        $this->assertArrayHasKey('myfile.foo', $client->getRequest()->getFiles(), '->reload() keeps files');
-        $this->assertArrayHasKey('X_TEST_FOO', $client->getRequest()->getServer(), '->reload() keeps $_SERVER');
-        $this->assertEquals($content, $client->getRequest()->getContent(), '->reload() keeps content');
-    }
-
-    public function testRestart()
-    {
-        $client = new TestClient();
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-        $client->restart();
-
-        $this->assertTrue($client->getHistory()->isEmpty(), '->restart() clears the history');
-        $this->assertEquals(array(), $client->getCookieJar()->all(), '->restart() clears the cookies');
-    }
-
-    public function testInsulatedRequests()
-    {
-        $client = new TestClient();
-        $client->insulate();
-        $client->setNextScript("new Symfony\Component\BrowserKit\Response('foobar')");
-        $client->request('GET', 'http://www.example.com/foo/foobar');
-
-        $this->assertEquals('foobar', $client->getResponse()->getContent(), '->insulate() process the request in a forked process');
-
-        $client->setNextScript("new Symfony\Component\BrowserKit\Response('foobar)");
-
-        try {
-            $client->request('GET', 'http://www.example.com/foo/foobar');
-            $this->fail('->request() throws a \RuntimeException if the script has an error');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('RuntimeException', $e, '->request() throws a \RuntimeException if the script has an error');
-        }
-    }
-
-    public function testGetServerParameter()
-    {
-        $client = new TestClient();
-        $this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
-        $this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
-        $this->assertEquals('testvalue', $client->getServerParameter('testkey', 'testvalue'));
-    }
-
-    public function testSetServerParameter()
-    {
-        $client = new TestClient();
-
-        $this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
-        $this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
-
-        $client->setServerParameter('HTTP_HOST', 'testhost');
-        $this->assertEquals('testhost', $client->getServerParameter('HTTP_HOST'));
-
-        $client->setServerParameter('HTTP_USER_AGENT', 'testua');
-        $this->assertEquals('testua', $client->getServerParameter('HTTP_USER_AGENT'));
-    }
-
-    public function testSetServerParameterInRequest()
-    {
-        $client = new TestClient();
-
-        $this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
-        $this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
-
-        $client->request('GET', 'https://www.example.com/https/www.example.com', array(), array(), array(
-            'HTTP_HOST' => 'testhost',
-            'HTTP_USER_AGENT' => 'testua',
-            'HTTPS' => false,
-            'NEW_SERVER_KEY' => 'new-server-key-value',
-        ));
-
-        $this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
-        $this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
-
-        $this->assertEquals('http://testhost/https/www.example.com', $client->getRequest()->getUri());
-
-        $server = $client->getRequest()->getServer();
-
-        $this->assertArrayHasKey('HTTP_USER_AGENT', $server);
-        $this->assertEquals('testua', $server['HTTP_USER_AGENT']);
-
-        $this->assertArrayHasKey('HTTP_HOST', $server);
-        $this->assertEquals('testhost', $server['HTTP_HOST']);
-
-        $this->assertArrayHasKey('NEW_SERVER_KEY', $server);
-        $this->assertEquals('new-server-key-value', $server['NEW_SERVER_KEY']);
-
-        $this->assertArrayHasKey('HTTPS', $server);
-        $this->assertFalse($server['HTTPS']);
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Tests/CookieJarTest.php b/core/vendor/symfony/browser-kit/Tests/CookieJarTest.php
deleted file mode 100644
index 4da4404e2494912838b9b132b5161d1a205a01d3..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Tests/CookieJarTest.php
+++ /dev/null
@@ -1,231 +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\BrowserKit\Tests;
-
-use Symfony\Component\BrowserKit\CookieJar;
-use Symfony\Component\BrowserKit\Cookie;
-use Symfony\Component\BrowserKit\Response;
-
-class CookieJarTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSetGet()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie = new Cookie('foo', 'bar'));
-
-        $this->assertEquals($cookie, $cookieJar->get('foo'), '->set() sets a cookie');
-
-        $this->assertNull($cookieJar->get('foobar'), '->get() returns null if the cookie does not exist');
-
-        $cookieJar->set($cookie = new Cookie('foo', 'bar', time() - 86400));
-        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
-    }
-
-    public function testExpire()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie = new Cookie('foo', 'bar'));
-        $cookieJar->expire('foo');
-        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
-    }
-
-    public function testAll()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar'));
-        $cookieJar->set($cookie2 = new Cookie('bar', 'foo'));
-
-        $this->assertEquals(array($cookie1, $cookie2), $cookieJar->all(), '->all() returns all cookies in the jar');
-    }
-
-    public function testClear()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar'));
-        $cookieJar->set($cookie2 = new Cookie('bar', 'foo'));
-
-        $cookieJar->clear();
-
-        $this->assertEquals(array(), $cookieJar->all(), '->clear() expires all cookies');
-    }
-
-    public function testUpdateFromResponse()
-    {
-        $response = new Response('', 200, array('Set-Cookie' => 'foo=foo'));
-
-        $cookieJar = new CookieJar();
-        $cookieJar->updateFromResponse($response);
-
-        $this->assertEquals('foo', $cookieJar->get('foo')->getValue(), '->updateFromResponse() updates cookies from a Response objects');
-    }
-
-    public function testUpdateFromSetCookie()
-    {
-        $setCookies = array('foo=foo');
-
-        $cookieJar = new CookieJar();
-        $cookieJar->set(new Cookie('bar', 'bar'));
-        $cookieJar->updateFromSetCookie($setCookies);
-
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $cookieJar->get('foo'));
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $cookieJar->get('bar'));
-        $this->assertEquals('foo', $cookieJar->get('foo')->getValue(), '->updateFromSetCookie() updates cookies from a Set-Cookie header');
-        $this->assertEquals('bar', $cookieJar->get('bar')->getValue(), '->updateFromSetCookie() keeps existing cookies');
-    }
-
-    public function testUpdateFromEmptySetCookie()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->updateFromSetCookie(array(''));
-        $this->assertEquals(array(), $cookieJar->all());
-    }
-
-    public function testUpdateFromSetCookieWithMultipleCookies()
-    {
-        $timestamp = time() + 3600;
-        $date = gmdate('D, d M Y H:i:s \G\M\T', $timestamp);
-        $setCookies = array(sprintf('foo=foo; expires=%s; domain=.symfony.com; path=/, bar=bar; domain=.blog.symfony.com, PHPSESSID=id; expires=%s', $date, $date));
-
-        $cookieJar = new CookieJar();
-        $cookieJar->updateFromSetCookie($setCookies);
-
-        $fooCookie = $cookieJar->get('foo', '/', '.symfony.com');
-        $barCookie = $cookieJar->get('bar', '/', '.blog.symfony.com');
-        $phpCookie = $cookieJar->get('PHPSESSID');
-
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $fooCookie);
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $barCookie);
-        $this->assertInstanceOf('Symfony\Component\BrowserKit\Cookie', $phpCookie);
-        $this->assertEquals('foo', $fooCookie->getValue());
-        $this->assertEquals('bar', $barCookie->getValue());
-        $this->assertEquals('id', $phpCookie->getValue());
-        $this->assertEquals($timestamp, $fooCookie->getExpiresTime());
-        $this->assertNull($barCookie->getExpiresTime());
-        $this->assertEquals($timestamp, $phpCookie->getExpiresTime());
-    }
-
-    /**
-     * @dataProvider provideAllValuesValues
-     */
-    public function testAllValues($uri, $values)
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo_nothing', 'foo'));
-        $cookieJar->set($cookie2 = new Cookie('foo_expired', 'foo', time() - 86400));
-        $cookieJar->set($cookie3 = new Cookie('foo_path', 'foo', null, '/foo'));
-        $cookieJar->set($cookie4 = new Cookie('foo_domain', 'foo', null, '/', '.example.com'));
-        $cookieJar->set($cookie4 = new Cookie('foo_strict_domain', 'foo', null, '/', '.www4.example.com'));
-        $cookieJar->set($cookie5 = new Cookie('foo_secure', 'foo', null, '/', '', true));
-
-        $this->assertEquals($values, array_keys($cookieJar->allValues($uri)), '->allValues() returns the cookie for a given URI');
-    }
-
-    public function provideAllValuesValues()
-    {
-        return array(
-            array('http://www.example.com', array('foo_nothing', 'foo_domain')),
-            array('http://www.example.com/', array('foo_nothing', 'foo_domain')),
-            array('http://foo.example.com/', array('foo_nothing', 'foo_domain')),
-            array('http://foo.example1.com/', array('foo_nothing')),
-            array('https://foo.example.com/', array('foo_nothing', 'foo_secure', 'foo_domain')),
-            array('http://www.example.com/foo/bar', array('foo_nothing', 'foo_path', 'foo_domain')),
-            array('http://www4.example.com/', array('foo_nothing', 'foo_domain', 'foo_strict_domain')),
-        );
-    }
-
-    public function testEncodedValues()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie = new Cookie('foo', 'bar%3Dbaz', null, '/', '', false, true, true));
-
-        $this->assertEquals(array('foo' => 'bar=baz'), $cookieJar->allValues('/'));
-        $this->assertEquals(array('foo' => 'bar%3Dbaz'), $cookieJar->allRawValues('/'));
-    }
-
-    public function testCookieExpireWithSameNameButDifferentPaths()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/foo'));
-        $cookieJar->set($cookie2 = new Cookie('foo', 'bar2', null, '/bar'));
-        $cookieJar->expire('foo', '/foo');
-
-        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
-        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
-        $this->assertEquals(array(), $cookieJar->allValues('http://example.com/foo'));
-        $this->assertEquals(array('foo' => 'bar2'), $cookieJar->allValues('http://example.com/bar'));
-    }
-
-    public function testCookieExpireWithNullPaths()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/'));
-        $cookieJar->expire('foo', null);
-
-        $this->assertNull($cookieJar->get('foo'), '->get() returns null if the cookie is expired');
-        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
-    }
-
-    public function testCookieWithSameNameButDifferentPaths()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/foo'));
-        $cookieJar->set($cookie2 = new Cookie('foo', 'bar2', null, '/bar'));
-
-        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
-        $this->assertEquals(array('foo' => 'bar1'), $cookieJar->allValues('http://example.com/foo'));
-        $this->assertEquals(array('foo' => 'bar2'), $cookieJar->allValues('http://example.com/bar'));
-    }
-
-    public function testCookieWithSameNameButDifferentDomains()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar1', null, '/', 'foo.example.com'));
-        $cookieJar->set($cookie2 = new Cookie('foo', 'bar2', null, '/', 'bar.example.com'));
-
-        $this->assertEquals(array(), array_keys($cookieJar->allValues('http://example.com/')));
-        $this->assertEquals(array('foo' => 'bar1'), $cookieJar->allValues('http://foo.example.com/'));
-        $this->assertEquals(array('foo' => 'bar2'), $cookieJar->allValues('http://bar.example.com/'));
-    }
-
-    public function testCookieGetWithSubdomain()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar', null, '/', '.example.com'));
-        $cookieJar->set($cookie2 = new Cookie('foo1', 'bar', null, '/', 'test.example.com'));
-
-        $this->assertEquals($cookie1, $cookieJar->get('foo', '/', 'foo.example.com'));
-        $this->assertEquals($cookie1, $cookieJar->get('foo', '/', 'example.com'));
-        $this->assertEquals($cookie2, $cookieJar->get('foo1', '/', 'test.example.com'));
-    }
-
-    public function testCookieGetWithSubdirectory()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set($cookie1 = new Cookie('foo', 'bar', null, '/test', '.example.com'));
-        $cookieJar->set($cookie2 = new Cookie('foo1', 'bar1', null, '/', '.example.com'));
-
-        $this->assertNull($cookieJar->get('foo', '/', '.example.com'));
-        $this->assertNull($cookieJar->get('foo', '/bar', '.example.com'));
-        $this->assertEquals($cookie1, $cookieJar->get('foo', '/test', 'example.com'));
-        $this->assertEquals($cookie2, $cookieJar->get('foo1', '/', 'example.com'));
-        $this->assertEquals($cookie2, $cookieJar->get('foo1', '/bar', 'example.com'));
-    }
-
-    public function testCookieWithWildcardDomain()
-    {
-        $cookieJar = new CookieJar();
-        $cookieJar->set(new Cookie('foo', 'bar', null, '/', '.example.com'));
-
-        $this->assertEquals(array('foo' => 'bar'), $cookieJar->allValues('http://www.example.com'));
-        $this->assertEmpty($cookieJar->allValues('http://wwwexample.com'));
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Tests/CookieTest.php b/core/vendor/symfony/browser-kit/Tests/CookieTest.php
deleted file mode 100644
index e1dd0df2c1533b6a128a0bd200f1934afe45cdbf..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Tests/CookieTest.php
+++ /dev/null
@@ -1,179 +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\BrowserKit\Tests;
-
-use Symfony\Component\BrowserKit\Cookie;
-
-class CookieTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @dataProvider getTestsForToFromString
-     */
-    public function testToFromString($cookie, $url = null)
-    {
-        $this->assertEquals($cookie, (string) Cookie::fromString($cookie, $url));
-    }
-
-    public function getTestsForToFromString()
-    {
-        return array(
-            array('foo=bar; path=/'),
-            array('foo=bar; path=/foo'),
-            array('foo=bar; domain=google.com; path=/'),
-            array('foo=bar; domain=example.com; path=/; secure', 'https://example.com/'),
-            array('foo=bar; path=/; httponly'),
-            array('foo=bar; domain=google.com; path=/foo; secure; httponly', 'https://google.com/'),
-            array('foo=bar=baz; path=/'),
-            array('foo=bar%3Dbaz; path=/'),
-        );
-    }
-
-    public function testFromStringIgnoreSecureFlag()
-    {
-        $this->assertFalse(Cookie::fromString('foo=bar; secure')->isSecure());
-        $this->assertFalse(Cookie::fromString('foo=bar; secure', 'http://example.com/')->isSecure());
-    }
-
-    /**
-     * @dataProvider getExpireCookieStrings
-     */
-    public function testFromStringAcceptsSeveralExpiresDateFormats($cookie)
-    {
-        $this->assertEquals(1596185377, Cookie::fromString($cookie)->getExpiresTime());
-    }
-
-    public function getExpireCookieStrings()
-    {
-        return array(
-            array('foo=bar; expires=Fri, 31-Jul-2020 08:49:37 GMT'),
-            array('foo=bar; expires=Fri, 31 Jul 2020 08:49:37 GMT'),
-            array('foo=bar; expires=Fri, 31-07-2020 08:49:37 GMT'),
-            array('foo=bar; expires=Fri, 31-07-20 08:49:37 GMT'),
-            array('foo=bar; expires=Friday, 31-Jul-20 08:49:37 GMT'),
-            array('foo=bar; expires=Fri Jul 31 08:49:37 2020'),
-            array('foo=bar; expires=\'Fri Jul 31 08:49:37 2020\''),
-            array('foo=bar; expires=Friday July 31st 2020, 08:49:37 GMT'),
-        );
-    }
-
-    public function testFromStringWithCapitalization()
-    {
-        $this->assertEquals('Foo=Bar; path=/', (string) Cookie::fromString('Foo=Bar'));
-        $this->assertEquals('foo=bar; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/', (string) Cookie::fromString('foo=bar; Expires=Fri, 31 Dec 2010 23:59:59 GMT'));
-        $this->assertEquals('foo=bar; domain=www.example.org; path=/; httponly', (string) Cookie::fromString('foo=bar; DOMAIN=www.example.org; HttpOnly'));
-    }
-
-    public function testFromStringWithUrl()
-    {
-        $this->assertEquals('foo=bar; domain=www.example.com; path=/', (string) Cookie::fromString('foo=bar', 'http://www.example.com/'));
-        $this->assertEquals('foo=bar; domain=www.example.com; path=/', (string) Cookie::fromString('foo=bar', 'http://www.example.com'));
-        $this->assertEquals('foo=bar; domain=www.example.com; path=/', (string) Cookie::fromString('foo=bar', 'http://www.example.com?foo'));
-        $this->assertEquals('foo=bar; domain=www.example.com; path=/foo', (string) Cookie::fromString('foo=bar', 'http://www.example.com/foo/bar'));
-        $this->assertEquals('foo=bar; domain=www.example.com; path=/', (string) Cookie::fromString('foo=bar; path=/', 'http://www.example.com/foo/bar'));
-        $this->assertEquals('foo=bar; domain=www.myotherexample.com; path=/', (string) Cookie::fromString('foo=bar; domain=www.myotherexample.com', 'http://www.example.com/'));
-    }
-
-    public function testFromStringThrowsAnExceptionIfCookieIsNotValid()
-    {
-        $this->setExpectedException('InvalidArgumentException');
-        Cookie::fromString('foo');
-    }
-
-    public function testFromStringThrowsAnExceptionIfCookieDateIsNotValid()
-    {
-        $this->setExpectedException('InvalidArgumentException');
-        Cookie::fromString('foo=bar; expires=Flursday July 31st 2020, 08:49:37 GMT');
-    }
-
-    public function testFromStringThrowsAnExceptionIfUrlIsNotValid()
-    {
-        $this->setExpectedException('InvalidArgumentException');
-        Cookie::fromString('foo=bar', 'foobar');
-    }
-
-    public function testGetName()
-    {
-        $cookie = new Cookie('foo', 'bar');
-        $this->assertEquals('foo', $cookie->getName(), '->getName() returns the cookie name');
-    }
-
-    public function testGetValue()
-    {
-        $cookie = new Cookie('foo', 'bar');
-        $this->assertEquals('bar', $cookie->getValue(), '->getValue() returns the cookie value');
-
-        $cookie = new Cookie('foo', 'bar%3Dbaz', null, '/', '', false, true, true); // raw value
-        $this->assertEquals('bar=baz', $cookie->getValue(), '->getValue() returns the urldecoded cookie value');
-    }
-
-    public function testGetRawValue()
-    {
-        $cookie = new Cookie('foo', 'bar=baz'); // decoded value
-        $this->assertEquals('bar%3Dbaz', $cookie->getRawValue(), '->getRawValue() returns the urlencoded cookie value');
-        $cookie = new Cookie('foo', 'bar%3Dbaz', null, '/', '', false, true, true); // raw value
-        $this->assertEquals('bar%3Dbaz', $cookie->getRawValue(), '->getRawValue() returns the non-urldecoded cookie value');
-    }
-
-    public function testGetPath()
-    {
-        $cookie = new Cookie('foo', 'bar', 0);
-        $this->assertEquals('/', $cookie->getPath(), '->getPath() returns / is no path is defined');
-
-        $cookie = new Cookie('foo', 'bar', 0, '/foo');
-        $this->assertEquals('/foo', $cookie->getPath(), '->getPath() returns the cookie path');
-    }
-
-    public function testGetDomain()
-    {
-        $cookie = new Cookie('foo', 'bar', 0, '/', 'foo.com');
-        $this->assertEquals('foo.com', $cookie->getDomain(), '->getDomain() returns the cookie domain');
-    }
-
-    public function testIsSecure()
-    {
-        $cookie = new Cookie('foo', 'bar');
-        $this->assertFalse($cookie->isSecure(), '->isSecure() returns false if not defined');
-
-        $cookie = new Cookie('foo', 'bar', 0, '/', 'foo.com', true);
-        $this->assertTrue($cookie->isSecure(), '->isSecure() returns the cookie secure flag');
-    }
-
-    public function testIsHttponly()
-    {
-        $cookie = new Cookie('foo', 'bar');
-        $this->assertTrue($cookie->isHttpOnly(), '->isHttpOnly() returns false if not defined');
-
-        $cookie = new Cookie('foo', 'bar', 0, '/', 'foo.com', false, true);
-        $this->assertTrue($cookie->isHttpOnly(), '->isHttpOnly() returns the cookie httponly flag');
-    }
-
-    public function testGetExpiresTime()
-    {
-        $cookie = new Cookie('foo', 'bar');
-        $this->assertNull($cookie->getExpiresTime(), '->getExpiresTime() returns the expires time');
-
-        $cookie = new Cookie('foo', 'bar', $time = time() - 86400);
-        $this->assertEquals($time, $cookie->getExpiresTime(), '->getExpiresTime() returns the expires time');
-    }
-
-    public function testIsExpired()
-    {
-        $cookie = new Cookie('foo', 'bar');
-        $this->assertFalse($cookie->isExpired(), '->isExpired() returns false when the cookie never expires (null as expires time)');
-
-        $cookie = new Cookie('foo', 'bar', time() - 86400);
-        $this->assertTrue($cookie->isExpired(), '->isExpired() returns true when the cookie is expired');
-
-        $cookie = new Cookie('foo', 'bar', 0);
-        $this->assertFalse($cookie->isExpired());
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Tests/HistoryTest.php b/core/vendor/symfony/browser-kit/Tests/HistoryTest.php
deleted file mode 100644
index d6d830e83ef05b0c15aa03b10cb0e780cd931a73..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Tests/HistoryTest.php
+++ /dev/null
@@ -1,101 +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\BrowserKit\Tests;
-
-use Symfony\Component\BrowserKit\History;
-use Symfony\Component\BrowserKit\Request;
-
-class HistoryTest extends \PHPUnit_Framework_TestCase
-{
-    public function testAdd()
-    {
-        $history = new History();
-        $history->add(new Request('http://www.example1.com/', 'get'));
-        $this->assertSame('http://www.example1.com/', $history->current()->getUri(), '->add() adds a request to the history');
-
-        $history->add(new Request('http://www.example2.com/', 'get'));
-        $this->assertSame('http://www.example2.com/', $history->current()->getUri(), '->add() adds a request to the history');
-
-        $history->add(new Request('http://www.example3.com/', 'get'));
-        $history->back();
-        $history->add(new Request('http://www.example4.com/', 'get'));
-        $this->assertSame('http://www.example4.com/', $history->current()->getUri(), '->add() adds a request to the history');
-
-        $history->back();
-        $this->assertSame('http://www.example2.com/', $history->current()->getUri(), '->add() adds a request to the history');
-    }
-
-    public function testClearIsEmpty()
-    {
-        $history = new History();
-        $history->add(new Request('http://www.example.com/', 'get'));
-
-        $this->assertFalse($history->isEmpty(), '->isEmpty() returns false if the history is not empty');
-
-        $history->clear();
-
-        $this->assertTrue($history->isEmpty(), '->isEmpty() true if the history is empty');
-    }
-
-    public function testCurrent()
-    {
-        $history = new History();
-
-        try {
-            $history->current();
-            $this->fail('->current() throws a \LogicException if the history is empty');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('LogicException', $e, '->current() throws a \LogicException if the history is empty');
-        }
-
-        $history->add(new Request('http://www.example.com/', 'get'));
-
-        $this->assertSame('http://www.example.com/', $history->current()->getUri(), '->current() returns the current request in the history');
-    }
-
-    public function testBack()
-    {
-        $history = new History();
-        $history->add(new Request('http://www.example.com/', 'get'));
-
-        try {
-            $history->back();
-            $this->fail('->back() throws a \LogicException if the history is already on the first page');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('LogicException', $e, '->current() throws a \LogicException if the history is already on the first page');
-        }
-
-        $history->add(new Request('http://www.example1.com/', 'get'));
-        $history->back();
-
-        $this->assertSame('http://www.example.com/', $history->current()->getUri(), '->back() returns the previous request in the history');
-    }
-
-    public function testForward()
-    {
-        $history = new History();
-        $history->add(new Request('http://www.example.com/', 'get'));
-        $history->add(new Request('http://www.example1.com/', 'get'));
-
-        try {
-            $history->forward();
-            $this->fail('->forward() throws a \LogicException if the history is already on the last page');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('LogicException', $e, '->forward() throws a \LogicException if the history is already on the last page');
-        }
-
-        $history->back();
-        $history->forward();
-
-        $this->assertSame('http://www.example1.com/', $history->current()->getUri(), '->forward() returns the next request in the history');
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Tests/RequestTest.php b/core/vendor/symfony/browser-kit/Tests/RequestTest.php
deleted file mode 100644
index b75b5fb5c0ab689203f20fc3eac9578c12cdd053..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Tests/RequestTest.php
+++ /dev/null
@@ -1,53 +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\BrowserKit\Tests;
-
-use Symfony\Component\BrowserKit\Request;
-
-class RequestTest extends \PHPUnit_Framework_TestCase
-{
-    public function testGetUri()
-    {
-        $request = new Request('http://www.example.com/', 'get');
-        $this->assertEquals('http://www.example.com/', $request->getUri(), '->getUri() returns the URI of the request');
-    }
-
-    public function testGetMethod()
-    {
-        $request = new Request('http://www.example.com/', 'get');
-        $this->assertEquals('get', $request->getMethod(), '->getMethod() returns the method of the request');
-    }
-
-    public function testGetParameters()
-    {
-        $request = new Request('http://www.example.com/', 'get', array('foo' => 'bar'));
-        $this->assertEquals(array('foo' => 'bar'), $request->getParameters(), '->getParameters() returns the parameters of the request');
-    }
-
-    public function testGetFiles()
-    {
-        $request = new Request('http://www.example.com/', 'get', array(), array('foo' => 'bar'));
-        $this->assertEquals(array('foo' => 'bar'), $request->getFiles(), '->getFiles() returns the uploaded files of the request');
-    }
-
-    public function testGetCookies()
-    {
-        $request = new Request('http://www.example.com/', 'get', array(), array(), array('foo' => 'bar'));
-        $this->assertEquals(array('foo' => 'bar'), $request->getCookies(), '->getCookies() returns the cookies of the request');
-    }
-
-    public function testGetServer()
-    {
-        $request = new Request('http://www.example.com/', 'get', array(), array(), array(), array('foo' => 'bar'));
-        $this->assertEquals(array('foo' => 'bar'), $request->getServer(), '->getServer() returns the server parameters of the request');
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/Tests/ResponseTest.php b/core/vendor/symfony/browser-kit/Tests/ResponseTest.php
deleted file mode 100644
index bfe3cd52c2312a0f66cac46eccbe0d8be94584d2..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/Tests/ResponseTest.php
+++ /dev/null
@@ -1,76 +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\BrowserKit\Tests;
-
-use Symfony\Component\BrowserKit\Response;
-
-class ResponseTest extends \PHPUnit_Framework_TestCase
-{
-    public function testGetUri()
-    {
-        $response = new Response('foo');
-        $this->assertEquals('foo', $response->getContent(), '->getContent() returns the content of the response');
-    }
-
-    public function testGetStatus()
-    {
-        $response = new Response('foo', 304);
-        $this->assertEquals('304', $response->getStatus(), '->getStatus() returns the status of the response');
-    }
-
-    public function testGetHeaders()
-    {
-        $response = new Response('foo', 200, array('foo' => 'bar'));
-        $this->assertEquals(array('foo' => 'bar'), $response->getHeaders(), '->getHeaders() returns the headers of the response');
-    }
-
-    public function testGetHeader()
-    {
-        $response = new Response('foo', 200, array(
-            'Content-Type' => 'text/html',
-            'Set-Cookie' => array('foo=bar', 'bar=foo'),
-        ));
-
-        $this->assertEquals('text/html', $response->getHeader('Content-Type'), '->getHeader() returns a header of the response');
-        $this->assertEquals('text/html', $response->getHeader('content-type'), '->getHeader() returns a header of the response');
-        $this->assertEquals('text/html', $response->getHeader('content_type'), '->getHeader() returns a header of the response');
-        $this->assertEquals('foo=bar', $response->getHeader('Set-Cookie'), '->getHeader() returns the first header value');
-        $this->assertEquals(array('foo=bar', 'bar=foo'), $response->getHeader('Set-Cookie', false), '->getHeader() returns all header values if first is false');
-
-        $this->assertNull($response->getHeader('foo'), '->getHeader() returns null if the header is not defined');
-        $this->assertEquals(array(), $response->getHeader('foo', false), '->getHeader() returns an empty array if the header is not defined and first is set to false');
-    }
-
-    public function testMagicToString()
-    {
-        $response = new Response('foo', 304, array('foo' => 'bar'));
-
-        $this->assertEquals("foo: bar\n\nfoo", $response->__toString(), '->__toString() returns the headers and the content as a string');
-    }
-
-    public function testMagicToStringWithMultipleSetCookieHeader()
-    {
-        $headers = array(
-            'content-type' => 'text/html; charset=utf-8',
-            'set-cookie' => array('foo=bar', 'bar=foo'),
-        );
-
-        $expected = 'content-type: text/html; charset=utf-8'."\n";
-        $expected .= 'set-cookie: foo=bar'."\n";
-        $expected .= 'set-cookie: bar=foo'."\n\n";
-        $expected .= 'foo';
-
-        $response = new Response('foo', 304, $headers);
-
-        $this->assertEquals($expected, $response->__toString(), '->__toString() returns the headers and the content as a string');
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/composer.json b/core/vendor/symfony/browser-kit/composer.json
deleted file mode 100644
index 0cb629c085424d5ffd80b0907721ade5f78cb470..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/composer.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-    "name": "symfony/browser-kit",
-    "type": "library",
-    "description": "Symfony BrowserKit Component",
-    "keywords": [],
-    "homepage": "https://symfony.com",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Fabien Potencier",
-            "email": "fabien@symfony.com"
-        },
-        {
-            "name": "Symfony Community",
-            "homepage": "https://symfony.com/contributors"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.9",
-        "symfony/dom-crawler": "~2.0,>=2.0.5"
-    },
-    "require-dev": {
-        "symfony/phpunit-bridge": "~2.7",
-        "symfony/process": "~2.0,>=2.0.5",
-        "symfony/css-selector": "~2.0,>=2.0.5"
-    },
-    "suggest": {
-        "symfony/process": ""
-    },
-    "autoload": {
-        "psr-4": { "Symfony\\Component\\BrowserKit\\": "" }
-    },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "2.7-dev"
-        }
-    }
-}
diff --git a/core/vendor/symfony/browser-kit/phpunit.xml.dist b/core/vendor/symfony/browser-kit/phpunit.xml.dist
deleted file mode 100644
index d76b2b98afd80b1edd715e62f687511e7c899a44..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/browser-kit/phpunit.xml.dist
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony BrowserKit Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Resources</directory>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/core/vendor/symfony/class-loader/ApcUniversalClassLoader.php b/core/vendor/symfony/class-loader/ApcUniversalClassLoader.php
index 898018ae767d3c5d707d667af9a76ae88c17db57..dd95413caf1005ece32a726cbced877e321cc92b 100644
--- a/core/vendor/symfony/class-loader/ApcUniversalClassLoader.php
+++ b/core/vendor/symfony/class-loader/ApcUniversalClassLoader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\ClassLoader;
 
-@trigger_error('The '.__NAMESPACE__.'\ApcUniversalClassLoader class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\ClassLoader\ApcClassLoader class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ApcUniversalClassLoader class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\ClassLoader\ApcClassLoader class instead.', E_USER_DEPRECATED);
 
 /**
  * ApcUniversalClassLoader implements a "universal" autoloader cached in APC for PHP 5.3.
diff --git a/core/vendor/symfony/class-loader/DebugClassLoader.php b/core/vendor/symfony/class-loader/DebugClassLoader.php
index b3eb89a6ac21e2adc929934f9de013e14af36423..351869928c247e90b529a6a1f7259ed83a953b9a 100644
--- a/core/vendor/symfony/class-loader/DebugClassLoader.php
+++ b/core/vendor/symfony/class-loader/DebugClassLoader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\ClassLoader;
 
-@trigger_error('The '.__NAMESPACE__.'\DebugClassLoader class is deprecated since version 2.4 and will be removed in 3.0. Use the Symfony\Component\Debug\DebugClassLoader class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\DebugClassLoader class is deprecated since version 2.4 and will be removed in 3.0. Use the Symfony\Component\Debug\DebugClassLoader class instead.', E_USER_DEPRECATED);
 
 /**
  * Autoloader checking if the class is really defined in the file found.
diff --git a/core/vendor/symfony/class-loader/DebugUniversalClassLoader.php b/core/vendor/symfony/class-loader/DebugUniversalClassLoader.php
index 807bcd15e2fb7c2f1f29965cc7d0aa0573a7512e..2a102dbbf423b983e183cbea44504575ab769b8c 100644
--- a/core/vendor/symfony/class-loader/DebugUniversalClassLoader.php
+++ b/core/vendor/symfony/class-loader/DebugUniversalClassLoader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\ClassLoader;
 
-@trigger_error('The '.__NAMESPACE__.'\DebugUniversalClassLoader class is deprecated since version 2.4 and will be removed in 3.0. Use the Symfony\Component\Debug\DebugClassLoader class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\DebugUniversalClassLoader class is deprecated since version 2.4 and will be removed in 3.0. Use the Symfony\Component\Debug\DebugClassLoader class instead.', E_USER_DEPRECATED);
 
 /**
  * Checks that the class is actually declared in the included file.
diff --git a/core/vendor/symfony/class-loader/Tests/ClassMapGeneratorTest.php b/core/vendor/symfony/class-loader/Tests/ClassMapGeneratorTest.php
index 29c3288347dccfdd631d459b1ef947fe0eca521a..88099258eccc21523207a68dc6402e9469d1b5b1 100644
--- a/core/vendor/symfony/class-loader/Tests/ClassMapGeneratorTest.php
+++ b/core/vendor/symfony/class-loader/Tests/ClassMapGeneratorTest.php
@@ -22,7 +22,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
 
     public function prepare_workspace()
     {
-        $this->workspace = rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.time().mt_rand(0, 1000);
+        $this->workspace = rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.time().rand(0, 1000);
         mkdir($this->workspace, 0777, true);
         $this->workspace = realpath($this->workspace);
     }
diff --git a/core/vendor/symfony/class-loader/Tests/LegacyApcUniversalClassLoaderTest.php b/core/vendor/symfony/class-loader/Tests/LegacyApcUniversalClassLoaderTest.php
index 0268a1c4563a94a92f007c220b52a4aaa5094f96..48b46fa3ecb63ea988bfed503612b63a063164ba 100644
--- a/core/vendor/symfony/class-loader/Tests/LegacyApcUniversalClassLoaderTest.php
+++ b/core/vendor/symfony/class-loader/Tests/LegacyApcUniversalClassLoaderTest.php
@@ -20,6 +20,8 @@ class LegacyApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
 {
     protected function setUp()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         if (!extension_loaded('apc')) {
             $this->markTestSkipped('The apc extension is not available.');
         }
diff --git a/core/vendor/symfony/class-loader/Tests/LegacyUniversalClassLoaderTest.php b/core/vendor/symfony/class-loader/Tests/LegacyUniversalClassLoaderTest.php
index 2588e9603443ad70e836568bda9f452f8efbca73..9149e2e863eac4ad9c9cc95bb167888d72112c7d 100644
--- a/core/vendor/symfony/class-loader/Tests/LegacyUniversalClassLoaderTest.php
+++ b/core/vendor/symfony/class-loader/Tests/LegacyUniversalClassLoaderTest.php
@@ -18,6 +18,11 @@
  */
 class LegacyUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
 {
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
     /**
      * @dataProvider getLoadClassTests
      */
diff --git a/core/vendor/symfony/class-loader/UniversalClassLoader.php b/core/vendor/symfony/class-loader/UniversalClassLoader.php
index 5293a4cb72a7a57a62e10ef191fc69632250cd6a..781d3a29a931b7b81263aa2afeb2cc2aa854fa35 100644
--- a/core/vendor/symfony/class-loader/UniversalClassLoader.php
+++ b/core/vendor/symfony/class-loader/UniversalClassLoader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\ClassLoader;
 
-@trigger_error('The '.__NAMESPACE__.'\UniversalClassLoader class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\ClassLoader\ClassLoader class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\UniversalClassLoader class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\ClassLoader\ClassLoader class instead.', E_USER_DEPRECATED);
 
 /**
  * UniversalClassLoader implements a "universal" autoloader for PHP 5.3.
diff --git a/core/vendor/symfony/console/Application.php b/core/vendor/symfony/console/Application.php
index c816f015b370c6fcb287587a841c6e36f985a2d4..1ee2831b7978c3b35ca4c5e5c2376cbbd7c06263 100644
--- a/core/vendor/symfony/console/Application.php
+++ b/core/vendor/symfony/console/Application.php
@@ -488,7 +488,7 @@ public function findNamespace($namespace)
         if (empty($namespaces)) {
             $message = sprintf('There are no commands defined in the "%s" namespace.', $namespace);
 
-            if ($alternatives = $this->findAlternatives($namespace, $allNamespaces)) {
+            if ($alternatives = $this->findAlternatives($namespace, $allNamespaces, array())) {
                 if (1 == count($alternatives)) {
                     $message .= "\n\nDid you mean this?\n    ";
                 } else {
@@ -537,7 +537,7 @@ public function find($name)
 
             $message = sprintf('Command "%s" is not defined.', $name);
 
-            if ($alternatives = $this->findAlternatives($name, $allCommands)) {
+            if ($alternatives = $this->findAlternatives($name, $allCommands, array())) {
                 if (1 == count($alternatives)) {
                     $message .= "\n\nDid you mean this?\n    ";
                 } else {
@@ -628,7 +628,7 @@ public static function getAbbreviations($names)
      */
     public function asText($namespace = null, $raw = false)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $descriptor = new TextDescriptor();
         $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, !$raw);
@@ -649,7 +649,7 @@ public function asText($namespace = null, $raw = false)
      */
     public function asXml($namespace = null, $asDom = false)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $descriptor = new XmlDescriptor();
 
@@ -1086,7 +1086,7 @@ private function findAlternatives($name, $collection)
             }
         }
 
-        $alternatives = array_filter($alternatives, function ($lev) use ($threshold) { return $lev < 2 * $threshold; });
+        $alternatives = array_filter($alternatives, function ($lev) use ($threshold) { return $lev < 2*$threshold; });
         asort($alternatives);
 
         return array_keys($alternatives);
@@ -1142,7 +1142,7 @@ private function splitStringByWidth($string, $width)
             $lines[] = str_pad($line, $width);
             $line = $char;
         }
-        if ('' !== $line) {
+        if (strlen($line)) {
             $lines[] = count($lines) ? str_pad($line, $width) : $line;
         }
 
diff --git a/core/vendor/symfony/console/Command/Command.php b/core/vendor/symfony/console/Command/Command.php
index e6642631c942342efa87e06d9b44ba7fcb8aa2d4..02e207eac775cc1ea1bee6d913473df1665c8c6c 100644
--- a/core/vendor/symfony/console/Command/Command.php
+++ b/core/vendor/symfony/console/Command/Command.php
@@ -645,7 +645,7 @@ public function getHelper($name)
      */
     public function asText()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $descriptor = new TextDescriptor();
         $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
@@ -665,7 +665,7 @@ public function asText()
      */
     public function asXml($asDom = false)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $descriptor = new XmlDescriptor();
 
diff --git a/core/vendor/symfony/console/Command/HelpCommand.php b/core/vendor/symfony/console/Command/HelpCommand.php
index 8c20b5706910fd9606e952fb82ef7bad1963efe3..ae06af50e591c3ab67c1ec7b21cd717812b21d3a 100644
--- a/core/vendor/symfony/console/Command/HelpCommand.php
+++ b/core/vendor/symfony/console/Command/HelpCommand.php
@@ -77,7 +77,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         if ($input->getOption('xml')) {
-            @trigger_error('The --xml option was deprecated in version 2.7 and will be removed in version 3.0. Use the --format option instead.', E_USER_DEPRECATED);
+            trigger_error('The --xml option was deprecated in version 2.7 and will be removed in version 3.0. Use the --format option instead.', E_USER_DEPRECATED);
 
             $input->setOption('format', 'xml');
         }
diff --git a/core/vendor/symfony/console/Command/ListCommand.php b/core/vendor/symfony/console/Command/ListCommand.php
index 5f970e82e66d9414a4960160d94fb5de2240f9ad..c42a6f27d3489a0327b87809232b6d4daa3b311e 100644
--- a/core/vendor/symfony/console/Command/ListCommand.php
+++ b/core/vendor/symfony/console/Command/ListCommand.php
@@ -69,7 +69,7 @@ public function getNativeDefinition()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         if ($input->getOption('xml')) {
-            @trigger_error('The --xml option was deprecated in version 2.7 and will be removed in version 3.0. Use the --format option instead.', E_USER_DEPRECATED);
+            trigger_error('The --xml option was deprecated in version 2.7 and will be removed in version 3.0. Use the --format option instead.', E_USER_DEPRECATED);
 
             $input->setOption('format', 'xml');
         }
diff --git a/core/vendor/symfony/console/Descriptor/TextDescriptor.php b/core/vendor/symfony/console/Descriptor/TextDescriptor.php
index 5c3fea9a2caf2f315fdc4f0c219f97fe4535f5e9..0824463fce96baa01ed942933a5af6b0624c21e8 100644
--- a/core/vendor/symfony/console/Descriptor/TextDescriptor.php
+++ b/core/vendor/symfony/console/Descriptor/TextDescriptor.php
@@ -40,7 +40,7 @@ protected function describeInputArgument(InputArgument $argument, array $options
         $totalWidth = isset($options['total_width']) ? $options['total_width'] : strlen($argument->getName());
         $spacingWidth = $totalWidth - strlen($argument->getName()) + 2;
 
-        $this->writeText(sprintf('  <info>%s</info>%s%s%s',
+        $this->writeText(sprintf("  <info>%s</info>%s%s%s",
             $argument->getName(),
             str_repeat(' ', $spacingWidth),
             // + 17 = 2 spaces + <info> + </info> + 2 spaces
@@ -77,7 +77,7 @@ protected function describeInputOption(InputOption $option, array $options = arr
 
         $spacingWidth = $totalWidth - strlen($synopsis) + 2;
 
-        $this->writeText(sprintf('  <info>%s</info>%s%s%s%s',
+        $this->writeText(sprintf("  <info>%s</info>%s%s%s%s",
             $synopsis,
             str_repeat(' ', $spacingWidth),
             // + 17 = 2 spaces + <info> + </info> + 2 spaces
@@ -207,7 +207,7 @@ protected function describeApplication(Application $application, array $options
                 foreach ($namespace['commands'] as $name) {
                     $this->writeText("\n");
                     $spacingWidth = $width - strlen($name);
-                    $this->writeText(sprintf('  <info>%s</info>%s%s', $name, str_repeat(' ', $spacingWidth), $description->getCommand($name)->getDescription()), $options);
+                    $this->writeText(sprintf("  <info>%s</info>%s%s", $name, str_repeat(' ', $spacingWidth), $description->getCommand($name)->getDescription()), $options);
                 }
             }
 
@@ -266,8 +266,7 @@ private function calculateTotalWidthForOptions($options)
     {
         $totalWidth = 0;
         foreach ($options as $option) {
-            // "-" + shortcut + ", --" + name
-            $nameLength = 1 + max(strlen($option->getShortcut()), 1) + 4 + strlen($option->getName());
+            $nameLength = 4 + strlen($option->getName()) + 2; // - + shortcut + , + whitespace + name + --
 
             if ($option->acceptValue()) {
                 $valueLength = 1 + strlen($option->getName()); // = + value
diff --git a/core/vendor/symfony/console/Formatter/OutputFormatter.php b/core/vendor/symfony/console/Formatter/OutputFormatter.php
index 331b204fec8e5a27eaa34a4c3f8f1da46eb1d3bd..a053ac6ba09668efa5a9d313776eaaab551b7278 100644
--- a/core/vendor/symfony/console/Formatter/OutputFormatter.php
+++ b/core/vendor/symfony/console/Formatter/OutputFormatter.php
@@ -33,7 +33,7 @@ class OutputFormatter implements OutputFormatterInterface
      */
     public static function escape($text)
     {
-        return preg_replace('/([^\\\\]?)</', '$1\\<', $text);
+        return preg_replace('/([^\\\\]?)</is', '$1\\<', $text);
     }
 
     /**
@@ -146,7 +146,7 @@ public function format($message)
         $offset = 0;
         $output = '';
         $tagRegex = '[a-z][a-z0-9_=;-]*';
-        preg_match_all("#<(($tagRegex) | /($tagRegex)?)>#ix", $message, $matches, PREG_OFFSET_CAPTURE);
+        preg_match_all("#<(($tagRegex) | /($tagRegex)?)>#isx", $message, $matches, PREG_OFFSET_CAPTURE);
         foreach ($matches[0] as $i => $match) {
             $pos = $match[1];
             $text = $match[0];
diff --git a/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php b/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php
index ee62cdbd61dd940f160be59acff8f286e9fb5d6e..b3f274a8b0b8161df935e82541435752ea1694d3 100644
--- a/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php
+++ b/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php
@@ -29,7 +29,6 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface
         'magenta' => array('set' => 35, 'unset' => 39),
         'cyan' => array('set' => 36, 'unset' => 39),
         'white' => array('set' => 37, 'unset' => 39),
-        'default' => array('set' => 39, 'unset' => 39),
     );
     private static $availableBackgroundColors = array(
         'black' => array('set' => 40, 'unset' => 49),
@@ -40,7 +39,6 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface
         'magenta' => array('set' => 45, 'unset' => 49),
         'cyan' => array('set' => 46, 'unset' => 49),
         'white' => array('set' => 47, 'unset' => 49),
-        'default' => array('set' => 49, 'unset' => 49),
     );
     private static $availableOptions = array(
         'bold' => array('set' => 1, 'unset' => 22),
diff --git a/core/vendor/symfony/console/Helper/DebugFormatterHelper.php b/core/vendor/symfony/console/Helper/DebugFormatterHelper.php
index 0b4b9379020d995ffe60aef62b090ba06cd923b9..cdb620d1684ba08224ca8e7a9521ea61d15ff9f9 100644
--- a/core/vendor/symfony/console/Helper/DebugFormatterHelper.php
+++ b/core/vendor/symfony/console/Helper/DebugFormatterHelper.php
@@ -20,7 +20,7 @@
  */
 class DebugFormatterHelper extends Helper
 {
-    private $colors = array('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'default');
+    private $colors = array('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white');
     private $started = array();
     private $count = -1;
 
diff --git a/core/vendor/symfony/console/Helper/DialogHelper.php b/core/vendor/symfony/console/Helper/DialogHelper.php
index a280b49c19833b83017aa76a6f6be9299130adc1..886baafd42a3d4f66c405bf418e638ad741cbd6e 100644
--- a/core/vendor/symfony/console/Helper/DialogHelper.php
+++ b/core/vendor/symfony/console/Helper/DialogHelper.php
@@ -31,7 +31,7 @@ class DialogHelper extends InputAwareHelper
     public function __construct($triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('"Symfony\Component\Console\Helper\DialogHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\QuestionHelper" instead.', E_USER_DEPRECATED);
+            trigger_error('"Symfony\Component\Console\Helper\DialogHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\QuestionHelper" instead.', E_USER_DEPRECATED);
         }
     }
 
@@ -466,18 +466,18 @@ private function hasSttyAvailable()
      */
     private function validateAttempts($interviewer, OutputInterface $output, $validator, $attempts)
     {
-        $e = null;
+        $error = null;
         while (false === $attempts || $attempts--) {
-            if (null !== $e) {
-                $output->writeln($this->getHelperSet()->get('formatter')->formatBlock($e->getMessage(), 'error'));
+            if (null !== $error) {
+                $output->writeln($this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error'));
             }
 
             try {
                 return call_user_func($validator, $interviewer());
-            } catch (\Exception $e) {
+            } catch (\Exception $error) {
             }
         }
 
-        throw $e;
+        throw $error;
     }
 }
diff --git a/core/vendor/symfony/console/Helper/HelperSet.php b/core/vendor/symfony/console/Helper/HelperSet.php
index 00354dd91ff64ecbd2684a1e68d606c69ed0f6bf..52a669d48542bf1f2f0e7143b972bef0d784b995 100644
--- a/core/vendor/symfony/console/Helper/HelperSet.php
+++ b/core/vendor/symfony/console/Helper/HelperSet.php
@@ -79,11 +79,11 @@ public function get($name)
         }
 
         if ('dialog' === $name && $this->helpers[$name] instanceof DialogHelper) {
-            @trigger_error('"Symfony\Component\Console\Helper\DialogHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\QuestionHelper" instead.', E_USER_DEPRECATED);
+            trigger_error('"Symfony\Component\Console\Helper\DialogHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\QuestionHelper" instead.', E_USER_DEPRECATED);
         } elseif ('progress' === $name && $this->helpers[$name] instanceof ProgressHelper) {
-            @trigger_error('"Symfony\Component\Console\Helper\ProgressHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\ProgressBar" instead.', E_USER_DEPRECATED);
+            trigger_error('"Symfony\Component\Console\Helper\ProgressHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\ProgressBar" instead.', E_USER_DEPRECATED);
         } elseif ('table' === $name && $this->helpers[$name] instanceof TableHelper) {
-            @trigger_error('"Symfony\Component\Console\Helper\TableHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\Table" instead.', E_USER_DEPRECATED);
+            trigger_error('"Symfony\Component\Console\Helper\TableHelper" is deprecated since version 2.5 and will be removed in 3.0. Use "Symfony\Component\Console\Helper\Table" instead.', E_USER_DEPRECATED);
         }
 
         return $this->helpers[$name];
diff --git a/core/vendor/symfony/console/Helper/ProgressBar.php b/core/vendor/symfony/console/Helper/ProgressBar.php
index e5ba92773889d21c108514583c7c5b6d62b37f1b..ae1fdae88259d4b6b6917385eda0b2fc83991939 100644
--- a/core/vendor/symfony/console/Helper/ProgressBar.php
+++ b/core/vendor/symfony/console/Helper/ProgressBar.php
@@ -177,7 +177,7 @@ public function getMaxSteps()
      */
     public function getStep()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getProgress() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getProgress() method instead.', E_USER_DEPRECATED);
 
         return $this->getProgress();
     }
@@ -368,13 +368,13 @@ public function advance($step = 1)
      */
     public function setCurrent($step)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the setProgress() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the setProgress() method instead.', E_USER_DEPRECATED);
 
         $this->setProgress($step);
     }
 
     /**
-     * Sets whether to overwrite the progressbar, false for new line.
+     * Sets whether to overwrite the progressbar, false for new line
      *
      * @param bool $overwrite
      */
@@ -401,8 +401,8 @@ public function setProgress($step)
             $this->max = $step;
         }
 
-        $prevPeriod = (int) ($this->step / $this->redrawFreq);
-        $currPeriod = (int) ($step / $this->redrawFreq);
+        $prevPeriod = intval($this->step / $this->redrawFreq);
+        $currPeriod = intval($step / $this->redrawFreq);
         $this->step = $step;
         $this->percent = $this->max ? (float) $this->step / $this->max : 0;
         if ($prevPeriod !== $currPeriod || $this->max === $step) {
diff --git a/core/vendor/symfony/console/Helper/ProgressHelper.php b/core/vendor/symfony/console/Helper/ProgressHelper.php
index bd885662f43e42ffcfa5f4992799a0ee7a7b9393..fe67e9d026851db56733c7e80893278df394324a 100644
--- a/core/vendor/symfony/console/Helper/ProgressHelper.php
+++ b/core/vendor/symfony/console/Helper/ProgressHelper.php
@@ -121,7 +121,7 @@ class ProgressHelper extends Helper
     public function __construct($triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Console\Helper\ProgressBar class instead.', E_USER_DEPRECATED);
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Console\Helper\ProgressBar class instead.', E_USER_DEPRECATED);
         }
     }
 
diff --git a/core/vendor/symfony/console/Helper/Table.php b/core/vendor/symfony/console/Helper/Table.php
index 9e86c856d05eec81804e437a7263189d3aba6333..ff668a475e8cc3e568ea4473b4fec1a202985b4d 100644
--- a/core/vendor/symfony/console/Helper/Table.php
+++ b/core/vendor/symfony/console/Helper/Table.php
@@ -171,7 +171,7 @@ public function addRow($row)
         if ($row instanceof TableSeparator) {
             $this->rows[] = $row;
 
-            return $this;
+            return;
         }
 
         if (!is_array($row)) {
@@ -385,7 +385,7 @@ private function fillNextRows($rows, $line)
         $unmergedRows = array();
         foreach ($rows[$line] as $column => $cell) {
             if ($cell instanceof TableCell && $cell->getRowspan() > 1) {
-                $nbLines = $cell->getRowspan() - 1;
+                $nbLines = $cell->getRowspan()-1;
                 $lines = array($cell);
                 if (strstr($cell, "\n")) {
                     $lines = explode("\n", $cell);
@@ -412,7 +412,7 @@ private function fillNextRows($rows, $line)
                     array_splice($rows[$unmergedRowKey], $cellKey, 0, array($cell));
                 }
             } else {
-                $row = $this->copyRow($rows, $unmergedRowKey - 1);
+                $row = $this->copyRow($rows, $unmergedRowKey-1);
                 foreach ($unmergedRow as $column => $cell) {
                     if (!empty($cell)) {
                         $row[$column] = $unmergedRow[$column];
@@ -476,7 +476,7 @@ private function getNumberOfColumns(array $row)
     {
         $columns = count($row);
         foreach ($row as $column) {
-            $columns += $column instanceof TableCell ? ($column->getColspan() - 1) : 0;
+            $columns += $column instanceof TableCell ? ($column->getColspan()-1) : 0;
         }
 
         return $columns;
@@ -491,11 +491,11 @@ private function getNumberOfColumns(array $row)
      */
     private function getRowColumns($row)
     {
-        $columns = range(0, $this->numberOfColumns - 1);
+        $columns = range(0, $this->numberOfColumns-1);
         foreach ($row as $cellKey => $cell) {
             if ($cell instanceof TableCell && $cell->getColspan() > 1) {
                 // exclude grouped columns.
-                $columns = array_diff($columns, range($cellKey + 1, $cellKey + $cell->getColspan() - 1));
+                $columns = array_diff($columns, range($cellKey+1, $cellKey + $cell->getColspan()-1));
             }
         }
 
@@ -550,13 +550,12 @@ private function getCellWidth(array $row, $column)
     {
         if (isset($row[$column])) {
             $cell = $row[$column];
-            $cellWidth = Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
             if ($cell instanceof TableCell && $cell->getColspan() > 1) {
                 // we assume that cell value will be across more than one column.
-                $cellWidth = $cellWidth / $cell->getColspan();
+                $cell = substr($cell, 0, strlen($cell)/$cell->getColspan());
             }
 
-            return $cellWidth;
+            return Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
         }
 
         return 0;
diff --git a/core/vendor/symfony/console/Helper/TableHelper.php b/core/vendor/symfony/console/Helper/TableHelper.php
index 29535225a0c798bbb9814339bb14861275823e2c..06af5fad9b649a68407969acc79cdae1a96d5742 100644
--- a/core/vendor/symfony/console/Helper/TableHelper.php
+++ b/core/vendor/symfony/console/Helper/TableHelper.php
@@ -37,7 +37,7 @@ class TableHelper extends Helper
     public function __construct($triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Console\Helper\Table class instead.', E_USER_DEPRECATED);
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Console\Helper\Table class instead.', E_USER_DEPRECATED);
         }
 
         $this->table = new Table(new NullOutput());
diff --git a/core/vendor/symfony/console/Input/ArgvInput.php b/core/vendor/symfony/console/Input/ArgvInput.php
index a6c2132797086c0c6130f68e8f4da33ce2e2a1c6..97b0cfc05d2174ff221d1e24b07c52d7c954e7ed 100644
--- a/core/vendor/symfony/console/Input/ArgvInput.php
+++ b/core/vendor/symfony/console/Input/ArgvInput.php
@@ -215,13 +215,13 @@ private function addLongOption($name, $value)
 
         $option = $this->definition->getOption($name);
 
-        // Convert empty values to null
-        if (!isset($value[0])) {
+        // Convert false values (from a previous call to substr()) to null
+        if (false === $value) {
             $value = null;
         }
 
         if (null !== $value && !$option->acceptValue()) {
-            throw new \RuntimeException(sprintf('The "--%s" option does not accept a value.', $name));
+            throw new \RuntimeException(sprintf('The "--%s" option does not accept a value.', $name, $value));
         }
 
         if (null === $value && $option->acceptValue() && count($this->parsed)) {
diff --git a/core/vendor/symfony/console/Input/InputDefinition.php b/core/vendor/symfony/console/Input/InputDefinition.php
index 21ac832c3cda5bd7c95c04949f91535f175e15a6..044ec265b246db3c14d355ca9fe9d07147da7171 100644
--- a/core/vendor/symfony/console/Input/InputDefinition.php
+++ b/core/vendor/symfony/console/Input/InputDefinition.php
@@ -449,7 +449,7 @@ public function getSynopsis($short = false)
      */
     public function asText()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $descriptor = new TextDescriptor();
         $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
@@ -469,7 +469,7 @@ public function asText()
      */
     public function asXml($asDom = false)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $descriptor = new XmlDescriptor();
 
diff --git a/core/vendor/symfony/console/Input/StringInput.php b/core/vendor/symfony/console/Input/StringInput.php
index 40d1dfbc7d6ab1bc4895b2dd744c6f463d5c6f8a..40656b3c14887c2c9476380cb5994e0d825c2e0b 100644
--- a/core/vendor/symfony/console/Input/StringInput.php
+++ b/core/vendor/symfony/console/Input/StringInput.php
@@ -40,7 +40,7 @@ class StringInput extends ArgvInput
     public function __construct($input, InputDefinition $definition = null)
     {
         if ($definition) {
-            @trigger_error('The $definition argument of the '.__METHOD__.' method is deprecated and will be removed in 3.0. Set this parameter with the bind() method instead.', E_USER_DEPRECATED);
+            trigger_error('The $definition argument of the '.__METHOD__.' method is deprecated and will be removed in 3.0. Set this parameter with the bind() method instead.', E_USER_DEPRECATED);
         }
 
         parent::__construct(array(), null);
diff --git a/core/vendor/symfony/console/Output/ConsoleOutput.php b/core/vendor/symfony/console/Output/ConsoleOutput.php
index 50ef4df9004ce91d5318b9e1647983e3aa15bd3e..3560f1c6fc5aa32f249fa4da81c28582e7e85c82 100644
--- a/core/vendor/symfony/console/Output/ConsoleOutput.php
+++ b/core/vendor/symfony/console/Output/ConsoleOutput.php
@@ -30,9 +30,6 @@
  */
 class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
 {
-    /**
-     * @var StreamOutput
-     */
     private $stderr;
 
     /**
@@ -46,9 +43,14 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
      */
     public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null)
     {
-        parent::__construct($this->openOutputStream(), $verbosity, $decorated, $formatter);
+        $outputStream = 'php://stdout';
+        if (!$this->hasStdoutSupport()) {
+            $outputStream = 'php://output';
+        }
 
-        $this->stderr = new StreamOutput($this->openErrorStream(), $verbosity, $decorated, $this->getFormatter());
+        parent::__construct(fopen($outputStream, 'w'), $verbosity, $decorated, $formatter);
+
+        $this->stderr = new StreamOutput(fopen('php://stderr', 'w'), $verbosity, $decorated, $this->getFormatter());
     }
 
     /**
@@ -98,52 +100,14 @@ public function setErrorOutput(OutputInterface $error)
      * Returns true if current environment supports writing console output to
      * STDOUT.
      *
-     * @return bool
-     */
-    protected function hasStdoutSupport()
-    {
-        return false === $this->isRunningOS400();
-    }
-
-    /**
-     * Returns true if current environment supports writing console output to
-     * STDERR.
+     * IBM iSeries (OS400) exhibits character-encoding issues when writing to
+     * STDOUT and doesn't properly convert ASCII to EBCDIC, resulting in garbage
+     * output.
      *
      * @return bool
      */
-    protected function hasStderrSupport()
-    {
-        return false === $this->isRunningOS400();
-    }
-
-    /**
-     * Checks if current executing environment is IBM iSeries (OS400), which
-     * doesn't properly convert character-encodings between ASCII to EBCDIC.
-     *
-     * @return bool
-     */
-    private function isRunningOS400()
-    {
-        return 'OS400' === php_uname('s');
-    }
-
-    /**
-     * @return resource
-     */
-    private function openOutputStream()
-    {
-        $outputStream = $this->hasStdoutSupport() ? 'php://stdout' : 'php://output';
-
-        return @fopen($outputStream, 'w') ?: fopen('php://output', 'w');
-    }
-
-    /**
-     * @return resource
-     */
-    private function openErrorStream()
+    protected function hasStdoutSupport()
     {
-        $errorStream = $this->hasStderrSupport() ? 'php://stderr' : 'php://output';
-
-        return fopen($errorStream, 'w');
+        return ('OS400' != php_uname('s'));
     }
 }
diff --git a/core/vendor/symfony/console/Question/ChoiceQuestion.php b/core/vendor/symfony/console/Question/ChoiceQuestion.php
index a36c739e56a8ffc5ad66e9264cee85f585cc5e4c..9586c5bf3ac02c070020c065a9a57bb2c4c2ee67 100644
--- a/core/vendor/symfony/console/Question/ChoiceQuestion.php
+++ b/core/vendor/symfony/console/Question/ChoiceQuestion.php
@@ -161,8 +161,7 @@ private function getDefaultValidator()
                 if (false === $result) {
                     throw new \InvalidArgumentException(sprintf($errorMessage, $value));
                 }
-
-                $multiselectChoices[] = (string) $result;
+                array_push($multiselectChoices, (string) $result);
             }
 
             if ($multiselect) {
diff --git a/core/vendor/symfony/console/Resources/bin/hiddeninput.exe b/core/vendor/symfony/console/Resources/bin/hiddeninput.exe
index 9f4a2aa6357a7dd48f810a66982dc0f78a1c27f6..c8cf65e8d819e6e525121cf6b21f1c2429746038 100644
--- a/core/vendor/symfony/console/Resources/bin/hiddeninput.exe
+++ b/core/vendor/symfony/console/Resources/bin/hiddeninput.exe
@@ -1,21 +1,21 @@
-MZ�       ÿÿ  ¸       @                                   è   º ´	Í!¸LÍ!This program cannot be run in DOS mode.
+MZ�       ÿÿ  ¸       @                                   è   º ´	Í!¸LÍ!This program cannot be run in DOS mode.
 $       Æ,Í;§Bž;§Bž;§Bž2ß×ž:§Bž2ßÁž-§Bž2ßÆž9§Bž2ßÑž?§Bža9ž8§Bž;§Cž§Bž2ßÈž:§Bž2ßÖž:§Bž2ßÓž:§BžRich;§Bž        PE  L ¬MoO        à 	  
          8           @                      `     ?œ   @�                           �"  P    @                      P  p   !                             8!  @               Ø                           .text   	      
                     `.rdata  Î	       
                  @  @.data   �   0                    @  À.rsrc       @                    @  @.reloc  Ì   P      "              @  B                                                                                                                                                                                                                                                                                                                                                        j$¸æ@ èx  jöÿ @ ƒeÐ ‹ð�EÐPVÿ  @ ‹EÐƒàûPVÿ @ �MÔÿX @ ƒeü �EÔPÿ5H @ ÿL @ YYÿ5\ @ �EÔPÿ5` @ ÿD @ YY‹ÈÿP @ ƒMüÿ�MÔÿT @ 3ÀèH  Ã; 0@ uóÃé¬  h€@ è£  ¡l3@ Ç$40@ ÿ5h3@ £40@ h$0@ h(0@ h 0@ ÿ  @ ƒÄ£00@ …À}jè¹  YÃjh"@ è  3Û‰]üd¡   ‹p‰]ä¿€3@ SVWÿ0 @ ;Ãt;Æu3öF‰uäëhè  ÿ4 @ ëÚ3öF¡|3@ ;Æu
 jè\  Yë;¡|3@ …Àu,‰5|3@ hð @ hä @ è§  YY…ÀtÇEüþÿÿÿ¸ÿ   éÝ   ‰5<0@ ¡|3@ ;Æuhà @ hØ @ èl  YYÇ|3@    9]äuSWÿ8 @ 9Œ3@ thŒ3@ èƒ  Y…Àt
 SjSÿŒ3@ ¡$0@ ‹¼ @ ‰ÿ5$0@ ÿ5(0@ ÿ5 0@ èþÿÿƒÄ£80@ 9,0@ u7PÿÀ @ ‹Eì‹‹	‰MàPQèŽ  YYÃ‹eè‹Eà£80@ 3Û9,0@ uPÿh @ 9<0@ uÿœ @ ÇEüþÿÿÿ¡80@ èû  Ã¸MZ  f9  @ t3ÀëM¡< @ �€  @ �8PE  ué·H�ù  t�ù  uÕƒ¸„   vÌ3É9ˆø   ëƒxtv¼3É9ˆè   •Á‹Áj£,0@ ÿp @ jÿÿl @ YY£„3@ £ˆ3@ ÿÌ @ ‹t3@ ‰ÿˆ @ ‹p3@ ‰¡¨ @ ‹ £x3@ èV  è¬  ƒ=0@  uhµ@ ÿ¬ @ Yèg  ƒ=0@ ÿu	jÿÿ° @ Y3ÀÃè{  éŸýÿÿ‹ÿU‹ì�ì(  £H1@ ‰D1@ ‰@1@ ‰<1@ ‰581@ ‰=41@ fŒ`1@ fŒT1@ fŒ01@ fŒ,1@ fŒ%(1@ fŒ-$1@ œ�X1@ ‹E £L1@ ‹E£P1@ �E£\1@ ‹…àüÿÿÇ˜0@   ¡P1@ £L0@ Ç@0@ 	 ÀÇD0@    ¡ 0@ ‰…Øüÿÿ¡0@ ‰…Üüÿÿÿ @ £�0@ jè?  Yj ÿ  @ h!@ ÿ$ @ ƒ=�0@  ujè  Yh	 Àÿ( @ Pÿ, @ ÉÃ‹ÿU‹ì‹E‹ �8csmàu*ƒxu$‹@= “t=!“t="“t= @™uèÐ  3À]Â hH@ ÿ  @ 3ÀÃÿ%¤ @ jh("@ èb  ÿ5ˆ3@ ‹5Œ @ ÿÖY‰EäƒøÿuÿuÿÄ @ Yëgjè’  Yƒeü ÿ5ˆ3@ ÿÖ‰Eäÿ5„3@ ÿÖYY‰Eà�EàP�EäPÿu‹5l @ ÿÖYPèU  ‰EÜÿuäÿÖ£ˆ3@ ÿuàÿÖƒÄ£„3@ ÇEüþÿÿÿè	   ‹EÜè  Ãjè  YÃ‹ÿU‹ìÿuèNÿÿÿ÷ØÀ÷ØYH]Ã‹ÿV¸ü!@ ¾ü!@ W‹ø;Æs‹…ÀtÿÐƒÇ;þrñ_^Ã‹ÿV¸"@ ¾"@ W‹ø;Æs‹…ÀtÿÐƒÇ;þrñ_^Ãÿ%È @ ÌÌÌÌ‹ÿU‹ì‹M¸MZ  f9t3À]Ã‹A<Á�8PE  uï3Ò¹  f9H”Â‹Â]ÃÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ì‹E‹H<È·ASV·q3ÒW�D…öv‹}‹H;ùr	‹XÙ;ûr
-BƒÀ(;Örè3À_^[]ÃÌÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ìjþhH"@ he@ d¡    PƒìSVW¡ 0@ 1Eø3ÅP�Eðd£    ‰eèÇEü    h  @ è*ÿÿÿƒÄ…ÀtU‹E-  @ Ph  @ èPÿÿÿƒÄ…Àt;‹@$Áè÷ÐƒàÇEüþÿÿÿ‹Mðd‰    Y_^[‹å]Ã‹Eì‹‹3Ò=  À”Â‹ÂÃ‹eèÇEüþÿÿÿ3À‹Mðd‰    Y_^[‹å]ÃÌÿ%¸ @ ÿ%´ @ ÌÌhe@ dÿ5    ‹D$‰l$�l$+àSVW¡ 0@ 1Eü3ÅP‰eèÿuø‹EüÇEüþÿÿÿ‰Eø�Eðd£    Ã‹Mðd‰    Y__^[‹å]QÃ‹ÿU‹ìÿuÿuÿuÿuh‡@ h 0@ èç   ƒÄ]Ã‹ÿVh   h   3öVèÙ   ƒÄ…ÀtVVVVVèÂ   ƒÄ^Ã3ÀÃ‹ÿU‹ìƒì¡ 0@ ƒeø ƒeü SW¿Næ@»»  ÿÿ;Çt…Ãt	÷Ð£0@ ë`V�EøPÿ< @ ‹uü3uøÿ @ 3ðÿ @ 3ðÿ @ 3ð�EðPÿ @ ‹Eô3Eð3ð;÷u¾Oæ@»ë…óu‹ÆÁàð‰5 0@ ÷Ö‰50@ ^_[ÉÃÿ%t @ ÿ%x @ ÿ%| @ ÿ%€ @ ÿ%„ @ ÿ%� @ ÿ%” @ ÿ%˜ @ ÿ%Ð @ Pdÿ5    �D$+d$SVW‰(‹è¡ 0@ 3ÅP‰EðÿuüÇEüÿÿÿÿ�Eôd£    Ã‹Môd‰    Y__^[‹å]QÃ‹Mð3Íè¯÷ÿÿéÝÿÿÿ�MÔÿ%T @ ‹T$�B‹JÌ3Èè�÷ÿÿ‹Jü3Èè†÷ÿÿ¸l"@ ésÿÿÿ                                                                                                                                                                                                                                                     ¸#  Ê#  Ü#  ˆ)  r)  b)  H)  4)  )  ú(  æ(  Ò(  ´(  ¬(  –(  ž)      ú#  à$  %  Ê%  &  d&  ®&  ¤$      ('  Ä'  Ö'  è'  þ'  (  ((  6(  ¦'  H(  Z(  t(  †(  '  '   '  –'  ‚'  l'  ^'  R'  F'  >'  >(  0'  ¶'  ¸)          –@         W@ Š@                     ¬MoO       l   €!  €  @0@ ˜0@ bad allocation      H                                                            0@ ð!@    RSDSÑŒ³´�J¨!öÌëLZ    c:\users\seld\documents\visual studio 2010\Projects\hiddeninp\Release\hiddeninp.pdb     e  æ                  þÿÿÿ    Ðÿÿÿ    þÿÿÿ@ @     þÿÿÿ    Ìÿÿÿ    þÿÿÿ    :@     þÿÿÿ    Øÿÿÿ    þÿÿÿË@ ß@ ÿÿÿÿÝ@ "“   d"@                        à"          ì#      $#          ô&  D   H#          (  h                       ¸#  Ê#  Ü#  ˆ)  r)  b)  H)  4)  )  ú(  æ(  Ò(  ´(  ¬(  –(  ž)      ú#  à$  %  Ê%  &  d&  ®&  ¤$      ('  Ä'  Ö'  è'  þ'  (  ((  6(  ¦'  H(  Z(  t(  †(  '  '   '  –'  ‚'  l'  ^'  R'  F'  >'  >(  0'  ¶'  ¸)      •GetConsoleMode  ·SetConsoleMode  ;GetStdHandle  KERNEL32.dll   ??$?6DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z ‘?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A  J?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A Â ??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z  _??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ  {??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ  ³?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z  MSVCP90.dll _amsg_exit  Ÿ __getmainargs ,_cexit  |_exit f _XcptFilter Ìexit    __initenv _initterm _initterm_e <_configthreadlocale ã __setusermatherr  _adjust_fdiv  Ë __p__commode  Ï __p__fmode  j_encode_pointer à __set_app_type  K_crt_debugger_hook  C ?terminate@@YAXXZ MSVCR90.dll æ_unlock – __dllonexit v_lock _onexit `_decode_pointer s_except_handler4_common _invoke_watson  ?_controlfp_s  ½InterlockedExchange !Sleep ºInterlockedCompareExchange  -TerminateProcess  ©GetCurrentProcess >UnhandledExceptionFilter  SetUnhandledExceptionFilter ÑIsDebuggerPresent TQueryPerformanceCounter fGetTickCount  ­GetCurrentThreadId  ªGetCurrentProcessId OGetSystemTimeAsFileTime s __CxxFrameHandler3                                                    Næ@»±¿Dÿÿÿÿÿÿÿÿþÿÿÿ   $!@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         €   8  €                 P  €                 h  €              	  €                 	  �    @  (  ä      ÈC  V  ä      (4   V S _ V E R S I O N _ I N F O     ½ïþ                                          †   S t r i n g F i l e I n f o   b   0 4 0 9 0 4 b 0   Ê Q  F i l e D e s c r i p t i o n     R e a d s   f r o m   s t d i n   w i t h o u t   l e a k i n g   i n f o   t o   t h e   t e r m i n a l   a n d   o u t p u t s   b a c k   t o   s t d o u t     6   F i l e V e r s i o n     1 ,   0 ,   0 ,   0     8   I n t e r n a l N a m e   h i d d e n i n p u t   P   L e g a l C o p y r i g h t   J o r d i   B o g g i a n o   -   2 0 1 2   H   O r i g i n a l F i l e n a m e   h i d d e n i n p u t . e x e   :   P r o d u c t N a m e     H i d d e n   I n p u t     :   P r o d u c t V e r s i o n   1 ,   0 ,   0 ,   0     D    V a r F i l e I n f o     $    T r a n s l a t i o n     	°<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
-    <security>
-      <requestedPrivileges>
-        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
-      </requestedPrivileges>
-    </security>
-  </trustInfo>
-  <dependency>
-    <dependentAssembly>
-      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
-    </dependentAssembly>
-  </dependency>
+BƒÀ(;Örè3À_^[]ÃÌÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ìjþhH"@ he@ d¡    PƒìSVW¡ 0@ 1Eø3ÅP�Eðd£    ‰eèÇEü    h  @ è*ÿÿÿƒÄ…ÀtU‹E-  @ Ph  @ èPÿÿÿƒÄ…Àt;‹@$Áè÷ÐƒàÇEüþÿÿÿ‹Mðd‰    Y_^[‹å]Ã‹Eì‹‹3Ò=  À”Â‹ÂÃ‹eèÇEüþÿÿÿ3À‹Mðd‰    Y_^[‹å]ÃÌÿ%¸ @ ÿ%´ @ ÌÌhe@ dÿ5    ‹D$‰l$�l$+àSVW¡ 0@ 1Eü3ÅP‰eèÿuø‹EüÇEüþÿÿÿ‰Eø�Eðd£    Ã‹Mðd‰    Y__^[‹å]QÃ‹ÿU‹ìÿuÿuÿuÿuh‡@ h 0@ èç   ƒÄ]Ã‹ÿVh   h   3öVèÙ   ƒÄ…ÀtVVVVVèÂ   ƒÄ^Ã3ÀÃ‹ÿU‹ìƒì¡ 0@ ƒeø ƒeü SW¿Næ@»»  ÿÿ;Çt…Ãt	÷Ð£0@ ë`V�EøPÿ< @ ‹uü3uøÿ @ 3ðÿ @ 3ðÿ @ 3ð�EðPÿ @ ‹Eô3Eð3ð;÷u¾Oæ@»ë…óu‹ÆÁàð‰5 0@ ÷Ö‰50@ ^_[ÉÃÿ%t @ ÿ%x @ ÿ%| @ ÿ%€ @ ÿ%„ @ ÿ%� @ ÿ%” @ ÿ%˜ @ ÿ%Ð @ Pdÿ5    �D$+d$SVW‰(‹è¡ 0@ 3ÅP‰EðÿuüÇEüÿÿÿÿ�Eôd£    Ã‹Môd‰    Y__^[‹å]QÃ‹Mð3Íè¯÷ÿÿéÝÿÿÿ�MÔÿ%T @ ‹T$�B‹JÌ3Èè�÷ÿÿ‹Jü3Èè†÷ÿÿ¸l"@ ésÿÿÿ                                                                                                                                                                                                                                                     ¸#  Ê#  Ü#  ˆ)  r)  b)  H)  4)  )  ú(  æ(  Ò(  ´(  ¬(  –(  ž)      ú#  à$  %  Ê%  &  d&  ®&  ¤$      ('  Ä'  Ö'  è'  þ'  (  ((  6(  ¦'  H(  Z(  t(  †(  '  '   '  –'  ‚'  l'  ^'  R'  F'  >'  >(  0'  ¶'  ¸)          –@         W@ Š@                     ¬MoO       l   €!  €  @0@ ˜0@ bad allocation      H                                                            0@ ð!@    RSDSÑŒ³´�J¨!öÌëLZ    c:\users\seld\documents\visual studio 2010\Projects\hiddeninp\Release\hiddeninp.pdb     e  æ                  þÿÿÿ    Ðÿÿÿ    þÿÿÿ@ @     þÿÿÿ    Ìÿÿÿ    þÿÿÿ    :@     þÿÿÿ    Øÿÿÿ    þÿÿÿË@ ß@ ÿÿÿÿÝ@ "“   d"@                        à"          ì#      $#          ô&  D   H#          (  h                       ¸#  Ê#  Ü#  ˆ)  r)  b)  H)  4)  )  ú(  æ(  Ò(  ´(  ¬(  –(  ž)      ú#  à$  %  Ê%  &  d&  ®&  ¤$      ('  Ä'  Ö'  è'  þ'  (  ((  6(  ¦'  H(  Z(  t(  †(  '  '   '  –'  ‚'  l'  ^'  R'  F'  >'  >(  0'  ¶'  ¸)      •GetConsoleMode  ·SetConsoleMode  ;GetStdHandle  KERNEL32.dll   ??$?6DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z ‘?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A  J?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A Â ??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z  _??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ  {??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ  ³?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z  MSVCP90.dll _amsg_exit  Ÿ __getmainargs ,_cexit  |_exit f _XcptFilter Ìexit    __initenv _initterm _initterm_e <_configthreadlocale ã __setusermatherr  _adjust_fdiv  Ë __p__commode  Ï __p__fmode  j_encode_pointer à __set_app_type  K_crt_debugger_hook  C ?terminate@@YAXXZ MSVCR90.dll æ_unlock – __dllonexit v_lock _onexit `_decode_pointer s_except_handler4_common _invoke_watson  ?_controlfp_s  ½InterlockedExchange !Sleep ºInterlockedCompareExchange  -TerminateProcess  ©GetCurrentProcess >UnhandledExceptionFilter  SetUnhandledExceptionFilter ÑIsDebuggerPresent TQueryPerformanceCounter fGetTickCount  ­GetCurrentThreadId  ªGetCurrentProcessId OGetSystemTimeAsFileTime s __CxxFrameHandler3                                                    Næ@»±¿Dÿÿÿÿÿÿÿÿþÿÿÿ   $!@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         €   8  €                 P  €                 h  €              	  €                 	  �    @  (  ä      ÈC  V  ä      (4   V S _ V E R S I O N _ I N F O     ½ïþ                                          †   S t r i n g F i l e I n f o   b   0 4 0 9 0 4 b 0   Ê Q  F i l e D e s c r i p t i o n     R e a d s   f r o m   s t d i n   w i t h o u t   l e a k i n g   i n f o   t o   t h e   t e r m i n a l   a n d   o u t p u t s   b a c k   t o   s t d o u t     6   F i l e V e r s i o n     1 ,   0 ,   0 ,   0     8   I n t e r n a l N a m e   h i d d e n i n p u t   P   L e g a l C o p y r i g h t   J o r d i   B o g g i a n o   -   2 0 1 2   H   O r i g i n a l F i l e n a m e   h i d d e n i n p u t . e x e   :   P r o d u c t N a m e     H i d d e n   I n p u t     :   P r o d u c t V e r s i o n   1 ,   0 ,   0 ,   0     D    V a r F i l e I n f o     $    T r a n s l a t i o n     	°<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+    <security>
+      <requestedPrivileges>
+        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+  <dependency>
+    <dependentAssembly>
+      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
+    </dependentAssembly>
+  </dependency>
 </assembly>PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDING   @  00!0/080F0L0T0^0d0n0{0‰0—0¡0¨0®0³0¸0½0Â0È0Ð0ä0ÿ01#1-1@1J1O1T1v1{1„1‰1–1§1­1´1È1Í1Ó1Û1á1ç1ô1ú12"2*23292A2M2_2j2p2¹2¿2Ç2Î2Ó2Ù2ß2ç2í2ô2û2333%303N3T3Z3`3f3l3s3z3�3ˆ3�3–3�3¥3­3µ3Á3Ê3Ï3Õ3ß3è3ó3ÿ34444%4;4B4‹4‘4š4¡4¬4²4Æ4Û4æ4þ45!5^5c5„5‰5¨5H6M6_6}6‘6—6 777*7w7|7Á7ä7ñ7ý7888=8E8P8V8\8b8h8n8t8z8€8œ8â89      $   Ü0è0ì01 1t1x12 2@2\2`2h2t2 0     0                                                                                                                                                  
\ No newline at end of file
diff --git a/core/vendor/symfony/console/Shell.php b/core/vendor/symfony/console/Shell.php
index eaaadfd8a87a803666bb2e6780cad20a149041cd..4167746aada75ba0b9d65084a817feab8d812ebb 100644
--- a/core/vendor/symfony/console/Shell.php
+++ b/core/vendor/symfony/console/Shell.php
@@ -206,7 +206,7 @@ private function readline()
         } else {
             $this->output->write($this->getPrompt());
             $line = fgets(STDIN, 1024);
-            $line = (false === $line || '' === $line) ? false : rtrim($line);
+            $line = (!$line && strlen($line) == 0) ? false : rtrim($line);
         }
 
         return $line;
diff --git a/core/vendor/symfony/console/Style/SymfonyStyle.php b/core/vendor/symfony/console/Style/SymfonyStyle.php
index 0d366c7e894bdf3a172b3ecd8ea3fc33af927d95..6d69eca54af89d2b848d9d50cc440b4eadc0b119 100644
--- a/core/vendor/symfony/console/Style/SymfonyStyle.php
+++ b/core/vendor/symfony/console/Style/SymfonyStyle.php
@@ -18,7 +18,6 @@
 use Symfony\Component\Console\Helper\SymfonyQuestionHelper;
 use Symfony\Component\Console\Helper\Table;
 use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\BufferedOutput;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Console\Question\ChoiceQuestion;
 use Symfony\Component\Console\Question\ConfirmationQuestion;
@@ -37,7 +36,6 @@ class SymfonyStyle extends OutputStyle
     private $questionHelper;
     private $progressBar;
     private $lineLength;
-    private $bufferedOutput;
 
     /**
      * @param InputInterface  $input
@@ -46,9 +44,7 @@ class SymfonyStyle extends OutputStyle
     public function __construct(InputInterface $input, OutputInterface $output)
     {
         $this->input = $input;
-        $this->bufferedOutput = new BufferedOutput($output->getVerbosity(), false, clone $output->getFormatter());
-        // Windows cmd wraps lines as soon as the terminal width is reached, whether there are following chars or not.
-        $this->lineLength = min($this->getTerminalWidth() - (int) (DIRECTORY_SEPARATOR === '\\'), self::MAX_LINE_LENGTH);
+        $this->lineLength = min($this->getTerminalWidth(), self::MAX_LINE_LENGTH);
 
         parent::__construct($output);
     }
@@ -64,7 +60,6 @@ public function __construct(InputInterface $input, OutputInterface $output)
      */
     public function block($messages, $type = null, $style = null, $prefix = ' ', $padding = false)
     {
-        $this->autoPrependBlock();
         $messages = is_array($messages) ? array_values($messages) : array($messages);
         $lines = array();
 
@@ -76,7 +71,7 @@ public function block($messages, $type = null, $style = null, $prefix = ' ', $pa
         // wrap and add newlines for each element
         foreach ($messages as $key => $message) {
             $message = OutputFormatter::escape($message);
-            $lines = array_merge($lines, explode(PHP_EOL, wordwrap($message, $this->lineLength - Helper::strlen($prefix), PHP_EOL, true)));
+            $lines = array_merge($lines, explode("\n", wordwrap($message, $this->lineLength - Helper::strlen($prefix))));
 
             if (count($messages) > 1 && $key < count($messages) - 1) {
                 $lines[] = '';
@@ -97,8 +92,7 @@ public function block($messages, $type = null, $style = null, $prefix = ' ', $pa
             }
         }
 
-        $this->writeln($lines);
-        $this->newLine();
+        $this->writeln(implode("\n", $lines)."\n");
     }
 
     /**
@@ -106,12 +100,7 @@ public function block($messages, $type = null, $style = null, $prefix = ' ', $pa
      */
     public function title($message)
     {
-        $this->autoPrependBlock();
-        $this->writeln(array(
-            sprintf('<comment>%s</>', $message),
-            sprintf('<comment>%s</>', str_repeat('=', strlen($message))),
-        ));
-        $this->newLine();
+        $this->writeln(sprintf("\n<comment>%s</>\n<comment>%s</>\n", $message, str_repeat('=', strlen($message))));
     }
 
     /**
@@ -119,12 +108,7 @@ public function title($message)
      */
     public function section($message)
     {
-        $this->autoPrependBlock();
-        $this->writeln(array(
-            sprintf('<comment>%s</>', $message),
-            sprintf('<comment>%s</>', str_repeat('-', strlen($message))),
-        ));
-        $this->newLine();
+        $this->writeln(sprintf("<comment>%s</>\n<comment>%s</>\n", $message, str_repeat('-', strlen($message))));
     }
 
     /**
@@ -132,13 +116,13 @@ public function section($message)
      */
     public function listing(array $elements)
     {
-        $this->autoPrependText();
         $elements = array_map(function ($element) {
-            return sprintf(' * %s', $element);
-        }, $elements);
+                return sprintf(' * %s', $element);
+            },
+            $elements
+        );
 
-        $this->writeln($elements);
-        $this->newLine();
+        $this->writeln(implode("\n", $elements)."\n");
     }
 
     /**
@@ -146,8 +130,6 @@ public function listing(array $elements)
      */
     public function text($message)
     {
-        $this->autoPrependText();
-
         if (!is_array($message)) {
             $this->writeln(sprintf(' // %s', $message));
 
@@ -223,7 +205,7 @@ public function ask($question, $default = null, $validator = null)
         $question = new Question($question, $default);
         $question->setValidator($validator);
 
-        return $this->askQuestion($question);
+        return $this->askQuestion($question, $validator);
     }
 
     /**
@@ -232,11 +214,9 @@ public function ask($question, $default = null, $validator = null)
     public function askHidden($question, $validator = null)
     {
         $question = new Question($question);
-
         $question->setHidden(true);
-        $question->setValidator($validator);
 
-        return $this->askQuestion($question);
+        return $this->askQuestion($question, $validator);
     }
 
     /**
@@ -310,52 +290,18 @@ public function createProgressBar($max = 0)
      */
     public function askQuestion(Question $question)
     {
-        if ($this->input->isInteractive()) {
-            $this->autoPrependBlock();
-        }
-
         if (!$this->questionHelper) {
             $this->questionHelper = new SymfonyQuestionHelper();
         }
 
         $answer = $this->questionHelper->ask($this->input, $this, $question);
 
-        if ($this->input->isInteractive()) {
-            $this->newLine();
-            $this->bufferedOutput->write("\n");
-        }
+        $this->newLine();
 
         return $answer;
     }
 
     /**
-     * {@inheritdoc}
-     */
-    public function writeln($messages, $type = self::OUTPUT_NORMAL)
-    {
-        parent::writeln($messages, $type);
-        $this->bufferedOutput->writeln($this->reduceBuffer($messages), $type);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
-    {
-        parent::write($messages, $newline, $type);
-        $this->bufferedOutput->write($this->reduceBuffer($messages), $newline, $type);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function newLine($count = 1)
-    {
-        parent::newLine($count);
-        $this->bufferedOutput->write(str_repeat("\n", $count));
-    }
-
-    /**
      * @return ProgressBar
      */
     private function getProgressBar()
@@ -374,33 +320,4 @@ private function getTerminalWidth()
 
         return $dimensions[0] ?: self::MAX_LINE_LENGTH;
     }
-
-    private function autoPrependBlock()
-    {
-        $chars = substr(str_replace(PHP_EOL, "\n", $this->bufferedOutput->fetch()), -2);
-
-        if (!isset($chars[0])) {
-            return $this->newLine(); //empty history, so we should start with a new line.
-        }
-        //Prepend new line for each non LF chars (This means no blank line was output before)
-        $this->newLine(2 - substr_count($chars, "\n"));
-    }
-
-    private function autoPrependText()
-    {
-        $fetched = $this->bufferedOutput->fetch();
-        //Prepend new line if last char isn't EOL:
-        if ("\n" !== substr($fetched, -1)) {
-            $this->newLine();
-        }
-    }
-
-    private function reduceBuffer($messages)
-    {
-        // We need to know if the two last chars are PHP_EOL
-        // Preserve the last 4 chars inserted (PHP_EOL on windows is two chars) in the history buffer
-        return array_map(function ($value) {
-            return substr($value, -4);
-        }, array_merge(array($this->bufferedOutput->fetch()), (array) $messages));
-    }
 }
diff --git a/core/vendor/symfony/console/Tests/ApplicationTest.php b/core/vendor/symfony/console/Tests/ApplicationTest.php
index dfee2321d5bda097d05d85de01668cdab633072e..1fa6c64af6501d869e3ccfee57fee350126a6b66 100644
--- a/core/vendor/symfony/console/Tests/ApplicationTest.php
+++ b/core/vendor/symfony/console/Tests/ApplicationTest.php
@@ -495,6 +495,8 @@ public function testSetCatchExceptions()
      */
     public function testLegacyAsText()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $application = new Application();
         $application->add(new \FooCommand());
         $this->ensureStaticCommandHelp($application);
@@ -507,6 +509,8 @@ public function testLegacyAsText()
      */
     public function testLegacyAsXml()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $application = new Application();
         $application->add(new \FooCommand());
         $this->ensureStaticCommandHelp($application);
@@ -675,7 +679,7 @@ public function testRun()
     }
 
     /**
-     * Issue #9285.
+     * Issue #9285
      *
      * If the "verbose" option is just before an argument in ArgvInput,
      * an argument value should not be treated as verbosity value.
diff --git a/core/vendor/symfony/console/Tests/Command/CommandTest.php b/core/vendor/symfony/console/Tests/Command/CommandTest.php
index 7702ac8341d19e8a26810ba1182c485108b2b90a..1f1160efb60b5500d521ba48b3e600d08f8a201e 100644
--- a/core/vendor/symfony/console/Tests/Command/CommandTest.php
+++ b/core/vendor/symfony/console/Tests/Command/CommandTest.php
@@ -314,6 +314,8 @@ public function callableMethodCommand(InputInterface $input, OutputInterface $ou
      */
     public function testLegacyAsText()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $command = new \TestCommand();
         $command->setApplication(new Application());
         $tester = new CommandTester($command);
@@ -326,6 +328,8 @@ public function testLegacyAsText()
      */
     public function testLegacyAsXml()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $command = new \TestCommand();
         $command->setApplication(new Application());
         $tester = new CommandTester($command);
diff --git a/core/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php b/core/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php
index 45b3b2fff9034a84dcfbc50c550eb171267e7948..1f40d2e6a02e7d4b0ffe1edffd6f96710102f981 100644
--- a/core/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php
+++ b/core/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php
@@ -42,7 +42,6 @@ public static function getInputOptions()
             'input_option_3' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, 'option description'),
             'input_option_4' => new InputOption('option_name', 'o', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'option description', array()),
             'input_option_5' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, "multiline\noption description"),
-            'input_option_6' => new InputOption('option_name', array('o', 'O'), InputOption::VALUE_REQUIRED, 'option with multiple shortcuts'),
         );
     }
 
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php
deleted file mode 100644
index 8fe7c07712888a2d3a546ca7f28922b0f09db3a1..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure has single blank line at start when using block element
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-    $output->caution('Lorem ipsum dolor sit amet');
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php
deleted file mode 100644
index e5c700d60eb564f653facc8af8923a12a13573ca..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure has single blank line between titles and blocks
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-    $output->title('Title');
-    $output->warning('Lorem ipsum dolor sit amet');
-    $output->title('Title');
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php
deleted file mode 100644
index 791b626f24f48ab665dbe29673b574137e7280d6..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure has single blank line between blocks
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-    $output->warning('Warning');
-    $output->caution('Caution');
-    $output->error('Error');
-    $output->success('Success');
-    $output->note('Note');
-    $output->block('Custom block', 'CUSTOM', 'fg=white;bg=green', 'X ', true);
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php
deleted file mode 100644
index 99253a6c08a835177d8cfd3a5afa780658b973ba..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure has single blank line between two titles
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-    $output->title('First title');
-    $output->title('Second title');
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php
deleted file mode 100644
index 0c5d3fb26ceff43c06a310b70ba95e8c78a11c11..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure has single blank line after any text and a title
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-
-    $output->write('Lorem ipsum dolor sit amet');
-    $output->title('First title');
-
-    $output->writeln('Lorem ipsum dolor sit amet');
-    $output->title('Second title');
-
-    $output->write('Lorem ipsum dolor sit amet');
-    $output->write('');
-    $output->title('Third title');
-
-    //Ensure edge case by appending empty strings to history:
-    $output->write('Lorem ipsum dolor sit amet');
-    $output->write(array('', '', ''));
-    $output->title('Fourth title');
-
-    //Ensure have manual control over number of blank lines:
-    $output->writeln('Lorem ipsum dolor sit amet');
-    $output->writeln(array('', '')); //Should append an extra blank line
-    $output->title('Fifth title');
-
-    $output->writeln('Lorem ipsum dolor sit amet');
-    $output->newLine(2); //Should append an extra blank line
-    $output->title('Fifth title');
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php
deleted file mode 100644
index 4543ad8cd6b1360fc9e1e432b1d9e120e8ad292c..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure has proper line ending before outputing a text block like with SymfonyStyle::listing() or SymfonyStyle::text()
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-
-    $output->writeln('Lorem ipsum dolor sit amet');
-    $output->listing(array(
-        'Lorem ipsum dolor sit amet',
-        'consectetur adipiscing elit',
-    ));
-
-    //Even using write:
-    $output->write('Lorem ipsum dolor sit amet');
-    $output->listing(array(
-        'Lorem ipsum dolor sit amet',
-        'consectetur adipiscing elit',
-    ));
-
-    $output->write('Lorem ipsum dolor sit amet');
-    $output->text(array(
-        'Lorem ipsum dolor sit amet',
-        'consectetur adipiscing elit',
-    ));
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php
deleted file mode 100644
index 8031ec9c30e5ab4788466e694d784596e514353d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure has proper blank line after text block when using a block like with SymfonyStyle::success
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-
-    $output->listing(array(
-        'Lorem ipsum dolor sit amet',
-        'consectetur adipiscing elit',
-    ));
-    $output->success('Lorem ipsum dolor sit amet');
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php
deleted file mode 100644
index 203eb5b12e6b0edc2b2a869dde02115678b24b3a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-
-//Ensure questions do not output anything when input is non-interactive
-return function (InputInterface $input, OutputInterface $output) {
-    $output = new SymfonyStyle($input, $output);
-    $output->title('Title');
-    $output->askHidden('Hidden question');
-    $output->choice('Choice question with default', array('choice1', 'choice2'), 'choice1');
-    $output->confirm('Confirmation with yes default', true);
-    $output->text('Duis aute irure dolor in reprehenderit in voluptate velit esse');
-};
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt
deleted file mode 100644
index a42e0f792aa6b0562c1902d691b230a2bf1fa36f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-
- ! [CAUTION] Lorem ipsum dolor sit amet                                                                                 
-
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt
deleted file mode 100644
index 334875f78918a6451bcc9f155a75010f0d6704b6..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
-Title
-=====
-
- [WARNING] Lorem ipsum dolor sit amet                                                                                   
-
-Title
-=====
-
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt
deleted file mode 100644
index ca609760cc12aa9f2311fe7d91e4e1e1f15aae46..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-
- [WARNING] Warning                                                                                                      
-
- ! [CAUTION] Caution                                                                                                    
-
- [ERROR] Error                                                                                                          
-
- [OK] Success                                                                                                           
-
- ! [NOTE] Note                                                                                                          
-
-X [CUSTOM] Custom block                                                                                                 
-
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt
deleted file mode 100644
index f4b6d58276c698152ce7eff747b7f628269ec595..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-
-First title
-===========
-
-Second title
-============
-
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt
deleted file mode 100644
index 2646d858e7cd38c4041df4a263f78a87e90bb2f3..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-Lorem ipsum dolor sit amet
-
-First title
-===========
-
-Lorem ipsum dolor sit amet
-
-Second title
-============
-
-Lorem ipsum dolor sit amet
-
-Third title
-===========
-
-Lorem ipsum dolor sit amet
-
-Fourth title
-============
-
-Lorem ipsum dolor sit amet
-
-
-Fifth title
-===========
-
-Lorem ipsum dolor sit amet
-
-
-Fifth title
-===========
-
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt
deleted file mode 100644
index 910240fbfd7c2760f0e66e27aa60533a2e5d7a2b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Lorem ipsum dolor sit amet
- * Lorem ipsum dolor sit amet
- * consectetur adipiscing elit
-
-Lorem ipsum dolor sit amet
- * Lorem ipsum dolor sit amet
- * consectetur adipiscing elit
-
-Lorem ipsum dolor sit amet
- // Lorem ipsum dolor sit amet
- // consectetur adipiscing elit
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt
deleted file mode 100644
index 5f2d33c148a9ee6e7464479395d1beec9d8cd74a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-
- * Lorem ipsum dolor sit amet
- * consectetur adipiscing elit
-
- [OK] Lorem ipsum dolor sit amet                                                                                        
-
diff --git a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt b/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt
deleted file mode 100644
index ab18e5dc76aba4f71c2b9a1b85b0265a291492a9..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
-Title
-=====
-
- // Duis aute irure dolor in reprehenderit in voluptate velit esse
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.json b/core/vendor/symfony/console/Tests/Fixtures/input_option_6.json
deleted file mode 100644
index d84e8721475ff1473e8a7de226ea8f688aa6ba66..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"--option_name","shortcut":"-o|-O","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"option with multiple shortcuts","default":null}
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.md b/core/vendor/symfony/console/Tests/Fixtures/input_option_6.md
deleted file mode 100644
index ed1ea1c84bd5327ccd686c74b412128c5365ef64..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.md
+++ /dev/null
@@ -1,9 +0,0 @@
-**option_name:**
-
-* Name: `--option_name`
-* Shortcut: `-o|-O`
-* Accept value: yes
-* Is value required: yes
-* Is multiple: no
-* Description: option with multiple shortcuts
-* Default: `NULL`
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.txt b/core/vendor/symfony/console/Tests/Fixtures/input_option_6.txt
deleted file mode 100644
index 0e6c9759b57752b57216484d4231abbaeca62c0e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.txt
+++ /dev/null
@@ -1 +0,0 @@
-  <info>-o|O, --option_name=OPTION_NAME</info>  option with multiple shortcuts
diff --git a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.xml b/core/vendor/symfony/console/Tests/Fixtures/input_option_6.xml
deleted file mode 100644
index 06126a2f570d3c2fa3a5a0954848d9b2343d173d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Fixtures/input_option_6.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<option name="--option_name" shortcut="-o" shortcuts="-o|-O" accept_value="1" is_value_required="1" is_multiple="0">
-  <description>option with multiple shortcuts</description>
-  <defaults/>
-</option>
diff --git a/core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php b/core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
index 0abfb3ce275596e4ce4c79c1ebe7e58242cc7e7b..52ada9e9722192bf26532ed9c97ecae0e497c23b 100644
--- a/core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
+++ b/core/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
@@ -37,9 +37,6 @@ public function testForeground()
         $style->setForeground('blue');
         $this->assertEquals("\033[34mfoo\033[39m", $style->apply('foo'));
 
-        $style->setForeground('default');
-        $this->assertEquals("\033[39mfoo\033[39m", $style->apply('foo'));
-
         $this->setExpectedException('InvalidArgumentException');
         $style->setForeground('undefined-color');
     }
@@ -54,9 +51,6 @@ public function testBackground()
         $style->setBackground('yellow');
         $this->assertEquals("\033[43mfoo\033[49m", $style->apply('foo'));
 
-        $style->setBackground('default');
-        $this->assertEquals("\033[49mfoo\033[49m", $style->apply('foo'));
-
         $this->setExpectedException('InvalidArgumentException');
         $style->setBackground('undefined-color');
     }
diff --git a/core/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php b/core/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php
index e130cdc6bc231f6773f96f5b712b379cf0cac45f..cf07793c3d4d6748fb827404e84cc3ae3630b187 100644
--- a/core/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php
@@ -22,6 +22,11 @@
  */
 class LegacyDialogHelperTest extends \PHPUnit_Framework_TestCase
 {
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
     public function testSelect()
     {
         $dialog = new DialogHelper();
diff --git a/core/vendor/symfony/console/Tests/Helper/LegacyProgressHelperTest.php b/core/vendor/symfony/console/Tests/Helper/LegacyProgressHelperTest.php
index 7b9cf29f0d356f5bc942240809e5232bacc4d388..e93057a16489d737e2803dc1a9e0f2409d5dbcca 100644
--- a/core/vendor/symfony/console/Tests/Helper/LegacyProgressHelperTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/LegacyProgressHelperTest.php
@@ -19,6 +19,11 @@
  */
 class LegacyProgressHelperTest extends \PHPUnit_Framework_TestCase
 {
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
     public function testAdvance()
     {
         $progress = new ProgressHelper();
diff --git a/core/vendor/symfony/console/Tests/Helper/LegacyTableHelperTest.php b/core/vendor/symfony/console/Tests/Helper/LegacyTableHelperTest.php
index 3b324237e260f8d2b291839d709cce4edea0f4bc..b7e31596f7dede2490ecf351c0d4a3fc9eda2c85 100644
--- a/core/vendor/symfony/console/Tests/Helper/LegacyTableHelperTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/LegacyTableHelperTest.php
@@ -23,6 +23,7 @@ class LegacyTableHelperTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
         $this->stream = fopen('php://memory', 'r+');
     }
 
diff --git a/core/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php b/core/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php
index 9f83885a50d424b562994147746926173f3f1fd3..2e333dc05e64e6ca43d5cf2b2a00757c082ad267 100644
--- a/core/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php
@@ -13,6 +13,7 @@
 
 use Symfony\Component\Console\Helper\DebugFormatterHelper;
 use Symfony\Component\Console\Helper\HelperSet;
+use Symfony\Component\Console\Helper\Helper;
 use Symfony\Component\Console\Output\StreamOutput;
 use Symfony\Component\Console\Helper\ProcessHelper;
 use Symfony\Component\Process\Process;
@@ -58,7 +59,7 @@ public function provideCommandsAndOutput()
 
 EOT;
         $successOutputDebugWithTags = <<<EOT
-  RUN  php -r "echo '<info>42</info>';"
+  RUN  php -r "echo \"<info>42</info>\";"
   OUT  <info>42</info>
   RES  Command ran successfully
 
@@ -91,7 +92,7 @@ public function provideCommandsAndOutput()
             array('', 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERBOSE, null),
             array($successOutputVerbose, 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERY_VERBOSE, null),
             array($successOutputDebug, 'php -r "echo 42;"', StreamOutput::VERBOSITY_DEBUG, null),
-            array($successOutputDebugWithTags, 'php -r "echo \'<info>42</info>\';"', StreamOutput::VERBOSITY_DEBUG, null),
+            array($successOutputDebugWithTags, 'php -r "echo \"<info>42</info>\";"', StreamOutput::VERBOSITY_DEBUG, null),
             array('', 'php -r "syntax error"', StreamOutput::VERBOSITY_VERBOSE, null),
             array($syntaxErrorOutputVerbose, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERY_VERBOSE, null),
             array($syntaxErrorOutputDebug, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_DEBUG, null),
diff --git a/core/vendor/symfony/console/Tests/Helper/ProgressBarTest.php b/core/vendor/symfony/console/Tests/Helper/ProgressBarTest.php
index 97b99efe7472c2df9c74b07b32ae4e7230cdb8f7..59c06bbeeb076cfdf6341a8bdcef72701c80ae4f 100644
--- a/core/vendor/symfony/console/Tests/Helper/ProgressBarTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/ProgressBarTest.php
@@ -323,17 +323,17 @@ public function testNonDecoratedOutput()
 
         rewind($output->getStream());
         $this->assertEquals(
-            '   0/200 [>---------------------------]   0%'.PHP_EOL.
-            '  20/200 [==>-------------------------]  10%'.PHP_EOL.
-            '  40/200 [=====>----------------------]  20%'.PHP_EOL.
-            '  60/200 [========>-------------------]  30%'.PHP_EOL.
-            '  80/200 [===========>----------------]  40%'.PHP_EOL.
-            ' 100/200 [==============>-------------]  50%'.PHP_EOL.
-            ' 120/200 [================>-----------]  60%'.PHP_EOL.
-            ' 140/200 [===================>--------]  70%'.PHP_EOL.
-            ' 160/200 [======================>-----]  80%'.PHP_EOL.
-            ' 180/200 [=========================>--]  90%'.PHP_EOL.
-            ' 200/200 [============================] 100%',
+            "   0/200 [>---------------------------]   0%\n".
+            "  20/200 [==>-------------------------]  10%\n".
+            "  40/200 [=====>----------------------]  20%\n".
+            "  60/200 [========>-------------------]  30%\n".
+            "  80/200 [===========>----------------]  40%\n".
+            " 100/200 [==============>-------------]  50%\n".
+            " 120/200 [================>-----------]  60%\n".
+            " 140/200 [===================>--------]  70%\n".
+            " 160/200 [======================>-----]  80%\n".
+            " 180/200 [=========================>--]  90%\n".
+            " 200/200 [============================] 100%",
             stream_get_contents($output->getStream())
         );
     }
@@ -349,9 +349,9 @@ public function testNonDecoratedOutputWithClear()
 
         rewind($output->getStream());
         $this->assertEquals(
-            '  0/50 [>---------------------------]   0%'.PHP_EOL.
-            ' 25/50 [==============>-------------]  50%'.PHP_EOL.
-            ' 50/50 [============================] 100%',
+            "  0/50 [>---------------------------]   0%\n".
+            " 25/50 [==============>-------------]  50%\n".
+            " 50/50 [============================] 100%",
             stream_get_contents($output->getStream())
         );
     }
@@ -364,8 +364,8 @@ public function testNonDecoratedOutputWithoutMax()
 
         rewind($output->getStream());
         $this->assertEquals(
-            '    0 [>---------------------------]'.PHP_EOL.
-            '    1 [->--------------------------]',
+            "    0 [>---------------------------]\n".
+            "    1 [->--------------------------]",
             stream_get_contents($output->getStream())
         );
     }
@@ -500,7 +500,7 @@ public function testAnsiColorsAndEmojis()
             $mem = 100000 * $i;
             $colors = $i++ ? '41;37' : '44;37';
 
-            return "\033[".$colors.'m '.Helper::formatMemory($mem)." \033[0m";
+            return "\033[".$colors."m ".Helper::formatMemory($mem)." \033[0m";
         });
         $bar->setFormat(" \033[44;37m %title:-37s% \033[0m\n %current%/%max% %bar% %percent:3s%%\n ðŸ��  %remaining:-10s% %memory:37s%");
         $bar->setBarCharacter($done = "\033[32mâ—�\033[0m");
@@ -518,17 +518,17 @@ public function testAnsiColorsAndEmojis()
         $this->assertEquals(
             $this->generateOutput(
                 " \033[44;37m Starting the demo... fingers crossed  \033[0m\n".
-                '  0/15 '.$progress.str_repeat($empty, 26)."   0%\n".
+                "  0/15 ".$progress.str_repeat($empty, 26)."   0%\n".
                 " \xf0\x9f\x8f\x81  1 sec                          \033[44;37m 0 B \033[0m"
             ).
             $this->generateOutput(
                 " \033[44;37m Looks good to me...                   \033[0m\n".
-                '  4/15 '.str_repeat($done, 7).$progress.str_repeat($empty, 19)."  26%\n".
+                "  4/15 ".str_repeat($done, 7).$progress.str_repeat($empty, 19)."  26%\n".
                 " \xf0\x9f\x8f\x81  1 sec                       \033[41;37m 97 KiB \033[0m"
             ).
             $this->generateOutput(
                 " \033[44;37m Thanks, bye                           \033[0m\n".
-                ' 15/15 '.str_repeat($done, 28)." 100%\n".
+                " 15/15 ".str_repeat($done, 28)." 100%\n".
                 " \xf0\x9f\x8f\x81  1 sec                      \033[41;37m 195 KiB \033[0m"
             ),
             stream_get_contents($output->getStream())
@@ -570,7 +570,7 @@ public function testFormatsWithoutMax($format)
     }
 
     /**
-     * Provides each defined format.
+     * Provides each defined format
      *
      * @return array
      */
diff --git a/core/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php b/core/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
index a1f85b174012ff9d33ba66c2d7f866627e08483e..99c89edc0e4573be36af8e5d09d907bbe26785df 100644
--- a/core/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
@@ -36,18 +36,15 @@ public function testAskChoice()
         $questionHelper->setInputStream($this->getInputStream("\n1\n  1  \nFabien\n1\nFabien\n1\n0,2\n 0 , 2  \n\n\n"));
 
         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '2');
-        $question->setMaxAttempts(1);
         // first answer is an empty answer, we're supposed to receive the default value
         $this->assertEquals('Spiderman', $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
 
         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes);
-        $question->setMaxAttempts(1);
         $this->assertEquals('Batman', $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
         $this->assertEquals('Batman', $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
 
         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes);
         $question->setErrorMessage('Input "%s" is not a superhero!');
-        $question->setMaxAttempts(2);
         $this->assertEquals('Batman', $questionHelper->ask($this->createInputInterfaceMock(), $output = $this->createOutputInterface(), $question));
 
         rewind($output->getStream());
@@ -64,7 +61,6 @@ public function testAskChoice()
         }
 
         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, null);
-        $question->setMaxAttempts(1);
         $question->setMultiselect(true);
 
         $this->assertEquals(array('Batman'), $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
@@ -72,13 +68,11 @@ public function testAskChoice()
         $this->assertEquals(array('Superman', 'Spiderman'), $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
 
         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '0,1');
-        $question->setMaxAttempts(1);
         $question->setMultiselect(true);
 
         $this->assertEquals(array('Superman', 'Batman'), $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
 
         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, ' 0 , 1 ');
-        $question->setMaxAttempts(1);
         $question->setMultiselect(true);
 
         $this->assertEquals(array('Superman', 'Batman'), $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
@@ -233,7 +227,6 @@ public function testSelectChoiceFromSimpleChoices($providedAnswer, $expectedValu
         $dialog->setHelperSet($helperSet);
 
         $question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
-        $question->setMaxAttempts(1);
         $answer = $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question);
 
         $this->assertSame($expectedValue, $answer);
diff --git a/core/vendor/symfony/console/Tests/Helper/TableTest.php b/core/vendor/symfony/console/Tests/Helper/TableTest.php
index 2a66caa046be52a818db040f5a0665a96a009da1..3db51f45b0ab9c4e80c2a8eb91eabdd0f0058f90 100644
--- a/core/vendor/symfony/console/Tests/Helper/TableTest.php
+++ b/core/vendor/symfony/console/Tests/Helper/TableTest.php
@@ -180,10 +180,10 @@ public function testRenderProvider()
             array(
                 array('ISBN', 'Title', 'Author'),
                 array(
-                    array('99921-58-10-7', "Divine\nComedy", 'Dante Alighieri'),
-                    array('9971-5-0210-2', "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
-                    array('9971-5-0210-2', "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
-                    array('960-425-059-0', 'The Lord of the Rings', "J. R. R.\nTolkien"),
+                    array("99921-58-10-7", "Divine\nComedy", "Dante Alighieri"),
+                    array("9971-5-0210-2", "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
+                    array("9971-5-0210-2", "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
+                    array("960-425-059-0", "The Lord of the Rings", "J. R. R.\nTolkien"),
                 ),
                 'default',
 <<<TABLE
@@ -550,8 +550,6 @@ public function testRowSeparator()
 TABLE;
 
         $this->assertEquals($expected, $this->getOutputContent($output));
-
-        $this->assertEquals($table, $table->addRow(new TableSeparator()), 'fluent interface on addRow() with a single TableSeparator() works');
     }
 
     protected function getOutputStream()
diff --git a/core/vendor/symfony/console/Tests/Input/InputDefinitionTest.php b/core/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
index 7e0a24258f3c221ebaa99c816cb49eea41c2f5ad..74d755f54e2f59792cff4b908e455f1ef2dd9a97 100644
--- a/core/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
+++ b/core/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
@@ -376,7 +376,7 @@ public function getGetSynopsisData()
             array(new InputDefinition(array(new InputOption('foo'), new InputArgument('foo', InputArgument::REQUIRED))), '[--foo] [--] <foo>', 'puts [--] between options and arguments'),
         );
     }
-
+    
     public function testGetShortSynopsis()
     {
         $definition = new InputDefinition(array(new InputOption('foo'), new InputOption('bar'), new InputArgument('cat')));
@@ -388,6 +388,8 @@ public function testGetShortSynopsis()
      */
     public function testLegacyAsText()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $definition = new InputDefinition(array(
             new InputArgument('foo', InputArgument::OPTIONAL, 'The foo argument'),
             new InputArgument('baz', InputArgument::OPTIONAL, 'The baz argument', true),
@@ -398,7 +400,7 @@ public function testLegacyAsText()
             new InputOption('qux', '', InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The qux option', array('http://foo.com/', 'bar')),
             new InputOption('qux2', '', InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The qux2 option', array('foo' => 'bar')),
         ));
-
+        
         $this->assertStringEqualsFile(self::$fixtures.'/definition_astext.txt', $definition->asText(), '->asText() returns a textual representation of the InputDefinition');
     }
 
@@ -407,6 +409,8 @@ public function testLegacyAsText()
      */
     public function testLegacyAsXml()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $definition = new InputDefinition(array(
             new InputArgument('foo', InputArgument::OPTIONAL, 'The foo argument'),
             new InputArgument('baz', InputArgument::OPTIONAL, 'The baz argument', true),
diff --git a/core/vendor/symfony/console/Tests/Input/StringInputTest.php b/core/vendor/symfony/console/Tests/Input/StringInputTest.php
index ccf9289cf357bd7ccaaf102970ffb49162701928..575d527cbe753eab5bf9d9e964d02354999bb0f7 100644
--- a/core/vendor/symfony/console/Tests/Input/StringInputTest.php
+++ b/core/vendor/symfony/console/Tests/Input/StringInputTest.php
@@ -46,6 +46,8 @@ public function testInputOptionWithGivenString()
      */
     public function testLegacyInputOptionDefinitionInConstructor()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $definition = new InputDefinition(
             array(new InputOption('foo', null, InputOption::VALUE_REQUIRED))
         );
diff --git a/core/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php b/core/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php
deleted file mode 100644
index 2df4f40e4a13070536fa184e1b1c06928284b7e0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace Symfony\Component\Console\Tests\Style;
-
-use PHPUnit_Framework_TestCase;
-use Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Style\SymfonyStyle;
-use Symfony\Component\Console\Tester\CommandTester;
-
-class SymfonyStyleTest extends PHPUnit_Framework_TestCase
-{
-    /** @var Command */
-    protected $command;
-    /** @var CommandTester */
-    protected $tester;
-
-    protected function setUp()
-    {
-        $this->command = new Command('sfstyle');
-        $this->tester = new CommandTester($this->command);
-    }
-
-    protected function tearDown()
-    {
-        $this->command = null;
-        $this->tester = null;
-    }
-
-    /**
-     * @dataProvider inputCommandToOutputFilesProvider
-     */
-    public function testOutputs($inputCommandFilepath, $outputFilepath)
-    {
-        $code = require $inputCommandFilepath;
-        $this->command->setCode($code);
-        $this->tester->execute(array(), array('interactive' => false, 'decorated' => false));
-        $this->assertStringEqualsFile($outputFilepath, $this->tester->getDisplay(true));
-    }
-
-    public function inputCommandToOutputFilesProvider()
-    {
-        $baseDir = __DIR__.'/../Fixtures/Style/SymfonyStyle';
-
-        return array_map(null, glob($baseDir.'/command/command_*.php'), glob($baseDir.'/output/output_*.txt'));
-    }
-
-    public function testLongWordsBlockWrapping()
-    {
-        $word = 'Lopadotemachoselachogaleokranioleipsanodrimhypotrimmatosilphioparaomelitokatakechymenokichlepikossyphophattoperisteralektryonoptekephalliokigklopeleiolagoiosiraiobaphetraganopterygon';
-        $wordLength = strlen($word);
-        $maxLineLength = SymfonyStyle::MAX_LINE_LENGTH - 3;
-
-        $this->command->setCode(function (InputInterface $input, OutputInterface $output) use ($word) {
-            $sfStyle = new SymfonyStyle($input, $output);
-            $sfStyle->block($word, 'CUSTOM', 'fg=white;bg=blue', ' Â§ ', false);
-        });
-
-        $this->tester->execute(array(), array('interactive' => false, 'decorated' => false));
-        $expectedCount = (int) ceil($wordLength / ($maxLineLength)) + (int) ($wordLength > $maxLineLength - 5);
-        $this->assertSame($expectedCount, substr_count($this->tester->getDisplay(true), ' Â§ '));
-    }
-}
diff --git a/core/vendor/symfony/debug/.gitignore b/core/vendor/symfony/debug/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/debug/CHANGELOG.md b/core/vendor/symfony/debug/CHANGELOG.md
deleted file mode 100644
index 31f0de9c23fb680f76ade9e1c9e9390ec52a5364..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/CHANGELOG.md
+++ /dev/null
@@ -1,35 +0,0 @@
-CHANGELOG
-=========
-
-2.7.0
------
-
-* added deprecations checking for parent interfaces/classes to DebugClassLoader
-* added ZTS support to symfony_debug extension
-* added symfony_debug_backtrace() to symfony_debug extension
-  to track the backtrace of fatal errors
-
-2.6.0
------
-
-* generalized ErrorHandler and ExceptionHandler,
-  with some new methods and others deprecated
-* enhanced error messages for uncaught exceptions
-
-2.5.0
------
-
-* added ExceptionHandler::setHandler()
-* added UndefinedMethodFatalErrorHandler
-* deprecated DummyException
-
-2.4.0
------
-
- * added a DebugClassLoader able to wrap any autoloader providing a findFile method
- * improved error messages for not found classes and functions
-
-2.3.0
------
-
- * added the component
diff --git a/core/vendor/symfony/debug/Debug.php b/core/vendor/symfony/debug/Debug.php
deleted file mode 100644
index 08b35f48bd2bf57c7f01df172689213a5a4c32a0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Debug.php
+++ /dev/null
@@ -1,62 +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\Debug;
-
-/**
- * Registers all the debug tools.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-class Debug
-{
-    private static $enabled = false;
-
-    /**
-     * Enables the debug tools.
-     *
-     * This method registers an error handler and an exception handler.
-     *
-     * If the Symfony ClassLoader component is available, a special
-     * class loader is also registered.
-     *
-     * @param int  $errorReportingLevel The level of error reporting you want
-     * @param bool $displayErrors       Whether to display errors (for development) or just log them (for production)
-     */
-    public static function enable($errorReportingLevel = null, $displayErrors = true)
-    {
-        if (static::$enabled) {
-            return;
-        }
-
-        static::$enabled = true;
-
-        if (null !== $errorReportingLevel) {
-            error_reporting($errorReportingLevel);
-        } else {
-            error_reporting(-1);
-        }
-
-        if ('cli' !== php_sapi_name()) {
-            ini_set('display_errors', 0);
-            ExceptionHandler::register();
-        } elseif ($displayErrors && (!ini_get('log_errors') || ini_get('error_log'))) {
-            // CLI - display errors only if they're not already logged to STDERR
-            ini_set('display_errors', 1);
-        }
-        $handler = ErrorHandler::register();
-        if (!$displayErrors) {
-            $handler->throwAt(0, true);
-        }
-
-        DebugClassLoader::enable();
-    }
-}
diff --git a/core/vendor/symfony/debug/DebugClassLoader.php b/core/vendor/symfony/debug/DebugClassLoader.php
deleted file mode 100644
index a2532d3038d640d1daca05edbf2c2a2e56f1e2e7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/DebugClassLoader.php
+++ /dev/null
@@ -1,258 +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\Debug;
-
-/**
- * Autoloader checking if the class is really defined in the file found.
- *
- * The ClassLoader will wrap all registered autoloaders
- * and will throw an exception if a file is found but does
- * not declare the class.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Christophe Coevoet <stof@notk.org>
- * @author Nicolas Grekas <p@tchwork.com>
- *
- * @api
- */
-class DebugClassLoader
-{
-    private $classLoader;
-    private $isFinder;
-    private $wasFinder;
-    private static $caseCheck;
-    private static $deprecated = array();
-    private static $php7Reserved = array('int', 'float', 'bool', 'string', 'true', 'false', 'null');
-
-    /**
-     * Constructor.
-     *
-     * @param callable|object $classLoader Passing an object is @deprecated since version 2.5 and support for it will be removed in 3.0
-     *
-     * @api
-     */
-    public function __construct($classLoader)
-    {
-        $this->wasFinder = is_object($classLoader) && method_exists($classLoader, 'findFile');
-
-        if ($this->wasFinder) {
-            @trigger_error('The '.__METHOD__.' method will no longer support receiving an object into its $classLoader argument in 3.0.', E_USER_DEPRECATED);
-            $this->classLoader = array($classLoader, 'loadClass');
-            $this->isFinder = true;
-        } else {
-            $this->classLoader = $classLoader;
-            $this->isFinder = is_array($classLoader) && method_exists($classLoader[0], 'findFile');
-        }
-
-        if (!isset(self::$caseCheck)) {
-            self::$caseCheck = false !== stripos(PHP_OS, 'win') ? (false !== stripos(PHP_OS, 'darwin') ? 2 : 1) : 0;
-        }
-    }
-
-    /**
-     * Gets the wrapped class loader.
-     *
-     * @return callable|object A class loader. Since version 2.5, returning an object is @deprecated and support for it will be removed in 3.0
-     */
-    public function getClassLoader()
-    {
-        return $this->wasFinder ? $this->classLoader[0] : $this->classLoader;
-    }
-
-    /**
-     * Wraps all autoloaders.
-     */
-    public static function enable()
-    {
-        // Ensures we don't hit https://bugs.php.net/42098
-        class_exists('Symfony\Component\Debug\ErrorHandler');
-        class_exists('Psr\Log\LogLevel');
-
-        if (!is_array($functions = spl_autoload_functions())) {
-            return;
-        }
-
-        foreach ($functions as $function) {
-            spl_autoload_unregister($function);
-        }
-
-        foreach ($functions as $function) {
-            if (!is_array($function) || !$function[0] instanceof self) {
-                $function = array(new static($function), 'loadClass');
-            }
-
-            spl_autoload_register($function);
-        }
-    }
-
-    /**
-     * Disables the wrapping.
-     */
-    public static function disable()
-    {
-        if (!is_array($functions = spl_autoload_functions())) {
-            return;
-        }
-
-        foreach ($functions as $function) {
-            spl_autoload_unregister($function);
-        }
-
-        foreach ($functions as $function) {
-            if (is_array($function) && $function[0] instanceof self) {
-                $function = $function[0]->getClassLoader();
-            }
-
-            spl_autoload_register($function);
-        }
-    }
-
-    /**
-     * Finds a file by class name.
-     *
-     * @param string $class A class name to resolve to file
-     *
-     * @return string|null
-     *
-     * @deprecated since version 2.5, to be removed in 3.0.
-     */
-    public function findFile($class)
-    {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
-
-        if ($this->wasFinder) {
-            return $this->classLoader[0]->findFile($class);
-        }
-    }
-
-    /**
-     * Loads the given class or interface.
-     *
-     * @param string $class The name of the class
-     *
-     * @return bool|null True, if loaded
-     *
-     * @throws \RuntimeException
-     */
-    public function loadClass($class)
-    {
-        ErrorHandler::stackErrors();
-
-        try {
-            if ($this->isFinder) {
-                if ($file = $this->classLoader[0]->findFile($class)) {
-                    require $file;
-                }
-            } else {
-                call_user_func($this->classLoader, $class);
-                $file = false;
-            }
-        } catch (\Exception $e) {
-            ErrorHandler::unstackErrors();
-
-            throw $e;
-        }
-
-        ErrorHandler::unstackErrors();
-
-        $exists = class_exists($class, false) || interface_exists($class, false) || (function_exists('trait_exists') && trait_exists($class, false));
-
-        if ('\\' === $class[0]) {
-            $class = substr($class, 1);
-        }
-
-        if ($exists) {
-            $refl = new \ReflectionClass($class);
-            $name = $refl->getName();
-
-            if ($name !== $class && 0 === strcasecmp($name, $class)) {
-                throw new \RuntimeException(sprintf('Case mismatch between loaded and declared class names: %s vs %s', $class, $name));
-            }
-
-            if (in_array(strtolower($refl->getShortName()), self::$php7Reserved)) {
-                @trigger_error(sprintf('%s uses a reserved class name (%s) that will break on PHP 7 and higher', $name, $refl->getShortName()), E_USER_DEPRECATED);
-            } elseif (preg_match('#\n \* @deprecated (.*?)\r?\n \*(?: @|/$)#s', $refl->getDocComment(), $notice)) {
-                self::$deprecated[$name] = preg_replace('#\s*\r?\n \* +#', ' ', $notice[1]);
-            } else {
-                if (2 > $len = 1 + (strpos($name, '\\', 1 + strpos($name, '\\')) ?: strpos($name, '_'))) {
-                    $len = 0;
-                    $ns = '';
-                } else {
-                    switch ($ns = substr($name, 0, $len)) {
-                        case 'Symfony\Bridge\\':
-                        case 'Symfony\Bundle\\':
-                        case 'Symfony\Component\\':
-                            $ns = 'Symfony\\';
-                            $len = strlen($ns);
-                            break;
-                    }
-                }
-                $parent = $refl->getParentClass();
-
-                if (!$parent || strncmp($ns, $parent->name, $len)) {
-                    if ($parent && isset(self::$deprecated[$parent->name]) && strncmp($ns, $parent->name, $len)) {
-                        @trigger_error(sprintf('The %s class extends %s that is deprecated %s', $name, $parent->name, self::$deprecated[$parent->name]), E_USER_DEPRECATED);
-                    }
-
-                    foreach ($refl->getInterfaceNames() as $interface) {
-                        if (isset(self::$deprecated[$interface]) && strncmp($ns, $interface, $len) && !($parent && $parent->implementsInterface($interface))) {
-                            @trigger_error(sprintf('The %s %s %s that is deprecated %s', $name, $refl->isInterface() ? 'interface extends' : 'class implements', $interface, self::$deprecated[$interface]), E_USER_DEPRECATED);
-                        }
-                    }
-                }
-            }
-        }
-
-        if ($file) {
-            if (!$exists) {
-                if (false !== strpos($class, '/')) {
-                    throw new \RuntimeException(sprintf('Trying to autoload a class with an invalid name "%s". Be careful that the namespace separator is "\" in PHP, not "/".', $class));
-                }
-
-                throw new \RuntimeException(sprintf('The autoloader expected class "%s" to be defined in file "%s". The file was found but the class was not in it, the class name or namespace probably has a typo.', $class, $file));
-            }
-            if (self::$caseCheck && preg_match('#([/\\\\][a-zA-Z_\x7F-\xFF][a-zA-Z0-9_\x7F-\xFF]*)+\.(php|hh)$#D', $file, $tail)) {
-                $tail = $tail[0];
-                $real = $refl->getFileName();
-
-                if (2 === self::$caseCheck) {
-                    // realpath() on MacOSX doesn't normalize the case of characters
-                    $cwd = getcwd();
-                    $basename = strrpos($real, '/');
-                    chdir(substr($real, 0, $basename));
-                    $basename = substr($real, $basename + 1);
-                    // glob() patterns are case-sensitive even if the underlying fs is not
-                    if (!in_array($basename, glob($basename.'*', GLOB_NOSORT), true)) {
-                        $real = getcwd().'/';
-                        $h = opendir('.');
-                        while (false !== $f = readdir($h)) {
-                            if (0 === strcasecmp($f, $basename)) {
-                                $real .= $f;
-                                break;
-                            }
-                        }
-                        closedir($h);
-                    }
-                    chdir($cwd);
-                }
-
-                if (0 === substr_compare($real, $tail, -strlen($tail), strlen($tail), true)
-                  && 0 !== substr_compare($real, $tail, -strlen($tail), strlen($tail), false)
-                ) {
-                    throw new \RuntimeException(sprintf('Case mismatch between class and source file names: %s vs %s', $class, $real));
-                }
-            }
-
-            return true;
-        }
-    }
-}
diff --git a/core/vendor/symfony/debug/ErrorHandler.php b/core/vendor/symfony/debug/ErrorHandler.php
deleted file mode 100644
index 2d8a9167b20b76d4db2498f5f901cbb8d4e28d93..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/ErrorHandler.php
+++ /dev/null
@@ -1,741 +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\Debug;
-
-use Psr\Log\LogLevel;
-use Psr\Log\LoggerInterface;
-use Symfony\Component\Debug\Exception\ContextErrorException;
-use Symfony\Component\Debug\Exception\FatalErrorException;
-use Symfony\Component\Debug\Exception\FatalThrowableError;
-use Symfony\Component\Debug\Exception\OutOfMemoryException;
-use Symfony\Component\Debug\FatalErrorHandler\UndefinedFunctionFatalErrorHandler;
-use Symfony\Component\Debug\FatalErrorHandler\UndefinedMethodFatalErrorHandler;
-use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler;
-use Symfony\Component\Debug\FatalErrorHandler\FatalErrorHandlerInterface;
-
-/**
- * A generic ErrorHandler for the PHP engine.
- *
- * Provides five bit fields that control how errors are handled:
- * - thrownErrors: errors thrown as \ErrorException
- * - loggedErrors: logged errors, when not @-silenced
- * - scopedErrors: errors thrown or logged with their local context
- * - tracedErrors: errors logged with their stack trace, only once for repeated errors
- * - screamedErrors: never @-silenced errors
- *
- * Each error level can be logged by a dedicated PSR-3 logger object.
- * Screaming only applies to logging.
- * Throwing takes precedence over logging.
- * Uncaught exceptions are logged as E_ERROR.
- * E_DEPRECATED and E_USER_DEPRECATED levels never throw.
- * E_RECOVERABLE_ERROR and E_USER_ERROR levels always throw.
- * Non catchable errors that can be detected at shutdown time are logged when the scream bit field allows so.
- * As errors have a performance cost, repeated errors are all logged, so that the developer
- * can see them and weight them as more important to fix than others of the same level.
- *
- * @author Nicolas Grekas <p@tchwork.com>
- */
-class ErrorHandler
-{
-    /**
-     * @deprecated since version 2.6, to be removed in 3.0.
-     */
-    const TYPE_DEPRECATION = -100;
-
-    private $levels = array(
-        E_DEPRECATED => 'Deprecated',
-        E_USER_DEPRECATED => 'User Deprecated',
-        E_NOTICE => 'Notice',
-        E_USER_NOTICE => 'User Notice',
-        E_STRICT => 'Runtime Notice',
-        E_WARNING => 'Warning',
-        E_USER_WARNING => 'User Warning',
-        E_COMPILE_WARNING => 'Compile Warning',
-        E_CORE_WARNING => 'Core Warning',
-        E_USER_ERROR => 'User Error',
-        E_RECOVERABLE_ERROR => 'Catchable Fatal Error',
-        E_COMPILE_ERROR => 'Compile Error',
-        E_PARSE => 'Parse Error',
-        E_ERROR => 'Error',
-        E_CORE_ERROR => 'Core Error',
-    );
-
-    private $loggers = array(
-        E_DEPRECATED => array(null, LogLevel::INFO),
-        E_USER_DEPRECATED => array(null, LogLevel::INFO),
-        E_NOTICE => array(null, LogLevel::WARNING),
-        E_USER_NOTICE => array(null, LogLevel::WARNING),
-        E_STRICT => array(null, LogLevel::WARNING),
-        E_WARNING => array(null, LogLevel::WARNING),
-        E_USER_WARNING => array(null, LogLevel::WARNING),
-        E_COMPILE_WARNING => array(null, LogLevel::WARNING),
-        E_CORE_WARNING => array(null, LogLevel::WARNING),
-        E_USER_ERROR => array(null, LogLevel::CRITICAL),
-        E_RECOVERABLE_ERROR => array(null, LogLevel::CRITICAL),
-        E_COMPILE_ERROR => array(null, LogLevel::CRITICAL),
-        E_PARSE => array(null, LogLevel::CRITICAL),
-        E_ERROR => array(null, LogLevel::CRITICAL),
-        E_CORE_ERROR => array(null, LogLevel::CRITICAL),
-    );
-
-    private $thrownErrors = 0x1FFF; // E_ALL - E_DEPRECATED - E_USER_DEPRECATED
-    private $scopedErrors = 0x1FFF; // E_ALL - E_DEPRECATED - E_USER_DEPRECATED
-    private $tracedErrors = 0x77FB; // E_ALL - E_STRICT - E_PARSE
-    private $screamedErrors = 0x55; // E_ERROR + E_CORE_ERROR + E_COMPILE_ERROR + E_PARSE
-    private $loggedErrors = 0;
-
-    private $loggedTraces = array();
-    private $isRecursive = 0;
-    private $exceptionHandler;
-
-    private static $reservedMemory;
-    private static $stackedErrors = array();
-    private static $stackedErrorLevels = array();
-
-    /**
-     * Same init value as thrownErrors.
-     *
-     * @deprecated since version 2.6, to be removed in 3.0.
-     */
-    private $displayErrors = 0x1FFF;
-
-    /**
-     * Registers the error handler.
-     *
-     * @param self|null|int $handler The handler to register, or @deprecated (since version 2.6, to be removed in 3.0) bit field of thrown levels
-     * @param bool          $replace Whether to replace or not any existing handler
-     *
-     * @return self The registered error handler
-     */
-    public static function register($handler = null, $replace = true)
-    {
-        if (null === self::$reservedMemory) {
-            self::$reservedMemory = str_repeat('x', 10240);
-            register_shutdown_function(__CLASS__.'::handleFatalError');
-        }
-
-        $levels = -1;
-
-        if ($handlerIsNew = !$handler instanceof self) {
-            // @deprecated polymorphism, to be removed in 3.0
-            if (null !== $handler) {
-                $levels = $replace ? $handler : 0;
-                $replace = true;
-            }
-            $handler = new static();
-        }
-
-        $prev = set_error_handler(array($handler, 'handleError'), $handler->thrownErrors | $handler->loggedErrors);
-
-        if ($handlerIsNew && is_array($prev) && $prev[0] instanceof self) {
-            $handler = $prev[0];
-            $replace = false;
-        }
-        if ($replace || !$prev) {
-            $handler->setExceptionHandler(set_exception_handler(array($handler, 'handleException')));
-        } else {
-            restore_error_handler();
-        }
-
-        $handler->throwAt($levels & $handler->thrownErrors, true);
-
-        return $handler;
-    }
-
-    /**
-     * Sets a logger to non assigned errors levels.
-     *
-     * @param LoggerInterface $logger  A PSR-3 logger to put as default for the given levels
-     * @param array|int       $levels  An array map of E_* to LogLevel::* or an integer bit field of E_* constants
-     * @param bool            $replace Whether to replace or not any existing logger
-     */
-    public function setDefaultLogger(LoggerInterface $logger, $levels = null, $replace = false)
-    {
-        $loggers = array();
-
-        if (is_array($levels)) {
-            foreach ($levels as $type => $logLevel) {
-                if (empty($this->loggers[$type][0]) || $replace) {
-                    $loggers[$type] = array($logger, $logLevel);
-                }
-            }
-        } else {
-            if (null === $levels) {
-                $levels = E_ALL | E_STRICT;
-            }
-            foreach ($this->loggers as $type => $log) {
-                if (($type & $levels) && (empty($log[0]) || $replace)) {
-                    $log[0] = $logger;
-                    $loggers[$type] = $log;
-                }
-            }
-        }
-
-        $this->setLoggers($loggers);
-    }
-
-    /**
-     * Sets a logger for each error level.
-     *
-     * @param array $loggers Error levels to [LoggerInterface|null, LogLevel::*] map
-     *
-     * @return array The previous map
-     *
-     * @throws \InvalidArgumentException
-     */
-    public function setLoggers(array $loggers)
-    {
-        $prevLogged = $this->loggedErrors;
-        $prev = $this->loggers;
-
-        foreach ($loggers as $type => $log) {
-            if (!isset($prev[$type])) {
-                throw new \InvalidArgumentException('Unknown error type: '.$type);
-            }
-            if (!is_array($log)) {
-                $log = array($log);
-            } elseif (!array_key_exists(0, $log)) {
-                throw new \InvalidArgumentException('No logger provided');
-            }
-            if (null === $log[0]) {
-                $this->loggedErrors &= ~$type;
-            } elseif ($log[0] instanceof LoggerInterface) {
-                $this->loggedErrors |= $type;
-            } else {
-                throw new \InvalidArgumentException('Invalid logger provided');
-            }
-            $this->loggers[$type] = $log + $prev[$type];
-        }
-        $this->reRegister($prevLogged | $this->thrownErrors);
-
-        return $prev;
-    }
-
-    /**
-     * Sets a user exception handler.
-     *
-     * @param callable $handler A handler that will be called on Exception
-     *
-     * @return callable|null The previous exception handler
-     *
-     * @throws \InvalidArgumentException
-     */
-    public function setExceptionHandler($handler)
-    {
-        if (null !== $handler && !is_callable($handler)) {
-            throw new \LogicException('The exception handler must be a valid PHP callable.');
-        }
-        $prev = $this->exceptionHandler;
-        $this->exceptionHandler = $handler;
-
-        return $prev;
-    }
-
-    /**
-     * Sets the PHP error levels that throw an exception when a PHP error occurs.
-     *
-     * @param int  $levels  A bit field of E_* constants for thrown errors
-     * @param bool $replace Replace or amend the previous value
-     *
-     * @return int The previous value
-     */
-    public function throwAt($levels, $replace = false)
-    {
-        $prev = $this->thrownErrors;
-        $this->thrownErrors = ($levels | E_RECOVERABLE_ERROR | E_USER_ERROR) & ~E_USER_DEPRECATED & ~E_DEPRECATED;
-        if (!$replace) {
-            $this->thrownErrors |= $prev;
-        }
-        $this->reRegister($prev | $this->loggedErrors);
-
-        // $this->displayErrors is @deprecated since version 2.6
-        $this->displayErrors = $this->thrownErrors;
-
-        return $prev;
-    }
-
-    /**
-     * Sets the PHP error levels for which local variables are preserved.
-     *
-     * @param int  $levels  A bit field of E_* constants for scoped errors
-     * @param bool $replace Replace or amend the previous value
-     *
-     * @return int The previous value
-     */
-    public function scopeAt($levels, $replace = false)
-    {
-        $prev = $this->scopedErrors;
-        $this->scopedErrors = (int) $levels;
-        if (!$replace) {
-            $this->scopedErrors |= $prev;
-        }
-
-        return $prev;
-    }
-
-    /**
-     * Sets the PHP error levels for which the stack trace is preserved.
-     *
-     * @param int  $levels  A bit field of E_* constants for traced errors
-     * @param bool $replace Replace or amend the previous value
-     *
-     * @return int The previous value
-     */
-    public function traceAt($levels, $replace = false)
-    {
-        $prev = $this->tracedErrors;
-        $this->tracedErrors = (int) $levels;
-        if (!$replace) {
-            $this->tracedErrors |= $prev;
-        }
-
-        return $prev;
-    }
-
-    /**
-     * Sets the error levels where the @-operator is ignored.
-     *
-     * @param int  $levels  A bit field of E_* constants for screamed errors
-     * @param bool $replace Replace or amend the previous value
-     *
-     * @return int The previous value
-     */
-    public function screamAt($levels, $replace = false)
-    {
-        $prev = $this->screamedErrors;
-        $this->screamedErrors = (int) $levels;
-        if (!$replace) {
-            $this->screamedErrors |= $prev;
-        }
-
-        return $prev;
-    }
-
-    /**
-     * Re-registers as a PHP error handler if levels changed.
-     */
-    private function reRegister($prev)
-    {
-        if ($prev !== $this->thrownErrors | $this->loggedErrors) {
-            $handler = set_error_handler('var_dump', 0);
-            $handler = is_array($handler) ? $handler[0] : null;
-            restore_error_handler();
-            if ($handler === $this) {
-                restore_error_handler();
-                set_error_handler(array($this, 'handleError'), $this->thrownErrors | $this->loggedErrors);
-            }
-        }
-    }
-
-    /**
-     * Handles errors by filtering then logging them according to the configured bit fields.
-     *
-     * @param int    $type    One of the E_* constants
-     * @param string $file
-     * @param int    $line
-     * @param array  $context
-     *
-     * @return bool Returns false when no handling happens so that the PHP engine can handle the error itself.
-     *
-     * @throws \ErrorException When $this->thrownErrors requests so
-     *
-     * @internal
-     */
-    public function handleError($type, $message, $file, $line, array $context, array $backtrace = null)
-    {
-        $level = error_reporting() | E_RECOVERABLE_ERROR | E_USER_ERROR;
-        $log = $this->loggedErrors & $type;
-        $throw = $this->thrownErrors & $type & $level;
-        $type &= $level | $this->screamedErrors;
-
-        if (!$type || (!$log && !$throw)) {
-            return $type && $log;
-        }
-
-        if (PHP_VERSION_ID < 50400 && isset($context['GLOBALS']) && ($this->scopedErrors & $type)) {
-            $e = $context;                  // Whatever the signature of the method,
-            unset($e['GLOBALS'], $context); // $context is always a reference in 5.3
-            $context = $e;
-        }
-
-        if (null !== $backtrace && $type & E_ERROR) {
-            // E_ERROR fatal errors are triggered on HHVM when
-            // hhvm.error_handling.call_user_handler_on_fatals=1
-            // which is the way to get their backtrace.
-            $this->handleFatalError(compact('type', 'message', 'file', 'line', 'backtrace'));
-
-            return true;
-        }
-
-        if ($throw) {
-            if (($this->scopedErrors & $type) && class_exists('Symfony\Component\Debug\Exception\ContextErrorException')) {
-                // Checking for class existence is a work around for https://bugs.php.net/42098
-                $throw = new ContextErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line, $context);
-            } else {
-                $throw = new \ErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line);
-            }
-
-            if (PHP_VERSION_ID <= 50407 && (PHP_VERSION_ID >= 50400 || PHP_VERSION_ID <= 50317)) {
-                // Exceptions thrown from error handlers are sometimes not caught by the exception
-                // handler and shutdown handlers are bypassed before 5.4.8/5.3.18.
-                // We temporarily re-enable display_errors to prevent any blank page related to this bug.
-
-                $throw->errorHandlerCanary = new ErrorHandlerCanary();
-            }
-
-            throw $throw;
-        }
-
-        // For duplicated errors, log the trace only once
-        $e = md5("{$type}/{$line}/{$file}\x00{$message}", true);
-        $trace = true;
-
-        if (!($this->tracedErrors & $type) || isset($this->loggedTraces[$e])) {
-            $trace = false;
-        } else {
-            $this->loggedTraces[$e] = 1;
-        }
-
-        $e = compact('type', 'file', 'line', 'level');
-
-        if ($type & $level) {
-            if ($this->scopedErrors & $type) {
-                $e['scope_vars'] = $context;
-                if ($trace) {
-                    $e['stack'] = $backtrace ?: debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT);
-                }
-            } elseif ($trace) {
-                if (null === $backtrace) {
-                    $e['stack'] = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
-                } else {
-                    foreach ($backtrace as &$frame) {
-                        unset($frame['args'], $frame);
-                    }
-                    $e['stack'] = $backtrace;
-                }
-            }
-        }
-
-        if ($this->isRecursive) {
-            $log = 0;
-        } elseif (self::$stackedErrorLevels) {
-            self::$stackedErrors[] = array($this->loggers[$type][0], ($type & $level) ? $this->loggers[$type][1] : LogLevel::DEBUG, $message, $e);
-        } else {
-            try {
-                $this->isRecursive = true;
-                $this->loggers[$type][0]->log(($type & $level) ? $this->loggers[$type][1] : LogLevel::DEBUG, $message, $e);
-                $this->isRecursive = false;
-            } catch (\Exception $e) {
-                $this->isRecursive = false;
-
-                throw $e;
-            }
-        }
-
-        return $type && $log;
-    }
-
-    /**
-     * Handles an exception by logging then forwarding it to an other handler.
-     *
-     * @param \Exception|\Throwable $exception An exception to handle
-     * @param array                 $error     An array as returned by error_get_last()
-     *
-     * @internal
-     */
-    public function handleException($exception, array $error = null)
-    {
-        if (!$exception instanceof \Exception) {
-            $exception = new FatalThrowableError($exception);
-        }
-        $type = $exception instanceof FatalErrorException ? $exception->getSeverity() : E_ERROR;
-
-        if ($this->loggedErrors & $type) {
-            $e = array(
-                'type' => $type,
-                'file' => $exception->getFile(),
-                'line' => $exception->getLine(),
-                'level' => error_reporting(),
-                'stack' => $exception->getTrace(),
-            );
-            if ($exception instanceof FatalErrorException) {
-                if ($exception instanceof FatalThrowableError) {
-                    $error = array(
-                        'type' => $type,
-                        'message' => $message = $exception->getMessage(),
-                        'file' => $e['file'],
-                        'line' => $e['line'],
-                    );
-                } else {
-                    $message = 'Fatal '.$exception->getMessage();
-                }
-            } elseif ($exception instanceof \ErrorException) {
-                $message = 'Uncaught '.$exception->getMessage();
-                if ($exception instanceof ContextErrorException) {
-                    $e['context'] = $exception->getContext();
-                }
-            } else {
-                $message = 'Uncaught Exception: '.$exception->getMessage();
-            }
-            if ($this->loggedErrors & $e['type']) {
-                $this->loggers[$e['type']][0]->log($this->loggers[$e['type']][1], $message, $e);
-            }
-        }
-        if ($exception instanceof FatalErrorException && !$exception instanceof OutOfMemoryException && $error) {
-            foreach ($this->getFatalErrorHandlers() as $handler) {
-                if ($e = $handler->handleError($error, $exception)) {
-                    $exception = $e;
-                    break;
-                }
-            }
-        }
-        if (empty($this->exceptionHandler)) {
-            throw $exception; // Give back $exception to the native handler
-        }
-        try {
-            call_user_func($this->exceptionHandler, $exception);
-        } catch (\Exception $handlerException) {
-        } catch (\Throwable $handlerException) {
-        }
-        if (isset($handlerException)) {
-            $this->exceptionHandler = null;
-            $this->handleException($handlerException);
-        }
-    }
-
-    /**
-     * Shutdown registered function for handling PHP fatal errors.
-     *
-     * @param array $error An array as returned by error_get_last()
-     *
-     * @internal
-     */
-    public static function handleFatalError(array $error = null)
-    {
-        if (null === self::$reservedMemory) {
-            return;
-        }
-
-        self::$reservedMemory = null;
-
-        $handler = set_error_handler('var_dump', 0);
-        $handler = is_array($handler) ? $handler[0] : null;
-        restore_error_handler();
-
-        if (!$handler instanceof self) {
-            return;
-        }
-
-        if (null === $error) {
-            $error = error_get_last();
-        }
-
-        try {
-            while (self::$stackedErrorLevels) {
-                static::unstackErrors();
-            }
-        } catch (\Exception $exception) {
-            // Handled below
-        }
-
-        if ($error && $error['type'] &= E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR) {
-            // Let's not throw anymore but keep logging
-            $handler->throwAt(0, true);
-            $trace = isset($error['backtrace']) ? $error['backtrace'] : null;
-
-            if (0 === strpos($error['message'], 'Allowed memory') || 0 === strpos($error['message'], 'Out of memory')) {
-                $exception = new OutOfMemoryException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, false, $trace);
-            } else {
-                $exception = new FatalErrorException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, true, $trace);
-            }
-        } elseif (!isset($exception)) {
-            return;
-        }
-
-        try {
-            $handler->handleException($exception, $error);
-        } catch (FatalErrorException $e) {
-            // Ignore this re-throw
-        }
-    }
-
-    /**
-     * Configures the error handler for delayed handling.
-     * Ensures also that non-catchable fatal errors are never silenced.
-     *
-     * As shown by http://bugs.php.net/42098 and http://bugs.php.net/60724
-     * PHP has a compile stage where it behaves unusually. To workaround it,
-     * we plug an error handler that only stacks errors for later.
-     *
-     * The most important feature of this is to prevent
-     * autoloading until unstackErrors() is called.
-     */
-    public static function stackErrors()
-    {
-        self::$stackedErrorLevels[] = error_reporting(error_reporting() | E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR);
-    }
-
-    /**
-     * Unstacks stacked errors and forwards to the logger.
-     */
-    public static function unstackErrors()
-    {
-        $level = array_pop(self::$stackedErrorLevels);
-
-        if (null !== $level) {
-            $e = error_reporting($level);
-            if ($e !== ($level | E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR)) {
-                // If the user changed the error level, do not overwrite it
-                error_reporting($e);
-            }
-        }
-
-        if (empty(self::$stackedErrorLevels)) {
-            $errors = self::$stackedErrors;
-            self::$stackedErrors = array();
-
-            foreach ($errors as $e) {
-                $e[0]->log($e[1], $e[2], $e[3]);
-            }
-        }
-    }
-
-    /**
-     * Gets the fatal error handlers.
-     *
-     * Override this method if you want to define more fatal error handlers.
-     *
-     * @return FatalErrorHandlerInterface[] An array of FatalErrorHandlerInterface
-     */
-    protected function getFatalErrorHandlers()
-    {
-        return array(
-            new UndefinedFunctionFatalErrorHandler(),
-            new UndefinedMethodFatalErrorHandler(),
-            new ClassNotFoundFatalErrorHandler(),
-        );
-    }
-
-    /**
-     * Sets the level at which the conversion to Exception is done.
-     *
-     * @param int|null $level The level (null to use the error_reporting() value and 0 to disable)
-     *
-     * @deprecated since version 2.6, to be removed in 3.0. Use throwAt() instead.
-     */
-    public function setLevel($level)
-    {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the throwAt() method instead.', E_USER_DEPRECATED);
-
-        $level = null === $level ? error_reporting() : $level;
-        $this->throwAt($level, true);
-    }
-
-    /**
-     * Sets the display_errors flag value.
-     *
-     * @param int $displayErrors The display_errors flag value
-     *
-     * @deprecated since version 2.6, to be removed in 3.0. Use throwAt() instead.
-     */
-    public function setDisplayErrors($displayErrors)
-    {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the throwAt() method instead.', E_USER_DEPRECATED);
-
-        if ($displayErrors) {
-            $this->throwAt($this->displayErrors, true);
-        } else {
-            $displayErrors = $this->displayErrors;
-            $this->throwAt(0, true);
-            $this->displayErrors = $displayErrors;
-        }
-    }
-
-    /**
-     * Sets a logger for the given channel.
-     *
-     * @param LoggerInterface $logger  A logger interface
-     * @param string          $channel The channel associated with the logger (deprecation, emergency or scream)
-     *
-     * @deprecated since version 2.6, to be removed in 3.0. Use setLoggers() or setDefaultLogger() instead.
-     */
-    public static function setLogger(LoggerInterface $logger, $channel = 'deprecation')
-    {
-        @trigger_error('The '.__METHOD__.' static method is deprecated since version 2.6 and will be removed in 3.0. Use the setLoggers() or setDefaultLogger() methods instead.', E_USER_DEPRECATED);
-
-        $handler = set_error_handler('var_dump', 0);
-        $handler = is_array($handler) ? $handler[0] : null;
-        restore_error_handler();
-        if (!$handler instanceof self) {
-            return;
-        }
-        if ('deprecation' === $channel) {
-            $handler->setDefaultLogger($logger, E_DEPRECATED | E_USER_DEPRECATED, true);
-            $handler->screamAt(E_DEPRECATED | E_USER_DEPRECATED);
-        } elseif ('scream' === $channel) {
-            $handler->setDefaultLogger($logger, E_ALL | E_STRICT, false);
-            $handler->screamAt(E_ALL | E_STRICT);
-        } elseif ('emergency' === $channel) {
-            $handler->setDefaultLogger($logger, E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR, true);
-            $handler->screamAt(E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR);
-        }
-    }
-
-    /**
-     * @deprecated since version 2.6, to be removed in 3.0. Use handleError() instead.
-     */
-    public function handle($level, $message, $file = 'unknown', $line = 0, $context = array())
-    {
-        $this->handleError(E_USER_DEPRECATED, 'The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the handleError() method instead.', __FILE__, __LINE__, array());
-
-        return $this->handleError($level, $message, $file, $line, (array) $context);
-    }
-
-    /**
-     * Handles PHP fatal errors.
-     *
-     * @deprecated since version 2.6, to be removed in 3.0. Use handleFatalError() instead.
-     */
-    public function handleFatal()
-    {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the handleFatalError() method instead.', E_USER_DEPRECATED);
-
-        static::handleFatalError();
-    }
-}
-
-/**
- * Private class used to work around https://bugs.php.net/54275.
- *
- * @author Nicolas Grekas <p@tchwork.com>
- *
- * @internal
- */
-class ErrorHandlerCanary
-{
-    private static $displayErrors = null;
-
-    public function __construct()
-    {
-        if (null === self::$displayErrors) {
-            self::$displayErrors = ini_set('display_errors', 1);
-        }
-    }
-
-    public function __destruct()
-    {
-        if (null !== self::$displayErrors) {
-            ini_set('display_errors', self::$displayErrors);
-            self::$displayErrors = null;
-        }
-    }
-}
diff --git a/core/vendor/symfony/debug/Exception/ClassNotFoundException.php b/core/vendor/symfony/debug/Exception/ClassNotFoundException.php
deleted file mode 100644
index b91bf46631bbb482943988927889dd7fc6d7ab1d..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/ClassNotFoundException.php
+++ /dev/null
@@ -1,33 +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\Debug\Exception;
-
-/**
- * Class (or Trait or Interface) Not Found Exception.
- *
- * @author Konstanton Myakshin <koc-dp@yandex.ru>
- */
-class ClassNotFoundException extends FatalErrorException
-{
-    public function __construct($message, \ErrorException $previous)
-    {
-        parent::__construct(
-            $message,
-            $previous->getCode(),
-            $previous->getSeverity(),
-            $previous->getFile(),
-            $previous->getLine(),
-            $previous->getPrevious()
-        );
-        $this->setTrace($previous->getTrace());
-    }
-}
diff --git a/core/vendor/symfony/debug/Exception/ContextErrorException.php b/core/vendor/symfony/debug/Exception/ContextErrorException.php
deleted file mode 100644
index 54f0198f1b2f87334c26d157c19c20514bcb83ea..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/ContextErrorException.php
+++ /dev/null
@@ -1,36 +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\Debug\Exception;
-
-/**
- * Error Exception with Variable Context.
- *
- * @author Christian Sciberras <uuf6429@gmail.com>
- */
-class ContextErrorException extends \ErrorException
-{
-    private $context = array();
-
-    public function __construct($message, $code, $severity, $filename, $lineno, $context = array())
-    {
-        parent::__construct($message, $code, $severity, $filename, $lineno);
-        $this->context = $context;
-    }
-
-    /**
-     * @return array Array of variables that existed when the exception occurred
-     */
-    public function getContext()
-    {
-        return $this->context;
-    }
-}
diff --git a/core/vendor/symfony/debug/Exception/DummyException.php b/core/vendor/symfony/debug/Exception/DummyException.php
deleted file mode 100644
index c836f876d3d953148d17281e36c935ba8ba8345a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/DummyException.php
+++ /dev/null
@@ -1,23 +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\Debug\Exception;
-
-@trigger_error('The '.__NAMESPACE__.'\DummyException class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
-
-/**
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @deprecated since version 2.5, to be removed in 3.0.
- */
-class DummyException extends \ErrorException
-{
-}
diff --git a/core/vendor/symfony/debug/Exception/FatalErrorException.php b/core/vendor/symfony/debug/Exception/FatalErrorException.php
deleted file mode 100644
index db2fb43bbceb57bffe56cb65a0678fc766805b12..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/FatalErrorException.php
+++ /dev/null
@@ -1,99 +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\HttpKernel\Exception;
-
-/**
- * Fatal Error Exception.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Konstanton Myakshin <koc-dp@yandex.ru>
- * @author Nicolas Grekas <p@tchwork.com>
- *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
- */
-class FatalErrorException extends \ErrorException
-{
-}
-
-namespace Symfony\Component\Debug\Exception;
-
-use Symfony\Component\HttpKernel\Exception\FatalErrorException as LegacyFatalErrorException;
-
-/**
- * Fatal Error Exception.
- *
- * @author Konstanton Myakshin <koc-dp@yandex.ru>
- */
-class FatalErrorException extends LegacyFatalErrorException
-{
-    public function __construct($message, $code, $severity, $filename, $lineno, $traceOffset = null, $traceArgs = true, array $trace = null)
-    {
-        parent::__construct($message, $code, $severity, $filename, $lineno);
-
-        if (null !== $trace) {
-            if (!$traceArgs) {
-                foreach ($trace as &$frame) {
-                    unset($frame['args'], $frame['this'], $frame);
-                }
-            }
-
-            $this->setTrace($trace);
-        } elseif (null !== $traceOffset) {
-            if (function_exists('xdebug_get_function_stack')) {
-                $trace = xdebug_get_function_stack();
-                if (0 < $traceOffset) {
-                    array_splice($trace, -$traceOffset);
-                }
-
-                foreach ($trace as &$frame) {
-                    if (!isset($frame['type'])) {
-                        // XDebug pre 2.1.1 doesn't currently set the call type key http://bugs.xdebug.org/view.php?id=695
-                        if (isset($frame['class'])) {
-                            $frame['type'] = '::';
-                        }
-                    } elseif ('dynamic' === $frame['type']) {
-                        $frame['type'] = '->';
-                    } elseif ('static' === $frame['type']) {
-                        $frame['type'] = '::';
-                    }
-
-                    // XDebug also has a different name for the parameters array
-                    if (!$traceArgs) {
-                        unset($frame['params'], $frame['args']);
-                    } elseif (isset($frame['params']) && !isset($frame['args'])) {
-                        $frame['args'] = $frame['params'];
-                        unset($frame['params']);
-                    }
-                }
-
-                unset($frame);
-                $trace = array_reverse($trace);
-            } elseif (function_exists('symfony_debug_backtrace')) {
-                $trace = symfony_debug_backtrace();
-                if (0 < $traceOffset) {
-                    array_splice($trace, 0, $traceOffset);
-                }
-            } else {
-                $trace = array();
-            }
-
-            $this->setTrace($trace);
-        }
-    }
-
-    protected function setTrace($trace)
-    {
-        $traceReflector = new \ReflectionProperty('Exception', 'trace');
-        $traceReflector->setAccessible(true);
-        $traceReflector->setValue($this, $trace);
-    }
-}
diff --git a/core/vendor/symfony/debug/Exception/FatalThrowableError.php b/core/vendor/symfony/debug/Exception/FatalThrowableError.php
deleted file mode 100644
index 6ff5ecdaffed099591238c64da1c17b648b2f8c6..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/FatalThrowableError.php
+++ /dev/null
@@ -1,44 +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\Debug\Exception;
-
-/**
- * Fatal Throwable Error.
- *
- * @author Nicolas Grekas <p@tchwork.com>
- */
-class FatalThrowableError extends FatalErrorException
-{
-    public function __construct(\Throwable $e)
-    {
-        if ($e instanceof \ParseError) {
-            $message = 'Parse error: '.$e->getMessage();
-            $severity = E_PARSE;
-        } elseif ($e instanceof \TypeError) {
-            $message = 'Type error: '.$e->getMessage();
-            $severity = E_RECOVERABLE_ERROR;
-        } else {
-            $message = 'Fatal error: '.$e->getMessage();
-            $severity = E_ERROR;
-        }
-
-        \ErrorException::__construct(
-            $message,
-            $e->getCode(),
-            $severity,
-            $e->getFile(),
-            $e->getLine()
-        );
-
-        $this->setTrace($e->getTrace());
-    }
-}
diff --git a/core/vendor/symfony/debug/Exception/FlattenException.php b/core/vendor/symfony/debug/Exception/FlattenException.php
deleted file mode 100644
index d8d5c5b9214d5219cbb15435cc24ee337cbb39e7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/FlattenException.php
+++ /dev/null
@@ -1,292 +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\HttpKernel\Exception;
-
-use Symfony\Component\Debug\Exception\FlattenException as DebugFlattenException;
-
-/**
- * FlattenException wraps a PHP Exception to be able to serialize it.
- *
- * Basically, this class removes all objects from the trace.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
- */
-class FlattenException
-{
-    private $handler;
-
-    public static function __callStatic($method, $args)
-    {
-        if (!method_exists('Symfony\Component\Debug\Exception\FlattenException', $method)) {
-            throw new \BadMethodCallException(sprintf('Call to undefined method %s::%s()', get_called_class(), $method));
-        }
-
-        return call_user_func_array(array('Symfony\Component\Debug\Exception\FlattenException', $method), $args);
-    }
-
-    public function __call($method, $args)
-    {
-        if (!isset($this->handler)) {
-            $this->handler = new DebugFlattenException();
-        }
-
-        if (!method_exists($this->handler, $method)) {
-            throw new \BadMethodCallException(sprintf('Call to undefined method %s::%s()', get_class($this), $method));
-        }
-
-        return call_user_func_array(array($this->handler, $method), $args);
-    }
-}
-
-namespace Symfony\Component\Debug\Exception;
-
-use Symfony\Component\HttpKernel\Exception\FlattenException as LegacyFlattenException;
-use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
-
-/**
- * FlattenException wraps a PHP Exception to be able to serialize it.
- *
- * Basically, this class removes all objects from the trace.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-class FlattenException extends LegacyFlattenException
-{
-    private $message;
-    private $code;
-    private $previous;
-    private $trace;
-    private $class;
-    private $statusCode;
-    private $headers;
-    private $file;
-    private $line;
-
-    public static function create(\Exception $exception, $statusCode = null, array $headers = array())
-    {
-        $e = new static();
-        $e->setMessage($exception->getMessage());
-        $e->setCode($exception->getCode());
-
-        if ($exception instanceof HttpExceptionInterface) {
-            $statusCode = $exception->getStatusCode();
-            $headers = array_merge($headers, $exception->getHeaders());
-        }
-
-        if (null === $statusCode) {
-            $statusCode = 500;
-        }
-
-        $e->setStatusCode($statusCode);
-        $e->setHeaders($headers);
-        $e->setTraceFromException($exception);
-        $e->setClass(get_class($exception));
-        $e->setFile($exception->getFile());
-        $e->setLine($exception->getLine());
-        if ($exception->getPrevious()) {
-            $e->setPrevious(static::create($exception->getPrevious()));
-        }
-
-        return $e;
-    }
-
-    public function toArray()
-    {
-        $exceptions = array();
-        foreach (array_merge(array($this), $this->getAllPrevious()) as $exception) {
-            $exceptions[] = array(
-                'message' => $exception->getMessage(),
-                'class' => $exception->getClass(),
-                'trace' => $exception->getTrace(),
-            );
-        }
-
-        return $exceptions;
-    }
-
-    public function getStatusCode()
-    {
-        return $this->statusCode;
-    }
-
-    public function setStatusCode($code)
-    {
-        $this->statusCode = $code;
-    }
-
-    public function getHeaders()
-    {
-        return $this->headers;
-    }
-
-    public function setHeaders(array $headers)
-    {
-        $this->headers = $headers;
-    }
-
-    public function getClass()
-    {
-        return $this->class;
-    }
-
-    public function setClass($class)
-    {
-        $this->class = $class;
-    }
-
-    public function getFile()
-    {
-        return $this->file;
-    }
-
-    public function setFile($file)
-    {
-        $this->file = $file;
-    }
-
-    public function getLine()
-    {
-        return $this->line;
-    }
-
-    public function setLine($line)
-    {
-        $this->line = $line;
-    }
-
-    public function getMessage()
-    {
-        return $this->message;
-    }
-
-    public function setMessage($message)
-    {
-        $this->message = $message;
-    }
-
-    public function getCode()
-    {
-        return $this->code;
-    }
-
-    public function setCode($code)
-    {
-        $this->code = $code;
-    }
-
-    public function getPrevious()
-    {
-        return $this->previous;
-    }
-
-    public function setPrevious(FlattenException $previous)
-    {
-        $this->previous = $previous;
-    }
-
-    public function getAllPrevious()
-    {
-        $exceptions = array();
-        $e = $this;
-        while ($e = $e->getPrevious()) {
-            $exceptions[] = $e;
-        }
-
-        return $exceptions;
-    }
-
-    public function getTrace()
-    {
-        return $this->trace;
-    }
-
-    public function setTraceFromException(\Exception $exception)
-    {
-        $this->setTrace($exception->getTrace(), $exception->getFile(), $exception->getLine());
-    }
-
-    public function setTrace($trace, $file, $line)
-    {
-        $this->trace = array();
-        $this->trace[] = array(
-            'namespace' => '',
-            'short_class' => '',
-            'class' => '',
-            'type' => '',
-            'function' => '',
-            'file' => $file,
-            'line' => $line,
-            'args' => array(),
-        );
-        foreach ($trace as $entry) {
-            $class = '';
-            $namespace = '';
-            if (isset($entry['class'])) {
-                $parts = explode('\\', $entry['class']);
-                $class = array_pop($parts);
-                $namespace = implode('\\', $parts);
-            }
-
-            $this->trace[] = array(
-                'namespace' => $namespace,
-                'short_class' => $class,
-                'class' => isset($entry['class']) ? $entry['class'] : '',
-                'type' => isset($entry['type']) ? $entry['type'] : '',
-                'function' => isset($entry['function']) ? $entry['function'] : null,
-                'file' => isset($entry['file']) ? $entry['file'] : null,
-                'line' => isset($entry['line']) ? $entry['line'] : null,
-                'args' => isset($entry['args']) ? $this->flattenArgs($entry['args']) : array(),
-            );
-        }
-    }
-
-    private function flattenArgs($args, $level = 0, &$count = 0)
-    {
-        $result = array();
-        foreach ($args as $key => $value) {
-            if (++$count > 1e4) {
-                return array('array', '*SKIPPED over 10000 entries*');
-            }
-            if (is_object($value)) {
-                $result[$key] = array('object', get_class($value));
-            } elseif (is_array($value)) {
-                if ($level > 10) {
-                    $result[$key] = array('array', '*DEEP NESTED ARRAY*');
-                } else {
-                    $result[$key] = array('array', $this->flattenArgs($value, $level + 1, $count));
-                }
-            } elseif (null === $value) {
-                $result[$key] = array('null', null);
-            } elseif (is_bool($value)) {
-                $result[$key] = array('boolean', $value);
-            } elseif (is_resource($value)) {
-                $result[$key] = array('resource', get_resource_type($value));
-            } elseif ($value instanceof \__PHP_Incomplete_Class) {
-                // Special case of object, is_object will return false
-                $result[$key] = array('incomplete-object', $this->getClassNameFromIncomplete($value));
-            } else {
-                $result[$key] = array('string', (string) $value);
-            }
-        }
-
-        return $result;
-    }
-
-    private function getClassNameFromIncomplete(\__PHP_Incomplete_Class $value)
-    {
-        $array = new \ArrayObject($value);
-
-        return $array['__PHP_Incomplete_Class_Name'];
-    }
-}
diff --git a/core/vendor/symfony/debug/Exception/OutOfMemoryException.php b/core/vendor/symfony/debug/Exception/OutOfMemoryException.php
deleted file mode 100644
index fec19798364502d573e47c17da34290db2c43a4a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/OutOfMemoryException.php
+++ /dev/null
@@ -1,21 +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\Debug\Exception;
-
-/**
- * Out of memory exception.
- *
- * @author Nicolas Grekas <p@tchwork.com>
- */
-class OutOfMemoryException extends FatalErrorException
-{
-}
diff --git a/core/vendor/symfony/debug/Exception/UndefinedFunctionException.php b/core/vendor/symfony/debug/Exception/UndefinedFunctionException.php
deleted file mode 100644
index a66ae2a3879c99778d464618c92c60dfb39b47bb..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/UndefinedFunctionException.php
+++ /dev/null
@@ -1,33 +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\Debug\Exception;
-
-/**
- * Undefined Function Exception.
- *
- * @author Konstanton Myakshin <koc-dp@yandex.ru>
- */
-class UndefinedFunctionException extends FatalErrorException
-{
-    public function __construct($message, \ErrorException $previous)
-    {
-        parent::__construct(
-            $message,
-            $previous->getCode(),
-            $previous->getSeverity(),
-            $previous->getFile(),
-            $previous->getLine(),
-            $previous->getPrevious()
-        );
-        $this->setTrace($previous->getTrace());
-    }
-}
diff --git a/core/vendor/symfony/debug/Exception/UndefinedMethodException.php b/core/vendor/symfony/debug/Exception/UndefinedMethodException.php
deleted file mode 100644
index 350dc3187f47541b28c5d46301690a4832566288..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Exception/UndefinedMethodException.php
+++ /dev/null
@@ -1,33 +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\Debug\Exception;
-
-/**
- * Undefined Method Exception.
- *
- * @author GrÃ©goire Pineau <lyrixx@lyrixx.info>
- */
-class UndefinedMethodException extends FatalErrorException
-{
-    public function __construct($message, \ErrorException $previous)
-    {
-        parent::__construct(
-            $message,
-            $previous->getCode(),
-            $previous->getSeverity(),
-            $previous->getFile(),
-            $previous->getLine(),
-            $previous->getPrevious()
-        );
-        $this->setTrace($previous->getTrace());
-    }
-}
diff --git a/core/vendor/symfony/debug/ExceptionHandler.php b/core/vendor/symfony/debug/ExceptionHandler.php
deleted file mode 100644
index c883f15469e0b407d83ece68f5c87ca130169304..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/ExceptionHandler.php
+++ /dev/null
@@ -1,469 +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\Debug;
-
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\Debug\Exception\FlattenException;
-use Symfony\Component\Debug\Exception\OutOfMemoryException;
-
-/**
- * ExceptionHandler converts an exception to a Response object.
- *
- * It is mostly useful in debug mode to replace the default PHP/XDebug
- * output with something prettier and more useful.
- *
- * As this class is mainly used during Kernel boot, where nothing is yet
- * available, the Response content is always HTML.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Nicolas Grekas <p@tchwork.com>
- */
-class ExceptionHandler
-{
-    private $debug;
-    private $charset;
-    private $handler;
-    private $caughtBuffer;
-    private $caughtLength;
-    private $fileLinkFormat;
-
-    public function __construct($debug = true, $charset = null, $fileLinkFormat = null)
-    {
-        if (false !== strpos($charset, '%') xor false === strpos($fileLinkFormat, '%')) {
-            // Swap $charset and $fileLinkFormat for BC reasons
-            $pivot = $fileLinkFormat;
-            $fileLinkFormat = $charset;
-            $charset = $pivot;
-        }
-        $this->debug = $debug;
-        $this->charset = $charset ?: ini_get('default_charset') ?: 'UTF-8';
-        $this->fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
-    }
-
-    /**
-     * Registers the exception handler.
-     *
-     * @param bool        $debug          Enable/disable debug mode, where the stack trace is displayed
-     * @param string|null $charset        The charset used by exception messages
-     * @param string|null $fileLinkFormat The IDE link template
-     *
-     * @return ExceptionHandler The registered exception handler
-     */
-    public static function register($debug = true, $charset = null, $fileLinkFormat = null)
-    {
-        $handler = new static($debug, $charset, $fileLinkFormat);
-
-        $prev = set_exception_handler(array($handler, 'handle'));
-        if (is_array($prev) && $prev[0] instanceof ErrorHandler) {
-            restore_exception_handler();
-            $prev[0]->setExceptionHandler(array($handler, 'handle'));
-        }
-
-        return $handler;
-    }
-
-    /**
-     * Sets a user exception handler.
-     *
-     * @param callable $handler An handler that will be called on Exception
-     *
-     * @return callable|null The previous exception handler if any
-     */
-    public function setHandler($handler)
-    {
-        if (null !== $handler && !is_callable($handler)) {
-            throw new \LogicException('The exception handler must be a valid PHP callable.');
-        }
-        $old = $this->handler;
-        $this->handler = $handler;
-
-        return $old;
-    }
-
-    /**
-     * Sets the format for links to source files.
-     *
-     * @param string $format The format for links to source files
-     *
-     * @return string The previous file link format.
-     */
-    public function setFileLinkFormat($format)
-    {
-        $old = $this->fileLinkFormat;
-        $this->fileLinkFormat = $format;
-
-        return $old;
-    }
-
-    /**
-     * Sends a response for the given Exception.
-     *
-     * To be as fail-safe as possible, the exception is first handled
-     * by our simple exception handler, then by the user exception handler.
-     * The latter takes precedence and any output from the former is cancelled,
-     * if and only if nothing bad happens in this handling path.
-     */
-    public function handle(\Exception $exception)
-    {
-        if (null === $this->handler || $exception instanceof OutOfMemoryException) {
-            $this->failSafeHandle($exception);
-
-            return;
-        }
-
-        $caughtLength = $this->caughtLength = 0;
-
-        ob_start(array($this, 'catchOutput'));
-        $this->failSafeHandle($exception);
-        while (null === $this->caughtBuffer && ob_end_flush()) {
-            // Empty loop, everything is in the condition
-        }
-        if (isset($this->caughtBuffer[0])) {
-            ob_start(array($this, 'cleanOutput'));
-            echo $this->caughtBuffer;
-            $caughtLength = ob_get_length();
-        }
-        $this->caughtBuffer = null;
-
-        try {
-            call_user_func($this->handler, $exception);
-            $this->caughtLength = $caughtLength;
-        } catch (\Exception $e) {
-            if (!$caughtLength) {
-                // All handlers failed. Let PHP handle that now.
-                throw $exception;
-            }
-        }
-    }
-
-    /**
-     * Sends a response for the given Exception.
-     *
-     * If you have the Symfony HttpFoundation component installed,
-     * this method will use it to create and send the response. If not,
-     * it will fallback to plain PHP functions.
-     *
-     * @param \Exception $exception An \Exception instance
-     *
-     * @see sendPhpResponse()
-     * @see createResponse()
-     */
-    private function failSafeHandle(\Exception $exception)
-    {
-        if (class_exists('Symfony\Component\HttpFoundation\Response', false)) {
-            $response = $this->createResponse($exception);
-            $response->sendHeaders();
-            $response->sendContent();
-        } else {
-            $this->sendPhpResponse($exception);
-        }
-    }
-
-    /**
-     * Sends the error associated with the given Exception as a plain PHP response.
-     *
-     * This method uses plain PHP functions like header() and echo to output
-     * the response.
-     *
-     * @param \Exception|FlattenException $exception An \Exception instance
-     */
-    public function sendPhpResponse($exception)
-    {
-        if (!$exception instanceof FlattenException) {
-            $exception = FlattenException::create($exception);
-        }
-
-        if (!headers_sent()) {
-            header(sprintf('HTTP/1.0 %s', $exception->getStatusCode()));
-            foreach ($exception->getHeaders() as $name => $value) {
-                header($name.': '.$value, false);
-            }
-            header('Content-Type: text/html; charset='.$this->charset);
-        }
-
-        echo $this->decorate($this->getContent($exception), $this->getStylesheet($exception));
-    }
-
-    /**
-     * Creates the error Response associated with the given Exception.
-     *
-     * @param \Exception|FlattenException $exception An \Exception instance
-     *
-     * @return Response A Response instance
-     */
-    public function createResponse($exception)
-    {
-        if (!$exception instanceof FlattenException) {
-            $exception = FlattenException::create($exception);
-        }
-
-        return Response::create($this->decorate($this->getContent($exception), $this->getStylesheet($exception)), $exception->getStatusCode(), $exception->getHeaders())->setCharset($this->charset);
-    }
-
-    /**
-     * Gets the HTML content associated with the given exception.
-     *
-     * @param FlattenException $exception A FlattenException instance
-     *
-     * @return string The content as a string
-     */
-    public function getContent(FlattenException $exception)
-    {
-        switch ($exception->getStatusCode()) {
-            case 404:
-                $title = 'Sorry, the page you are looking for could not be found.';
-                break;
-            default:
-                $title = 'Whoops, looks like something went wrong.';
-        }
-
-        $content = '';
-        if ($this->debug) {
-            try {
-                $count = count($exception->getAllPrevious());
-                $total = $count + 1;
-                foreach ($exception->toArray() as $position => $e) {
-                    $ind = $count - $position + 1;
-                    $class = $this->formatClass($e['class']);
-                    $message = nl2br($this->escapeHtml($e['message']));
-                    $content .= sprintf(<<<EOF
-                        <h2 class="block_exception clear_fix">
-                            <span class="exception_counter">%d/%d</span>
-                            <span class="exception_title">%s%s:</span>
-                            <span class="exception_message">%s</span>
-                        </h2>
-                        <div class="block">
-                            <ol class="traces list_exception">
-
-EOF
-                        , $ind, $total, $class, $this->formatPath($e['trace'][0]['file'], $e['trace'][0]['line']), $message);
-                    foreach ($e['trace'] as $trace) {
-                        $content .= '       <li>';
-                        if ($trace['function']) {
-                            $content .= sprintf('at %s%s%s(%s)', $this->formatClass($trace['class']), $trace['type'], $trace['function'], $this->formatArgs($trace['args']));
-                        }
-                        if (isset($trace['file']) && isset($trace['line'])) {
-                            $content .= $this->formatPath($trace['file'], $trace['line']);
-                        }
-                        $content .= "</li>\n";
-                    }
-
-                    $content .= "    </ol>\n</div>\n";
-                }
-            } catch (\Exception $e) {
-                // something nasty happened and we cannot throw an exception anymore
-                if ($this->debug) {
-                    $title = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $this->escapeHtml($e->getMessage()));
-                } else {
-                    $title = 'Whoops, looks like something went wrong.';
-                }
-            }
-        }
-
-        return <<<EOF
-            <div id="sf-resetcontent" class="sf-reset">
-                <h1>$title</h1>
-                $content
-            </div>
-EOF;
-    }
-
-    /**
-     * Gets the stylesheet associated with the given exception.
-     *
-     * @param FlattenException $exception A FlattenException instance
-     *
-     * @return string The stylesheet as a string
-     */
-    public function getStylesheet(FlattenException $exception)
-    {
-        return <<<EOF
-            .sf-reset { font: 11px Verdana, Arial, sans-serif; color: #333 }
-            .sf-reset .clear { clear:both; height:0; font-size:0; line-height:0; }
-            .sf-reset .clear_fix:after { display:block; height:0; clear:both; visibility:hidden; }
-            .sf-reset .clear_fix { display:inline-block; }
-            .sf-reset * html .clear_fix { height:1%; }
-            .sf-reset .clear_fix { display:block; }
-            .sf-reset, .sf-reset .block { margin: auto }
-            .sf-reset abbr { border-bottom: 1px dotted #000; cursor: help; }
-            .sf-reset p { font-size:14px; line-height:20px; color:#868686; padding-bottom:20px }
-            .sf-reset strong { font-weight:bold; }
-            .sf-reset a { color:#6c6159; cursor: default; }
-            .sf-reset a img { border:none; }
-            .sf-reset a:hover { text-decoration:underline; }
-            .sf-reset em { font-style:italic; }
-            .sf-reset h1, .sf-reset h2 { font: 20px Georgia, "Times New Roman", Times, serif }
-            .sf-reset .exception_counter { background-color: #fff; color: #333; padding: 6px; float: left; margin-right: 10px; float: left; display: block; }
-            .sf-reset .exception_title { margin-left: 3em; margin-bottom: 0.7em; display: block; }
-            .sf-reset .exception_message { margin-left: 3em; display: block; }
-            .sf-reset .traces li { font-size:12px; padding: 2px 4px; list-style-type:decimal; margin-left:20px; }
-            .sf-reset .block { background-color:#FFFFFF; padding:10px 28px; margin-bottom:20px;
-                -webkit-border-bottom-right-radius: 16px;
-                -webkit-border-bottom-left-radius: 16px;
-                -moz-border-radius-bottomright: 16px;
-                -moz-border-radius-bottomleft: 16px;
-                border-bottom-right-radius: 16px;
-                border-bottom-left-radius: 16px;
-                border-bottom:1px solid #ccc;
-                border-right:1px solid #ccc;
-                border-left:1px solid #ccc;
-            }
-            .sf-reset .block_exception { background-color:#ddd; color: #333; padding:20px;
-                -webkit-border-top-left-radius: 16px;
-                -webkit-border-top-right-radius: 16px;
-                -moz-border-radius-topleft: 16px;
-                -moz-border-radius-topright: 16px;
-                border-top-left-radius: 16px;
-                border-top-right-radius: 16px;
-                border-top:1px solid #ccc;
-                border-right:1px solid #ccc;
-                border-left:1px solid #ccc;
-                overflow: hidden;
-                word-wrap: break-word;
-            }
-            .sf-reset a { background:none; color:#868686; text-decoration:none; }
-            .sf-reset a:hover { background:none; color:#313131; text-decoration:underline; }
-            .sf-reset ol { padding: 10px 0; }
-            .sf-reset h1 { background-color:#FFFFFF; padding: 15px 28px; margin-bottom: 20px;
-                -webkit-border-radius: 10px;
-                -moz-border-radius: 10px;
-                border-radius: 10px;
-                border: 1px solid #ccc;
-            }
-EOF;
-    }
-
-    private function decorate($content, $css)
-    {
-        return <<<EOF
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="{$this->charset}" />
-        <meta name="robots" content="noindex,nofollow" />
-        <style>
-            /* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html */
-            html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}
-
-            html { background: #eee; padding: 10px }
-            img { border: 0; }
-            #sf-resetcontent { width:970px; margin:0 auto; }
-            $css
-        </style>
-    </head>
-    <body>
-        $content
-    </body>
-</html>
-EOF;
-    }
-
-    private function formatClass($class)
-    {
-        $parts = explode('\\', $class);
-
-        return sprintf('<abbr title="%s">%s</abbr>', $class, array_pop($parts));
-    }
-
-    private function formatPath($path, $line)
-    {
-        $path = $this->escapeHtml($path);
-        $file = preg_match('#[^/\\\\]*$#', $path, $file) ? $file[0] : $path;
-
-        if ($linkFormat = $this->fileLinkFormat) {
-            $link = strtr($this->escapeHtml($linkFormat), array('%f' => $path, '%l' => (int) $line));
-
-            return sprintf(' in <a href="%s" title="Go to source">%s line %d</a>', $link, $file, $line);
-        }
-
-        return sprintf(' in <a title="%s line %3$d" ondblclick="var f=this.innerHTML;this.innerHTML=this.title;this.title=f;">%s line %d</a>', $path, $file, $line);
-    }
-
-    /**
-     * Formats an array as a string.
-     *
-     * @param array $args The argument array
-     *
-     * @return string
-     */
-    private function formatArgs(array $args)
-    {
-        $result = array();
-        foreach ($args as $key => $item) {
-            if ('object' === $item[0]) {
-                $formattedValue = sprintf('<em>object</em>(%s)', $this->formatClass($item[1]));
-            } elseif ('array' === $item[0]) {
-                $formattedValue = sprintf('<em>array</em>(%s)', is_array($item[1]) ? $this->formatArgs($item[1]) : $item[1]);
-            } elseif ('string' === $item[0]) {
-                $formattedValue = sprintf("'%s'", $this->escapeHtml($item[1]));
-            } elseif ('null' === $item[0]) {
-                $formattedValue = '<em>null</em>';
-            } elseif ('boolean' === $item[0]) {
-                $formattedValue = '<em>'.strtolower(var_export($item[1], true)).'</em>';
-            } elseif ('resource' === $item[0]) {
-                $formattedValue = '<em>resource</em>';
-            } else {
-                $formattedValue = str_replace("\n", '', var_export($this->escapeHtml((string) $item[1]), true));
-            }
-
-            $result[] = is_int($key) ? $formattedValue : sprintf("'%s' => %s", $key, $formattedValue);
-        }
-
-        return implode(', ', $result);
-    }
-
-    /**
-     * Returns an UTF-8 and HTML encoded string.
-     *
-     * @deprecated since version 2.7, to be removed in 3.0.
-     */
-    protected static function utf8Htmlize($str)
-    {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
-
-        return htmlspecialchars($str, ENT_QUOTES | (PHP_VERSION_ID >= 50400 ? ENT_SUBSTITUTE : 0), 'UTF-8');
-    }
-
-    /**
-     * HTML-encodes a string.
-     */
-    private function escapeHtml($str)
-    {
-        return htmlspecialchars($str, ENT_QUOTES | (PHP_VERSION_ID >= 50400 ? ENT_SUBSTITUTE : 0), $this->charset);
-    }
-
-    /**
-     * @internal
-     */
-    public function catchOutput($buffer)
-    {
-        $this->caughtBuffer = $buffer;
-
-        return '';
-    }
-
-    /**
-     * @internal
-     */
-    public function cleanOutput($buffer)
-    {
-        if ($this->caughtLength) {
-            // use substr_replace() instead of substr() for mbstring overloading resistance
-            $cleanBuffer = substr_replace($buffer, '', 0, $this->caughtLength);
-            if (isset($cleanBuffer[0])) {
-                $buffer = $cleanBuffer;
-            }
-        }
-
-        return $buffer;
-    }
-}
diff --git a/core/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php b/core/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
deleted file mode 100644
index abfe90d79262a871adfc0a7e2398ce7596dab6b5..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
+++ /dev/null
@@ -1,212 +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\Debug\FatalErrorHandler;
-
-use Symfony\Component\Debug\Exception\ClassNotFoundException;
-use Symfony\Component\Debug\Exception\FatalErrorException;
-use Symfony\Component\Debug\DebugClassLoader;
-use Composer\Autoload\ClassLoader as ComposerClassLoader;
-use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader;
-use Symfony\Component\ClassLoader\UniversalClassLoader as SymfonyUniversalClassLoader;
-
-/**
- * ErrorHandler for classes that do not exist.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-class ClassNotFoundFatalErrorHandler implements FatalErrorHandlerInterface
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function handleError(array $error, FatalErrorException $exception)
-    {
-        $messageLen = strlen($error['message']);
-        $notFoundSuffix = '\' not found';
-        $notFoundSuffixLen = strlen($notFoundSuffix);
-        if ($notFoundSuffixLen > $messageLen) {
-            return;
-        }
-
-        if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) {
-            return;
-        }
-
-        foreach (array('class', 'interface', 'trait') as $typeName) {
-            $prefix = ucfirst($typeName).' \'';
-            $prefixLen = strlen($prefix);
-            if (0 !== strpos($error['message'], $prefix)) {
-                continue;
-            }
-
-            $fullyQualifiedClassName = substr($error['message'], $prefixLen, -$notFoundSuffixLen);
-            if (false !== $namespaceSeparatorIndex = strrpos($fullyQualifiedClassName, '\\')) {
-                $className = substr($fullyQualifiedClassName, $namespaceSeparatorIndex + 1);
-                $namespacePrefix = substr($fullyQualifiedClassName, 0, $namespaceSeparatorIndex);
-                $message = sprintf('Attempted to load %s "%s" from namespace "%s".', $typeName, $className, $namespacePrefix);
-                $tail = ' for another namespace?';
-            } else {
-                $className = $fullyQualifiedClassName;
-                $message = sprintf('Attempted to load %s "%s" from the global namespace.', $typeName, $className);
-                $tail = '?';
-            }
-
-            if ($candidates = $this->getClassCandidates($className)) {
-                $tail = array_pop($candidates).'"?';
-                if ($candidates) {
-                    $tail = ' for e.g. "'.implode('", "', $candidates).'" or "'.$tail;
-                } else {
-                    $tail = ' for "'.$tail;
-                }
-            }
-            $message .= "\nDid you forget a \"use\" statement".$tail;
-
-            return new ClassNotFoundException($message, $exception);
-        }
-    }
-
-    /**
-     * Tries to guess the full namespace for a given class name.
-     *
-     * By default, it looks for PSR-0 and PSR-4 classes registered via a Symfony or a Composer
-     * autoloader (that should cover all common cases).
-     *
-     * @param string $class A class name (without its namespace)
-     *
-     * @return array An array of possible fully qualified class names
-     */
-    private function getClassCandidates($class)
-    {
-        if (!is_array($functions = spl_autoload_functions())) {
-            return array();
-        }
-
-        // find Symfony and Composer autoloaders
-        $classes = array();
-
-        foreach ($functions as $function) {
-            if (!is_array($function)) {
-                continue;
-            }
-            // get class loaders wrapped by DebugClassLoader
-            if ($function[0] instanceof DebugClassLoader) {
-                $function = $function[0]->getClassLoader();
-
-                // @deprecated since version 2.5. Returning an object from DebugClassLoader::getClassLoader() is deprecated.
-                if (is_object($function)) {
-                    $function = array($function);
-                }
-
-                if (!is_array($function)) {
-                    continue;
-                }
-            }
-
-            if ($function[0] instanceof ComposerClassLoader || $function[0] instanceof SymfonyClassLoader || $function[0] instanceof SymfonyUniversalClassLoader) {
-                foreach ($function[0]->getPrefixes() as $prefix => $paths) {
-                    foreach ($paths as $path) {
-                        $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix));
-                    }
-                }
-            }
-            if ($function[0] instanceof ComposerClassLoader) {
-                foreach ($function[0]->getPrefixesPsr4() as $prefix => $paths) {
-                    foreach ($paths as $path) {
-                        $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix));
-                    }
-                }
-            }
-        }
-
-        return array_unique($classes);
-    }
-
-    /**
-     * @param string $path
-     * @param string $class
-     * @param string $prefix
-     *
-     * @return array
-     */
-    private function findClassInPath($path, $class, $prefix)
-    {
-        if (!$path = realpath($path.'/'.strtr($prefix, '\\_', '//')) ?: realpath($path.'/'.dirname(strtr($prefix, '\\_', '//'))) ?: realpath($path)) {
-            return array();
-        }
-
-        $classes = array();
-        $filename = $class.'.php';
-        foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
-            if ($filename == $file->getFileName() && $class = $this->convertFileToClass($path, $file->getPathName(), $prefix)) {
-                $classes[] = $class;
-            }
-        }
-
-        return $classes;
-    }
-
-    /**
-     * @param string $path
-     * @param string $file
-     * @param string $prefix
-     *
-     * @return string|null
-     */
-    private function convertFileToClass($path, $file, $prefix)
-    {
-        $candidates = array(
-            // namespaced class
-            $namespacedClass = str_replace(array($path.DIRECTORY_SEPARATOR, '.php', '/'), array('', '', '\\'), $file),
-            // namespaced class (with target dir)
-            $prefix.$namespacedClass,
-            // namespaced class (with target dir and separator)
-            $prefix.'\\'.$namespacedClass,
-            // PEAR class
-            str_replace('\\', '_', $namespacedClass),
-            // PEAR class (with target dir)
-            str_replace('\\', '_', $prefix.$namespacedClass),
-            // PEAR class (with target dir and separator)
-            str_replace('\\', '_', $prefix.'\\'.$namespacedClass),
-        );
-
-        if ($prefix) {
-            $candidates = array_filter($candidates, function ($candidate) use ($prefix) {return 0 === strpos($candidate, $prefix);});
-        }
-
-        // We cannot use the autoloader here as most of them use require; but if the class
-        // is not found, the new autoloader call will require the file again leading to a
-        // "cannot redeclare class" error.
-        foreach ($candidates as $candidate) {
-            if ($this->classExists($candidate)) {
-                return $candidate;
-            }
-        }
-
-        require_once $file;
-
-        foreach ($candidates as $candidate) {
-            if ($this->classExists($candidate)) {
-                return $candidate;
-            }
-        }
-    }
-
-    /**
-     * @param string $class
-     *
-     * @return bool
-     */
-    private function classExists($class)
-    {
-        return class_exists($class, false) || interface_exists($class, false) || (function_exists('trait_exists') && trait_exists($class, false));
-    }
-}
diff --git a/core/vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php b/core/vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php
deleted file mode 100644
index 6b87eb30a126e406b82bd8b493ac81506fbea805..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php
+++ /dev/null
@@ -1,32 +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\Debug\FatalErrorHandler;
-
-use Symfony\Component\Debug\Exception\FatalErrorException;
-
-/**
- * Attempts to convert fatal errors to exceptions.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-interface FatalErrorHandlerInterface
-{
-    /**
-     * Attempts to convert an error into an exception.
-     *
-     * @param array               $error     An array as returned by error_get_last()
-     * @param FatalErrorException $exception A FatalErrorException instance
-     *
-     * @return FatalErrorException|null A FatalErrorException instance if the class is able to convert the error, null otherwise
-     */
-    public function handleError(array $error, FatalErrorException $exception);
-}
diff --git a/core/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php b/core/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
deleted file mode 100644
index c6f391a79c686fe86a3538ec0b98ddb975b30816..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
+++ /dev/null
@@ -1,84 +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\Debug\FatalErrorHandler;
-
-use Symfony\Component\Debug\Exception\UndefinedFunctionException;
-use Symfony\Component\Debug\Exception\FatalErrorException;
-
-/**
- * ErrorHandler for undefined functions.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-class UndefinedFunctionFatalErrorHandler implements FatalErrorHandlerInterface
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function handleError(array $error, FatalErrorException $exception)
-    {
-        $messageLen = strlen($error['message']);
-        $notFoundSuffix = '()';
-        $notFoundSuffixLen = strlen($notFoundSuffix);
-        if ($notFoundSuffixLen > $messageLen) {
-            return;
-        }
-
-        if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) {
-            return;
-        }
-
-        $prefix = 'Call to undefined function ';
-        $prefixLen = strlen($prefix);
-        if (0 !== strpos($error['message'], $prefix)) {
-            return;
-        }
-
-        $fullyQualifiedFunctionName = substr($error['message'], $prefixLen, -$notFoundSuffixLen);
-        if (false !== $namespaceSeparatorIndex = strrpos($fullyQualifiedFunctionName, '\\')) {
-            $functionName = substr($fullyQualifiedFunctionName, $namespaceSeparatorIndex + 1);
-            $namespacePrefix = substr($fullyQualifiedFunctionName, 0, $namespaceSeparatorIndex);
-            $message = sprintf('Attempted to call function "%s" from namespace "%s".', $functionName, $namespacePrefix);
-        } else {
-            $functionName = $fullyQualifiedFunctionName;
-            $message = sprintf('Attempted to call function "%s" from the global namespace.', $functionName);
-        }
-
-        $candidates = array();
-        foreach (get_defined_functions() as $type => $definedFunctionNames) {
-            foreach ($definedFunctionNames as $definedFunctionName) {
-                if (false !== $namespaceSeparatorIndex = strrpos($definedFunctionName, '\\')) {
-                    $definedFunctionNameBasename = substr($definedFunctionName, $namespaceSeparatorIndex + 1);
-                } else {
-                    $definedFunctionNameBasename = $definedFunctionName;
-                }
-
-                if ($definedFunctionNameBasename === $functionName) {
-                    $candidates[] = '\\'.$definedFunctionName;
-                }
-            }
-        }
-
-        if ($candidates) {
-            sort($candidates);
-            $last = array_pop($candidates).'"?';
-            if ($candidates) {
-                $candidates = 'e.g. "'.implode('", "', $candidates).'" or "'.$last;
-            } else {
-                $candidates = '"'.$last;
-            }
-            $message .= "\nDid you mean to call ".$candidates;
-        }
-
-        return new UndefinedFunctionException($message, $exception);
-    }
-}
diff --git a/core/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php b/core/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php
deleted file mode 100644
index f734d6bb7dd9e3fc324a125474c9c9c6172214c0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php
+++ /dev/null
@@ -1,60 +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\Debug\FatalErrorHandler;
-
-use Symfony\Component\Debug\Exception\FatalErrorException;
-use Symfony\Component\Debug\Exception\UndefinedMethodException;
-
-/**
- * ErrorHandler for undefined methods.
- *
- * @author GrÃ©goire Pineau <lyrixx@lyrixx.info>
- */
-class UndefinedMethodFatalErrorHandler implements FatalErrorHandlerInterface
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function handleError(array $error, FatalErrorException $exception)
-    {
-        preg_match('/^Call to undefined method (.*)::(.*)\(\)$/', $error['message'], $matches);
-        if (!$matches) {
-            return;
-        }
-
-        $className = $matches[1];
-        $methodName = $matches[2];
-
-        $message = sprintf('Attempted to call an undefined method named "%s" of class "%s".', $methodName, $className);
-
-        $candidates = array();
-        foreach (get_class_methods($className) as $definedMethodName) {
-            $lev = levenshtein($methodName, $definedMethodName);
-            if ($lev <= strlen($methodName) / 3 || false !== strpos($definedMethodName, $methodName)) {
-                $candidates[] = $definedMethodName;
-            }
-        }
-
-        if ($candidates) {
-            sort($candidates);
-            $last = array_pop($candidates).'"?';
-            if ($candidates) {
-                $candidates = 'e.g. "'.implode('", "', $candidates).'" or "'.$last;
-            } else {
-                $candidates = '"'.$last;
-            }
-            $message .= "\nDid you mean to call ".$candidates;
-        }
-
-        return new UndefinedMethodException($message, $exception);
-    }
-}
diff --git a/core/vendor/symfony/debug/LICENSE b/core/vendor/symfony/debug/LICENSE
deleted file mode 100644
index 43028bc600f26ec5599ab339d83cd70f70dfcdab..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2004-2015 Fabien Potencier
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/core/vendor/symfony/debug/README.md b/core/vendor/symfony/debug/README.md
deleted file mode 100644
index 67e6d6c2785c685abfb12b8866939603b265b646..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-Debug Component
-===============
-
-Debug provides tools to make debugging easier.
-
-Enabling all debug tools is as easy as calling the `enable()` method on the
-main `Debug` class:
-
-```php
-use Symfony\Component\Debug\Debug;
-
-Debug::enable();
-```
-
-You can also use the tools individually:
-
-```php
-use Symfony\Component\Debug\ErrorHandler;
-use Symfony\Component\Debug\ExceptionHandler;
-
-if ('cli' !== php_sapi_name()) {
-    ini_set('display_errors', 0);
-    ExceptionHandler::register();
-} elseif (!ini_get('log_errors') || ini_get('error_log')) {
-    ini_set('display_errors', 1);
-}
-ErrorHandler::register();
-```
-
-Note that the `Debug::enable()` call also registers the debug class loader
-from the Symfony ClassLoader component when available.
-
-This component can optionally take advantage of the features of the HttpKernel
-and HttpFoundation components.
-
-Resources
----------
-
-You can run the unit tests with the following command:
-
-    $ cd path/to/Symfony/Component/Debug/
-    $ composer install
-    $ phpunit
diff --git a/core/vendor/symfony/debug/Resources/ext/README.md b/core/vendor/symfony/debug/Resources/ext/README.md
deleted file mode 100644
index 0672ef8f4ace19e5bcb4e7478d7d351f6719c43f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/README.md
+++ /dev/null
@@ -1,133 +0,0 @@
-Symfony Debug Extension
-=======================
-
-This extension publishes several functions to help building powerful debugging tools.
-
-symfony_zval_info()
--------------------
-
-- exposes zval_hash/refcounts, allowing e.g. efficient exploration of arbitrary structures in PHP,
-- does work with references, preventing memory copying.
-
-Its behavior is about the same as:
-
-```php
-<?php
-
-function symfony_zval_info($key, $array, $options = 0)
-{
-
-    // $options is currently not used, but could be in future version.
-
-    if (!array_key_exists($key, $array)) {
-        return null;
-    }
-
-    $info = array(
-        'type' => gettype($array[$key]),
-        'zval_hash' => /* hashed memory address of $array[$key] */,
-        'zval_refcount' => /* internal zval refcount of $array[$key] */,
-        'zval_isref' => /* is_ref status of $array[$key] */,
-    );
-
-    switch ($info['type']) {
-        case 'object':
-            $info += array(
-                'object_class' => get_class($array[$key]),
-                'object_refcount' => /* internal object refcount of $array[$key] */,
-                'object_hash' => spl_object_hash($array[$key]),
-                'object_handle' => /* internal object handle $array[$key] */,
-            );
-            break;
-
-        case 'resource':
-            $info += array(
-                'resource_handle' => (int) $array[$key],
-                'resource_type' => get_resource_type($array[$key]),
-                'resource_refcount' => /* internal resource refcount of $array[$key] */,
-            );
-            break;
-
-        case 'array':
-            $info += array(
-                'array_count' => count($array[$key]),
-            );
-            break;
-
-        case 'string':
-            $info += array(
-                'strlen' => strlen($array[$key]),
-            );
-            break;
-    }
-
-    return $info;
-}
-```
-
-symfony_debug_backtrace()
--------------------------
-
-This function works like debug_backtrace(), except that it can fetch the full backtrace in case of fatal errors:
-
-```php
-function foo() { fatal(); }
-function bar() { foo(); }
-
-function sd() { var_dump(symfony_debug_backtrace()); }
-
-register_shutdown_function('sd');
-
-bar();
-
-/* Will output
-Fatal error: Call to undefined function fatal() in foo.php on line 42
-array(3) {
-  [0]=>
-  array(2) {
-    ["function"]=>
-    string(2) "sd"
-    ["args"]=>
-    array(0) {
-    }
-  }
-  [1]=>
-  array(4) {
-    ["file"]=>
-    string(7) "foo.php"
-    ["line"]=>
-    int(1)
-    ["function"]=>
-    string(3) "foo"
-    ["args"]=>
-    array(0) {
-    }
-  }
-  [2]=>
-  array(4) {
-    ["file"]=>
-    string(102) "foo.php"
-    ["line"]=>
-    int(2)
-    ["function"]=>
-    string(3) "bar"
-    ["args"]=>
-    array(0) {
-    }
-  }
-}
-*/
-```
-
-Usage
------
-
-The extension is compatible with ZTS mode, and should be supported by PHP5.3, 5.4, 5.5 and 5.6.
-To enable the extension from source, run:
-
-```
-    phpize
-    ./configure
-    make
-    sudo make install
-```
diff --git a/core/vendor/symfony/debug/Resources/ext/config.m4 b/core/vendor/symfony/debug/Resources/ext/config.m4
deleted file mode 100644
index 3c56047150569b5ad02799e03f7b7edfbee5d608..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/config.m4
+++ /dev/null
@@ -1,63 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension symfony_debug
-
-dnl Comments in this file start with the string 'dnl'.
-dnl Remove where necessary. This file will not work
-dnl without editing.
-
-dnl If your extension references something external, use with:
-
-dnl PHP_ARG_WITH(symfony_debug, for symfony_debug support,
-dnl Make sure that the comment is aligned:
-dnl [  --with-symfony_debug             Include symfony_debug support])
-
-dnl Otherwise use enable:
-
-PHP_ARG_ENABLE(symfony_debug, whether to enable symfony_debug support,
-dnl Make sure that the comment is aligned:
-[  --enable-symfony_debug           Enable symfony_debug support])
-
-if test "$PHP_SYMFONY_DEBUG" != "no"; then
-  dnl Write more examples of tests here...
-
-  dnl # --with-symfony_debug -> check with-path
-  dnl SEARCH_PATH="/usr/local /usr"     # you might want to change this
-  dnl SEARCH_FOR="/include/symfony_debug.h"  # you most likely want to change this
-  dnl if test -r $PHP_SYMFONY_DEBUG/$SEARCH_FOR; then # path given as parameter
-  dnl   SYMFONY_DEBUG_DIR=$PHP_SYMFONY_DEBUG
-  dnl else # search default path list
-  dnl   AC_MSG_CHECKING([for symfony_debug files in default path])
-  dnl   for i in $SEARCH_PATH ; do
-  dnl     if test -r $i/$SEARCH_FOR; then
-  dnl       SYMFONY_DEBUG_DIR=$i
-  dnl       AC_MSG_RESULT(found in $i)
-  dnl     fi
-  dnl   done
-  dnl fi
-  dnl
-  dnl if test -z "$SYMFONY_DEBUG_DIR"; then
-  dnl   AC_MSG_RESULT([not found])
-  dnl   AC_MSG_ERROR([Please reinstall the symfony_debug distribution])
-  dnl fi
-
-  dnl # --with-symfony_debug -> add include path
-  dnl PHP_ADD_INCLUDE($SYMFONY_DEBUG_DIR/include)
-
-  dnl # --with-symfony_debug -> check for lib and symbol presence
-  dnl LIBNAME=symfony_debug # you may want to change this
-  dnl LIBSYMBOL=symfony_debug # you most likely want to change this 
-
-  dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
-  dnl [
-  dnl   PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $SYMFONY_DEBUG_DIR/lib, SYMFONY_DEBUG_SHARED_LIBADD)
-  dnl   AC_DEFINE(HAVE_SYMFONY_DEBUGLIB,1,[ ])
-  dnl ],[
-  dnl   AC_MSG_ERROR([wrong symfony_debug lib version or lib not found])
-  dnl ],[
-  dnl   -L$SYMFONY_DEBUG_DIR/lib -lm
-  dnl ])
-  dnl
-  dnl PHP_SUBST(SYMFONY_DEBUG_SHARED_LIBADD)
-
-  PHP_NEW_EXTENSION(symfony_debug, symfony_debug.c, $ext_shared)
-fi
diff --git a/core/vendor/symfony/debug/Resources/ext/config.w32 b/core/vendor/symfony/debug/Resources/ext/config.w32
deleted file mode 100644
index 487e6913891cf07b60f9779b0e3ffd18406c44ff..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/config.w32
+++ /dev/null
@@ -1,13 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-// If your extension references something external, use ARG_WITH
-// ARG_WITH("symfony_debug", "for symfony_debug support", "no");
-
-// Otherwise, use ARG_ENABLE
-// ARG_ENABLE("symfony_debug", "enable symfony_debug support", "no");
-
-if (PHP_SYMFONY_DEBUG != "no") {
-	EXTENSION("symfony_debug", "symfony_debug.c");
-}
-
diff --git a/core/vendor/symfony/debug/Resources/ext/php_symfony_debug.h b/core/vendor/symfony/debug/Resources/ext/php_symfony_debug.h
deleted file mode 100644
index 26d0e8c0120300cda3204ed5cefd445a354e7cac..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/php_symfony_debug.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-
-#ifndef PHP_SYMFONY_DEBUG_H
-#define PHP_SYMFONY_DEBUG_H
-
-extern zend_module_entry symfony_debug_module_entry;
-#define phpext_symfony_debug_ptr &symfony_debug_module_entry
-
-#define PHP_SYMFONY_DEBUG_VERSION "2.7"
-
-#ifdef PHP_WIN32
-#	define PHP_SYMFONY_DEBUG_API __declspec(dllexport)
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#	define PHP_SYMFONY_DEBUG_API __attribute__ ((visibility("default")))
-#else
-#	define PHP_SYMFONY_DEBUG_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(symfony_debug)
-	intptr_t req_rand_init;
-	void (*old_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
-	zval *debug_bt;
-ZEND_END_MODULE_GLOBALS(symfony_debug)
-
-PHP_MINIT_FUNCTION(symfony_debug);
-PHP_MSHUTDOWN_FUNCTION(symfony_debug);
-PHP_RINIT_FUNCTION(symfony_debug);
-PHP_RSHUTDOWN_FUNCTION(symfony_debug);
-PHP_MINFO_FUNCTION(symfony_debug);
-PHP_GINIT_FUNCTION(symfony_debug);
-PHP_GSHUTDOWN_FUNCTION(symfony_debug);
-
-PHP_FUNCTION(symfony_zval_info);
-PHP_FUNCTION(symfony_debug_backtrace);
-
-static char *_symfony_debug_memory_address_hash(void * TSRMLS_DC);
-static const char *_symfony_debug_zval_type(zval *);
-static const char* _symfony_debug_get_resource_type(long TSRMLS_DC);
-static int _symfony_debug_get_resource_refcount(long TSRMLS_DC);
-
-void symfony_debug_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
-
-#ifdef ZTS
-#define SYMFONY_DEBUG_G(v) TSRMG(symfony_debug_globals_id, zend_symfony_debug_globals *, v)
-#else
-#define SYMFONY_DEBUG_G(v) (symfony_debug_globals.v)
-#endif
-
-#endif	/* PHP_SYMFONY_DEBUG_H */
diff --git a/core/vendor/symfony/debug/Resources/ext/symfony_debug.c b/core/vendor/symfony/debug/Resources/ext/symfony_debug.c
deleted file mode 100644
index 0d7cb602320f93e440ad8f0043bd69f97b1a7863..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/symfony_debug.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_symfony_debug.h"
-#include "ext/standard/php_rand.h"
-#include "ext/standard/php_lcg.h"
-#include "ext/spl/php_spl.h"
-#include "Zend/zend_gc.h"
-#include "Zend/zend_builtin_functions.h"
-#include "Zend/zend_extensions.h" /* for ZEND_EXTENSION_API_NO */
-#include "ext/standard/php_array.h"
-#include "Zend/zend_interfaces.h"
-#include "SAPI.h"
-
-#define IS_PHP_53 ZEND_EXTENSION_API_NO == 220090626
-
-ZEND_DECLARE_MODULE_GLOBALS(symfony_debug)
-
-ZEND_BEGIN_ARG_INFO_EX(symfony_zval_arginfo, 0, 0, 2)
-	ZEND_ARG_INFO(0, key)
-	ZEND_ARG_ARRAY_INFO(0, array, 0)
-	ZEND_ARG_INFO(0, options)
-ZEND_END_ARG_INFO()
-
-const zend_function_entry symfony_debug_functions[] = {
-	PHP_FE(symfony_zval_info,	symfony_zval_arginfo)
-	PHP_FE(symfony_debug_backtrace, NULL)
-	PHP_FE_END
-};
-
-PHP_FUNCTION(symfony_debug_backtrace)
-{
-	if (zend_parse_parameters_none() == FAILURE) {
-		return;
-	}
-#if IS_PHP_53
-	zend_fetch_debug_backtrace(return_value, 1, 0 TSRMLS_CC);
-#else
-	zend_fetch_debug_backtrace(return_value, 1, 0, 0 TSRMLS_CC);
-#endif
-
-	if (!SYMFONY_DEBUG_G(debug_bt)) {
-		return;
-	}
-
-	php_array_merge(Z_ARRVAL_P(return_value), Z_ARRVAL_P(SYMFONY_DEBUG_G(debug_bt)), 0 TSRMLS_CC);
-}
-
-PHP_FUNCTION(symfony_zval_info)
-{
-	zval *key = NULL, *arg = NULL;
-	zval **data = NULL;
-	HashTable *array = NULL;
-	long options = 0;
-
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zh|l", &key, &array, &options) == FAILURE) {
-		return;
-	}
-
-	switch (Z_TYPE_P(key)) {
-		case IS_STRING:
-			if (zend_symtable_find(array, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, (void **)&data) == FAILURE) {
-				return;
-			}
-		break;
-		case IS_LONG:
-			if (zend_hash_index_find(array, Z_LVAL_P(key), (void **)&data)) {
-				return;
-			}
-		break;
-	}
-
-	arg = *data;
-
-	array_init(return_value);
-
-	add_assoc_string(return_value, "type", (char *)_symfony_debug_zval_type(arg), 1);
-	add_assoc_stringl(return_value, "zval_hash", _symfony_debug_memory_address_hash((void *)arg TSRMLS_CC), 16, 0);
-	add_assoc_long(return_value, "zval_refcount", Z_REFCOUNT_P(arg));
-	add_assoc_bool(return_value, "zval_isref", (zend_bool)Z_ISREF_P(arg));
-
-	if (Z_TYPE_P(arg) == IS_OBJECT) {
-		char hash[33] = {0};
-
-		php_spl_object_hash(arg, (char *)hash TSRMLS_CC);
-		add_assoc_stringl(return_value, "object_class", (char *)Z_OBJCE_P(arg)->name, Z_OBJCE_P(arg)->name_length, 1);
-		add_assoc_long(return_value, "object_refcount", EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(arg)].bucket.obj.refcount);
-		add_assoc_string(return_value, "object_hash", hash, 1);
-		add_assoc_long(return_value, "object_handle", Z_OBJ_HANDLE_P(arg));
-	} else if (Z_TYPE_P(arg) == IS_ARRAY) {
-		add_assoc_long(return_value, "array_count", zend_hash_num_elements(Z_ARRVAL_P(arg)));
-	} else if(Z_TYPE_P(arg) == IS_RESOURCE) {
-		add_assoc_long(return_value, "resource_handle", Z_LVAL_P(arg));
-		add_assoc_string(return_value, "resource_type", (char *)_symfony_debug_get_resource_type(Z_LVAL_P(arg) TSRMLS_CC), 1);
-		add_assoc_long(return_value, "resource_refcount", _symfony_debug_get_resource_refcount(Z_LVAL_P(arg) TSRMLS_CC));
-	} else if (Z_TYPE_P(arg) == IS_STRING) {
-		add_assoc_long(return_value, "strlen", Z_STRLEN_P(arg));
-	}
-}
-
-void symfony_debug_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args)
-{
-	TSRMLS_FETCH();
-	zval *retval;
-
-	switch (type) {
-		case E_ERROR:
-		case E_PARSE:
-		case E_CORE_ERROR:
-		case E_CORE_WARNING:
-		case E_COMPILE_ERROR:
-		case E_COMPILE_WARNING:
-			ALLOC_INIT_ZVAL(retval);
-#if IS_PHP_53
-			zend_fetch_debug_backtrace(retval, 1, 0 TSRMLS_CC);
-#else
-			zend_fetch_debug_backtrace(retval, 1, 0, 0 TSRMLS_CC);
-#endif
-			SYMFONY_DEBUG_G(debug_bt) = retval;
-	}
-
-	SYMFONY_DEBUG_G(old_error_cb)(type, error_filename, error_lineno, format, args);
-}
-
-static const char* _symfony_debug_get_resource_type(long rsid TSRMLS_DC)
-{
-	const char *res_type;
-	res_type = zend_rsrc_list_get_rsrc_type(rsid TSRMLS_CC);
-
-	if (!res_type) {
-		return "Unknown";
-	}
-
-	return res_type;
-}
-
-static int _symfony_debug_get_resource_refcount(long rsid TSRMLS_DC)
-{
-	zend_rsrc_list_entry *le;
-
-	if (zend_hash_index_find(&EG(regular_list), rsid, (void **) &le)==SUCCESS) {
-		return le->refcount;
-	}
-
-	return 0;
-}
-
-static char *_symfony_debug_memory_address_hash(void *address TSRMLS_DC)
-{
-	char *result = NULL;
-	intptr_t address_rand;
-
-	if (!SYMFONY_DEBUG_G(req_rand_init)) {
-		if (!BG(mt_rand_is_seeded)) {
-			php_mt_srand(GENERATE_SEED() TSRMLS_CC);
-		}
-		SYMFONY_DEBUG_G(req_rand_init) = (intptr_t)php_mt_rand(TSRMLS_C);
-	}
-
-	address_rand = (intptr_t)address ^ SYMFONY_DEBUG_G(req_rand_init);
-
-	spprintf(&result, 17, "%016zx", address_rand);
-
-	return result;
-}
-
-static const char *_symfony_debug_zval_type(zval *zv)
-{
-	switch (Z_TYPE_P(zv)) {
-		case IS_NULL:
-			return "NULL";
-			break;
-
-		case IS_BOOL:
-			return "boolean";
-			break;
-
-		case IS_LONG:
-			return "integer";
-			break;
-
-		case IS_DOUBLE:
-			return "double";
-			break;
-
-		case IS_STRING:
-			return "string";
-			break;
-
-		case IS_ARRAY:
-			return "array";
-			break;
-
-		case IS_OBJECT:
-			return "object";
-
-		case IS_RESOURCE:
-			return "resource";
-
-		default:
-			return "unknown type";
-	}
-}
-
-zend_module_entry symfony_debug_module_entry = {
-	STANDARD_MODULE_HEADER,
-	"symfony_debug",
-	symfony_debug_functions,
-	PHP_MINIT(symfony_debug),
-	PHP_MSHUTDOWN(symfony_debug),
-	PHP_RINIT(symfony_debug),
-	PHP_RSHUTDOWN(symfony_debug),
-	PHP_MINFO(symfony_debug),
-	PHP_SYMFONY_DEBUG_VERSION,
-	PHP_MODULE_GLOBALS(symfony_debug),
-	PHP_GINIT(symfony_debug),
-	PHP_GSHUTDOWN(symfony_debug),
-	NULL,
-	STANDARD_MODULE_PROPERTIES_EX
-};
-
-#ifdef COMPILE_DL_SYMFONY_DEBUG
-ZEND_GET_MODULE(symfony_debug)
-#endif
-
-PHP_GINIT_FUNCTION(symfony_debug)
-{
-	memset(symfony_debug_globals, 0 , sizeof(*symfony_debug_globals));
-}
-
-PHP_GSHUTDOWN_FUNCTION(symfony_debug)
-{
-
-}
-
-PHP_MINIT_FUNCTION(symfony_debug)
-{
-	SYMFONY_DEBUG_G(old_error_cb) = zend_error_cb;
-	zend_error_cb                 = symfony_debug_error_cb;
-
-	return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(symfony_debug)
-{
-	zend_error_cb = SYMFONY_DEBUG_G(old_error_cb);
-
-	return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(symfony_debug)
-{
-	return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(symfony_debug)
-{
-	return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(symfony_debug)
-{
-	php_info_print_table_start();
-	php_info_print_table_header(2, "Symfony Debug support", "enabled");
-	php_info_print_table_header(2, "Symfony Debug version", PHP_SYMFONY_DEBUG_VERSION);
-	php_info_print_table_end();
-}
diff --git a/core/vendor/symfony/debug/Resources/ext/tests/001.phpt b/core/vendor/symfony/debug/Resources/ext/tests/001.phpt
deleted file mode 100644
index 4d41417b436e3b7e40f8cb3efd6ca5083dcff669..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/tests/001.phpt
+++ /dev/null
@@ -1,151 +0,0 @@
---TEST--
-Test symfony_zval_info API
---SKIPIF--
-<?php if (!extension_loaded("symfony_debug")) print "skip"; ?>
---FILE--
-<?php
-
-$int = 42;
-$float = 42.42;
-$str = "foobar";
-$object = new StdClass;
-$array = array('foo', 'bar');
-$resource = tmpfile();
-$null = null;
-$bool = true;
-
-$anotherint = 42;
-$refcount2 = &$anotherint;
-
-$var = array('int' => $int,
-			 'float' => $float,
-			 'str' => $str,
-			 'object' => $object,
-			 'array' => $array,
-			 'resource' => $resource,
-			 'null' => $null,
-			 'bool' => $bool,
-			 'refcount' => &$refcount2);
-
-var_dump(symfony_zval_info('int', $var));
-var_dump(symfony_zval_info('float', $var));
-var_dump(symfony_zval_info('str', $var));
-var_dump(symfony_zval_info('object', $var));
-var_dump(symfony_zval_info('array', $var));
-var_dump(symfony_zval_info('resource', $var));
-var_dump(symfony_zval_info('null', $var));
-var_dump(symfony_zval_info('bool', $var));
-
-var_dump(symfony_zval_info('refcount', $var));
-var_dump(symfony_zval_info('not-exist', $var));
-?>
---EXPECTF--
-array(4) {
-  ["type"]=>
-  string(7) "integer"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-}
-array(4) {
-  ["type"]=>
-  string(6) "double"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-}
-array(5) {
-  ["type"]=>
-  string(6) "string"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-  ["strlen"]=>
-  int(6)
-}
-array(8) {
-  ["type"]=>
-  string(6) "object"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-  ["object_class"]=>
-  string(8) "stdClass"
-  ["object_refcount"]=>
-  int(1)
-  ["object_hash"]=>
-  string(32) "%s"
-  ["object_handle"]=>
-  int(%d)
-}
-array(5) {
-  ["type"]=>
-  string(5) "array"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-  ["array_count"]=>
-  int(2)
-}
-array(7) {
-  ["type"]=>
-  string(8) "resource"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-  ["resource_handle"]=>
-  int(%d)
-  ["resource_type"]=>
-  string(6) "stream"
-  ["resource_refcount"]=>
-  int(1)
-}
-array(4) {
-  ["type"]=>
-  string(4) "NULL"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-}
-array(4) {
-  ["type"]=>
-  string(7) "boolean"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(2)
-  ["zval_isref"]=>
-  bool(false)
-}
-array(4) {
-  ["type"]=>
-  string(7) "integer"
-  ["zval_hash"]=>
-  string(16) "%s"
-  ["zval_refcount"]=>
-  int(3)
-  ["zval_isref"]=>
-  bool(true)
-}
-NULL
diff --git a/core/vendor/symfony/debug/Resources/ext/tests/002.phpt b/core/vendor/symfony/debug/Resources/ext/tests/002.phpt
deleted file mode 100644
index ebe2f32d8f30322aa7e163b70201d9bd99e2f02f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/tests/002.phpt
+++ /dev/null
@@ -1,64 +0,0 @@
---TEST--
-Test symfony_debug_backtrace in case of fatal error
---SKIPIF--
-<?php if (!extension_loaded("symfony_debug")) print "skip"; ?>
---FILE--
-<?php
-
-function bar()
-{
-    foo();
-}
-
-function foo()
-{
-    notexist();
-}
-
-function bt()
-{
-    print_r(symfony_debug_backtrace());
-
-}
-
-register_shutdown_function('bt');
-
-bar();
-
-?>
---EXPECTF--
-Fatal error: Call to undefined function notexist() in %s on line %d
-Array
-(
-    [0] => Array
-        (
-            [function] => bt
-            [args] => Array
-                (
-                )
-
-        )
-
-    [1] => Array
-        (
-            [file] => %s
-            [line] => %d
-            [function] => foo
-            [args] => Array
-                (
-                )
-
-        )
-
-    [2] => Array
-        (
-            [file] => %s
-            [line] => %d
-            [function] => bar
-            [args] => Array
-                (
-                )
-
-        )
-
-)
diff --git a/core/vendor/symfony/debug/Resources/ext/tests/002_1.phpt b/core/vendor/symfony/debug/Resources/ext/tests/002_1.phpt
deleted file mode 100644
index 4d52dbf45702a5d72ed3dcadd8de4b947bc25c54..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/tests/002_1.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-Test symfony_debug_backtrace in case of non fatal error
---SKIPIF--
-<?php if (!extension_loaded("symfony_debug")) print "skip"; ?>
---FILE--
-<?php
-
-function bar()
-{
-    bt();
-}
-
-function bt()
-{
-    print_r(symfony_debug_backtrace());
-
-}
-
-bar();
-
-?>
---EXPECTF--
-Array
-(
-    [0] => Array
-        (
-            [file] => %s
-            [line] => %d
-            [function] => bt
-            [args] => Array
-                (
-                )
-
-        )
-
-    [1] => Array
-        (
-            [file] => %s
-            [line] => %d
-            [function] => bar
-            [args] => Array
-                (
-                )
-
-        )
-
-)
diff --git a/core/vendor/symfony/debug/Resources/ext/tests/003.phpt b/core/vendor/symfony/debug/Resources/ext/tests/003.phpt
deleted file mode 100644
index 1d464720b7e3120429a545fba8cb0af54dc4bd46..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Resources/ext/tests/003.phpt
+++ /dev/null
@@ -1,85 +0,0 @@
---TEST--
-Test ErrorHandler in case of fatal error
---SKIPIF--
-<?php if (!extension_loaded("symfony_debug")) print "skip"; ?>
---FILE--
-<?php
-
-namespace Psr\Log;
-
-class LogLevel
-{
-    const EMERGENCY = 'emergency';
-    const ALERT = 'alert';
-    const CRITICAL = 'critical';
-    const ERROR = 'error';
-    const WARNING = 'warning';
-    const NOTICE = 'notice';
-    const INFO = 'info';
-    const DEBUG = 'debug';
-}
-
-namespace Symfony\Component\Debug;
-
-$dir = __DIR__.'/../../../';
-require $dir.'ErrorHandler.php';
-require $dir.'Exception/FatalErrorException.php';
-require $dir.'Exception/UndefinedFunctionException.php';
-require $dir.'FatalErrorHandler/FatalErrorHandlerInterface.php';
-require $dir.'FatalErrorHandler/ClassNotFoundFatalErrorHandler.php';
-require $dir.'FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php';
-require $dir.'FatalErrorHandler/UndefinedMethodFatalErrorHandler.php';
-
-function bar()
-{
-    foo();
-}
-
-function foo()
-{
-    notexist();
-}
-
-$handler = ErrorHandler::register();
-$handler->setExceptionHandler('print_r');
-
-if (function_exists('xdebug_disable')) {
-    xdebug_disable();
-}
-
-bar();
-?>
---EXPECTF--
-Fatal error: Call to undefined function Symfony\Component\Debug\notexist() in %s on line %d
-Symfony\Component\Debug\Exception\UndefinedFunctionException Object
-(
-    [message:protected] => Attempted to call function "notexist" from namespace "Symfony\Component\Debug".
-    [string:Exception:private] => 
-    [code:protected] => 0
-    [file:protected] => -
-    [line:protected] => %d
-    [trace:Exception:private] => Array
-        (
-            [0] => Array
-                (
-%A                    [function] => Symfony\Component\Debug\foo
-%A                    [args] => Array
-                        (
-                        )
-
-                )
-
-            [1] => Array
-                (
-%A                    [function] => Symfony\Component\Debug\bar
-%A                    [args] => Array
-                        (
-                        )
-
-                )
-%A
-        )
-
-    [previous:Exception:private] => 
-    [severity:protected] => 1
-)
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/.gitignore b/core/vendor/symfony/debug/Symfony/Component/Debug/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..c49a5d8df5c6548379f00c77fe572a7217bce218
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/.gitignore
@@ -0,0 +1,3 @@
+vendor/
+composer.lock
+phpunit.xml
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/CHANGELOG.md b/core/vendor/symfony/debug/Symfony/Component/Debug/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..ff7c6af2b7d079f4ad72cf239fd014dfc8d16f1e
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/CHANGELOG.md
@@ -0,0 +1,27 @@
+CHANGELOG
+=========
+
+2.6.0
+-----
+
+* generalized ErrorHandler and ExceptionHandler,
+  with some new methods and others deprecated
+* enhanced error messages for uncaught exceptions
+
+2.5.0
+-----
+
+* added ExceptionHandler::setHandler()
+* added UndefinedMethodFatalErrorHandler
+* deprecated DummyException
+
+2.4.0
+-----
+
+ * added a DebugClassLoader able to wrap any autoloader providing a findFile method
+ * improved error messages for not found classes and functions
+
+2.3.0
+-----
+
+ * added the component
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Debug.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Debug.php
new file mode 100644
index 0000000000000000000000000000000000000000..08b35f48bd2bf57c7f01df172689213a5a4c32a0
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Debug.php
@@ -0,0 +1,62 @@
+<?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\Debug;
+
+/**
+ * Registers all the debug tools.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Debug
+{
+    private static $enabled = false;
+
+    /**
+     * Enables the debug tools.
+     *
+     * This method registers an error handler and an exception handler.
+     *
+     * If the Symfony ClassLoader component is available, a special
+     * class loader is also registered.
+     *
+     * @param int  $errorReportingLevel The level of error reporting you want
+     * @param bool $displayErrors       Whether to display errors (for development) or just log them (for production)
+     */
+    public static function enable($errorReportingLevel = null, $displayErrors = true)
+    {
+        if (static::$enabled) {
+            return;
+        }
+
+        static::$enabled = true;
+
+        if (null !== $errorReportingLevel) {
+            error_reporting($errorReportingLevel);
+        } else {
+            error_reporting(-1);
+        }
+
+        if ('cli' !== php_sapi_name()) {
+            ini_set('display_errors', 0);
+            ExceptionHandler::register();
+        } elseif ($displayErrors && (!ini_get('log_errors') || ini_get('error_log'))) {
+            // CLI - display errors only if they're not already logged to STDERR
+            ini_set('display_errors', 1);
+        }
+        $handler = ErrorHandler::register();
+        if (!$displayErrors) {
+            $handler->throwAt(0, true);
+        }
+
+        DebugClassLoader::enable();
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/DebugClassLoader.php b/core/vendor/symfony/debug/Symfony/Component/Debug/DebugClassLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..b70a4c4ac3d2471c541b8cd0a9b9574b8d1b6ecf
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/DebugClassLoader.php
@@ -0,0 +1,223 @@
+<?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\Debug;
+
+/**
+ * Autoloader checking if the class is really defined in the file found.
+ *
+ * The ClassLoader will wrap all registered autoloaders
+ * and will throw an exception if a file is found but does
+ * not declare the class.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Christophe Coevoet <stof@notk.org>
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @api
+ */
+class DebugClassLoader
+{
+    private $classLoader;
+    private $isFinder;
+    private $wasFinder;
+    private static $caseCheck;
+
+    /**
+     * Constructor.
+     *
+     * @param callable|object $classLoader
+     *
+     * @api
+     * @deprecated since 2.5, passing an object is deprecated and support for it will be removed in 3.0
+     */
+    public function __construct($classLoader)
+    {
+        $this->wasFinder = is_object($classLoader) && method_exists($classLoader, 'findFile');
+
+        if ($this->wasFinder) {
+            $this->classLoader = array($classLoader, 'loadClass');
+            $this->isFinder = true;
+        } else {
+            $this->classLoader = $classLoader;
+            $this->isFinder = is_array($classLoader) && method_exists($classLoader[0], 'findFile');
+        }
+
+        if (!isset(self::$caseCheck)) {
+            self::$caseCheck = false !== stripos(PHP_OS, 'win') ? (false !== stripos(PHP_OS, 'darwin') ? 2 : 1) : 0;
+        }
+    }
+
+    /**
+     * Gets the wrapped class loader.
+     *
+     * @return callable|object a class loader
+     *
+     * @deprecated since 2.5, returning an object is deprecated and support for it will be removed in 3.0
+     */
+    public function getClassLoader()
+    {
+        return $this->wasFinder ? $this->classLoader[0] : $this->classLoader;
+    }
+
+    /**
+     * Wraps all autoloaders
+     */
+    public static function enable()
+    {
+        // Ensures we don't hit https://bugs.php.net/42098
+        class_exists('Symfony\Component\Debug\ErrorHandler');
+        class_exists('Psr\Log\LogLevel');
+
+        if (!is_array($functions = spl_autoload_functions())) {
+            return;
+        }
+
+        foreach ($functions as $function) {
+            spl_autoload_unregister($function);
+        }
+
+        foreach ($functions as $function) {
+            if (!is_array($function) || !$function[0] instanceof self) {
+                $function = array(new static($function), 'loadClass');
+            }
+
+            spl_autoload_register($function);
+        }
+    }
+
+    /**
+     * Disables the wrapping.
+     */
+    public static function disable()
+    {
+        if (!is_array($functions = spl_autoload_functions())) {
+            return;
+        }
+
+        foreach ($functions as $function) {
+            spl_autoload_unregister($function);
+        }
+
+        foreach ($functions as $function) {
+            if (is_array($function) && $function[0] instanceof self) {
+                $function = $function[0]->getClassLoader();
+            }
+
+            spl_autoload_register($function);
+        }
+    }
+
+    /**
+     * Finds a file by class name
+     *
+     * @param string $class A class name to resolve to file
+     *
+     * @return string|null
+     *
+     * @deprecated Deprecated since 2.5, to be removed in 3.0.
+     */
+    public function findFile($class)
+    {
+        if ($this->wasFinder) {
+            return $this->classLoader[0]->findFile($class);
+        }
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param string $class The name of the class
+     *
+     * @return bool|null True, if loaded
+     *
+     * @throws \RuntimeException
+     */
+    public function loadClass($class)
+    {
+        ErrorHandler::stackErrors();
+
+        try {
+            if ($this->isFinder) {
+                if ($file = $this->classLoader[0]->findFile($class)) {
+                    require $file;
+                }
+            } else {
+                call_user_func($this->classLoader, $class);
+                $file = false;
+            }
+        } catch (\Exception $e) {
+            ErrorHandler::unstackErrors();
+
+            throw $e;
+        }
+
+        ErrorHandler::unstackErrors();
+
+        $exists = class_exists($class, false) || interface_exists($class, false) || (function_exists('trait_exists') && trait_exists($class, false));
+
+        if ('\\' === $class[0]) {
+            $class = substr($class, 1);
+        }
+
+        if ($exists) {
+            $refl = new \ReflectionClass($class);
+            $name = $refl->getName();
+
+            if ($name !== $class && 0 === strcasecmp($name, $class)) {
+                throw new \RuntimeException(sprintf('Case mismatch between loaded and declared class names: %s vs %s', $class, $name));
+            }
+        }
+
+        if ($file) {
+            if (!$exists) {
+                if (false !== strpos($class, '/')) {
+                    throw new \RuntimeException(sprintf('Trying to autoload a class with an invalid name "%s". Be careful that the namespace separator is "\" in PHP, not "/".', $class));
+                }
+
+                throw new \RuntimeException(sprintf('The autoloader expected class "%s" to be defined in file "%s". The file was found but the class was not in it, the class name or namespace probably has a typo.', $class, $file));
+            }
+            if (self::$caseCheck && preg_match('#([/\\\\][a-zA-Z_\x7F-\xFF][a-zA-Z0-9_\x7F-\xFF]*)+\.(php|hh)$#D', $file, $tail)) {
+                $tail = $tail[0];
+                $real = $refl->getFilename();
+
+                if (2 === self::$caseCheck) {
+                    // realpath() on MacOSX doesn't normalize the case of characters
+                    $cwd = getcwd();
+                    $basename = strrpos($real, '/');
+                    chdir(substr($real, 0, $basename));
+                    $basename = substr($real, $basename + 1);
+                    // glob() patterns are case-sensitive even if the underlying fs is not
+                    if (!in_array($basename, glob($basename.'*', GLOB_NOSORT), true)) {
+                        $real = getcwd().'/';
+                        $h = opendir('.');
+                        while (false !== $f = readdir($h)) {
+                            if (0 === strcasecmp($f, $basename)) {
+                                $real .= $f;
+                                break;
+                            }
+                        }
+                        closedir($h);
+                    }
+                    chdir($cwd);
+                }
+
+                if (0 === substr_compare($real, $tail, -strlen($tail), strlen($tail), true)
+                  && 0 !== substr_compare($real, $tail, -strlen($tail), strlen($tail), false)
+                ) {
+                    throw new \RuntimeException(sprintf('Case mismatch between class and source file names: %s vs %s', $class, $real));
+                }
+            }
+
+            return true;
+        }
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..48e4a2d69e73723e02f276d300bb01af05e8e114
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php
@@ -0,0 +1,687 @@
+<?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\Debug;
+
+use Psr\Log\LogLevel;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\Debug\Exception\ContextErrorException;
+use Symfony\Component\Debug\Exception\FatalErrorException;
+use Symfony\Component\Debug\Exception\OutOfMemoryException;
+use Symfony\Component\Debug\FatalErrorHandler\UndefinedFunctionFatalErrorHandler;
+use Symfony\Component\Debug\FatalErrorHandler\UndefinedMethodFatalErrorHandler;
+use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler;
+use Symfony\Component\Debug\FatalErrorHandler\FatalErrorHandlerInterface;
+
+/**
+ * A generic ErrorHandler for the PHP engine.
+ *
+ * Provides five bit fields that control how errors are handled:
+ * - thrownErrors: errors thrown as \ErrorException
+ * - loggedErrors: logged errors, when not @-silenced
+ * - scopedErrors: errors thrown or logged with their local context
+ * - tracedErrors: errors logged with their stack trace, only once for repeated errors
+ * - screamedErrors: never @-silenced errors
+ *
+ * Each error level can be logged by a dedicated PSR-3 logger object.
+ * Screaming only applies to logging.
+ * Throwing takes precedence over logging.
+ * Uncaught exceptions are logged as E_ERROR.
+ * E_DEPRECATED and E_USER_DEPRECATED levels never throw.
+ * E_RECOVERABLE_ERROR and E_USER_ERROR levels always throw.
+ * Non catchable errors that can be detected at shutdown time are logged when the scream bit field allows so.
+ * As errors have a performance cost, repeated errors are all logged, so that the developer
+ * can see them and weight them as more important to fix than others of the same level.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class ErrorHandler
+{
+    /**
+     * @deprecated since 2.6, to be removed in 3.0.
+     */
+    const TYPE_DEPRECATION = -100;
+
+    private $levels = array(
+        E_DEPRECATED => 'Deprecated',
+        E_USER_DEPRECATED => 'User Deprecated',
+        E_NOTICE => 'Notice',
+        E_USER_NOTICE => 'User Notice',
+        E_STRICT => 'Runtime Notice',
+        E_WARNING => 'Warning',
+        E_USER_WARNING => 'User Warning',
+        E_COMPILE_WARNING => 'Compile Warning',
+        E_CORE_WARNING => 'Core Warning',
+        E_USER_ERROR => 'User Error',
+        E_RECOVERABLE_ERROR => 'Catchable Fatal Error',
+        E_COMPILE_ERROR => 'Compile Error',
+        E_PARSE => 'Parse Error',
+        E_ERROR => 'Error',
+        E_CORE_ERROR => 'Core Error',
+    );
+
+    private $loggers = array(
+        E_DEPRECATED => array(null, LogLevel::INFO),
+        E_USER_DEPRECATED => array(null, LogLevel::INFO),
+        E_NOTICE => array(null, LogLevel::NOTICE),
+        E_USER_NOTICE => array(null, LogLevel::NOTICE),
+        E_STRICT => array(null, LogLevel::NOTICE),
+        E_WARNING => array(null, LogLevel::WARNING),
+        E_USER_WARNING => array(null, LogLevel::WARNING),
+        E_COMPILE_WARNING => array(null, LogLevel::WARNING),
+        E_CORE_WARNING => array(null, LogLevel::WARNING),
+        E_USER_ERROR => array(null, LogLevel::ERROR),
+        E_RECOVERABLE_ERROR => array(null, LogLevel::ERROR),
+        E_COMPILE_ERROR => array(null, LogLevel::EMERGENCY),
+        E_PARSE => array(null, LogLevel::EMERGENCY),
+        E_ERROR => array(null, LogLevel::EMERGENCY),
+        E_CORE_ERROR => array(null, LogLevel::EMERGENCY),
+    );
+
+    private $thrownErrors = 0x1FFF; // E_ALL - E_DEPRECATED - E_USER_DEPRECATED
+    private $scopedErrors = 0x1FFF; // E_ALL - E_DEPRECATED - E_USER_DEPRECATED
+    private $tracedErrors = 0x77FB; // E_ALL - E_STRICT - E_PARSE
+    private $screamedErrors = 0x55; // E_ERROR + E_CORE_ERROR + E_COMPILE_ERROR + E_PARSE
+    private $loggedErrors = 0;
+
+    private $loggedTraces = array();
+    private $isRecursive = 0;
+    private $exceptionHandler;
+
+    private static $reservedMemory;
+    private static $stackedErrors = array();
+    private static $stackedErrorLevels = array();
+
+    /**
+     * Same init value as thrownErrors
+     *
+     * @deprecated since 2.6, to be removed in 3.0.
+     */
+    private $displayErrors = 0x1FFF;
+
+    /**
+     * Registers the error handler.
+     *
+     * @param self|null|int $handler The handler to register, or @deprecated (since 2.6, to be removed in 3.0) bit field of thrown levels
+     * @param bool          $replace Whether to replace or not any existing handler
+     *
+     * @return self The registered error handler
+     */
+    public static function register($handler = null, $replace = true)
+    {
+        if (null === self::$reservedMemory) {
+            self::$reservedMemory = str_repeat('x', 10240);
+            register_shutdown_function(__CLASS__.'::handleFatalError');
+        }
+
+        $levels = -1;
+
+        if ($handlerIsNew = !$handler instanceof self) {
+            // @deprecated polymorphism, to be removed in 3.0
+            if (null !== $handler) {
+                $levels = $replace ? $handler : 0;
+                $replace = true;
+            }
+            $handler = new static();
+        }
+
+        $prev = set_error_handler(array($handler, 'handleError'), $handler->thrownErrors | $handler->loggedErrors);
+
+        if ($handlerIsNew && is_array($prev) && $prev[0] instanceof self) {
+            $handler = $prev[0];
+            $replace = false;
+        }
+        if ($replace || !$prev) {
+            $handler->setExceptionHandler(set_exception_handler(array($handler, 'handleException')));
+        } else {
+            restore_error_handler();
+        }
+
+        $handler->throwAt($levels & $handler->thrownErrors, true);
+
+        return $handler;
+    }
+
+    /**
+     * Sets a logger to non assigned errors levels.
+     *
+     * @param LoggerInterface $logger  A PSR-3 logger to put as default for the given levels
+     * @param array|int       $levels  An array map of E_* to LogLevel::* or an integer bit field of E_* constants
+     * @param bool            $replace Whether to replace or not any existing logger
+     */
+    public function setDefaultLogger(LoggerInterface $logger, $levels = null, $replace = false)
+    {
+        $loggers = array();
+
+        if (is_array($levels)) {
+            foreach ($levels as $type => $logLevel) {
+                if (empty($this->loggers[$type][0]) || $replace) {
+                    $loggers[$type] = array($logger, $logLevel);
+                }
+            }
+        } else {
+            if (null === $levels) {
+                $levels = E_ALL | E_STRICT;
+            }
+            foreach ($this->loggers as $type => $log) {
+                if (($type & $levels) && (empty($log[0]) || $replace)) {
+                    $log[0] = $logger;
+                    $loggers[$type] = $log;
+                }
+            }
+        }
+
+        $this->setLoggers($loggers);
+    }
+
+    /**
+     * Sets a logger for each error level.
+     *
+     * @param array $loggers Error levels to [LoggerInterface|null, LogLevel::*] map
+     *
+     * @return array The previous map
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setLoggers(array $loggers)
+    {
+        $prevLogged = $this->loggedErrors;
+        $prev = $this->loggers;
+
+        foreach ($loggers as $type => $log) {
+            if (!isset($prev[$type])) {
+                throw new \InvalidArgumentException('Unknown error type: '.$type);
+            }
+            if (!is_array($log)) {
+                $log = array($log);
+            } elseif (!array_key_exists(0, $log)) {
+                throw new \InvalidArgumentException('No logger provided');
+            }
+            if (null === $log[0]) {
+                $this->loggedErrors &= ~$type;
+            } elseif ($log[0] instanceof LoggerInterface) {
+                $this->loggedErrors |= $type;
+            } else {
+                throw new \InvalidArgumentException('Invalid logger provided');
+            }
+            $this->loggers[$type] = $log + $prev[$type];
+        }
+        $this->reRegister($prevLogged | $this->thrownErrors);
+
+        return $prev;
+    }
+
+    /**
+     * Sets a user exception handler.
+     *
+     * @param callable $handler A handler that will be called on Exception
+     *
+     * @return callable|null The previous exception handler
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setExceptionHandler($handler)
+    {
+        if (null !== $handler && !is_callable($handler)) {
+            throw new \LogicException('The exception handler must be a valid PHP callable.');
+        }
+        $prev = $this->exceptionHandler;
+        $this->exceptionHandler = $handler;
+
+        return $prev;
+    }
+
+    /**
+     * Sets the error levels that are to be thrown.
+     *
+     * @param int  $levels  A bit field of E_* constants for thrown errors
+     * @param bool $replace Replace or amend the previous value
+     *
+     * @return int The previous value
+     */
+    public function throwAt($levels, $replace = false)
+    {
+        $prev = $this->thrownErrors;
+        $this->thrownErrors = ($levels | E_RECOVERABLE_ERROR | E_USER_ERROR) & ~E_USER_DEPRECATED & ~E_DEPRECATED;
+        if (!$replace) {
+            $this->thrownErrors |= $prev;
+        }
+        $this->reRegister($prev | $this->loggedErrors);
+
+        // $this->displayErrors is @deprecated since 2.6
+        $this->displayErrors = $this->thrownErrors;
+
+        return $prev;
+    }
+
+    /**
+     * Sets the error levels that are logged or thrown with their local scope.
+     *
+     * @param int  $levels  A bit field of E_* constants for scoped errors
+     * @param bool $replace Replace or amend the previous value
+     *
+     * @return int The previous value
+     */
+    public function scopeAt($levels, $replace = false)
+    {
+        $prev = $this->scopedErrors;
+        $this->scopedErrors = (int) $levels;
+        if (!$replace) {
+            $this->scopedErrors |= $prev;
+        }
+
+        return $prev;
+    }
+
+    /**
+     * Sets the error levels that are logged with their stack trace.
+     *
+     * @param int  $levels  A bit field of E_* constants for traced errors
+     * @param bool $replace Replace or amend the previous value
+     *
+     * @return int The previous value
+     */
+    public function traceAt($levels, $replace = false)
+    {
+        $prev = $this->tracedErrors;
+        $this->tracedErrors = (int) $levels;
+        if (!$replace) {
+            $this->tracedErrors |= $prev;
+        }
+
+        return $prev;
+    }
+
+    /**
+     * Sets the error levels where the @-operator is ignored.
+     *
+     * @param int  $levels  A bit field of E_* constants for screamed errors
+     * @param bool $replace Replace or amend the previous value
+     *
+     * @return int The previous value
+     */
+    public function screamAt($levels, $replace = false)
+    {
+        $prev = $this->screamedErrors;
+        $this->screamedErrors = (int) $levels;
+        if (!$replace) {
+            $this->screamedErrors |= $prev;
+        }
+
+        return $prev;
+    }
+
+    /**
+     * Re-registers as a PHP error handler if levels changed.
+     */
+    private function reRegister($prev)
+    {
+        if ($prev !== $this->thrownErrors | $this->loggedErrors) {
+            $handler = set_error_handler('var_dump', 0);
+            $handler = is_array($handler) ? $handler[0] : null;
+            restore_error_handler();
+            if ($handler === $this) {
+                restore_error_handler();
+                set_error_handler(array($this, 'handleError'), $this->thrownErrors | $this->loggedErrors);
+            }
+        }
+    }
+
+    /**
+     * Handles errors by filtering then logging them according to the configured bit fields.
+     *
+     * @param int    $type    One of the E_* constants
+     * @param string $file
+     * @param int    $line
+     * @param array  $context
+     *
+     * @return bool Returns false when no handling happens so that the PHP engine can handle the error itself.
+     *
+     * @throws \ErrorException When $this->thrownErrors requests so
+     *
+     * @internal
+     */
+    public function handleError($type, $message, $file, $line, array $context)
+    {
+        $level = error_reporting() | E_RECOVERABLE_ERROR | E_USER_ERROR;
+        $log = $this->loggedErrors & $type;
+        $throw = $this->thrownErrors & $type & $level;
+        $type &= $level | $this->screamedErrors;
+
+        if ($type && ($log || $throw)) {
+            if (PHP_VERSION_ID < 50400 && isset($context['GLOBALS']) && ($this->scopedErrors & $type)) {
+                $e = $context;                  // Whatever the signature of the method,
+                unset($e['GLOBALS'], $context); // $context is always a reference in 5.3
+                $context = $e;
+            }
+
+            if ($throw) {
+                if (($this->scopedErrors & $type) && class_exists('Symfony\Component\Debug\Exception\ContextErrorException')) {
+                    // Checking for class existence is a work around for https://bugs.php.net/42098
+                    $throw = new ContextErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line, $context);
+                } else {
+                    $throw = new \ErrorException($this->levels[$type].': '.$message, 0, $type, $file, $line);
+                }
+
+                if (PHP_VERSION_ID <= 50407 && (PHP_VERSION_ID >= 50400 || PHP_VERSION_ID <= 50317)) {
+                    // Exceptions thrown from error handlers are sometimes not caught by the exception
+                    // handler and shutdown handlers are bypassed before 5.4.8/5.3.18.
+                    // We temporarily re-enable display_errors to prevent any blank page related to this bug.
+
+                    $throw->errorHandlerCanary = new ErrorHandlerCanary();
+                }
+
+                throw $throw;
+            }
+
+            // For duplicated errors, log the trace only once
+            $e = md5("{$type}/{$line}/{$file}\x00{$message}", true);
+            $trace = true;
+
+            if (!($this->tracedErrors & $type) || isset($this->loggedTraces[$e])) {
+                $trace = false;
+            } else {
+                $this->loggedTraces[$e] = 1;
+            }
+
+            $e = compact('type', 'file', 'line', 'level');
+
+            if ($type & $level) {
+                if ($this->scopedErrors & $type) {
+                    $e['context'] = $context;
+                    if ($trace) {
+                        $e['stack'] = debug_backtrace(true); // Provide object
+                    }
+                } elseif ($trace) {
+                    $e['stack'] = debug_backtrace(PHP_VERSION_ID >= 50306 ? DEBUG_BACKTRACE_IGNORE_ARGS : false);
+                }
+            }
+
+            if ($this->isRecursive) {
+                $log = 0;
+            } elseif (self::$stackedErrorLevels) {
+                self::$stackedErrors[] = array($this->loggers[$type], $message, $e);
+            } else {
+                try {
+                    $this->isRecursive = true;
+                    $this->loggers[$type][0]->log($this->loggers[$type][1], $message, $e);
+                    $this->isRecursive = false;
+                } catch (\Exception $e) {
+                    $this->isRecursive = false;
+
+                    throw $e;
+                }
+            }
+        }
+
+        return $type && $log;
+    }
+
+    /**
+     * Handles an exception by logging then forwarding it to an other handler.
+     *
+     * @param \Exception $exception An exception to handle
+     * @param array      $error     An array as returned by error_get_last()
+     *
+     * @internal
+     */
+    public function handleException(\Exception $exception, array $error = null)
+    {
+        $level = error_reporting();
+        if ($this->loggedErrors & E_ERROR & ($level | $this->screamedErrors)) {
+            $e = array(
+                'type' => E_ERROR,
+                'file' => $exception->getFile(),
+                'line' => $exception->getLine(),
+                'level' => $level,
+                'stack' => $exception->getTrace(),
+            );
+            if ($exception instanceof FatalErrorException) {
+                $message = 'Fatal '.$exception->getMessage();
+            } elseif ($exception instanceof \ErrorException) {
+                $message = 'Uncaught '.$exception->getMessage();
+                if ($exception instanceof ContextErrorException) {
+                    $e['context'] = $exception->getContext();
+                }
+            } else {
+                $message = 'Uncaught Exception: '.$exception->getMessage();
+            }
+            if ($this->loggedErrors & $e['type']) {
+                $this->loggers[$e['type']][0]->log($this->loggers[$e['type']][1], $message, $e);
+            }
+        }
+        if ($exception instanceof FatalErrorException && !$exception instanceof OutOfMemoryException && $error) {
+            foreach ($this->getFatalErrorHandlers() as $handler) {
+                if ($e = $handler->handleError($error, $exception)) {
+                    $exception = $e;
+                    break;
+                }
+            }
+        }
+        if (empty($this->exceptionHandler)) {
+            throw $exception; // Give back $exception to the native handler
+        }
+        try {
+            call_user_func($this->exceptionHandler, $exception);
+        } catch (\Exception $handlerException) {
+            $this->exceptionHandler = null;
+            $this->handleException($handlerException);
+        }
+    }
+
+    /**
+     * Shutdown registered function for handling PHP fatal errors.
+     *
+     * @param array $error An array as returned by error_get_last()
+     *
+     * @internal
+     */
+    public static function handleFatalError(array $error = null)
+    {
+        self::$reservedMemory = '';
+        $handler = set_error_handler('var_dump', 0);
+        $handler = is_array($handler) ? $handler[0] : null;
+        restore_error_handler();
+        if ($handler instanceof self) {
+            if (null === $error) {
+                $error = error_get_last();
+            }
+
+            try {
+                while (self::$stackedErrorLevels) {
+                    static::unstackErrors();
+                }
+            } catch (\Exception $exception) {
+                // Handled below
+            }
+
+            if ($error && ($error['type'] & (E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR))) {
+                // Let's not throw anymore but keep logging
+                $handler->throwAt(0, true);
+
+                if (0 === strpos($error['message'], 'Allowed memory') || 0 === strpos($error['message'], 'Out of memory')) {
+                    $exception = new OutOfMemoryException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, false);
+                } else {
+                    $exception = new FatalErrorException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, true);
+                }
+            } elseif (!isset($exception)) {
+                return;
+            }
+
+            try {
+                $handler->handleException($exception, $error);
+            } catch (FatalErrorException $e) {
+                // Ignore this re-throw
+            }
+        }
+    }
+
+    /**
+     * Configures the error handler for delayed handling.
+     * Ensures also that non-catchable fatal errors are never silenced.
+     *
+     * As shown by http://bugs.php.net/42098 and http://bugs.php.net/60724
+     * PHP has a compile stage where it behaves unusually. To workaround it,
+     * we plug an error handler that only stacks errors for later.
+     *
+     * The most important feature of this is to prevent
+     * autoloading until unstackErrors() is called.
+     */
+    public static function stackErrors()
+    {
+        self::$stackedErrorLevels[] = error_reporting(error_reporting() | E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR);
+    }
+
+    /**
+     * Unstacks stacked errors and forwards to the logger
+     */
+    public static function unstackErrors()
+    {
+        $level = array_pop(self::$stackedErrorLevels);
+
+        if (null !== $level) {
+            $e = error_reporting($level);
+            if ($e !== ($level | E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR)) {
+                // If the user changed the error level, do not overwrite it
+                error_reporting($e);
+            }
+        }
+
+        if (empty(self::$stackedErrorLevels)) {
+            $errors = self::$stackedErrors;
+            self::$stackedErrors = array();
+
+            foreach ($errors as $e) {
+                $e[0][0]->log($e[0][1], $e[1], $e[2]);
+            }
+        }
+    }
+
+    /**
+     * Gets the fatal error handlers.
+     *
+     * Override this method if you want to define more fatal error handlers.
+     *
+     * @return FatalErrorHandlerInterface[] An array of FatalErrorHandlerInterface
+     */
+    protected function getFatalErrorHandlers()
+    {
+        return array(
+            new UndefinedFunctionFatalErrorHandler(),
+            new UndefinedMethodFatalErrorHandler(),
+            new ClassNotFoundFatalErrorHandler(),
+        );
+    }
+
+    /**
+     * Sets the level at which the conversion to Exception is done.
+     *
+     * @param int|null $level The level (null to use the error_reporting() value and 0 to disable)
+     *
+     * @deprecated since 2.6, to be removed in 3.0. Use throwAt() instead.
+     */
+    public function setLevel($level)
+    {
+        $level = null === $level ? error_reporting() : $level;
+        $this->throwAt($level, true);
+    }
+
+    /**
+     * Sets the display_errors flag value.
+     *
+     * @param int $displayErrors The display_errors flag value
+     *
+     * @deprecated since 2.6, to be removed in 3.0. Use throwAt() instead.
+     */
+    public function setDisplayErrors($displayErrors)
+    {
+        if ($displayErrors) {
+            $this->throwAt($this->displayErrors, true);
+        } else {
+            $displayErrors = $this->displayErrors;
+            $this->throwAt(0, true);
+            $this->displayErrors = $displayErrors;
+        }
+    }
+
+    /**
+     * Sets a logger for the given channel.
+     *
+     * @param LoggerInterface $logger  A logger interface
+     * @param string          $channel The channel associated with the logger (deprecation, emergency or scream)
+     *
+     * @deprecated since 2.6, to be removed in 3.0. Use setLoggers() or setDefaultLogger() instead.
+     */
+    public static function setLogger(LoggerInterface $logger, $channel = 'deprecation')
+    {
+        $handler = set_error_handler('var_dump', 0);
+        $handler = is_array($handler) ? $handler[0] : null;
+        restore_error_handler();
+        if (!$handler instanceof self) {
+            return;
+        }
+        if ('deprecation' === $channel) {
+            $handler->setDefaultLogger($logger, E_DEPRECATED | E_USER_DEPRECATED, true);
+            $handler->screamAt(E_DEPRECATED | E_USER_DEPRECATED);
+        } elseif ('scream' === $channel) {
+            $handler->setDefaultLogger($logger, E_ALL | E_STRICT, false);
+            $handler->screamAt(E_ALL | E_STRICT);
+        } elseif ('emergency' === $channel) {
+            $handler->setDefaultLogger($logger, E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR, true);
+            $handler->screamAt(E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR);
+        }
+    }
+
+    /**
+     * @deprecated since 2.6, to be removed in 3.0. Use handleError() instead.
+     */
+    public function handle($level, $message, $file = 'unknown', $line = 0, $context = array())
+    {
+        return $this->handleError($level, $message, $file, $line, (array) $context);
+    }
+
+    /**
+     * Handles PHP fatal errors.
+     *
+     * @deprecated since 2.6, to be removed in 3.0. Use handleFatalError() instead.
+     */
+    public function handleFatal()
+    {
+        static::handleFatalError();
+    }
+}
+
+/**
+ * Private class used to work around https://bugs.php.net/54275
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @internal
+ */
+class ErrorHandlerCanary
+{
+    private static $displayErrors = null;
+
+    public function __construct()
+    {
+        if (null === self::$displayErrors) {
+            self::$displayErrors = ini_set('display_errors', 1);
+        }
+    }
+
+    public function __destruct()
+    {
+        if (null !== self::$displayErrors) {
+            ini_set('display_errors', self::$displayErrors);
+            self::$displayErrors = null;
+        }
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ClassNotFoundException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ClassNotFoundException.php
new file mode 100644
index 0000000000000000000000000000000000000000..b91bf46631bbb482943988927889dd7fc6d7ab1d
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ClassNotFoundException.php
@@ -0,0 +1,33 @@
+<?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\Debug\Exception;
+
+/**
+ * Class (or Trait or Interface) Not Found Exception.
+ *
+ * @author Konstanton Myakshin <koc-dp@yandex.ru>
+ */
+class ClassNotFoundException extends FatalErrorException
+{
+    public function __construct($message, \ErrorException $previous)
+    {
+        parent::__construct(
+            $message,
+            $previous->getCode(),
+            $previous->getSeverity(),
+            $previous->getFile(),
+            $previous->getLine(),
+            $previous->getPrevious()
+        );
+        $this->setTrace($previous->getTrace());
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ContextErrorException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ContextErrorException.php
new file mode 100644
index 0000000000000000000000000000000000000000..54f0198f1b2f87334c26d157c19c20514bcb83ea
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/ContextErrorException.php
@@ -0,0 +1,36 @@
+<?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\Debug\Exception;
+
+/**
+ * Error Exception with Variable Context.
+ *
+ * @author Christian Sciberras <uuf6429@gmail.com>
+ */
+class ContextErrorException extends \ErrorException
+{
+    private $context = array();
+
+    public function __construct($message, $code, $severity, $filename, $lineno, $context = array())
+    {
+        parent::__construct($message, $code, $severity, $filename, $lineno);
+        $this->context = $context;
+    }
+
+    /**
+     * @return array Array of variables that existed when the exception occurred
+     */
+    public function getContext()
+    {
+        return $this->context;
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/DummyException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/DummyException.php
new file mode 100644
index 0000000000000000000000000000000000000000..967e033777322ad5b0c8f763ed068860180dcf43
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/DummyException.php
@@ -0,0 +1,21 @@
+<?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\Debug\Exception;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since version 2.5, to be removed in 3.0.
+ */
+class DummyException extends \ErrorException
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FatalErrorException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FatalErrorException.php
new file mode 100644
index 0000000000000000000000000000000000000000..a58f855cdbe468fc3d71cb7bcb6970b744cb2598
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FatalErrorException.php
@@ -0,0 +1,86 @@
+<?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\Debug\Exception;
+
+use Symfony\Component\HttpKernel\Exception\FatalErrorException as LegacyFatalErrorException;
+
+/**
+ * Fatal Error Exception.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Konstanton Myakshin <koc-dp@yandex.ru>
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class FatalErrorException extends LegacyFatalErrorException
+{
+}
+
+namespace Symfony\Component\HttpKernel\Exception;
+
+/**
+ * Fatal Error Exception.
+ *
+ * @author Konstanton Myakshin <koc-dp@yandex.ru>
+ *
+ * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
+ */
+class FatalErrorException extends \ErrorException
+{
+    public function __construct($message, $code, $severity, $filename, $lineno, $traceOffset = null, $traceArgs = true)
+    {
+        parent::__construct($message, $code, $severity, $filename, $lineno);
+
+        if (null !== $traceOffset) {
+            if (function_exists('xdebug_get_function_stack')) {
+                $trace = xdebug_get_function_stack();
+                if (0 < $traceOffset) {
+                    array_splice($trace, -$traceOffset);
+                }
+
+                foreach ($trace as &$frame) {
+                    if (!isset($frame['type'])) {
+                        //  XDebug pre 2.1.1 doesn't currently set the call type key http://bugs.xdebug.org/view.php?id=695
+                        if (isset($frame['class'])) {
+                            $frame['type'] = '::';
+                        }
+                    } elseif ('dynamic' === $frame['type']) {
+                        $frame['type'] = '->';
+                    } elseif ('static' === $frame['type']) {
+                        $frame['type'] = '::';
+                    }
+
+                    // XDebug also has a different name for the parameters array
+                    if (!$traceArgs) {
+                        unset($frame['params'], $frame['args']);
+                    } elseif (isset($frame['params']) && !isset($frame['args'])) {
+                        $frame['args'] = $frame['params'];
+                        unset($frame['params']);
+                    }
+                }
+
+                unset($frame);
+                $trace = array_reverse($trace);
+            } else {
+                $trace = array();
+            }
+
+            $this->setTrace($trace);
+        }
+    }
+
+    protected function setTrace($trace)
+    {
+        $traceReflector = new \ReflectionProperty('Exception', 'trace');
+        $traceReflector->setAccessible(true);
+        $traceReflector->setValue($this, $trace);
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FlattenException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FlattenException.php
new file mode 100644
index 0000000000000000000000000000000000000000..75bd2b1df7df135f5e3bd97ce07f33a801bb6803
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/FlattenException.php
@@ -0,0 +1,284 @@
+<?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\Debug\Exception;
+
+use Symfony\Component\HttpKernel\Exception\FlattenException as LegacyFlattenException;
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+
+/**
+ * FlattenException wraps a PHP Exception to be able to serialize it.
+ *
+ * Basically, this class removes all objects from the trace.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class FlattenException extends LegacyFlattenException
+{
+    private $message;
+    private $code;
+    private $previous;
+    private $trace;
+    private $class;
+    private $statusCode;
+    private $headers;
+    private $file;
+    private $line;
+
+    public static function create(\Exception $exception, $statusCode = null, array $headers = array())
+    {
+        $e = new static();
+        $e->setMessage($exception->getMessage());
+        $e->setCode($exception->getCode());
+
+        if ($exception instanceof HttpExceptionInterface) {
+            $statusCode = $exception->getStatusCode();
+            $headers = array_merge($headers, $exception->getHeaders());
+        }
+
+        if (null === $statusCode) {
+            $statusCode = 500;
+        }
+
+        $e->setStatusCode($statusCode);
+        $e->setHeaders($headers);
+        $e->setTraceFromException($exception);
+        $e->setClass(get_class($exception));
+        $e->setFile($exception->getFile());
+        $e->setLine($exception->getLine());
+        if ($exception->getPrevious()) {
+            $e->setPrevious(static::create($exception->getPrevious()));
+        }
+
+        return $e;
+    }
+
+    public function toArray()
+    {
+        $exceptions = array();
+        foreach (array_merge(array($this), $this->getAllPrevious()) as $exception) {
+            $exceptions[] = array(
+                'message' => $exception->getMessage(),
+                'class' => $exception->getClass(),
+                'trace' => $exception->getTrace(),
+            );
+        }
+
+        return $exceptions;
+    }
+
+    public function getStatusCode()
+    {
+        return $this->statusCode;
+    }
+
+    public function setStatusCode($code)
+    {
+        $this->statusCode = $code;
+    }
+
+    public function getHeaders()
+    {
+        return $this->headers;
+    }
+
+    public function setHeaders(array $headers)
+    {
+        $this->headers = $headers;
+    }
+
+    public function getClass()
+    {
+        return $this->class;
+    }
+
+    public function setClass($class)
+    {
+        $this->class = $class;
+    }
+
+    public function getFile()
+    {
+        return $this->file;
+    }
+
+    public function setFile($file)
+    {
+        $this->file = $file;
+    }
+
+    public function getLine()
+    {
+        return $this->line;
+    }
+
+    public function setLine($line)
+    {
+        $this->line = $line;
+    }
+
+    public function getMessage()
+    {
+        return $this->message;
+    }
+
+    public function setMessage($message)
+    {
+        $this->message = $message;
+    }
+
+    public function getCode()
+    {
+        return $this->code;
+    }
+
+    public function setCode($code)
+    {
+        $this->code = $code;
+    }
+
+    public function getPrevious()
+    {
+        return $this->previous;
+    }
+
+    public function setPrevious(FlattenException $previous)
+    {
+        $this->previous = $previous;
+    }
+
+    public function getAllPrevious()
+    {
+        $exceptions = array();
+        $e = $this;
+        while ($e = $e->getPrevious()) {
+            $exceptions[] = $e;
+        }
+
+        return $exceptions;
+    }
+
+    public function getTrace()
+    {
+        return $this->trace;
+    }
+
+    public function setTraceFromException(\Exception $exception)
+    {
+        $this->setTrace($exception->getTrace(), $exception->getFile(), $exception->getLine());
+    }
+
+    public function setTrace($trace, $file, $line)
+    {
+        $this->trace = array();
+        $this->trace[] = array(
+            'namespace' => '',
+            'short_class' => '',
+            'class' => '',
+            'type' => '',
+            'function' => '',
+            'file' => $file,
+            'line' => $line,
+            'args' => array(),
+        );
+        foreach ($trace as $entry) {
+            $class = '';
+            $namespace = '';
+            if (isset($entry['class'])) {
+                $parts = explode('\\', $entry['class']);
+                $class = array_pop($parts);
+                $namespace = implode('\\', $parts);
+            }
+
+            $this->trace[] = array(
+                'namespace' => $namespace,
+                'short_class' => $class,
+                'class' => isset($entry['class']) ? $entry['class'] : '',
+                'type' => isset($entry['type']) ? $entry['type'] : '',
+                'function' => isset($entry['function']) ? $entry['function'] : null,
+                'file' => isset($entry['file']) ? $entry['file'] : null,
+                'line' => isset($entry['line']) ? $entry['line'] : null,
+                'args' => isset($entry['args']) ? $this->flattenArgs($entry['args']) : array(),
+            );
+        }
+    }
+
+    private function flattenArgs($args, $level = 0, &$count = 0)
+    {
+        $result = array();
+        foreach ($args as $key => $value) {
+            if (++$count > 1e4) {
+                return array('array', '*SKIPPED over 10000 entries*');
+            }
+            if (is_object($value)) {
+                $result[$key] = array('object', get_class($value));
+            } elseif (is_array($value)) {
+                if ($level > 10) {
+                    $result[$key] = array('array', '*DEEP NESTED ARRAY*');
+                } else {
+                    $result[$key] = array('array', $this->flattenArgs($value, $level + 1, $count));
+                }
+            } elseif (null === $value) {
+                $result[$key] = array('null', null);
+            } elseif (is_bool($value)) {
+                $result[$key] = array('boolean', $value);
+            } elseif (is_resource($value)) {
+                $result[$key] = array('resource', get_resource_type($value));
+            } elseif ($value instanceof \__PHP_Incomplete_Class) {
+                // Special case of object, is_object will return false
+                $result[$key] = array('incomplete-object', $this->getClassNameFromIncomplete($value));
+            } else {
+                $result[$key] = array('string', (string) $value);
+            }
+        }
+
+        return $result;
+    }
+
+    private function getClassNameFromIncomplete(\__PHP_Incomplete_Class $value)
+    {
+        $array = new \ArrayObject($value);
+
+        return $array['__PHP_Incomplete_Class_Name'];
+    }
+}
+
+namespace Symfony\Component\HttpKernel\Exception;
+
+use Symfony\Component\Debug\Exception\FlattenException as DebugFlattenException;
+
+/**
+ * FlattenException wraps a PHP Exception to be able to serialize it.
+ *
+ * Basically, this class removes all objects from the trace.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated Deprecated in 2.3, to be removed in 3.0. Use the same class from the Debug component instead.
+ */
+class FlattenException
+{
+    private $handler;
+
+    public static function __callStatic($method, $args)
+    {
+        return forward_static_call_array(array('Symfony\Component\Debug\Exception\FlattenException', $method), $args);
+    }
+
+    public function __call($method, $args)
+    {
+        if (!isset($this->handler)) {
+            $this->handler = new DebugFlattenException();
+        }
+
+        return call_user_func_array(array($this->handler, $method), $args);
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/OutOfMemoryException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/OutOfMemoryException.php
new file mode 100644
index 0000000000000000000000000000000000000000..fec19798364502d573e47c17da34290db2c43a4a
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/OutOfMemoryException.php
@@ -0,0 +1,21 @@
+<?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\Debug\Exception;
+
+/**
+ * Out of memory exception.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class OutOfMemoryException extends FatalErrorException
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/UndefinedFunctionException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/UndefinedFunctionException.php
new file mode 100644
index 0000000000000000000000000000000000000000..a66ae2a3879c99778d464618c92c60dfb39b47bb
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/UndefinedFunctionException.php
@@ -0,0 +1,33 @@
+<?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\Debug\Exception;
+
+/**
+ * Undefined Function Exception.
+ *
+ * @author Konstanton Myakshin <koc-dp@yandex.ru>
+ */
+class UndefinedFunctionException extends FatalErrorException
+{
+    public function __construct($message, \ErrorException $previous)
+    {
+        parent::__construct(
+            $message,
+            $previous->getCode(),
+            $previous->getSeverity(),
+            $previous->getFile(),
+            $previous->getLine(),
+            $previous->getPrevious()
+        );
+        $this->setTrace($previous->getTrace());
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/UndefinedMethodException.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/UndefinedMethodException.php
new file mode 100644
index 0000000000000000000000000000000000000000..350dc3187f47541b28c5d46301690a4832566288
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Exception/UndefinedMethodException.php
@@ -0,0 +1,33 @@
+<?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\Debug\Exception;
+
+/**
+ * Undefined Method Exception.
+ *
+ * @author GrÃ©goire Pineau <lyrixx@lyrixx.info>
+ */
+class UndefinedMethodException extends FatalErrorException
+{
+    public function __construct($message, \ErrorException $previous)
+    {
+        parent::__construct(
+            $message,
+            $previous->getCode(),
+            $previous->getSeverity(),
+            $previous->getFile(),
+            $previous->getLine(),
+            $previous->getPrevious()
+        );
+        $this->setTrace($previous->getTrace());
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c4c5fd422bc35366da116d5e47884d2fee84b3e
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php
@@ -0,0 +1,457 @@
+<?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\Debug;
+
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Debug\Exception\FlattenException;
+use Symfony\Component\Debug\Exception\OutOfMemoryException;
+
+/**
+ * ExceptionHandler converts an exception to a Response object.
+ *
+ * It is mostly useful in debug mode to replace the default PHP/XDebug
+ * output with something prettier and more useful.
+ *
+ * As this class is mainly used during Kernel boot, where nothing is yet
+ * available, the Response content is always HTML.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class ExceptionHandler
+{
+    private $debug;
+    private $handler;
+    private $caughtBuffer;
+    private $caughtLength;
+    private $fileLinkFormat;
+
+    public function __construct($debug = true, $fileLinkFormat = null)
+    {
+        $this->debug = $debug;
+        $this->fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
+    }
+
+    /**
+     * Registers the exception handler.
+     *
+     * @param bool $debug
+     *
+     * @return ExceptionHandler The registered exception handler
+     */
+    public static function register($debug = true, $fileLinkFormat = null)
+    {
+        $handler = new static($debug, $fileLinkFormat = null);
+
+        $prev = set_exception_handler(array($handler, 'handle'));
+        if (is_array($prev) && $prev[0] instanceof ErrorHandler) {
+            restore_exception_handler();
+            $prev[0]->setExceptionHandler(array($handler, 'handle'));
+        }
+
+        return $handler;
+    }
+
+    /**
+     * Sets a user exception handler.
+     *
+     * @param callable $handler An handler that will be called on Exception
+     *
+     * @return callable|null The previous exception handler if any
+     */
+    public function setHandler($handler)
+    {
+        if (null !== $handler && !is_callable($handler)) {
+            throw new \LogicException('The exception handler must be a valid PHP callable.');
+        }
+        $old = $this->handler;
+        $this->handler = $handler;
+
+        return $old;
+    }
+
+    /**
+     * Sets the format for links to source files.
+     *
+     * @param string $format The format for links to source files
+     *
+     * @return string The previous file link format.
+     */
+    public function setFileLinkFormat($format)
+    {
+        $old = $this->fileLinkFormat;
+        $this->fileLinkFormat = $format;
+
+        return $old;
+    }
+
+    /**
+     * Sends a response for the given Exception.
+     *
+     * To be as fail-safe as possible, the exception is first handled
+     * by our simple exception handler, then by the user exception handler.
+     * The latter takes precedence and any output from the former is cancelled,
+     * if and only if nothing bad happens in this handling path.
+     */
+    public function handle(\Exception $exception)
+    {
+        if (null === $this->handler || $exception instanceof OutOfMemoryException) {
+            $this->failSafeHandle($exception);
+
+            return;
+        }
+
+        $caughtLength = $this->caughtLength = 0;
+
+        ob_start(array($this, 'catchOutput'));
+        $this->failSafeHandle($exception);
+        while (null === $this->caughtBuffer && ob_end_flush()) {
+            // Empty loop, everything is in the condition
+        }
+        if (isset($this->caughtBuffer[0])) {
+            ob_start(array($this, 'cleanOutput'));
+            echo $this->caughtBuffer;
+            $caughtLength = ob_get_length();
+        }
+        $this->caughtBuffer = null;
+
+        try {
+            call_user_func($this->handler, $exception);
+            $this->caughtLength = $caughtLength;
+        } catch (\Exception $e) {
+            if (!$caughtLength) {
+                // All handlers failed. Let PHP handle that now.
+                throw $exception;
+            }
+        }
+    }
+
+    /**
+     * Sends a response for the given Exception.
+     *
+     * If you have the Symfony HttpFoundation component installed,
+     * this method will use it to create and send the response. If not,
+     * it will fallback to plain PHP functions.
+     *
+     * @param \Exception $exception An \Exception instance
+     *
+     * @see sendPhpResponse()
+     * @see createResponse()
+     */
+    private function failSafeHandle(\Exception $exception)
+    {
+        if (class_exists('Symfony\Component\HttpFoundation\Response', false)) {
+            $response = $this->createResponse($exception);
+            $response->sendHeaders();
+            $response->sendContent();
+        } else {
+            $this->sendPhpResponse($exception);
+        }
+    }
+
+    /**
+     * Sends the error associated with the given Exception as a plain PHP response.
+     *
+     * This method uses plain PHP functions like header() and echo to output
+     * the response.
+     *
+     * @param \Exception|FlattenException $exception An \Exception instance
+     */
+    public function sendPhpResponse($exception)
+    {
+        if (!$exception instanceof FlattenException) {
+            $exception = FlattenException::create($exception);
+        }
+
+        if (!headers_sent()) {
+            header(sprintf('HTTP/1.0 %s', $exception->getStatusCode()));
+            foreach ($exception->getHeaders() as $name => $value) {
+                header($name.': '.$value, false);
+            }
+        }
+
+        echo $this->decorate($this->getContent($exception), $this->getStylesheet($exception));
+    }
+
+    /**
+     * Creates the error Response associated with the given Exception.
+     *
+     * @param \Exception|FlattenException $exception An \Exception instance
+     *
+     * @return Response A Response instance
+     */
+    public function createResponse($exception)
+    {
+        if (!$exception instanceof FlattenException) {
+            $exception = FlattenException::create($exception);
+        }
+
+        return new Response($this->decorate($this->getContent($exception), $this->getStylesheet($exception)), $exception->getStatusCode(), $exception->getHeaders());
+    }
+
+    /**
+     * Gets the HTML content associated with the given exception.
+     *
+     * @param FlattenException $exception A FlattenException instance
+     *
+     * @return string The content as a string
+     */
+    public function getContent(FlattenException $exception)
+    {
+        switch ($exception->getStatusCode()) {
+            case 404:
+                $title = 'Sorry, the page you are looking for could not be found.';
+                break;
+            default:
+                $title = 'Whoops, looks like something went wrong.';
+        }
+
+        $content = '';
+        if ($this->debug) {
+            try {
+                $count = count($exception->getAllPrevious());
+                $total = $count + 1;
+                foreach ($exception->toArray() as $position => $e) {
+                    $ind = $count - $position + 1;
+                    $class = $this->formatClass($e['class']);
+                    $message = nl2br(self::utf8Htmlize($e['message']));
+                    $content .= sprintf(<<<EOF
+                        <h2 class="block_exception clear_fix">
+                            <span class="exception_counter">%d/%d</span>
+                            <span class="exception_title">%s%s:</span>
+                            <span class="exception_message">%s</span>
+                        </h2>
+                        <div class="block">
+                            <ol class="traces list_exception">
+
+EOF
+                        , $ind, $total, $class, $this->formatPath($e['trace'][0]['file'], $e['trace'][0]['line']), $message);
+                    foreach ($e['trace'] as $trace) {
+                        $content .= '       <li>';
+                        if ($trace['function']) {
+                            $content .= sprintf('at %s%s%s(%s)', $this->formatClass($trace['class']), $trace['type'], $trace['function'], $this->formatArgs($trace['args']));
+                        }
+                        if (isset($trace['file']) && isset($trace['line'])) {
+                            $content .= $this->formatPath($trace['file'], $trace['line']);
+                        }
+                        $content .= "</li>\n";
+                    }
+
+                    $content .= "    </ol>\n</div>\n";
+                }
+            } catch (\Exception $e) {
+                // something nasty happened and we cannot throw an exception anymore
+                if ($this->debug) {
+                    $title = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $e->getMessage());
+                } else {
+                    $title = 'Whoops, looks like something went wrong.';
+                }
+            }
+        }
+
+        return <<<EOF
+            <div id="sf-resetcontent" class="sf-reset">
+                <h1>$title</h1>
+                $content
+            </div>
+EOF;
+    }
+
+    /**
+     * Gets the stylesheet associated with the given exception.
+     *
+     * @param FlattenException $exception A FlattenException instance
+     *
+     * @return string The stylesheet as a string
+     */
+    public function getStylesheet(FlattenException $exception)
+    {
+        return <<<EOF
+            .sf-reset { font: 11px Verdana, Arial, sans-serif; color: #333 }
+            .sf-reset .clear { clear:both; height:0; font-size:0; line-height:0; }
+            .sf-reset .clear_fix:after { display:block; height:0; clear:both; visibility:hidden; }
+            .sf-reset .clear_fix { display:inline-block; }
+            .sf-reset * html .clear_fix { height:1%; }
+            .sf-reset .clear_fix { display:block; }
+            .sf-reset, .sf-reset .block { margin: auto }
+            .sf-reset abbr { border-bottom: 1px dotted #000; cursor: help; }
+            .sf-reset p { font-size:14px; line-height:20px; color:#868686; padding-bottom:20px }
+            .sf-reset strong { font-weight:bold; }
+            .sf-reset a { color:#6c6159; cursor: default; }
+            .sf-reset a img { border:none; }
+            .sf-reset a:hover { text-decoration:underline; }
+            .sf-reset em { font-style:italic; }
+            .sf-reset h1, .sf-reset h2 { font: 20px Georgia, "Times New Roman", Times, serif }
+            .sf-reset .exception_counter { background-color: #fff; color: #333; padding: 6px; float: left; margin-right: 10px; float: left; display: block; }
+            .sf-reset .exception_title { margin-left: 3em; margin-bottom: 0.7em; display: block; }
+            .sf-reset .exception_message { margin-left: 3em; display: block; }
+            .sf-reset .traces li { font-size:12px; padding: 2px 4px; list-style-type:decimal; margin-left:20px; }
+            .sf-reset .block { background-color:#FFFFFF; padding:10px 28px; margin-bottom:20px;
+                -webkit-border-bottom-right-radius: 16px;
+                -webkit-border-bottom-left-radius: 16px;
+                -moz-border-radius-bottomright: 16px;
+                -moz-border-radius-bottomleft: 16px;
+                border-bottom-right-radius: 16px;
+                border-bottom-left-radius: 16px;
+                border-bottom:1px solid #ccc;
+                border-right:1px solid #ccc;
+                border-left:1px solid #ccc;
+            }
+            .sf-reset .block_exception { background-color:#ddd; color: #333; padding:20px;
+                -webkit-border-top-left-radius: 16px;
+                -webkit-border-top-right-radius: 16px;
+                -moz-border-radius-topleft: 16px;
+                -moz-border-radius-topright: 16px;
+                border-top-left-radius: 16px;
+                border-top-right-radius: 16px;
+                border-top:1px solid #ccc;
+                border-right:1px solid #ccc;
+                border-left:1px solid #ccc;
+                overflow: hidden;
+                word-wrap: break-word;
+            }
+            .sf-reset a { background:none; color:#868686; text-decoration:none; }
+            .sf-reset a:hover { background:none; color:#313131; text-decoration:underline; }
+            .sf-reset ol { padding: 10px 0; }
+            .sf-reset h1 { background-color:#FFFFFF; padding: 15px 28px; margin-bottom: 20px;
+                -webkit-border-radius: 10px;
+                -moz-border-radius: 10px;
+                border-radius: 10px;
+                border: 1px solid #ccc;
+            }
+EOF;
+    }
+
+    private function decorate($content, $css)
+    {
+        return <<<EOF
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="UTF-8" />
+        <meta name="robots" content="noindex,nofollow" />
+        <style>
+            /* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html */
+            html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}
+
+            html { background: #eee; padding: 10px }
+            img { border: 0; }
+            #sf-resetcontent { width:970px; margin:0 auto; }
+            $css
+        </style>
+    </head>
+    <body>
+        $content
+    </body>
+</html>
+EOF;
+    }
+
+    private function formatClass($class)
+    {
+        $parts = explode('\\', $class);
+
+        return sprintf("<abbr title=\"%s\">%s</abbr>", $class, array_pop($parts));
+    }
+
+    private function formatPath($path, $line)
+    {
+        $path = self::utf8Htmlize($path);
+        $file = preg_match('#[^/\\\\]*$#', $path, $file) ? $file[0] : $path;
+
+        if ($linkFormat = $this->fileLinkFormat) {
+            $link = str_replace(array('%f', '%l'), array($path, $line), $linkFormat);
+
+            return sprintf(' in <a href="%s" title="Go to source">%s line %d</a>', $link, $file, $line);
+        }
+
+        return sprintf(' in <a title="%s line %3$d" ondblclick="var f=this.innerHTML;this.innerHTML=this.title;this.title=f;">%s line %d</a>', $path, $file, $line);
+    }
+
+    /**
+     * Formats an array as a string.
+     *
+     * @param array $args The argument array
+     *
+     * @return string
+     */
+    private function formatArgs(array $args)
+    {
+        $result = array();
+        foreach ($args as $key => $item) {
+            if ('object' === $item[0]) {
+                $formattedValue = sprintf("<em>object</em>(%s)", $this->formatClass($item[1]));
+            } elseif ('array' === $item[0]) {
+                $formattedValue = sprintf("<em>array</em>(%s)", is_array($item[1]) ? $this->formatArgs($item[1]) : $item[1]);
+            } elseif ('string' === $item[0]) {
+                $formattedValue = sprintf("'%s'", self::utf8Htmlize($item[1]));
+            } elseif ('null' === $item[0]) {
+                $formattedValue = '<em>null</em>';
+            } elseif ('boolean' === $item[0]) {
+                $formattedValue = '<em>'.strtolower(var_export($item[1], true)).'</em>';
+            } elseif ('resource' === $item[0]) {
+                $formattedValue = '<em>resource</em>';
+            } else {
+                $formattedValue = str_replace("\n", '', var_export(self::utf8Htmlize((string) $item[1]), true));
+            }
+
+            $result[] = is_int($key) ? $formattedValue : sprintf("'%s' => %s", $key, $formattedValue);
+        }
+
+        return implode(', ', $result);
+    }
+
+    /**
+     * Returns an UTF-8 and HTML encoded string
+     */
+    protected static function utf8Htmlize($str)
+    {
+        if (!preg_match('//u', $str) && function_exists('iconv')) {
+            set_error_handler('var_dump', 0);
+            $charset = ini_get('default_charset');
+            if ('UTF-8' === $charset || $str !== @iconv($charset, $charset, $str)) {
+                $charset = 'CP1252';
+            }
+            restore_error_handler();
+
+            $str = iconv($charset, 'UTF-8', $str);
+        }
+
+        return htmlspecialchars($str, ENT_QUOTES | (PHP_VERSION_ID >= 50400 ? ENT_SUBSTITUTE : 0), 'UTF-8');
+    }
+
+    /**
+     * @internal
+     */
+    public function catchOutput($buffer)
+    {
+        $this->caughtBuffer = $buffer;
+
+        return '';
+    }
+
+    /**
+     * @internal
+     */
+    public function cleanOutput($buffer)
+    {
+        if ($this->caughtLength) {
+            // use substr_replace() instead of substr() for mbstring overloading resistance
+            $cleanBuffer = substr_replace($buffer, '', 0, $this->caughtLength);
+            if (isset($cleanBuffer[0])) {
+                $buffer = $cleanBuffer;
+            }
+        }
+
+        return $buffer;
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..c75f17edff344c71587459cbd6c27513975439d7
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
@@ -0,0 +1,197 @@
+<?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\Debug\FatalErrorHandler;
+
+use Symfony\Component\Debug\Exception\ClassNotFoundException;
+use Symfony\Component\Debug\Exception\FatalErrorException;
+use Symfony\Component\Debug\DebugClassLoader;
+use Composer\Autoload\ClassLoader as ComposerClassLoader;
+use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader;
+use Symfony\Component\ClassLoader\UniversalClassLoader as SymfonyUniversalClassLoader;
+
+/**
+ * ErrorHandler for classes that do not exist.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ClassNotFoundFatalErrorHandler implements FatalErrorHandlerInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function handleError(array $error, FatalErrorException $exception)
+    {
+        $messageLen = strlen($error['message']);
+        $notFoundSuffix = '\' not found';
+        $notFoundSuffixLen = strlen($notFoundSuffix);
+        if ($notFoundSuffixLen > $messageLen) {
+            return;
+        }
+
+        if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) {
+            return;
+        }
+
+        foreach (array('class', 'interface', 'trait') as $typeName) {
+            $prefix = ucfirst($typeName).' \'';
+            $prefixLen = strlen($prefix);
+            if (0 !== strpos($error['message'], $prefix)) {
+                continue;
+            }
+
+            $fullyQualifiedClassName = substr($error['message'], $prefixLen, -$notFoundSuffixLen);
+            if (false !== $namespaceSeparatorIndex = strrpos($fullyQualifiedClassName, '\\')) {
+                $className = substr($fullyQualifiedClassName, $namespaceSeparatorIndex + 1);
+                $namespacePrefix = substr($fullyQualifiedClassName, 0, $namespaceSeparatorIndex);
+                $message = sprintf('Attempted to load %s "%s" from namespace "%s".', $typeName, $className, $namespacePrefix);
+                $tail = ' for another namespace?';
+            } else {
+                $className = $fullyQualifiedClassName;
+                $message = sprintf('Attempted to load %s "%s" from the global namespace.', $typeName, $className);
+                $tail = '?';
+            }
+
+            if ($candidates = $this->getClassCandidates($className)) {
+                $tail = array_pop($candidates).'"?';
+                if ($candidates) {
+                    $tail = ' for e.g. "'.implode('", "', $candidates).'" or "'.$tail;
+                } else {
+                    $tail = ' for "'.$tail;
+                }
+            }
+            $message .= "\nDid you forget a \"use\" statement".$tail;
+
+            return new ClassNotFoundException($message, $exception);
+        }
+    }
+
+    /**
+     * Tries to guess the full namespace for a given class name.
+     *
+     * By default, it looks for PSR-0 classes registered via a Symfony or a Composer
+     * autoloader (that should cover all common cases).
+     *
+     * @param string $class A class name (without its namespace)
+     *
+     * @return array An array of possible fully qualified class names
+     */
+    private function getClassCandidates($class)
+    {
+        if (!is_array($functions = spl_autoload_functions())) {
+            return array();
+        }
+
+        // find Symfony and Composer autoloaders
+        $classes = array();
+
+        foreach ($functions as $function) {
+            if (!is_array($function)) {
+                continue;
+            }
+            // get class loaders wrapped by DebugClassLoader
+            if ($function[0] instanceof DebugClassLoader) {
+                $function = $function[0]->getClassLoader();
+
+                // Since 2.5, returning an object from DebugClassLoader::getClassLoader() is @deprecated
+                if (is_object($function)) {
+                    $function = array($function);
+                }
+
+                if (!is_array($function)) {
+                    continue;
+                }
+            }
+
+            if ($function[0] instanceof ComposerClassLoader || $function[0] instanceof SymfonyClassLoader || $function[0] instanceof SymfonyUniversalClassLoader) {
+                foreach ($function[0]->getPrefixes() as $prefix => $paths) {
+                    foreach ($paths as $path) {
+                        $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix));
+                    }
+                }
+            }
+        }
+
+        return array_unique($classes);
+    }
+
+    /**
+     * @param string $path
+     * @param string $class
+     * @param string $prefix
+     *
+     * @return array
+     */
+    private function findClassInPath($path, $class, $prefix)
+    {
+        if (!$path = realpath($path)) {
+            return array();
+        }
+
+        $classes = array();
+        $filename = $class.'.php';
+        foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
+            if ($filename == $file->getFileName() && $class = $this->convertFileToClass($path, $file->getPathName(), $prefix)) {
+                $classes[] = $class;
+            }
+        }
+
+        return $classes;
+    }
+
+    /**
+     * @param string $path
+     * @param string $file
+     * @param string $prefix
+     *
+     * @return string|null
+     */
+    private function convertFileToClass($path, $file, $prefix)
+    {
+        $candidates = array(
+            // namespaced class
+            $namespacedClass = str_replace(array($path.DIRECTORY_SEPARATOR, '.php', '/'), array('', '', '\\'), $file),
+            // namespaced class (with target dir)
+            $namespacedClassTargetDir = $prefix.str_replace(array($path.DIRECTORY_SEPARATOR, '.php', '/'), array('', '', '\\'), $file),
+            // PEAR class
+            str_replace('\\', '_', $namespacedClass),
+            // PEAR class (with target dir)
+            str_replace('\\', '_', $namespacedClassTargetDir),
+        );
+
+        // We cannot use the autoloader here as most of them use require; but if the class
+        // is not found, the new autoloader call will require the file again leading to a
+        // "cannot redeclare class" error.
+        foreach ($candidates as $candidate) {
+            if ($this->classExists($candidate)) {
+                return $candidate;
+            }
+        }
+
+        require_once $file;
+
+        foreach ($candidates as $candidate) {
+            if ($this->classExists($candidate)) {
+                return $candidate;
+            }
+        }
+    }
+
+    /**
+     * @param string $class
+     *
+     * @return bool
+     */
+    private function classExists($class)
+    {
+        return class_exists($class, false) || interface_exists($class, false) || (function_exists('trait_exists') && trait_exists($class, false));
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/FatalErrorHandlerInterface.php b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/FatalErrorHandlerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b87eb30a126e406b82bd8b493ac81506fbea805
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/FatalErrorHandlerInterface.php
@@ -0,0 +1,32 @@
+<?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\Debug\FatalErrorHandler;
+
+use Symfony\Component\Debug\Exception\FatalErrorException;
+
+/**
+ * Attempts to convert fatal errors to exceptions.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface FatalErrorHandlerInterface
+{
+    /**
+     * Attempts to convert an error into an exception.
+     *
+     * @param array               $error     An array as returned by error_get_last()
+     * @param FatalErrorException $exception A FatalErrorException instance
+     *
+     * @return FatalErrorException|null A FatalErrorException instance if the class is able to convert the error, null otherwise
+     */
+    public function handleError(array $error, FatalErrorException $exception);
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6f391a79c686fe86a3538ec0b98ddb975b30816
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
@@ -0,0 +1,84 @@
+<?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\Debug\FatalErrorHandler;
+
+use Symfony\Component\Debug\Exception\UndefinedFunctionException;
+use Symfony\Component\Debug\Exception\FatalErrorException;
+
+/**
+ * ErrorHandler for undefined functions.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class UndefinedFunctionFatalErrorHandler implements FatalErrorHandlerInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function handleError(array $error, FatalErrorException $exception)
+    {
+        $messageLen = strlen($error['message']);
+        $notFoundSuffix = '()';
+        $notFoundSuffixLen = strlen($notFoundSuffix);
+        if ($notFoundSuffixLen > $messageLen) {
+            return;
+        }
+
+        if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) {
+            return;
+        }
+
+        $prefix = 'Call to undefined function ';
+        $prefixLen = strlen($prefix);
+        if (0 !== strpos($error['message'], $prefix)) {
+            return;
+        }
+
+        $fullyQualifiedFunctionName = substr($error['message'], $prefixLen, -$notFoundSuffixLen);
+        if (false !== $namespaceSeparatorIndex = strrpos($fullyQualifiedFunctionName, '\\')) {
+            $functionName = substr($fullyQualifiedFunctionName, $namespaceSeparatorIndex + 1);
+            $namespacePrefix = substr($fullyQualifiedFunctionName, 0, $namespaceSeparatorIndex);
+            $message = sprintf('Attempted to call function "%s" from namespace "%s".', $functionName, $namespacePrefix);
+        } else {
+            $functionName = $fullyQualifiedFunctionName;
+            $message = sprintf('Attempted to call function "%s" from the global namespace.', $functionName);
+        }
+
+        $candidates = array();
+        foreach (get_defined_functions() as $type => $definedFunctionNames) {
+            foreach ($definedFunctionNames as $definedFunctionName) {
+                if (false !== $namespaceSeparatorIndex = strrpos($definedFunctionName, '\\')) {
+                    $definedFunctionNameBasename = substr($definedFunctionName, $namespaceSeparatorIndex + 1);
+                } else {
+                    $definedFunctionNameBasename = $definedFunctionName;
+                }
+
+                if ($definedFunctionNameBasename === $functionName) {
+                    $candidates[] = '\\'.$definedFunctionName;
+                }
+            }
+        }
+
+        if ($candidates) {
+            sort($candidates);
+            $last = array_pop($candidates).'"?';
+            if ($candidates) {
+                $candidates = 'e.g. "'.implode('", "', $candidates).'" or "'.$last;
+            } else {
+                $candidates = '"'.$last;
+            }
+            $message .= "\nDid you mean to call ".$candidates;
+        }
+
+        return new UndefinedFunctionException($message, $exception);
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..917794cfa0c017d2b887cb297a32c90941cddeb5
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.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\Debug\FatalErrorHandler;
+
+use Symfony\Component\Debug\Exception\FatalErrorException;
+use Symfony\Component\Debug\Exception\UndefinedMethodException;
+
+/**
+ * ErrorHandler for undefined methods.
+ *
+ * @author GrÃ©goire Pineau <lyrixx@lyrixx.info>
+ */
+class UndefinedMethodFatalErrorHandler implements FatalErrorHandlerInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function handleError(array $error, FatalErrorException $exception)
+    {
+        preg_match('/^Call to undefined method (.*)::(.*)\(\)$/', $error['message'], $matches);
+        if (!$matches) {
+            return;
+        }
+
+        $className = $matches[1];
+        $methodName = $matches[2];
+
+        $message = sprintf('Attempted to call method "%s" on class "%s".', $methodName, $className);
+
+        $candidates = array();
+        foreach (get_class_methods($className) as $definedMethodName) {
+            $lev = levenshtein($methodName, $definedMethodName);
+            if ($lev <= strlen($methodName) / 3 || false !== strpos($definedMethodName, $methodName)) {
+                $candidates[] = $definedMethodName;
+            }
+        }
+
+        if ($candidates) {
+            sort($candidates);
+            $last = array_pop($candidates).'"?';
+            if ($candidates) {
+                $candidates = 'e.g. "'.implode('", "', $candidates).'" or "'.$last;
+            } else {
+                $candidates = '"'.$last;
+            }
+            $message .= "\nDid you mean to call ".$candidates;
+        }
+
+        return new UndefinedMethodException($message, $exception);
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/LICENSE b/core/vendor/symfony/debug/Symfony/Component/Debug/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..43028bc600f26ec5599ab339d83cd70f70dfcdab
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2015 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/README.md b/core/vendor/symfony/debug/Symfony/Component/Debug/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..70c460370b4d3f3101b3e107397a1eb51cd0bdbb
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/README.md
@@ -0,0 +1,43 @@
+Debug Component
+===============
+
+Debug provides tools to make debugging easier.
+
+Enabling all debug tools is as easy as calling the `enable()` method on the
+main `Debug` class:
+
+```php
+use Symfony\Component\Debug\Debug;
+
+Debug::enable();
+```
+
+You can also use the tools individually:
+
+```php
+use Symfony\Component\Debug\ErrorHandler;
+use Symfony\Component\Debug\ExceptionHandler;
+
+if ('cli' !== php_sapi_name()) {
+    ini_set('display_errors', 0);
+    ExceptionHandler::register();
+} elseif (!ini_get('log_errors') || ini_get('error_log')) {
+    ini_set('display_errors', 1);
+}
+ErrorHandler::register();
+```
+
+Note that the `Debug::enable()` call also registers the debug class loader
+from the Symfony ClassLoader component when available.
+
+This component can optionally take advantage of the features of the HttpKernel
+and HttpFoundation components.
+
+Resources
+---------
+
+You can run the unit tests with the following command:
+
+    $ cd path/to/Symfony/Component/Debug/
+    $ composer.phar install --dev
+    $ phpunit
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/README.rst b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/README.rst
new file mode 100644
index 0000000000000000000000000000000000000000..b0d1c58959fc986afa89c41dd4899609d68a9967
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/README.rst
@@ -0,0 +1,72 @@
+Symfony Debug Extension
+=======================
+
+This extension adds a ``symfony_zval_info($key, $array, $options = 0)`` function that:
+
+- exposes zval_hash/refcounts, allowing e.g. efficient exploration of arbitrary structures in PHP,
+- does work with references, preventing memory copying.
+
+Its behavior is about the same as:
+
+.. code-block:: php
+
+    <?php
+
+    function symfony_zval_info($key, $array, $options = 0)
+    {
+        // $options is currently not used, but could be in future version.
+
+        if (!array_key_exists($key, $array)) {
+            return null;
+        }
+
+        $info = array(
+            'type' => gettype($array[$key]),
+            'zval_hash' => /* hashed memory address of $array[$key] */,
+            'zval_refcount' => /* internal zval refcount of $array[$key] */,
+            'zval_isref' => /* is_ref status of $array[$key] */,
+        );
+
+        switch ($info['type']) {
+            case 'object':
+                $info += array(
+                    'object_class' => get_class($array[$key]),
+                    'object_refcount' => /* internal object refcount of $array[$key] */,
+                    'object_hash' => spl_object_hash($array[$key]),
+                    'object_handle' => /* internal object handle $array[$key] */,
+                );
+                break;
+
+            case 'resource':
+                $info += array(
+                    'resource_handle' => (int) $array[$key],
+                    'resource_type' => get_resource_type($array[$key]),
+                    'resource_refcount' => /* internal resource refcount of $array[$key] */,
+                );
+                break;
+
+            case 'array':
+                $info += array(
+                    'array_count' => count($array[$key]),
+                );
+                break;
+
+            case 'string':
+                $info += array(
+                    'strlen' => strlen($array[$key]),
+                );
+                break;
+        }
+
+        return $info;
+    }
+
+To enable the extension from source, run:
+
+.. code-block:: sh
+
+    phpize
+    ./configure
+    make
+    sudo make install
+
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/config.m4 b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/config.m4
new file mode 100644
index 0000000000000000000000000000000000000000..3c56047150569b5ad02799e03f7b7edfbee5d608
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/config.m4
@@ -0,0 +1,63 @@
+dnl $Id$
+dnl config.m4 for extension symfony_debug
+
+dnl Comments in this file start with the string 'dnl'.
+dnl Remove where necessary. This file will not work
+dnl without editing.
+
+dnl If your extension references something external, use with:
+
+dnl PHP_ARG_WITH(symfony_debug, for symfony_debug support,
+dnl Make sure that the comment is aligned:
+dnl [  --with-symfony_debug             Include symfony_debug support])
+
+dnl Otherwise use enable:
+
+PHP_ARG_ENABLE(symfony_debug, whether to enable symfony_debug support,
+dnl Make sure that the comment is aligned:
+[  --enable-symfony_debug           Enable symfony_debug support])
+
+if test "$PHP_SYMFONY_DEBUG" != "no"; then
+  dnl Write more examples of tests here...
+
+  dnl # --with-symfony_debug -> check with-path
+  dnl SEARCH_PATH="/usr/local /usr"     # you might want to change this
+  dnl SEARCH_FOR="/include/symfony_debug.h"  # you most likely want to change this
+  dnl if test -r $PHP_SYMFONY_DEBUG/$SEARCH_FOR; then # path given as parameter
+  dnl   SYMFONY_DEBUG_DIR=$PHP_SYMFONY_DEBUG
+  dnl else # search default path list
+  dnl   AC_MSG_CHECKING([for symfony_debug files in default path])
+  dnl   for i in $SEARCH_PATH ; do
+  dnl     if test -r $i/$SEARCH_FOR; then
+  dnl       SYMFONY_DEBUG_DIR=$i
+  dnl       AC_MSG_RESULT(found in $i)
+  dnl     fi
+  dnl   done
+  dnl fi
+  dnl
+  dnl if test -z "$SYMFONY_DEBUG_DIR"; then
+  dnl   AC_MSG_RESULT([not found])
+  dnl   AC_MSG_ERROR([Please reinstall the symfony_debug distribution])
+  dnl fi
+
+  dnl # --with-symfony_debug -> add include path
+  dnl PHP_ADD_INCLUDE($SYMFONY_DEBUG_DIR/include)
+
+  dnl # --with-symfony_debug -> check for lib and symbol presence
+  dnl LIBNAME=symfony_debug # you may want to change this
+  dnl LIBSYMBOL=symfony_debug # you most likely want to change this 
+
+  dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
+  dnl [
+  dnl   PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $SYMFONY_DEBUG_DIR/lib, SYMFONY_DEBUG_SHARED_LIBADD)
+  dnl   AC_DEFINE(HAVE_SYMFONY_DEBUGLIB,1,[ ])
+  dnl ],[
+  dnl   AC_MSG_ERROR([wrong symfony_debug lib version or lib not found])
+  dnl ],[
+  dnl   -L$SYMFONY_DEBUG_DIR/lib -lm
+  dnl ])
+  dnl
+  dnl PHP_SUBST(SYMFONY_DEBUG_SHARED_LIBADD)
+
+  PHP_NEW_EXTENSION(symfony_debug, symfony_debug.c, $ext_shared)
+fi
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/config.w32 b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/config.w32
new file mode 100644
index 0000000000000000000000000000000000000000..487e6913891cf07b60f9779b0e3ffd18406c44ff
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/config.w32
@@ -0,0 +1,13 @@
+// $Id$
+// vim:ft=javascript
+
+// If your extension references something external, use ARG_WITH
+// ARG_WITH("symfony_debug", "for symfony_debug support", "no");
+
+// Otherwise, use ARG_ENABLE
+// ARG_ENABLE("symfony_debug", "enable symfony_debug support", "no");
+
+if (PHP_SYMFONY_DEBUG != "no") {
+	EXTENSION("symfony_debug", "symfony_debug.c");
+}
+
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/php_symfony_debug.h b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/php_symfony_debug.h
new file mode 100644
index 0000000000000000000000000000000000000000..c935f670192994ae698a68d541e9c6147970871b
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/php_symfony_debug.h
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+#ifndef PHP_SYMFONY_DEBUG_H
+#define PHP_SYMFONY_DEBUG_H
+
+extern zend_module_entry symfony_debug_module_entry;
+#define phpext_symfony_debug_ptr &symfony_debug_module_entry
+
+#define PHP_SYMFONY_DEBUG_VERSION "1.0"
+
+#ifdef PHP_WIN32
+#	define PHP_SYMFONY_DEBUG_API __declspec(dllexport)
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#	define PHP_SYMFONY_DEBUG_API __attribute__ ((visibility("default")))
+#else
+#	define PHP_SYMFONY_DEBUG_API
+#endif
+
+#ifdef ZTS
+#include "TSRM.h"
+#endif
+
+ZEND_BEGIN_MODULE_GLOBALS(symfony_debug)
+	intptr_t req_rand_init;
+ZEND_END_MODULE_GLOBALS(symfony_debug)
+
+PHP_MINIT_FUNCTION(symfony_debug);
+PHP_MSHUTDOWN_FUNCTION(symfony_debug);
+PHP_RINIT_FUNCTION(symfony_debug);
+PHP_RSHUTDOWN_FUNCTION(symfony_debug);
+PHP_MINFO_FUNCTION(symfony_debug);
+PHP_GINIT_FUNCTION(symfony_debug);
+PHP_GSHUTDOWN_FUNCTION(symfony_debug);
+
+PHP_FUNCTION(symfony_zval_info);
+
+static char *_symfony_debug_memory_address_hash(void *);
+static const char *_symfony_debug_zval_type(zval *);
+static const char* _symfony_debug_get_resource_type(long);
+static int _symfony_debug_get_resource_refcount(long);
+
+#ifdef ZTS
+#define SYMFONY_DEBUG_G(v) TSRMG(symfony_debug_globals_id, zend_symfony_debug_globals *, v)
+#else
+#define SYMFONY_DEBUG_G(v) (symfony_debug_globals.v)
+#endif
+
+#endif	/* PHP_SYMFONY_DEBUG_H */
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/symfony_debug.c b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/symfony_debug.c
new file mode 100644
index 0000000000000000000000000000000000000000..8dc5d4356a81919fb063ab255b865c935b569a80
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/symfony_debug.c
@@ -0,0 +1,224 @@
+/*
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "php.h"
+#include "php_ini.h"
+#include "ext/standard/info.h"
+#include "php_symfony_debug.h"
+#include "ext/standard/php_rand.h"
+#include "ext/standard/php_lcg.h"
+#include "ext/spl/php_spl.h"
+#include "Zend/zend_gc.h"
+
+ZEND_DECLARE_MODULE_GLOBALS(symfony_debug)
+
+ZEND_BEGIN_ARG_INFO_EX(symfony_zval_arginfo, 0, 0, 2)
+	ZEND_ARG_INFO(0, key)
+	ZEND_ARG_ARRAY_INFO(0, array, 0)
+	ZEND_ARG_INFO(0, options)
+ZEND_END_ARG_INFO()
+
+const zend_function_entry symfony_debug_functions[] = {
+	PHP_FE(symfony_zval_info,	symfony_zval_arginfo)
+	PHP_FE_END
+};
+
+PHP_FUNCTION(symfony_zval_info)
+{
+	zval *key = NULL, *arg = NULL;
+	zval **data = NULL;
+	HashTable *array = NULL;
+	long options = 0;
+
+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "zh|l", &key, &array, &options) == FAILURE) {
+		return;
+	}
+
+	switch (Z_TYPE_P(key)) {
+		case IS_STRING:
+			if (zend_symtable_find(array, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, (void **)&data) == FAILURE) {
+				return;
+			}
+		break;
+		case IS_LONG:
+			if (zend_hash_index_find(array, Z_LVAL_P(key), (void **)&data)) {
+				return;
+			}
+		break;
+	}
+
+	arg = *data;
+
+	array_init(return_value);
+
+	add_assoc_string(return_value, "type", (char *)_symfony_debug_zval_type(arg), 1);
+	add_assoc_stringl(return_value, "zval_hash", _symfony_debug_memory_address_hash((void *)arg), 16, 1);
+	add_assoc_long(return_value, "zval_refcount", Z_REFCOUNT_P(arg));
+	add_assoc_bool(return_value, "zval_isref", (zend_bool)Z_ISREF_P(arg));
+
+	if (Z_TYPE_P(arg) == IS_OBJECT) {
+		static char hash[33] = {0};
+		php_spl_object_hash(arg, (char *)hash);
+		add_assoc_stringl(return_value, "object_class", (char *)Z_OBJCE_P(arg)->name, Z_OBJCE_P(arg)->name_length, 1);
+		add_assoc_long(return_value, "object_refcount", EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(arg)].bucket.obj.refcount);
+		add_assoc_string(return_value, "object_hash", hash, 1);
+		add_assoc_long(return_value, "object_handle", Z_OBJ_HANDLE_P(arg));
+	} else if (Z_TYPE_P(arg) == IS_ARRAY) {
+		add_assoc_long(return_value, "array_count", zend_hash_num_elements(Z_ARRVAL_P(arg)));
+	} else if(Z_TYPE_P(arg) == IS_RESOURCE) {
+		add_assoc_long(return_value, "resource_handle", Z_LVAL_P(arg));
+		add_assoc_string(return_value, "resource_type", (char *)_symfony_debug_get_resource_type(Z_LVAL_P(arg)), 1);
+		add_assoc_long(return_value, "resource_refcount", _symfony_debug_get_resource_refcount(Z_LVAL_P(arg)));
+	} else if (Z_TYPE_P(arg) == IS_STRING) {
+		add_assoc_long(return_value, "strlen", Z_STRLEN_P(arg));
+	}
+}
+
+static const char* _symfony_debug_get_resource_type(long rsid)
+{
+	const char *res_type;
+	res_type = zend_rsrc_list_get_rsrc_type(rsid);
+
+	if (!res_type) {
+		return "Unknown";
+	}
+
+	return res_type;
+}
+
+static int _symfony_debug_get_resource_refcount(long rsid)
+{
+	zend_rsrc_list_entry *le;
+
+	if (zend_hash_index_find(&EG(regular_list), rsid, (void **) &le)==SUCCESS) {
+		return le->refcount;
+	}
+
+	return 0;
+}
+
+static char *_symfony_debug_memory_address_hash(void *address)
+{
+	static char result[17] = {0};
+	intptr_t address_rand;
+
+	if (!SYMFONY_DEBUG_G(req_rand_init)) {
+		if (!BG(mt_rand_is_seeded)) {
+			php_mt_srand(GENERATE_SEED() TSRMLS_CC);
+		}
+		SYMFONY_DEBUG_G(req_rand_init) = (intptr_t)php_mt_rand();
+	}
+
+	address_rand = (intptr_t)address ^ SYMFONY_DEBUG_G(req_rand_init);
+
+	snprintf(result, 17, "%016zx", address_rand);
+
+	return result;
+}
+
+static const char *_symfony_debug_zval_type(zval *zv)
+{
+	switch (Z_TYPE_P(zv)) {
+		case IS_NULL:
+			return "NULL";
+			break;
+
+		case IS_BOOL:
+			return "boolean";
+			break;
+
+		case IS_LONG:
+			return "integer";
+			break;
+
+		case IS_DOUBLE:
+			return "double";
+			break;
+
+		case IS_STRING:
+			return "string";
+			break;
+
+		case IS_ARRAY:
+			return "array";
+			break;
+
+		case IS_OBJECT:
+			return "object";
+
+		case IS_RESOURCE:
+			return "resource";
+
+		default:
+			return "unknown type";
+	}
+}
+
+zend_module_entry symfony_debug_module_entry = {
+	STANDARD_MODULE_HEADER,
+	"symfony_debug",
+	symfony_debug_functions,
+	PHP_MINIT(symfony_debug),
+	PHP_MSHUTDOWN(symfony_debug),
+	PHP_RINIT(symfony_debug),
+	PHP_RSHUTDOWN(symfony_debug),
+	PHP_MINFO(symfony_debug),
+	PHP_SYMFONY_DEBUG_VERSION,
+	PHP_MODULE_GLOBALS(symfony_debug),
+	PHP_GINIT(symfony_debug),
+	PHP_GSHUTDOWN(symfony_debug),
+	NULL,
+	STANDARD_MODULE_PROPERTIES_EX
+};
+
+#ifdef COMPILE_DL_SYMFONY_DEBUG
+ZEND_GET_MODULE(symfony_debug)
+#endif
+
+PHP_GINIT_FUNCTION(symfony_debug)
+{
+	symfony_debug_globals->req_rand_init = 0;
+}
+
+PHP_GSHUTDOWN_FUNCTION(symfony_debug)
+{
+
+}
+
+PHP_MINIT_FUNCTION(symfony_debug)
+{
+	return SUCCESS;
+}
+
+PHP_MSHUTDOWN_FUNCTION(symfony_debug)
+{
+	return SUCCESS;
+}
+
+PHP_RINIT_FUNCTION(symfony_debug)
+{
+	return SUCCESS;
+}
+
+PHP_RSHUTDOWN_FUNCTION(symfony_debug)
+{
+	return SUCCESS;
+}
+
+PHP_MINFO_FUNCTION(symfony_debug)
+{
+	php_info_print_table_start();
+	php_info_print_table_header(2, "Symfony Debug support", "enabled");
+	php_info_print_table_header(2, "Symfony Debug version", PHP_SYMFONY_DEBUG_VERSION);
+	php_info_print_table_end();
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/tests/001.phpt b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/tests/001.phpt
new file mode 100644
index 0000000000000000000000000000000000000000..30b25a25e22383b7313d5c531b24ed60c46d442b
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Resources/ext/tests/001.phpt
@@ -0,0 +1,151 @@
+--TEST--
+Test symfony_zval_info API
+--SKIPIF--
+<?php if (!extension_loaded("symfony_debug")) print "skip"; ?>
+--FILE--
+<?php 
+
+$int = 42;
+$float = 42.42;
+$str = "foobar";
+$object = new StdClass;
+$array = array('foo', 'bar');
+$resource = tmpfile();
+$null = null;
+$bool = true;
+
+$anotherint = 42;
+$refcount2 = &$anotherint;
+
+$var = array('int' => $int,
+			 'float' => $float,
+			 'str' => $str,
+			 'object' => $object,
+			 'array' => $array,
+			 'resource' => $resource,
+			 'null' => $null,
+			 'bool' => $bool,
+			 'refcount' => &$refcount2);
+
+var_dump(symfony_zval_info('int', $var));
+var_dump(symfony_zval_info('float', $var));
+var_dump(symfony_zval_info('str', $var));
+var_dump(symfony_zval_info('object', $var));
+var_dump(symfony_zval_info('array', $var));
+var_dump(symfony_zval_info('resource', $var));
+var_dump(symfony_zval_info('null', $var));
+var_dump(symfony_zval_info('bool', $var));
+
+var_dump(symfony_zval_info('refcount', $var));
+var_dump(symfony_zval_info('not-exist', $var));
+?>
+--EXPECTF--
+array(4) {
+  ["type"]=>
+  string(7) "integer"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+}
+array(4) {
+  ["type"]=>
+  string(6) "double"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+}
+array(5) {
+  ["type"]=>
+  string(6) "string"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+  ["strlen"]=>
+  int(6)
+}
+array(8) {
+  ["type"]=>
+  string(6) "object"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+  ["object_class"]=>
+  string(8) "stdClass"
+  ["object_refcount"]=>
+  int(1)
+  ["object_hash"]=>
+  string(32) "%s"
+  ["object_handle"]=>
+  int(1)
+}
+array(5) {
+  ["type"]=>
+  string(5) "array"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+  ["array_count"]=>
+  int(2)
+}
+array(7) {
+  ["type"]=>
+  string(8) "resource"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+  ["resource_handle"]=>
+  int(4)
+  ["resource_type"]=>
+  string(6) "stream"
+  ["resource_refcount"]=>
+  int(1)
+}
+array(4) {
+  ["type"]=>
+  string(4) "NULL"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+}
+array(4) {
+  ["type"]=>
+  string(7) "boolean"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(2)
+  ["zval_isref"]=>
+  bool(false)
+}
+array(4) {
+  ["type"]=>
+  string(7) "integer"
+  ["zval_hash"]=>
+  string(16) "%s"
+  ["zval_refcount"]=>
+  int(3)
+  ["zval_isref"]=>
+  bool(true)
+}
+NULL
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/DebugClassLoaderTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/DebugClassLoaderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1d6f6b4715bd206612a2c1bb15b8f3850c1793d2
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/DebugClassLoaderTest.php
@@ -0,0 +1,187 @@
+<?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\Debug\Tests;
+
+use Symfony\Component\Debug\DebugClassLoader;
+use Symfony\Component\Debug\ErrorHandler;
+use Symfony\Component\Debug\Exception\ContextErrorException;
+
+class DebugClassLoaderTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var int Error reporting level before running tests.
+     */
+    private $errorReporting;
+
+    private $loader;
+
+    protected function setUp()
+    {
+        $this->errorReporting = error_reporting(E_ALL | E_STRICT);
+        $this->loader = new ClassLoader();
+        spl_autoload_register(array($this->loader, 'loadClass'), true, true);
+        DebugClassLoader::enable();
+    }
+
+    protected function tearDown()
+    {
+        DebugClassLoader::disable();
+        spl_autoload_unregister(array($this->loader, 'loadClass'));
+        error_reporting($this->errorReporting);
+    }
+
+    public function testIdempotence()
+    {
+        DebugClassLoader::enable();
+
+        $functions = spl_autoload_functions();
+        foreach ($functions as $function) {
+            if (is_array($function) && $function[0] instanceof DebugClassLoader) {
+                $reflClass = new \ReflectionClass($function[0]);
+                $reflProp = $reflClass->getProperty('classLoader');
+                $reflProp->setAccessible(true);
+
+                $this->assertNotInstanceOf('Symfony\Component\Debug\DebugClassLoader', $reflProp->getValue($function[0]));
+
+                return;
+            }
+        }
+
+        $this->fail('DebugClassLoader did not register');
+    }
+
+    public function testUnsilencing()
+    {
+        ob_start();
+
+        $this->iniSet('log_errors', 0);
+        $this->iniSet('display_errors', 1);
+
+        // See below: this will fail with parse error
+        // but this should not be @-silenced.
+        @class_exists(__NAMESPACE__.'\TestingUnsilencing', true);
+
+        $output = ob_get_clean();
+
+        $this->assertStringMatchesFormat('%aParse error%a', $output);
+    }
+
+    public function testStacking()
+    {
+        // the ContextErrorException must not be loaded to test the workaround
+        // for https://bugs.php.net/65322.
+        if (class_exists('Symfony\Component\Debug\Exception\ContextErrorException', false)) {
+            $this->markTestSkipped('The ContextErrorException class is already loaded.');
+        }
+
+        ErrorHandler::register();
+
+        try {
+            // Trigger autoloading + E_STRICT at compile time
+            // which in turn triggers $errorHandler->handle()
+            // that again triggers autoloading for ContextErrorException.
+            // Error stacking works around the bug above and everything is fine.
+
+            eval('
+                namespace '.__NAMESPACE__.';
+                class ChildTestingStacking extends TestingStacking { function foo($bar) {} }
+            ');
+            $this->fail('ContextErrorException expected');
+        } catch (\ErrorException $exception) {
+            // if an exception is thrown, the test passed
+            restore_error_handler();
+            restore_exception_handler();
+            $this->assertEquals(E_STRICT, $exception->getSeverity());
+            $this->assertStringStartsWith(__FILE__, $exception->getFile());
+            $this->assertRegexp('/^Runtime Notice: Declaration/', $exception->getMessage());
+        } catch (\Exception $exception) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $exception;
+        }
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testNameCaseMismatch()
+    {
+        class_exists(__NAMESPACE__.'\TestingCaseMismatch', true);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testFileCaseMismatch()
+    {
+        if (!file_exists(__DIR__.'/Fixtures/CaseMismatch.php')) {
+            $this->markTestSkipped('Can only be run on case insensitive filesystems');
+        }
+
+        class_exists(__NAMESPACE__.'\Fixtures\CaseMismatch', true);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testPsr4CaseMismatch()
+    {
+        class_exists(__NAMESPACE__.'\Fixtures\Psr4CaseMismatch', true);
+    }
+
+    public function testNotPsr0()
+    {
+        $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\NotPSR0', true));
+    }
+
+    public function testNotPsr0Bis()
+    {
+        $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\NotPSR0bis', true));
+    }
+
+    public function testClassAlias()
+    {
+        $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\ClassAlias', true));
+    }
+}
+
+class ClassLoader
+{
+    public function loadClass($class)
+    {
+    }
+
+    public function getClassMap()
+    {
+        return array(__NAMESPACE__.'\Fixtures\NotPSR0bis' => __DIR__.'/Fixtures/notPsr0Bis.php');
+    }
+
+    public function findFile($class)
+    {
+        if (__NAMESPACE__.'\TestingUnsilencing' === $class) {
+            eval('-- parse error --');
+        } elseif (__NAMESPACE__.'\TestingStacking' === $class) {
+            eval('namespace '.__NAMESPACE__.'; class TestingStacking { function foo() {} }');
+        } elseif (__NAMESPACE__.'\TestingCaseMismatch' === $class) {
+            eval('namespace '.__NAMESPACE__.'; class TestingCaseMisMatch {}');
+        } elseif (__NAMESPACE__.'\Fixtures\CaseMismatch' === $class) {
+            return __DIR__.'/Fixtures/CaseMismatch.php';
+        } elseif (__NAMESPACE__.'\Fixtures\Psr4CaseMismatch' === $class) {
+            return __DIR__.'/Fixtures/psr4/Psr4CaseMismatch.php';
+        } elseif (__NAMESPACE__.'\Fixtures\NotPSR0' === $class) {
+            return __DIR__.'/Fixtures/reallyNotPsr0.php';
+        } elseif (__NAMESPACE__.'\Fixtures\NotPSR0bis' === $class) {
+            return __DIR__.'/Fixtures/notPsr0Bis.php';
+        }
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..663d6cad9ef21737777e555e8ea55a77339e9960
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ErrorHandlerTest.php
@@ -0,0 +1,402 @@
+<?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\Debug\Tests;
+
+use Psr\Log\LogLevel;
+use Symfony\Component\Debug\ErrorHandler;
+use Symfony\Component\Debug\Exception\ContextErrorException;
+
+/**
+ * ErrorHandlerTest.
+ *
+ * @author Robert SchÃ¶nthal <seroscho@googlemail.com>
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class ErrorHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testRegister()
+    {
+        $handler = ErrorHandler::register();
+
+        try {
+            $this->assertInstanceOf('Symfony\Component\Debug\ErrorHandler', $handler);
+            $this->assertSame($handler, ErrorHandler::register());
+
+            $newHandler = new ErrorHandler();
+
+            $this->assertSame($newHandler, ErrorHandler::register($newHandler, false));
+            $h = set_error_handler('var_dump');
+            restore_error_handler();
+            $this->assertSame(array($handler, 'handleError'), $h);
+
+            try {
+                $this->assertSame($newHandler, ErrorHandler::register($newHandler, true));
+                $h = set_error_handler('var_dump');
+                restore_error_handler();
+                $this->assertSame(array($newHandler, 'handleError'), $h);
+            } catch (\Exception $e) {
+            }
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            if (isset($e)) {
+                throw $e;
+            }
+        } catch (\Exception $e) {
+        }
+
+        restore_error_handler();
+        restore_exception_handler();
+
+        if (isset($e)) {
+            throw $e;
+        }
+    }
+
+    public function testNotice()
+    {
+        ErrorHandler::register();
+
+        try {
+            self::triggerNotice($this);
+            $this->fail('ContextErrorException expected');
+        } catch (ContextErrorException $exception) {
+            // if an exception is thrown, the test passed
+            restore_error_handler();
+            restore_exception_handler();
+
+            $this->assertEquals(E_NOTICE, $exception->getSeverity());
+            $this->assertEquals(__FILE__, $exception->getFile());
+            $this->assertRegexp('/^Notice: Undefined variable: (foo|bar)/', $exception->getMessage());
+            $this->assertArrayHasKey('foobar', $exception->getContext());
+
+            $trace = $exception->getTrace();
+            $this->assertEquals(__FILE__, $trace[0]['file']);
+            $this->assertEquals('Symfony\Component\Debug\ErrorHandler', $trace[0]['class']);
+            $this->assertEquals('handleError', $trace[0]['function']);
+            $this->assertEquals('->', $trace[0]['type']);
+
+            $this->assertEquals(__FILE__, $trace[1]['file']);
+            $this->assertEquals(__CLASS__, $trace[1]['class']);
+            $this->assertEquals('triggerNotice', $trace[1]['function']);
+            $this->assertEquals('::', $trace[1]['type']);
+
+            $this->assertEquals(__FILE__, $trace[1]['file']);
+            $this->assertEquals(__CLASS__, $trace[2]['class']);
+            $this->assertEquals(__FUNCTION__, $trace[2]['function']);
+            $this->assertEquals('->', $trace[2]['type']);
+        } catch (\Exception $e) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $e;
+        }
+    }
+
+    // dummy function to test trace in error handler.
+    private static function triggerNotice($that)
+    {
+        // dummy variable to check for in error handler.
+        $foobar = 123;
+        $that->assertSame('', $foo.$foo.$bar);
+    }
+
+    public function testConstruct()
+    {
+        try {
+            $handler = ErrorHandler::register();
+            $handler->throwAt(3, true);
+            $this->assertEquals(3 | E_RECOVERABLE_ERROR | E_USER_ERROR, $handler->throwAt(0));
+
+            restore_error_handler();
+            restore_exception_handler();
+        } catch (\Exception $e) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $e;
+        }
+    }
+
+    public function testDefaultLogger()
+    {
+        try {
+            $handler = ErrorHandler::register();
+
+            $logger = $this->getMock('Psr\Log\LoggerInterface');
+
+            $handler->setDefaultLogger($logger, E_NOTICE);
+            $handler->setDefaultLogger($logger, array(E_USER_NOTICE => LogLevel::CRITICAL));
+
+            $loggers = array(
+                E_DEPRECATED => array(null, LogLevel::INFO),
+                E_USER_DEPRECATED => array(null, LogLevel::INFO),
+                E_NOTICE => array($logger, LogLevel::NOTICE),
+                E_USER_NOTICE => array($logger, LogLevel::CRITICAL),
+                E_STRICT => array(null, LogLevel::NOTICE),
+                E_WARNING => array(null, LogLevel::WARNING),
+                E_USER_WARNING => array(null, LogLevel::WARNING),
+                E_COMPILE_WARNING => array(null, LogLevel::WARNING),
+                E_CORE_WARNING => array(null, LogLevel::WARNING),
+                E_USER_ERROR => array(null, LogLevel::ERROR),
+                E_RECOVERABLE_ERROR => array(null, LogLevel::ERROR),
+                E_COMPILE_ERROR => array(null, LogLevel::EMERGENCY),
+                E_PARSE => array(null, LogLevel::EMERGENCY),
+                E_ERROR => array(null, LogLevel::EMERGENCY),
+                E_CORE_ERROR => array(null, LogLevel::EMERGENCY),
+            );
+            $this->assertSame($loggers, $handler->setLoggers(array()));
+
+            restore_error_handler();
+            restore_exception_handler();
+        } catch (\Exception $e) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $e;
+        }
+    }
+
+    public function testHandleError()
+    {
+        $this->iniSet('error_reporting', -1);
+
+        try {
+            $handler = ErrorHandler::register();
+            $handler->throwAt(0, true);
+            $this->assertFalse($handler->handleError(0, 'foo', 'foo.php', 12, array()));
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            $handler = ErrorHandler::register();
+            $handler->throwAt(3, true);
+            $this->assertFalse($handler->handleError(4, 'foo', 'foo.php', 12, array()));
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            $handler = ErrorHandler::register();
+            $handler->throwAt(3, true);
+            try {
+                $handler->handleError(4, 'foo', 'foo.php', 12, array());
+            } catch (\ErrorException $e) {
+                $this->assertSame('Parse Error: foo', $e->getMessage());
+                $this->assertSame(4, $e->getSeverity());
+                $this->assertSame('foo.php', $e->getFile());
+                $this->assertSame(12, $e->getLine());
+            }
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            $handler = ErrorHandler::register();
+            $handler->throwAt(E_USER_DEPRECATED, true);
+            $this->assertFalse($handler->handleError(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array()));
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            $handler = ErrorHandler::register();
+            $handler->throwAt(E_DEPRECATED, true);
+            $this->assertFalse($handler->handleError(E_DEPRECATED, 'foo', 'foo.php', 12, array()));
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            $logger = $this->getMock('Psr\Log\LoggerInterface');
+
+            $that = $this;
+            $warnArgCheck = function ($logLevel, $message, $context) use ($that) {
+                $that->assertEquals('info', $logLevel);
+                $that->assertEquals('foo', $message);
+                $that->assertArrayHasKey('type', $context);
+                $that->assertEquals($context['type'], E_USER_DEPRECATED);
+                $that->assertArrayHasKey('stack', $context);
+                $that->assertInternalType('array', $context['stack']);
+            };
+
+            $logger
+                ->expects($this->once())
+                ->method('log')
+                ->will($this->returnCallback($warnArgCheck))
+            ;
+
+            $handler = ErrorHandler::register();
+            $handler->setDefaultLogger($logger, E_USER_DEPRECATED);
+            $this->assertTrue($handler->handleError(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array()));
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            $logger = $this->getMock('Psr\Log\LoggerInterface');
+
+            $that = $this;
+            $logArgCheck = function ($level, $message, $context) use ($that) {
+                $that->assertEquals('Undefined variable: undefVar', $message);
+                $that->assertArrayHasKey('type', $context);
+                $that->assertEquals($context['type'], E_NOTICE);
+            };
+
+            $logger
+                ->expects($this->once())
+                ->method('log')
+                ->will($this->returnCallback($logArgCheck))
+            ;
+
+            $handler = ErrorHandler::register();
+            $handler->setDefaultLogger($logger, E_NOTICE);
+            $handler->screamAt(E_NOTICE);
+            unset($undefVar);
+            @$undefVar++;
+
+            restore_error_handler();
+            restore_exception_handler();
+        } catch (\Exception $e) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $e;
+        }
+    }
+
+    public function testHandleException()
+    {
+        try {
+            $handler = ErrorHandler::register();
+
+            $exception = new \Exception('foo');
+
+            $logger = $this->getMock('Psr\Log\LoggerInterface');
+
+            $that = $this;
+            $logArgCheck = function ($level, $message, $context) use ($that) {
+                $that->assertEquals('Uncaught Exception: foo', $message);
+                $that->assertArrayHasKey('type', $context);
+                $that->assertEquals($context['type'], E_ERROR);
+            };
+
+            $logger
+                ->expects($this->exactly(2))
+                ->method('log')
+                ->will($this->returnCallback($logArgCheck))
+            ;
+
+            $handler->setDefaultLogger($logger, E_ERROR);
+
+            try {
+                $handler->handleException($exception);
+                $this->fail('Exception expected');
+            } catch (\Exception $e) {
+                $this->assertSame($exception, $e);
+            }
+
+            $that = $this;
+            $handler->setExceptionHandler(function ($e) use ($exception, $that) {
+                $that->assertSame($exception, $e);
+            });
+
+            $handler->handleException($exception);
+
+            restore_error_handler();
+            restore_exception_handler();
+        } catch (\Exception $e) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $e;
+        }
+    }
+
+    public function testHandleFatalError()
+    {
+        try {
+            $handler = ErrorHandler::register();
+
+            $error = array(
+                'type' => E_PARSE,
+                'message' => 'foo',
+                'file' => 'bar',
+                'line' => 123,
+            );
+
+            $logger = $this->getMock('Psr\Log\LoggerInterface');
+
+            $that = $this;
+            $logArgCheck = function ($level, $message, $context) use ($that) {
+                $that->assertEquals('Fatal Parse Error: foo', $message);
+                $that->assertArrayHasKey('type', $context);
+                $that->assertEquals($context['type'], E_ERROR);
+            };
+
+            $logger
+                ->expects($this->once())
+                ->method('log')
+                ->will($this->returnCallback($logArgCheck))
+            ;
+
+            $handler->setDefaultLogger($logger, E_ERROR);
+
+            $handler->handleFatalError($error);
+
+            restore_error_handler();
+            restore_exception_handler();
+        } catch (\Exception $e) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $e;
+        }
+    }
+
+    public function testLegacyInterface()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        try {
+            $handler = ErrorHandler::register(0);
+            $this->assertFalse($handler->handle(0, 'foo', 'foo.php', 12, array()));
+
+            restore_error_handler();
+            restore_exception_handler();
+
+            $logger = $this->getMock('Psr\Log\LoggerInterface');
+
+            $that = $this;
+            $logArgCheck = function ($level, $message, $context) use ($that) {
+                $that->assertEquals('Undefined variable: undefVar', $message);
+                $that->assertArrayHasKey('type', $context);
+                $that->assertEquals($context['type'], E_NOTICE);
+            };
+
+            $logger
+                ->expects($this->once())
+                ->method('log')
+                ->will($this->returnCallback($logArgCheck))
+            ;
+
+            $handler = ErrorHandler::register(E_NOTICE);
+            $handler->setLogger($logger, 'scream');
+            unset($undefVar);
+            @$undefVar++;
+
+            restore_error_handler();
+            restore_exception_handler();
+        } catch (\Exception $e) {
+            restore_error_handler();
+            restore_exception_handler();
+
+            throw $e;
+        }
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..923c47ffa0738d2dd877dd9fff949e2960873af2
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php
@@ -0,0 +1,256 @@
+<?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\Debug\Tests\Exception;
+
+use Symfony\Component\Debug\Exception\FlattenException;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
+use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
+use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
+use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
+use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
+use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
+use Symfony\Component\HttpKernel\Exception\GoneHttpException;
+use Symfony\Component\HttpKernel\Exception\LengthRequiredHttpException;
+use Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException;
+use Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException;
+use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException;
+use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
+use Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException;
+
+class FlattenExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    public function testStatusCode()
+    {
+        $flattened = FlattenException::create(new \RuntimeException(), 403);
+        $this->assertEquals('403', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new \RuntimeException());
+        $this->assertEquals('500', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new NotFoundHttpException());
+        $this->assertEquals('404', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new UnauthorizedHttpException('Basic realm="My Realm"'));
+        $this->assertEquals('401', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new BadRequestHttpException());
+        $this->assertEquals('400', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new NotAcceptableHttpException());
+        $this->assertEquals('406', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new ConflictHttpException());
+        $this->assertEquals('409', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new MethodNotAllowedHttpException(array('POST')));
+        $this->assertEquals('405', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new AccessDeniedHttpException());
+        $this->assertEquals('403', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new GoneHttpException());
+        $this->assertEquals('410', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new LengthRequiredHttpException());
+        $this->assertEquals('411', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new PreconditionFailedHttpException());
+        $this->assertEquals('412', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new PreconditionRequiredHttpException());
+        $this->assertEquals('428', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new ServiceUnavailableHttpException());
+        $this->assertEquals('503', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new TooManyRequestsHttpException());
+        $this->assertEquals('429', $flattened->getStatusCode());
+
+        $flattened = FlattenException::create(new UnsupportedMediaTypeHttpException());
+        $this->assertEquals('415', $flattened->getStatusCode());
+    }
+
+    public function testHeadersForHttpException()
+    {
+        $flattened = FlattenException::create(new MethodNotAllowedHttpException(array('POST')));
+        $this->assertEquals(array('Allow' => 'POST'), $flattened->getHeaders());
+
+        $flattened = FlattenException::create(new UnauthorizedHttpException('Basic realm="My Realm"'));
+        $this->assertEquals(array('WWW-Authenticate' => 'Basic realm="My Realm"'), $flattened->getHeaders());
+
+        $flattened = FlattenException::create(new ServiceUnavailableHttpException('Fri, 31 Dec 1999 23:59:59 GMT'));
+        $this->assertEquals(array('Retry-After' => 'Fri, 31 Dec 1999 23:59:59 GMT'), $flattened->getHeaders());
+
+        $flattened = FlattenException::create(new ServiceUnavailableHttpException(120));
+        $this->assertEquals(array('Retry-After' => 120), $flattened->getHeaders());
+
+        $flattened = FlattenException::create(new TooManyRequestsHttpException('Fri, 31 Dec 1999 23:59:59 GMT'));
+        $this->assertEquals(array('Retry-After' => 'Fri, 31 Dec 1999 23:59:59 GMT'), $flattened->getHeaders());
+
+        $flattened = FlattenException::create(new TooManyRequestsHttpException(120));
+        $this->assertEquals(array('Retry-After' => 120), $flattened->getHeaders());
+    }
+
+    /**
+     * @dataProvider flattenDataProvider
+     */
+    public function testFlattenHttpException(\Exception $exception, $statusCode)
+    {
+        $flattened = FlattenException::create($exception);
+        $flattened2 = FlattenException::create($exception);
+
+        $flattened->setPrevious($flattened2);
+
+        $this->assertEquals($exception->getMessage(), $flattened->getMessage(), 'The message is copied from the original exception.');
+        $this->assertEquals($exception->getCode(), $flattened->getCode(), 'The code is copied from the original exception.');
+        $this->assertInstanceOf($flattened->getClass(), $exception, 'The class is set to the class of the original exception');
+    }
+
+    /**
+     * @dataProvider flattenDataProvider
+     */
+    public function testPrevious(\Exception $exception, $statusCode)
+    {
+        $flattened = FlattenException::create($exception);
+        $flattened2 = FlattenException::create($exception);
+
+        $flattened->setPrevious($flattened2);
+
+        $this->assertSame($flattened2, $flattened->getPrevious());
+
+        $this->assertSame(array($flattened2), $flattened->getAllPrevious());
+    }
+
+    /**
+     * @dataProvider flattenDataProvider
+     */
+    public function testLine(\Exception $exception)
+    {
+        $flattened = FlattenException::create($exception);
+        $this->assertSame($exception->getLine(), $flattened->getLine());
+    }
+
+    /**
+     * @dataProvider flattenDataProvider
+     */
+    public function testFile(\Exception $exception)
+    {
+        $flattened = FlattenException::create($exception);
+        $this->assertSame($exception->getFile(), $flattened->getFile());
+    }
+
+    /**
+     * @dataProvider flattenDataProvider
+     */
+    public function testToArray(\Exception $exception, $statusCode)
+    {
+        $flattened = FlattenException::create($exception);
+        $flattened->setTrace(array(), 'foo.php', 123);
+
+        $this->assertEquals(array(
+            array(
+                'message' => 'test',
+                'class' => 'Exception',
+                'trace' => array(array(
+                    'namespace' => '', 'short_class' => '', 'class' => '', 'type' => '', 'function' => '', 'file' => 'foo.php', 'line' => 123,
+                    'args' => array(),
+                )),
+            ),
+        ), $flattened->toArray());
+    }
+
+    public function flattenDataProvider()
+    {
+        return array(
+            array(new \Exception('test', 123), 500),
+        );
+    }
+
+    public function testRecursionInArguments()
+    {
+        $a = array('foo', array(2, &$a));
+        $exception = $this->createException($a);
+
+        $flattened = FlattenException::create($exception);
+        $trace = $flattened->getTrace();
+        $this->assertContains('*DEEP NESTED ARRAY*', serialize($trace));
+    }
+
+    public function testTooBigArray()
+    {
+        $a = array();
+        for ($i = 0; $i < 20; $i++) {
+            for ($j = 0; $j < 50; $j++) {
+                for ($k = 0; $k < 10; $k++) {
+                    $a[$i][$j][$k] = 'value';
+                }
+            }
+        }
+        $a[20] = 'value';
+        $a[21] = 'value1';
+        $exception = $this->createException($a);
+
+        $flattened = FlattenException::create($exception);
+        $trace = $flattened->getTrace();
+        $serializeTrace = serialize($trace);
+
+        $this->assertContains('*SKIPPED over 10000 entries*', $serializeTrace);
+        $this->assertNotContains('*value1*', $serializeTrace);
+    }
+
+    private function createException($foo)
+    {
+        return new \Exception();
+    }
+
+    public function testSetTraceIncompleteClass()
+    {
+        $flattened = FlattenException::create(new \Exception('test', 123));
+        $flattened->setTrace(
+            array(
+                array(
+                    'file' => __FILE__,
+                    'line' => 123,
+                    'function' => 'test',
+                    'args' => array(
+                        unserialize('O:14:"BogusTestClass":0:{}'),
+                    ),
+                ),
+            ),
+            'foo.php', 123
+        );
+
+        $this->assertEquals(array(
+            array(
+                'message' => 'test',
+                'class' => 'Exception',
+                'trace' => array(
+                    array(
+                        'namespace' => '', 'short_class' => '', 'class' => '', 'type' => '', 'function' => '',
+                        'file' => 'foo.php', 'line' => 123,
+                        'args' => array(),
+                    ),
+                    array(
+                        'namespace' => '', 'short_class' => '', 'class' => '', 'type' => '', 'function' => 'test',
+                        'file' => __FILE__, 'line' => 123,
+                        'args' => array(
+                            array(
+                                'incomplete-object', 'BogusTestClass',
+                            ),
+                        ),
+                    ),
+                ),
+            ),
+        ), $flattened->toArray());
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ExceptionHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ExceptionHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..26f889288ff93221d38dbf18c17c98c9c04bf44b
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/ExceptionHandlerTest.php
@@ -0,0 +1,116 @@
+<?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\Debug\Tests;
+
+use Symfony\Component\Debug\ExceptionHandler;
+use Symfony\Component\Debug\Exception\OutOfMemoryException;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
+
+class ExceptionHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDebug()
+    {
+        $handler = new ExceptionHandler(false);
+        $response = $handler->createResponse(new \RuntimeException('Foo'));
+
+        $this->assertContains('<h1>Whoops, looks like something went wrong.</h1>', $response->getContent());
+        $this->assertNotContains('<h2 class="block_exception clear_fix">', $response->getContent());
+
+        $handler = new ExceptionHandler(true);
+        $response = $handler->createResponse(new \RuntimeException('Foo'));
+
+        $this->assertContains('<h1>Whoops, looks like something went wrong.</h1>', $response->getContent());
+        $this->assertContains('<h2 class="block_exception clear_fix">', $response->getContent());
+    }
+
+    public function testStatusCode()
+    {
+        $handler = new ExceptionHandler(false);
+
+        $response = $handler->createResponse(new \RuntimeException('Foo'));
+        $this->assertEquals('500', $response->getStatusCode());
+        $this->assertContains('Whoops, looks like something went wrong.', $response->getContent());
+
+        $response = $handler->createResponse(new NotFoundHttpException('Foo'));
+        $this->assertEquals('404', $response->getStatusCode());
+        $this->assertContains('Sorry, the page you are looking for could not be found.', $response->getContent());
+    }
+
+    public function testHeaders()
+    {
+        $handler = new ExceptionHandler(false);
+
+        $response = $handler->createResponse(new MethodNotAllowedHttpException(array('POST')));
+        $this->assertEquals('405', $response->getStatusCode());
+        $this->assertEquals('POST', $response->headers->get('Allow'));
+    }
+
+    public function testNestedExceptions()
+    {
+        $handler = new ExceptionHandler(true);
+        $response = $handler->createResponse(new \RuntimeException('Foo', 0, new \RuntimeException('Bar')));
+    }
+
+    public function testHandle()
+    {
+        $exception = new \Exception('foo');
+
+        if (class_exists('Symfony\Component\HttpFoundation\Response')) {
+            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('createResponse'));
+            $handler
+                ->expects($this->exactly(2))
+                ->method('createResponse')
+                ->will($this->returnValue(new Response()));
+        } else {
+            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('sendPhpResponse'));
+            $handler
+                ->expects($this->exactly(2))
+                ->method('sendPhpResponse');
+        }
+
+        $handler->handle($exception);
+
+        $that = $this;
+        $handler->setHandler(function ($e) use ($exception, $that) {
+            $that->assertSame($exception, $e);
+        });
+
+        $handler->handle($exception);
+    }
+
+    public function testHandleOutOfMemoryException()
+    {
+        $exception = new OutOfMemoryException('foo', 0, E_ERROR, __FILE__, __LINE__);
+
+        if (class_exists('Symfony\Component\HttpFoundation\Response')) {
+            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('createResponse'));
+            $handler
+                ->expects($this->once())
+                ->method('createResponse')
+                ->will($this->returnValue(new Response()));
+        } else {
+            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('sendPhpResponse'));
+            $handler
+                ->expects($this->once())
+                ->method('sendPhpResponse');
+        }
+
+        $that = $this;
+        $handler->setHandler(function ($e) use ($that) {
+            $that->fail('OutOfMemoryException should bypass the handler');
+        });
+
+        $handler->handle($exception);
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ae6fc4f648ff752a1cfad5c22619de86bed0b5d
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
@@ -0,0 +1,179 @@
+<?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\Debug\Tests\FatalErrorHandler;
+
+use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader;
+use Symfony\Component\ClassLoader\UniversalClassLoader as SymfonyUniversalClassLoader;
+use Symfony\Component\Debug\Exception\FatalErrorException;
+use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler;
+
+class ClassNotFoundFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider provideClassNotFoundData
+     */
+    public function testHandleClassNotFound($error, $translatedMessage)
+    {
+        $handler = new ClassNotFoundFatalErrorHandler();
+
+        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
+
+        $this->assertInstanceof('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
+        $this->assertSame($translatedMessage, $exception->getMessage());
+        $this->assertSame($error['type'], $exception->getSeverity());
+        $this->assertSame($error['file'], $exception->getFile());
+        $this->assertSame($error['line'], $exception->getLine());
+    }
+
+    /**
+     * @dataProvider provideLegacyClassNotFoundData
+     */
+    public function testLegacyHandleClassNotFound($error, $translatedMessage, $autoloader)
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        // Unregister all autoloaders to ensure the custom provided
+        // autoloader is the only one to be used during the test run.
+        $autoloaders = spl_autoload_functions();
+        array_map('spl_autoload_unregister', $autoloaders);
+        spl_autoload_register($autoloader);
+
+        $handler = new ClassNotFoundFatalErrorHandler();
+
+        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
+
+        spl_autoload_unregister($autoloader);
+        array_map('spl_autoload_register', $autoloaders);
+
+        $this->assertInstanceof('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
+        $this->assertSame($translatedMessage, $exception->getMessage());
+        $this->assertSame($error['type'], $exception->getSeverity());
+        $this->assertSame($error['file'], $exception->getFile());
+        $this->assertSame($error['line'], $exception->getLine());
+    }
+
+    public function provideClassNotFoundData()
+    {
+        return array(
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'WhizBangFactory\' not found',
+                ),
+                "Attempted to load class \"WhizBangFactory\" from the global namespace.\nDid you forget a \"use\" statement?",
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'Foo\\Bar\\WhizBangFactory\' not found',
+                ),
+                "Attempted to load class \"WhizBangFactory\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'UndefinedFunctionException\' not found',
+                ),
+                "Attempted to load class \"UndefinedFunctionException\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'PEARClass\' not found',
+                ),
+                "Attempted to load class \"PEARClass\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony_Component_Debug_Tests_Fixtures_PEARClass\"?",
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
+                ),
+                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+            ),
+        );
+    }
+
+    public function provideLegacyClassNotFoundData()
+    {
+        $prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
+
+        $symfonyAutoloader = new SymfonyClassLoader();
+        $symfonyAutoloader->addPrefixes($prefixes);
+
+        $symfonyUniversalClassLoader = new SymfonyUniversalClassLoader();
+        $symfonyUniversalClassLoader->registerPrefixes($prefixes);
+
+        return array(
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
+                ),
+                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+                array($symfonyAutoloader, 'loadClass'),
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
+                ),
+                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+                array($symfonyUniversalClassLoader, 'loadClass'),
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
+                ),
+                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
+                function ($className) { /* do nothing here */ },
+            ),
+        );
+    }
+
+    public function testCannotRedeclareClass()
+    {
+        if (!file_exists(__DIR__.'/../FIXTURES/REQUIREDTWICE.PHP')) {
+            $this->markTestSkipped('Can only be run on case insensitive filesystems');
+        }
+
+        require_once __DIR__.'/../FIXTURES/REQUIREDTWICE.PHP';
+
+        $error = array(
+            'type' => 1,
+            'line' => 12,
+            'file' => 'foo.php',
+            'message' => 'Class \'Foo\\Bar\\RequiredTwice\' not found',
+        );
+
+        $handler = new ClassNotFoundFatalErrorHandler();
+        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
+
+        $this->assertInstanceof('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/UndefinedFunctionFatalErrorHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/UndefinedFunctionFatalErrorHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ffe9edb062f5a996e355d9d60686417fce6568d4
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/UndefinedFunctionFatalErrorHandlerTest.php
@@ -0,0 +1,80 @@
+<?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\Debug\Tests\FatalErrorHandler;
+
+use Symfony\Component\Debug\Exception\FatalErrorException;
+use Symfony\Component\Debug\FatalErrorHandler\UndefinedFunctionFatalErrorHandler;
+
+class UndefinedFunctionFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider provideUndefinedFunctionData
+     */
+    public function testUndefinedFunction($error, $translatedMessage)
+    {
+        $handler = new UndefinedFunctionFatalErrorHandler();
+        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
+
+        $this->assertInstanceof('Symfony\Component\Debug\Exception\UndefinedFunctionException', $exception);
+        // class names are case insensitive and PHP/HHVM do not return the same
+        $this->assertSame(strtolower($translatedMessage), strtolower($exception->getMessage()));
+        $this->assertSame($error['type'], $exception->getSeverity());
+        $this->assertSame($error['file'], $exception->getFile());
+        $this->assertSame($error['line'], $exception->getLine());
+    }
+
+    public function provideUndefinedFunctionData()
+    {
+        return array(
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Call to undefined function test_namespaced_function()',
+                ),
+                "Attempted to call function \"test_namespaced_function\" from the global namespace.\nDid you mean to call \"\\symfony\\component\\debug\\tests\\fatalerrorhandler\\test_namespaced_function\"?",
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Call to undefined function Foo\\Bar\\Baz\\test_namespaced_function()',
+                ),
+                "Attempted to call function \"test_namespaced_function\" from namespace \"Foo\\Bar\\Baz\".\nDid you mean to call \"\\symfony\\component\\debug\\tests\\fatalerrorhandler\\test_namespaced_function\"?",
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Call to undefined function foo()',
+                ),
+                'Attempted to call function "foo" from the global namespace.',
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Call to undefined function Foo\\Bar\\Baz\\foo()',
+                ),
+                'Attempted to call function "foo" from namespace "Foo\Bar\Baz".',
+            ),
+        );
+    }
+}
+
+function test_namespaced_function()
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/UndefinedMethodFatalErrorHandlerTest.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/UndefinedMethodFatalErrorHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7837d1daa67f5bb923afe5c12d40d8a6b000c189
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/FatalErrorHandler/UndefinedMethodFatalErrorHandlerTest.php
@@ -0,0 +1,66 @@
+<?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\Debug\Tests\FatalErrorHandler;
+
+use Symfony\Component\Debug\Exception\FatalErrorException;
+use Symfony\Component\Debug\FatalErrorHandler\UndefinedMethodFatalErrorHandler;
+
+class UndefinedMethodFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider provideUndefinedMethodData
+     */
+    public function testUndefinedMethod($error, $translatedMessage)
+    {
+        $handler = new UndefinedMethodFatalErrorHandler();
+        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
+
+        $this->assertInstanceof('Symfony\Component\Debug\Exception\UndefinedMethodException', $exception);
+        $this->assertSame($translatedMessage, $exception->getMessage());
+        $this->assertSame($error['type'], $exception->getSeverity());
+        $this->assertSame($error['file'], $exception->getFile());
+        $this->assertSame($error['line'], $exception->getLine());
+    }
+
+    public function provideUndefinedMethodData()
+    {
+        return array(
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Call to undefined method SplObjectStorage::what()',
+                ),
+                'Attempted to call method "what" on class "SplObjectStorage".',
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Call to undefined method SplObjectStorage::walid()',
+                ),
+                "Attempted to call method \"walid\" on class \"SplObjectStorage\".\nDid you mean to call \"valid\"?",
+            ),
+            array(
+                array(
+                    'type' => 1,
+                    'line' => 12,
+                    'file' => 'foo.php',
+                    'message' => 'Call to undefined method SplObjectStorage::offsetFet()',
+                ),
+                "Attempted to call method \"offsetFet\" on class \"SplObjectStorage\".\nDid you mean to call e.g. \"offsetGet\", \"offsetSet\" or \"offsetUnset\"?",
+            ),
+        );
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/ClassAlias.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/ClassAlias.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d6dbaa7124feba20de910abbff2abd49c833650
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/ClassAlias.php
@@ -0,0 +1,3 @@
+<?php
+
+class_alias('Symfony\Component\Debug\Tests\Fixtures\NotPSR0bis', 'Symfony\Component\Debug\Tests\Fixtures\ClassAlias');
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/PEARClass.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/PEARClass.php
new file mode 100644
index 0000000000000000000000000000000000000000..39f228182e0fac756ac32a559b87c0a8d27de9ae
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/PEARClass.php
@@ -0,0 +1,5 @@
+<?php
+
+class Symfony_Component_Debug_Tests_Fixtures_PEARClass
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/RequiredTwice.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/RequiredTwice.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c42d67b8a94d8d41086ff1df37033f98cc50e6a
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/RequiredTwice.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Symfony\Component\Debug\Tests\Fixtures;
+
+class RequiredTwice
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/casemismatch.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/casemismatch.php
new file mode 100644
index 0000000000000000000000000000000000000000..691d660fd1d5b8d7e367b73eb1243c5d05a4a48a
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/casemismatch.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Symfony\Component\Debug\Tests\Fixtures;
+
+class CaseMismatch
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/notPsr0Bis.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/notPsr0Bis.php
new file mode 100644
index 0000000000000000000000000000000000000000..4cf526719a6e67772a5cb6341240af869a6f80f0
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/notPsr0Bis.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Symfony\Component\Debug\Tests\Fixtures;
+
+class NotPSR0bis
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/psr4/Psr4CaseMismatch.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/psr4/Psr4CaseMismatch.php
new file mode 100644
index 0000000000000000000000000000000000000000..ec48dd22b4999740f606972241278208b2da9aed
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/psr4/Psr4CaseMismatch.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Symfony\Component\Debug\Tests\Fixtures;
+
+class PSR4CaseMismatch
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/reallyNotPsr0.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/reallyNotPsr0.php
new file mode 100644
index 0000000000000000000000000000000000000000..8554725aa8b3b6605d75899c0496c10876cc4aab
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/Fixtures/reallyNotPsr0.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Symfony\Component\Debug\Tests\Fixtures;
+
+class NotPSR0
+{
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/MockExceptionHandler.php b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/MockExceptionHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..a85d2d15e7131e290c3dc6e1972ad8707567125c
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/Tests/MockExceptionHandler.php
@@ -0,0 +1,24 @@
+<?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\Debug\Tests;
+
+use Symfony\Component\Debug\ExceptionHandler;
+
+class MockExceptionHandler extends Exceptionhandler
+{
+    public $e;
+
+    public function handle(\Exception $e)
+    {
+        $this->e = $e;
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/composer.json b/core/vendor/symfony/debug/Symfony/Component/Debug/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..67eb92468097296047518df1a4ed18d892318639
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/composer.json
@@ -0,0 +1,41 @@
+{
+    "name": "symfony/debug",
+    "type": "library",
+    "description": "Symfony Debug Component",
+    "keywords": [],
+    "homepage": "http://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "http://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.3",
+        "psr/log": "~1.0"
+    },
+    "require-dev": {
+        "symfony/class-loader": "~2.2",
+        "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2",
+        "symfony/http-foundation": "~2.1"
+    },
+    "suggest": {
+        "symfony/http-foundation": "",
+        "symfony/http-kernel": ""
+    },
+    "autoload": {
+        "psr-0": { "Symfony\\Component\\Debug\\": "" }
+    },
+    "target-dir": "Symfony/Component/Debug",
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.6-dev"
+        }
+    }
+}
diff --git a/core/vendor/symfony/debug/Symfony/Component/Debug/phpunit.xml.dist b/core/vendor/symfony/debug/Symfony/Component/Debug/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..269ca991b749fc193636fb0f476fdcd9ae120c65
--- /dev/null
+++ b/core/vendor/symfony/debug/Symfony/Component/Debug/phpunit.xml.dist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
+         backupGlobals="false"
+         colors="true"
+         bootstrap="vendor/autoload.php"
+>
+    <php>
+        <!-- Silence E_USER_DEPRECATED (-16385 == -1 & ~E_USER_DEPRECATED) -->
+        <ini name="error_reporting" value="-16385"/>
+    </php>
+    <testsuites>
+        <testsuite name="Symfony Debug Component Test Suite">
+            <directory>./Tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./</directory>
+            <exclude>
+                <directory>./Tests</directory>
+                <directory>./vendor</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/core/vendor/symfony/debug/Tests/DebugClassLoaderTest.php b/core/vendor/symfony/debug/Tests/DebugClassLoaderTest.php
deleted file mode 100644
index a368a7d25704a72e7bfb0c4e0363d6c4e3081078..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/DebugClassLoaderTest.php
+++ /dev/null
@@ -1,296 +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\Debug\Tests;
-
-use Symfony\Component\Debug\DebugClassLoader;
-use Symfony\Component\Debug\ErrorHandler;
-use Symfony\Component\Debug\Exception\ContextErrorException;
-
-class DebugClassLoaderTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var int Error reporting level before running tests.
-     */
-    private $errorReporting;
-
-    private $loader;
-
-    protected function setUp()
-    {
-        $this->errorReporting = error_reporting(E_ALL | E_STRICT);
-        $this->loader = new ClassLoader();
-        spl_autoload_register(array($this->loader, 'loadClass'), true, true);
-        DebugClassLoader::enable();
-    }
-
-    protected function tearDown()
-    {
-        DebugClassLoader::disable();
-        spl_autoload_unregister(array($this->loader, 'loadClass'));
-        error_reporting($this->errorReporting);
-    }
-
-    public function testIdempotence()
-    {
-        DebugClassLoader::enable();
-
-        $functions = spl_autoload_functions();
-        foreach ($functions as $function) {
-            if (is_array($function) && $function[0] instanceof DebugClassLoader) {
-                $reflClass = new \ReflectionClass($function[0]);
-                $reflProp = $reflClass->getProperty('classLoader');
-                $reflProp->setAccessible(true);
-
-                $this->assertNotInstanceOf('Symfony\Component\Debug\DebugClassLoader', $reflProp->getValue($function[0]));
-
-                return;
-            }
-        }
-
-        $this->fail('DebugClassLoader did not register');
-    }
-
-    public function testUnsilencing()
-    {
-        if (PHP_VERSION_ID >= 70000) {
-            $this->markTestSkipped('PHP7 throws exceptions, unsilencing is not required anymore.');
-        }
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM is not handled in this test case.');
-        }
-
-        ob_start();
-
-        $this->iniSet('log_errors', 0);
-        $this->iniSet('display_errors', 1);
-
-        // See below: this will fail with parse error
-        // but this should not be @-silenced.
-        @class_exists(__NAMESPACE__.'\TestingUnsilencing', true);
-
-        $output = ob_get_clean();
-
-        $this->assertStringMatchesFormat('%aParse error%a', $output);
-    }
-
-    public function testStacking()
-    {
-        // the ContextErrorException must not be loaded to test the workaround
-        // for https://bugs.php.net/65322.
-        if (class_exists('Symfony\Component\Debug\Exception\ContextErrorException', false)) {
-            $this->markTestSkipped('The ContextErrorException class is already loaded.');
-        }
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM is not handled in this test case.');
-        }
-
-        ErrorHandler::register();
-
-        try {
-            // Trigger autoloading + E_STRICT at compile time
-            // which in turn triggers $errorHandler->handle()
-            // that again triggers autoloading for ContextErrorException.
-            // Error stacking works around the bug above and everything is fine.
-
-            eval('
-                namespace '.__NAMESPACE__.';
-                class ChildTestingStacking extends TestingStacking { function foo($bar) {} }
-            ');
-            $this->fail('ContextErrorException expected');
-        } catch (\ErrorException $exception) {
-            // if an exception is thrown, the test passed
-            restore_error_handler();
-            restore_exception_handler();
-            $this->assertStringStartsWith(__FILE__, $exception->getFile());
-            if (PHP_VERSION_ID < 70000) {
-                $this->assertRegExp('/^Runtime Notice: Declaration/', $exception->getMessage());
-                $this->assertEquals(E_STRICT, $exception->getSeverity());
-            } else {
-                $this->assertRegExp('/^Warning: Declaration/', $exception->getMessage());
-                $this->assertEquals(E_WARNING, $exception->getSeverity());
-            }
-        } catch (\Exception $exception) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $exception;
-        }
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testNameCaseMismatch()
-    {
-        class_exists(__NAMESPACE__.'\TestingCaseMismatch', true);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Case mismatch between class and source file names
-     */
-    public function testFileCaseMismatch()
-    {
-        if (!file_exists(__DIR__.'/Fixtures/CaseMismatch.php')) {
-            $this->markTestSkipped('Can only be run on case insensitive filesystems');
-        }
-
-        class_exists(__NAMESPACE__.'\Fixtures\CaseMismatch', true);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testPsr4CaseMismatch()
-    {
-        class_exists(__NAMESPACE__.'\Fixtures\Psr4CaseMismatch', true);
-    }
-
-    public function testNotPsr0()
-    {
-        $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\NotPSR0', true));
-    }
-
-    public function testNotPsr0Bis()
-    {
-        $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\NotPSR0bis', true));
-    }
-
-    public function testClassAlias()
-    {
-        $this->assertTrue(class_exists(__NAMESPACE__.'\Fixtures\ClassAlias', true));
-    }
-
-    /**
-     * @dataProvider provideDeprecatedSuper
-     */
-    public function testDeprecatedSuper($class, $super, $type)
-    {
-        set_error_handler('var_dump', 0);
-        $e = error_reporting(0);
-        trigger_error('', E_USER_DEPRECATED);
-
-        class_exists('Test\\'.__NAMESPACE__.'\\'.$class, true);
-
-        error_reporting($e);
-        restore_error_handler();
-
-        $lastError = error_get_last();
-        unset($lastError['file'], $lastError['line']);
-
-        $xError = array(
-            'type' => E_USER_DEPRECATED,
-            'message' => 'The Test\Symfony\Component\Debug\Tests\\'.$class.' class '.$type.' Symfony\Component\Debug\Tests\Fixtures\\'.$super.' that is deprecated but this is a test deprecation notice.',
-        );
-
-        $this->assertSame($xError, $lastError);
-    }
-
-    public function provideDeprecatedSuper()
-    {
-        return array(
-            array('DeprecatedInterfaceClass', 'DeprecatedInterface', 'implements'),
-            array('DeprecatedParentClass', 'DeprecatedClass', 'extends'),
-        );
-    }
-
-    public function testDeprecatedSuperInSameNamespace()
-    {
-        set_error_handler('var_dump', 0);
-        $e = error_reporting(0);
-        trigger_error('', E_USER_NOTICE);
-
-        class_exists('Symfony\Bridge\Debug\Tests\Fixtures\ExtendsDeprecatedParent', true);
-
-        error_reporting($e);
-        restore_error_handler();
-
-        $lastError = error_get_last();
-        unset($lastError['file'], $lastError['line']);
-
-        $xError = array(
-            'type' => E_USER_NOTICE,
-            'message' => '',
-        );
-
-        $this->assertSame($xError, $lastError);
-    }
-
-    public function testReservedForPhp7()
-    {
-        if (PHP_VERSION_ID >= 70000) {
-            $this->markTestSkipped('PHP7 already prevents using reserved names.');
-        }
-
-        set_error_handler('var_dump', 0);
-        $e = error_reporting(0);
-        trigger_error('', E_USER_NOTICE);
-
-        class_exists('Test\\'.__NAMESPACE__.'\\Float', true);
-
-        error_reporting($e);
-        restore_error_handler();
-
-        $lastError = error_get_last();
-        unset($lastError['file'], $lastError['line']);
-
-        $xError = array(
-            'type' => E_USER_DEPRECATED,
-            'message' => 'Test\Symfony\Component\Debug\Tests\Float uses a reserved class name (Float) that will break on PHP 7 and higher',
-        );
-
-        $this->assertSame($xError, $lastError);
-    }
-}
-
-class ClassLoader
-{
-    public function loadClass($class)
-    {
-    }
-
-    public function getClassMap()
-    {
-        return array(__NAMESPACE__.'\Fixtures\NotPSR0bis' => __DIR__.'/Fixtures/notPsr0Bis.php');
-    }
-
-    public function findFile($class)
-    {
-        $fixtureDir = __DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR;
-
-        if (__NAMESPACE__.'\TestingUnsilencing' === $class) {
-            eval('-- parse error --');
-        } elseif (__NAMESPACE__.'\TestingStacking' === $class) {
-            eval('namespace '.__NAMESPACE__.'; class TestingStacking { function foo() {} }');
-        } elseif (__NAMESPACE__.'\TestingCaseMismatch' === $class) {
-            eval('namespace '.__NAMESPACE__.'; class TestingCaseMisMatch {}');
-        } elseif (__NAMESPACE__.'\Fixtures\CaseMismatch' === $class) {
-            return $fixtureDir.'CaseMismatch.php';
-        } elseif (__NAMESPACE__.'\Fixtures\Psr4CaseMismatch' === $class) {
-            return $fixtureDir.'psr4'.DIRECTORY_SEPARATOR.'Psr4CaseMismatch.php';
-        } elseif (__NAMESPACE__.'\Fixtures\NotPSR0' === $class) {
-            return $fixtureDir.'reallyNotPsr0.php';
-        } elseif (__NAMESPACE__.'\Fixtures\NotPSR0bis' === $class) {
-            return $fixtureDir.'notPsr0Bis.php';
-        } elseif (__NAMESPACE__.'\Fixtures\DeprecatedInterface' === $class) {
-            return $fixtureDir.'DeprecatedInterface.php';
-        } elseif ('Symfony\Bridge\Debug\Tests\Fixtures\ExtendsDeprecatedParent' === $class) {
-            eval('namespace Symfony\Bridge\Debug\Tests\Fixtures; class ExtendsDeprecatedParent extends \\'.__NAMESPACE__.'\Fixtures\DeprecatedClass {}');
-        } elseif ('Test\\'.__NAMESPACE__.'\DeprecatedParentClass' === $class) {
-            eval('namespace Test\\'.__NAMESPACE__.'; class DeprecatedParentClass extends \\'.__NAMESPACE__.'\Fixtures\DeprecatedClass {}');
-        } elseif ('Test\\'.__NAMESPACE__.'\DeprecatedInterfaceClass' === $class) {
-            eval('namespace Test\\'.__NAMESPACE__.'; class DeprecatedInterfaceClass implements \\'.__NAMESPACE__.'\Fixtures\DeprecatedInterface {}');
-        } elseif ('Test\\'.__NAMESPACE__.'\Float' === $class) {
-            eval('namespace Test\\'.__NAMESPACE__.'; class Float {}');
-        }
-    }
-}
diff --git a/core/vendor/symfony/debug/Tests/ErrorHandlerTest.php b/core/vendor/symfony/debug/Tests/ErrorHandlerTest.php
deleted file mode 100644
index 5d521a143478f5878ec7af14cc21210280e68d95..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/ErrorHandlerTest.php
+++ /dev/null
@@ -1,481 +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\Debug\Tests;
-
-use Psr\Log\LogLevel;
-use Symfony\Component\Debug\ErrorHandler;
-use Symfony\Component\Debug\Exception\ContextErrorException;
-
-/**
- * ErrorHandlerTest.
- *
- * @author Robert SchÃ¶nthal <seroscho@googlemail.com>
- * @author Nicolas Grekas <p@tchwork.com>
- */
-class ErrorHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    public function testRegister()
-    {
-        $handler = ErrorHandler::register();
-
-        try {
-            $this->assertInstanceOf('Symfony\Component\Debug\ErrorHandler', $handler);
-            $this->assertSame($handler, ErrorHandler::register());
-
-            $newHandler = new ErrorHandler();
-
-            $this->assertSame($newHandler, ErrorHandler::register($newHandler, false));
-            $h = set_error_handler('var_dump');
-            restore_error_handler();
-            $this->assertSame(array($handler, 'handleError'), $h);
-
-            try {
-                $this->assertSame($newHandler, ErrorHandler::register($newHandler, true));
-                $h = set_error_handler('var_dump');
-                restore_error_handler();
-                $this->assertSame(array($newHandler, 'handleError'), $h);
-            } catch (\Exception $e) {
-            }
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            if (isset($e)) {
-                throw $e;
-            }
-        } catch (\Exception $e) {
-        }
-
-        restore_error_handler();
-        restore_exception_handler();
-
-        if (isset($e)) {
-            throw $e;
-        }
-    }
-
-    public function testNotice()
-    {
-        ErrorHandler::register();
-
-        try {
-            self::triggerNotice($this);
-            $this->fail('ContextErrorException expected');
-        } catch (ContextErrorException $exception) {
-            // if an exception is thrown, the test passed
-            restore_error_handler();
-            restore_exception_handler();
-
-            $this->assertEquals(E_NOTICE, $exception->getSeverity());
-            $this->assertEquals(__FILE__, $exception->getFile());
-            $this->assertRegExp('/^Notice: Undefined variable: (foo|bar)/', $exception->getMessage());
-            $this->assertArrayHasKey('foobar', $exception->getContext());
-
-            $trace = $exception->getTrace();
-            $this->assertEquals(__FILE__, $trace[0]['file']);
-            $this->assertEquals('Symfony\Component\Debug\ErrorHandler', $trace[0]['class']);
-            $this->assertEquals('handleError', $trace[0]['function']);
-            $this->assertEquals('->', $trace[0]['type']);
-
-            $this->assertEquals(__FILE__, $trace[1]['file']);
-            $this->assertEquals(__CLASS__, $trace[1]['class']);
-            $this->assertEquals('triggerNotice', $trace[1]['function']);
-            $this->assertEquals('::', $trace[1]['type']);
-
-            $this->assertEquals(__FILE__, $trace[1]['file']);
-            $this->assertEquals(__CLASS__, $trace[2]['class']);
-            $this->assertEquals(__FUNCTION__, $trace[2]['function']);
-            $this->assertEquals('->', $trace[2]['type']);
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    // dummy function to test trace in error handler.
-    private static function triggerNotice($that)
-    {
-        // dummy variable to check for in error handler.
-        $foobar = 123;
-        $that->assertSame('', $foo.$foo.$bar);
-    }
-
-    public function testConstruct()
-    {
-        try {
-            $handler = ErrorHandler::register();
-            $handler->throwAt(3, true);
-            $this->assertEquals(3 | E_RECOVERABLE_ERROR | E_USER_ERROR, $handler->throwAt(0));
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    public function testDefaultLogger()
-    {
-        try {
-            $handler = ErrorHandler::register();
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-
-            $handler->setDefaultLogger($logger, E_NOTICE);
-            $handler->setDefaultLogger($logger, array(E_USER_NOTICE => LogLevel::CRITICAL));
-
-            $loggers = array(
-                E_DEPRECATED => array(null, LogLevel::INFO),
-                E_USER_DEPRECATED => array(null, LogLevel::INFO),
-                E_NOTICE => array($logger, LogLevel::WARNING),
-                E_USER_NOTICE => array($logger, LogLevel::CRITICAL),
-                E_STRICT => array(null, LogLevel::WARNING),
-                E_WARNING => array(null, LogLevel::WARNING),
-                E_USER_WARNING => array(null, LogLevel::WARNING),
-                E_COMPILE_WARNING => array(null, LogLevel::WARNING),
-                E_CORE_WARNING => array(null, LogLevel::WARNING),
-                E_USER_ERROR => array(null, LogLevel::CRITICAL),
-                E_RECOVERABLE_ERROR => array(null, LogLevel::CRITICAL),
-                E_COMPILE_ERROR => array(null, LogLevel::CRITICAL),
-                E_PARSE => array(null, LogLevel::CRITICAL),
-                E_ERROR => array(null, LogLevel::CRITICAL),
-                E_CORE_ERROR => array(null, LogLevel::CRITICAL),
-            );
-            $this->assertSame($loggers, $handler->setLoggers(array()));
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    public function testHandleError()
-    {
-        try {
-            $handler = ErrorHandler::register();
-            $handler->throwAt(0, true);
-            $this->assertFalse($handler->handleError(0, 'foo', 'foo.php', 12, array()));
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            $handler = ErrorHandler::register();
-            $handler->throwAt(3, true);
-            $this->assertFalse($handler->handleError(4, 'foo', 'foo.php', 12, array()));
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            $handler = ErrorHandler::register();
-            $handler->throwAt(3, true);
-            try {
-                $handler->handleError(4, 'foo', 'foo.php', 12, array());
-            } catch (\ErrorException $e) {
-                $this->assertSame('Parse Error: foo', $e->getMessage());
-                $this->assertSame(4, $e->getSeverity());
-                $this->assertSame('foo.php', $e->getFile());
-                $this->assertSame(12, $e->getLine());
-            }
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            $handler = ErrorHandler::register();
-            $handler->throwAt(E_USER_DEPRECATED, true);
-            $this->assertFalse($handler->handleError(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array()));
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            $handler = ErrorHandler::register();
-            $handler->throwAt(E_DEPRECATED, true);
-            $this->assertFalse($handler->handleError(E_DEPRECATED, 'foo', 'foo.php', 12, array()));
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-
-            $that = $this;
-            $warnArgCheck = function ($logLevel, $message, $context) use ($that) {
-                $that->assertEquals('info', $logLevel);
-                $that->assertEquals('foo', $message);
-                $that->assertArrayHasKey('type', $context);
-                $that->assertEquals($context['type'], E_USER_DEPRECATED);
-                $that->assertArrayHasKey('stack', $context);
-                $that->assertInternalType('array', $context['stack']);
-            };
-
-            $logger
-                ->expects($this->once())
-                ->method('log')
-                ->will($this->returnCallback($warnArgCheck))
-            ;
-
-            $handler = ErrorHandler::register();
-            $handler->setDefaultLogger($logger, E_USER_DEPRECATED);
-            $this->assertTrue($handler->handleError(E_USER_DEPRECATED, 'foo', 'foo.php', 12, array()));
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-
-            $that = $this;
-            $logArgCheck = function ($level, $message, $context) use ($that) {
-                $that->assertEquals('Undefined variable: undefVar', $message);
-                $that->assertArrayHasKey('type', $context);
-                $that->assertEquals($context['type'], E_NOTICE);
-            };
-
-            $logger
-                ->expects($this->once())
-                ->method('log')
-                ->will($this->returnCallback($logArgCheck))
-            ;
-
-            $handler = ErrorHandler::register();
-            $handler->setDefaultLogger($logger, E_NOTICE);
-            $handler->screamAt(E_NOTICE);
-            unset($undefVar);
-            @$undefVar++;
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    public function testHandleException()
-    {
-        try {
-            $handler = ErrorHandler::register();
-
-            $exception = new \Exception('foo');
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-
-            $that = $this;
-            $logArgCheck = function ($level, $message, $context) use ($that) {
-                $that->assertEquals('Uncaught Exception: foo', $message);
-                $that->assertArrayHasKey('type', $context);
-                $that->assertEquals($context['type'], E_ERROR);
-            };
-
-            $logger
-                ->expects($this->exactly(2))
-                ->method('log')
-                ->will($this->returnCallback($logArgCheck))
-            ;
-
-            $handler->setDefaultLogger($logger, E_ERROR);
-
-            try {
-                $handler->handleException($exception);
-                $this->fail('Exception expected');
-            } catch (\Exception $e) {
-                $this->assertSame($exception, $e);
-            }
-
-            $that = $this;
-            $handler->setExceptionHandler(function ($e) use ($exception, $that) {
-                $that->assertSame($exception, $e);
-            });
-
-            $handler->handleException($exception);
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    public function testErrorStacking()
-    {
-        try {
-            $handler = ErrorHandler::register();
-            $handler->screamAt(E_USER_WARNING);
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-
-            $logger
-                ->expects($this->exactly(2))
-                ->method('log')
-                ->withConsecutive(
-                    array($this->equalTo(LogLevel::WARNING), $this->equalTo('Dummy log')),
-                    array($this->equalTo(LogLevel::DEBUG), $this->equalTo('Silenced warning'))
-                )
-            ;
-
-            $handler->setDefaultLogger($logger, array(E_USER_WARNING => LogLevel::WARNING));
-
-            ErrorHandler::stackErrors();
-            @trigger_error('Silenced warning', E_USER_WARNING);
-            $logger->log(LogLevel::WARNING, 'Dummy log');
-            ErrorHandler::unstackErrors();
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    public function testHandleFatalError()
-    {
-        try {
-            $handler = ErrorHandler::register();
-
-            $error = array(
-                'type' => E_PARSE,
-                'message' => 'foo',
-                'file' => 'bar',
-                'line' => 123,
-            );
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-
-            $that = $this;
-            $logArgCheck = function ($level, $message, $context) use ($that) {
-                $that->assertEquals('Fatal Parse Error: foo', $message);
-                $that->assertArrayHasKey('type', $context);
-                $that->assertEquals($context['type'], E_PARSE);
-            };
-
-            $logger
-                ->expects($this->once())
-                ->method('log')
-                ->will($this->returnCallback($logArgCheck))
-            ;
-
-            $handler->setDefaultLogger($logger, E_PARSE);
-
-            $handler->handleFatalError($error);
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    public function testHandleFatalErrorOnHHVM()
-    {
-        try {
-            $handler = ErrorHandler::register();
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-            $logger
-                ->expects($this->once())
-                ->method('log')
-                ->with(
-                    $this->equalTo(LogLevel::CRITICAL),
-                    $this->equalTo('Fatal Error: foo'),
-                    $this->equalTo(array(
-                        'type' => 1,
-                        'file' => 'bar',
-                        'line' => 123,
-                        'level' => -1,
-                        'stack' => array(456),
-                    ))
-                )
-            ;
-
-            $handler->setDefaultLogger($logger, E_ERROR);
-
-            $error = array(
-                'type' => E_ERROR + 0x1000000, // This error level is used by HHVM for fatal errors
-                'message' => 'foo',
-                'file' => 'bar',
-                'line' => 123,
-                'context' => array(123),
-                'backtrace' => array(456),
-            );
-
-            call_user_func_array(array($handler, 'handleError'), $error);
-            $handler->handleFatalError($error);
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-
-    /**
-     * @group legacy
-     */
-    public function testLegacyInterface()
-    {
-        try {
-            $handler = ErrorHandler::register(0);
-            $this->assertFalse($handler->handle(0, 'foo', 'foo.php', 12, array()));
-
-            restore_error_handler();
-            restore_exception_handler();
-
-            $logger = $this->getMock('Psr\Log\LoggerInterface');
-
-            $that = $this;
-            $logArgCheck = function ($level, $message, $context) use ($that) {
-                $that->assertEquals('Undefined variable: undefVar', $message);
-                $that->assertArrayHasKey('type', $context);
-                $that->assertEquals($context['type'], E_NOTICE);
-            };
-
-            $logger
-                ->expects($this->once())
-                ->method('log')
-                ->will($this->returnCallback($logArgCheck))
-            ;
-
-            $handler = ErrorHandler::register(E_NOTICE);
-            @$handler->setLogger($logger, 'scream');
-            unset($undefVar);
-            @$undefVar++;
-
-            restore_error_handler();
-            restore_exception_handler();
-        } catch (\Exception $e) {
-            restore_error_handler();
-            restore_exception_handler();
-
-            throw $e;
-        }
-    }
-}
diff --git a/core/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php b/core/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php
deleted file mode 100644
index 99eaf497d5b4d58fca5e5d00ee5c4eb56fe1f409..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php
+++ /dev/null
@@ -1,256 +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\Debug\Tests\Exception;
-
-use Symfony\Component\Debug\Exception\FlattenException;
-use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
-use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
-use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
-use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
-use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
-use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
-use Symfony\Component\HttpKernel\Exception\GoneHttpException;
-use Symfony\Component\HttpKernel\Exception\LengthRequiredHttpException;
-use Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException;
-use Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException;
-use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException;
-use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
-use Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException;
-
-class FlattenExceptionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testStatusCode()
-    {
-        $flattened = FlattenException::create(new \RuntimeException(), 403);
-        $this->assertEquals('403', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new \RuntimeException());
-        $this->assertEquals('500', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new NotFoundHttpException());
-        $this->assertEquals('404', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new UnauthorizedHttpException('Basic realm="My Realm"'));
-        $this->assertEquals('401', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new BadRequestHttpException());
-        $this->assertEquals('400', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new NotAcceptableHttpException());
-        $this->assertEquals('406', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new ConflictHttpException());
-        $this->assertEquals('409', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new MethodNotAllowedHttpException(array('POST')));
-        $this->assertEquals('405', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new AccessDeniedHttpException());
-        $this->assertEquals('403', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new GoneHttpException());
-        $this->assertEquals('410', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new LengthRequiredHttpException());
-        $this->assertEquals('411', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new PreconditionFailedHttpException());
-        $this->assertEquals('412', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new PreconditionRequiredHttpException());
-        $this->assertEquals('428', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new ServiceUnavailableHttpException());
-        $this->assertEquals('503', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new TooManyRequestsHttpException());
-        $this->assertEquals('429', $flattened->getStatusCode());
-
-        $flattened = FlattenException::create(new UnsupportedMediaTypeHttpException());
-        $this->assertEquals('415', $flattened->getStatusCode());
-    }
-
-    public function testHeadersForHttpException()
-    {
-        $flattened = FlattenException::create(new MethodNotAllowedHttpException(array('POST')));
-        $this->assertEquals(array('Allow' => 'POST'), $flattened->getHeaders());
-
-        $flattened = FlattenException::create(new UnauthorizedHttpException('Basic realm="My Realm"'));
-        $this->assertEquals(array('WWW-Authenticate' => 'Basic realm="My Realm"'), $flattened->getHeaders());
-
-        $flattened = FlattenException::create(new ServiceUnavailableHttpException('Fri, 31 Dec 1999 23:59:59 GMT'));
-        $this->assertEquals(array('Retry-After' => 'Fri, 31 Dec 1999 23:59:59 GMT'), $flattened->getHeaders());
-
-        $flattened = FlattenException::create(new ServiceUnavailableHttpException(120));
-        $this->assertEquals(array('Retry-After' => 120), $flattened->getHeaders());
-
-        $flattened = FlattenException::create(new TooManyRequestsHttpException('Fri, 31 Dec 1999 23:59:59 GMT'));
-        $this->assertEquals(array('Retry-After' => 'Fri, 31 Dec 1999 23:59:59 GMT'), $flattened->getHeaders());
-
-        $flattened = FlattenException::create(new TooManyRequestsHttpException(120));
-        $this->assertEquals(array('Retry-After' => 120), $flattened->getHeaders());
-    }
-
-    /**
-     * @dataProvider flattenDataProvider
-     */
-    public function testFlattenHttpException(\Exception $exception, $statusCode)
-    {
-        $flattened = FlattenException::create($exception);
-        $flattened2 = FlattenException::create($exception);
-
-        $flattened->setPrevious($flattened2);
-
-        $this->assertEquals($exception->getMessage(), $flattened->getMessage(), 'The message is copied from the original exception.');
-        $this->assertEquals($exception->getCode(), $flattened->getCode(), 'The code is copied from the original exception.');
-        $this->assertInstanceOf($flattened->getClass(), $exception, 'The class is set to the class of the original exception');
-    }
-
-    /**
-     * @dataProvider flattenDataProvider
-     */
-    public function testPrevious(\Exception $exception, $statusCode)
-    {
-        $flattened = FlattenException::create($exception);
-        $flattened2 = FlattenException::create($exception);
-
-        $flattened->setPrevious($flattened2);
-
-        $this->assertSame($flattened2, $flattened->getPrevious());
-
-        $this->assertSame(array($flattened2), $flattened->getAllPrevious());
-    }
-
-    /**
-     * @dataProvider flattenDataProvider
-     */
-    public function testLine(\Exception $exception)
-    {
-        $flattened = FlattenException::create($exception);
-        $this->assertSame($exception->getLine(), $flattened->getLine());
-    }
-
-    /**
-     * @dataProvider flattenDataProvider
-     */
-    public function testFile(\Exception $exception)
-    {
-        $flattened = FlattenException::create($exception);
-        $this->assertSame($exception->getFile(), $flattened->getFile());
-    }
-
-    /**
-     * @dataProvider flattenDataProvider
-     */
-    public function testToArray(\Exception $exception, $statusCode)
-    {
-        $flattened = FlattenException::create($exception);
-        $flattened->setTrace(array(), 'foo.php', 123);
-
-        $this->assertEquals(array(
-            array(
-                'message' => 'test',
-                'class' => 'Exception',
-                'trace' => array(array(
-                    'namespace' => '', 'short_class' => '', 'class' => '', 'type' => '', 'function' => '', 'file' => 'foo.php', 'line' => 123,
-                    'args' => array(),
-                )),
-            ),
-        ), $flattened->toArray());
-    }
-
-    public function flattenDataProvider()
-    {
-        return array(
-            array(new \Exception('test', 123), 500),
-        );
-    }
-
-    public function testRecursionInArguments()
-    {
-        $a = array('foo', array(2, &$a));
-        $exception = $this->createException($a);
-
-        $flattened = FlattenException::create($exception);
-        $trace = $flattened->getTrace();
-        $this->assertContains('*DEEP NESTED ARRAY*', serialize($trace));
-    }
-
-    public function testTooBigArray()
-    {
-        $a = array();
-        for ($i = 0; $i < 20; ++$i) {
-            for ($j = 0; $j < 50; ++$j) {
-                for ($k = 0; $k < 10; ++$k) {
-                    $a[$i][$j][$k] = 'value';
-                }
-            }
-        }
-        $a[20] = 'value';
-        $a[21] = 'value1';
-        $exception = $this->createException($a);
-
-        $flattened = FlattenException::create($exception);
-        $trace = $flattened->getTrace();
-        $serializeTrace = serialize($trace);
-
-        $this->assertContains('*SKIPPED over 10000 entries*', $serializeTrace);
-        $this->assertNotContains('*value1*', $serializeTrace);
-    }
-
-    private function createException($foo)
-    {
-        return new \Exception();
-    }
-
-    public function testSetTraceIncompleteClass()
-    {
-        $flattened = FlattenException::create(new \Exception('test', 123));
-        $flattened->setTrace(
-            array(
-                array(
-                    'file' => __FILE__,
-                    'line' => 123,
-                    'function' => 'test',
-                    'args' => array(
-                        unserialize('O:14:"BogusTestClass":0:{}'),
-                    ),
-                ),
-            ),
-            'foo.php', 123
-        );
-
-        $this->assertEquals(array(
-            array(
-                'message' => 'test',
-                'class' => 'Exception',
-                'trace' => array(
-                    array(
-                        'namespace' => '', 'short_class' => '', 'class' => '', 'type' => '', 'function' => '',
-                        'file' => 'foo.php', 'line' => 123,
-                        'args' => array(),
-                    ),
-                    array(
-                        'namespace' => '', 'short_class' => '', 'class' => '', 'type' => '', 'function' => 'test',
-                        'file' => __FILE__, 'line' => 123,
-                        'args' => array(
-                            array(
-                                'incomplete-object', 'BogusTestClass',
-                            ),
-                        ),
-                    ),
-                ),
-            ),
-        ), $flattened->toArray());
-    }
-}
diff --git a/core/vendor/symfony/debug/Tests/ExceptionHandlerTest.php b/core/vendor/symfony/debug/Tests/ExceptionHandlerTest.php
deleted file mode 100644
index 26f889288ff93221d38dbf18c17c98c9c04bf44b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/ExceptionHandlerTest.php
+++ /dev/null
@@ -1,116 +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\Debug\Tests;
-
-use Symfony\Component\Debug\ExceptionHandler;
-use Symfony\Component\Debug\Exception\OutOfMemoryException;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
-
-class ExceptionHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    public function testDebug()
-    {
-        $handler = new ExceptionHandler(false);
-        $response = $handler->createResponse(new \RuntimeException('Foo'));
-
-        $this->assertContains('<h1>Whoops, looks like something went wrong.</h1>', $response->getContent());
-        $this->assertNotContains('<h2 class="block_exception clear_fix">', $response->getContent());
-
-        $handler = new ExceptionHandler(true);
-        $response = $handler->createResponse(new \RuntimeException('Foo'));
-
-        $this->assertContains('<h1>Whoops, looks like something went wrong.</h1>', $response->getContent());
-        $this->assertContains('<h2 class="block_exception clear_fix">', $response->getContent());
-    }
-
-    public function testStatusCode()
-    {
-        $handler = new ExceptionHandler(false);
-
-        $response = $handler->createResponse(new \RuntimeException('Foo'));
-        $this->assertEquals('500', $response->getStatusCode());
-        $this->assertContains('Whoops, looks like something went wrong.', $response->getContent());
-
-        $response = $handler->createResponse(new NotFoundHttpException('Foo'));
-        $this->assertEquals('404', $response->getStatusCode());
-        $this->assertContains('Sorry, the page you are looking for could not be found.', $response->getContent());
-    }
-
-    public function testHeaders()
-    {
-        $handler = new ExceptionHandler(false);
-
-        $response = $handler->createResponse(new MethodNotAllowedHttpException(array('POST')));
-        $this->assertEquals('405', $response->getStatusCode());
-        $this->assertEquals('POST', $response->headers->get('Allow'));
-    }
-
-    public function testNestedExceptions()
-    {
-        $handler = new ExceptionHandler(true);
-        $response = $handler->createResponse(new \RuntimeException('Foo', 0, new \RuntimeException('Bar')));
-    }
-
-    public function testHandle()
-    {
-        $exception = new \Exception('foo');
-
-        if (class_exists('Symfony\Component\HttpFoundation\Response')) {
-            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('createResponse'));
-            $handler
-                ->expects($this->exactly(2))
-                ->method('createResponse')
-                ->will($this->returnValue(new Response()));
-        } else {
-            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('sendPhpResponse'));
-            $handler
-                ->expects($this->exactly(2))
-                ->method('sendPhpResponse');
-        }
-
-        $handler->handle($exception);
-
-        $that = $this;
-        $handler->setHandler(function ($e) use ($exception, $that) {
-            $that->assertSame($exception, $e);
-        });
-
-        $handler->handle($exception);
-    }
-
-    public function testHandleOutOfMemoryException()
-    {
-        $exception = new OutOfMemoryException('foo', 0, E_ERROR, __FILE__, __LINE__);
-
-        if (class_exists('Symfony\Component\HttpFoundation\Response')) {
-            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('createResponse'));
-            $handler
-                ->expects($this->once())
-                ->method('createResponse')
-                ->will($this->returnValue(new Response()));
-        } else {
-            $handler = $this->getMock('Symfony\Component\Debug\ExceptionHandler', array('sendPhpResponse'));
-            $handler
-                ->expects($this->once())
-                ->method('sendPhpResponse');
-        }
-
-        $that = $this;
-        $handler->setHandler(function ($e) use ($that) {
-            $that->fail('OutOfMemoryException should bypass the handler');
-        });
-
-        $handler->handle($exception);
-    }
-}
diff --git a/core/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php b/core/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
deleted file mode 100644
index c93983721f6c9a92fb68ec543af5c5a1d4df3a29..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
+++ /dev/null
@@ -1,200 +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\Debug\Tests\FatalErrorHandler;
-
-use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader;
-use Symfony\Component\ClassLoader\UniversalClassLoader as SymfonyUniversalClassLoader;
-use Symfony\Component\Debug\Exception\FatalErrorException;
-use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler;
-use Symfony\Component\Debug\DebugClassLoader;
-use Composer\Autoload\ClassLoader as ComposerClassLoader;
-
-class ClassNotFoundFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    public static function setUpBeforeClass()
-    {
-        foreach (spl_autoload_functions() as $function) {
-            if (!is_array($function)) {
-                continue;
-            }
-
-            // get class loaders wrapped by DebugClassLoader
-            if ($function[0] instanceof DebugClassLoader) {
-                $function = $function[0]->getClassLoader();
-            }
-
-            if ($function[0] instanceof ComposerClassLoader) {
-                $function[0]->add('Symfony_Component_Debug_Tests_Fixtures', dirname(dirname(dirname(dirname(dirname(__DIR__))))));
-                break;
-            }
-        }
-    }
-
-    /**
-     * @dataProvider provideClassNotFoundData
-     */
-    public function testHandleClassNotFound($error, $translatedMessage, $autoloader = null)
-    {
-        if ($autoloader) {
-            // Unregister all autoloaders to ensure the custom provided
-            // autoloader is the only one to be used during the test run.
-            $autoloaders = spl_autoload_functions();
-            array_map('spl_autoload_unregister', $autoloaders);
-            spl_autoload_register($autoloader);
-        }
-
-        $handler = new ClassNotFoundFatalErrorHandler();
-
-        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
-
-        if ($autoloader) {
-            spl_autoload_unregister($autoloader);
-            array_map('spl_autoload_register', $autoloaders);
-        }
-
-        $this->assertInstanceOf('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
-        $this->assertSame($translatedMessage, $exception->getMessage());
-        $this->assertSame($error['type'], $exception->getSeverity());
-        $this->assertSame($error['file'], $exception->getFile());
-        $this->assertSame($error['line'], $exception->getLine());
-    }
-
-    /**
-     * @group legacy
-     */
-    public function testLegacyHandleClassNotFound()
-    {
-        $prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
-        $symfonyUniversalClassLoader = new SymfonyUniversalClassLoader();
-        $symfonyUniversalClassLoader->registerPrefixes($prefixes);
-
-        $this->testHandleClassNotFound(
-            array(
-                'type' => 1,
-                'line' => 12,
-                'file' => 'foo.php',
-                'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
-            ),
-            "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
-            array($symfonyUniversalClassLoader, 'loadClass')
-        );
-    }
-
-    public function provideClassNotFoundData()
-    {
-        $prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
-
-        $symfonyAutoloader = new SymfonyClassLoader();
-        $symfonyAutoloader->addPrefixes($prefixes);
-
-        $debugClassLoader = new DebugClassLoader(array($symfonyAutoloader, 'loadClass'));
-
-        return array(
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'WhizBangFactory\' not found',
-                ),
-                "Attempted to load class \"WhizBangFactory\" from the global namespace.\nDid you forget a \"use\" statement?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'Foo\\Bar\\WhizBangFactory\' not found',
-                ),
-                "Attempted to load class \"WhizBangFactory\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'UndefinedFunctionException\' not found',
-                ),
-                "Attempted to load class \"UndefinedFunctionException\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'PEARClass\' not found',
-                ),
-                "Attempted to load class \"PEARClass\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony_Component_Debug_Tests_Fixtures_PEARClass\"?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
-                ),
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
-                ),
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
-                array($symfonyAutoloader, 'loadClass'),
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
-                ),
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
-                array($debugClassLoader, 'loadClass'),
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
-                ),
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
-                function ($className) { /* do nothing here */ },
-            ),
-        );
-    }
-
-    public function testCannotRedeclareClass()
-    {
-        if (!file_exists(__DIR__.'/../FIXTURES2/REQUIREDTWICE.PHP')) {
-            $this->markTestSkipped('Can only be run on case insensitive filesystems');
-        }
-
-        require_once __DIR__.'/../FIXTURES2/REQUIREDTWICE.PHP';
-
-        $error = array(
-            'type' => 1,
-            'line' => 12,
-            'file' => 'foo.php',
-            'message' => 'Class \'Foo\\Bar\\RequiredTwice\' not found',
-        );
-
-        $handler = new ClassNotFoundFatalErrorHandler();
-        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
-
-        $this->assertInstanceOf('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
-    }
-}
diff --git a/core/vendor/symfony/debug/Tests/FatalErrorHandler/UndefinedFunctionFatalErrorHandlerTest.php b/core/vendor/symfony/debug/Tests/FatalErrorHandler/UndefinedFunctionFatalErrorHandlerTest.php
deleted file mode 100644
index 795b74781c23aa157a4576c46e1619d4077936c9..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/FatalErrorHandler/UndefinedFunctionFatalErrorHandlerTest.php
+++ /dev/null
@@ -1,80 +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\Debug\Tests\FatalErrorHandler;
-
-use Symfony\Component\Debug\Exception\FatalErrorException;
-use Symfony\Component\Debug\FatalErrorHandler\UndefinedFunctionFatalErrorHandler;
-
-class UndefinedFunctionFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @dataProvider provideUndefinedFunctionData
-     */
-    public function testUndefinedFunction($error, $translatedMessage)
-    {
-        $handler = new UndefinedFunctionFatalErrorHandler();
-        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
-
-        $this->assertInstanceOf('Symfony\Component\Debug\Exception\UndefinedFunctionException', $exception);
-        // class names are case insensitive and PHP/HHVM do not return the same
-        $this->assertSame(strtolower($translatedMessage), strtolower($exception->getMessage()));
-        $this->assertSame($error['type'], $exception->getSeverity());
-        $this->assertSame($error['file'], $exception->getFile());
-        $this->assertSame($error['line'], $exception->getLine());
-    }
-
-    public function provideUndefinedFunctionData()
-    {
-        return array(
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Call to undefined function test_namespaced_function()',
-                ),
-                "Attempted to call function \"test_namespaced_function\" from the global namespace.\nDid you mean to call \"\\symfony\\component\\debug\\tests\\fatalerrorhandler\\test_namespaced_function\"?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Call to undefined function Foo\\Bar\\Baz\\test_namespaced_function()',
-                ),
-                "Attempted to call function \"test_namespaced_function\" from namespace \"Foo\\Bar\\Baz\".\nDid you mean to call \"\\symfony\\component\\debug\\tests\\fatalerrorhandler\\test_namespaced_function\"?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Call to undefined function foo()',
-                ),
-                'Attempted to call function "foo" from the global namespace.',
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Call to undefined function Foo\\Bar\\Baz\\foo()',
-                ),
-                'Attempted to call function "foo" from namespace "Foo\Bar\Baz".',
-            ),
-        );
-    }
-}
-
-function test_namespaced_function()
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/FatalErrorHandler/UndefinedMethodFatalErrorHandlerTest.php b/core/vendor/symfony/debug/Tests/FatalErrorHandler/UndefinedMethodFatalErrorHandlerTest.php
deleted file mode 100644
index de7b21c69978b066693e9cee1a131cde0e6d7426..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/FatalErrorHandler/UndefinedMethodFatalErrorHandlerTest.php
+++ /dev/null
@@ -1,66 +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\Debug\Tests\FatalErrorHandler;
-
-use Symfony\Component\Debug\Exception\FatalErrorException;
-use Symfony\Component\Debug\FatalErrorHandler\UndefinedMethodFatalErrorHandler;
-
-class UndefinedMethodFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @dataProvider provideUndefinedMethodData
-     */
-    public function testUndefinedMethod($error, $translatedMessage)
-    {
-        $handler = new UndefinedMethodFatalErrorHandler();
-        $exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
-
-        $this->assertInstanceOf('Symfony\Component\Debug\Exception\UndefinedMethodException', $exception);
-        $this->assertSame($translatedMessage, $exception->getMessage());
-        $this->assertSame($error['type'], $exception->getSeverity());
-        $this->assertSame($error['file'], $exception->getFile());
-        $this->assertSame($error['line'], $exception->getLine());
-    }
-
-    public function provideUndefinedMethodData()
-    {
-        return array(
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Call to undefined method SplObjectStorage::what()',
-                ),
-                'Attempted to call an undefined method named "what" of class "SplObjectStorage".',
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Call to undefined method SplObjectStorage::walid()',
-                ),
-                "Attempted to call an undefined method named \"walid\" of class \"SplObjectStorage\".\nDid you mean to call \"valid\"?",
-            ),
-            array(
-                array(
-                    'type' => 1,
-                    'line' => 12,
-                    'file' => 'foo.php',
-                    'message' => 'Call to undefined method SplObjectStorage::offsetFet()',
-                ),
-                "Attempted to call an undefined method named \"offsetFet\" of class \"SplObjectStorage\".\nDid you mean to call e.g. \"offsetGet\", \"offsetSet\" or \"offsetUnset\"?",
-            ),
-        );
-    }
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/ClassAlias.php b/core/vendor/symfony/debug/Tests/Fixtures/ClassAlias.php
deleted file mode 100644
index 9d6dbaa7124feba20de910abbff2abd49c833650..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/ClassAlias.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-class_alias('Symfony\Component\Debug\Tests\Fixtures\NotPSR0bis', 'Symfony\Component\Debug\Tests\Fixtures\ClassAlias');
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/DeprecatedClass.php b/core/vendor/symfony/debug/Tests/Fixtures/DeprecatedClass.php
deleted file mode 100644
index b4c78cd140f13c927e58b3b81b55beb959af3ca2..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/DeprecatedClass.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures;
-
-/**
- * @deprecated but this is a test
- *             deprecation notice.
- * @foobar
- */
-class DeprecatedClass
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/DeprecatedInterface.php b/core/vendor/symfony/debug/Tests/Fixtures/DeprecatedInterface.php
deleted file mode 100644
index 505eccae751b9111bcda78d16df8f16c81323973..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/DeprecatedInterface.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures;
-
-/**
- * @deprecated but this is a test
- *             deprecation notice.
- * @foobar
- */
-interface DeprecatedInterface
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/PEARClass.php b/core/vendor/symfony/debug/Tests/Fixtures/PEARClass.php
deleted file mode 100644
index 39f228182e0fac756ac32a559b87c0a8d27de9ae..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/PEARClass.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-class Symfony_Component_Debug_Tests_Fixtures_PEARClass
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/casemismatch.php b/core/vendor/symfony/debug/Tests/Fixtures/casemismatch.php
deleted file mode 100644
index 691d660fd1d5b8d7e367b73eb1243c5d05a4a48a..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/casemismatch.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures;
-
-class CaseMismatch
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/notPsr0Bis.php b/core/vendor/symfony/debug/Tests/Fixtures/notPsr0Bis.php
deleted file mode 100644
index 4cf526719a6e67772a5cb6341240af869a6f80f0..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/notPsr0Bis.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures;
-
-class NotPSR0bis
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/psr4/Psr4CaseMismatch.php b/core/vendor/symfony/debug/Tests/Fixtures/psr4/Psr4CaseMismatch.php
deleted file mode 100644
index ec48dd22b4999740f606972241278208b2da9aed..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/psr4/Psr4CaseMismatch.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures;
-
-class PSR4CaseMismatch
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures/reallyNotPsr0.php b/core/vendor/symfony/debug/Tests/Fixtures/reallyNotPsr0.php
deleted file mode 100644
index 8554725aa8b3b6605d75899c0496c10876cc4aab..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures/reallyNotPsr0.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures;
-
-class NotPSR0
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/Fixtures2/RequiredTwice.php b/core/vendor/symfony/debug/Tests/Fixtures2/RequiredTwice.php
deleted file mode 100644
index 604bc37ff1f04b83951836c9b1c293efd6dc4952..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/Fixtures2/RequiredTwice.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Debug\Tests\Fixtures2;
-
-class RequiredTwice
-{
-}
diff --git a/core/vendor/symfony/debug/Tests/MockExceptionHandler.php b/core/vendor/symfony/debug/Tests/MockExceptionHandler.php
deleted file mode 100644
index a85d2d15e7131e290c3dc6e1972ad8707567125c..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/Tests/MockExceptionHandler.php
+++ /dev/null
@@ -1,24 +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\Debug\Tests;
-
-use Symfony\Component\Debug\ExceptionHandler;
-
-class MockExceptionHandler extends Exceptionhandler
-{
-    public $e;
-
-    public function handle(\Exception $e)
-    {
-        $this->e = $e;
-    }
-}
diff --git a/core/vendor/symfony/debug/composer.json b/core/vendor/symfony/debug/composer.json
deleted file mode 100644
index 3b1568831177e3a3d8a3ae0c7fe9c3709e360a38..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/composer.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-    "name": "symfony/debug",
-    "type": "library",
-    "description": "Symfony Debug Component",
-    "keywords": [],
-    "homepage": "https://symfony.com",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Fabien Potencier",
-            "email": "fabien@symfony.com"
-        },
-        {
-            "name": "Symfony Community",
-            "homepage": "https://symfony.com/contributors"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.9",
-        "psr/log": "~1.0"
-    },
-    "conflict": {
-        "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-    },
-    "require-dev": {
-        "symfony/phpunit-bridge": "~2.7",
-        "symfony/class-loader": "~2.2",
-        "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2",
-        "symfony/http-foundation": "~2.1"
-    },
-    "suggest": {
-        "symfony/http-foundation": "",
-        "symfony/http-kernel": ""
-    },
-    "autoload": {
-        "psr-4": { "Symfony\\Component\\Debug\\": "" }
-    },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "2.7-dev"
-        }
-    }
-}
diff --git a/core/vendor/symfony/debug/phpunit.xml.dist b/core/vendor/symfony/debug/phpunit.xml.dist
deleted file mode 100644
index e99c4ddf4460330bf0fbd3145d79a943b8fcd6db..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/debug/phpunit.xml.dist
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony Debug Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-        <testsuite name="Symfony Debug Extension Test Suite">
-            <directory suffix=".phpt">./Resources/ext/tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/core/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php b/core/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php
index 3fc6a1102862b50cbf59352f7a5b5737454e7c7f..0efc6b500b5d44f1a384ad543f8b641d4d517358 100644
--- a/core/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php
@@ -125,14 +125,6 @@ private function resolveDefinition($id, DefinitionDecorator $definition)
         if (isset($changes['lazy'])) {
             $def->setLazy($definition->isLazy());
         }
-        if (isset($changes['decorated_service'])) {
-            $decoratedService = $definition->getDecoratedService();
-            if (null === $decoratedService) {
-                $def->setDecoratedService($decoratedService);
-            } else {
-                $def->setDecoratedService($decoratedService[0], $decoratedService[1]);
-            }
-        }
 
         // merge arguments
         foreach ($definition->getArguments() as $k => $v) {
diff --git a/core/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php b/core/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
index 85dbceb9a61ec526e290eb64f6dd4405485abb58..000bf087001c78374882e1b3d7df76986853f8d1 100644
--- a/core/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php
@@ -47,7 +47,7 @@ public function process(ContainerBuilder $container)
             foreach ($definition->getMethodCalls() as $call) {
                 try {
                     $calls[] = array($call[0], $this->processArguments($call[1], true));
-                } catch (RuntimeException $e) {
+                } catch (RuntimeException $ignore) {
                     // this call is simply removed
                 }
             }
@@ -58,7 +58,7 @@ public function process(ContainerBuilder $container)
                 try {
                     $value = $this->processArguments(array($value), true);
                     $properties[$name] = reset($value);
-                } catch (RuntimeException $e) {
+                } catch (RuntimeException $ignore) {
                     // ignore property
                 }
             }
diff --git a/core/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php b/core/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php
index a35f84cbe4a80c7dd0efe78fc2f6bc52d271cb41..0a789676c96f485ccf573865b5a5a65209a84809 100644
--- a/core/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php
+++ b/core/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php
@@ -38,7 +38,7 @@ public function process(ContainerBuilder $container)
                 $definition->setFile($parameterBag->resolveValue($definition->getFile()));
                 $definition->setArguments($parameterBag->resolveValue($definition->getArguments()));
                 if ($definition->getFactoryClass(false)) {
-                    $definition->setFactoryClass($parameterBag->resolveValue($definition->getFactoryClass(false)));
+                    $definition->setFactoryClass($parameterBag->resolveValue($definition->getFactoryClass()));
                 }
 
                 $factory = $definition->getFactory();
diff --git a/core/vendor/symfony/dependency-injection/ContainerBuilder.php b/core/vendor/symfony/dependency-injection/ContainerBuilder.php
index e697814bb10fd2c407fc1a6344e35127001a9d02..b7104a06e74682913b6a94663b431d77ea4f290f 100644
--- a/core/vendor/symfony/dependency-injection/ContainerBuilder.php
+++ b/core/vendor/symfony/dependency-injection/ContainerBuilder.php
@@ -982,13 +982,7 @@ public function createService(Definition $definition, $id, $tryProxy = true)
 
         if ($callable = $definition->getConfigurator()) {
             if (is_array($callable)) {
-                $callable[0] = $parameterBag->resolveValue($callable[0]);
-
-                if ($callable[0] instanceof Reference) {
-                    $callable[0] = $this->get((string) $callable[0], $callable[0]->getInvalidBehavior());
-                } elseif ($callable[0] instanceof Definition) {
-                    $callable[0] = $this->createService($callable[0], null);
-                }
+                $callable[0] = $callable[0] instanceof Reference ? $this->get((string) $callable[0]) : $parameterBag->resolveValue($callable[0]);
             }
 
             if (!is_callable($callable)) {
@@ -1133,7 +1127,7 @@ private function getProxyInstantiator()
     private function synchronize($id)
     {
         if ('request' !== $id) {
-            @trigger_error('The '.__METHOD__.' method is deprecated in version 2.7 and will be removed in version 3.0.', E_USER_DEPRECATED);
+            trigger_error('The '.__METHOD__.' method is deprecated in version 2.7 and will be removed in version 3.0.', E_USER_DEPRECATED);
         }
 
         foreach ($this->definitions as $definitionId => $definition) {
diff --git a/core/vendor/symfony/dependency-injection/Definition.php b/core/vendor/symfony/dependency-injection/Definition.php
index 71447fab12ae87500b8e8b2672fd5a62c647a748..9d02be4f6907f9e5cb31c4252bb009439c707955 100644
--- a/core/vendor/symfony/dependency-injection/Definition.php
+++ b/core/vendor/symfony/dependency-injection/Definition.php
@@ -98,7 +98,7 @@ public function getFactory()
      */
     public function setFactoryClass($factoryClass)
     {
-        @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryClass), E_USER_DEPRECATED);
+        trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryClass), E_USER_DEPRECATED);
 
         $this->factoryClass = $factoryClass;
 
@@ -116,7 +116,7 @@ public function setFactoryClass($factoryClass)
     public function getFactoryClass($triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
         }
 
         return $this->factoryClass;
@@ -134,7 +134,7 @@ public function getFactoryClass($triggerDeprecationError = true)
      */
     public function setFactoryMethod($factoryMethod)
     {
-        @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryMethod), E_USER_DEPRECATED);
+        trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryMethod), E_USER_DEPRECATED);
 
         $this->factoryMethod = $factoryMethod;
 
@@ -187,7 +187,7 @@ public function getDecoratedService()
     public function getFactoryMethod($triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
         }
 
         return $this->factoryMethod;
@@ -205,7 +205,7 @@ public function getFactoryMethod($triggerDeprecationError = true)
      */
     public function setFactoryService($factoryService)
     {
-        @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryService), E_USER_DEPRECATED);
+        trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryService), E_USER_DEPRECATED);
 
         $this->factoryService = $factoryService;
 
@@ -223,7 +223,7 @@ public function setFactoryService($factoryService)
     public function getFactoryService($triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
         }
 
         return $this->factoryService;
@@ -667,7 +667,7 @@ public function isPublic()
     public function setSynchronized($boolean, $triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
         }
 
         $this->synchronized = (bool) $boolean;
@@ -687,7 +687,7 @@ public function setSynchronized($boolean, $triggerDeprecationError = true)
     public function isSynchronized($triggerDeprecationError = true)
     {
         if ($triggerDeprecationError) {
-            @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
+            trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
         }
 
         return $this->synchronized;
diff --git a/core/vendor/symfony/dependency-injection/DefinitionDecorator.php b/core/vendor/symfony/dependency-injection/DefinitionDecorator.php
index f5a1485a5f33a756377e0dbfa574e0cdd1371fa4..d4b45d34ad31a5a9795d5b062cb0c89f58f7dbe9 100644
--- a/core/vendor/symfony/dependency-injection/DefinitionDecorator.php
+++ b/core/vendor/symfony/dependency-injection/DefinitionDecorator.php
@@ -171,16 +171,6 @@ public function setLazy($boolean)
     }
 
     /**
-     * {@inheritdoc}
-     */
-    public function setDecoratedService($id, $renamedId = null)
-    {
-        $this->changes['decorated_service'] = true;
-
-        return parent::setDecoratedService($id, $renamedId);
-    }
-
-    /**
      * Gets an argument to pass to the service constructor/factory method.
      *
      * If replaceArgument() has been used to replace an argument, this method
diff --git a/core/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php b/core/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php
index 5f35a1e5bb116f1aacffc9122cda273ce7de08c9..5eba090a2e4d8aa5f2d69d224ed286a13cc0f339 100644
--- a/core/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php
+++ b/core/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php
@@ -278,7 +278,7 @@ private function addOptions($options)
      */
     private function dotize($id)
     {
-        return strtolower(preg_replace('/\W/i', '_', $id));
+        return strtolower(preg_replace('/[^\w]/i', '_', $id));
     }
 
     /**
diff --git a/core/vendor/symfony/dependency-injection/Dumper/PhpDumper.php b/core/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
index c59bc8d5b1290c6c4bbd375113f2c39d55dd3005..75c955ab3681d7c66b23aeb7c1f22fbd3ad24fb7 100644
--- a/core/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
+++ b/core/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
@@ -705,7 +705,7 @@ private function addServiceSynchronizer($id, Definition $definition)
         }
 
         if ('request' !== $id) {
-            @trigger_error('Synchronized services were deprecated in version 2.7 and won\'t work anymore in 3.0.', E_USER_DEPRECATED);
+            trigger_error('Synchronized services were deprecated in version 2.7 and won\'t work anymore in 3.0.', E_USER_DEPRECATED);
         }
 
         $code = '';
@@ -862,8 +862,8 @@ public function __construct()
 
         if (count($scopes = $this->container->getScopes()) > 0) {
             $code .= "\n";
-            $code .= '        $this->scopes = '.$this->dumpValue($scopes).";\n";
-            $code .= '        $this->scopeChildren = '.$this->dumpValue($this->container->getScopeChildren()).";\n";
+            $code .= "        \$this->scopes = ".$this->dumpValue($scopes).";\n";
+            $code .= "        \$this->scopeChildren = ".$this->dumpValue($this->container->getScopeChildren()).";\n";
         }
 
         $code .= $this->addMethodMap();
@@ -908,8 +908,8 @@ public function __construct()
 
         $code .= "\n";
         if (count($scopes = $this->container->getScopes()) > 0) {
-            $code .= '        $this->scopes = '.$this->dumpValue($scopes).";\n";
-            $code .= '        $this->scopeChildren = '.$this->dumpValue($this->container->getScopeChildren()).";\n";
+            $code .= "        \$this->scopes = ".$this->dumpValue($scopes).";\n";
+            $code .= "        \$this->scopeChildren = ".$this->dumpValue($this->container->getScopeChildren()).";\n";
         } else {
             $code .= "        \$this->scopes = array();\n";
             $code .= "        \$this->scopeChildren = array();\n";
@@ -1301,6 +1301,11 @@ private function dumpValue($value, $interpolate = true)
             foreach ($value->getArguments() as $argument) {
                 $arguments[] = $this->dumpValue($argument);
             }
+            $class = $this->dumpValue($value->getClass());
+
+            if (false !== strpos($class, '$')) {
+                throw new RuntimeException('Cannot dump definitions which have a variable class name.');
+            }
 
             if (null !== $value->getFactory()) {
                 $factory = $value->getFactory();
@@ -1338,15 +1343,6 @@ private function dumpValue($value, $interpolate = true)
                 }
             }
 
-            $class = $value->getClass();
-            if (null === $class) {
-                throw new RuntimeException('Cannot dump definitions which have no class nor factory.');
-            }
-            $class = $this->dumpValue($class);
-            if (false !== strpos($class, '$')) {
-                throw new RuntimeException('Cannot dump definitions which have a variable class name.');
-            }
-
             return sprintf('new \\%s(%s)', substr(str_replace('\\\\', '\\', $class), 1, -1), implode(', ', $arguments));
         } elseif ($value instanceof Variable) {
             return '$'.$value;
@@ -1418,7 +1414,7 @@ public function dumpParameter($name)
      */
     public function addExpressionLanguageProvider(ExpressionFunctionProviderInterface $provider)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6.2 and will be removed in 3.0. Use the Symfony\Component\DependencyInjection\ContainerBuilder::addExpressionLanguageProvider method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6.2 and will be removed in 3.0. Use the Symfony\Component\DependencyInjection\ContainerBuilder::addExpressionLanguageProvider method instead.', E_USER_DEPRECATED);
 
         $this->expressionLanguageProviders[] = $provider;
     }
diff --git a/core/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php b/core/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
index ebe330bd1b33132ea8d296d9f4f23371133db584..f81d8d6931974665c627e98d77bda25067215a94 100644
--- a/core/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
+++ b/core/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
@@ -49,7 +49,7 @@ public function load($resource, $type = null)
         $this->parseImports($xml, $path);
 
         // parameters
-        $this->parseParameters($xml);
+        $this->parseParameters($xml, $path);
 
         // extensions
         $this->loadFromExtensions($xml);
@@ -70,8 +70,9 @@ public function supports($resource, $type = null)
      * Parses parameters.
      *
      * @param \DOMDocument $xml
+     * @param string       $file
      */
-    private function parseParameters(\DOMDocument $xml)
+    private function parseParameters(\DOMDocument $xml, $file)
     {
         if ($parameters = $this->getChildren($xml->documentElement, 'parameters')) {
             $this->container->getParameterBag()->add($this->getArgumentsAsPhp($parameters[0], 'parameter'));
@@ -125,11 +126,10 @@ private function parseDefinitions(\DOMDocument $xml, $file)
      * Parses an individual Definition.
      *
      * @param \DOMElement $service
-     * @param string      $file
      *
      * @return Definition|null
      */
-    private function parseDefinition(\DOMElement $service, $file)
+    private function parseDefinition(\DOMElement $service)
     {
         if ($alias = $service->getAttribute('alias')) {
             $public = true;
@@ -149,22 +149,13 @@ private function parseDefinition(\DOMElement $service, $file)
 
         foreach (array('class', 'scope', 'public', 'factory-class', 'factory-method', 'factory-service', 'synthetic', 'lazy', 'abstract') as $key) {
             if ($value = $service->getAttribute($key)) {
-                if (in_array($key, array('factory-class', 'factory-method', 'factory-service'))) {
-                    @trigger_error(sprintf('The "%s" attribute of service "%s" in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use the "factory" element instead.', $key, (string) $service->getAttribute('id'), $file), E_USER_DEPRECATED);
-                }
                 $method = 'set'.str_replace('-', '', $key);
                 $definition->$method(XmlUtils::phpize($value));
             }
         }
 
         if ($value = $service->getAttribute('synchronized')) {
-            $triggerDeprecation = 'request' !== (string) $service->getAttribute('id');
-
-            if ($triggerDeprecation) {
-                @trigger_error(sprintf('The "synchronized" attribute of service "%s" in file "%s" is deprecated since version 2.7 and will be removed in 3.0.', (string) $service->getAttribute('id'), $file), E_USER_DEPRECATED);
-            }
-
-            $definition->setSynchronized(XmlUtils::phpize($value), $triggerDeprecation);
+            $definition->setSynchronized(XmlUtils::phpize($value), 'request' !== (string) $service->getAttribute('id'));
         }
 
         if ($files = $this->getChildren($service, 'file')) {
@@ -182,7 +173,7 @@ private function parseDefinition(\DOMElement $service, $file)
                 $factoryService = $this->getChildren($factory, 'service');
 
                 if (isset($factoryService[0])) {
-                    $class = $this->parseDefinition($factoryService[0], $file);
+                    $class = $this->parseDefinition($factoryService[0]);
                 } elseif ($childService = $factory->getAttribute('service')) {
                     $class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
                 } else {
@@ -201,7 +192,7 @@ private function parseDefinition(\DOMElement $service, $file)
                 $configuratorService = $this->getChildren($configurator, 'service');
 
                 if (isset($configuratorService[0])) {
-                    $class = $this->parseDefinition($configuratorService[0], $file);
+                    $class = $this->parseDefinition($configuratorService[0]);
                 } elseif ($childService = $configurator->getAttribute('service')) {
                     $class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
                 } else {
@@ -242,7 +233,7 @@ private function parseDefinition(\DOMElement $service, $file)
     }
 
     /**
-     * Parses a XML file to a \DOMDocument.
+     * Parses a XML file to a \DOMDocument
      *
      * @param string $file Path to a file
      *
@@ -401,7 +392,7 @@ private function getArgumentsAsPhp(\DOMElement $node, $name, $lowercase = true)
     }
 
     /**
-     * Get child elements by name.
+     * Get child elements by name
      *
      * @param \DOMNode $node
      * @param mixed    $name
diff --git a/core/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php b/core/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
index be2d3f130081f6b7352504803cef2d88630ea6bd..ae9613a612742c889b6a7ab8936a14865bddd91c 100644
--- a/core/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
+++ b/core/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
@@ -172,7 +172,6 @@ private function parseDefinition($id, $service, $file)
         }
 
         if (isset($service['synchronized'])) {
-            @trigger_error(sprintf('The "synchronized" key of service "%s" in file "%s" is deprecated since version 2.7 and will be removed in 3.0.', $id, $file), E_USER_DEPRECATED);
             $definition->setSynchronized($service['synchronized'], 'request' !== $id);
         }
 
@@ -202,17 +201,14 @@ private function parseDefinition($id, $service, $file)
         }
 
         if (isset($service['factory_class'])) {
-            @trigger_error(sprintf('The "factory_class" key of service "%s" in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $id, $file), E_USER_DEPRECATED);
             $definition->setFactoryClass($service['factory_class']);
         }
 
         if (isset($service['factory_method'])) {
-            @trigger_error(sprintf('The "factory_method" key of service "%s" in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $id, $file), E_USER_DEPRECATED);
             $definition->setFactoryMethod($service['factory_method']);
         }
 
         if (isset($service['factory_service'])) {
-            @trigger_error(sprintf('The "factory_service" key of service "%s" in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $id, $file), E_USER_DEPRECATED);
             $definition->setFactoryService($service['factory_service']);
         }
 
diff --git a/core/vendor/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php b/core/vendor/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php
index 3ea6d9636ba2604af0bc8cb9302621349bb7eacb..dc936a0bd6718b425671c07822849d3362a545cf 100644
--- a/core/vendor/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php
+++ b/core/vendor/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php
@@ -69,14 +69,4 @@ public function set($name, $value)
     {
         throw new LogicException('Impossible to call set() on a frozen ParameterBag.');
     }
-
-    /**
-     * {@inheritdoc}
-     *
-     * @api
-     */
-    public function remove($name)
-    {
-        throw new LogicException('Impossible to call remove() on a frozen ParameterBag.');
-    }
 }
diff --git a/core/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php b/core/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php
index ead76d738d320d0241e9b326a2c10067bcaec609..96003547b69fb986bf8718f6ab8951e7a1b40d60 100644
--- a/core/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php
+++ b/core/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php
@@ -11,7 +11,6 @@
 
 namespace Symfony\Component\DependencyInjection\ParameterBag;
 
-use Symfony\Component\DependencyInjection\Exception\LogicException;
 use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;
 
 /**
@@ -26,8 +25,6 @@
     /**
      * Clears all parameters.
      *
-     * @throws LogicException if the ParameterBagInterface can not be cleared
-     *
      * @api
      */
     public function clear();
@@ -37,8 +34,6 @@ public function clear();
      *
      * @param array $parameters An array of parameters
      *
-     * @throws LogicException if the parameter can not be added
-     *
      * @api
      */
     public function add(array $parameters);
@@ -71,8 +66,6 @@ public function get($name);
      * @param string $name  The parameter name
      * @param mixed  $value The parameter value
      *
-     * @throws LogicException if the parameter can not be set
-     *
      * @api
      */
     public function set($name, $value);
diff --git a/core/vendor/symfony/dependency-injection/SimpleXMLElement.php b/core/vendor/symfony/dependency-injection/SimpleXMLElement.php
index 63d44ea38fa8c20559b6f4382e1eea33d265db13..1b318fd9e4231bb11b237dcafea89e909e94c5cf 100644
--- a/core/vendor/symfony/dependency-injection/SimpleXMLElement.php
+++ b/core/vendor/symfony/dependency-injection/SimpleXMLElement.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\DependencyInjection;
 
-@trigger_error('The '.__NAMESPACE__.'\SimpleXMLElement method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\SimpleXMLElement method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
 use Symfony\Component\Config\Util\XmlUtils;
 use Symfony\Component\ExpressionLanguage\Expression;
diff --git a/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
index 4e8efdc8b4fa3cd6f7d1b4da0802e1303d040223..09ae3c413a75a065b8f9a22f56444629ae79d3a6 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
@@ -56,6 +56,8 @@ public function testProcessDetectsNonSyntheticNonAbstractDefinitionWithoutClass(
      */
     public function testLegacyProcessDetectsBothFactorySyntaxesUsed()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $container->register('a')->setFactory(array('a', 'b'))->setFactoryClass('a');
 
diff --git a/core/vendor/symfony/dependency-injection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php
index e730a1a288a83c08612aa7fa6b7e270b52387ba1..148a30b6c2752745e108cb05a1c7d2f5eff3e754 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Compiler/LegacyResolveParameterPlaceHoldersPassTest.php
@@ -21,6 +21,8 @@ class LegacyResolveParameterPlaceHoldersPassTest extends \PHPUnit_Framework_Test
 {
     public function testFactoryClassParametersShouldBeResolved()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $compilerPass = new ResolveParameterPlaceHoldersPass();
 
         $container = new ContainerBuilder();
diff --git a/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php b/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php
index 845edd2c1419f28f2b559562efdd4640b43e73ed..fb2bb5fca30555869fd56d9ee4667e7cd2f10c66 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php
@@ -117,25 +117,6 @@ public function testProcessDoesNotCopyTags()
         $this->assertEquals(array(), $def->getTags());
     }
 
-    public function testProcessDoesNotCopyDecoratedService()
-    {
-        $container = new ContainerBuilder();
-
-        $container
-            ->register('parent')
-            ->setDecoratedService('foo')
-        ;
-
-        $container
-            ->setDefinition('child', new DefinitionDecorator('parent'))
-        ;
-
-        $this->process($container);
-
-        $def = $container->getDefinition('child');
-        $this->assertNull($def->getDecoratedService());
-    }
-
     public function testProcessHandlesMultipleInheritance()
     {
         $container = new ContainerBuilder();
@@ -192,21 +173,6 @@ public function testSetLazyOnServiceIsParent()
         $this->assertTrue($container->getDefinition('child1')->isLazy());
     }
 
-    public function testSetDecoratedServiceOnServiceHasParent()
-    {
-        $container = new ContainerBuilder();
-
-        $container->register('parent', 'stdClass');
-
-        $container->setDefinition('child1', new DefinitionDecorator('parent'))
-            ->setDecoratedService('foo', 'foo_inner')
-        ;
-
-        $this->process($container);
-
-        $this->assertEquals(array('foo', 'foo_inner'), $container->getDefinition('child1')->getDecoratedService());
-    }
-
     protected function process(ContainerBuilder $container)
     {
         $pass = new ResolveDefinitionTemplatesPass();
diff --git a/core/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php b/core/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
index 8155e0b7c6b871ff4c827e1b18eacb862a9c88fa..5f6fdd1d1715c7823523dc669b5b6ea384f4568e 100644
--- a/core/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
@@ -342,6 +342,8 @@ public function testCreateServiceFactory()
 
     public function testLegacyCreateServiceFactory()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $builder = new ContainerBuilder();
         $builder->register('bar', 'Bar\FooClass');
         $builder
@@ -361,6 +363,8 @@ public function testLegacyCreateServiceFactory()
      */
     public function testLegacyCreateServiceFactoryService()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $builder = new ContainerBuilder();
         $builder->register('foo_service', 'Bar\FooClass');
         $builder
@@ -401,12 +405,9 @@ public function testCreateServiceConfigurator()
         $builder->register('foo3', 'Bar\FooClass')->setConfigurator(array(new Reference('baz'), 'configure'));
         $this->assertTrue($builder->get('foo3')->configured, '->createService() calls the configurator');
 
-        $builder->register('foo4', 'Bar\FooClass')->setConfigurator(array($builder->getDefinition('baz'), 'configure'));
-        $this->assertTrue($builder->get('foo4')->configured, '->createService() calls the configurator');
-
-        $builder->register('foo5', 'Bar\FooClass')->setConfigurator('foo');
+        $builder->register('foo4', 'Bar\FooClass')->setConfigurator('foo');
         try {
-            $builder->get('foo5');
+            $builder->get('foo4');
             $this->fail('->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
         } catch (\InvalidArgumentException $e) {
             $this->assertEquals('The configure callable for class "Bar\FooClass" is not a callable.', $e->getMessage(), '->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
@@ -731,6 +732,8 @@ public function testNoExceptionWhenSetSyntheticServiceOnAFrozenContainer()
      */
     public function testLegacySetOnSynchronizedService()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $container->register('baz', 'BazClass')
             ->setSynchronized(true)
@@ -751,6 +754,8 @@ public function testLegacySetOnSynchronizedService()
      */
     public function testLegacySynchronizedServiceWithScopes()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $container->addScope(new Scope('foo'));
         $container->register('baz', 'BazClass')
diff --git a/core/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php b/core/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
index 732eead1407bb129ab94de396fdd4938d05f8c55..f9006540a561e273b10913893734f534ee4816ac 100644
--- a/core/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
@@ -55,6 +55,8 @@ public function getPropertyTests()
      */
     public function testLegacySetProperty($property, $changeKey)
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $def = new DefinitionDecorator('foo');
 
         $getter = 'get'.ucfirst($property);
diff --git a/core/vendor/symfony/dependency-injection/Tests/DefinitionTest.php b/core/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
index b501f11839017a72672061fd0a3a78092618bb8d..b6539f3b74003f4b41cadcbbc448b823b4772d40 100644
--- a/core/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
@@ -170,6 +170,8 @@ public function testSetIsSynthetic()
      */
     public function testLegacySetIsSynchronized()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $def = new Definition('stdClass');
         $this->assertFalse($def->isSynchronized(), '->isSynchronized() returns false by default');
         $this->assertSame($def, $def->setSynchronized(true), '->setSynchronized() implements a fluent interface');
diff --git a/core/vendor/symfony/dependency-injection/Tests/Dumper/GraphvizDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/GraphvizDumperTest.php
index 5da11359fa8b5763d37faaa03349c3c325ddb7e3..ba5e12cd5076bc3c5061120142892c7e0d793fe0 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Dumper/GraphvizDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/GraphvizDumperTest.php
@@ -28,6 +28,8 @@ public static function setUpBeforeClass()
      */
     public function testLegacyDump()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = include self::$fixturesPath.'/containers/legacy-container9.php';
         $dumper = new GraphvizDumper($container);
         $this->assertEquals(str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/legacy-services9.dot')), $dumper->dump(), '->dump() dumps services');
diff --git a/core/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
index 063007e5d34e3e5eb28a96db598f41c9020b227d..7fa0c17a13b7683f1fc9d21e064cf1f9068a8d18 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
@@ -129,6 +129,8 @@ public function testAddService()
      */
     public function testLegacySynchronizedServices()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = include self::$fixturesPath.'/containers/container20.php';
         $dumper = new PhpDumper($container);
         $this->assertEquals(str_replace('%path%', str_replace('\\', '\\\\', self::$fixturesPath.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR), file_get_contents(self::$fixturesPath.'/php/services20.php')), $dumper->dump(), '->dump() dumps services');
diff --git a/core/vendor/symfony/dependency-injection/Tests/Dumper/XmlDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/XmlDumperTest.php
index 8aa544c728f4a29fb86b9553514ae2da67a89f71..9ee103630a12784de21399379bd64e8b17b2aae3 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Dumper/XmlDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/XmlDumperTest.php
@@ -49,6 +49,8 @@ public function testAddParameters()
      */
     public function testLegacyAddService()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = include self::$fixturesPath.'/containers/legacy-container9.php';
         $dumper = new XmlDumper($container);
 
diff --git a/core/vendor/symfony/dependency-injection/Tests/Dumper/YamlDumperTest.php b/core/vendor/symfony/dependency-injection/Tests/Dumper/YamlDumperTest.php
index 8e9f1174c250edac2bc554908d5ae9c5114ba467..c22c7eb40e24fbe818aa7c220aa80cafa4ebaf11 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Dumper/YamlDumperTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Dumper/YamlDumperTest.php
@@ -45,6 +45,8 @@ public function testAddParameters()
      */
     public function testLegacyAddService()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = include self::$fixturesPath.'/containers/legacy-container9.php';
         $dumper = new YamlDumper($container);
 
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/createphar.php b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/createphar.php
index 5fa06a0eb50e6fecf430d5b200d0cd00df465770..cfe9425c50403ddd64b58c952e931895ab93bc30 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/createphar.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/includes/createphar.php
@@ -44,4 +44,4 @@ public function getAlias()
 </xsd:schema>
 EOT
 );
-$phar->setStub('<?php Phar::mapPhar("ProjectWithXsdExtensionInPhar.phar"); require_once "phar://ProjectWithXsdExtensionInPhar.phar/ProjectWithXsdExtensionInPhar.php"; __HALT_COMPILER(); ?>');
+$phar->setStub('<?php require_once "phar://ProjectWithXsdExtensionInPhar.phar/ProjectWithXsdExtensionInPhar.php"; __HALT_COMPILER(); ?>');
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services6.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services6.xml
index 708e10fd5dcd7b160f5cc1e1956bc84d11e60234..17fe00f8fe93cc03e2ec357a52d1269f896af99e 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services6.xml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/legacy-services6.xml
@@ -6,6 +6,5 @@
   <services>
     <service id="constructor" class="FooClass" factory-method="getInstance" />
     <service id="factory_service" factory-method="getInstance" factory-service="baz_factory" />
-    <service id="request" class="Request" synthetic="true" synchronized="true" lazy="true"/>
   </services>
 </container>
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services6.xml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services6.xml
index 9eb7b8915e627c6eb839bebef731dc94a65f6dae..3a68c6e39a33cfd5186ff3bb1cad669473835923 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services6.xml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services6.xml
@@ -47,6 +47,7 @@
     </service>
     <service id="alias_for_foo" alias="foo" />
     <service id="another_alias_for_foo" alias="foo" public="false" />
+    <service id="request" class="Request" synthetic="true" synchronized="true" lazy="true"/>
     <service id="decorator_service" decorates="decorated" />
     <service id="decorator_service_with_name" decorates="decorated" decoration-inner-name="decorated.pif-pouf"/>
     <service id="new_factory1" class="FooBarClass">
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services6.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services6.yml
index 46ac679940e13dec6f7ef0461146e28f342f1229..d6ca937a5ede2720ed6d97d7aa2bcf5280f58656 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services6.yml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/legacy-services6.yml
@@ -1,8 +1,3 @@
 services:
     constructor: { class: FooClass, factory_method: getInstance }
     factory_service: { class: BazClass, factory_method: getInstance, factory_service: baz_factory }
-    request:
-        class: Request
-        synthetic: true
-        synchronized: true
-        lazy: true
diff --git a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services6.yml b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services6.yml
index 78abf4d15552131fb4741a9e71b9bd136958b837..8820b274ee20df91db55c794c472d0940f1ced4a 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services6.yml
+++ b/core/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services6.yml
@@ -23,6 +23,11 @@ services:
     another_alias_for_foo:
         alias: foo
         public: false
+    request:
+        class: Request
+        synthetic: true
+        synchronized: true
+        lazy: true
     decorator_service:
         decorates: decorated
     decorator_service_with_name:
diff --git a/core/vendor/symfony/dependency-injection/Tests/LegacyContainerBuilderTest.php b/core/vendor/symfony/dependency-injection/Tests/LegacyContainerBuilderTest.php
index 40aec20065662e06c5f25e33490a947405b276f1..b8512a2610eac1f12d5b99136649bb5c3fce6cf2 100644
--- a/core/vendor/symfony/dependency-injection/Tests/LegacyContainerBuilderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/LegacyContainerBuilderTest.php
@@ -19,6 +19,11 @@
  */
 class LegacyContainerBuilderTest extends \PHPUnit_Framework_TestCase
 {
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
     /**
      * @covers Symfony\Component\DependencyInjection\ContainerBuilder::createService
      */
diff --git a/core/vendor/symfony/dependency-injection/Tests/LegacyDefinitionTest.php b/core/vendor/symfony/dependency-injection/Tests/LegacyDefinitionTest.php
index b85d81f48153d53d35a7ecc584c0ff01c2102d58..437b77b31b05c02187fde7b77a2756f3194b6313 100644
--- a/core/vendor/symfony/dependency-injection/Tests/LegacyDefinitionTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/LegacyDefinitionTest.php
@@ -18,6 +18,11 @@
  */
 class LegacyDefinitionTest extends \PHPUnit_Framework_TestCase
 {
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
     public function testSetGetFactoryClass()
     {
         $def = new Definition('stdClass');
diff --git a/core/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php b/core/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
index 8bf524ae4f32f630b01c50c6fa65fbb6114e717e..501d680fcc41ea974c6bc1ceb8050850089d821b 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
@@ -195,6 +195,8 @@ public function testLoadAnonymousServices()
      */
     public function testLegacyLoadServices()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
         $loader->load('legacy-services6.xml');
@@ -204,10 +206,6 @@ public function testLegacyLoadServices()
         $this->assertNull($services['factory_service']->getClass());
         $this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
         $this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
-        $this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
-        $this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
-        $this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
-        $this->assertNull($services['request']->getDecoratedService());
     }
 
     public function testLoadServices()
@@ -233,6 +231,10 @@ public function testLoadServices()
         $this->assertEquals(array(new Reference('baz', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
         $this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
 
+        $this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
+        $this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
+        $this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
+
         $aliases = $container->getAliases();
         $this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses <service> elements');
         $this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
@@ -241,6 +243,7 @@ public function testLoadServices()
         $this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
         $this->assertFalse($aliases['another_alias_for_foo']->isPublic());
 
+        $this->assertNull($services['request']->getDecoratedService());
         $this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
         $this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
     }
diff --git a/core/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php b/core/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
index 28cf0ebf6252afc6524392222c8f220296ff6e9f..716aba558686662190ef1a23f7bdf308155cfcfa 100644
--- a/core/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
@@ -124,6 +124,8 @@ public function testLoadImports()
      */
     public function testLegacyLoadServices()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('legacy-services6.yml');
@@ -133,10 +135,6 @@ public function testLegacyLoadServices()
         $this->assertEquals('BazClass', $services['factory_service']->getClass());
         $this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
         $this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
-        $this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
-        $this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
-        $this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
-        $this->assertNull($services['request']->getDecoratedService());
     }
 
     public function testLoadServices()
@@ -162,6 +160,10 @@ public function testLoadServices()
         $this->assertEquals(array(new Reference('baz'), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
         $this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
 
+        $this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
+        $this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
+        $this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
+
         $aliases = $container->getAliases();
         $this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses aliases');
         $this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
@@ -170,6 +172,7 @@ public function testLoadServices()
         $this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
         $this->assertFalse($aliases['another_alias_for_foo']->isPublic());
 
+        $this->assertNull($services['request']->getDecoratedService());
         $this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
         $this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
     }
diff --git a/core/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php b/core/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
index 6d963dc054566e194d3a287bb6dd60d445e2dd99..e6e7fea2f17a9c0d0cb0943c8b0a8c9a4aae9bf7 100644
--- a/core/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
+++ b/core/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
@@ -57,13 +57,4 @@ public function testAdd()
         $bag = new FrozenParameterBag(array());
         $bag->add(array());
     }
-
-    /**
-     * @expectedException \LogicException
-     */
-    public function testRemove()
-    {
-        $bag = new FrozenParameterBag(array('foo' => 'bar'));
-        $bag->remove('foo');
-    }
 }
diff --git a/core/vendor/symfony/dom-crawler/.gitignore b/core/vendor/symfony/dom-crawler/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/core/vendor/symfony/dom-crawler/CHANGELOG.md b/core/vendor/symfony/dom-crawler/CHANGELOG.md
deleted file mode 100644
index 48fd323f8202ce49a69b5d5d710b64a786e4231e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/CHANGELOG.md
+++ /dev/null
@@ -1,45 +0,0 @@
-CHANGELOG
-=========
-
-2.5.0
------
-
-* [BC BREAK] The default value for checkbox and radio inputs without a value attribute have changed
-  from '1' to 'on' to match the HTML specification.
-* [BC BREAK] The typehints on the `Link`, `Form` and `FormField` classes have been changed from
-  `\DOMNode` to `DOMElement`. Using any other type of `DOMNode` was triggering fatal errors in previous
-  versions. Code extending these classes will need to update the typehints when overwriting these methods.
-
-2.4.0
------
-
- * `Crawler::addXmlContent()` removes the default document namespace again if it's an only namespace.
- * added support for automatic discovery and explicit registration of document
-   namespaces for `Crawler::filterXPath()` and `Crawler::filter()`
- * improved content type guessing in `Crawler::addContent()`
- * [BC BREAK] `Crawler::addXmlContent()` no longer removes the default document
-   namespace
-
-2.3.0
------
-
- * added Crawler::html()
- * [BC BREAK] Crawler::each() and Crawler::reduce() now return Crawler instances instead of DomElement instances
- * added schema relative URL support to links
- * added support for HTML5 'form' attribute
-
-2.2.0
------
-
- * added a way to set raw path to the file in FileFormField - necessary for
-   simulating HTTP requests
-
-2.1.0
------
-
- * added support for the HTTP PATCH method
- * refactored the Form class internals to support multi-dimensional fields
-   (the public API is backward compatible)
- * added a way to get parsing errors for Crawler::addHtmlContent() and
-   Crawler::addXmlContent() via libxml functions
- * added support for submitting a form without a submit button
diff --git a/core/vendor/symfony/dom-crawler/Crawler.php b/core/vendor/symfony/dom-crawler/Crawler.php
deleted file mode 100644
index 3fd87bd766cdac5689a39640988b033e5bba7f0e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Crawler.php
+++ /dev/null
@@ -1,1028 +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\DomCrawler;
-
-use Symfony\Component\CssSelector\CssSelector;
-
-/**
- * Crawler eases navigation of a list of \DOMElement objects.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class Crawler extends \SplObjectStorage
-{
-    /**
-     * @var string The current URI
-     */
-    protected $uri;
-
-    /**
-     * @var string The default namespace prefix to be used with XPath and CSS expressions
-     */
-    private $defaultNamespacePrefix = 'default';
-
-    /**
-     * @var array A map of manually registered namespaces
-     */
-    private $namespaces = array();
-
-    /**
-     * @var string The base href value
-     */
-    private $baseHref;
-
-    /**
-     * Constructor.
-     *
-     * @param mixed  $node       A Node to use as the base for the crawling
-     * @param string $currentUri The current URI
-     * @param string $baseHref   The base href value
-     *
-     * @api
-     */
-    public function __construct($node = null, $currentUri = null, $baseHref = null)
-    {
-        $this->uri = $currentUri;
-        $this->baseHref = $baseHref ?: $currentUri;
-
-        $this->add($node);
-    }
-
-    /**
-     * Removes all the nodes.
-     *
-     * @api
-     */
-    public function clear()
-    {
-        $this->removeAll($this);
-    }
-
-    /**
-     * Adds a node to the current list of nodes.
-     *
-     * This method uses the appropriate specialized add*() method based
-     * on the type of the argument.
-     *
-     * @param \DOMNodeList|\DOMNode|array|string|null $node A node
-     *
-     * @throws \InvalidArgumentException When node is not the expected type.
-     *
-     * @api
-     */
-    public function add($node)
-    {
-        if ($node instanceof \DOMNodeList) {
-            $this->addNodeList($node);
-        } elseif ($node instanceof \DOMNode) {
-            $this->addNode($node);
-        } elseif (is_array($node)) {
-            $this->addNodes($node);
-        } elseif (is_string($node)) {
-            $this->addContent($node);
-        } elseif (null !== $node) {
-            throw new \InvalidArgumentException(sprintf('Expecting a DOMNodeList or DOMNode instance, an array, a string, or null, but got "%s".', is_object($node) ? get_class($node) : gettype($node)));
-        }
-    }
-
-    /**
-     * Adds HTML/XML content.
-     *
-     * If the charset is not set via the content type, it is assumed
-     * to be ISO-8859-1, which is the default charset defined by the
-     * HTTP 1.1 specification.
-     *
-     * @param string      $content A string to parse as HTML/XML
-     * @param null|string $type    The content type of the string
-     */
-    public function addContent($content, $type = null)
-    {
-        if (empty($type)) {
-            $type = 0 === strpos($content, '<?xml') ? 'application/xml' : 'text/html';
-        }
-
-        // DOM only for HTML/XML content
-        if (!preg_match('/(x|ht)ml/i', $type, $xmlMatches)) {
-            return;
-        }
-
-        $charset = null;
-        if (false !== $pos = stripos($type, 'charset=')) {
-            $charset = substr($type, $pos + 8);
-            if (false !== $pos = strpos($charset, ';')) {
-                $charset = substr($charset, 0, $pos);
-            }
-        }
-
-        // http://www.w3.org/TR/encoding/#encodings
-        // http://www.w3.org/TR/REC-xml/#NT-EncName
-        if (null === $charset &&
-            preg_match('/\<meta[^\>]+charset *= *["\']?([a-zA-Z\-0-9_:.]+)/i', $content, $matches)) {
-            $charset = $matches[1];
-        }
-
-        if (null === $charset) {
-            $charset = 'ISO-8859-1';
-        }
-
-        if ('x' === $xmlMatches[1]) {
-            $this->addXmlContent($content, $charset);
-        } else {
-            $this->addHtmlContent($content, $charset);
-        }
-    }
-
-    /**
-     * Adds an HTML content to the list of nodes.
-     *
-     * The libxml errors are disabled when the content is parsed.
-     *
-     * If you want to get parsing errors, be sure to enable
-     * internal errors via libxml_use_internal_errors(true)
-     * and then, get the errors via libxml_get_errors(). Be
-     * sure to clear errors with libxml_clear_errors() afterward.
-     *
-     * @param string $content The HTML content
-     * @param string $charset The charset
-     *
-     * @api
-     */
-    public function addHtmlContent($content, $charset = 'UTF-8')
-    {
-        $internalErrors = libxml_use_internal_errors(true);
-        $disableEntities = libxml_disable_entity_loader(true);
-
-        $dom = new \DOMDocument('1.0', $charset);
-        $dom->validateOnParse = true;
-
-        if (function_exists('mb_convert_encoding')) {
-            $hasError = false;
-            set_error_handler(function () use (&$hasError) {
-                $hasError = true;
-            });
-            $tmpContent = @mb_convert_encoding($content, 'HTML-ENTITIES', $charset);
-
-            restore_error_handler();
-
-            if (!$hasError) {
-                $content = $tmpContent;
-            }
-        }
-
-        if ('' !== trim($content)) {
-            @$dom->loadHTML($content);
-        }
-
-        libxml_use_internal_errors($internalErrors);
-        libxml_disable_entity_loader($disableEntities);
-
-        $this->addDocument($dom);
-
-        $base = $this->filterRelativeXPath('descendant-or-self::base')->extract(array('href'));
-
-        $baseHref = current($base);
-        if (count($base) && !empty($baseHref)) {
-            if ($this->baseHref) {
-                $linkNode = $dom->createElement('a');
-                $linkNode->setAttribute('href', $baseHref);
-                $link = new Link($linkNode, $this->baseHref);
-                $this->baseHref = $link->getUri();
-            } else {
-                $this->baseHref = $baseHref;
-            }
-        }
-    }
-
-    /**
-     * Adds an XML content to the list of nodes.
-     *
-     * The libxml errors are disabled when the content is parsed.
-     *
-     * If you want to get parsing errors, be sure to enable
-     * internal errors via libxml_use_internal_errors(true)
-     * and then, get the errors via libxml_get_errors(). Be
-     * sure to clear errors with libxml_clear_errors() afterward.
-     *
-     * @param string $content The XML content
-     * @param string $charset The charset
-     *
-     * @api
-     */
-    public function addXmlContent($content, $charset = 'UTF-8')
-    {
-        // remove the default namespace if it's the only namespace to make XPath expressions simpler
-        if (!preg_match('/xmlns:/', $content)) {
-            $content = str_replace('xmlns', 'ns', $content);
-        }
-
-        $internalErrors = libxml_use_internal_errors(true);
-        $disableEntities = libxml_disable_entity_loader(true);
-
-        $dom = new \DOMDocument('1.0', $charset);
-        $dom->validateOnParse = true;
-
-        if ('' !== trim($content)) {
-            @$dom->loadXML($content, LIBXML_NONET);
-        }
-
-        libxml_use_internal_errors($internalErrors);
-        libxml_disable_entity_loader($disableEntities);
-
-        $this->addDocument($dom);
-    }
-
-    /**
-     * Adds a \DOMDocument to the list of nodes.
-     *
-     * @param \DOMDocument $dom A \DOMDocument instance
-     *
-     * @api
-     */
-    public function addDocument(\DOMDocument $dom)
-    {
-        if ($dom->documentElement) {
-            $this->addNode($dom->documentElement);
-        }
-    }
-
-    /**
-     * Adds a \DOMNodeList to the list of nodes.
-     *
-     * @param \DOMNodeList $nodes A \DOMNodeList instance
-     *
-     * @api
-     */
-    public function addNodeList(\DOMNodeList $nodes)
-    {
-        foreach ($nodes as $node) {
-            if ($node instanceof \DOMNode) {
-                $this->addNode($node);
-            }
-        }
-    }
-
-    /**
-     * Adds an array of \DOMNode instances to the list of nodes.
-     *
-     * @param \DOMNode[] $nodes An array of \DOMNode instances
-     *
-     * @api
-     */
-    public function addNodes(array $nodes)
-    {
-        foreach ($nodes as $node) {
-            $this->add($node);
-        }
-    }
-
-    /**
-     * Adds a \DOMNode instance to the list of nodes.
-     *
-     * @param \DOMNode $node A \DOMNode instance
-     *
-     * @api
-     */
-    public function addNode(\DOMNode $node)
-    {
-        if ($node instanceof \DOMDocument) {
-            $this->attach($node->documentElement);
-        } else {
-            $this->attach($node);
-        }
-    }
-
-    /**
-     * Returns a node given its position in the node list.
-     *
-     * @param int $position The position
-     *
-     * @return Crawler A new instance of the Crawler with the selected node, or an empty Crawler if it does not exist.
-     *
-     * @api
-     */
-    public function eq($position)
-    {
-        foreach ($this as $i => $node) {
-            if ($i == $position) {
-                return new static($node, $this->uri, $this->baseHref);
-            }
-        }
-
-        return new static(null, $this->uri, $this->baseHref);
-    }
-
-    /**
-     * Calls an anonymous function on each node of the list.
-     *
-     * The anonymous function receives the position and the node wrapped
-     * in a Crawler instance as arguments.
-     *
-     * Example:
-     *
-     *     $crawler->filter('h1')->each(function ($node, $i) {
-     *         return $node->text();
-     *     });
-     *
-     * @param \Closure $closure An anonymous function
-     *
-     * @return array An array of values returned by the anonymous function
-     *
-     * @api
-     */
-    public function each(\Closure $closure)
-    {
-        $data = array();
-        foreach ($this as $i => $node) {
-            $data[] = $closure(new static($node, $this->uri, $this->baseHref), $i);
-        }
-
-        return $data;
-    }
-
-    /**
-     * Slices the list of nodes by $offset and $length.
-     *
-     * @param int $offset
-     * @param int $length
-     *
-     * @return Crawler A Crawler instance with the sliced nodes
-     */
-    public function slice($offset = 0, $length = -1)
-    {
-        return new static(iterator_to_array(new \LimitIterator($this, $offset, $length)), $this->uri);
-    }
-
-    /**
-     * Reduces the list of nodes by calling an anonymous function.
-     *
-     * To remove a node from the list, the anonymous function must return false.
-     *
-     * @param \Closure $closure An anonymous function
-     *
-     * @return Crawler A Crawler instance with the selected nodes.
-     *
-     * @api
-     */
-    public function reduce(\Closure $closure)
-    {
-        $nodes = array();
-        foreach ($this as $i => $node) {
-            if (false !== $closure(new static($node, $this->uri, $this->baseHref), $i)) {
-                $nodes[] = $node;
-            }
-        }
-
-        return new static($nodes, $this->uri, $this->baseHref);
-    }
-
-    /**
-     * Returns the first node of the current selection.
-     *
-     * @return Crawler A Crawler instance with the first selected node
-     *
-     * @api
-     */
-    public function first()
-    {
-        return $this->eq(0);
-    }
-
-    /**
-     * Returns the last node of the current selection.
-     *
-     * @return Crawler A Crawler instance with the last selected node
-     *
-     * @api
-     */
-    public function last()
-    {
-        return $this->eq(count($this) - 1);
-    }
-
-    /**
-     * Returns the siblings nodes of the current selection.
-     *
-     * @return Crawler A Crawler instance with the sibling nodes
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     *
-     * @api
-     */
-    public function siblings()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        return new static($this->sibling($this->getNode(0)->parentNode->firstChild), $this->uri, $this->baseHref);
-    }
-
-    /**
-     * Returns the next siblings nodes of the current selection.
-     *
-     * @return Crawler A Crawler instance with the next sibling nodes
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     *
-     * @api
-     */
-    public function nextAll()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        return new static($this->sibling($this->getNode(0)), $this->uri, $this->baseHref);
-    }
-
-    /**
-     * Returns the previous sibling nodes of the current selection.
-     *
-     * @return Crawler A Crawler instance with the previous sibling nodes
-     *
-     * @throws \InvalidArgumentException
-     *
-     * @api
-     */
-    public function previousAll()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        return new static($this->sibling($this->getNode(0), 'previousSibling'), $this->uri, $this->baseHref);
-    }
-
-    /**
-     * Returns the parents nodes of the current selection.
-     *
-     * @return Crawler A Crawler instance with the parents nodes of the current selection
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     *
-     * @api
-     */
-    public function parents()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        $node = $this->getNode(0);
-        $nodes = array();
-
-        while ($node = $node->parentNode) {
-            if (1 === $node->nodeType) {
-                $nodes[] = $node;
-            }
-        }
-
-        return new static($nodes, $this->uri, $this->baseHref);
-    }
-
-    /**
-     * Returns the children nodes of the current selection.
-     *
-     * @return Crawler A Crawler instance with the children nodes
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     *
-     * @api
-     */
-    public function children()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        $node = $this->getNode(0)->firstChild;
-
-        return new static($node ? $this->sibling($node) : array(), $this->uri, $this->baseHref);
-    }
-
-    /**
-     * Returns the attribute value of the first node of the list.
-     *
-     * @param string $attribute The attribute name
-     *
-     * @return string|null The attribute value or null if the attribute does not exist
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     *
-     * @api
-     */
-    public function attr($attribute)
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        $node = $this->getNode(0);
-
-        return $node->hasAttribute($attribute) ? $node->getAttribute($attribute) : null;
-    }
-
-    /**
-     * Returns the node name of the first node of the list.
-     *
-     * @return string The node name
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     */
-    public function nodeName()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        return $this->getNode(0)->nodeName;
-    }
-
-    /**
-     * Returns the node value of the first node of the list.
-     *
-     * @return string The node value
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     *
-     * @api
-     */
-    public function text()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        return $this->getNode(0)->nodeValue;
-    }
-
-    /**
-     * Returns the first node of the list as HTML.
-     *
-     * @return string The node html
-     *
-     * @throws \InvalidArgumentException When current node is empty
-     */
-    public function html()
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        $html = '';
-        foreach ($this->getNode(0)->childNodes as $child) {
-            $html .= $child->ownerDocument->saveHTML($child);
-        }
-
-        return $html;
-    }
-
-    /**
-     * Extracts information from the list of nodes.
-     *
-     * You can extract attributes or/and the node value (_text).
-     *
-     * Example:
-     *
-     * $crawler->filter('h1 a')->extract(array('_text', 'href'));
-     *
-     * @param array $attributes An array of attributes
-     *
-     * @return array An array of extracted values
-     *
-     * @api
-     */
-    public function extract($attributes)
-    {
-        $attributes = (array) $attributes;
-        $count = count($attributes);
-
-        $data = array();
-        foreach ($this as $node) {
-            $elements = array();
-            foreach ($attributes as $attribute) {
-                if ('_text' === $attribute) {
-                    $elements[] = $node->nodeValue;
-                } else {
-                    $elements[] = $node->getAttribute($attribute);
-                }
-            }
-
-            $data[] = $count > 1 ? $elements : $elements[0];
-        }
-
-        return $data;
-    }
-
-    /**
-     * Filters the list of nodes with an XPath expression.
-     *
-     * The XPath expression is evaluated in the context of the crawler, which
-     * is considered as a fake parent of the elements inside it.
-     * This means that a child selector "div" or "./div" will match only
-     * the div elements of the current crawler, not their children.
-     *
-     * @param string $xpath An XPath expression
-     *
-     * @return Crawler A new instance of Crawler with the filtered list of nodes
-     *
-     * @api
-     */
-    public function filterXPath($xpath)
-    {
-        $xpath = $this->relativize($xpath);
-
-        // If we dropped all expressions in the XPath while preparing it, there would be no match
-        if ('' === $xpath) {
-            return new static(null, $this->uri, $this->baseHref);
-        }
-
-        return $this->filterRelativeXPath($xpath);
-    }
-
-    /**
-     * Filters the list of nodes with a CSS selector.
-     *
-     * This method only works if you have installed the CssSelector Symfony Component.
-     *
-     * @param string $selector A CSS selector
-     *
-     * @return Crawler A new instance of Crawler with the filtered list of nodes
-     *
-     * @throws \RuntimeException if the CssSelector Component is not available
-     *
-     * @api
-     */
-    public function filter($selector)
-    {
-        if (!class_exists('Symfony\\Component\\CssSelector\\CssSelector')) {
-            throw new \RuntimeException('Unable to filter with a CSS selector as the Symfony CssSelector is not installed (you can use filterXPath instead).');
-        }
-
-        // The CssSelector already prefixes the selector with descendant-or-self::
-        return $this->filterRelativeXPath(CssSelector::toXPath($selector));
-    }
-
-    /**
-     * Selects links by name or alt value for clickable images.
-     *
-     * @param string $value The link text
-     *
-     * @return Crawler A new instance of Crawler with the filtered list of nodes
-     *
-     * @api
-     */
-    public function selectLink($value)
-    {
-        $xpath = sprintf('descendant-or-self::a[contains(concat(\' \', normalize-space(string(.)), \' \'), %s) ', static::xpathLiteral(' '.$value.' ')).
-                            sprintf('or ./img[contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)]]', static::xpathLiteral(' '.$value.' '));
-
-        return $this->filterRelativeXPath($xpath);
-    }
-
-    /**
-     * Selects a button by name or alt value for images.
-     *
-     * @param string $value The button text
-     *
-     * @return Crawler A new instance of Crawler with the filtered list of nodes
-     *
-     * @api
-     */
-    public function selectButton($value)
-    {
-        $translate = 'translate(@type, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")';
-        $xpath = sprintf('descendant-or-self::input[((contains(%s, "submit") or contains(%s, "button")) and contains(concat(\' \', normalize-space(string(@value)), \' \'), %s)) ', $translate, $translate, static::xpathLiteral(' '.$value.' ')).
-                         sprintf('or (contains(%s, "image") and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)) or @id=%s or @name=%s] ', $translate, static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value), static::xpathLiteral($value)).
-                         sprintf('| descendant-or-self::button[contains(concat(\' \', normalize-space(string(.)), \' \'), %s) or @id=%s or @name=%s]', static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value), static::xpathLiteral($value));
-
-        return $this->filterRelativeXPath($xpath);
-    }
-
-    /**
-     * Returns a Link object for the first node in the list.
-     *
-     * @param string $method The method for the link (get by default)
-     *
-     * @return Link A Link instance
-     *
-     * @throws \InvalidArgumentException If the current node list is empty
-     *
-     * @api
-     */
-    public function link($method = 'get')
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        $node = $this->getNode(0);
-
-        return new Link($node, $this->baseHref, $method);
-    }
-
-    /**
-     * Returns an array of Link objects for the nodes in the list.
-     *
-     * @return Link[] An array of Link instances
-     *
-     * @api
-     */
-    public function links()
-    {
-        $links = array();
-        foreach ($this as $node) {
-            $links[] = new Link($node, $this->baseHref, 'get');
-        }
-
-        return $links;
-    }
-
-    /**
-     * Returns a Form object for the first node in the list.
-     *
-     * @param array  $values An array of values for the form fields
-     * @param string $method The method for the form
-     *
-     * @return Form A Form instance
-     *
-     * @throws \InvalidArgumentException If the current node list is empty
-     *
-     * @api
-     */
-    public function form(array $values = null, $method = null)
-    {
-        if (!count($this)) {
-            throw new \InvalidArgumentException('The current node list is empty.');
-        }
-
-        $form = new Form($this->getNode(0), $this->uri, $method);
-
-        if (null !== $values) {
-            $form->setValues($values);
-        }
-
-        return $form;
-    }
-
-    /**
-     * Overloads a default namespace prefix to be used with XPath and CSS expressions.
-     *
-     * @param string $prefix
-     */
-    public function setDefaultNamespacePrefix($prefix)
-    {
-        $this->defaultNamespacePrefix = $prefix;
-    }
-
-    /**
-     * @param string $prefix
-     * @param string $namespace
-     */
-    public function registerNamespace($prefix, $namespace)
-    {
-        $this->namespaces[$prefix] = $namespace;
-    }
-
-    /**
-     * Converts string for XPath expressions.
-     *
-     * Escaped characters are: quotes (") and apostrophe (').
-     *
-     *  Examples:
-     *  <code>
-     *     echo Crawler::xpathLiteral('foo " bar');
-     *     //prints 'foo " bar'
-     *
-     *     echo Crawler::xpathLiteral("foo ' bar");
-     *     //prints "foo ' bar"
-     *
-     *     echo Crawler::xpathLiteral('a\'b"c');
-     *     //prints concat('a', "'", 'b"c')
-     *  </code>
-     *
-     * @param string $s String to be escaped
-     *
-     * @return string Converted string
-     */
-    public static function xpathLiteral($s)
-    {
-        if (false === strpos($s, "'")) {
-            return sprintf("'%s'", $s);
-        }
-
-        if (false === strpos($s, '"')) {
-            return sprintf('"%s"', $s);
-        }
-
-        $string = $s;
-        $parts = array();
-        while (true) {
-            if (false !== $pos = strpos($string, "'")) {
-                $parts[] = sprintf("'%s'", substr($string, 0, $pos));
-                $parts[] = "\"'\"";
-                $string = substr($string, $pos + 1);
-            } else {
-                $parts[] = "'$string'";
-                break;
-            }
-        }
-
-        return sprintf('concat(%s)', implode($parts, ', '));
-    }
-
-    /**
-     * Filters the list of nodes with an XPath expression.
-     *
-     * The XPath expression should already be processed to apply it in the context of each node.
-     *
-     * @param string $xpath
-     *
-     * @return Crawler
-     */
-    private function filterRelativeXPath($xpath)
-    {
-        $prefixes = $this->findNamespacePrefixes($xpath);
-
-        $crawler = new static(null, $this->uri, $this->baseHref);
-
-        foreach ($this as $node) {
-            $domxpath = $this->createDOMXPath($node->ownerDocument, $prefixes);
-            $crawler->add($domxpath->query($xpath, $node));
-        }
-
-        return $crawler;
-    }
-
-    /**
-     * Make the XPath relative to the current context.
-     *
-     * The returned XPath will match elements matching the XPath inside the current crawler
-     * when running in the context of a node of the crawler.
-     *
-     * @param string $xpath
-     *
-     * @return string
-     */
-    private function relativize($xpath)
-    {
-        $expressions = array();
-
-        $unionPattern = '/\|(?![^\[]*\])/';
-        // An expression which will never match to replace expressions which cannot match in the crawler
-        // We cannot simply drop
-        $nonMatchingExpression = 'a[name() = "b"]';
-
-        // Split any unions into individual expressions.
-        foreach (preg_split($unionPattern, $xpath) as $expression) {
-            $expression = trim($expression);
-            $parenthesis = '';
-
-            // If the union is inside some braces, we need to preserve the opening braces and apply
-            // the change only inside it.
-            if (preg_match('/^[\(\s*]+/', $expression, $matches)) {
-                $parenthesis = $matches[0];
-                $expression = substr($expression, strlen($parenthesis));
-            }
-
-            // BC for Symfony 2.4 and lower were elements were adding in a fake _root parent
-            if (0 === strpos($expression, '/_root/')) {
-                $expression = './'.substr($expression, 7);
-            } elseif (0 === strpos($expression, 'self::*/')) {
-                $expression = './'.substr($expression, 8);
-            }
-
-            // add prefix before absolute element selector
-            if (empty($expression)) {
-                $expression = $nonMatchingExpression;
-            } elseif (0 === strpos($expression, '//')) {
-                $expression = 'descendant-or-self::'.substr($expression, 2);
-            } elseif (0 === strpos($expression, './/')) {
-                $expression = 'descendant-or-self::'.substr($expression, 3);
-            } elseif (0 === strpos($expression, './')) {
-                $expression = 'self::'.substr($expression, 2);
-            } elseif (0 === strpos($expression, 'child::')) {
-                $expression = 'self::'.substr($expression, 7);
-            } elseif ('/' === $expression[0] || 0 === strpos($expression, 'self::')) {
-                // the only direct child in Symfony 2.4 and lower is _root, which is already handled previously
-                // so let's drop the expression entirely
-                $expression = $nonMatchingExpression;
-            } elseif ('.' === $expression[0]) {
-                // '.' is the fake root element in Symfony 2.4 and lower, which is excluded from results
-                $expression = $nonMatchingExpression;
-            } elseif (0 === strpos($expression, 'descendant::')) {
-                $expression = 'descendant-or-self::'.substr($expression, strlen('descendant::'));
-            } elseif (preg_match('/^(ancestor|ancestor-or-self|attribute|following|following-sibling|namespace|parent|preceding|preceding-sibling)::/', $expression)) {
-                // the fake root has no parent, preceding or following nodes and also no attributes (even no namespace attributes)
-                $expression = $nonMatchingExpression;
-            } elseif (0 !== strpos($expression, 'descendant-or-self::')) {
-                $expression = 'self::'.$expression;
-            }
-            $expressions[] = $parenthesis.$expression;
-        }
-
-        return implode(' | ', $expressions);
-    }
-
-    /**
-     * @param int $position
-     *
-     * @return \DOMElement|null
-     */
-    public function getNode($position)
-    {
-        foreach ($this as $i => $node) {
-            if ($i == $position) {
-                return $node;
-            }
-        }
-    }
-
-    /**
-     * @param \DOMElement $node
-     * @param string      $siblingDir
-     *
-     * @return array
-     */
-    protected function sibling($node, $siblingDir = 'nextSibling')
-    {
-        $nodes = array();
-
-        do {
-            if ($node !== $this->getNode(0) && $node->nodeType === 1) {
-                $nodes[] = $node;
-            }
-        } while ($node = $node->$siblingDir);
-
-        return $nodes;
-    }
-
-    /**
-     * @param \DOMDocument $document
-     * @param array        $prefixes
-     *
-     * @return \DOMXPath
-     *
-     * @throws \InvalidArgumentException
-     */
-    private function createDOMXPath(\DOMDocument $document, array $prefixes = array())
-    {
-        $domxpath = new \DOMXPath($document);
-
-        foreach ($prefixes as $prefix) {
-            $namespace = $this->discoverNamespace($domxpath, $prefix);
-            if (null !== $namespace) {
-                $domxpath->registerNamespace($prefix, $namespace);
-            }
-        }
-
-        return $domxpath;
-    }
-
-    /**
-     * @param \DOMXPath $domxpath
-     * @param string    $prefix
-     *
-     * @return string
-     *
-     * @throws \InvalidArgumentException
-     */
-    private function discoverNamespace(\DOMXPath $domxpath, $prefix)
-    {
-        if (isset($this->namespaces[$prefix])) {
-            return $this->namespaces[$prefix];
-        }
-
-        // ask for one namespace, otherwise we'd get a collection with an item for each node
-        $namespaces = $domxpath->query(sprintf('(//namespace::*[name()="%s"])[last()]', $this->defaultNamespacePrefix === $prefix ? '' : $prefix));
-
-        if ($node = $namespaces->item(0)) {
-            return $node->nodeValue;
-        }
-    }
-
-    /**
-     * @param $xpath
-     *
-     * @return array
-     */
-    private function findNamespacePrefixes($xpath)
-    {
-        if (preg_match_all('/(?P<prefix>[a-z_][a-z_0-9\-\.]*):[^"\/:]/i', $xpath, $matches)) {
-            return array_unique($matches['prefix']);
-        }
-
-        return array();
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Field/ChoiceFormField.php b/core/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
deleted file mode 100644
index ae7f4d168e1810ccc072e345140c89f4b7a9eb27..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
+++ /dev/null
@@ -1,327 +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\DomCrawler\Field;
-
-/**
- * ChoiceFormField represents a choice form field.
- *
- * It is constructed from a HTML select tag, or a HTML checkbox, or radio inputs.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class ChoiceFormField extends FormField
-{
-    /**
-     * @var string
-     */
-    private $type;
-    /**
-     * @var bool
-     */
-    private $multiple;
-    /**
-     * @var array
-     */
-    private $options;
-    /**
-     * @var bool
-     */
-    private $validationDisabled = false;
-
-    /**
-     * Returns true if the field should be included in the submitted values.
-     *
-     * @return bool true if the field should be included in the submitted values, false otherwise
-     */
-    public function hasValue()
-    {
-        // don't send a value for unchecked checkboxes
-        if (in_array($this->type, array('checkbox', 'radio')) && null === $this->value) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Check if the current selected option is disabled.
-     *
-     * @return bool
-     */
-    public function isDisabled()
-    {
-        foreach ($this->options as $option) {
-            if ($option['value'] == $this->value && $option['disabled']) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Sets the value of the field.
-     *
-     * @param string $value The value of the field
-     *
-     * @api
-     */
-    public function select($value)
-    {
-        $this->setValue($value);
-    }
-
-    /**
-     * Ticks a checkbox.
-     *
-     * @throws \LogicException When the type provided is not correct
-     *
-     * @api
-     */
-    public function tick()
-    {
-        if ('checkbox' !== $this->type) {
-            throw new \LogicException(sprintf('You cannot tick "%s" as it is not a checkbox (%s).', $this->name, $this->type));
-        }
-
-        $this->setValue(true);
-    }
-
-    /**
-     * Ticks a checkbox.
-     *
-     * @throws \LogicException When the type provided is not correct
-     *
-     * @api
-     */
-    public function untick()
-    {
-        if ('checkbox' !== $this->type) {
-            throw new \LogicException(sprintf('You cannot tick "%s" as it is not a checkbox (%s).', $this->name, $this->type));
-        }
-
-        $this->setValue(false);
-    }
-
-    /**
-     * Sets the value of the field.
-     *
-     * @param string $value The value of the field
-     *
-     * @throws \InvalidArgumentException When value type provided is not correct
-     */
-    public function setValue($value)
-    {
-        if ('checkbox' === $this->type && false === $value) {
-            // uncheck
-            $this->value = null;
-        } elseif ('checkbox' === $this->type && true === $value) {
-            // check
-            $this->value = $this->options[0]['value'];
-        } else {
-            if (is_array($value)) {
-                if (!$this->multiple) {
-                    throw new \InvalidArgumentException(sprintf('The value for "%s" cannot be an array.', $this->name));
-                }
-
-                foreach ($value as $v) {
-                    if (!$this->containsOption($v, $this->options)) {
-                        throw new \InvalidArgumentException(sprintf('Input "%s" cannot take "%s" as a value (possible values: %s).', $this->name, $v, implode(', ', $this->availableOptionValues())));
-                    }
-                }
-            } elseif (!$this->containsOption($value, $this->options)) {
-                throw new \InvalidArgumentException(sprintf('Input "%s" cannot take "%s" as a value (possible values: %s).', $this->name, $value, implode(', ', $this->availableOptionValues())));
-            }
-
-            if ($this->multiple) {
-                $value = (array) $value;
-            }
-
-            if (is_array($value)) {
-                $this->value = $value;
-            } else {
-                parent::setValue($value);
-            }
-        }
-    }
-
-    /**
-     * Adds a choice to the current ones.
-     *
-     * This method should only be used internally.
-     *
-     * @param \DOMElement $node
-     *
-     * @throws \LogicException When choice provided is not multiple nor radio
-     */
-    public function addChoice(\DOMElement $node)
-    {
-        if (!$this->multiple && 'radio' !== $this->type) {
-            throw new \LogicException(sprintf('Unable to add a choice for "%s" as it is not multiple or is not a radio button.', $this->name));
-        }
-
-        $option = $this->buildOptionValue($node);
-        $this->options[] = $option;
-
-        if ($node->hasAttribute('checked')) {
-            $this->value = $option['value'];
-        }
-    }
-
-    /**
-     * Returns the type of the choice field (radio, select, or checkbox).
-     *
-     * @return string The type
-     */
-    public function getType()
-    {
-        return $this->type;
-    }
-
-    /**
-     * Returns true if the field accepts multiple values.
-     *
-     * @return bool true if the field accepts multiple values, false otherwise
-     */
-    public function isMultiple()
-    {
-        return $this->multiple;
-    }
-
-    /**
-     * Initializes the form field.
-     *
-     * @throws \LogicException When node type is incorrect
-     */
-    protected function initialize()
-    {
-        if ('input' !== $this->node->nodeName && 'select' !== $this->node->nodeName) {
-            throw new \LogicException(sprintf('A ChoiceFormField can only be created from an input or select tag (%s given).', $this->node->nodeName));
-        }
-
-        if ('input' === $this->node->nodeName && 'checkbox' !== strtolower($this->node->getAttribute('type')) && 'radio' !== strtolower($this->node->getAttribute('type'))) {
-            throw new \LogicException(sprintf('A ChoiceFormField can only be created from an input tag with a type of checkbox or radio (given type is %s).', $this->node->getAttribute('type')));
-        }
-
-        $this->value = null;
-        $this->options = array();
-        $this->multiple = false;
-
-        if ('input' == $this->node->nodeName) {
-            $this->type = strtolower($this->node->getAttribute('type'));
-            $optionValue = $this->buildOptionValue($this->node);
-            $this->options[] = $optionValue;
-
-            if ($this->node->hasAttribute('checked')) {
-                $this->value = $optionValue['value'];
-            }
-        } else {
-            $this->type = 'select';
-            if ($this->node->hasAttribute('multiple')) {
-                $this->multiple = true;
-                $this->value = array();
-                $this->name = str_replace('[]', '', $this->name);
-            }
-
-            $found = false;
-            foreach ($this->xpath->query('descendant::option', $this->node) as $option) {
-                $optionValue = $this->buildOptionValue($option);
-                $this->options[] = $optionValue;
-
-                if ($option->hasAttribute('selected')) {
-                    $found = true;
-                    if ($this->multiple) {
-                        $this->value[] = $optionValue['value'];
-                    } else {
-                        $this->value = $optionValue['value'];
-                    }
-                }
-            }
-
-            // if no option is selected and if it is a simple select box, take the first option as the value
-            if (!$found && !$this->multiple && !empty($this->options)) {
-                $this->value = $this->options[0]['value'];
-            }
-        }
-    }
-
-    /**
-     * Returns option value with associated disabled flag.
-     *
-     * @param \DOMElement $node
-     *
-     * @return array
-     */
-    private function buildOptionValue(\DOMElement $node)
-    {
-        $option = array();
-
-        $defaultValue = (isset($node->nodeValue) && !empty($node->nodeValue)) ? $node->nodeValue : 'on';
-        $option['value'] = $node->hasAttribute('value') ? $node->getAttribute('value') : $defaultValue;
-        $option['disabled'] = $node->hasAttribute('disabled');
-
-        return $option;
-    }
-
-    /**
-     * Checks whether given value is in the existing options.
-     *
-     * @param string $optionValue
-     * @param array  $options
-     *
-     * @return bool
-     */
-    public function containsOption($optionValue, $options)
-    {
-        if ($this->validationDisabled) {
-            return true;
-        }
-
-        foreach ($options as $option) {
-            if ($option['value'] == $optionValue) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns list of available field options.
-     *
-     * @return array
-     */
-    public function availableOptionValues()
-    {
-        $values = array();
-
-        foreach ($this->options as $option) {
-            $values[] = $option['value'];
-        }
-
-        return $values;
-    }
-
-    /**
-     * Disables the internal validation of the field.
-     *
-     * @return self
-     */
-    public function disableValidation()
-    {
-        $this->validationDisabled = true;
-
-        return $this;
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Field/FileFormField.php b/core/vendor/symfony/dom-crawler/Field/FileFormField.php
deleted file mode 100644
index c3423b22f605518b588d5da5b82c434deb9f1592..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Field/FileFormField.php
+++ /dev/null
@@ -1,112 +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\DomCrawler\Field;
-
-/**
- * FileFormField represents a file form field (an HTML file input tag).
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class FileFormField extends FormField
-{
-    /**
-     * Sets the PHP error code associated with the field.
-     *
-     * @param int $error The error code (one of UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, or UPLOAD_ERR_EXTENSION)
-     *
-     * @throws \InvalidArgumentException When error code doesn't exist
-     */
-    public function setErrorCode($error)
-    {
-        $codes = array(UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_EXTENSION);
-        if (!in_array($error, $codes)) {
-            throw new \InvalidArgumentException(sprintf('The error code %s is not valid.', $error));
-        }
-
-        $this->value = array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => $error, 'size' => 0);
-    }
-
-    /**
-     * Sets the value of the field.
-     *
-     * @param string $value The value of the field
-     *
-     * @api
-     */
-    public function upload($value)
-    {
-        $this->setValue($value);
-    }
-
-    /**
-     * Sets the value of the field.
-     *
-     * @param string $value The value of the field
-     */
-    public function setValue($value)
-    {
-        if (null !== $value && is_readable($value)) {
-            $error = UPLOAD_ERR_OK;
-            $size = filesize($value);
-            $info = pathinfo($value);
-            $name = $info['basename'];
-
-            // copy to a tmp location
-            $tmp = sys_get_temp_dir().'/'.sha1(uniqid(mt_rand(), true));
-            if (array_key_exists('extension', $info)) {
-                $tmp .= '.'.$info['extension'];
-            }
-            if (is_file($tmp)) {
-                unlink($tmp);
-            }
-            copy($value, $tmp);
-            $value = $tmp;
-        } else {
-            $error = UPLOAD_ERR_NO_FILE;
-            $size = 0;
-            $name = '';
-            $value = '';
-        }
-
-        $this->value = array('name' => $name, 'type' => '', 'tmp_name' => $value, 'error' => $error, 'size' => $size);
-    }
-
-    /**
-     * Sets path to the file as string for simulating HTTP request.
-     *
-     * @param string $path The path to the file
-     */
-    public function setFilePath($path)
-    {
-        parent::setValue($path);
-    }
-
-    /**
-     * Initializes the form field.
-     *
-     * @throws \LogicException When node type is incorrect
-     */
-    protected function initialize()
-    {
-        if ('input' !== $this->node->nodeName) {
-            throw new \LogicException(sprintf('A FileFormField can only be created from an input tag (%s given).', $this->node->nodeName));
-        }
-
-        if ('file' !== strtolower($this->node->getAttribute('type'))) {
-            throw new \LogicException(sprintf('A FileFormField can only be created from an input tag with a type of file (given type is %s).', $this->node->getAttribute('type')));
-        }
-
-        $this->setValue(null);
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Field/FormField.php b/core/vendor/symfony/dom-crawler/Field/FormField.php
deleted file mode 100644
index 5d702924fe44003ffcd18b31576fdb771aa1efb1..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Field/FormField.php
+++ /dev/null
@@ -1,116 +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\DomCrawler\Field;
-
-/**
- * FormField is the abstract class for all form fields.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-abstract class FormField
-{
-    /**
-     * @var \DOMElement
-     */
-    protected $node;
-    /**
-     * @var string
-     */
-    protected $name;
-    /**
-     * @var string
-     */
-    protected $value;
-    /**
-     * @var \DOMDocument
-     */
-    protected $document;
-    /**
-     * @var \DOMXPath
-     */
-    protected $xpath;
-    /**
-     * @var bool
-     */
-    protected $disabled;
-
-    /**
-     * Constructor.
-     *
-     * @param \DOMElement $node The node associated with this field
-     */
-    public function __construct(\DOMElement $node)
-    {
-        $this->node = $node;
-        $this->name = $node->getAttribute('name');
-        $this->xpath = new \DOMXPath($node->ownerDocument);
-
-        $this->initialize();
-    }
-
-    /**
-     * Returns the name of the field.
-     *
-     * @return string The name of the field
-     */
-    public function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     * Gets the value of the field.
-     *
-     * @return string|array The value of the field
-     */
-    public function getValue()
-    {
-        return $this->value;
-    }
-
-    /**
-     * Sets the value of the field.
-     *
-     * @param string $value The value of the field
-     *
-     * @api
-     */
-    public function setValue($value)
-    {
-        $this->value = (string) $value;
-    }
-
-    /**
-     * Returns true if the field should be included in the submitted values.
-     *
-     * @return bool true if the field should be included in the submitted values, false otherwise
-     */
-    public function hasValue()
-    {
-        return true;
-    }
-
-    /**
-     * Check if the current field is disabled.
-     *
-     * @return bool
-     */
-    public function isDisabled()
-    {
-        return $this->node->hasAttribute('disabled');
-    }
-
-    /**
-     * Initializes the form field.
-     */
-    abstract protected function initialize();
-}
diff --git a/core/vendor/symfony/dom-crawler/Field/InputFormField.php b/core/vendor/symfony/dom-crawler/Field/InputFormField.php
deleted file mode 100644
index b9bd0a482958a768434d332280e93f936beb604f..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Field/InputFormField.php
+++ /dev/null
@@ -1,47 +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\DomCrawler\Field;
-
-/**
- * InputFormField represents an input form field (an HTML input tag).
- *
- * For inputs with type of file, checkbox, or radio, there are other more
- * specialized classes (cf. FileFormField and ChoiceFormField).
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class InputFormField extends FormField
-{
-    /**
-     * Initializes the form field.
-     *
-     * @throws \LogicException When node type is incorrect
-     */
-    protected function initialize()
-    {
-        if ('input' !== $this->node->nodeName && 'button' !== $this->node->nodeName) {
-            throw new \LogicException(sprintf('An InputFormField can only be created from an input or button tag (%s given).', $this->node->nodeName));
-        }
-
-        if ('checkbox' === strtolower($this->node->getAttribute('type'))) {
-            throw new \LogicException('Checkboxes should be instances of ChoiceFormField.');
-        }
-
-        if ('file' === strtolower($this->node->getAttribute('type'))) {
-            throw new \LogicException('File inputs should be instances of FileFormField.');
-        }
-
-        $this->value = $this->node->getAttribute('value');
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Field/TextareaFormField.php b/core/vendor/symfony/dom-crawler/Field/TextareaFormField.php
deleted file mode 100644
index a14e70783b70ce90080e703e6691c415b9b33aef..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Field/TextareaFormField.php
+++ /dev/null
@@ -1,39 +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\DomCrawler\Field;
-
-/**
- * TextareaFormField represents a textarea form field (an HTML textarea tag).
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class TextareaFormField extends FormField
-{
-    /**
-     * Initializes the form field.
-     *
-     * @throws \LogicException When node type is incorrect
-     */
-    protected function initialize()
-    {
-        if ('textarea' !== $this->node->nodeName) {
-            throw new \LogicException(sprintf('A TextareaFormField can only be created from a textarea tag (%s given).', $this->node->nodeName));
-        }
-
-        $this->value = '';
-        foreach ($this->node->childNodes as $node) {
-            $this->value .= $node->wholeText;
-        }
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Form.php b/core/vendor/symfony/dom-crawler/Form.php
deleted file mode 100644
index acf62e638faba4994ac0673aa01d84037efaec2b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Form.php
+++ /dev/null
@@ -1,488 +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\DomCrawler;
-
-use Symfony\Component\DomCrawler\Field\ChoiceFormField;
-use Symfony\Component\DomCrawler\Field\FormField;
-
-/**
- * Form represents an HTML form.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class Form extends Link implements \ArrayAccess
-{
-    /**
-     * @var \DOMElement
-     */
-    private $button;
-
-    /**
-     * @var FormFieldRegistry
-     */
-    private $fields;
-
-    /**
-     * Constructor.
-     *
-     * @param \DOMElement $node       A \DOMElement instance
-     * @param string      $currentUri The URI of the page where the form is embedded
-     * @param string      $method     The method to use for the link (if null, it defaults to the method defined by the form)
-     *
-     * @throws \LogicException if the node is not a button inside a form tag
-     *
-     * @api
-     */
-    public function __construct(\DOMElement $node, $currentUri, $method = null)
-    {
-        parent::__construct($node, $currentUri, $method);
-
-        $this->initialize();
-    }
-
-    /**
-     * Gets the form node associated with this form.
-     *
-     * @return \DOMElement A \DOMElement instance
-     */
-    public function getFormNode()
-    {
-        return $this->node;
-    }
-
-    /**
-     * Sets the value of the fields.
-     *
-     * @param array $values An array of field values
-     *
-     * @return Form
-     *
-     * @api
-     */
-    public function setValues(array $values)
-    {
-        foreach ($values as $name => $value) {
-            $this->fields->set($name, $value);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Gets the field values.
-     *
-     * The returned array does not include file fields (@see getFiles).
-     *
-     * @return array An array of field values.
-     *
-     * @api
-     */
-    public function getValues()
-    {
-        $values = array();
-        foreach ($this->fields->all() as $name => $field) {
-            if ($field->isDisabled()) {
-                continue;
-            }
-
-            if (!$field instanceof Field\FileFormField && $field->hasValue()) {
-                $values[$name] = $field->getValue();
-            }
-        }
-
-        return $values;
-    }
-
-    /**
-     * Gets the file field values.
-     *
-     * @return array An array of file field values.
-     *
-     * @api
-     */
-    public function getFiles()
-    {
-        if (!in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH'))) {
-            return array();
-        }
-
-        $files = array();
-
-        foreach ($this->fields->all() as $name => $field) {
-            if ($field->isDisabled()) {
-                continue;
-            }
-
-            if ($field instanceof Field\FileFormField) {
-                $files[$name] = $field->getValue();
-            }
-        }
-
-        return $files;
-    }
-
-    /**
-     * Gets the field values as PHP.
-     *
-     * This method converts fields with the array notation
-     * (like foo[bar] to arrays) like PHP does.
-     *
-     * @return array An array of field values.
-     *
-     * @api
-     */
-    public function getPhpValues()
-    {
-        $values = array();
-        foreach ($this->getValues() as $name => $value) {
-            $qs = http_build_query(array($name => $value), '', '&');
-            if (!empty($qs)) {
-                parse_str($qs, $expandedValue);
-                $varName = substr($name, 0, strlen(key($expandedValue)));
-                $values = array_replace_recursive($values, array($varName => current($expandedValue)));
-            }
-        }
-
-        return $values;
-    }
-
-    /**
-     * Gets the file field values as PHP.
-     *
-     * This method converts fields with the array notation
-     * (like foo[bar] to arrays) like PHP does.
-     *
-     * @return array An array of field values.
-     *
-     * @api
-     */
-    public function getPhpFiles()
-    {
-        $values = array();
-        foreach ($this->getFiles() as $name => $value) {
-            $qs = http_build_query(array($name => $value), '', '&');
-            if (!empty($qs)) {
-                parse_str($qs, $expandedValue);
-                $varName = substr($name, 0, strlen(key($expandedValue)));
-                $values = array_replace_recursive($values, array($varName => current($expandedValue)));
-            }
-        }
-
-        return $values;
-    }
-
-    /**
-     * Gets the URI of the form.
-     *
-     * The returned URI is not the same as the form "action" attribute.
-     * This method merges the value if the method is GET to mimics
-     * browser behavior.
-     *
-     * @return string The URI
-     *
-     * @api
-     */
-    public function getUri()
-    {
-        $uri = parent::getUri();
-
-        if (!in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH'))) {
-            $query = parse_url($uri, PHP_URL_QUERY);
-            $currentParameters = array();
-            if ($query) {
-                parse_str($query, $currentParameters);
-            }
-
-            $queryString = http_build_query(array_merge($currentParameters, $this->getValues()), null, '&');
-
-            $pos = strpos($uri, '?');
-            $base = false === $pos ? $uri : substr($uri, 0, $pos);
-            $uri = rtrim($base.'?'.$queryString, '?');
-        }
-
-        return $uri;
-    }
-
-    protected function getRawUri()
-    {
-        return $this->node->getAttribute('action');
-    }
-
-    /**
-     * Gets the form method.
-     *
-     * If no method is defined in the form, GET is returned.
-     *
-     * @return string The method
-     *
-     * @api
-     */
-    public function getMethod()
-    {
-        if (null !== $this->method) {
-            return $this->method;
-        }
-
-        return $this->node->getAttribute('method') ? strtoupper($this->node->getAttribute('method')) : 'GET';
-    }
-
-    /**
-     * Returns true if the named field exists.
-     *
-     * @param string $name The field name
-     *
-     * @return bool true if the field exists, false otherwise
-     *
-     * @api
-     */
-    public function has($name)
-    {
-        return $this->fields->has($name);
-    }
-
-    /**
-     * Removes a field from the form.
-     *
-     * @param string $name The field name
-     *
-     * @throws \InvalidArgumentException when the name is malformed
-     *
-     * @api
-     */
-    public function remove($name)
-    {
-        $this->fields->remove($name);
-    }
-
-    /**
-     * Gets a named field.
-     *
-     * @param string $name The field name
-     *
-     * @return FormField The field instance
-     *
-     * @throws \InvalidArgumentException When field is not present in this form
-     *
-     * @api
-     */
-    public function get($name)
-    {
-        return $this->fields->get($name);
-    }
-
-    /**
-     * Sets a named field.
-     *
-     * @param FormField $field The field
-     *
-     * @api
-     */
-    public function set(FormField $field)
-    {
-        $this->fields->add($field);
-    }
-
-    /**
-     * Gets all fields.
-     *
-     * @return FormField[] An array of fields
-     *
-     * @api
-     */
-    public function all()
-    {
-        return $this->fields->all();
-    }
-
-    /**
-     * Returns true if the named field exists.
-     *
-     * @param string $name The field name
-     *
-     * @return bool true if the field exists, false otherwise
-     */
-    public function offsetExists($name)
-    {
-        return $this->has($name);
-    }
-
-    /**
-     * Gets the value of a field.
-     *
-     * @param string $name The field name
-     *
-     * @return FormField The associated Field instance
-     *
-     * @throws \InvalidArgumentException if the field does not exist
-     */
-    public function offsetGet($name)
-    {
-        return $this->fields->get($name);
-    }
-
-    /**
-     * Sets the value of a field.
-     *
-     * @param string       $name  The field name
-     * @param string|array $value The value of the field
-     *
-     * @throws \InvalidArgumentException if the field does not exist
-     */
-    public function offsetSet($name, $value)
-    {
-        $this->fields->set($name, $value);
-    }
-
-    /**
-     * Removes a field from the form.
-     *
-     * @param string $name The field name
-     */
-    public function offsetUnset($name)
-    {
-        $this->fields->remove($name);
-    }
-
-    /**
-     * Disables validation
-     *
-     * @return self
-     */
-    public function disableValidation()
-    {
-        foreach ($this->fields->all() as $field) {
-            if ($field instanceof Field\ChoiceFormField) {
-                $field->disableValidation();
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Sets the node for the form.
-     *
-     * Expects a 'submit' button \DOMElement and finds the corresponding form element, or the form element itself.
-     *
-     * @param \DOMElement $node A \DOMElement instance
-     *
-     * @throws \LogicException If given node is not a button or input or does not have a form ancestor
-     */
-    protected function setNode(\DOMElement $node)
-    {
-        $this->button = $node;
-        if ('button' === $node->nodeName || ('input' === $node->nodeName && in_array(strtolower($node->getAttribute('type')), array('submit', 'button', 'image')))) {
-            if ($node->hasAttribute('form')) {
-                // if the node has the HTML5-compliant 'form' attribute, use it
-                $formId = $node->getAttribute('form');
-                $form = $node->ownerDocument->getElementById($formId);
-                if (null === $form) {
-                    throw new \LogicException(sprintf('The selected node has an invalid form attribute (%s).', $formId));
-                }
-                $this->node = $form;
-
-                return;
-            }
-            // we loop until we find a form ancestor
-            do {
-                if (null === $node = $node->parentNode) {
-                    throw new \LogicException('The selected node does not have a form ancestor.');
-                }
-            } while ('form' !== $node->nodeName);
-        } elseif ('form' !== $node->nodeName) {
-            throw new \LogicException(sprintf('Unable to submit on a "%s" tag.', $node->nodeName));
-        }
-
-        $this->node = $node;
-    }
-
-    /**
-     * Adds form elements related to this form.
-     *
-     * Creates an internal copy of the submitted 'button' element and
-     * the form node or the entire document depending on whether we need
-     * to find non-descendant elements through HTML5 'form' attribute.
-     */
-    private function initialize()
-    {
-        $this->fields = new FormFieldRegistry();
-
-        $xpath = new \DOMXPath($this->node->ownerDocument);
-
-        // add submitted button if it has a valid name
-        if ('form' !== $this->button->nodeName && $this->button->hasAttribute('name') && $this->button->getAttribute('name')) {
-            if ('input' == $this->button->nodeName && 'image' == strtolower($this->button->getAttribute('type'))) {
-                $name = $this->button->getAttribute('name');
-                $this->button->setAttribute('value', '0');
-
-                // temporarily change the name of the input node for the x coordinate
-                $this->button->setAttribute('name', $name.'.x');
-                $this->set(new Field\InputFormField($this->button));
-
-                // temporarily change the name of the input node for the y coordinate
-                $this->button->setAttribute('name', $name.'.y');
-                $this->set(new Field\InputFormField($this->button));
-
-                // restore the original name of the input node
-                $this->button->setAttribute('name', $name);
-            } else {
-                $this->set(new Field\InputFormField($this->button));
-            }
-        }
-
-        // find form elements corresponding to the current form
-        if ($this->node->hasAttribute('id')) {
-            // corresponding elements are either descendants or have a matching HTML5 form attribute
-            $formId = Crawler::xpathLiteral($this->node->getAttribute('id'));
-
-            $fieldNodes = $xpath->query(sprintf('descendant::input[@form=%s] | descendant::button[@form=%s] | descendant::textarea[@form=%s] | descendant::select[@form=%s] | //form[@id=%s]//input[not(@form)] | //form[@id=%s]//button[not(@form)] | //form[@id=%s]//textarea[not(@form)] | //form[@id=%s]//select[not(@form)]', $formId, $formId, $formId, $formId, $formId, $formId, $formId, $formId));
-            foreach ($fieldNodes as $node) {
-                $this->addField($node);
-            }
-        } else {
-            // do the xpath query with $this->node as the context node, to only find descendant elements
-            // however, descendant elements with form attribute are not part of this form
-            $fieldNodes = $xpath->query('descendant::input[not(@form)] | descendant::button[not(@form)] | descendant::textarea[not(@form)] | descendant::select[not(@form)]', $this->node);
-            foreach ($fieldNodes as $node) {
-                $this->addField($node);
-            }
-        }
-    }
-
-    private function addField(\DOMElement $node)
-    {
-        if (!$node->hasAttribute('name') || !$node->getAttribute('name')) {
-            return;
-        }
-
-        $nodeName = $node->nodeName;
-        if ('select' == $nodeName || 'input' == $nodeName && 'checkbox' == strtolower($node->getAttribute('type'))) {
-            $this->set(new Field\ChoiceFormField($node));
-        } elseif ('input' == $nodeName && 'radio' == strtolower($node->getAttribute('type'))) {
-            // there may be other fields with the same name that are no choice
-            // fields already registered (see https://github.com/symfony/symfony/issues/11689)
-            if ($this->has($node->getAttribute('name')) && $this->get($node->getAttribute('name')) instanceof ChoiceFormField) {
-                $this->get($node->getAttribute('name'))->addChoice($node);
-            } else {
-                $this->set(new Field\ChoiceFormField($node));
-            }
-        } elseif ('input' == $nodeName && 'file' == strtolower($node->getAttribute('type'))) {
-            $this->set(new Field\FileFormField($node));
-        } elseif ('input' == $nodeName && !in_array(strtolower($node->getAttribute('type')), array('submit', 'button', 'image'))) {
-            $this->set(new Field\InputFormField($node));
-        } elseif ('textarea' == $nodeName) {
-            $this->set(new Field\TextareaFormField($node));
-        }
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/FormFieldRegistry.php b/core/vendor/symfony/dom-crawler/FormFieldRegistry.php
deleted file mode 100644
index edb2788910de20bf2aa2bb7098e230b09d5ea014..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/FormFieldRegistry.php
+++ /dev/null
@@ -1,222 +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\DomCrawler;
-
-use Symfony\Component\DomCrawler\Field\FormField;
-
-/**
- * This is an internal class that must not be used directly.
- */
-class FormFieldRegistry
-{
-    private $fields = array();
-
-    private $base;
-
-    /**
-     * Adds a field to the registry.
-     *
-     * @param FormField $field The field
-     *
-     * @throws \InvalidArgumentException when the name is malformed
-     */
-    public function add(FormField $field)
-    {
-        $segments = $this->getSegments($field->getName());
-
-        $target = &$this->fields;
-        while ($segments) {
-            if (!is_array($target)) {
-                $target = array();
-            }
-            $path = array_shift($segments);
-            if ('' === $path) {
-                $target = &$target[];
-            } else {
-                $target = &$target[$path];
-            }
-        }
-        $target = $field;
-    }
-
-    /**
-     * Removes a field and its children from the registry.
-     *
-     * @param string $name The fully qualified name of the base field
-     *
-     * @throws \InvalidArgumentException when the name is malformed
-     */
-    public function remove($name)
-    {
-        $segments = $this->getSegments($name);
-        $target = &$this->fields;
-        while (count($segments) > 1) {
-            $path = array_shift($segments);
-            if (!array_key_exists($path, $target)) {
-                return;
-            }
-            $target = &$target[$path];
-        }
-        unset($target[array_shift($segments)]);
-    }
-
-    /**
-     * Returns the value of the field and its children.
-     *
-     * @param string $name The fully qualified name of the field
-     *
-     * @return mixed The value of the field
-     *
-     * @throws \InvalidArgumentException when the name is malformed
-     * @throws \InvalidArgumentException if the field does not exist
-     */
-    public function &get($name)
-    {
-        $segments = $this->getSegments($name);
-        $target = &$this->fields;
-        while ($segments) {
-            $path = array_shift($segments);
-            if (!array_key_exists($path, $target)) {
-                throw new \InvalidArgumentException(sprintf('Unreachable field "%s"', $path));
-            }
-            $target = &$target[$path];
-        }
-
-        return $target;
-    }
-
-    /**
-     * Tests whether the form has the given field.
-     *
-     * @param string $name The fully qualified name of the field
-     *
-     * @return bool Whether the form has the given field
-     */
-    public function has($name)
-    {
-        try {
-            $this->get($name);
-
-            return true;
-        } catch (\InvalidArgumentException $e) {
-            return false;
-        }
-    }
-
-    /**
-     * Set the value of a field and its children.
-     *
-     * @param string $name  The fully qualified name of the field
-     * @param mixed  $value The value
-     *
-     * @throws \InvalidArgumentException when the name is malformed
-     * @throws \InvalidArgumentException if the field does not exist
-     */
-    public function set($name, $value)
-    {
-        $target = &$this->get($name);
-        if ((!is_array($value) && $target instanceof Field\FormField) || $target instanceof Field\ChoiceFormField) {
-            $target->setValue($value);
-        } elseif (is_array($value)) {
-            $fields = self::create($name, $value);
-            foreach ($fields->all() as $k => $v) {
-                $this->set($k, $v);
-            }
-        } else {
-            throw new \InvalidArgumentException(sprintf('Cannot set value on a compound field "%s".', $name));
-        }
-    }
-
-    /**
-     * Returns the list of field with their value.
-     *
-     * @return FormField[] The list of fields as array((string) Fully qualified name => (mixed) value)
-     */
-    public function all()
-    {
-        return $this->walk($this->fields, $this->base);
-    }
-
-    /**
-     * Creates an instance of the class.
-     *
-     * This function is made private because it allows overriding the $base and
-     * the $values properties without any type checking.
-     *
-     * @param string $base   The fully qualified name of the base field
-     * @param array  $values The values of the fields
-     *
-     * @return FormFieldRegistry
-     */
-    private static function create($base, array $values)
-    {
-        $registry = new static();
-        $registry->base = $base;
-        $registry->fields = $values;
-
-        return $registry;
-    }
-
-    /**
-     * Transforms a PHP array in a list of fully qualified name / value.
-     *
-     * @param array  $array  The PHP array
-     * @param string $base   The name of the base field
-     * @param array  $output The initial values
-     *
-     * @return array The list of fields as array((string) Fully qualified name => (mixed) value)
-     */
-    private function walk(array $array, $base = '', array &$output = array())
-    {
-        foreach ($array as $k => $v) {
-            $path = empty($base) ? $k : sprintf('%s[%s]', $base, $k);
-            if (is_array($v)) {
-                $this->walk($v, $path, $output);
-            } else {
-                $output[$path] = $v;
-            }
-        }
-
-        return $output;
-    }
-
-    /**
-     * Splits a field name into segments as a web browser would do.
-     *
-     * <code>
-     *     getSegments('base[foo][3][]') = array('base', 'foo, '3', '');
-     * </code>
-     *
-     * @param string $name The name of the field
-     *
-     * @return string[] The list of segments
-     *
-     * @throws \InvalidArgumentException when the name is malformed
-     */
-    private function getSegments($name)
-    {
-        if (preg_match('/^(?P<base>[^[]+)(?P<extra>(\[.*)|$)/', $name, $m)) {
-            $segments = array($m['base']);
-            while (!empty($m['extra'])) {
-                if (preg_match('/^\[(?P<segment>.*?)\](?P<extra>.*)$/', $m['extra'], $m)) {
-                    $segments[] = $m['segment'];
-                } else {
-                    throw new \InvalidArgumentException(sprintf('Malformed field path "%s"', $name));
-                }
-            }
-
-            return $segments;
-        }
-
-        throw new \InvalidArgumentException(sprintf('Malformed field path "%s"', $name));
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/LICENSE b/core/vendor/symfony/dom-crawler/LICENSE
deleted file mode 100644
index 43028bc600f26ec5599ab339d83cd70f70dfcdab..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2004-2015 Fabien Potencier
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/core/vendor/symfony/dom-crawler/Link.php b/core/vendor/symfony/dom-crawler/Link.php
deleted file mode 100644
index a81db36da8c0ac473d959785448e87e18f8db7bb..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Link.php
+++ /dev/null
@@ -1,232 +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\DomCrawler;
-
-/**
- * Link represents an HTML link (an HTML a, area or link tag).
- *
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @api
- */
-class Link
-{
-    /**
-     * @var \DOMElement
-     */
-    protected $node;
-
-    /**
-     * @var string The method to use for the link
-     */
-    protected $method;
-
-    /**
-     * @var string The URI of the page where the link is embedded (or the base href)
-     */
-    protected $currentUri;
-
-    /**
-     * Constructor.
-     *
-     * @param \DOMElement $node       A \DOMElement instance
-     * @param string      $currentUri The URI of the page where the link is embedded (or the base href)
-     * @param string      $method     The method to use for the link (get by default)
-     *
-     * @throws \InvalidArgumentException if the node is not a link
-     *
-     * @api
-     */
-    public function __construct(\DOMElement $node, $currentUri, $method = 'GET')
-    {
-        if (!in_array(strtolower(substr($currentUri, 0, 4)), array('http', 'file'))) {
-            throw new \InvalidArgumentException(sprintf('Current URI must be an absolute URL ("%s").', $currentUri));
-        }
-
-        $this->setNode($node);
-        $this->method = $method ? strtoupper($method) : null;
-        $this->currentUri = $currentUri;
-    }
-
-    /**
-     * Gets the node associated with this link.
-     *
-     * @return \DOMElement A \DOMElement instance
-     */
-    public function getNode()
-    {
-        return $this->node;
-    }
-
-    /**
-     * Gets the method associated with this link.
-     *
-     * @return string The method
-     *
-     * @api
-     */
-    public function getMethod()
-    {
-        return $this->method;
-    }
-
-    /**
-     * Gets the URI associated with this link.
-     *
-     * @return string The URI
-     *
-     * @api
-     */
-    public function getUri()
-    {
-        $uri = trim($this->getRawUri());
-
-        // absolute URL?
-        if (null !== parse_url($uri, PHP_URL_SCHEME)) {
-            return $uri;
-        }
-
-        // empty URI
-        if (!$uri) {
-            return $this->currentUri;
-        }
-
-        // an anchor
-        if ('#' === $uri[0]) {
-            return $this->cleanupAnchor($this->currentUri).$uri;
-        }
-
-        $baseUri = $this->cleanupUri($this->currentUri);
-
-        if ('?' === $uri[0]) {
-            return $baseUri.$uri;
-        }
-
-        // absolute URL with relative schema
-        if (0 === strpos($uri, '//')) {
-            return preg_replace('#^([^/]*)//.*$#', '$1', $baseUri).$uri;
-        }
-
-        $baseUri = preg_replace('#^(.*?//[^/]*)(?:\/.*)?$#', '$1', $baseUri);
-
-        // absolute path
-        if ('/' === $uri[0]) {
-            return $baseUri.$uri;
-        }
-
-        // relative path
-        $path = parse_url(substr($this->currentUri, strlen($baseUri)), PHP_URL_PATH);
-        $path = $this->canonicalizePath(substr($path, 0, strrpos($path, '/')).'/'.$uri);
-
-        return $baseUri.('' === $path || '/' !== $path[0] ? '/' : '').$path;
-    }
-
-    /**
-     * Returns raw URI data.
-     *
-     * @return string
-     */
-    protected function getRawUri()
-    {
-        return $this->node->getAttribute('href');
-    }
-
-    /**
-     * Returns the canonicalized URI path (see RFC 3986, section 5.2.4).
-     *
-     * @param string $path URI path
-     *
-     * @return string
-     */
-    protected function canonicalizePath($path)
-    {
-        if ('' === $path || '/' === $path) {
-            return $path;
-        }
-
-        if ('.' === substr($path, -1)) {
-            $path .= '/';
-        }
-
-        $output = array();
-
-        foreach (explode('/', $path) as $segment) {
-            if ('..' === $segment) {
-                array_pop($output);
-            } elseif ('.' !== $segment) {
-                $output[] = $segment;
-            }
-        }
-
-        return implode('/', $output);
-    }
-
-    /**
-     * Sets current \DOMElement instance.
-     *
-     * @param \DOMElement $node A \DOMElement instance
-     *
-     * @throws \LogicException If given node is not an anchor
-     */
-    protected function setNode(\DOMElement $node)
-    {
-        if ('a' !== $node->nodeName && 'area' !== $node->nodeName && 'link' !== $node->nodeName) {
-            throw new \LogicException(sprintf('Unable to navigate from a "%s" tag.', $node->nodeName));
-        }
-
-        $this->node = $node;
-    }
-
-    /**
-     * Removes the query string and the anchor from the given uri.
-     *
-     * @param string $uri The uri to clean
-     *
-     * @return string
-     */
-    private function cleanupUri($uri)
-    {
-        return $this->cleanupQuery($this->cleanupAnchor($uri));
-    }
-
-    /**
-     * Remove the query string from the uri.
-     *
-     * @param string $uri
-     *
-     * @return string
-     */
-    private function cleanupQuery($uri)
-    {
-        if (false !== $pos = strpos($uri, '?')) {
-            return substr($uri, 0, $pos);
-        }
-
-        return $uri;
-    }
-
-    /**
-     * Remove the anchor from the uri.
-     *
-     * @param string $uri
-     *
-     * @return string
-     */
-    private function cleanupAnchor($uri)
-    {
-        if (false !== $pos = strpos($uri, '#')) {
-            return substr($uri, 0, $pos);
-        }
-
-        return $uri;
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/README.md b/core/vendor/symfony/dom-crawler/README.md
deleted file mode 100644
index d2c8de5da42b0f7a349d7dc6e768f60b9f3b96a5..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-DomCrawler Component
-====================
-
-DomCrawler eases DOM navigation for HTML and XML documents.
-
-If you are familiar with jQuery, DomCrawler is a PHP equivalent:
-
-```php
-use Symfony\Component\DomCrawler\Crawler;
-
-$crawler = new Crawler();
-$crawler->addContent('<html><body><p>Hello World!</p></body></html>');
-
-print $crawler->filterXPath('descendant-or-self::body/p')->text();
-```
-
-If you are also using the CssSelector component, you can use CSS Selectors
-instead of XPath expressions:
-
-```php
-use Symfony\Component\DomCrawler\Crawler;
-
-$crawler = new Crawler();
-$crawler->addContent('<html><body><p>Hello World!</p></body></html>');
-
-print $crawler->filter('body > p')->text();
-```
-
-Resources
----------
-
-You can run the unit tests with the following command:
-
-    $ cd path/to/Symfony/Component/DomCrawler/
-    $ composer install
-    $ phpunit
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/.gitignore b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..d1502b087b4d4ede40ddbbf64a8b87a6348b17d8
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/.gitignore
@@ -0,0 +1,2 @@
+vendor/
+composer.lock
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/CHANGELOG.md b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..50edf20d8a4ad7d5b1889631de4e4e0aaaffa9b4
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/CHANGELOG.md
@@ -0,0 +1,12 @@
+CHANGELOG
+=========
+
+2.1.0
+-----
+
+ * added support for the HTTP PATCH method
+ * refactored the Form class internals to support multi-dimensional fields
+   (the public API is backward compatible)
+ * added a way to get parsing errors for Crawler::addHtmlContent() and
+   Crawler::addXmlContent() via libxml functions
+ * added support for submitting a form without a submit button
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Crawler.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Crawler.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ad9497d0f3792dc11fcfe30b6289745092a96eb
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Crawler.php
@@ -0,0 +1,729 @@
+<?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\DomCrawler;
+
+use Symfony\Component\CssSelector\CssSelector;
+
+/**
+ * Crawler eases navigation of a list of \DOMNode objects.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Crawler extends \SplObjectStorage
+{
+    /**
+     * @var string The current URI or the base href value
+     */
+    private $uri;
+
+    /**
+     * Constructor.
+     *
+     * @param mixed  $node A Node to use as the base for the crawling
+     * @param string $uri  The current URI or the base href value
+     *
+     * @api
+     */
+    public function __construct($node = null, $uri = null)
+    {
+        $this->uri = $uri;
+
+        $this->add($node);
+    }
+
+    /**
+     * Removes all the nodes.
+     *
+     * @api
+     */
+    public function clear()
+    {
+        $this->removeAll($this);
+    }
+
+    /**
+     * Adds a node to the current list of nodes.
+     *
+     * This method uses the appropriate specialized add*() method based
+     * on the type of the argument.
+     *
+     * @param null|\DOMNodeList|array|\DOMNode $node A node
+     *
+     * @api
+     */
+    public function add($node)
+    {
+        if ($node instanceof \DOMNodeList) {
+            $this->addNodeList($node);
+        } elseif (is_array($node)) {
+            $this->addNodes($node);
+        } elseif (is_string($node)) {
+            $this->addContent($node);
+        } elseif (is_object($node)) {
+            $this->addNode($node);
+        }
+    }
+
+    /**
+     * Adds HTML/XML content.
+     *
+     * @param string      $content A string to parse as HTML/XML
+     * @param null|string $type    The content type of the string
+     *
+     * @return null|void
+     */
+    public function addContent($content, $type = null)
+    {
+        if (empty($type)) {
+            $type = 'text/html';
+        }
+
+        // DOM only for HTML/XML content
+        if (!preg_match('/(x|ht)ml/i', $type, $matches)) {
+            return null;
+        }
+
+        $charset = 'ISO-8859-1';
+        if (false !== $pos = strpos($type, 'charset=')) {
+            $charset = substr($type, $pos + 8);
+            if (false !== $pos = strpos($charset, ';')) {
+                $charset = substr($charset, 0, $pos);
+            }
+        }
+
+        if ('x' === $matches[1]) {
+            $this->addXmlContent($content, $charset);
+        } else {
+            $this->addHtmlContent($content, $charset);
+        }
+    }
+
+    /**
+     * Adds an HTML content to the list of nodes.
+     *
+     * The libxml errors are disabled when the content is parsed.
+     *
+     * If you want to get parsing errors, be sure to enable
+     * internal errors via libxml_use_internal_errors(true)
+     * and then, get the errors via libxml_get_errors(). Be
+     * sure to clear errors with libxml_clear_errors() afterward.
+     *
+     * @param string $content The HTML content
+     * @param string $charset The charset
+     *
+     * @api
+     */
+    public function addHtmlContent($content, $charset = 'UTF-8')
+    {
+        $current = libxml_use_internal_errors(true);
+        $disableEntities = libxml_disable_entity_loader(true);
+
+        $dom = new \DOMDocument('1.0', $charset);
+        $dom->validateOnParse = true;
+
+        if (function_exists('mb_convert_encoding')) {
+            $content = mb_convert_encoding($content, 'HTML-ENTITIES', $charset);
+        }
+
+        @$dom->loadHTML($content);
+
+        libxml_use_internal_errors($current);
+        libxml_disable_entity_loader($disableEntities);
+
+        $this->addDocument($dom);
+
+        $base = $this->filterXPath('descendant-or-self::base')->extract(array('href'));
+
+        if (count($base)) {
+            $this->uri = current($base);
+        }
+    }
+
+    /**
+     * Adds an XML content to the list of nodes.
+     *
+     * The libxml errors are disabled when the content is parsed.
+     *
+     * If you want to get parsing errors, be sure to enable
+     * internal errors via libxml_use_internal_errors(true)
+     * and then, get the errors via libxml_get_errors(). Be
+     * sure to clear errors with libxml_clear_errors() afterward.
+     *
+     * @param string $content The XML content
+     * @param string $charset The charset
+     *
+     * @api
+     */
+    public function addXmlContent($content, $charset = 'UTF-8')
+    {
+        $current = libxml_use_internal_errors(true);
+        $disableEntities = libxml_disable_entity_loader(true);
+
+        $dom = new \DOMDocument('1.0', $charset);
+        $dom->validateOnParse = true;
+
+        // remove the default namespace to make XPath expressions simpler
+        @$dom->loadXML(str_replace('xmlns', 'ns', $content), LIBXML_NONET);
+
+        libxml_use_internal_errors($current);
+        libxml_disable_entity_loader($disableEntities);
+
+        $this->addDocument($dom);
+    }
+
+    /**
+     * Adds a \DOMDocument to the list of nodes.
+     *
+     * @param \DOMDocument $dom A \DOMDocument instance
+     *
+     * @api
+     */
+    public function addDocument(\DOMDocument $dom)
+    {
+        if ($dom->documentElement) {
+            $this->addNode($dom->documentElement);
+        }
+    }
+
+    /**
+     * Adds a \DOMNodeList to the list of nodes.
+     *
+     * @param \DOMNodeList $nodes A \DOMNodeList instance
+     *
+     * @api
+     */
+    public function addNodeList(\DOMNodeList $nodes)
+    {
+        foreach ($nodes as $node) {
+            $this->addNode($node);
+        }
+    }
+
+    /**
+     * Adds an array of \DOMNode instances to the list of nodes.
+     *
+     * @param array $nodes An array of \DOMNode instances
+     *
+     * @api
+     */
+    public function addNodes(array $nodes)
+    {
+        foreach ($nodes as $node) {
+            $this->add($node);
+        }
+    }
+
+    /**
+     * Adds a \DOMNode instance to the list of nodes.
+     *
+     * @param \DOMNode $node A \DOMNode instance
+     *
+     * @api
+     */
+    public function addNode(\DOMNode $node)
+    {
+        if ($node instanceof \DOMDocument) {
+            $this->attach($node->documentElement);
+        } else {
+            $this->attach($node);
+        }
+    }
+
+    /**
+     * Returns a node given its position in the node list.
+     *
+     * @param integer $position The position
+     *
+     * @return Crawler A new instance of the Crawler with the selected node, or an empty Crawler if it does not exist.
+     *
+     * @api
+     */
+    public function eq($position)
+    {
+        foreach ($this as $i => $node) {
+            if ($i == $position) {
+                return new static($node, $this->uri);
+            }
+        }
+
+        return new static(null, $this->uri);
+    }
+
+    /**
+     * Calls an anonymous function on each node of the list.
+     *
+     * The anonymous function receives the position and the node as arguments.
+     *
+     * Example:
+     *
+     *     $crawler->filter('h1')->each(function ($node, $i)
+     *     {
+     *       return $node->nodeValue;
+     *     });
+     *
+     * @param \Closure $closure An anonymous function
+     *
+     * @return array An array of values returned by the anonymous function
+     *
+     * @api
+     */
+    public function each(\Closure $closure)
+    {
+        $data = array();
+        foreach ($this as $i => $node) {
+            $data[] = $closure($node, $i);
+        }
+
+        return $data;
+    }
+
+    /**
+     * Reduces the list of nodes by calling an anonymous function.
+     *
+     * To remove a node from the list, the anonymous function must return false.
+     *
+     * @param \Closure $closure An anonymous function
+     *
+     * @return Crawler A Crawler instance with the selected nodes.
+     *
+     * @api
+     */
+    public function reduce(\Closure $closure)
+    {
+        $nodes = array();
+        foreach ($this as $i => $node) {
+            if (false !== $closure($node, $i)) {
+                $nodes[] = $node;
+            }
+        }
+
+        return new static($nodes, $this->uri);
+    }
+
+    /**
+     * Returns the first node of the current selection
+     *
+     * @return Crawler A Crawler instance with the first selected node
+     *
+     * @api
+     */
+    public function first()
+    {
+        return $this->eq(0);
+    }
+
+    /**
+     * Returns the last node of the current selection
+     *
+     * @return Crawler A Crawler instance with the last selected node
+     *
+     * @api
+     */
+    public function last()
+    {
+        return $this->eq(count($this) - 1);
+    }
+
+    /**
+     * Returns the siblings nodes of the current selection
+     *
+     * @return Crawler A Crawler instance with the sibling nodes
+     *
+     * @throws \InvalidArgumentException When current node is empty
+     *
+     * @api
+     */
+    public function siblings()
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        return new static($this->sibling($this->getNode(0)->parentNode->firstChild), $this->uri);
+    }
+
+    /**
+     * Returns the next siblings nodes of the current selection
+     *
+     * @return Crawler A Crawler instance with the next sibling nodes
+     *
+     * @throws \InvalidArgumentException When current node is empty
+     *
+     * @api
+     */
+    public function nextAll()
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        return new static($this->sibling($this->getNode(0)), $this->uri);
+    }
+
+    /**
+     * Returns the previous sibling nodes of the current selection
+     *
+     * @return Crawler A Crawler instance with the previous sibling nodes
+     *
+     * @api
+     */
+    public function previousAll()
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        return new static($this->sibling($this->getNode(0), 'previousSibling'), $this->uri);
+    }
+
+    /**
+     * Returns the parents nodes of the current selection
+     *
+     * @return Crawler A Crawler instance with the parents nodes of the current selection
+     *
+     * @throws \InvalidArgumentException When current node is empty
+     *
+     * @api
+     */
+    public function parents()
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        $node = $this->getNode(0);
+        $nodes = array();
+
+        while ($node = $node->parentNode) {
+            if (1 === $node->nodeType && '_root' !== $node->nodeName) {
+                $nodes[] = $node;
+            }
+        }
+
+        return new static($nodes, $this->uri);
+    }
+
+    /**
+     * Returns the children nodes of the current selection
+     *
+     * @return Crawler A Crawler instance with the children nodes
+     *
+     * @throws \InvalidArgumentException When current node is empty
+     *
+     * @api
+     */
+    public function children()
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        return new static($this->sibling($this->getNode(0)->firstChild), $this->uri);
+    }
+
+    /**
+     * Returns the attribute value of the first node of the list.
+     *
+     * @param string $attribute The attribute name
+     *
+     * @return string The attribute value
+     *
+     * @throws \InvalidArgumentException When current node is empty
+     *
+     * @api
+     */
+    public function attr($attribute)
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        return $this->getNode(0)->getAttribute($attribute);
+    }
+
+    /**
+     * Returns the node value of the first node of the list.
+     *
+     * @return string The node value
+     *
+     * @throws \InvalidArgumentException When current node is empty
+     *
+     * @api
+     */
+    public function text()
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        return $this->getNode(0)->nodeValue;
+    }
+
+    /**
+     * Extracts information from the list of nodes.
+     *
+     * You can extract attributes or/and the node value (_text).
+     *
+     * Example:
+     *
+     * $crawler->filter('h1 a')->extract(array('_text', 'href'));
+     *
+     * @param array $attributes An array of attributes
+     *
+     * @return array An array of extracted values
+     *
+     * @api
+     */
+    public function extract($attributes)
+    {
+        $attributes = (array) $attributes;
+
+        $data = array();
+        foreach ($this as $node) {
+            $elements = array();
+            foreach ($attributes as $attribute) {
+                if ('_text' === $attribute) {
+                    $elements[] = $node->nodeValue;
+                } else {
+                    $elements[] = $node->getAttribute($attribute);
+                }
+            }
+
+            $data[] = count($attributes) > 1 ? $elements : $elements[0];
+        }
+
+        return $data;
+    }
+
+    /**
+     * Filters the list of nodes with an XPath expression.
+     *
+     * @param string $xpath An XPath expression
+     *
+     * @return Crawler A new instance of Crawler with the filtered list of nodes
+     *
+     * @api
+     */
+    public function filterXPath($xpath)
+    {
+        $document = new \DOMDocument('1.0', 'UTF-8');
+        $root = $document->appendChild($document->createElement('_root'));
+        foreach ($this as $node) {
+            $root->appendChild($document->importNode($node, true));
+        }
+
+        $domxpath = new \DOMXPath($document);
+
+        return new static($domxpath->query($xpath), $this->uri);
+    }
+
+    /**
+     * Filters the list of nodes with a CSS selector.
+     *
+     * This method only works if you have installed the CssSelector Symfony Component.
+     *
+     * @param string $selector A CSS selector
+     *
+     * @return Crawler A new instance of Crawler with the filtered list of nodes
+     *
+     * @throws \RuntimeException if the CssSelector Component is not available
+     *
+     * @api
+     */
+    public function filter($selector)
+    {
+        if (!class_exists('Symfony\\Component\\CssSelector\\CssSelector')) {
+            // @codeCoverageIgnoreStart
+            throw new \RuntimeException('Unable to filter with a CSS selector as the Symfony CssSelector is not installed (you can use filterXPath instead).');
+            // @codeCoverageIgnoreEnd
+        }
+
+        return $this->filterXPath(CssSelector::toXPath($selector));
+    }
+
+    /**
+     * Selects links by name or alt value for clickable images.
+     *
+     * @param string $value The link text
+     *
+     * @return Crawler A new instance of Crawler with the filtered list of nodes
+     *
+     * @api
+     */
+    public function selectLink($value)
+    {
+        $xpath  = sprintf('//a[contains(concat(\' \', normalize-space(string(.)), \' \'), %s)] ', static::xpathLiteral(' '.$value.' ')).
+                            sprintf('| //a/img[contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)]/ancestor::a', static::xpathLiteral(' '.$value.' '));
+
+        return $this->filterXPath($xpath);
+    }
+
+    /**
+     * Selects a button by name or alt value for images.
+     *
+     * @param string $value The button text
+     *
+     * @return Crawler A new instance of Crawler with the filtered list of nodes
+     *
+     * @api
+     */
+    public function selectButton($value)
+    {
+        $xpath = sprintf('//input[((@type="submit" or @type="button") and contains(concat(\' \', normalize-space(string(@value)), \' \'), %s)) ', static::xpathLiteral(' '.$value.' ')).
+                         sprintf('or (@type="image" and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)) or @id="%s" or @name="%s"] ', static::xpathLiteral(' '.$value.' '), $value, $value).
+                         sprintf('| //button[contains(concat(\' \', normalize-space(string(.)), \' \'), %s) or @id="%s" or @name="%s"]', static::xpathLiteral(' '.$value.' '), $value, $value);
+
+        return $this->filterXPath($xpath);
+    }
+
+    /**
+     * Returns a Link object for the first node in the list.
+     *
+     * @param string $method The method for the link (get by default)
+     *
+     * @return Link   A Link instance
+     *
+     * @throws \InvalidArgumentException If the current node list is empty
+     *
+     * @api
+     */
+    public function link($method = 'get')
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        $node = $this->getNode(0);
+
+        return new Link($node, $this->uri, $method);
+    }
+
+    /**
+     * Returns an array of Link objects for the nodes in the list.
+     *
+     * @return array An array of Link instances
+     *
+     * @api
+     */
+    public function links()
+    {
+        $links = array();
+        foreach ($this as $node) {
+            $links[] = new Link($node, $this->uri, 'get');
+        }
+
+        return $links;
+    }
+
+    /**
+     * Returns a Form object for the first node in the list.
+     *
+     * @param array  $values An array of values for the form fields
+     * @param string $method The method for the form
+     *
+     * @return Form   A Form instance
+     *
+     * @throws \InvalidArgumentException If the current node list is empty
+     *
+     * @api
+     */
+    public function form(array $values = null, $method = null)
+    {
+        if (!count($this)) {
+            throw new \InvalidArgumentException('The current node list is empty.');
+        }
+
+        $form = new Form($this->getNode(0), $this->uri, $method);
+
+        if (null !== $values) {
+            $form->setValues($values);
+        }
+
+        return $form;
+    }
+
+    /**
+     * Converts string for XPath expressions.
+     *
+     * Escaped characters are: quotes (") and apostrophe (').
+     *
+     *  Examples:
+     *  <code>
+     *     echo Crawler::xpathLiteral('foo " bar');
+     *     //prints 'foo " bar'
+     *
+     *     echo Crawler::xpathLiteral("foo ' bar");
+     *     //prints "foo ' bar"
+     *
+     *     echo Crawler::xpathLiteral('a\'b"c');
+     *     //prints concat('a', "'", 'b"c')
+     *  </code>
+     *
+     * @param string $s String to be escaped
+     *
+     * @return string Converted string
+     *
+     */
+    public static function xpathLiteral($s)
+    {
+        if (false === strpos($s, "'")) {
+            return sprintf("'%s'", $s);
+        }
+
+        if (false === strpos($s, '"')) {
+            return sprintf('"%s"', $s);
+        }
+
+        $string = $s;
+        $parts = array();
+        while (true) {
+            if (false !== $pos = strpos($string, "'")) {
+                $parts[] = sprintf("'%s'", substr($string, 0, $pos));
+                $parts[] = "\"'\"";
+                $string = substr($string, $pos + 1);
+            } else {
+                $parts[] = "'$string'";
+                break;
+            }
+        }
+
+        return sprintf("concat(%s)", implode($parts, ', '));
+    }
+
+    private function getNode($position)
+    {
+        foreach ($this as $i => $node) {
+            if ($i == $position) {
+                return $node;
+            }
+        // @codeCoverageIgnoreStart
+        }
+
+        return null;
+        // @codeCoverageIgnoreEnd
+    }
+
+    private function sibling($node, $siblingDir = 'nextSibling')
+    {
+        $nodes = array();
+
+        do {
+            if ($node !== $this->getNode(0) && $node->nodeType === 1) {
+                $nodes[] = $node;
+            }
+        } while ($node = $node->$siblingDir);
+
+        return $nodes;
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/ChoiceFormField.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/ChoiceFormField.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e192cb1906dd49cd376a6056e93ba6335af514d
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/ChoiceFormField.php
@@ -0,0 +1,307 @@
+<?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\DomCrawler\Field;
+
+/**
+ * ChoiceFormField represents a choice form field.
+ *
+ * It is constructed from a HTML select tag, or a HTML checkbox, or radio inputs.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class ChoiceFormField extends FormField
+{
+    /**
+     * @var string
+     */
+    private $type;
+    /**
+     * @var Boolean
+     */
+    private $multiple;
+    /**
+     * @var array
+     */
+    private $options;
+
+    /**
+     * Returns true if the field should be included in the submitted values.
+     *
+     * @return Boolean true if the field should be included in the submitted values, false otherwise
+     */
+    public function hasValue()
+    {
+        // don't send a value for unchecked checkboxes
+        if (in_array($this->type, array('checkbox', 'radio')) && null === $this->value) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Check if the current selected option is disabled
+     *
+     * @return Boolean
+     */
+    public function isDisabled()
+    {
+        foreach ($this->options as $option) {
+            if ($option['value'] == $this->value && $option['disabled']) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Sets the value of the field.
+     *
+     * @param string $value The value of the field
+     *
+     * @api
+     */
+    public function select($value)
+    {
+        $this->setValue($value);
+    }
+
+    /**
+     * Ticks a checkbox.
+     *
+     * @throws \LogicException When the type provided is not correct
+     *
+     * @api
+     */
+    public function tick()
+    {
+        if ('checkbox' !== $this->type) {
+            throw new \LogicException(sprintf('You cannot tick "%s" as it is not a checkbox (%s).', $this->name, $this->type));
+        }
+
+        $this->setValue(true);
+    }
+
+    /**
+     * Ticks a checkbox.
+     *
+     * @throws \LogicException When the type provided is not correct
+     *
+     * @api
+     */
+    public function untick()
+    {
+        if ('checkbox' !== $this->type) {
+            throw new \LogicException(sprintf('You cannot tick "%s" as it is not a checkbox (%s).', $this->name, $this->type));
+        }
+
+        $this->setValue(false);
+    }
+
+    /**
+     * Sets the value of the field.
+     *
+     * @param string $value The value of the field
+     *
+     * @throws \InvalidArgumentException When value type provided is not correct
+     */
+    public function setValue($value)
+    {
+        if ('checkbox' == $this->type && false === $value) {
+            // uncheck
+            $this->value = null;
+        } elseif ('checkbox' == $this->type && true === $value) {
+            // check
+            $this->value = $this->options[0]['value'];
+        } else {
+            if (is_array($value)) {
+                if (!$this->multiple) {
+                    throw new \InvalidArgumentException(sprintf('The value for "%s" cannot be an array.', $this->name));
+                }
+
+                foreach ($value as $v) {
+                    if (!$this->containsOption($v, $this->options)) {
+                        throw new \InvalidArgumentException(sprintf('Input "%s" cannot take "%s" as a value (possible values: %s).', $this->name, $v, implode(', ', $this->availableOptionValues())));
+                    }
+                }
+            } elseif (!$this->containsOption($value, $this->options)) {
+                throw new \InvalidArgumentException(sprintf('Input "%s" cannot take "%s" as a value (possible values: %s).', $this->name, $value, implode(', ', $this->availableOptionValues())));
+            }
+
+            if ($this->multiple) {
+                $value = (array) $value;
+            }
+
+            if (is_array($value)) {
+                $this->value = $value;
+            } else {
+                parent::setValue($value);
+            }
+        }
+    }
+
+    /**
+     * Adds a choice to the current ones.
+     *
+     * This method should only be used internally.
+     *
+     * @param \DOMNode $node A \DOMNode
+     *
+     * @throws \LogicException When choice provided is not multiple nor radio
+     */
+    public function addChoice(\DOMNode $node)
+    {
+        if (!$this->multiple && 'radio' != $this->type) {
+            throw new \LogicException(sprintf('Unable to add a choice for "%s" as it is not multiple or is not a radio button.', $this->name));
+        }
+
+        $option = $this->buildOptionValue($node);
+        $this->options[] = $option;
+
+        if ($node->getAttribute('checked')) {
+            $this->value = $option['value'];
+        }
+    }
+
+    /**
+     * Returns the type of the choice field (radio, select, or checkbox).
+     *
+     * @return string The type
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Returns true if the field accepts multiple values.
+     *
+     * @return Boolean true if the field accepts multiple values, false otherwise
+     */
+    public function isMultiple()
+    {
+        return $this->multiple;
+    }
+
+    /**
+     * Initializes the form field.
+     *
+     * @throws \LogicException When node type is incorrect
+     */
+    protected function initialize()
+    {
+        if ('input' != $this->node->nodeName && 'select' != $this->node->nodeName) {
+            throw new \LogicException(sprintf('A ChoiceFormField can only be created from an input or select tag (%s given).', $this->node->nodeName));
+        }
+
+        if ('input' == $this->node->nodeName && 'checkbox' != $this->node->getAttribute('type') && 'radio' != $this->node->getAttribute('type')) {
+            throw new \LogicException(sprintf('A ChoiceFormField can only be created from an input tag with a type of checkbox or radio (given type is %s).', $this->node->getAttribute('type')));
+        }
+
+        $this->value = null;
+        $this->options = array();
+        $this->multiple = false;
+
+        if ('input' == $this->node->nodeName) {
+            $this->type = $this->node->getAttribute('type');
+            $optionValue = $this->buildOptionValue($this->node);
+            $this->options[] = $optionValue;
+
+            if ($this->node->getAttribute('checked')) {
+                $this->value = $optionValue['value'];
+            }
+        } else {
+            $this->type = 'select';
+            if ($this->node->hasAttribute('multiple')) {
+                $this->multiple = true;
+                $this->value = array();
+                $this->name = str_replace('[]', '', $this->name);
+            }
+
+            $found = false;
+            foreach ($this->xpath->query('descendant::option', $this->node) as $option) {
+                $this->options[] = $this->buildOptionValue($option);
+
+                if ($option->getAttribute('selected')) {
+                    $found = true;
+                    if ($this->multiple) {
+                        $this->value[] = $option->getAttribute('value');
+                    } else {
+                        $this->value = $option->getAttribute('value');
+                    }
+                }
+            }
+
+            // if no option is selected and if it is a simple select box, take the first option as the value
+            $option = $this->xpath->query('descendant::option', $this->node)->item(0);
+            if (!$found && !$this->multiple && $option instanceof \DOMElement) {
+                $this->value = $option->getAttribute('value');
+            }
+        }
+    }
+
+    /**
+     * Returns option value with associated disabled flag
+     *
+     * @param \DOMNode $node
+     *
+     * @return array
+     */
+    private function buildOptionValue($node)
+    {
+        $option = array();
+
+        $defaultValue = (isset($node->nodeValue) && !empty($node->nodeValue)) ? $node->nodeValue : '1';
+        $option['value'] = $node->hasAttribute('value') ? $node->getAttribute('value') : $defaultValue;
+        $option['disabled'] = ($node->hasAttribute('disabled') && $node->getAttribute('disabled') == 'disabled');
+
+        return $option;
+    }
+
+    /**
+     * Checks whether given vale is in the existing options
+     *
+     * @param string $optionValue
+     * @param array  $options
+     *
+     * @return bool
+     */
+    public function containsOption($optionValue, $options)
+    {
+        foreach ($options as $option) {
+            if ($option['value'] == $optionValue) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns list of available field options
+     *
+     * @return array
+     */
+    public function availableOptionValues()
+    {
+        $values = array();
+
+        foreach ($this->options as $option) {
+            $values[] = $option['value'];
+        }
+
+        return $values;
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/FileFormField.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/FileFormField.php
new file mode 100644
index 0000000000000000000000000000000000000000..1bb08afde9300362e76867230143fd9a0db17ab4
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/FileFormField.php
@@ -0,0 +1,96 @@
+<?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\DomCrawler\Field;
+
+/**
+ * FileFormField represents a file form field (an HTML file input tag).
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class FileFormField extends FormField
+{
+    /**
+     * Sets the PHP error code associated with the field.
+     *
+     * @param integer $error The error code (one of UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, or UPLOAD_ERR_EXTENSION)
+     *
+     * @throws \InvalidArgumentException When error code doesn't exist
+     */
+    public function setErrorCode($error)
+    {
+        $codes = array(UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_EXTENSION);
+        if (!in_array($error, $codes)) {
+            throw new \InvalidArgumentException(sprintf('The error code %s is not valid.', $error));
+        }
+
+        $this->value = array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => $error, 'size' => 0);
+    }
+
+    /**
+     * Sets the value of the field.
+     *
+     * @param string $value The value of the field
+     *
+     * @api
+     */
+    public function upload($value)
+    {
+        $this->setValue($value);
+    }
+
+    /**
+     * Sets the value of the field.
+     *
+     * @param string $value The value of the field
+     */
+    public function setValue($value)
+    {
+        if (null !== $value && is_readable($value)) {
+            $error = UPLOAD_ERR_OK;
+            $size = filesize($value);
+            $name = basename($value);
+
+            // copy to a tmp location
+            $tmp = tempnam(sys_get_temp_dir(), 'upload');
+            unlink($tmp);
+            copy($value, $tmp);
+            $value = $tmp;
+        } else {
+            $error = UPLOAD_ERR_NO_FILE;
+            $size = 0;
+            $name = '';
+            $value = '';
+        }
+
+        $this->value = array('name' => $name, 'type' => '', 'tmp_name' => $value, 'error' => $error, 'size' => $size);
+    }
+
+    /**
+     * Initializes the form field.
+     *
+     * @throws \LogicException When node type is incorrect
+     */
+    protected function initialize()
+    {
+        if ('input' != $this->node->nodeName) {
+            throw new \LogicException(sprintf('A FileFormField can only be created from an input tag (%s given).', $this->node->nodeName));
+        }
+
+        if ('file' != $this->node->getAttribute('type')) {
+            throw new \LogicException(sprintf('A FileFormField can only be created from an input tag with a type of file (given type is %s).', $this->node->getAttribute('type')));
+        }
+
+        $this->setValue(null);
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/FormField.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/FormField.php
new file mode 100644
index 0000000000000000000000000000000000000000..6412272c2e2944c359de793eec9b480a6a3f5629
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/FormField.php
@@ -0,0 +1,122 @@
+<?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\DomCrawler\Field;
+
+/**
+ * FormField is the abstract class for all form fields.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+abstract class FormField
+{
+    /**
+     * @var \DOMNode
+     */
+    protected $node;
+    /**
+     * @var string
+     */
+    protected $name;
+    /**
+     * @var string
+     */
+    protected $value;
+    /**
+     * @var \DOMDocument
+     */
+    protected $document;
+    /**
+     * @var \DOMXPath
+     */
+    protected $xpath;
+    /**
+     * @var Boolean
+     */
+    protected $disabled;
+
+    /**
+     * Constructor.
+     *
+     * @param \DOMNode $node The node associated with this field
+     */
+    public function __construct(\DOMNode $node)
+    {
+        $this->node = $node;
+        $this->name = $node->getAttribute('name');
+
+        $this->document = new \DOMDocument('1.0', 'UTF-8');
+        $this->node = $this->document->importNode($this->node, true);
+
+        $root = $this->document->appendChild($this->document->createElement('_root'));
+        $root->appendChild($this->node);
+        $this->xpath = new \DOMXPath($this->document);
+
+        $this->initialize();
+    }
+
+    /**
+     * Returns the name of the field.
+     *
+     * @return string The name of the field
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Gets the value of the field.
+     *
+     * @return string|array The value of the field
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    /**
+     * Sets the value of the field.
+     *
+     * @param string $value The value of the field
+     *
+     * @api
+     */
+    public function setValue($value)
+    {
+        $this->value = (string) $value;
+    }
+
+    /**
+     * Returns true if the field should be included in the submitted values.
+     *
+     * @return Boolean true if the field should be included in the submitted values, false otherwise
+     */
+    public function hasValue()
+    {
+        return true;
+    }
+
+    /**
+     * Check if the current field is disabled
+     *
+     * @return Boolean
+     */
+    public function isDisabled()
+    {
+        return $this->node->hasAttribute('disabled');
+    }
+
+    /**
+     * Initializes the form field.
+     */
+    abstract protected function initialize();
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/InputFormField.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/InputFormField.php
new file mode 100644
index 0000000000000000000000000000000000000000..251873cf2eb60f6927633c2bee2d7b02c1990ed6
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/InputFormField.php
@@ -0,0 +1,47 @@
+<?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\DomCrawler\Field;
+
+/**
+ * InputFormField represents an input form field (an HTML input tag).
+ *
+ * For inputs with type of file, checkbox, or radio, there are other more
+ * specialized classes (cf. FileFormField and ChoiceFormField).
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class InputFormField extends FormField
+{
+    /**
+     * Initializes the form field.
+     *
+     * @throws \LogicException When node type is incorrect
+     */
+    protected function initialize()
+    {
+        if ('input' != $this->node->nodeName) {
+            throw new \LogicException(sprintf('An InputFormField can only be created from an input tag (%s given).', $this->node->nodeName));
+        }
+
+        if ('checkbox' == $this->node->getAttribute('type')) {
+            throw new \LogicException('Checkboxes should be instances of ChoiceFormField.');
+        }
+
+        if ('file' == $this->node->getAttribute('type')) {
+            throw new \LogicException('File inputs should be instances of FileFormField.');
+        }
+
+        $this->value = $this->node->getAttribute('value');
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/TextareaFormField.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/TextareaFormField.php
new file mode 100644
index 0000000000000000000000000000000000000000..794e966ac6e8e14b4b1bb338d75642efffbe7e78
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Field/TextareaFormField.php
@@ -0,0 +1,39 @@
+<?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\DomCrawler\Field;
+
+/**
+ * TextareaFormField represents a textarea form field (an HTML textarea tag).
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class TextareaFormField extends FormField
+{
+    /**
+     * Initializes the form field.
+     *
+     * @throws \LogicException When node type is incorrect
+     */
+    protected function initialize()
+    {
+        if ('textarea' != $this->node->nodeName) {
+            throw new \LogicException(sprintf('A TextareaFormField can only be created from a textarea tag (%s given).', $this->node->nodeName));
+        }
+
+        $this->value = null;
+        foreach ($this->node->childNodes as $node) {
+            $this->value .= $this->document->saveXML($node);
+        }
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Form.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Form.php
new file mode 100644
index 0000000000000000000000000000000000000000..9106a232e9068e274729f4f0b867c5c67970f2ba
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Form.php
@@ -0,0 +1,586 @@
+<?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\DomCrawler;
+
+use Symfony\Component\DomCrawler\Field\FormField;
+
+/**
+ * Form represents an HTML form.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Form extends Link implements \ArrayAccess
+{
+    /**
+     * @var \DOMNode
+     */
+    private $button;
+    /**
+     * @var Field\FormField[]
+     */
+    private $fields;
+
+    /**
+     * Constructor.
+     *
+     * @param \DOMNode $node       A \DOMNode instance
+     * @param string   $currentUri The URI of the page where the form is embedded
+     * @param string   $method     The method to use for the link (if null, it defaults to the method defined by the form)
+     *
+     * @throws \LogicException if the node is not a button inside a form tag
+     *
+     * @api
+     */
+    public function __construct(\DOMNode $node, $currentUri, $method = null)
+    {
+        parent::__construct($node, $currentUri, $method);
+
+        $this->initialize();
+    }
+
+    /**
+     * Gets the form node associated with this form.
+     *
+     * @return \DOMNode A \DOMNode instance
+     */
+    public function getFormNode()
+    {
+        return $this->node;
+    }
+
+    /**
+     * Sets the value of the fields.
+     *
+     * @param array $values An array of field values
+     *
+     * @return Form
+     *
+     * @api
+     */
+    public function setValues(array $values)
+    {
+        foreach ($values as $name => $value) {
+            $this->fields->set($name, $value);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Gets the field values.
+     *
+     * The returned array does not include file fields (@see getFiles).
+     *
+     * @return array An array of field values.
+     *
+     * @api
+     */
+    public function getValues()
+    {
+        $values = array();
+        foreach ($this->fields->all() as $name => $field) {
+            if ($field->isDisabled()) {
+                continue;
+            }
+
+            if (!$field instanceof Field\FileFormField && $field->hasValue()) {
+                $values[$name] = $field->getValue();
+            }
+        }
+
+        return $values;
+    }
+
+    /**
+     * Gets the file field values.
+     *
+     * @return array An array of file field values.
+     *
+     * @api
+     */
+    public function getFiles()
+    {
+        if (!in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH'))) {
+            return array();
+        }
+
+        $files = array();
+
+        foreach ($this->fields->all() as $name => $field) {
+            if ($field->isDisabled()) {
+                continue;
+            }
+
+            if ($field instanceof Field\FileFormField) {
+                $files[$name] = $field->getValue();
+            }
+        }
+
+        return $files;
+    }
+
+    /**
+     * Gets the field values as PHP.
+     *
+     * This method converts fields with the array notation
+     * (like foo[bar] to arrays) like PHP does.
+     *
+     * @return array An array of field values.
+     *
+     * @api
+     */
+    public function getPhpValues()
+    {
+        $qs = http_build_query($this->getValues(), '', '&');
+        parse_str($qs, $values);
+
+        return $values;
+    }
+
+    /**
+     * Gets the file field values as PHP.
+     *
+     * This method converts fields with the array notation
+     * (like foo[bar] to arrays) like PHP does.
+     *
+     * @return array An array of field values.
+     *
+     * @api
+     */
+    public function getPhpFiles()
+    {
+        $qs = http_build_query($this->getFiles(), '', '&');
+        parse_str($qs, $values);
+
+        return $values;
+    }
+
+    /**
+     * Gets the URI of the form.
+     *
+     * The returned URI is not the same as the form "action" attribute.
+     * This method merges the value if the method is GET to mimics
+     * browser behavior.
+     *
+     * @return string The URI
+     *
+     * @api
+     */
+    public function getUri()
+    {
+        $uri = parent::getUri();
+
+        if (!in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH')) && $queryString = http_build_query($this->getValues(), null, '&')) {
+            $sep = false === strpos($uri, '?') ? '?' : '&';
+            $uri .= $sep.$queryString;
+        }
+
+        return $uri;
+    }
+
+    protected function getRawUri()
+    {
+        return $this->node->getAttribute('action');
+    }
+
+    /**
+     * Gets the form method.
+     *
+     * If no method is defined in the form, GET is returned.
+     *
+     * @return string The method
+     *
+     * @api
+     */
+    public function getMethod()
+    {
+        if (null !== $this->method) {
+            return $this->method;
+        }
+
+        return $this->node->getAttribute('method') ? strtoupper($this->node->getAttribute('method')) : 'GET';
+    }
+
+    /**
+     * Returns true if the named field exists.
+     *
+     * @param string $name The field name
+     *
+     * @return Boolean true if the field exists, false otherwise
+     *
+     * @api
+     */
+    public function has($name)
+    {
+        return $this->fields->has($name);
+    }
+
+    /**
+     * Removes a field from the form.
+     *
+     * @param string $name The field name
+     *
+     * @throws \InvalidArgumentException when the name is malformed
+     *
+     * @api
+     */
+    public function remove($name)
+    {
+        $this->fields->remove($name);
+    }
+
+    /**
+     * Gets a named field.
+     *
+     * @param string $name The field name
+     *
+     * @return FormField The field instance
+     *
+     * @throws \InvalidArgumentException When field is not present in this form
+     *
+     * @api
+     */
+    public function get($name)
+    {
+        return $this->fields->get($name);
+    }
+
+    /**
+     * Sets a named field.
+     *
+     * @param FormField $field The field
+     *
+     * @api
+     */
+    public function set(FormField $field)
+    {
+        $this->fields->add($field);
+    }
+
+    /**
+     * Gets all fields.
+     *
+     * @return array An array of fields
+     *
+     * @api
+     */
+    public function all()
+    {
+        return $this->fields->all();
+    }
+
+    /**
+     * Returns true if the named field exists.
+     *
+     * @param string $name The field name
+     *
+     * @return Boolean true if the field exists, false otherwise
+     */
+    public function offsetExists($name)
+    {
+        return $this->has($name);
+    }
+
+    /**
+     * Gets the value of a field.
+     *
+     * @param string $name The field name
+     *
+     * @return FormField The associated Field instance
+     *
+     * @throws \InvalidArgumentException if the field does not exist
+     */
+    public function offsetGet($name)
+    {
+        return $this->fields->get($name);
+    }
+
+    /**
+     * Sets the value of a field.
+     *
+     * @param string       $name  The field name
+     * @param string|array $value The value of the field
+     *
+     * @throws \InvalidArgumentException if the field does not exist
+     */
+    public function offsetSet($name, $value)
+    {
+        $this->fields->set($name, $value);
+    }
+
+    /**
+     * Removes a field from the form.
+     *
+     * @param string $name The field name
+     */
+    public function offsetUnset($name)
+    {
+        $this->fields->remove($name);
+    }
+
+    protected function setNode(\DOMNode $node)
+    {
+        $this->button = $node;
+        if ('button' == $node->nodeName || ('input' == $node->nodeName && in_array($node->getAttribute('type'), array('submit', 'button', 'image')))) {
+            do {
+                // use the ancestor form element
+                if (null === $node = $node->parentNode) {
+                    throw new \LogicException('The selected node does not have a form ancestor.');
+                }
+            } while ('form' != $node->nodeName);
+        } elseif ('form' != $node->nodeName) {
+            throw new \LogicException(sprintf('Unable to submit on a "%s" tag.', $node->nodeName));
+        }
+
+        $this->node = $node;
+    }
+
+    private function initialize()
+    {
+        $this->fields = new FormFieldRegistry();
+
+        $document = new \DOMDocument('1.0', 'UTF-8');
+        $node = $document->importNode($this->node, true);
+        $button = $document->importNode($this->button, true);
+        $root = $document->appendChild($document->createElement('_root'));
+        $root->appendChild($node);
+        $root->appendChild($button);
+        $xpath = new \DOMXPath($document);
+
+        foreach ($xpath->query('descendant::input | descendant::textarea | descendant::select', $root) as $node) {
+            if (!$node->hasAttribute('name')) {
+                continue;
+            }
+
+            $nodeName = $node->nodeName;
+
+            if ($node === $button) {
+                $this->set(new Field\InputFormField($node));
+            } elseif ('select' == $nodeName || 'input' == $nodeName && 'checkbox' == $node->getAttribute('type')) {
+                $this->set(new Field\ChoiceFormField($node));
+            } elseif ('input' == $nodeName && 'radio' == $node->getAttribute('type')) {
+                if ($this->has($node->getAttribute('name'))) {
+                    $this->get($node->getAttribute('name'))->addChoice($node);
+                } else {
+                    $this->set(new Field\ChoiceFormField($node));
+                }
+            } elseif ('input' == $nodeName && 'file' == $node->getAttribute('type')) {
+                $this->set(new Field\FileFormField($node));
+            } elseif ('input' == $nodeName && !in_array($node->getAttribute('type'), array('submit', 'button', 'image'))) {
+                $this->set(new Field\InputFormField($node));
+            } elseif ('textarea' == $nodeName) {
+                $this->set(new Field\TextareaFormField($node));
+            }
+        }
+    }
+}
+
+class FormFieldRegistry
+{
+    private $fields = array();
+
+    private $base;
+
+    /**
+     * Adds a field to the registry.
+     *
+     * @param FormField $field The field
+     *
+     * @throws \InvalidArgumentException when the name is malformed
+     */
+    public function add(FormField $field)
+    {
+        $segments = $this->getSegments($field->getName());
+
+        $target =& $this->fields;
+        while ($segments) {
+            if (!is_array($target)) {
+                $target = array();
+            }
+            $path = array_shift($segments);
+            if ('' === $path) {
+                $target =& $target[];
+            } else {
+                $target =& $target[$path];
+            }
+        }
+        $target = $field;
+    }
+
+    /**
+     * Removes a field and its children from the registry.
+     *
+     * @param string $name The fully qualified name of the base field
+     *
+     * @throws \InvalidArgumentException when the name is malformed
+     */
+    public function remove($name)
+    {
+        $segments = $this->getSegments($name);
+        $target =& $this->fields;
+        while (count($segments) > 1) {
+            $path = array_shift($segments);
+            if (!array_key_exists($path, $target)) {
+                return;
+            }
+            $target =& $target[$path];
+        }
+        unset($target[array_shift($segments)]);
+    }
+
+    /**
+     * Returns the value of the field and its children.
+     *
+     * @param string $name The fully qualified name of the field
+     *
+     * @return mixed The value of the field
+     *
+     * @throws \InvalidArgumentException when the name is malformed
+     * @throws \InvalidArgumentException if the field does not exist
+     */
+    public function &get($name)
+    {
+        $segments = $this->getSegments($name);
+        $target =& $this->fields;
+        while ($segments) {
+            $path = array_shift($segments);
+            if (!array_key_exists($path, $target)) {
+                throw new \InvalidArgumentException(sprintf('Unreachable field "%s"', $path));
+            }
+            $target =& $target[$path];
+        }
+
+        return $target;
+    }
+
+    /**
+     * Tests whether the form has the given field.
+     *
+     * @param string $name The fully qualified name of the field
+     *
+     * @return Boolean Whether the form has the given field
+     */
+    public function has($name)
+    {
+        try {
+            $this->get($name);
+
+            return true;
+        } catch (\InvalidArgumentException $e) {
+            return false;
+        }
+    }
+
+    /**
+     * Set the value of a field and its children.
+     *
+     * @param string $name  The fully qualified name of the field
+     * @param mixed  $value The value
+     *
+     * @throws \InvalidArgumentException when the name is malformed
+     * @throws \InvalidArgumentException if the field does not exist
+     */
+    public function set($name, $value)
+    {
+        $target =& $this->get($name);
+        if (is_array($value)) {
+            $fields = self::create($name, $value);
+            foreach ($fields->all() as $k => $v) {
+                $this->set($k, $v);
+            }
+        } else {
+            $target->setValue($value);
+        }
+    }
+
+    /**
+     * Returns the list of field with their value.
+     *
+     * @return array The list of fields as array((string) Fully qualified name => (mixed) value)
+     */
+    public function all()
+    {
+        return $this->walk($this->fields, $this->base);
+    }
+
+    /**
+     * Creates an instance of the class.
+     *
+     * This function is made private because it allows overriding the $base and
+     * the $values properties without any type checking.
+     *
+     * @param string $base   The fully qualified name of the base field
+     * @param array  $values The values of the fields
+     *
+     * @return FormFieldRegistry
+     */
+    private static function create($base, array $values)
+    {
+        $registry = new static();
+        $registry->base = $base;
+        $registry->fields = $values;
+
+        return $registry;
+    }
+
+    /**
+     * Transforms a PHP array in a list of fully qualified name / value.
+     *
+     * @param array  $array  The PHP array
+     * @param string $base   The name of the base field
+     * @param array  $output The initial values
+     *
+     * @return array The list of fields as array((string) Fully qualified name => (mixed) value)
+     */
+    private function walk(array $array, $base = '', array &$output = array())
+    {
+        foreach ($array as $k => $v) {
+            $path = empty($base) ? $k : sprintf("%s[%s]", $base, $k);
+            if (is_array($v)) {
+                $this->walk($v, $path, $output);
+            } else {
+                $output[$path] = $v;
+            }
+        }
+
+        return $output;
+    }
+
+    /**
+     * Splits a field name into segments as a web browser would do.
+     *
+     * <code>
+     *     getSegments('base[foo][3][]') = array('base', 'foo, '3', '');
+     * </code>
+     *
+     * @param string $name The name of the field
+     *
+     * @return array The list of segments
+     *
+     * @throws \InvalidArgumentException when the name is malformed
+     */
+    private function getSegments($name)
+    {
+        if (preg_match('/^(?P<base>[^[]+)(?P<extra>(\[.*)|$)/', $name, $m)) {
+            $segments = array($m['base']);
+            while (preg_match('/^\[(?P<segment>.*?)\](?P<extra>.*)$/', $m['extra'], $m)) {
+                $segments[] = $m['segment'];
+            }
+
+            return $segments;
+        }
+
+        throw new \InvalidArgumentException(sprintf('Malformed field path "%s"', $name));
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/LICENSE b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..cdffe7aebc04acd5c2b9c3042a0923d8e8f31998
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2012 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Link.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Link.php
new file mode 100644
index 0000000000000000000000000000000000000000..1804111f2efed10dbff76797ae1e061f5b66a929
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Link.php
@@ -0,0 +1,157 @@
+<?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\DomCrawler;
+
+/**
+ * Link represents an HTML link (an HTML a tag).
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class Link
+{
+    /**
+     * @var \DOMNode A \DOMNode instance
+     */
+    protected $node;
+    /**
+     * @var string The method to use for the link
+     */
+    protected $method;
+    /**
+     * @var string The URI of the page where the link is embedded (or the base href)
+     */
+    protected $currentUri;
+
+    /**
+     * Constructor.
+     *
+     * @param \DOMNode $node       A \DOMNode instance
+     * @param string   $currentUri The URI of the page where the link is embedded (or the base href)
+     * @param string   $method     The method to use for the link (get by default)
+     *
+     * @throws \InvalidArgumentException if the node is not a link
+     *
+     * @api
+     */
+    public function __construct(\DOMNode $node, $currentUri, $method = 'GET')
+    {
+        if (!in_array(substr($currentUri, 0, 4), array('http', 'file'))) {
+            throw new \InvalidArgumentException(sprintf('Current URI must be an absolute URL ("%s").', $currentUri));
+        }
+
+        $this->setNode($node);
+        $this->method = $method ? strtoupper($method) : null;
+        $this->currentUri = $currentUri;
+    }
+
+    /**
+     * Gets the node associated with this link.
+     *
+     * @return \DOMNode A \DOMNode instance
+     */
+    public function getNode()
+    {
+        return $this->node;
+    }
+
+    /**
+     * Gets the method associated with this link.
+     *
+     * @return string The method
+     *
+     * @api
+     */
+    public function getMethod()
+    {
+        return $this->method;
+    }
+
+    /**
+     * Gets the URI associated with this link.
+     *
+     * @return string The URI
+     *
+     * @api
+     */
+    public function getUri()
+    {
+        $uri = trim($this->getRawUri());
+
+        // absolute URL?
+        if (0 === strpos($uri, 'http')) {
+            return $uri;
+        }
+
+        // empty URI
+        if (!$uri) {
+            return $this->currentUri;
+        }
+
+        // only an anchor
+        if ('#' === $uri[0]) {
+            $baseUri = $this->currentUri;
+            if (false !== $pos = strpos($baseUri, '#')) {
+                $baseUri = substr($baseUri, 0, $pos);
+            }
+
+            return $baseUri.$uri;
+        }
+
+        // only a query string
+        if ('?' === $uri[0]) {
+            $baseUri = $this->currentUri;
+
+            // remove the query string from the current uri
+            if (false !== $pos = strpos($baseUri, '?')) {
+                $baseUri = substr($baseUri, 0, $pos);
+            }
+
+            return $baseUri.$uri;
+        }
+
+        // absolute path
+        if ('/' === $uri[0]) {
+            return preg_replace('#^(.*?//[^/]+)(?:\/.*)?$#', '$1', $this->currentUri).$uri;
+        }
+
+        // relative path
+        return substr($this->currentUri, 0, strrpos($this->currentUri, '/') + 1).$uri;
+    }
+
+    /**
+     * Returns raw uri data
+     *
+     * @return string
+     */
+    protected function getRawUri()
+    {
+        return $this->node->getAttribute('href');
+    }
+
+    /**
+     * Sets current \DOMNode instance
+     *
+     * @param \DOMNode $node A \DOMNode instance
+     *
+     * @throws \LogicException If given node is not an anchor
+     */
+    protected function setNode(\DOMNode $node)
+    {
+        if ('a' != $node->nodeName) {
+            throw new \LogicException(sprintf('Unable to click on a "%s" tag.', $node->nodeName));
+        }
+
+        $this->node = $node;
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/README.md b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b383b5184bcc13a9d0a1b7dfacc064e95bba5c72
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/README.md
@@ -0,0 +1,35 @@
+DomCrawler Component
+====================
+
+DomCrawler eases DOM navigation for HTML and XML documents.
+
+If you are familiar with jQuery, DomCrawler is a PHP equivalent:
+
+    use Symfony\Component\DomCrawler\Crawler;
+
+    $crawler = new Crawler();
+    $crawler->addContent('<html><body><p>Hello World!</p></body></html>');
+
+    print $crawler->filterXPath('descendant-or-self::body/p')->text();
+
+If you are also using the CssSelector component, you can use CSS Selectors
+instead of XPath expressions:
+
+    use Symfony\Component\DomCrawler\Crawler;
+
+    $crawler = new Crawler();
+    $crawler->addContent('<html><body><p>Hello World!</p></body></html>');
+
+    print $crawler->filter('body > p')->text();
+
+Resources
+---------
+
+You can run the unit tests with the following command:
+
+    phpunit
+
+If you also want to run the unit tests that depend on other Symfony
+Components, install dev dependencies before running PHPUnit:
+
+    php composer.phar install --dev
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/CrawlerTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/CrawlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ccab61d77548cceb28aa9badbc4d3158bd4552b
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/CrawlerTest.php
@@ -0,0 +1,595 @@
+<?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\DomCrawler\Tests;
+
+use Symfony\Component\DomCrawler\Crawler;
+
+class CrawlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testConstructor()
+    {
+        $crawler = new Crawler();
+        $this->assertCount(0, $crawler, '__construct() returns an empty crawler');
+
+        $crawler = new Crawler(new \DOMNode());
+        $this->assertCount(1, $crawler, '__construct() takes a node as a first argument');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::add
+     */
+    public function testAdd()
+    {
+        $crawler = new Crawler();
+        $crawler->add($this->createDomDocument());
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from a \DOMDocument');
+
+        $crawler = new Crawler();
+        $crawler->add($this->createNodeList());
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from a \DOMNodeList');
+
+        foreach ($this->createNodeList() as $node) {
+            $list[] = $node;
+        }
+        $crawler = new Crawler();
+        $crawler->add($list);
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from an array of nodes');
+
+        $crawler = new Crawler();
+        $crawler->add($this->createNodeList()->item(0));
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from an \DOMNode');
+
+        $crawler = new Crawler();
+        $crawler->add('<html><body>Foo</body></html>');
+        $this->assertEquals('Foo', $crawler->filterXPath('//body')->text(), '->add() adds nodes from a string');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
+     */
+    public function testAddHtmlContent()
+    {
+        $crawler = new Crawler();
+        $crawler->addHtmlContent('<html><div class="foo"></html>', 'UTF-8');
+
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addHtmlContent() adds nodes from an HTML string');
+
+        $crawler->addHtmlContent('<html><head><base href="http://symfony.com"></head><a href="/contact"></a></html>', 'UTF-8');
+
+        $this->assertEquals('http://symfony.com', $crawler->filterXPath('//base')->attr('href'), '->addHtmlContent() adds nodes from an HTML string');
+        $this->assertEquals('http://symfony.com/contact', $crawler->filterXPath('//a')->link()->getUri(), '->addHtmlContent() adds nodes from an HTML string');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
+     */
+    public function testAddHtmlContentCharset()
+    {
+        $crawler = new Crawler();
+        $crawler->addHtmlContent('<html><div class="foo">Tiáº¿ng Viá»‡t</html>', 'UTF-8');
+
+        $this->assertEquals('Tiáº¿ng Viá»‡t', $crawler->filterXPath('//div')->text());
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
+     */
+    public function testAddHtmlContentWithErrors()
+    {
+        libxml_use_internal_errors(true);
+
+        $crawler = new Crawler();
+        $crawler->addHtmlContent(<<<EOF
+<!DOCTYPE html>
+<html>
+    <head>
+    </head>
+    <body>
+        <nav><a href="#"><a href="#"></nav>
+    </body>
+</html>
+EOF
+        , 'UTF-8');
+
+        $errors = libxml_get_errors();
+        $this->assertCount(1, $errors);
+        $this->assertEquals("Tag nav invalid\n", $errors[0]->message);
+
+        libxml_clear_errors();
+        libxml_use_internal_errors(false);
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addXmlContent
+     */
+    public function testAddXmlContent()
+    {
+        $crawler = new Crawler();
+        $crawler->addXmlContent('<html><div class="foo"></div></html>', 'UTF-8');
+
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addXmlContent() adds nodes from an XML string');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addXmlContent
+     */
+    public function testAddXmlContentCharset()
+    {
+        $crawler = new Crawler();
+        $crawler->addXmlContent('<html><div class="foo">Tiáº¿ng Viá»‡t</div></html>', 'UTF-8');
+
+        $this->assertEquals('Tiáº¿ng Viá»‡t', $crawler->filterXPath('//div')->text());
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addXmlContent
+     */
+    public function testAddXmlContentWithErrors()
+    {
+        libxml_use_internal_errors(true);
+
+        $crawler = new Crawler();
+        $crawler->addXmlContent(<<<EOF
+<!DOCTYPE html>
+<html>
+    <head>
+    </head>
+    <body>
+        <nav><a href="#"><a href="#"></nav>
+    </body>
+</html>
+EOF
+        , 'UTF-8');
+
+        $this->assertTrue(count(libxml_get_errors()) > 1);
+
+        libxml_clear_errors();
+        libxml_use_internal_errors(false);
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addContent
+     */
+    public function testAddContent()
+    {
+        $crawler = new Crawler();
+        $crawler->addContent('<html><div class="foo"></html>', 'text/html; charset=UTF-8');
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an HTML string');
+
+        $crawler = new Crawler();
+        $crawler->addContent('<html><div class="foo"></html>', 'text/html; charset=UTF-8; dir=RTL');
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an HTML string with extended content type');
+
+        $crawler = new Crawler();
+        $crawler->addContent('<html><div class="foo"></html>');
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() uses text/html as the default type');
+
+        $crawler = new Crawler();
+        $crawler->addContent('<html><div class="foo"></div></html>', 'text/xml; charset=UTF-8');
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an XML string');
+
+        $crawler = new Crawler();
+        $crawler->addContent('<html><div class="foo"></div></html>', 'text/xml');
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an XML string');
+
+        $crawler = new Crawler();
+        $crawler->addContent('foo bar', 'text/plain');
+        $this->assertCount(0, $crawler, '->addContent() does nothing if the type is not (x|ht)ml');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addDocument
+     */
+    public function testAddDocument()
+    {
+        $crawler = new Crawler();
+        $crawler->addDocument($this->createDomDocument());
+
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addDocument() adds nodes from a \DOMDocument');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addNodeList
+     */
+    public function testAddNodeList()
+    {
+        $crawler = new Crawler();
+        $crawler->addNodeList($this->createNodeList());
+
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addNodeList() adds nodes from a \DOMNodeList');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addNodes
+     */
+    public function testAddNodes()
+    {
+        foreach ($this->createNodeList() as $node) {
+            $list[] = $node;
+        }
+
+        $crawler = new Crawler();
+        $crawler->addNodes($list);
+
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addNodes() adds nodes from an array of nodes');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::addNode
+     */
+    public function testAddNode()
+    {
+        $crawler = new Crawler();
+        $crawler->addNode($this->createNodeList()->item(0));
+
+        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addNode() adds nodes from an \DOMNode');
+    }
+
+    public function testClear()
+    {
+        $crawler = new Crawler(new \DOMNode());
+        $crawler->clear();
+        $this->assertCount(0, $crawler, '->clear() removes all the nodes from the crawler');
+    }
+
+    public function testEq()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//li');
+        $this->assertNotSame($crawler, $crawler->eq(0), '->eq() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->eq() returns a new instance of a crawler');
+
+        $this->assertEquals('Two', $crawler->eq(1)->text(), '->eq() returns the nth node of the list');
+        $this->assertCount(0, $crawler->eq(100), '->eq() returns an empty crawler if the nth node does not exist');
+    }
+
+    public function testEach()
+    {
+        $data = $this->createTestCrawler()->filterXPath('//ul[1]/li')->each(function ($node, $i) {
+            return $i.'-'.$node->nodeValue;
+        });
+
+        $this->assertEquals(array('0-One', '1-Two', '2-Three'), $data, '->each() executes an anonymous function on each node of the list');
+    }
+
+    public function testReduce()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
+        $nodes = $crawler->reduce(function ($node, $i) {
+            return $i == 1 ? false : true;
+        });
+        $this->assertNotSame($nodes, $crawler, '->reduce() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $nodes, '->reduce() returns a new instance of a crawler');
+
+        $this->assertCount(2, $nodes, '->reduce() filters the nodes in the list');
+    }
+
+    public function testAttr()
+    {
+        $this->assertEquals('first', $this->createTestCrawler()->filterXPath('//li')->attr('class'), '->attr() returns the attribute of the first element of the node list');
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->attr('class');
+            $this->fail('->attr() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->attr() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testText()
+    {
+        $this->assertEquals('One', $this->createTestCrawler()->filterXPath('//li')->text(), '->text() returns the node value of the first element of the node list');
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->text();
+            $this->fail('->text() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->text() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testExtract()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
+
+        $this->assertEquals(array('One', 'Two', 'Three'), $crawler->extract('_text'), '->extract() returns an array of extracted data from the node list');
+        $this->assertEquals(array(array('One', 'first'), array('Two', ''), array('Three', '')), $crawler->extract(array('_text', 'class')), '->extract() returns an array of extracted data from the node list');
+
+        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->extract('_text'), '->extract() returns an empty array if the node list is empty');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::filterXPath
+     */
+    public function testFilterXPath()
+    {
+        $crawler = $this->createTestCrawler();
+        $this->assertNotSame($crawler, $crawler->filterXPath('//li'), '->filterXPath() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->filterXPath() returns a new instance of a crawler');
+
+        $crawler = $this->createTestCrawler()->filterXPath('//ul');
+
+        $this->assertCount(6, $crawler->filterXPath('//li'), '->filterXPath() filters the node list with the XPath expression');
+    }
+
+    /**
+     * @covers Symfony\Component\DomCrawler\Crawler::filter
+     */
+    public function testFilter()
+    {
+        if (!class_exists('Symfony\Component\CssSelector\CssSelector')) {
+            $this->markTestSkipped('The "CssSelector" component is not available');
+        }
+
+        $crawler = $this->createTestCrawler();
+        $this->assertNotSame($crawler, $crawler->filter('li'), '->filter() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->filter() returns a new instance of a crawler');
+
+        $crawler = $this->createTestCrawler()->filter('ul');
+
+        $this->assertCount(6, $crawler->filter('li'), '->filter() filters the node list with the CSS selector');
+    }
+
+    public function testSelectLink()
+    {
+        $crawler = $this->createTestCrawler();
+        $this->assertNotSame($crawler, $crawler->selectLink('Foo'), '->selectLink() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->selectLink() returns a new instance of a crawler');
+
+        $this->assertCount(1, $crawler->selectLink('Fabien\'s Foo'), '->selectLink() selects links by the node values');
+        $this->assertCount(1, $crawler->selectLink('Fabien\'s Bar'), '->selectLink() selects links by the alt attribute of a clickable image');
+
+        $this->assertCount(2, $crawler->selectLink('Fabien"s Foo'), '->selectLink() selects links by the node values');
+        $this->assertCount(2, $crawler->selectLink('Fabien"s Bar'), '->selectLink() selects links by the alt attribute of a clickable image');
+
+        $this->assertCount(1, $crawler->selectLink('\' Fabien"s Foo'), '->selectLink() selects links by the node values');
+        $this->assertCount(1, $crawler->selectLink('\' Fabien"s Bar'), '->selectLink() selects links by the alt attribute of a clickable image');
+
+        $this->assertCount(4, $crawler->selectLink('Foo'), '->selectLink() selects links by the node values');
+        $this->assertCount(4, $crawler->selectLink('Bar'), '->selectLink() selects links by the node values');
+    }
+
+    public function testSelectButton()
+    {
+        $crawler = $this->createTestCrawler();
+        $this->assertNotSame($crawler, $crawler->selectButton('FooValue'), '->selectButton() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->selectButton() returns a new instance of a crawler');
+
+        $this->assertEquals(1, $crawler->selectButton('FooValue')->count(), '->selectButton() selects buttons');
+        $this->assertEquals(1, $crawler->selectButton('FooName')->count(), '->selectButton() selects buttons');
+        $this->assertEquals(1, $crawler->selectButton('FooId')->count(), '->selectButton() selects buttons');
+
+        $this->assertEquals(1, $crawler->selectButton('BarValue')->count(), '->selectButton() selects buttons');
+        $this->assertEquals(1, $crawler->selectButton('BarName')->count(), '->selectButton() selects buttons');
+        $this->assertEquals(1, $crawler->selectButton('BarId')->count(), '->selectButton() selects buttons');
+    }
+
+    public function testLink()
+    {
+        $crawler = $this->createTestCrawler('http://example.com/bar/')->selectLink('Foo');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Link', $crawler->link(), '->link() returns a Link instance');
+
+        $this->assertEquals('POST', $crawler->link('post')->getMethod(), '->link() takes a method as its argument');
+
+        $crawler = $this->createTestCrawler('http://example.com/bar')->selectLink('GetLink');
+        $this->assertEquals('http://example.com/bar?get=param', $crawler->link()->getUri(), '->link() returns a Link instance');
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->link();
+            $this->fail('->link() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->link() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testLinks()
+    {
+        $crawler = $this->createTestCrawler('http://example.com/bar/')->selectLink('Foo');
+        $this->assertInternalType('array', $crawler->links(), '->links() returns an array');
+
+        $this->assertCount(4, $crawler->links(), '->links() returns an array');
+        $links = $crawler->links();
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Link', $links[0], '->links() returns an array of Link instances');
+
+        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
+    }
+
+    public function testForm()
+    {
+        $crawler = $this->createTestCrawler('http://example.com/bar/')->selectButton('FooValue');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Form', $crawler->form(), '->form() returns a Form instance');
+
+        $this->assertEquals(array('FooName' => 'FooBar'), $crawler->form(array('FooName' => 'FooBar'))->getValues(), '->form() takes an array of values to submit as its first argument');
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->form();
+            $this->fail('->form() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->form() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testLast()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
+        $this->assertNotSame($crawler, $crawler->last(), '->last() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->last() returns a new instance of a crawler');
+
+        $this->assertEquals('Three', $crawler->last()->text());
+    }
+
+    public function testFirst()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//li');
+        $this->assertNotSame($crawler, $crawler->first(), '->first() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->first() returns a new instance of a crawler');
+
+        $this->assertEquals('One', $crawler->first()->text());
+    }
+
+    public function testSiblings()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//li')->eq(1);
+        $this->assertNotSame($crawler, $crawler->siblings(), '->siblings() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->siblings() returns a new instance of a crawler');
+
+        $nodes = $crawler->siblings();
+        $this->assertEquals(2, $nodes->count());
+        $this->assertEquals('One', $nodes->eq(0)->text());
+        $this->assertEquals('Three', $nodes->eq(1)->text());
+
+        $nodes = $this->createTestCrawler()->filterXPath('//li')->eq(0)->siblings();
+        $this->assertEquals(2, $nodes->count());
+        $this->assertEquals('Two', $nodes->eq(0)->text());
+        $this->assertEquals('Three', $nodes->eq(1)->text());
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->siblings();
+            $this->fail('->siblings() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->siblings() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testNextAll()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//li')->eq(1);
+        $this->assertNotSame($crawler, $crawler->nextAll(), '->nextAll() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->nextAll() returns a new instance of a crawler');
+
+        $nodes = $crawler->nextAll();
+        $this->assertEquals(1, $nodes->count());
+        $this->assertEquals('Three', $nodes->eq(0)->text());
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->nextAll();
+            $this->fail('->nextAll() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->nextAll() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testPreviousAll()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//li')->eq(2);
+        $this->assertNotSame($crawler, $crawler->previousAll(), '->previousAll() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->previousAll() returns a new instance of a crawler');
+
+        $nodes = $crawler->previousAll();
+        $this->assertEquals(2, $nodes->count());
+        $this->assertEquals('Two', $nodes->eq(0)->text());
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->previousAll();
+            $this->fail('->previousAll() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->previousAll() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testChildren()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//ul');
+        $this->assertNotSame($crawler, $crawler->children(), '->children() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->children() returns a new instance of a crawler');
+
+        $nodes = $crawler->children();
+        $this->assertEquals(3, $nodes->count());
+        $this->assertEquals('One', $nodes->eq(0)->text());
+        $this->assertEquals('Two', $nodes->eq(1)->text());
+        $this->assertEquals('Three', $nodes->eq(2)->text());
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->children();
+            $this->fail('->children() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->children() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function testParents()
+    {
+        $crawler = $this->createTestCrawler()->filterXPath('//li[1]');
+        $this->assertNotSame($crawler, $crawler->parents(), '->parents() returns a new instance of a crawler');
+        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->parents() returns a new instance of a crawler');
+
+        $nodes = $crawler->parents();
+        $this->assertEquals(3, $nodes->count());
+
+        $nodes = $this->createTestCrawler()->filterXPath('//html')->parents();
+        $this->assertEquals(0, $nodes->count());
+
+        try {
+            $this->createTestCrawler()->filterXPath('//ol')->parents();
+            $this->fail('->parents() throws an \InvalidArgumentException if the node list is empty');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->parents() throws an \InvalidArgumentException if the node list is empty');
+        }
+    }
+
+    public function createTestCrawler($uri = null)
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('
+            <html>
+                <body>
+                    <a href="foo">Foo</a>
+                    <a href="/foo">   Fabien\'s Foo   </a>
+                    <a href="/foo">Fabien"s Foo</a>
+                    <a href="/foo">\' Fabien"s Foo</a>
+
+                    <a href="/bar"><img alt="Bar"/></a>
+                    <a href="/bar"><img alt="   Fabien\'s Bar   "/></a>
+                    <a href="/bar"><img alt="Fabien&quot;s Bar"/></a>
+                    <a href="/bar"><img alt="\' Fabien&quot;s Bar"/></a>
+
+                    <a href="?get=param">GetLink</a>
+
+                    <form action="foo">
+                        <input type="submit" value="FooValue" name="FooName" id="FooId" />
+                        <input type="button" value="BarValue" name="BarName" id="BarId" />
+                        <button value="ButtonValue" name="ButtonName" id="ButtonId" />
+                    </form>
+
+                    <ul class="first">
+                        <li class="first">One</li>
+                        <li>Two</li>
+                        <li>Three</li>
+                    </ul>
+                    <ul>
+                        <li>One Bis</li>
+                        <li>Two Bis</li>
+                        <li>Three Bis</li>
+                    </ul>
+                </body>
+            </html>
+        ');
+
+        return new Crawler($dom, $uri);
+    }
+
+    protected function createDomDocument()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadXML('<html><div class="foo"></div></html>');
+
+        return $dom;
+    }
+
+    protected function createNodeList()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadXML('<html><div class="foo"></div></html>');
+        $domxpath = new \DOMXPath($dom);
+
+        return $domxpath->query('//div');
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/ChoiceFormFieldTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/ChoiceFormFieldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e50216cde4904c410a34c17e240c1fe9c1f487b6
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/ChoiceFormFieldTest.php
@@ -0,0 +1,329 @@
+<?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\DomCrawler\Tests\Field;
+
+use Symfony\Component\DomCrawler\Field\ChoiceFormField;
+
+class ChoiceFormFieldTest extends FormFieldTestCase
+{
+    public function testInitialize()
+    {
+        $node = $this->createNode('textarea', '');
+        try {
+            $field = new ChoiceFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is not an input or a select');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input or a select');
+        }
+
+        $node = $this->createNode('input', '', array('type' => 'text'));
+        try {
+            $field = new ChoiceFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is an input with a type different from checkbox or radio');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is an input with a type different from checkbox or radio');
+        }
+    }
+
+    public function testGetType()
+    {
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertEquals('radio', $field->getType(), '->getType() returns radio for radio buttons');
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertEquals('checkbox', $field->getType(), '->getType() returns radio for a checkbox');
+
+        $node = $this->createNode('select', '');
+        $field = new ChoiceFormField($node);
+
+        $this->assertEquals('select', $field->getType(), '->getType() returns radio for a select');
+    }
+
+    public function testIsMultiple()
+    {
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for checkboxes');
+
+        $node = $this->createNode('select', '');
+        $field = new ChoiceFormField($node);
+
+        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for selects without the multiple attribute');
+
+        $node = $this->createNode('select', '', array('multiple' => 'multiple'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertTrue($field->isMultiple(), '->isMultiple() returns true for selects with the multiple attribute');
+    }
+
+    public function testSelects()
+    {
+        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $field = new ChoiceFormField($node);
+
+        $this->assertTrue($field->hasValue(), '->hasValue() returns true for selects');
+        $this->assertEquals('foo', $field->getValue(), '->getValue() returns the first option if none are selected');
+        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false when no multiple attribute is defined');
+
+        $node = $this->createSelectNode(array('foo' => false, 'bar' => true));
+        $field = new ChoiceFormField($node);
+
+        $this->assertEquals('bar', $field->getValue(), '->getValue() returns the selected option');
+
+        $field->setValue('foo');
+        $this->assertEquals('foo', $field->getValue(), '->setValue() changes the selected option');
+
+        try {
+            $field->setValue('foobar');
+            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the selected options');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the selected options');
+        }
+
+        try {
+            $field->setValue(array('foobar'));
+            $this->fail('->setValue() throws an \InvalidArgumentException if the value is an array');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is an array');
+        }
+    }
+
+    public function testMultipleSelects()
+    {
+        $node = $this->createSelectNode(array('foo' => false, 'bar' => false), array('multiple' => 'multiple'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertEquals(array(), $field->getValue(), '->setValue() returns an empty array if multiple is true and no option is selected');
+
+        $field->setValue('foo');
+        $this->assertEquals(array('foo'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+
+        $field->setValue('bar');
+        $this->assertEquals(array('bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+
+        $field->setValue(array('foo', 'bar'));
+        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+
+        $node = $this->createSelectNode(array('foo' => true, 'bar' => true), array('multiple' => 'multiple'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->getValue() returns the selected options');
+
+        try {
+            $field->setValue(array('foobar'));
+            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the options');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the options');
+        }
+    }
+
+    public function testRadioButtons()
+    {
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
+        $field->addChoice($node);
+
+        $this->assertFalse($field->hasValue(), '->hasValue() returns false when no radio button is selected');
+        $this->assertNull($field->getValue(), '->getValue() returns null if no radio button is selected');
+        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
+
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => 'checked'));
+        $field->addChoice($node);
+
+        $this->assertTrue($field->hasValue(), '->hasValue() returns true when a radio button is selected');
+        $this->assertEquals('bar', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
+
+        $field->setValue('foo');
+        $this->assertEquals('foo', $field->getValue(), '->setValue() changes the selected radio button');
+
+        try {
+            $field->setValue('foobar');
+            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the radio button values');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the radio button values');
+        }
+    }
+
+    public function testRadioButtonIsDisabled()
+    {
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo', 'disabled' => 'disabled'));
+        $field = new ChoiceFormField($node);
+        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
+        $field->addChoice($node);
+
+        $field->select('foo');
+        $this->assertEquals('foo', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
+        $this->assertTrue($field->isDisabled());
+
+        $field->select('bar');
+        $this->assertEquals('bar', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
+        $this->assertFalse($field->isDisabled());
+    }
+
+    public function testCheckboxes()
+    {
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertFalse($field->hasValue(), '->hasValue() returns false when the checkbox is not checked');
+        $this->assertNull($field->getValue(), '->getValue() returns null if the checkbox is not checked');
+        $this->assertFalse($field->isMultiple(), '->hasValue() returns false for checkboxes');
+        try {
+            $field->addChoice(new \DOMNode());
+            $this->fail('->addChoice() throws a \LogicException for checkboxes');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException for checkboxes');
+        }
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertTrue($field->hasValue(), '->hasValue() returns true when the checkbox is checked');
+        $this->assertEquals('1', $field->getValue(), '->getValue() returns 1 if the checkbox is checked and has no value attribute');
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+
+        $this->assertEquals('foo', $field->getValue(), '->getValue() returns the value attribute if the checkbox is checked');
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
+        $field = new ChoiceFormField($node);
+
+        $field->setValue(false);
+        $this->assertNull($field->getValue(), '->setValue() unchecks the checkbox is value is false');
+
+        $field->setValue(true);
+        $this->assertEquals('foo', $field->getValue(), '->setValue() checks the checkbox is value is true');
+
+        try {
+            $field->setValue('bar');
+            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one from the value attribute');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one from the value attribute');
+        }
+    }
+
+    public function testTick()
+    {
+        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $field = new ChoiceFormField($node);
+
+        try {
+            $field->tick();
+            $this->fail('->tick() throws a \LogicException for select boxes');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->tick() throws a \LogicException for select boxes');
+        }
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
+        $field = new ChoiceFormField($node);
+        $field->tick();
+        $this->assertEquals(1, $field->getValue(), '->tick() ticks checkboxes');
+    }
+
+    public function testUntick()
+    {
+        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $field = new ChoiceFormField($node);
+
+        try {
+            $field->untick();
+            $this->fail('->untick() throws a \LogicException for select boxes');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->untick() throws a \LogicException for select boxes');
+        }
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $field = new ChoiceFormField($node);
+        $field->untick();
+        $this->assertNull($field->getValue(), '->untick() unticks checkoxes');
+    }
+
+    public function testSelect()
+    {
+        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $field = new ChoiceFormField($node);
+        $field->select(true);
+        $this->assertEquals(1, $field->getValue(), '->select() changes the value of the field');
+        $field->select(false);
+        $this->assertNull($field->getValue(), '->select() changes the value of the field');
+
+        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $field = new ChoiceFormField($node);
+        $field->select('foo');
+        $this->assertEquals('foo', $field->getValue(), '->select() changes the selected option');
+    }
+
+    public function testOptionWithNoValue()
+    {
+        $node = $this->createSelectNodeWithEmptyOption(array('foo' => false, 'bar' => false));
+        $field = new ChoiceFormField($node);
+        $field->select('foo');
+        $this->assertEquals('foo', $field->getValue(), '->select() changes the selected option');
+    }
+
+    protected function createSelectNode($options, $attributes = array())
+    {
+        $document = new \DOMDocument();
+        $node = $document->createElement('select');
+
+        foreach ($attributes as $name => $value) {
+            $node->setAttribute($name, $value);
+        }
+        $node->setAttribute('name', 'name');
+
+        foreach ($options as $value => $selected) {
+            $option = $document->createElement('option', $value);
+            $option->setAttribute('value', $value);
+            if ($selected) {
+                $option->setAttribute('selected', 'selected');
+            }
+            $node->appendChild($option);
+        }
+
+        return $node;
+    }
+
+    protected function createSelectNodeWithEmptyOption($options, $attributes = array())
+    {
+        $document = new \DOMDocument();
+        $node = $document->createElement('select');
+
+        foreach ($attributes as $name => $value) {
+            $node->setAttribute($name, $value);
+        }
+        $node->setAttribute('name', 'name');
+
+        foreach ($options as $value => $selected) {
+            $option = $document->createElement('option', $value);
+            if ($selected) {
+                $option->setAttribute('selected', 'selected');
+            }
+            $node->appendChild($option);
+        }
+
+        return $node;
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FileFormFieldTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FileFormFieldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..95937ca01cccbc21b99a3f56fad891097b9d8584
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FileFormFieldTest.php
@@ -0,0 +1,87 @@
+<?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\DomCrawler\Tests\Field;
+
+use Symfony\Component\DomCrawler\Field\FileFormField;
+
+class FileFormFieldTest extends FormFieldTestCase
+{
+    public function testInitialize()
+    {
+        $node = $this->createNode('input', '', array('type' => 'file'));
+        $field = new FileFormField($node);
+
+        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), '->initialize() sets the value of the field to no file uploaded');
+
+        $node = $this->createNode('textarea', '');
+        try {
+            $field = new FileFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is not an input field');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input field');
+        }
+
+        $node = $this->createNode('input', '', array('type' => 'text'));
+        try {
+            $field = new FileFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is not a file input field');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not a file input field');
+        }
+    }
+
+    /**
+     * @dataProvider getSetValueMethods
+     */
+    public function testSetValue($method)
+    {
+        $node = $this->createNode('input', '', array('type' => 'file'));
+        $field = new FileFormField($node);
+
+        $field->$method(null);
+        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), "->$method() clears the uploaded file if the value is null");
+
+        $field->$method(__FILE__);
+        $value = $field->getValue();
+
+        $this->assertEquals(basename(__FILE__), $value['name'], "->$method() sets the name of the file field");
+        $this->assertEquals('', $value['type'], "->$method() sets the type of the file field");
+        $this->assertInternalType('string', $value['tmp_name'], "->$method() sets the tmp_name of the file field");
+        $this->assertEquals(0, $value['error'], "->$method() sets the error of the file field");
+        $this->assertEquals(filesize(__FILE__), $value['size'], "->$method() sets the size of the file field");
+    }
+
+    public function getSetValueMethods()
+    {
+        return array(
+            array('setValue'),
+            array('upload'),
+        );
+    }
+
+    public function testSetErrorCode()
+    {
+        $node = $this->createNode('input', '', array('type' => 'file'));
+        $field = new FileFormField($node);
+
+        $field->setErrorCode(UPLOAD_ERR_FORM_SIZE);
+        $value = $field->getValue();
+        $this->assertEquals(UPLOAD_ERR_FORM_SIZE, $value['error'], '->setErrorCode() sets the file input field error code');
+
+        try {
+            $field->setErrorCode('foobar');
+            $this->fail('->setErrorCode() throws a \InvalidArgumentException if the error code is not valid');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->setErrorCode() throws a \InvalidArgumentException if the error code is not valid');
+        }
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FormFieldTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FormFieldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..510f7628f24280ab532d351e2cd4e5f4b854346b
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FormFieldTest.php
@@ -0,0 +1,38 @@
+<?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\DomCrawler\Tests\Field;
+
+use Symfony\Component\DomCrawler\Field\InputFormField;
+
+class FormFieldTest extends FormFieldTestCase
+{
+    public function testGetName()
+    {
+        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $field = new InputFormField($node);
+
+        $this->assertEquals('name', $field->getName(), '->getName() returns the name of the field');
+    }
+
+    public function testGetSetHasValue()
+    {
+        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $field = new InputFormField($node);
+
+        $this->assertEquals('value', $field->getValue(), '->getValue() returns the value of the field');
+
+        $field->setValue('foo');
+        $this->assertEquals('foo', $field->getValue(), '->setValue() sets the value of the field');
+
+        $this->assertTrue($field->hasValue(), '->hasValue() always returns true');
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FormFieldTestCase.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FormFieldTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..26b1b0e244656953c485bb43f7d34cafbc936859
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/FormFieldTestCase.php
@@ -0,0 +1,27 @@
+<?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\DomCrawler\Tests\Field;
+
+class FormFieldTestCase extends \PHPUnit_Framework_TestCase
+{
+    protected function createNode($tag, $value, $attributes = array())
+    {
+        $document = new \DOMDocument();
+        $node = $document->createElement($tag, $value);
+
+        foreach ($attributes as $name => $value) {
+            $node->setAttribute($name, $value);
+        }
+
+        return $node;
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/InputFormFieldTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/InputFormFieldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..193d301de691ea003d9145f6c8226a6618f178c9
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/InputFormFieldTest.php
@@ -0,0 +1,49 @@
+<?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\DomCrawler\Tests\Field;
+
+use Symfony\Component\DomCrawler\Field\InputFormField;
+
+class InputFormFieldTest extends FormFieldTestCase
+{
+    public function testInitialize()
+    {
+        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $field = new InputFormField($node);
+
+        $this->assertEquals('value', $field->getValue(), '->initialize() sets the value of the field to the value attribute value');
+
+        $node = $this->createNode('textarea', '');
+        try {
+            $field = new InputFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is not an input');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input');
+        }
+
+        $node = $this->createNode('input', '', array('type' => 'checkbox'));
+        try {
+            $field = new InputFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is a checkbox');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is a checkbox');
+        }
+
+        $node = $this->createNode('input', '', array('type' => 'file'));
+        try {
+            $field = new InputFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is a file');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is a file');
+        }
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/TextareaFormFieldTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/TextareaFormFieldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a33c44f23018335f7faa16351538a54995db02f6
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/Field/TextareaFormFieldTest.php
@@ -0,0 +1,33 @@
+<?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\DomCrawler\Tests\Field;
+
+use Symfony\Component\DomCrawler\Field\TextareaFormField;
+
+class TextareaFormFieldTest extends FormFieldTestCase
+{
+    public function testInitialize()
+    {
+        $node = $this->createNode('textarea', 'foo bar');
+        $field = new TextareaFormField($node);
+
+        $this->assertEquals('foo bar', $field->getValue(), '->initialize() sets the value of the field to the textarea node value');
+
+        $node = $this->createNode('input', '');
+        try {
+            $field = new TextareaFormField($node);
+            $this->fail('->initialize() throws a \LogicException if the node is not a textarea');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not a textarea');
+        }
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/FormTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/FormTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b0cb8bc7d26f24e282e3f2c03a9605931d29bd22
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/FormTest.php
@@ -0,0 +1,671 @@
+<?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\DomCrawler\Tests;
+
+use Symfony\Component\DomCrawler\Form;
+use Symfony\Component\DomCrawler\FormFieldRegistry;
+use Symfony\Component\DomCrawler\Field;
+
+class FormTest extends \PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        // Ensure that the private helper class FormFieldRegistry is loaded
+        class_exists('Symfony\\Component\\DomCrawler\\Form');
+    }
+
+    public function testConstructorThrowsExceptionIfTheNodeHasNoFormAncestor()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('
+            <html>
+                <input type="submit" />
+                <form>
+                    <input type="foo" />
+                </form>
+                <button />
+            </html>
+        ');
+
+        $nodes = $dom->getElementsByTagName('input');
+
+        try {
+            $form = new Form($nodes->item(0), 'http://example.com');
+            $this->fail('__construct() throws a \\LogicException if the node has no form ancestor');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '__construct() throws a \\LogicException if the node has no form ancestor');
+        }
+
+        try {
+            $form = new Form($nodes->item(1), 'http://example.com');
+            $this->fail('__construct() throws a \\LogicException if the input type is not submit, button, or image');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '__construct() throws a \\LogicException if the input type is not submit, button, or image');
+        }
+
+        $nodes = $dom->getElementsByTagName('button');
+
+        try {
+            $form = new Form($nodes->item(0), 'http://example.com');
+            $this->fail('__construct() throws a \\LogicException if the node has no form ancestor');
+        } catch (\LogicException $e) {
+            $this->assertTrue(true, '__construct() throws a \\LogicException if the node has no form ancestor');
+        }
+    }
+
+    public function testMultiValuedFields()
+    {
+        $form = $this->createForm('<form>
+            <input type="text" name="foo[4]" value="foo" disabled="disabled" />
+            <input type="text" name="foo" value="foo" disabled="disabled" />
+            <input type="text" name="foo[2]" value="foo" disabled="disabled" />
+            <input type="text" name="foo[]" value="foo" disabled="disabled" />
+            <input type="text" name="bar[foo][]" value="foo" disabled="disabled" />
+            <input type="text" name="bar[foo][foobar]" value="foo" disabled="disabled" />
+            <input type="submit" />
+        </form>
+        ');
+
+        $this->assertEquals(
+            array_keys($form->all()),
+            array('foo[2]', 'foo[3]', 'bar[foo][0]', 'bar[foo][foobar]')
+        );
+
+        $this->assertEquals($form->get('foo[2]')->getValue(), 'foo');
+        $this->assertEquals($form->get('foo[3]')->getValue(), 'foo');
+        $this->assertEquals($form->get('bar[foo][0]')->getValue(), 'foo');
+        $this->assertEquals($form->get('bar[foo][foobar]')->getValue(), 'foo');
+
+        $form['foo[2]'] = 'bar';
+        $form['foo[3]'] = 'bar';
+
+        $this->assertEquals($form->get('foo[2]')->getValue(), 'bar');
+        $this->assertEquals($form->get('foo[3]')->getValue(), 'bar');
+
+        $form['bar'] = array('foo' => array('0' => 'bar', 'foobar' => 'foobar'));
+
+        $this->assertEquals($form->get('bar[foo][0]')->getValue(), 'bar');
+        $this->assertEquals($form->get('bar[foo][foobar]')->getValue(), 'foobar');
+
+    }
+
+    /**
+     * @dataProvider provideInitializeValues
+     */
+    public function testConstructor($message, $form, $values)
+    {
+        $form = $this->createForm('<form>'.$form.'</form>');
+        $this->assertEquals(
+            $values,
+            array_map(function ($field) {
+                    $class = get_class($field);
+
+                    return array(substr($class, strrpos($class, '\\') + 1), $field->getValue());
+                },
+                $form->all()
+            ),
+            '->getDefaultValues() '.$message
+        );
+    }
+
+    public function provideInitializeValues()
+    {
+        return array(
+            array(
+                'does not take into account input fields without a name attribute',
+                '<input type="text" value="foo" />
+                 <input type="submit" />',
+                array(),
+            ),
+            array(
+                'takes into account disabled input fields',
+                '<input type="text" name="foo" value="foo" disabled="disabled" />
+                 <input type="submit" />',
+                array('foo' => array('InputFormField', 'foo')),
+            ),
+            array(
+                'appends the submitted button value',
+                '<input type="submit" name="bar" value="bar" />',
+                array('bar' => array('InputFormField', 'bar')),
+            ),
+            array(
+                'appends the submitted button value but not other submit buttons',
+                '<input type="submit" name="bar" value="bar" />
+                 <input type="submit" name="foobar" value="foobar" />',
+                 array('foobar' => array('InputFormField', 'foobar')),
+            ),
+            array(
+                'returns textareas',
+                '<textarea name="foo">foo</textarea>
+                 <input type="submit" />',
+                 array('foo' => array('TextareaFormField', 'foo')),
+            ),
+            array(
+                'returns inputs',
+                '<input type="text" name="foo" value="foo" />
+                 <input type="submit" />',
+                 array('foo' => array('InputFormField', 'foo')),
+            ),
+            array(
+                'returns checkboxes',
+                '<input type="checkbox" name="foo" value="foo" checked="checked" />
+                 <input type="submit" />',
+                 array('foo' => array('ChoiceFormField', 'foo')),
+            ),
+            array(
+                'returns not-checked checkboxes',
+                '<input type="checkbox" name="foo" value="foo" />
+                 <input type="submit" />',
+                 array('foo' => array('ChoiceFormField', false)),
+            ),
+            array(
+                'returns radio buttons',
+                '<input type="radio" name="foo" value="foo" />
+                 <input type="radio" name="foo" value="bar" checked="bar" />
+                 <input type="submit" />',
+                 array('foo' => array('ChoiceFormField', 'bar')),
+            ),
+            array(
+                'returns file inputs',
+                '<input type="file" name="foo" />
+                 <input type="submit" />',
+                 array('foo' => array('FileFormField', array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))),
+            ),
+        );
+    }
+
+    public function testGetFormNode()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><form><input type="submit" /></form></html>');
+
+        $form = new Form($dom->getElementsByTagName('input')->item(0), 'http://example.com');
+
+        $this->assertSame($dom->getElementsByTagName('form')->item(0), $form->getFormNode(), '->getFormNode() returns the form node associated with this form');
+    }
+
+    public function testGetMethod()
+    {
+        $form = $this->createForm('<form><input type="submit" /></form>');
+        $this->assertEquals('GET', $form->getMethod(), '->getMethod() returns get if no method is defined');
+
+        $form = $this->createForm('<form method="post"><input type="submit" /></form>');
+        $this->assertEquals('POST', $form->getMethod(), '->getMethod() returns the method attribute value of the form');
+
+        $form = $this->createForm('<form method="post"><input type="submit" /></form>', 'put');
+        $this->assertEquals('PUT', $form->getMethod(), '->getMethod() returns the method defined in the constructor if provided');
+
+        $form = $this->createForm('<form method="post"><input type="submit" /></form>', 'delete');
+        $this->assertEquals('DELETE', $form->getMethod(), '->getMethod() returns the method defined in the constructor if provided');
+
+        $form = $this->createForm('<form method="post"><input type="submit" /></form>', 'patch');
+        $this->assertEquals('PATCH', $form->getMethod(), '->getMethod() returns the method defined in the constructor if provided');
+    }
+
+    public function testGetSetValue()
+    {
+        $form = $this->createForm('<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>');
+
+        $this->assertEquals('foo', $form['foo']->getValue(), '->offsetGet() returns the value of a form field');
+
+        $form['foo'] = 'bar';
+
+        $this->assertEquals('bar', $form['foo']->getValue(), '->offsetSet() changes the value of a form field');
+
+        try {
+            $form['foobar'] = 'bar';
+            $this->fail('->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
+        }
+
+        try {
+            $form['foobar'];
+            $this->fail('->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
+        }
+    }
+
+    public function testOffsetUnset()
+    {
+        $form = $this->createForm('<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>');
+        unset($form['foo']);
+        $this->assertFalse(isset($form['foo']), '->offsetUnset() removes a field');
+    }
+
+    public function testOffsetExists()
+    {
+        $form = $this->createForm('<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>');
+
+        $this->assertTrue(isset($form['foo']), '->offsetExists() return true if the field exists');
+        $this->assertFalse(isset($form['bar']), '->offsetExists() return false if the field does not exist');
+    }
+
+    public function testGetValues()
+    {
+        $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array('foo[bar]' => 'foo', 'bar' => 'bar'), $form->getValues(), '->getValues() returns all form field values');
+
+        $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include not-checked checkboxes');
+
+        $form = $this->createForm('<form><input type="file" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include file input fields');
+
+        $form = $this->createForm('<form><input type="text" name="foo" value="foo" disabled="disabled" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include disabled fields');
+    }
+
+    public function testSetValues()
+    {
+        $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" checked="checked" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $form->setValues(array('foo' => false, 'bar' => 'foo'));
+        $this->assertEquals(array('bar' => 'foo'), $form->getValues(), '->setValues() sets the values of fields');
+    }
+
+    public function testGetPhpValues()
+    {
+        $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), '->getPhpValues() converts keys with [] to arrays');
+    }
+
+    public function testGetFiles()
+    {
+        $form = $this->createForm('<form><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array(), $form->getFiles(), '->getFiles() returns an empty array if method is get');
+
+        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for POST');
+
+        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'put');
+        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PUT');
+
+        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'delete');
+        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for DELETE');
+
+        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'patch');
+        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PATCH');
+
+        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" disabled="disabled" /><input type="submit" /></form>');
+        $this->assertEquals(array(), $form->getFiles(), '->getFiles() does not include disabled file fields');
+    }
+
+    public function testGetPhpFiles()
+    {
+        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(array('foo' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() converts keys with [] to arrays');
+    }
+
+    /**
+     * @dataProvider provideGetUriValues
+     */
+    public function testGetUri($message, $form, $values, $uri, $method = null)
+    {
+        $form = $this->createForm($form, $method);
+        $form->setValues($values);
+
+        $this->assertEquals('http://example.com'.$uri, $form->getUri(), '->getUri() '.$message);
+    }
+
+    public function testGetBaseUri()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<form method="post" action="foo.php"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+
+        $nodes = $dom->getElementsByTagName('input');
+        $form = new Form($nodes->item($nodes->length - 1), 'http://www.foo.com/');
+        $this->assertEquals('http://www.foo.com/foo.php', $form->getUri());
+    }
+
+    public function testGetUriWithAnchor()
+    {
+        $form = $this->createForm('<form action="#foo"><input type="submit" /></form>', null, 'http://example.com/id/123');
+
+        $this->assertEquals('http://example.com/id/123#foo', $form->getUri());
+    }
+
+    public function testGetUriActionAbsolute()
+    {
+        $formHtml='<form id="login_form" action="https://login.foo.com/login.php?login_attempt=1" method="POST"><input type="text" name="foo" value="foo" /><input type="submit" /></form>';
+
+        $form = $this->createForm($formHtml);
+        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
+
+        $form = $this->createForm($formHtml, null, 'https://login.foo.com');
+        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
+
+        $form = $this->createForm($formHtml, null, 'https://login.foo.com/bar/');
+        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
+
+        // The action URI haven't the same domain Host have an another domain as Host
+        $form = $this->createForm($formHtml, null, 'https://www.foo.com');
+        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
+
+        $form = $this->createForm($formHtml, null, 'https://www.foo.com/bar/');
+        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
+    }
+
+    public function testGetUriAbsolute()
+    {
+        $form = $this->createForm('<form action="foo"><input type="submit" /></form>', null, 'http://localhost/foo/');
+        $this->assertEquals('http://localhost/foo/foo', $form->getUri(), '->getUri() returns absolute URIs');
+
+        $form = $this->createForm('<form action="/foo"><input type="submit" /></form>', null, 'http://localhost/foo/');
+        $this->assertEquals('http://localhost/foo', $form->getUri(), '->getUri() returns absolute URIs');
+    }
+
+    public function testGetUriWithOnlyQueryString()
+    {
+        $form = $this->createForm('<form action="?get=param"><input type="submit" /></form>', null, 'http://localhost/foo/bar');
+        $this->assertEquals('http://localhost/foo/bar?get=param', $form->getUri(), '->getUri() returns absolute URIs only if the host has been defined in the constructor');
+    }
+
+    public function testGetUriWithoutAction()
+    {
+        $form = $this->createForm('<form><input type="submit" /></form>', null, 'http://localhost/foo/bar');
+        $this->assertEquals('http://localhost/foo/bar', $form->getUri(), '->getUri() returns path if no action defined');
+    }
+
+    public function provideGetUriValues()
+    {
+        return array(
+            array(
+                'returns the URI of the form',
+                '<form action="/foo"><input type="submit" /></form>',
+                array(),
+                '/foo'
+            ),
+            array(
+                'appends the form values if the method is get',
+                '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/foo?foo=foo'
+            ),
+            array(
+                'appends the form values and merges the submitted values',
+                '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array('foo' => 'bar'),
+                '/foo?foo=bar'
+            ),
+            array(
+                'does not append values if the method is post',
+                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/foo'
+            ),
+            array(
+                'does not append values if the method is patch',
+                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/foo',
+                'PUT'
+            ),
+            array(
+                'does not append values if the method is delete',
+                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/foo',
+                'DELETE'
+            ),
+            array(
+                'does not append values if the method is put',
+                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/foo',
+                'PATCH'
+            ),
+            array(
+                'appends the form values to an existing query string',
+                '<form action="/foo?bar=bar"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/foo?bar=bar&foo=foo'
+            ),
+            array(
+                'returns an empty URI if the action is empty',
+                '<form><input type="submit" /></form>',
+                array(),
+                '/',
+            ),
+            array(
+                'appends the form values even if the action is empty',
+                '<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/?foo=foo',
+            ),
+            array(
+                'chooses the path if the action attribute value is a sharp (#)',
+                '<form action="#" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
+                array(),
+                '/#',
+            ),
+        );
+    }
+
+    public function testHas()
+    {
+        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+
+        $this->assertFalse($form->has('foo'), '->has() returns false if a field is not in the form');
+        $this->assertTrue($form->has('bar'), '->has() returns true if a field is in the form');
+    }
+
+    public function testRemove()
+    {
+        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $form->remove('bar');
+        $this->assertFalse($form->has('bar'), '->remove() removes a field');
+    }
+
+    public function testGet()
+    {
+        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+
+        $this->assertEquals('Symfony\\Component\\DomCrawler\\Field\\InputFormField', get_class($form->get('bar')), '->get() returns the field object associated with the given name');
+
+        try {
+            $form->get('foo');
+            $this->fail('->get() throws an \InvalidArgumentException if the field does not exist');
+        } catch (\InvalidArgumentException $e) {
+            $this->assertTrue(true, '->get() throws an \InvalidArgumentException if the field does not exist');
+        }
+    }
+
+    public function testAll()
+    {
+        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+
+        $fields = $form->all();
+        $this->assertEquals(1, count($fields), '->all() return an array of form field objects');
+        $this->assertEquals('Symfony\\Component\\DomCrawler\\Field\\InputFormField', get_class($fields['bar']), '->all() return an array of form field objects');
+    }
+
+    public function testSubmitWithoutAFormButton()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('
+            <html>
+                <form>
+                    <input type="foo" />
+                </form>
+            </html>
+        ');
+
+        $nodes = $dom->getElementsByTagName('form');
+        $form = new Form($nodes->item(0), 'http://example.com');
+        $this->assertSame($nodes->item(0), $form->getFormNode(), '->getFormNode() returns the form node associated with this form');
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testFormFieldRegistryAddThrowAnExceptionWhenTheNameIsMalformed()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->add($this->getFormFieldMock('[foo]'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testFormFieldRegistryRemoveThrowAnExceptionWhenTheNameIsMalformed()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->remove('[foo]');
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testFormFieldRegistryGetThrowAnExceptionWhenTheNameIsMalformed()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->get('[foo]');
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testFormFieldRegistryGetThrowAnExceptionWhenTheFieldDoesNotExist()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->get('foo');
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testFormFieldRegistrySetThrowAnExceptionWhenTheNameIsMalformed()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->set('[foo]', null);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testFormFieldRegistrySetThrowAnExceptionWhenTheFieldDoesNotExist()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->set('foo', null);
+    }
+
+    public function testFormFieldRegistryHasReturnsTrueWhenTheFQNExists()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->add($this->getFormFieldMock('foo[bar]'));
+
+        $this->assertTrue($registry->has('foo'));
+        $this->assertTrue($registry->has('foo[bar]'));
+        $this->assertFalse($registry->has('bar'));
+        $this->assertFalse($registry->has('foo[foo]'));
+    }
+
+    public function testFormRegistryFieldsCanBeRemoved()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->add($this->getFormFieldMock('foo'));
+        $registry->remove('foo');
+        $this->assertFalse($registry->has('foo'));
+    }
+
+    public function testFormRegistrySupportsMultivaluedFields()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->add($this->getFormFieldMock('foo[]'));
+        $registry->add($this->getFormFieldMock('foo[]'));
+        $registry->add($this->getFormFieldMock('bar[5]'));
+        $registry->add($this->getFormFieldMock('bar[]'));
+        $registry->add($this->getFormFieldMock('bar[baz]'));
+
+        $this->assertEquals(
+            array('foo[0]', 'foo[1]', 'bar[5]', 'bar[6]', 'bar[baz]'),
+            array_keys($registry->all())
+        );
+    }
+
+    public function testFormRegistrySetValues()
+    {
+        $registry = new FormFieldRegistry();
+        $registry->add($f2 = $this->getFormFieldMock('foo[2]'));
+        $registry->add($f3 = $this->getFormFieldMock('foo[3]'));
+        $registry->add($fbb = $this->getFormFieldMock('foo[bar][baz]'));
+
+        $f2
+            ->expects($this->exactly(2))
+            ->method('setValue')
+            ->with(2)
+        ;
+
+        $f3
+            ->expects($this->exactly(2))
+            ->method('setValue')
+            ->with(3)
+        ;
+
+        $fbb
+            ->expects($this->exactly(2))
+            ->method('setValue')
+            ->with('fbb')
+        ;
+
+        $registry->set('foo[2]', 2);
+        $registry->set('foo[3]', 3);
+        $registry->set('foo[bar][baz]', 'fbb');
+
+        $registry->set('foo', array(
+            2     => 2,
+            3     => 3,
+            'bar' => array(
+                'baz' => 'fbb'
+             )
+        ));
+    }
+
+    protected function getFormFieldMock($name, $value = null)
+    {
+        $field = $this
+            ->getMockBuilder('Symfony\\Component\\DomCrawler\\Field\\FormField')
+            ->setMethods(array('getName', 'getValue', 'setValue', 'initialize'))
+            ->disableOriginalConstructor()
+            ->getMock()
+        ;
+
+        $field
+            ->expects($this->any())
+            ->method('getName')
+            ->will($this->returnValue($name))
+        ;
+
+        $field
+            ->expects($this->any())
+            ->method('getValue')
+            ->will($this->returnValue($value))
+        ;
+
+        return $field;
+    }
+
+    protected function createForm($form, $method = null, $currentUri = null)
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html>'.$form.'</html>');
+
+        $nodes = $dom->getElementsByTagName('input');
+
+        if (null === $currentUri) {
+            $currentUri = 'http://example.com/';
+        }
+
+        return new Form($nodes->item($nodes->length - 1), $currentUri, $method);
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/LinkTest.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/LinkTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d40179a53b5bc06c34fca94fa97d738b0239c40
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/LinkTest.php
@@ -0,0 +1,104 @@
+<?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\DomCrawler\Tests;
+
+use Symfony\Component\DomCrawler\Link;
+
+class LinkTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \LogicException
+     */
+    public function testConstructorWithANonATag()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><div><div></html>');
+
+        new Link($dom->getElementsByTagName('div')->item(0), 'http://www.example.com/');
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testConstructorWithAnInvalidCurrentUri()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><a href="/foo">foo</a></html>');
+
+        new Link($dom->getElementsByTagName('a')->item(0), 'example.com');
+    }
+
+    public function testGetNode()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><a href="/foo">foo</a></html>');
+
+        $node = $dom->getElementsByTagName('a')->item(0);
+        $link = new Link($node, 'http://example.com/');
+
+        $this->assertEquals($node, $link->getNode(), '->getNode() returns the node associated with the link');
+    }
+
+    public function testGetMethod()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><a href="/foo">foo</a></html>');
+
+        $node = $dom->getElementsByTagName('a')->item(0);
+        $link = new Link($node, 'http://example.com/');
+
+        $this->assertEquals('GET', $link->getMethod(), '->getMethod() returns the method of the link');
+
+        $link = new Link($node, 'http://example.com/', 'post');
+        $this->assertEquals('POST', $link->getMethod(), '->getMethod() returns the method of the link');
+    }
+
+    /**
+     * @dataProvider getGetUriTests
+     */
+    public function testGetUri($url, $currentUri, $expected)
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML(sprintf('<html><a href="%s">foo</a></html>', $url));
+        $link = new Link($dom->getElementsByTagName('a')->item(0), $currentUri);
+
+        $this->assertEquals($expected, $link->getUri());
+    }
+
+    public function getGetUriTests()
+    {
+        return array(
+            array('/foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
+            array('/foo', 'http://localhost/bar/foo', 'http://localhost/foo'),
+            array('
+            /foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
+            array('/foo
+            ', 'http://localhost/bar/foo', 'http://localhost/foo'),
+
+            array('foo', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo'),
+            array('foo', 'http://localhost/bar/foo', 'http://localhost/bar/foo'),
+
+            array('', 'http://localhost/bar/', 'http://localhost/bar/'),
+            array('#', 'http://localhost/bar/', 'http://localhost/bar/#'),
+            array('#bar', 'http://localhost/bar/#foo', 'http://localhost/bar/#bar'),
+            array('?a=b', 'http://localhost/bar/', 'http://localhost/bar/?a=b'),
+
+            array('http://login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
+
+            array('?foo=2', 'http://localhost?foo=1', 'http://localhost?foo=2'),
+            array('?foo=2', 'http://localhost/?foo=1', 'http://localhost/?foo=2'),
+            array('?foo=2', 'http://localhost/bar?foo=1', 'http://localhost/bar?foo=2'),
+            array('?foo=2', 'http://localhost/bar/?foo=1', 'http://localhost/bar/?foo=2'),
+            array('?bar=2', 'http://localhost?foo=1', 'http://localhost?bar=2'),
+        );
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/bootstrap.php b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..78425f484a3c19b5136ac5f4102abd10a83bfcde
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/Tests/bootstrap.php
@@ -0,0 +1,22 @@
+<?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.
+ */
+
+spl_autoload_register(function ($class) {
+    if (0 === strpos(ltrim($class, '/'), 'Symfony\Component\DomCrawler')) {
+        if (file_exists($file = __DIR__.'/../'.substr(str_replace('\\', '/', $class), strlen('Symfony\Component\DomCrawler')).'.php')) {
+            require_once $file;
+        }
+    }
+});
+
+if (file_exists($loader = __DIR__.'/../vendor/autoload.php')) {
+    require_once $loader;
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/composer.json b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..2dfd795dcde1671b79fe70ffa0b4f636fbe36c47
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/composer.json
@@ -0,0 +1,37 @@
+{
+    "name": "symfony/dom-crawler",
+    "type": "library",
+    "description": "Symfony DomCrawler Component",
+    "keywords": [],
+    "homepage": "http://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Fabien Potencier",
+            "email": "fabien@symfony.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "http://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.3"
+    },
+    "require-dev": {
+        "symfony/css-selector": "2.1.*"
+    },
+    "suggest": {
+        "symfony/css-selector": "self.version"
+    },
+    "autoload": {
+        "psr-0": { "Symfony\\Component\\DomCrawler": "" }
+    },
+    "target-dir": "Symfony/Component/DomCrawler",
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.1-dev"
+        }
+    }
+}
diff --git a/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/phpunit.xml.dist b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..1ee868ab54f19eb6874b868c03ab4fc43ea5a54b
--- /dev/null
+++ b/core/vendor/symfony/dom-crawler/Symfony/Component/DomCrawler/phpunit.xml.dist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+         bootstrap="Tests/bootstrap.php"
+>
+    <testsuites>
+        <testsuite name="Symfony DomCrawler Component Test Suite">
+            <directory>./Tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./</directory>
+            <exclude>
+                <directory>./Resources</directory>
+                <directory>./Tests</directory>
+                <directory>./vendor</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/core/vendor/symfony/dom-crawler/Tests/CrawlerTest.php b/core/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
deleted file mode 100755
index 3c281eb479b52333e4226315723cdb556b78630c..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
+++ /dev/null
@@ -1,1079 +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\DomCrawler\Tests;
-
-use Symfony\Component\CssSelector\CssSelector;
-use Symfony\Component\DomCrawler\Crawler;
-
-class CrawlerTest extends \PHPUnit_Framework_TestCase
-{
-    public function testConstructor()
-    {
-        $crawler = new Crawler();
-        $this->assertCount(0, $crawler, '__construct() returns an empty crawler');
-
-        $crawler = new Crawler(new \DOMNode());
-        $this->assertCount(1, $crawler, '__construct() takes a node as a first argument');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::add
-     */
-    public function testAdd()
-    {
-        $crawler = new Crawler();
-        $crawler->add($this->createDomDocument());
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from a \DOMDocument');
-
-        $crawler = new Crawler();
-        $crawler->add($this->createNodeList());
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from a \DOMNodeList');
-
-        foreach ($this->createNodeList() as $node) {
-            $list[] = $node;
-        }
-        $crawler = new Crawler();
-        $crawler->add($list);
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from an array of nodes');
-
-        $crawler = new Crawler();
-        $crawler->add($this->createNodeList()->item(0));
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from a \DOMElement');
-
-        $crawler = new Crawler();
-        $crawler->add('<html><body>Foo</body></html>');
-        $this->assertEquals('Foo', $crawler->filterXPath('//body')->text(), '->add() adds nodes from a string');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testAddInvalidNode()
-    {
-        $crawler = new Crawler();
-        $crawler->add(1);
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
-     */
-    public function testAddHtmlContent()
-    {
-        $crawler = new Crawler();
-        $crawler->addHtmlContent('<html><div class="foo"></html>', 'UTF-8');
-
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addHtmlContent() adds nodes from an HTML string');
-
-        $crawler->addHtmlContent('<html><head><base href="http://symfony.com"></head><a href="/contact"></a></html>', 'UTF-8');
-
-        $this->assertEquals('http://symfony.com', $crawler->filterXPath('//base')->attr('href'), '->addHtmlContent() adds nodes from an HTML string');
-        $this->assertEquals('http://symfony.com/contact', $crawler->filterXPath('//a')->link()->getUri(), '->addHtmlContent() adds nodes from an HTML string');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
-     */
-    public function testAddHtmlContentCharset()
-    {
-        $crawler = new Crawler();
-        $crawler->addHtmlContent('<html><div class="foo">Tiáº¿ng Viá»‡t</html>', 'UTF-8');
-
-        $this->assertEquals('Tiáº¿ng Viá»‡t', $crawler->filterXPath('//div')->text());
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
-     */
-    public function testAddHtmlContentInvalidBaseTag()
-    {
-        $crawler = new Crawler(null, 'http://symfony.com');
-
-        $crawler->addHtmlContent('<html><head><base target="_top"></head><a href="/contact"></a></html>', 'UTF-8');
-
-        $this->assertEquals('http://symfony.com/contact', current($crawler->filterXPath('//a')->links())->getUri(), '->addHtmlContent() correctly handles a non-existent base tag href attribute');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
-     */
-    public function testAddHtmlContentUnsupportedCharset()
-    {
-        $crawler = new Crawler();
-        $crawler->addHtmlContent(file_get_contents(__DIR__.'/Fixtures/windows-1250.html'), 'Windows-1250');
-
-        $this->assertEquals('Å½Å¥Ä�Ã½Å¯', $crawler->filterXPath('//p')->text());
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
-     */
-    public function testAddHtmlContentCharsetGbk()
-    {
-        $crawler = new Crawler();
-        //gbk encode of <html><p>ä¸­æ–‡</p></html>
-        $crawler->addHtmlContent(base64_decode('PGh0bWw+PHA+1tDOxDwvcD48L2h0bWw+'), 'gbk');
-
-        $this->assertEquals('ä¸­æ–‡', $crawler->filterXPath('//p')->text());
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
-     */
-    public function testAddHtmlContentWithErrors()
-    {
-        $internalErrors = libxml_use_internal_errors(true);
-
-        $crawler = new Crawler();
-        $crawler->addHtmlContent(<<<EOF
-<!DOCTYPE html>
-<html>
-    <head>
-    </head>
-    <body>
-        <nav><a href="#"><a href="#"></nav>
-    </body>
-</html>
-EOF
-        , 'UTF-8');
-
-        $errors = libxml_get_errors();
-        $this->assertCount(1, $errors);
-        $this->assertEquals("Tag nav invalid\n", $errors[0]->message);
-
-        libxml_clear_errors();
-        libxml_use_internal_errors($internalErrors);
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addXmlContent
-     */
-    public function testAddXmlContent()
-    {
-        $crawler = new Crawler();
-        $crawler->addXmlContent('<html><div class="foo"></div></html>', 'UTF-8');
-
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addXmlContent() adds nodes from an XML string');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addXmlContent
-     */
-    public function testAddXmlContentCharset()
-    {
-        $crawler = new Crawler();
-        $crawler->addXmlContent('<html><div class="foo">Tiáº¿ng Viá»‡t</div></html>', 'UTF-8');
-
-        $this->assertEquals('Tiáº¿ng Viá»‡t', $crawler->filterXPath('//div')->text());
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addXmlContent
-     */
-    public function testAddXmlContentWithErrors()
-    {
-        $internalErrors = libxml_use_internal_errors(true);
-
-        $crawler = new Crawler();
-        $crawler->addXmlContent(<<<EOF
-<!DOCTYPE html>
-<html>
-    <head>
-    </head>
-    <body>
-        <nav><a href="#"><a href="#"></nav>
-    </body>
-</html>
-EOF
-        , 'UTF-8');
-
-        $this->assertTrue(count(libxml_get_errors()) > 1);
-
-        libxml_clear_errors();
-        libxml_use_internal_errors($internalErrors);
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addContent
-     */
-    public function testAddContent()
-    {
-        $crawler = new Crawler();
-        $crawler->addContent('<html><div class="foo"></html>', 'text/html; charset=UTF-8');
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an HTML string');
-
-        $crawler = new Crawler();
-        $crawler->addContent('<html><div class="foo"></html>', 'text/html; charset=UTF-8; dir=RTL');
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an HTML string with extended content type');
-
-        $crawler = new Crawler();
-        $crawler->addContent('<html><div class="foo"></html>');
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() uses text/html as the default type');
-
-        $crawler = new Crawler();
-        $crawler->addContent('<html><div class="foo"></div></html>', 'text/xml; charset=UTF-8');
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an XML string');
-
-        $crawler = new Crawler();
-        $crawler->addContent('<html><div class="foo"></div></html>', 'text/xml');
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addContent() adds nodes from an XML string');
-
-        $crawler = new Crawler();
-        $crawler->addContent('foo bar', 'text/plain');
-        $this->assertCount(0, $crawler, '->addContent() does nothing if the type is not (x|ht)ml');
-
-        $crawler = new Crawler();
-        $crawler->addContent('<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><span>ä¸­æ–‡</span></html>');
-        $this->assertEquals('ä¸­æ–‡', $crawler->filterXPath('//span')->text(), '->addContent() guess wrong charset');
-
-        $crawler = new Crawler();
-        $crawler->addContent(mb_convert_encoding('<html><head><meta charset="Shift_JIS"></head><body>æ—¥æœ¬èªž</body></html>', 'SJIS', 'UTF-8'));
-        $this->assertEquals('æ—¥æœ¬èªž', $crawler->filterXPath('//body')->text(), '->addContent() can recognize "Shift_JIS" in html5 meta charset tag');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addDocument
-     */
-    public function testAddDocument()
-    {
-        $crawler = new Crawler();
-        $crawler->addDocument($this->createDomDocument());
-
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addDocument() adds nodes from a \DOMDocument');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addNodeList
-     */
-    public function testAddNodeList()
-    {
-        $crawler = new Crawler();
-        $crawler->addNodeList($this->createNodeList());
-
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addNodeList() adds nodes from a \DOMNodeList');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addNodes
-     */
-    public function testAddNodes()
-    {
-        foreach ($this->createNodeList() as $node) {
-            $list[] = $node;
-        }
-
-        $crawler = new Crawler();
-        $crawler->addNodes($list);
-
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addNodes() adds nodes from an array of nodes');
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::addNode
-     */
-    public function testAddNode()
-    {
-        $crawler = new Crawler();
-        $crawler->addNode($this->createNodeList()->item(0));
-
-        $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addNode() adds nodes from a \DOMElement');
-    }
-
-    public function testClear()
-    {
-        $crawler = new Crawler(new \DOMNode());
-        $crawler->clear();
-        $this->assertCount(0, $crawler, '->clear() removes all the nodes from the crawler');
-    }
-
-    public function testEq()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//li');
-        $this->assertNotSame($crawler, $crawler->eq(0), '->eq() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->eq() returns a new instance of a crawler');
-
-        $this->assertEquals('Two', $crawler->eq(1)->text(), '->eq() returns the nth node of the list');
-        $this->assertCount(0, $crawler->eq(100), '->eq() returns an empty crawler if the nth node does not exist');
-    }
-
-    public function testEach()
-    {
-        $data = $this->createTestCrawler()->filterXPath('//ul[1]/li')->each(function ($node, $i) {
-            return $i.'-'.$node->text();
-        });
-
-        $this->assertEquals(array('0-One', '1-Two', '2-Three'), $data, '->each() executes an anonymous function on each node of the list');
-    }
-
-    public function testSlice()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
-        $this->assertNotSame($crawler->slice(), $crawler, '->slice() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler->slice(), '->slice() returns a new instance of a crawler');
-
-        $this->assertCount(3, $crawler->slice(), '->slice() does not slice the nodes in the list if any param is entered');
-        $this->assertCount(1, $crawler->slice(1, 1), '->slice() slices the nodes in the list');
-    }
-
-    public function testReduce()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
-        $nodes = $crawler->reduce(function ($node, $i) {
-            return $i !== 1;
-        });
-        $this->assertNotSame($nodes, $crawler, '->reduce() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $nodes, '->reduce() returns a new instance of a crawler');
-
-        $this->assertCount(2, $nodes, '->reduce() filters the nodes in the list');
-    }
-
-    public function testAttr()
-    {
-        $this->assertEquals('first', $this->createTestCrawler()->filterXPath('//li')->attr('class'), '->attr() returns the attribute of the first element of the node list');
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->attr('class');
-            $this->fail('->attr() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->attr() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testMissingAttrValueIsNull()
-    {
-        $crawler = new Crawler();
-        $crawler->addContent('<html><div non-empty-attr="sample value" empty-attr=""></div></html>', 'text/html; charset=UTF-8');
-        $div = $crawler->filterXPath('//div');
-
-        $this->assertEquals('sample value', $div->attr('non-empty-attr'), '->attr() reads non-empty attributes correctly');
-        $this->assertEquals('', $div->attr('empty-attr'), '->attr() reads empty attributes correctly');
-        $this->assertNull($div->attr('missing-attr'), '->attr() reads missing attributes correctly');
-    }
-
-    public function testNodeName()
-    {
-        $this->assertEquals('li', $this->createTestCrawler()->filterXPath('//li')->nodeName(), '->nodeName() returns the node name of the first element of the node list');
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->nodeName();
-            $this->fail('->nodeName() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->nodeName() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testText()
-    {
-        $this->assertEquals('One', $this->createTestCrawler()->filterXPath('//li')->text(), '->text() returns the node value of the first element of the node list');
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->text();
-            $this->fail('->text() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->text() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testHtml()
-    {
-        $this->assertEquals('<img alt="Bar">', $this->createTestCrawler()->filterXPath('//a[5]')->html());
-        $this->assertEquals('<input type="text" value="TextValue" name="TextName"><input type="submit" value="FooValue" name="FooName" id="FooId"><input type="button" value="BarValue" name="BarName" id="BarId"><button value="ButtonValue" name="ButtonName" id="ButtonId"></button>', trim($this->createTestCrawler()->filterXPath('//form[@id="FooFormId"]')->html()));
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->html();
-            $this->fail('->html() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->html() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testExtract()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
-
-        $this->assertEquals(array('One', 'Two', 'Three'), $crawler->extract('_text'), '->extract() returns an array of extracted data from the node list');
-        $this->assertEquals(array(array('One', 'first'), array('Two', ''), array('Three', '')), $crawler->extract(array('_text', 'class')), '->extract() returns an array of extracted data from the node list');
-
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->extract('_text'), '->extract() returns an empty array if the node list is empty');
-    }
-
-    public function testFilterXpathComplexQueries()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//body');
-
-        $this->assertCount(0, $crawler->filterXPath('/input'));
-        $this->assertCount(0, $crawler->filterXPath('/body'));
-        $this->assertCount(1, $crawler->filterXPath('/_root/body'));
-        $this->assertCount(1, $crawler->filterXPath('./body'));
-        $this->assertCount(1, $crawler->filterXPath('.//body'));
-        $this->assertCount(5, $crawler->filterXPath('.//input'));
-        $this->assertCount(4, $crawler->filterXPath('//form')->filterXPath('//button | //input'));
-        $this->assertCount(1, $crawler->filterXPath('body'));
-        $this->assertCount(6, $crawler->filterXPath('//button | //input'));
-        $this->assertCount(1, $crawler->filterXPath('//body'));
-        $this->assertCount(1, $crawler->filterXPath('descendant-or-self::body'));
-        $this->assertCount(1, $crawler->filterXPath('//div[@id="parent"]')->filterXPath('./div'), 'A child selection finds only the current div');
-        $this->assertCount(3, $crawler->filterXPath('//div[@id="parent"]')->filterXPath('descendant::div'), 'A descendant selector matches the current div and its child');
-        $this->assertCount(3, $crawler->filterXPath('//div[@id="parent"]')->filterXPath('//div'), 'A descendant selector matches the current div and its child');
-        $this->assertCount(5, $crawler->filterXPath('(//a | //div)//img'));
-        $this->assertCount(7, $crawler->filterXPath('((//a | //div)//img | //ul)'));
-        $this->assertCount(7, $crawler->filterXPath('( ( //a | //div )//img | //ul )'));
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::filterXPath
-     */
-    public function testFilterXPath()
-    {
-        $crawler = $this->createTestCrawler();
-        $this->assertNotSame($crawler, $crawler->filterXPath('//li'), '->filterXPath() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->filterXPath() returns a new instance of a crawler');
-
-        $crawler = $this->createTestCrawler()->filterXPath('//ul');
-        $this->assertCount(6, $crawler->filterXPath('//li'), '->filterXPath() filters the node list with the XPath expression');
-
-        $crawler = $this->createTestCrawler();
-        $this->assertCount(3, $crawler->filterXPath('//body')->filterXPath('//button')->parents(), '->filterXpath() preserves parents when chained');
-    }
-
-    public function testFilterXPathWithDefaultNamespace()
-    {
-        $crawler = $this->createTestXmlCrawler()->filterXPath('//default:entry/default:id');
-        $this->assertCount(1, $crawler, '->filterXPath() automatically registers a namespace');
-        $this->assertSame('tag:youtube.com,2008:video:kgZRZmEc9j4', $crawler->text());
-    }
-
-    public function testFilterXPathWithCustomDefaultNamespace()
-    {
-        $crawler = $this->createTestXmlCrawler();
-        $crawler->setDefaultNamespacePrefix('x');
-        $crawler = $crawler->filterXPath('//x:entry/x:id');
-
-        $this->assertCount(1, $crawler, '->filterXPath() lets to override the default namespace prefix');
-        $this->assertSame('tag:youtube.com,2008:video:kgZRZmEc9j4', $crawler->text());
-    }
-
-    public function testFilterXPathWithNamespace()
-    {
-        $crawler = $this->createTestXmlCrawler()->filterXPath('//yt:accessControl');
-        $this->assertCount(2, $crawler, '->filterXPath() automatically registers a namespace');
-    }
-
-    public function testFilterXPathWithMultipleNamespaces()
-    {
-        $crawler = $this->createTestXmlCrawler()->filterXPath('//media:group/yt:aspectRatio');
-        $this->assertCount(1, $crawler, '->filterXPath() automatically registers multiple namespaces');
-        $this->assertSame('widescreen', $crawler->text());
-    }
-
-    public function testFilterXPathWithManuallyRegisteredNamespace()
-    {
-        $crawler = $this->createTestXmlCrawler();
-        $crawler->registerNamespace('m', 'http://search.yahoo.com/mrss/');
-
-        $crawler = $crawler->filterXPath('//m:group/yt:aspectRatio');
-        $this->assertCount(1, $crawler, '->filterXPath() uses manually registered namespace');
-        $this->assertSame('widescreen', $crawler->text());
-    }
-
-    public function testFilterXPathWithAnUrl()
-    {
-        $crawler = $this->createTestXmlCrawler();
-
-        $crawler = $crawler->filterXPath('//media:category[@scheme="http://gdata.youtube.com/schemas/2007/categories.cat"]');
-        $this->assertCount(1, $crawler);
-        $this->assertSame('Music', $crawler->text());
-    }
-
-    public function testFilterXPathWithFakeRoot()
-    {
-        $crawler = $this->createTestCrawler();
-        $this->assertCount(0, $crawler->filterXPath('.'), '->filterXPath() returns an empty result if the XPath references the fake root node');
-        $this->assertCount(0, $crawler->filterXPath('/_root'), '->filterXPath() returns an empty result if the XPath references the fake root node');
-        $this->assertCount(0, $crawler->filterXPath('self::*'), '->filterXPath() returns an empty result if the XPath references the fake root node');
-        $this->assertCount(0, $crawler->filterXPath('self::_root'), '->filterXPath() returns an empty result if the XPath references the fake root node');
-    }
-
-    public function testFilterXPathWithAncestorAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//form');
-
-        $this->assertCount(0, $crawler->filterXPath('ancestor::*'), 'The fake root node has no ancestor nodes');
-    }
-
-    public function testFilterXPathWithAncestorOrSelfAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//form');
-
-        $this->assertCount(0, $crawler->filterXPath('ancestor-or-self::*'), 'The fake root node has no ancestor nodes');
-    }
-
-    public function testFilterXPathWithAttributeAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//form');
-
-        $this->assertCount(0, $crawler->filterXPath('attribute::*'), 'The fake root node has no attribute nodes');
-    }
-
-    public function testFilterXPathWithAttributeAxisAfterElementAxis()
-    {
-        $this->assertCount(3, $this->createTestCrawler()->filterXPath('//form/button/attribute::*'), '->filterXPath() handles attribute axes properly when they are preceded by an element filtering axis');
-    }
-
-    public function testFilterXPathWithChildAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//div[@id="parent"]');
-
-        $this->assertCount(1, $crawler->filterXPath('child::div'), 'A child selection finds only the current div');
-    }
-
-    public function testFilterXPathWithFollowingAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//a');
-
-        $this->assertCount(0, $crawler->filterXPath('following::div'), 'The fake root node has no following nodes');
-    }
-
-    public function testFilterXPathWithFollowingSiblingAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//a');
-
-        $this->assertCount(0, $crawler->filterXPath('following-sibling::div'), 'The fake root node has no following nodes');
-    }
-
-    public function testFilterXPathWithNamespaceAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//button');
-
-        $this->assertCount(0, $crawler->filterXPath('namespace::*'), 'The fake root node has no namespace nodes');
-    }
-
-    public function testFilterXPathWithNamespaceAxisAfterElementAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//div[@id="parent"]/namespace::*');
-
-        $this->assertCount(0, $crawler->filterXPath('namespace::*'), 'Namespace axes cannot be requested');
-    }
-
-    public function testFilterXPathWithParentAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//button');
-
-        $this->assertCount(0, $crawler->filterXPath('parent::*'), 'The fake root node has no parent nodes');
-    }
-
-    public function testFilterXPathWithPrecedingAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//form');
-
-        $this->assertCount(0, $crawler->filterXPath('preceding::*'), 'The fake root node has no preceding nodes');
-    }
-
-    public function testFilterXPathWithPrecedingSiblingAxis()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//form');
-
-        $this->assertCount(0, $crawler->filterXPath('preceding-sibling::*'), 'The fake root node has no preceding nodes');
-    }
-
-    public function testFilterXPathWithSelfAxes()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//a');
-
-        $this->assertCount(0, $crawler->filterXPath('self::a'), 'The fake root node has no "real" element name');
-        $this->assertCount(0, $crawler->filterXPath('self::a/img'), 'The fake root node has no "real" element name');
-        $this->assertCount(9, $crawler->filterXPath('self::*/a'));
-    }
-
-    /**
-     * @covers Symfony\Component\DomCrawler\Crawler::filter
-     */
-    public function testFilter()
-    {
-        $crawler = $this->createTestCrawler();
-        $this->assertNotSame($crawler, $crawler->filter('li'), '->filter() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->filter() returns a new instance of a crawler');
-
-        $crawler = $this->createTestCrawler()->filter('ul');
-
-        $this->assertCount(6, $crawler->filter('li'), '->filter() filters the node list with the CSS selector');
-    }
-
-    public function testFilterWithDefaultNamespace()
-    {
-        $crawler = $this->createTestXmlCrawler()->filter('default|entry default|id');
-        $this->assertCount(1, $crawler, '->filter() automatically registers namespaces');
-        $this->assertSame('tag:youtube.com,2008:video:kgZRZmEc9j4', $crawler->text());
-    }
-
-    public function testFilterWithNamespace()
-    {
-        CssSelector::disableHtmlExtension();
-
-        $crawler = $this->createTestXmlCrawler()->filter('yt|accessControl');
-        $this->assertCount(2, $crawler, '->filter() automatically registers namespaces');
-    }
-
-    public function testFilterWithMultipleNamespaces()
-    {
-        CssSelector::disableHtmlExtension();
-
-        $crawler = $this->createTestXmlCrawler()->filter('media|group yt|aspectRatio');
-        $this->assertCount(1, $crawler, '->filter() automatically registers namespaces');
-        $this->assertSame('widescreen', $crawler->text());
-    }
-
-    public function testFilterWithDefaultNamespaceOnly()
-    {
-        $crawler = new Crawler('<?xml version="1.0" encoding="UTF-8"?>
-            <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-                <url>
-                    <loc>http://localhost/foo</loc>
-                    <changefreq>weekly</changefreq>
-                    <priority>0.5</priority>
-                    <lastmod>2012-11-16</lastmod>
-               </url>
-               <url>
-                    <loc>http://localhost/bar</loc>
-                    <changefreq>weekly</changefreq>
-                    <priority>0.5</priority>
-                    <lastmod>2012-11-16</lastmod>
-                </url>
-            </urlset>
-        ');
-
-        $this->assertEquals(2, $crawler->filter('url')->count());
-    }
-
-    public function testSelectLink()
-    {
-        $crawler = $this->createTestCrawler();
-        $this->assertNotSame($crawler, $crawler->selectLink('Foo'), '->selectLink() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->selectLink() returns a new instance of a crawler');
-
-        $this->assertCount(1, $crawler->selectLink('Fabien\'s Foo'), '->selectLink() selects links by the node values');
-        $this->assertCount(1, $crawler->selectLink('Fabien\'s Bar'), '->selectLink() selects links by the alt attribute of a clickable image');
-
-        $this->assertCount(2, $crawler->selectLink('Fabien"s Foo'), '->selectLink() selects links by the node values');
-        $this->assertCount(2, $crawler->selectLink('Fabien"s Bar'), '->selectLink() selects links by the alt attribute of a clickable image');
-
-        $this->assertCount(1, $crawler->selectLink('\' Fabien"s Foo'), '->selectLink() selects links by the node values');
-        $this->assertCount(1, $crawler->selectLink('\' Fabien"s Bar'), '->selectLink() selects links by the alt attribute of a clickable image');
-
-        $this->assertCount(4, $crawler->selectLink('Foo'), '->selectLink() selects links by the node values');
-        $this->assertCount(4, $crawler->selectLink('Bar'), '->selectLink() selects links by the node values');
-    }
-
-    public function testSelectButton()
-    {
-        $crawler = $this->createTestCrawler();
-        $this->assertNotSame($crawler, $crawler->selectButton('FooValue'), '->selectButton() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->selectButton() returns a new instance of a crawler');
-
-        $this->assertEquals(1, $crawler->selectButton('FooValue')->count(), '->selectButton() selects buttons');
-        $this->assertEquals(1, $crawler->selectButton('FooName')->count(), '->selectButton() selects buttons');
-        $this->assertEquals(1, $crawler->selectButton('FooId')->count(), '->selectButton() selects buttons');
-
-        $this->assertEquals(1, $crawler->selectButton('BarValue')->count(), '->selectButton() selects buttons');
-        $this->assertEquals(1, $crawler->selectButton('BarName')->count(), '->selectButton() selects buttons');
-        $this->assertEquals(1, $crawler->selectButton('BarId')->count(), '->selectButton() selects buttons');
-
-        $this->assertEquals(1, $crawler->selectButton('FooBarValue')->count(), '->selectButton() selects buttons with form attribute too');
-        $this->assertEquals(1, $crawler->selectButton('FooBarName')->count(), '->selectButton() selects buttons with form attribute too');
-    }
-
-    public function testSelectButtonWithSingleQuotesInNameAttribute()
-    {
-        $html = <<<HTML
-<!DOCTYPE html>
-<html lang="en">
-<body>
-    <div id="action">
-        <a href="/index.php?r=site/login">Login</a>
-    </div>
-    <form id="login-form" action="/index.php?r=site/login" method="post">
-        <button type="submit" name="Click 'Here'">Submit</button>
-    </form>
-</body>
-</html>
-HTML;
-
-        $crawler = new Crawler($html);
-
-        $this->assertCount(1, $crawler->selectButton('Click \'Here\''));
-    }
-
-    public function testSelectButtonWithDoubleQuotesInNameAttribute()
-    {
-        $html = <<<HTML
-<!DOCTYPE html>
-<html lang="en">
-<body>
-    <div id="action">
-        <a href="/index.php?r=site/login">Login</a>
-    </div>
-    <form id="login-form" action="/index.php?r=site/login" method="post">
-        <button type="submit" name='Click "Here"'>Submit</button>
-    </form>
-</body>
-</html>
-HTML;
-
-        $crawler = new Crawler($html);
-
-        $this->assertCount(1, $crawler->selectButton('Click "Here"'));
-    }
-
-    public function testLink()
-    {
-        $crawler = $this->createTestCrawler('http://example.com/bar/')->selectLink('Foo');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Link', $crawler->link(), '->link() returns a Link instance');
-
-        $this->assertEquals('POST', $crawler->link('post')->getMethod(), '->link() takes a method as its argument');
-
-        $crawler = $this->createTestCrawler('http://example.com/bar')->selectLink('GetLink');
-        $this->assertEquals('http://example.com/bar?get=param', $crawler->link()->getUri(), '->link() returns a Link instance');
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->link();
-            $this->fail('->link() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->link() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testSelectLinkAndLinkFiltered()
-    {
-        $html = <<<HTML
-<!DOCTYPE html>
-<html lang="en">
-<body>
-    <div id="action">
-        <a href="/index.php?r=site/login">Login</a>
-    </div>
-    <form id="login-form" action="/index.php?r=site/login" method="post">
-        <button type="submit">Submit</button>
-    </form>
-</body>
-</html>
-HTML;
-
-        $crawler = new Crawler($html);
-        $filtered = $crawler->filterXPath("descendant-or-self::*[@id = 'login-form']");
-
-        $this->assertCount(0, $filtered->selectLink('Login'));
-        $this->assertCount(1, $filtered->selectButton('Submit'));
-
-        $filtered = $crawler->filterXPath("descendant-or-self::*[@id = 'action']");
-
-        $this->assertCount(1, $filtered->selectLink('Login'));
-        $this->assertCount(0, $filtered->selectButton('Submit'));
-
-        $this->assertCount(1, $crawler->selectLink('Login')->selectLink('Login'));
-        $this->assertCount(1, $crawler->selectButton('Submit')->selectButton('Submit'));
-    }
-
-    public function testChaining()
-    {
-        $crawler = new Crawler('<div name="a"><div name="b"><div name="c"></div></div></div>');
-
-        $this->assertEquals('a', $crawler->filterXPath('//div')->filterXPath('div')->filterXPath('div')->attr('name'));
-    }
-
-    public function testLinks()
-    {
-        $crawler = $this->createTestCrawler('http://example.com/bar/')->selectLink('Foo');
-        $this->assertInternalType('array', $crawler->links(), '->links() returns an array');
-
-        $this->assertCount(4, $crawler->links(), '->links() returns an array');
-        $links = $crawler->links();
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Link', $links[0], '->links() returns an array of Link instances');
-
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
-    }
-
-    public function testForm()
-    {
-        $testCrawler = $this->createTestCrawler('http://example.com/bar/');
-        $crawler = $testCrawler->selectButton('FooValue');
-        $crawler2 = $testCrawler->selectButton('FooBarValue');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Form', $crawler->form(), '->form() returns a Form instance');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Form', $crawler2->form(), '->form() returns a Form instance');
-
-        $this->assertEquals($crawler->form()->getFormNode()->getAttribute('id'), $crawler2->form()->getFormNode()->getAttribute('id'), '->form() works on elements with form attribute');
-
-        $this->assertEquals(array('FooName' => 'FooBar', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler->form(array('FooName' => 'FooBar'))->getValues(), '->form() takes an array of values to submit as its first argument');
-        $this->assertEquals(array('FooName' => 'FooValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler->form()->getValues(), '->getValues() returns correct form values');
-        $this->assertEquals(array('FooBarName' => 'FooBarValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler2->form()->getValues(), '->getValues() returns correct form values');
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->form();
-            $this->fail('->form() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->form() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testLast()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
-        $this->assertNotSame($crawler, $crawler->last(), '->last() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->last() returns a new instance of a crawler');
-
-        $this->assertEquals('Three', $crawler->last()->text());
-    }
-
-    public function testFirst()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//li');
-        $this->assertNotSame($crawler, $crawler->first(), '->first() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->first() returns a new instance of a crawler');
-
-        $this->assertEquals('One', $crawler->first()->text());
-    }
-
-    public function testSiblings()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//li')->eq(1);
-        $this->assertNotSame($crawler, $crawler->siblings(), '->siblings() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->siblings() returns a new instance of a crawler');
-
-        $nodes = $crawler->siblings();
-        $this->assertEquals(2, $nodes->count());
-        $this->assertEquals('One', $nodes->eq(0)->text());
-        $this->assertEquals('Three', $nodes->eq(1)->text());
-
-        $nodes = $this->createTestCrawler()->filterXPath('//li')->eq(0)->siblings();
-        $this->assertEquals(2, $nodes->count());
-        $this->assertEquals('Two', $nodes->eq(0)->text());
-        $this->assertEquals('Three', $nodes->eq(1)->text());
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->siblings();
-            $this->fail('->siblings() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->siblings() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testNextAll()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//li')->eq(1);
-        $this->assertNotSame($crawler, $crawler->nextAll(), '->nextAll() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->nextAll() returns a new instance of a crawler');
-
-        $nodes = $crawler->nextAll();
-        $this->assertEquals(1, $nodes->count());
-        $this->assertEquals('Three', $nodes->eq(0)->text());
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->nextAll();
-            $this->fail('->nextAll() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->nextAll() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testPreviousAll()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//li')->eq(2);
-        $this->assertNotSame($crawler, $crawler->previousAll(), '->previousAll() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->previousAll() returns a new instance of a crawler');
-
-        $nodes = $crawler->previousAll();
-        $this->assertEquals(2, $nodes->count());
-        $this->assertEquals('Two', $nodes->eq(0)->text());
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->previousAll();
-            $this->fail('->previousAll() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->previousAll() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    public function testChildren()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//ul');
-        $this->assertNotSame($crawler, $crawler->children(), '->children() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->children() returns a new instance of a crawler');
-
-        $nodes = $crawler->children();
-        $this->assertEquals(3, $nodes->count());
-        $this->assertEquals('One', $nodes->eq(0)->text());
-        $this->assertEquals('Two', $nodes->eq(1)->text());
-        $this->assertEquals('Three', $nodes->eq(2)->text());
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->children();
-            $this->fail('->children() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->children() throws an \InvalidArgumentException if the node list is empty');
-        }
-
-        try {
-            $crawler = new Crawler('<p></p>');
-            $crawler->filter('p')->children();
-            $this->assertTrue(true, '->children() does not trigger a notice if the node has no children');
-        } catch (\PHPUnit_Framework_Error_Notice $e) {
-            $this->fail('->children() does not trigger a notice if the node has no children');
-        }
-    }
-
-    public function testParents()
-    {
-        $crawler = $this->createTestCrawler()->filterXPath('//li[1]');
-        $this->assertNotSame($crawler, $crawler->parents(), '->parents() returns a new instance of a crawler');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Crawler', $crawler, '->parents() returns a new instance of a crawler');
-
-        $nodes = $crawler->parents();
-        $this->assertEquals(3, $nodes->count());
-
-        $nodes = $this->createTestCrawler()->filterXPath('//html')->parents();
-        $this->assertEquals(0, $nodes->count());
-
-        try {
-            $this->createTestCrawler()->filterXPath('//ol')->parents();
-            $this->fail('->parents() throws an \InvalidArgumentException if the node list is empty');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->parents() throws an \InvalidArgumentException if the node list is empty');
-        }
-    }
-
-    /**
-     * @dataProvider getBaseTagData
-     */
-    public function testBaseTag($baseValue, $linkValue, $expectedUri, $currentUri = null, $description = null)
-    {
-        $crawler = new Crawler('<html><base href="'.$baseValue.'"><a href="'.$linkValue.'"></a></html>', $currentUri);
-        $this->assertEquals($expectedUri, $crawler->filterXPath('//a')->link()->getUri(), $description);
-    }
-
-    public function getBaseTagData()
-    {
-        return array(
-            array('http://base.com', 'link', 'http://base.com/link'),
-            array('//base.com', 'link', 'https://base.com/link', 'https://domain.com', '<base> tag can use a schema-less URL'),
-            array('path/', 'link', 'https://domain.com/path/link', 'https://domain.com', '<base> tag can set a path'),
-            array('http://base.com', '#', 'http://base.com#', 'http://domain.com/path/link', '<base> tag does work with links to an anchor'),
-            array('http://base.com', '', 'http://base.com', 'http://domain.com/path/link', '<base> tag does work with empty links'),
-        );
-    }
-
-    /**
-     * @dataProvider getBaseTagWithFormData
-     */
-    public function testBaseTagWithForm($baseValue, $actionValue, $expectedUri, $currentUri = null, $description = null)
-    {
-        $crawler = new Crawler('<html><base href="'.$baseValue.'"><form method="post" action="'.$actionValue.'"><button type="submit" name="submit"/></form></html>', $currentUri);
-        $this->assertEquals($expectedUri, $crawler->filterXPath('//button')->form()->getUri(), $description);
-    }
-
-    public function getBaseTagWithFormData()
-    {
-        return array(
-            array('/basepath', '/registration', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and form action'),
-            array('/basepath', '', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and empty form action'),
-            array('http://base.com', '', 'http://domain.com/path/form', 'http://domain.com/path/form', '<base> tag does work with a URL and an empty form action'),
-        );
-    }
-
-    public function testCountOfNestedElements()
-    {
-        $crawler = new Crawler('<html><body><ul><li>List item 1<ul><li>Sublist item 1</li><li>Sublist item 2</ul></li></ul></body></html>');
-
-        $this->assertCount(1, $crawler->filter('li:contains("List item 1")'));
-    }
-
-    public function createTestCrawler($uri = null)
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-            <html>
-                <body>
-                    <a href="foo">Foo</a>
-                    <a href="/foo">   Fabien\'s Foo   </a>
-                    <a href="/foo">Fabien"s Foo</a>
-                    <a href="/foo">\' Fabien"s Foo</a>
-
-                    <a href="/bar"><img alt="Bar"/></a>
-                    <a href="/bar"><img alt="   Fabien\'s Bar   "/></a>
-                    <a href="/bar"><img alt="Fabien&quot;s Bar"/></a>
-                    <a href="/bar"><img alt="\' Fabien&quot;s Bar"/></a>
-
-                    <a href="?get=param">GetLink</a>
-
-                    <form action="foo" id="FooFormId">
-                        <input type="text" value="TextValue" name="TextName" />
-                        <input type="submit" value="FooValue" name="FooName" id="FooId" />
-                        <input type="button" value="BarValue" name="BarName" id="BarId" />
-                        <button value="ButtonValue" name="ButtonName" id="ButtonId" />
-                    </form>
-
-                    <input type="submit" value="FooBarValue" name="FooBarName" form="FooFormId" />
-                    <input type="text" value="FooTextValue" name="FooTextName" form="FooFormId" />
-
-                    <ul class="first">
-                        <li class="first">One</li>
-                        <li>Two</li>
-                        <li>Three</li>
-                    </ul>
-                    <ul>
-                        <li>One Bis</li>
-                        <li>Two Bis</li>
-                        <li>Three Bis</li>
-                    </ul>
-                    <div id="parent">
-                        <div id="child"></div>
-                        <div id="child2" xmlns:foo="http://example.com"></div>
-                    </div>
-                    <div id="sibling"><img /></div>
-                </body>
-            </html>
-        ');
-
-        return new Crawler($dom, $uri);
-    }
-
-    protected function createTestXmlCrawler($uri = null)
-    {
-        $xml = '<?xml version="1.0" encoding="UTF-8"?>
-            <entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
-                <id>tag:youtube.com,2008:video:kgZRZmEc9j4</id>
-                <yt:accessControl action="comment" permission="allowed"/>
-                <yt:accessControl action="videoRespond" permission="moderated"/>
-                <media:group>
-                    <media:title type="plain">Chordates - CrashCourse Biology #24</media:title>
-                    <yt:aspectRatio>widescreen</yt:aspectRatio>
-                </media:group>
-                <media:category label="Music" scheme="http://gdata.youtube.com/schemas/2007/categories.cat">Music</media:category>
-            </entry>';
-
-        return new Crawler($xml, $uri);
-    }
-
-    protected function createDomDocument()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadXML('<html><div class="foo"></div></html>');
-
-        return $dom;
-    }
-
-    protected function createNodeList()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadXML('<html><div class="foo"></div></html>');
-        $domxpath = new \DOMXPath($dom);
-
-        return $domxpath->query('//div');
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php b/core/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
deleted file mode 100644
index 9b31945b237f853297820f8f065c7331be1a7bf3..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
+++ /dev/null
@@ -1,388 +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\DomCrawler\Tests\Field;
-
-use Symfony\Component\DomCrawler\Field\ChoiceFormField;
-
-class ChoiceFormFieldTest extends FormFieldTestCase
-{
-    public function testInitialize()
-    {
-        $node = $this->createNode('textarea', '');
-        try {
-            $field = new ChoiceFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is not an input or a select');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input or a select');
-        }
-
-        $node = $this->createNode('input', '', array('type' => 'text'));
-        try {
-            $field = new ChoiceFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is an input with a type different from checkbox or radio');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is an input with a type different from checkbox or radio');
-        }
-    }
-
-    public function testGetType()
-    {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals('radio', $field->getType(), '->getType() returns radio for radio buttons');
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals('checkbox', $field->getType(), '->getType() returns radio for a checkbox');
-
-        $node = $this->createNode('select', '');
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals('select', $field->getType(), '->getType() returns radio for a select');
-    }
-
-    public function testIsMultiple()
-    {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for checkboxes');
-
-        $node = $this->createNode('select', '');
-        $field = new ChoiceFormField($node);
-
-        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for selects without the multiple attribute');
-
-        $node = $this->createNode('select', '', array('multiple' => 'multiple'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertTrue($field->isMultiple(), '->isMultiple() returns true for selects with the multiple attribute');
-
-        $node = $this->createNode('select', '', array('multiple' => ''));
-        $field = new ChoiceFormField($node);
-
-        $this->assertTrue($field->isMultiple(), '->isMultiple() returns true for selects with an empty multiple attribute');
-    }
-
-    public function testSelects()
-    {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
-        $field = new ChoiceFormField($node);
-
-        $this->assertTrue($field->hasValue(), '->hasValue() returns true for selects');
-        $this->assertEquals('foo', $field->getValue(), '->getValue() returns the first option if none are selected');
-        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false when no multiple attribute is defined');
-
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true));
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals('bar', $field->getValue(), '->getValue() returns the selected option');
-
-        $field->setValue('foo');
-        $this->assertEquals('foo', $field->getValue(), '->setValue() changes the selected option');
-
-        try {
-            $field->setValue('foobar');
-            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the selected options');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the selected options');
-        }
-
-        try {
-            $field->setValue(array('foobar'));
-            $this->fail('->setValue() throws an \InvalidArgumentException if the value is an array');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is an array');
-        }
-    }
-
-    public function testSelectWithEmptyBooleanAttribute()
-    {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true), array(), '');
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals('bar', $field->getValue());
-    }
-
-    public function testMultipleSelects()
-    {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false), array('multiple' => 'multiple'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals(array(), $field->getValue(), '->setValue() returns an empty array if multiple is true and no option is selected');
-
-        $field->setValue('foo');
-        $this->assertEquals(array('foo'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
-
-        $field->setValue('bar');
-        $this->assertEquals(array('bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
-
-        $field->setValue(array('foo', 'bar'));
-        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
-
-        $node = $this->createSelectNode(array('foo' => true, 'bar' => true), array('multiple' => 'multiple'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->getValue() returns the selected options');
-
-        try {
-            $field->setValue(array('foobar'));
-            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the options');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the options');
-        }
-    }
-
-    public function testRadioButtons()
-    {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
-        $field->addChoice($node);
-
-        $this->assertFalse($field->hasValue(), '->hasValue() returns false when no radio button is selected');
-        $this->assertNull($field->getValue(), '->getValue() returns null if no radio button is selected');
-        $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
-
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => 'checked'));
-        $field->addChoice($node);
-
-        $this->assertTrue($field->hasValue(), '->hasValue() returns true when a radio button is selected');
-        $this->assertEquals('bar', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
-
-        $field->setValue('foo');
-        $this->assertEquals('foo', $field->getValue(), '->setValue() changes the selected radio button');
-
-        try {
-            $field->setValue('foobar');
-            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the radio button values');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the radio button values');
-        }
-    }
-
-    public function testRadioButtonsWithEmptyBooleanAttribute()
-    {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => ''));
-        $field->addChoice($node);
-
-        $this->assertTrue($field->hasValue(), '->hasValue() returns true when a radio button is selected');
-        $this->assertEquals('bar', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
-    }
-
-    public function testRadioButtonIsDisabled()
-    {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo', 'disabled' => 'disabled'));
-        $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
-        $field->addChoice($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'baz', 'disabled' => ''));
-        $field->addChoice($node);
-
-        $field->select('foo');
-        $this->assertEquals('foo', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
-        $this->assertTrue($field->isDisabled());
-
-        $field->select('bar');
-        $this->assertEquals('bar', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
-        $this->assertFalse($field->isDisabled());
-
-        $field->select('baz');
-        $this->assertEquals('baz', $field->getValue(), '->getValue() returns the value attribute of the selected radio button');
-        $this->assertTrue($field->isDisabled());
-    }
-
-    public function testCheckboxes()
-    {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertFalse($field->hasValue(), '->hasValue() returns false when the checkbox is not checked');
-        $this->assertNull($field->getValue(), '->getValue() returns null if the checkbox is not checked');
-        $this->assertFalse($field->isMultiple(), '->hasValue() returns false for checkboxes');
-        try {
-            $field->addChoice(new \DOMElement('input'));
-            $this->fail('->addChoice() throws a \LogicException for checkboxes');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException for checkboxes');
-        }
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertTrue($field->hasValue(), '->hasValue() returns true when the checkbox is checked');
-        $this->assertEquals('on', $field->getValue(), '->getValue() returns 1 if the checkbox is checked and has no value attribute');
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-
-        $this->assertEquals('foo', $field->getValue(), '->getValue() returns the value attribute if the checkbox is checked');
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
-        $field = new ChoiceFormField($node);
-
-        $field->setValue(false);
-        $this->assertNull($field->getValue(), '->setValue() unchecks the checkbox is value is false');
-
-        $field->setValue(true);
-        $this->assertEquals('foo', $field->getValue(), '->setValue() checks the checkbox is value is true');
-
-        try {
-            $field->setValue('bar');
-            $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one from the value attribute');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one from the value attribute');
-        }
-    }
-
-    public function testCheckboxWithEmptyBooleanAttribute()
-    {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo', 'checked' => ''));
-        $field = new ChoiceFormField($node);
-
-        $this->assertTrue($field->hasValue(), '->hasValue() returns true when the checkbox is checked');
-        $this->assertEquals('foo', $field->getValue());
-    }
-
-    public function testTick()
-    {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
-        $field = new ChoiceFormField($node);
-
-        try {
-            $field->tick();
-            $this->fail('->tick() throws a \LogicException for select boxes');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->tick() throws a \LogicException for select boxes');
-        }
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
-        $field = new ChoiceFormField($node);
-        $field->tick();
-        $this->assertEquals('on', $field->getValue(), '->tick() ticks checkboxes');
-    }
-
-    public function testUntick()
-    {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
-        $field = new ChoiceFormField($node);
-
-        try {
-            $field->untick();
-            $this->fail('->untick() throws a \LogicException for select boxes');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->untick() throws a \LogicException for select boxes');
-        }
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
-        $field = new ChoiceFormField($node);
-        $field->untick();
-        $this->assertNull($field->getValue(), '->untick() unticks checkboxes');
-    }
-
-    public function testSelect()
-    {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
-        $field = new ChoiceFormField($node);
-        $field->select(true);
-        $this->assertEquals('on', $field->getValue(), '->select() changes the value of the field');
-        $field->select(false);
-        $this->assertNull($field->getValue(), '->select() changes the value of the field');
-
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
-        $field = new ChoiceFormField($node);
-        $field->select('foo');
-        $this->assertEquals('foo', $field->getValue(), '->select() changes the selected option');
-    }
-
-    public function testOptionWithNoValue()
-    {
-        $node = $this->createSelectNodeWithEmptyOption(array('foo' => false, 'bar' => false));
-        $field = new ChoiceFormField($node);
-        $this->assertEquals('foo', $field->getValue());
-
-        $node = $this->createSelectNodeWithEmptyOption(array('foo' => false, 'bar' => true));
-        $field = new ChoiceFormField($node);
-        $this->assertEquals('bar', $field->getValue());
-        $field->select('foo');
-        $this->assertEquals('foo', $field->getValue(), '->select() changes the selected option');
-    }
-
-    public function testDisableValidation()
-    {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
-        $field = new ChoiceFormField($node);
-        $field->disableValidation();
-        $field->setValue('foobar');
-        $this->assertEquals('foobar', $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
-
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false), array('multiple' => 'multiple'));
-        $field = new ChoiceFormField($node);
-        $field->disableValidation();
-        $field->setValue(array('foobar'));
-        $this->assertEquals(array('foobar'), $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
-    }
-
-    protected function createSelectNode($options, $attributes = array(), $selectedAttrText = 'selected')
-    {
-        $document = new \DOMDocument();
-        $node = $document->createElement('select');
-
-        foreach ($attributes as $name => $value) {
-            $node->setAttribute($name, $value);
-        }
-        $node->setAttribute('name', 'name');
-
-        foreach ($options as $value => $selected) {
-            $option = $document->createElement('option', $value);
-            $option->setAttribute('value', $value);
-            if ($selected) {
-                $option->setAttribute('selected', $selectedAttrText);
-            }
-            $node->appendChild($option);
-        }
-
-        return $node;
-    }
-
-    protected function createSelectNodeWithEmptyOption($options, $attributes = array())
-    {
-        $document = new \DOMDocument();
-        $node = $document->createElement('select');
-
-        foreach ($attributes as $name => $value) {
-            $node->setAttribute($name, $value);
-        }
-        $node->setAttribute('name', 'name');
-
-        foreach ($options as $value => $selected) {
-            $option = $document->createElement('option', $value);
-            if ($selected) {
-                $option->setAttribute('selected', 'selected');
-            }
-            $node->appendChild($option);
-        }
-
-        return $node;
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php b/core/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
deleted file mode 100644
index 3ce49a46ef732479a9e059d30d694d52b8307ade..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
+++ /dev/null
@@ -1,114 +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\DomCrawler\Tests\Field;
-
-use Symfony\Component\DomCrawler\Field\FileFormField;
-
-class FileFormFieldTest extends FormFieldTestCase
-{
-    public function testInitialize()
-    {
-        $node = $this->createNode('input', '', array('type' => 'file'));
-        $field = new FileFormField($node);
-
-        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), '->initialize() sets the value of the field to no file uploaded');
-
-        $node = $this->createNode('textarea', '');
-        try {
-            $field = new FileFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is not an input field');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input field');
-        }
-
-        $node = $this->createNode('input', '', array('type' => 'text'));
-        try {
-            $field = new FileFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is not a file input field');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not a file input field');
-        }
-    }
-
-    /**
-     * @dataProvider getSetValueMethods
-     */
-    public function testSetValue($method)
-    {
-        $node = $this->createNode('input', '', array('type' => 'file'));
-        $field = new FileFormField($node);
-
-        $field->$method(null);
-        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), "->$method() clears the uploaded file if the value is null");
-
-        $field->$method(__FILE__);
-        $value = $field->getValue();
-
-        $this->assertEquals(basename(__FILE__), $value['name'], "->$method() sets the name of the file field");
-        $this->assertEquals('', $value['type'], "->$method() sets the type of the file field");
-        $this->assertInternalType('string', $value['tmp_name'], "->$method() sets the tmp_name of the file field");
-        $this->assertFileExists($value['tmp_name'], "->$method() creates a copy of the file at the tmp_name path");
-        $this->assertEquals(0, $value['error'], "->$method() sets the error of the file field");
-        $this->assertEquals(filesize(__FILE__), $value['size'], "->$method() sets the size of the file field");
-
-        $origInfo = pathinfo(__FILE__);
-        $tmpInfo = pathinfo($value['tmp_name']);
-        $this->assertEquals(
-            $origInfo['extension'],
-            $tmpInfo['extension'],
-            "->$method() keeps the same file extension in the tmp_name copy"
-        );
-
-        $field->$method(__DIR__.'/../Fixtures/no-extension');
-        $value = $field->getValue();
-
-        $this->assertArrayNotHasKey(
-            'extension',
-            pathinfo($value['tmp_name']),
-            "->$method() does not add a file extension in the tmp_name copy"
-        );
-    }
-
-    public function getSetValueMethods()
-    {
-        return array(
-            array('setValue'),
-            array('upload'),
-        );
-    }
-
-    public function testSetErrorCode()
-    {
-        $node = $this->createNode('input', '', array('type' => 'file'));
-        $field = new FileFormField($node);
-
-        $field->setErrorCode(UPLOAD_ERR_FORM_SIZE);
-        $value = $field->getValue();
-        $this->assertEquals(UPLOAD_ERR_FORM_SIZE, $value['error'], '->setErrorCode() sets the file input field error code');
-
-        try {
-            $field->setErrorCode('foobar');
-            $this->fail('->setErrorCode() throws a \InvalidArgumentException if the error code is not valid');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->setErrorCode() throws a \InvalidArgumentException if the error code is not valid');
-        }
-    }
-
-    public function testSetRawFilePath()
-    {
-        $node = $this->createNode('input', '', array('type' => 'file'));
-        $field = new FileFormField($node);
-        $field->setFilePath(__FILE__);
-
-        $this->assertEquals(__FILE__, $field->getValue());
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php b/core/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
deleted file mode 100644
index 510f7628f24280ab532d351e2cd4e5f4b854346b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
+++ /dev/null
@@ -1,38 +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\DomCrawler\Tests\Field;
-
-use Symfony\Component\DomCrawler\Field\InputFormField;
-
-class FormFieldTest extends FormFieldTestCase
-{
-    public function testGetName()
-    {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
-        $field = new InputFormField($node);
-
-        $this->assertEquals('name', $field->getName(), '->getName() returns the name of the field');
-    }
-
-    public function testGetSetHasValue()
-    {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
-        $field = new InputFormField($node);
-
-        $this->assertEquals('value', $field->getValue(), '->getValue() returns the value of the field');
-
-        $field->setValue('foo');
-        $this->assertEquals('foo', $field->getValue(), '->setValue() sets the value of the field');
-
-        $this->assertTrue($field->hasValue(), '->hasValue() always returns true');
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php b/core/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
deleted file mode 100644
index 26b1b0e244656953c485bb43f7d34cafbc936859..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
+++ /dev/null
@@ -1,27 +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\DomCrawler\Tests\Field;
-
-class FormFieldTestCase extends \PHPUnit_Framework_TestCase
-{
-    protected function createNode($tag, $value, $attributes = array())
-    {
-        $document = new \DOMDocument();
-        $node = $document->createElement($tag, $value);
-
-        foreach ($attributes as $name => $value) {
-            $node->setAttribute($name, $value);
-        }
-
-        return $node;
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php b/core/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
deleted file mode 100644
index 193d301de691ea003d9145f6c8226a6618f178c9..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
+++ /dev/null
@@ -1,49 +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\DomCrawler\Tests\Field;
-
-use Symfony\Component\DomCrawler\Field\InputFormField;
-
-class InputFormFieldTest extends FormFieldTestCase
-{
-    public function testInitialize()
-    {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
-        $field = new InputFormField($node);
-
-        $this->assertEquals('value', $field->getValue(), '->initialize() sets the value of the field to the value attribute value');
-
-        $node = $this->createNode('textarea', '');
-        try {
-            $field = new InputFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is not an input');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input');
-        }
-
-        $node = $this->createNode('input', '', array('type' => 'checkbox'));
-        try {
-            $field = new InputFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is a checkbox');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is a checkbox');
-        }
-
-        $node = $this->createNode('input', '', array('type' => 'file'));
-        try {
-            $field = new InputFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is a file');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is a file');
-        }
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/Field/TextareaFormFieldTest.php b/core/vendor/symfony/dom-crawler/Tests/Field/TextareaFormFieldTest.php
deleted file mode 100644
index 5d4d0038260db35c0311181d307bcb892b3d610b..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Field/TextareaFormFieldTest.php
+++ /dev/null
@@ -1,46 +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\DomCrawler\Tests\Field;
-
-use Symfony\Component\DomCrawler\Field\TextareaFormField;
-
-class TextareaFormFieldTest extends FormFieldTestCase
-{
-    public function testInitialize()
-    {
-        $node = $this->createNode('textarea', 'foo bar');
-        $field = new TextareaFormField($node);
-
-        $this->assertEquals('foo bar', $field->getValue(), '->initialize() sets the value of the field to the textarea node value');
-
-        $node = $this->createNode('input', '');
-        try {
-            $field = new TextareaFormField($node);
-            $this->fail('->initialize() throws a \LogicException if the node is not a textarea');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not a textarea');
-        }
-
-        // Ensure that valid HTML can be used on a textarea.
-        $node = $this->createNode('textarea', 'foo bar <h1>Baz</h1>');
-        $field = new TextareaFormField($node);
-
-        $this->assertEquals('foo bar <h1>Baz</h1>', $field->getValue(), '->initialize() sets the value of the field to the textarea node value');
-
-        // Ensure that we don't do any DOM manipulation/validation by passing in
-        // "invalid" HTML.
-        $node = $this->createNode('textarea', 'foo bar <h1>Baz</h2>');
-        $field = new TextareaFormField($node);
-
-        $this->assertEquals('foo bar <h1>Baz</h2>', $field->getValue(), '->initialize() sets the value of the field to the textarea node value');
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/Fixtures/no-extension b/core/vendor/symfony/dom-crawler/Tests/Fixtures/no-extension
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Fixtures/no-extension
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/core/vendor/symfony/dom-crawler/Tests/Fixtures/windows-1250.html b/core/vendor/symfony/dom-crawler/Tests/Fixtures/windows-1250.html
deleted file mode 100644
index c26dc770551eb74d9a7dbf73b597e6199273e039..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/Fixtures/windows-1250.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-    <head>
-        <meta http-equiv="content-type" content="text/html;charset=windows-1250">
-    </head>
-    <body>
-        <p>Ž�èýù</p>
-    </body>
-</html>
diff --git a/core/vendor/symfony/dom-crawler/Tests/FormTest.php b/core/vendor/symfony/dom-crawler/Tests/FormTest.php
deleted file mode 100644
index 59c3c76cf0f4e149a2327ab19ca95ba9ca5ea4a7..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/FormTest.php
+++ /dev/null
@@ -1,973 +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\DomCrawler\Tests;
-
-use Symfony\Component\DomCrawler\Form;
-use Symfony\Component\DomCrawler\FormFieldRegistry;
-use Symfony\Component\DomCrawler\Field;
-
-class FormTest extends \PHPUnit_Framework_TestCase
-{
-    public static function setUpBeforeClass()
-    {
-        // Ensure that the private helper class FormFieldRegistry is loaded
-        class_exists('Symfony\\Component\\DomCrawler\\Form');
-    }
-
-    public function testConstructorThrowsExceptionIfTheNodeHasNoFormAncestor()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-            <html>
-                <input type="submit" />
-                <form>
-                    <input type="foo" />
-                </form>
-                <button />
-            </html>
-        ');
-
-        $nodes = $dom->getElementsByTagName('input');
-
-        try {
-            $form = new Form($nodes->item(0), 'http://example.com');
-            $this->fail('__construct() throws a \\LogicException if the node has no form ancestor');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '__construct() throws a \\LogicException if the node has no form ancestor');
-        }
-
-        try {
-            $form = new Form($nodes->item(1), 'http://example.com');
-            $this->fail('__construct() throws a \\LogicException if the input type is not submit, button, or image');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '__construct() throws a \\LogicException if the input type is not submit, button, or image');
-        }
-
-        $nodes = $dom->getElementsByTagName('button');
-
-        try {
-            $form = new Form($nodes->item(0), 'http://example.com');
-            $this->fail('__construct() throws a \\LogicException if the node has no form ancestor');
-        } catch (\LogicException $e) {
-            $this->assertTrue(true, '__construct() throws a \\LogicException if the node has no form ancestor');
-        }
-    }
-
-    /**
-     * __construct() should throw \\LogicException if the form attribute is invalid.
-     *
-     * @expectedException \LogicException
-     */
-    public function testConstructorThrowsExceptionIfNoRelatedForm()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-            <html>
-                <form id="bar">
-                    <input type="submit" form="nonexistent" />
-                </form>
-                <input type="text" form="nonexistent" />
-                <button />
-            </html>
-        ');
-
-        $nodes = $dom->getElementsByTagName('input');
-
-        $form = new Form($nodes->item(0), 'http://example.com');
-        $form = new Form($nodes->item(1), 'http://example.com');
-    }
-
-    public function testConstructorLoadsOnlyFieldsOfTheRightForm()
-    {
-        $dom = $this->createTestMultipleForm();
-
-        $nodes = $dom->getElementsByTagName('form');
-        $buttonElements = $dom->getElementsByTagName('button');
-
-        $form = new Form($nodes->item(0), 'http://example.com');
-        $this->assertCount(3, $form->all());
-
-        $form = new Form($buttonElements->item(1), 'http://example.com');
-        $this->assertCount(5, $form->all());
-    }
-
-    public function testConstructorHandlesFormAttribute()
-    {
-        $dom = $this->createTestHtml5Form();
-
-        $inputElements = $dom->getElementsByTagName('input');
-        $buttonElements = $dom->getElementsByTagName('button');
-
-        // Tests if submit buttons are correctly assigned to forms
-        $form1 = new Form($buttonElements->item(1), 'http://example.com');
-        $this->assertSame($dom->getElementsByTagName('form')->item(0), $form1->getFormNode(), 'HTML5-compliant form attribute handled incorrectly');
-
-        $form1 = new Form($inputElements->item(3), 'http://example.com');
-        $this->assertSame($dom->getElementsByTagName('form')->item(0), $form1->getFormNode(), 'HTML5-compliant form attribute handled incorrectly');
-
-        $form2 = new Form($buttonElements->item(0), 'http://example.com');
-        $this->assertSame($dom->getElementsByTagName('form')->item(1), $form2->getFormNode(), 'HTML5-compliant form attribute handled incorrectly');
-    }
-
-    public function testConstructorHandlesFormValues()
-    {
-        $dom = $this->createTestHtml5Form();
-
-        $inputElements = $dom->getElementsByTagName('input');
-        $buttonElements = $dom->getElementsByTagName('button');
-
-        $form1 = new Form($inputElements->item(3), 'http://example.com');
-        $form2 = new Form($buttonElements->item(0), 'http://example.com');
-
-        // Tests if form values are correctly assigned to forms
-        $values1 = array(
-            'apples' => array('1', '2'),
-            'form_name' => 'form-1',
-            'button_1' => 'Capture fields',
-            'outer_field' => 'success',
-        );
-        $values2 = array(
-            'oranges' => array('1', '2', '3'),
-            'form_name' => 'form_2',
-            'button_2' => '',
-            'app_frontend_form_type_contact_form_type' => array('contactType' => '', 'firstName' => 'John'),
-        );
-
-        $this->assertEquals($values1, $form1->getPhpValues(), 'HTML5-compliant form attribute handled incorrectly');
-        $this->assertEquals($values2, $form2->getPhpValues(), 'HTML5-compliant form attribute handled incorrectly');
-    }
-
-    public function testMultiValuedFields()
-    {
-        $form = $this->createForm('<form>
-            <input type="text" name="foo[4]" value="foo" disabled="disabled" />
-            <input type="text" name="foo" value="foo" disabled="disabled" />
-            <input type="text" name="foo[2]" value="foo" disabled="disabled" />
-            <input type="text" name="foo[]" value="foo" disabled="disabled" />
-            <input type="text" name="bar[foo][]" value="foo" disabled="disabled" />
-            <input type="text" name="bar[foo][foobar]" value="foo" disabled="disabled" />
-            <input type="submit" />
-        </form>
-        ');
-
-        $this->assertEquals(
-            array_keys($form->all()),
-            array('foo[2]', 'foo[3]', 'bar[foo][0]', 'bar[foo][foobar]')
-        );
-
-        $this->assertEquals($form->get('foo[2]')->getValue(), 'foo');
-        $this->assertEquals($form->get('foo[3]')->getValue(), 'foo');
-        $this->assertEquals($form->get('bar[foo][0]')->getValue(), 'foo');
-        $this->assertEquals($form->get('bar[foo][foobar]')->getValue(), 'foo');
-
-        $form['foo[2]'] = 'bar';
-        $form['foo[3]'] = 'bar';
-
-        $this->assertEquals($form->get('foo[2]')->getValue(), 'bar');
-        $this->assertEquals($form->get('foo[3]')->getValue(), 'bar');
-
-        $form['bar'] = array('foo' => array('0' => 'bar', 'foobar' => 'foobar'));
-
-        $this->assertEquals($form->get('bar[foo][0]')->getValue(), 'bar');
-        $this->assertEquals($form->get('bar[foo][foobar]')->getValue(), 'foobar');
-    }
-
-    /**
-     * @dataProvider provideInitializeValues
-     */
-    public function testConstructor($message, $form, $values)
-    {
-        $form = $this->createForm('<form>'.$form.'</form>');
-        $this->assertEquals(
-            $values,
-            array_map(function ($field) {
-                    $class = get_class($field);
-
-                    return array(substr($class, strrpos($class, '\\') + 1), $field->getValue());
-                },
-                $form->all()
-            ),
-            '->getDefaultValues() '.$message
-        );
-    }
-
-    public function provideInitializeValues()
-    {
-        return array(
-            array(
-                'does not take into account input fields without a name attribute',
-                '<input type="text" value="foo" />
-                 <input type="submit" />',
-                array(),
-            ),
-            array(
-                'does not take into account input fields with an empty name attribute value',
-                '<input type="text" name="" value="foo" />
-                 <input type="submit" />',
-                array(),
-            ),
-            array(
-                'takes into account disabled input fields',
-                '<input type="text" name="foo" value="foo" disabled="disabled" />
-                 <input type="submit" />',
-                array('foo' => array('InputFormField', 'foo')),
-            ),
-            array(
-                'appends the submitted button value',
-                '<input type="submit" name="bar" value="bar" />',
-                array('bar' => array('InputFormField', 'bar')),
-            ),
-            array(
-                'appends the submitted button value for Button element',
-                '<button type="submit" name="bar" value="bar">Bar</button>',
-                array('bar' => array('InputFormField', 'bar')),
-            ),
-            array(
-                'appends the submitted button value but not other submit buttons',
-                '<input type="submit" name="bar" value="bar" />
-                 <input type="submit" name="foobar" value="foobar" />',
-                 array('foobar' => array('InputFormField', 'foobar')),
-            ),
-            array(
-                'turns an image input into x and y fields',
-                '<input type="image" name="bar" />',
-                array('bar.x' => array('InputFormField', '0'), 'bar.y' => array('InputFormField', '0')),
-            ),
-            array(
-                'returns textareas',
-                '<textarea name="foo">foo</textarea>
-                 <input type="submit" />',
-                 array('foo' => array('TextareaFormField', 'foo')),
-            ),
-            array(
-                'returns inputs',
-                '<input type="text" name="foo" value="foo" />
-                 <input type="submit" />',
-                 array('foo' => array('InputFormField', 'foo')),
-            ),
-            array(
-                'returns checkboxes',
-                '<input type="checkbox" name="foo" value="foo" checked="checked" />
-                 <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', 'foo')),
-            ),
-            array(
-                'returns not-checked checkboxes',
-                '<input type="checkbox" name="foo" value="foo" />
-                 <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', false)),
-            ),
-            array(
-                'returns radio buttons',
-                '<input type="radio" name="foo" value="foo" />
-                 <input type="radio" name="foo" value="bar" checked="bar" />
-                 <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', 'bar')),
-            ),
-            array(
-                'returns file inputs',
-                '<input type="file" name="foo" />
-                 <input type="submit" />',
-                 array('foo' => array('FileFormField', array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))),
-            ),
-        );
-    }
-
-    public function testGetFormNode()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<html><form><input type="submit" /></form></html>');
-
-        $form = new Form($dom->getElementsByTagName('input')->item(0), 'http://example.com');
-
-        $this->assertSame($dom->getElementsByTagName('form')->item(0), $form->getFormNode(), '->getFormNode() returns the form node associated with this form');
-    }
-
-    public function testGetFormNodeFromNamedForm()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<html><form name="my_form"><input type="submit" /></form></html>');
-
-        $form = new Form($dom->getElementsByTagName('form')->item(0), 'http://example.com');
-
-        $this->assertSame($dom->getElementsByTagName('form')->item(0), $form->getFormNode(), '->getFormNode() returns the form node associated with this form');
-    }
-
-    public function testGetMethod()
-    {
-        $form = $this->createForm('<form><input type="submit" /></form>');
-        $this->assertEquals('GET', $form->getMethod(), '->getMethod() returns get if no method is defined');
-
-        $form = $this->createForm('<form method="post"><input type="submit" /></form>');
-        $this->assertEquals('POST', $form->getMethod(), '->getMethod() returns the method attribute value of the form');
-
-        $form = $this->createForm('<form method="post"><input type="submit" /></form>', 'put');
-        $this->assertEquals('PUT', $form->getMethod(), '->getMethod() returns the method defined in the constructor if provided');
-
-        $form = $this->createForm('<form method="post"><input type="submit" /></form>', 'delete');
-        $this->assertEquals('DELETE', $form->getMethod(), '->getMethod() returns the method defined in the constructor if provided');
-
-        $form = $this->createForm('<form method="post"><input type="submit" /></form>', 'patch');
-        $this->assertEquals('PATCH', $form->getMethod(), '->getMethod() returns the method defined in the constructor if provided');
-    }
-
-    public function testGetSetValue()
-    {
-        $form = $this->createForm('<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>');
-
-        $this->assertEquals('foo', $form['foo']->getValue(), '->offsetGet() returns the value of a form field');
-
-        $form['foo'] = 'bar';
-
-        $this->assertEquals('bar', $form['foo']->getValue(), '->offsetSet() changes the value of a form field');
-
-        try {
-            $form['foobar'] = 'bar';
-            $this->fail('->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
-        }
-
-        try {
-            $form['foobar'];
-            $this->fail('->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->offsetSet() throws an \InvalidArgumentException exception if the field does not exist');
-        }
-    }
-
-    public function testSetValueOnMultiValuedFieldsWithMalformedName()
-    {
-        $form = $this->createForm('<form><input type="text" name="foo[bar]" value="bar" /><input type="text" name="foo[baz]" value="baz" /><input type="submit" /></form>');
-
-        try {
-            $form['foo[bar'] = 'bar';
-            $this->fail('->offsetSet() throws an \InvalidArgumentException exception if the name is malformed.');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->offsetSet() throws an \InvalidArgumentException exception if the name is malformed.');
-        }
-    }
-
-    public function testDisableValidation()
-    {
-        $form = $this->createForm('<form>
-            <select name="foo[bar]">
-                <option value="bar">bar</option>
-            </select>
-            <select name="foo[baz]">
-                <option value="foo">foo</option>
-            </select>
-            <input type="submit" />
-        </form>');
-
-        $form->disableValidation();
-
-        $form['foo[bar]']->select('foo');
-        $form['foo[baz]']->select('bar');
-        $this->assertEquals('foo', $form['foo[bar]']->getValue(), '->disableValidation() disables validation of all ChoiceFormField.');
-        $this->assertEquals('bar', $form['foo[baz]']->getValue(), '->disableValidation() disables validation of all ChoiceFormField.');
-    }
-
-    public function testOffsetUnset()
-    {
-        $form = $this->createForm('<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>');
-        unset($form['foo']);
-        $this->assertFalse(isset($form['foo']), '->offsetUnset() removes a field');
-    }
-
-    public function testOffsetExists()
-    {
-        $form = $this->createForm('<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>');
-
-        $this->assertTrue(isset($form['foo']), '->offsetExists() return true if the field exists');
-        $this->assertFalse(isset($form['bar']), '->offsetExists() return false if the field does not exist');
-    }
-
-    public function testGetValues()
-    {
-        $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><select multiple="multiple" name="baz[]"></select><input type="submit" /></form>');
-        $this->assertEquals(array('foo[bar]' => 'foo', 'bar' => 'bar', 'baz' => array()), $form->getValues(), '->getValues() returns all form field values');
-
-        $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include not-checked checkboxes');
-
-        $form = $this->createForm('<form><input type="file" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include file input fields');
-
-        $form = $this->createForm('<form><input type="text" name="foo" value="foo" disabled="disabled" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include disabled fields');
-    }
-
-    public function testSetValues()
-    {
-        $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" checked="checked" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $form->setValues(array('foo' => false, 'bar' => 'foo'));
-        $this->assertEquals(array('bar' => 'foo'), $form->getValues(), '->setValues() sets the values of fields');
-    }
-
-    public function testMultiselectSetValues()
-    {
-        $form = $this->createForm('<form><select multiple="multiple" name="multi"><option value="foo">foo</option><option value="bar">bar</option></select><input type="submit" /></form>');
-        $form->setValues(array('multi' => array('foo', 'bar')));
-        $this->assertEquals(array('multi' => array('foo', 'bar')), $form->getValues(), '->setValue() sets the values of select');
-    }
-
-    public function testGetPhpValues()
-    {
-        $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), '->getPhpValues() converts keys with [] to arrays');
-
-        $form = $this->createForm('<form><input type="text" name="fo.o[ba.r]" value="foo" /><input type="text" name="ba r" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('fo.o' => array('ba.r' => 'foo'), 'ba r' => 'bar'), $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names');
-
-        $form = $this->createForm('<form><input type="text" name="fo.o[ba.r][]" value="foo" /><input type="text" name="fo.o[ba.r][ba.z]" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('fo.o' => array('ba.r' => array('foo', 'ba.z' => 'bar'))), $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names recursively');
-
-        $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><select multiple="multiple" name="baz[]"></select><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), "->getPhpValues() doesn't return empty values");
-    }
-
-    public function testGetFiles()
-    {
-        $form = $this->createForm('<form><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array(), $form->getFiles(), '->getFiles() returns an empty array if method is get');
-
-        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for POST');
-
-        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'put');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PUT');
-
-        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'delete');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for DELETE');
-
-        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'patch');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PATCH');
-
-        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" disabled="disabled" /><input type="submit" /></form>');
-        $this->assertEquals(array(), $form->getFiles(), '->getFiles() does not include disabled file fields');
-    }
-
-    public function testGetPhpFiles()
-    {
-        $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() converts keys with [] to arrays');
-
-        $form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('f.o o' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names');
-
-        $form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar][ba.z]" /><input type="file" name="f.o o[bar][]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('f.o o' => array('bar' => array('ba.z' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0), array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names recursively');
-    }
-
-    /**
-     * @dataProvider provideGetUriValues
-     */
-    public function testGetUri($message, $form, $values, $uri, $method = null)
-    {
-        $form = $this->createForm($form, $method);
-        $form->setValues($values);
-
-        $this->assertEquals('http://example.com'.$uri, $form->getUri(), '->getUri() '.$message);
-    }
-
-    public function testGetBaseUri()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<form method="post" action="foo.php"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-
-        $nodes = $dom->getElementsByTagName('input');
-        $form = new Form($nodes->item($nodes->length - 1), 'http://www.foo.com/');
-        $this->assertEquals('http://www.foo.com/foo.php', $form->getUri());
-    }
-
-    public function testGetUriWithAnchor()
-    {
-        $form = $this->createForm('<form action="#foo"><input type="submit" /></form>', null, 'http://example.com/id/123');
-
-        $this->assertEquals('http://example.com/id/123#foo', $form->getUri());
-    }
-
-    public function testGetUriActionAbsolute()
-    {
-        $formHtml = '<form id="login_form" action="https://login.foo.com/login.php?login_attempt=1" method="POST"><input type="text" name="foo" value="foo" /><input type="submit" /></form>';
-
-        $form = $this->createForm($formHtml);
-        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
-
-        $form = $this->createForm($formHtml, null, 'https://login.foo.com');
-        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
-
-        $form = $this->createForm($formHtml, null, 'https://login.foo.com/bar/');
-        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
-
-        // The action URI haven't the same domain Host have an another domain as Host
-        $form = $this->createForm($formHtml, null, 'https://www.foo.com');
-        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
-
-        $form = $this->createForm($formHtml, null, 'https://www.foo.com/bar/');
-        $this->assertEquals('https://login.foo.com/login.php?login_attempt=1', $form->getUri(), '->getUri() returns absolute URIs set in the action form');
-    }
-
-    public function testGetUriAbsolute()
-    {
-        $form = $this->createForm('<form action="foo"><input type="submit" /></form>', null, 'http://localhost/foo/');
-        $this->assertEquals('http://localhost/foo/foo', $form->getUri(), '->getUri() returns absolute URIs');
-
-        $form = $this->createForm('<form action="/foo"><input type="submit" /></form>', null, 'http://localhost/foo/');
-        $this->assertEquals('http://localhost/foo', $form->getUri(), '->getUri() returns absolute URIs');
-    }
-
-    public function testGetUriWithOnlyQueryString()
-    {
-        $form = $this->createForm('<form action="?get=param"><input type="submit" /></form>', null, 'http://localhost/foo/bar');
-        $this->assertEquals('http://localhost/foo/bar?get=param', $form->getUri(), '->getUri() returns absolute URIs only if the host has been defined in the constructor');
-    }
-
-    public function testGetUriWithoutAction()
-    {
-        $form = $this->createForm('<form><input type="submit" /></form>', null, 'http://localhost/foo/bar');
-        $this->assertEquals('http://localhost/foo/bar', $form->getUri(), '->getUri() returns path if no action defined');
-    }
-
-    public function provideGetUriValues()
-    {
-        return array(
-            array(
-                'returns the URI of the form',
-                '<form action="/foo"><input type="submit" /></form>',
-                array(),
-                '/foo',
-            ),
-            array(
-                'appends the form values if the method is get',
-                '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/foo?foo=foo',
-            ),
-            array(
-                'appends the form values and merges the submitted values',
-                '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array('foo' => 'bar'),
-                '/foo?foo=bar',
-            ),
-            array(
-                'does not append values if the method is post',
-                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/foo',
-            ),
-            array(
-                'does not append values if the method is patch',
-                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/foo',
-                'PUT',
-            ),
-            array(
-                'does not append values if the method is delete',
-                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/foo',
-                'DELETE',
-            ),
-            array(
-                'does not append values if the method is put',
-                '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/foo',
-                'PATCH',
-            ),
-            array(
-                'appends the form values to an existing query string',
-                '<form action="/foo?bar=bar"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/foo?bar=bar&foo=foo',
-            ),
-            array(
-                'replaces query values with the form values',
-                '<form action="/foo?bar=bar"><input type="text" name="bar" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/foo?bar=foo',
-            ),
-            array(
-                'returns an empty URI if the action is empty',
-                '<form><input type="submit" /></form>',
-                array(),
-                '/',
-            ),
-            array(
-                'appends the form values even if the action is empty',
-                '<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/?foo=foo',
-            ),
-            array(
-                'chooses the path if the action attribute value is a sharp (#)',
-                '<form action="#" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
-                '/#',
-            ),
-        );
-    }
-
-    public function testHas()
-    {
-        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-
-        $this->assertFalse($form->has('foo'), '->has() returns false if a field is not in the form');
-        $this->assertTrue($form->has('bar'), '->has() returns true if a field is in the form');
-    }
-
-    public function testRemove()
-    {
-        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $form->remove('bar');
-        $this->assertFalse($form->has('bar'), '->remove() removes a field');
-    }
-
-    public function testGet()
-    {
-        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Field\\InputFormField', $form->get('bar'), '->get() returns the field object associated with the given name');
-
-        try {
-            $form->get('foo');
-            $this->fail('->get() throws an \InvalidArgumentException if the field does not exist');
-        } catch (\InvalidArgumentException $e) {
-            $this->assertTrue(true, '->get() throws an \InvalidArgumentException if the field does not exist');
-        }
-    }
-
-    public function testAll()
-    {
-        $form = $this->createForm('<form method="post"><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-
-        $fields = $form->all();
-        $this->assertCount(1, $fields, '->all() return an array of form field objects');
-        $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Field\\InputFormField', $fields['bar'], '->all() return an array of form field objects');
-    }
-
-    public function testSubmitWithoutAFormButton()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-            <html>
-                <form>
-                    <input type="foo" />
-                </form>
-            </html>
-        ');
-
-        $nodes = $dom->getElementsByTagName('form');
-        $form = new Form($nodes->item(0), 'http://example.com');
-        $this->assertSame($nodes->item(0), $form->getFormNode(), '->getFormNode() returns the form node associated with this form');
-    }
-
-    public function testTypeAttributeIsCaseInsensitive()
-    {
-        $form = $this->createForm('<form method="post"><input type="IMAGE" name="example" /></form>');
-        $this->assertTrue($form->has('example.x'), '->has() returns true if the image input was correctly turned into an x and a y fields');
-        $this->assertTrue($form->has('example.y'), '->has() returns true if the image input was correctly turned into an x and a y fields');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testFormFieldRegistryAddThrowAnExceptionWhenTheNameIsMalformed()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->add($this->getFormFieldMock('[foo]'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testFormFieldRegistryRemoveThrowAnExceptionWhenTheNameIsMalformed()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->remove('[foo]');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testFormFieldRegistryGetThrowAnExceptionWhenTheNameIsMalformed()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->get('[foo]');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testFormFieldRegistryGetThrowAnExceptionWhenTheFieldDoesNotExist()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->get('foo');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testFormFieldRegistrySetThrowAnExceptionWhenTheNameIsMalformed()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->set('[foo]', null);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testFormFieldRegistrySetThrowAnExceptionWhenTheFieldDoesNotExist()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->set('foo', null);
-    }
-
-    public function testFormFieldRegistryHasReturnsTrueWhenTheFQNExists()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->add($this->getFormFieldMock('foo[bar]'));
-
-        $this->assertTrue($registry->has('foo'));
-        $this->assertTrue($registry->has('foo[bar]'));
-        $this->assertFalse($registry->has('bar'));
-        $this->assertFalse($registry->has('foo[foo]'));
-    }
-
-    public function testFormRegistryFieldsCanBeRemoved()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->add($this->getFormFieldMock('foo'));
-        $registry->remove('foo');
-        $this->assertFalse($registry->has('foo'));
-    }
-
-    public function testFormRegistrySupportsMultivaluedFields()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->add($this->getFormFieldMock('foo[]'));
-        $registry->add($this->getFormFieldMock('foo[]'));
-        $registry->add($this->getFormFieldMock('bar[5]'));
-        $registry->add($this->getFormFieldMock('bar[]'));
-        $registry->add($this->getFormFieldMock('bar[baz]'));
-
-        $this->assertEquals(
-            array('foo[0]', 'foo[1]', 'bar[5]', 'bar[6]', 'bar[baz]'),
-            array_keys($registry->all())
-        );
-    }
-
-    public function testFormRegistrySetValues()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->add($f2 = $this->getFormFieldMock('foo[2]'));
-        $registry->add($f3 = $this->getFormFieldMock('foo[3]'));
-        $registry->add($fbb = $this->getFormFieldMock('foo[bar][baz]'));
-
-        $f2
-            ->expects($this->exactly(2))
-            ->method('setValue')
-            ->with(2)
-        ;
-
-        $f3
-            ->expects($this->exactly(2))
-            ->method('setValue')
-            ->with(3)
-        ;
-
-        $fbb
-            ->expects($this->exactly(2))
-            ->method('setValue')
-            ->with('fbb')
-        ;
-
-        $registry->set('foo[2]', 2);
-        $registry->set('foo[3]', 3);
-        $registry->set('foo[bar][baz]', 'fbb');
-
-        $registry->set('foo', array(
-            2 => 2,
-            3 => 3,
-            'bar' => array(
-                'baz' => 'fbb',
-             ),
-        ));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Cannot set value on a compound field "foo[bar]".
-     */
-    public function testFormRegistrySetValueOnCompoundField()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->add($this->getFormFieldMock('foo[bar][baz]'));
-
-        $registry->set('foo[bar]', 'fbb');
-    }
-
-    /**
-     * @expectedException InvalidArgumentException
-     * @expectedExceptionMessage Unreachable field "0"
-     */
-    public function testFormRegistrySetArrayOnNotCompoundField()
-    {
-        $registry = new FormFieldRegistry();
-        $registry->add($this->getFormFieldMock('bar'));
-
-        $registry->set('bar', array('baz'));
-    }
-
-    public function testDifferentFieldTypesWithSameName()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-            <html>
-                <body>
-                    <form action="/">
-                        <input type="hidden" name="option" value="default">
-                        <input type="radio" name="option" value="A">
-                        <input type="radio" name="option" value="B">
-                        <input type="hidden" name="settings[1]" value="0">
-                        <input type="checkbox" name="settings[1]" value="1" id="setting-1">
-                        <button>klickme</button>
-                    </form>
-                </body>
-            </html>
-        ');
-        $form = new Form($dom->getElementsByTagName('form')->item(0), 'http://example.com');
-
-        $this->assertInstanceOf('Symfony\Component\DomCrawler\Field\ChoiceFormField', $form->get('option'));
-    }
-
-    protected function getFormFieldMock($name, $value = null)
-    {
-        $field = $this
-            ->getMockBuilder('Symfony\\Component\\DomCrawler\\Field\\FormField')
-            ->setMethods(array('getName', 'getValue', 'setValue', 'initialize'))
-            ->disableOriginalConstructor()
-            ->getMock()
-        ;
-
-        $field
-            ->expects($this->any())
-            ->method('getName')
-            ->will($this->returnValue($name))
-        ;
-
-        $field
-            ->expects($this->any())
-            ->method('getValue')
-            ->will($this->returnValue($value))
-        ;
-
-        return $field;
-    }
-
-    protected function createForm($form, $method = null, $currentUri = null)
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<html>'.$form.'</html>');
-
-        $xPath = new \DOMXPath($dom);
-        $nodes = $xPath->query('//input | //button');
-
-        if (null === $currentUri) {
-            $currentUri = 'http://example.com/';
-        }
-
-        return new Form($nodes->item($nodes->length - 1), $currentUri, $method);
-    }
-
-    protected function createTestHtml5Form()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-        <html>
-            <h1>Hello form</h1>
-            <form id="form-1" action="" method="POST">
-                <div><input type="checkbox" name="apples[]" value="1" checked /></div>
-                <input form="form_2" type="checkbox" name="oranges[]" value="1" checked />
-                <div><label></label><input form="form-1" type="hidden" name="form_name" value="form-1" /></div>
-                <input form="form-1" type="submit" name="button_1" value="Capture fields" />
-                <button form="form_2" type="submit" name="button_2">Submit form_2</button>
-            </form>
-            <input form="form-1" type="checkbox" name="apples[]" value="2" checked />
-            <form id="form_2" action="" method="POST">
-                <div><div><input type="checkbox" name="oranges[]" value="2" checked />
-                <input type="checkbox" name="oranges[]" value="3" checked /></div></div>
-                <input form="form_2" type="hidden" name="form_name" value="form_2" />
-                <input form="form-1" type="hidden" name="outer_field" value="success" />
-                <button form="form-1" type="submit" name="button_3">Submit from outside the form</button>
-                <div>
-                    <label for="app_frontend_form_type_contact_form_type_contactType">Message subject</label>
-                    <div>
-                        <select name="app_frontend_form_type_contact_form_type[contactType]" id="app_frontend_form_type_contact_form_type_contactType"><option selected="selected" value="">Please select subject</option><option id="1">Test type</option></select>
-                    </div>
-                </div>
-                <div>
-                    <label for="app_frontend_form_type_contact_form_type_firstName">Firstname</label>
-                    <input type="text" name="app_frontend_form_type_contact_form_type[firstName]" value="John" id="app_frontend_form_type_contact_form_type_firstName"/>
-                </div>
-            </form>
-            <button />
-        </html>');
-
-        return $dom;
-    }
-
-    protected function createTestMultipleForm()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-        <html>
-            <h1>Hello form</h1>
-            <form action="" method="POST">
-                <div><input type="checkbox" name="apples[]" value="1" checked /></div>
-                <input type="checkbox" name="oranges[]" value="1" checked />
-                <div><label></label><input type="hidden" name="form_name" value="form-1" /></div>
-                <input type="submit" name="button_1" value="Capture fields" />
-                <button type="submit" name="button_2">Submit form_2</button>
-            </form>
-            <form action="" method="POST">
-                <div><div><input type="checkbox" name="oranges[]" value="2" checked />
-                <input type="checkbox" name="oranges[]" value="3" checked /></div></div>
-                <input type="hidden" name="form_name" value="form_2" />
-                <input type="hidden" name="outer_field" value="success" />
-                <button type="submit" name="button_3">Submit from outside the form</button>
-            </form>
-            <button />
-        </html>');
-
-        return $dom;
-    }
-
-    public function testgetPhpValuesWithEmptyTextarea()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('
-              <html>
-                  <form>
-                      <textarea name="example"></textarea>
-                  </form>
-              </html>
-          ');
-
-        $nodes = $dom->getElementsByTagName('form');
-        $form = new Form($nodes->item(0), 'http://example.com');
-        $this->assertEquals($form->getPhpValues(), array('example' => ''));
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/Tests/LinkTest.php b/core/vendor/symfony/dom-crawler/Tests/LinkTest.php
deleted file mode 100644
index 98a45a3a0cef01e92aa66d1e0398c38ea23720ef..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/Tests/LinkTest.php
+++ /dev/null
@@ -1,160 +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\DomCrawler\Tests;
-
-use Symfony\Component\DomCrawler\Link;
-
-class LinkTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @expectedException \LogicException
-     */
-    public function testConstructorWithANonATag()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<html><div><div></html>');
-
-        new Link($dom->getElementsByTagName('div')->item(0), 'http://www.example.com/');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testConstructorWithAnInvalidCurrentUri()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<html><a href="/foo">foo</a></html>');
-
-        new Link($dom->getElementsByTagName('a')->item(0), 'example.com');
-    }
-
-    public function testGetNode()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<html><a href="/foo">foo</a></html>');
-
-        $node = $dom->getElementsByTagName('a')->item(0);
-        $link = new Link($node, 'http://example.com/');
-
-        $this->assertEquals($node, $link->getNode(), '->getNode() returns the node associated with the link');
-    }
-
-    public function testGetMethod()
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML('<html><a href="/foo">foo</a></html>');
-
-        $node = $dom->getElementsByTagName('a')->item(0);
-        $link = new Link($node, 'http://example.com/');
-
-        $this->assertEquals('GET', $link->getMethod(), '->getMethod() returns the method of the link');
-
-        $link = new Link($node, 'http://example.com/', 'post');
-        $this->assertEquals('POST', $link->getMethod(), '->getMethod() returns the method of the link');
-    }
-
-    /**
-     * @dataProvider getGetUriTests
-     */
-    public function testGetUri($url, $currentUri, $expected)
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML(sprintf('<html><a href="%s">foo</a></html>', $url));
-        $link = new Link($dom->getElementsByTagName('a')->item(0), $currentUri);
-
-        $this->assertEquals($expected, $link->getUri());
-    }
-
-    /**
-     * @dataProvider getGetUriTests
-     */
-    public function testGetUriOnArea($url, $currentUri, $expected)
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML(sprintf('<html><map><area href="%s" /></map></html>', $url));
-        $link = new Link($dom->getElementsByTagName('area')->item(0), $currentUri);
-
-        $this->assertEquals($expected, $link->getUri());
-    }
-
-    /**
-     * @dataProvider getGetUriTests
-     */
-    public function testGetUriOnLink($url, $currentUri, $expected)
-    {
-        $dom = new \DOMDocument();
-        $dom->loadHTML(sprintf('<html><head><link href="%s" /></head></html>', $url));
-        $link = new Link($dom->getElementsByTagName('link')->item(0), $currentUri);
-
-        $this->assertEquals($expected, $link->getUri());
-    }
-
-    public function getGetUriTests()
-    {
-        return array(
-            array('/foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('/foo', 'http://localhost/bar/foo', 'http://localhost/foo'),
-            array('
-            /foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('/foo
-            ', 'http://localhost/bar/foo', 'http://localhost/foo'),
-
-            array('foo', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo'),
-            array('foo', 'http://localhost/bar/foo', 'http://localhost/bar/foo'),
-
-            array('', 'http://localhost/bar/', 'http://localhost/bar/'),
-            array('#', 'http://localhost/bar/', 'http://localhost/bar/#'),
-            array('#bar', 'http://localhost/bar?a=b', 'http://localhost/bar?a=b#bar'),
-            array('#bar', 'http://localhost/bar/#foo', 'http://localhost/bar/#bar'),
-            array('?a=b', 'http://localhost/bar#foo', 'http://localhost/bar?a=b'),
-            array('?a=b', 'http://localhost/bar/', 'http://localhost/bar/?a=b'),
-
-            array('http://login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
-            array('https://login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'),
-            array('mailto:foo@bar.com', 'http://localhost/foo', 'mailto:foo@bar.com'),
-
-            // tests schema relative URL (issue #7169)
-            array('//login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
-            array('//login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'),
-
-            array('?foo=2', 'http://localhost?foo=1', 'http://localhost?foo=2'),
-            array('?foo=2', 'http://localhost/?foo=1', 'http://localhost/?foo=2'),
-            array('?foo=2', 'http://localhost/bar?foo=1', 'http://localhost/bar?foo=2'),
-            array('?foo=2', 'http://localhost/bar/?foo=1', 'http://localhost/bar/?foo=2'),
-            array('?bar=2', 'http://localhost?foo=1', 'http://localhost?bar=2'),
-
-            array('foo', 'http://login.foo.com/bar/baz?/query/string', 'http://login.foo.com/bar/foo'),
-
-            array('.', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'),
-            array('./', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'),
-            array('./foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/foo'),
-            array('..', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'),
-            array('../', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'),
-            array('../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/foo'),
-            array('../..', 'http://localhost/foo/bar/baz', 'http://localhost/'),
-            array('../../', 'http://localhost/foo/bar/baz', 'http://localhost/'),
-            array('../../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo'),
-            array('../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../bar/../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../bar/./../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../../', 'http://localhost/', 'http://localhost/'),
-            array('../../', 'http://localhost', 'http://localhost/'),
-
-            array('/foo', 'http://localhost?bar=1', 'http://localhost/foo'),
-            array('/foo', 'http://localhost#bar', 'http://localhost/foo'),
-            array('/foo', 'file:///', 'file:///foo'),
-            array('/foo', 'file:///bar/baz', 'file:///foo'),
-            array('foo', 'file:///', 'file:///foo'),
-            array('foo', 'file:///bar/baz', 'file:///bar/foo'),
-        );
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/composer.json b/core/vendor/symfony/dom-crawler/composer.json
deleted file mode 100644
index f3dc8c9bd429fe2f9247d2fc6fe1ed63da5d409e..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/composer.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-    "name": "symfony/dom-crawler",
-    "type": "library",
-    "description": "Symfony DomCrawler Component",
-    "keywords": [],
-    "homepage": "https://symfony.com",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Fabien Potencier",
-            "email": "fabien@symfony.com"
-        },
-        {
-            "name": "Symfony Community",
-            "homepage": "https://symfony.com/contributors"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.9"
-    },
-    "require-dev": {
-        "symfony/phpunit-bridge": "~2.7",
-        "symfony/css-selector": "~2.3"
-    },
-    "suggest": {
-        "symfony/css-selector": ""
-    },
-    "autoload": {
-        "psr-4": { "Symfony\\Component\\DomCrawler\\": "" }
-    },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "2.7-dev"
-        }
-    }
-}
diff --git a/core/vendor/symfony/dom-crawler/phpunit.xml.dist b/core/vendor/symfony/dom-crawler/phpunit.xml.dist
deleted file mode 100644
index d15dd6a48ed1e56f207cad75c5469128742d01e8..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/dom-crawler/phpunit.xml.dist
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony DomCrawler Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Resources</directory>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/core/vendor/symfony/event-dispatcher/Event.php b/core/vendor/symfony/event-dispatcher/Event.php
index 048bf0ac62ee412e91625a974743fab191b9b179..e411ca81360ad140d0e1c7f08623f3e2cba04fa0 100644
--- a/core/vendor/symfony/event-dispatcher/Event.php
+++ b/core/vendor/symfony/event-dispatcher/Event.php
@@ -97,7 +97,7 @@ public function setDispatcher(EventDispatcherInterface $dispatcher)
      */
     public function getDispatcher()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event dispatcher instance can be received in the listener call instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event dispatcher instance can be received in the listener call instead.', E_USER_DEPRECATED);
 
         return $this->dispatcher;
     }
@@ -113,7 +113,7 @@ public function getDispatcher()
      */
     public function getName()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event name can be received in the listener call instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The event name can be received in the listener call instead.', E_USER_DEPRECATED);
 
         return $this->name;
     }
diff --git a/core/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php b/core/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
index f9c7e0e8bef3f44fdfdf76cf05b717ab4f6068d1..5ff5be84d153592ee574aa4be02bd805c8e0d3f9 100644
--- a/core/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
+++ b/core/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
@@ -126,6 +126,8 @@ public function testDispatch()
      */
     public function testLegacyDispatch()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $event = new Event();
         $return = $this->dispatcher->dispatch(self::preFoo, $event);
         $this->assertEquals('pre.foo', $event->getName());
@@ -253,6 +255,8 @@ public function testRemoveSubscriberWithMultipleListeners()
      */
     public function testLegacyEventReceivesTheDispatcherInstance()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $dispatcher = null;
         $this->dispatcher->addListener('test', function ($event) use (&$dispatcher) {
             $dispatcher = $event->getDispatcher();
diff --git a/core/vendor/symfony/event-dispatcher/Tests/EventTest.php b/core/vendor/symfony/event-dispatcher/Tests/EventTest.php
index 9a822670cd5e41aa03a04fe456a41a4b27982e7d..4bd2697220e0d6fd9a0714fae88b529bee3910f4 100644
--- a/core/vendor/symfony/event-dispatcher/Tests/EventTest.php
+++ b/core/vendor/symfony/event-dispatcher/Tests/EventTest.php
@@ -65,6 +65,7 @@ public function testStopPropagationAndIsPropagationStopped()
      */
     public function testLegacySetDispatcher()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
         $this->event->setDispatcher($this->dispatcher);
         $this->assertSame($this->dispatcher, $this->event->getDispatcher());
     }
@@ -74,6 +75,7 @@ public function testLegacySetDispatcher()
      */
     public function testLegacyGetDispatcher()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
         $this->assertNull($this->event->getDispatcher());
     }
 
@@ -82,6 +84,7 @@ public function testLegacyGetDispatcher()
      */
     public function testLegacyGetName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
         $this->assertNull($this->event->getName());
     }
 
@@ -90,6 +93,7 @@ public function testLegacyGetName()
      */
     public function testLegacySetName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
         $this->event->setName('foo');
         $this->assertEquals('foo', $this->event->getName());
     }
diff --git a/core/vendor/symfony/http-foundation/Request.php b/core/vendor/symfony/http-foundation/Request.php
index c6d1e31ab374c836e7940b06b9c406d453b1f5c9..7c4afb03bdeec4f464cec73497d6860f8e3e9727 100644
--- a/core/vendor/symfony/http-foundation/Request.php
+++ b/core/vendor/symfony/http-foundation/Request.php
@@ -224,13 +224,13 @@ class Request
     /**
      * Constructor.
      *
-     * @param array           $query      The GET parameters
-     * @param array           $request    The POST parameters
-     * @param array           $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
-     * @param array           $cookies    The COOKIE parameters
-     * @param array           $files      The FILES parameters
-     * @param array           $server     The SERVER parameters
-     * @param string|resource $content    The raw body data
+     * @param array  $query      The GET parameters
+     * @param array  $request    The POST parameters
+     * @param array  $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
+     * @param array  $cookies    The COOKIE parameters
+     * @param array  $files      The FILES parameters
+     * @param array  $server     The SERVER parameters
+     * @param string $content    The raw body data
      *
      * @api
      */
@@ -244,13 +244,13 @@ public function __construct(array $query = array(), array $request = array(), ar
      *
      * This method also re-initializes all properties.
      *
-     * @param array           $query      The GET parameters
-     * @param array           $request    The POST parameters
-     * @param array           $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
-     * @param array           $cookies    The COOKIE parameters
-     * @param array           $files      The FILES parameters
-     * @param array           $server     The SERVER parameters
-     * @param string|resource $content    The raw body data
+     * @param array  $query      The GET parameters
+     * @param array  $request    The POST parameters
+     * @param array  $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
+     * @param array  $cookies    The COOKIE parameters
+     * @param array  $files      The FILES parameters
+     * @param array  $server     The SERVER parameters
+     * @param string $content    The raw body data
      *
      * @api
      */
@@ -1563,38 +1563,16 @@ public function isMethodSafe()
      */
     public function getContent($asResource = false)
     {
-        $currentContentIsResource = is_resource($this->content);
-        if (PHP_VERSION_ID < 50600 && false === $this->content) {
+        if (PHP_VERSION_ID < 50600 && (false === $this->content || (true === $asResource && null !== $this->content))) {
             throw new \LogicException('getContent() can only be called once when using the resource return type and PHP below 5.6.');
         }
 
         if (true === $asResource) {
-            if ($currentContentIsResource) {
-                rewind($this->content);
-
-                return $this->content;
-            }
-
-            // Content passed in parameter (test)
-            if (is_string($this->content)) {
-                $resource = fopen('php://temp','r+');
-                fwrite($resource, $this->content);
-                rewind($resource);
-
-                return $resource;
-            }
-
             $this->content = false;
 
             return fopen('php://input', 'rb');
         }
 
-        if ($currentContentIsResource) {
-            rewind($this->content);
-
-            return stream_get_contents($this->content);
-        }
-
         if (null === $this->content) {
             $this->content = file_get_contents('php://input');
         }
@@ -1924,8 +1902,7 @@ protected function preparePathInfo()
             $requestUri = substr($requestUri, 0, $pos);
         }
 
-        $pathInfo = substr($requestUri, strlen($baseUrl));
-        if (null !== $baseUrl && (false === $pathInfo || '' === $pathInfo)) {
+        if (null !== $baseUrl && false === $pathInfo = substr($requestUri, strlen($baseUrl))) {
             // If substr() returns false then PATH_INFO is set to an empty string
             return '/';
         } elseif (null === $baseUrl) {
diff --git a/core/vendor/symfony/http-foundation/Response.php b/core/vendor/symfony/http-foundation/Response.php
index 17fb98102bfa892d466f956ee6f9dab09246fa59..dc7203a8d1c8691197850e9572c6cd0f892ff335 100644
--- a/core/vendor/symfony/http-foundation/Response.php
+++ b/core/vendor/symfony/http-foundation/Response.php
@@ -1242,7 +1242,7 @@ public static function closeOutputBuffers($targetLevel, $flush)
     {
         $status = ob_get_status(true);
         $level = count($status);
-        $flags = defined('PHP_OUTPUT_HANDLER_REMOVABLE') ? PHP_OUTPUT_HANDLER_REMOVABLE | ($flush ? PHP_OUTPUT_HANDLER_FLUSHABLE : PHP_OUTPUT_HANDLER_CLEANABLE) : -1;
+        $flags = PHP_VERSION_ID >= 50400 ? PHP_OUTPUT_HANDLER_REMOVABLE | ($flush ? PHP_OUTPUT_HANDLER_FLUSHABLE : PHP_OUTPUT_HANDLER_CLEANABLE) : -1;
 
         while ($level-- > $targetLevel && ($s = $status[$level]) && (!isset($s['del']) ? !isset($s['flags']) || $flags === ($s['flags'] & $flags) : $s['del'])) {
             if ($flush) {
diff --git a/core/vendor/symfony/http-foundation/Tests/RequestTest.php b/core/vendor/symfony/http-foundation/Tests/RequestTest.php
index ed46999e87840e04ab229627c1addcc6d9c87b90..45574df4c46b49837566e9092c94083a5f4dc608 100644
--- a/core/vendor/symfony/http-foundation/Tests/RequestTest.php
+++ b/core/vendor/symfony/http-foundation/Tests/RequestTest.php
@@ -969,26 +969,6 @@ public function testGetContentReturnsResource()
         $this->assertTrue(feof($retval));
     }
 
-    public function testGetContentReturnsResourceWhenContentSetInConstructor()
-    {
-        $req = new Request(array(), array(), array(), array(), array(), array(), 'MyContent');
-        $resource = $req->getContent(true);
-
-        $this->assertTrue(is_resource($resource));
-        $this->assertEquals('MyContent', stream_get_contents($resource));
-    }
-
-    public function testContentAsResource()
-    {
-        $resource = fopen('php://memory','r+');
-        fwrite($resource, 'My other content');
-        rewind($resource);
-
-        $req = new Request(array(), array(), array(), array(), array(), array(), $resource);
-        $this->assertEquals('My other content', stream_get_contents($req->getContent(true)));
-        $this->assertEquals('My other content', $req->getContent());
-    }
-
     /**
      * @expectedException \LogicException
      * @dataProvider getContentCantBeCalledTwiceWithResourcesProvider
@@ -1033,6 +1013,7 @@ public function getContentCantBeCalledTwiceWithResourcesProvider()
         return array(
             'Resource then fetch' => array(true, false),
             'Resource then resource' => array(true, true),
+            'Fetch then resource' => array(false, true),
         );
     }
 
diff --git a/core/vendor/symfony/http-kernel/Client.php b/core/vendor/symfony/http-kernel/Client.php
index 50895e713d29808375c1776df60cc305bfe624f5..0503f5de5825371ad6e207de2a67bc7a24e1e0a0 100644
--- a/core/vendor/symfony/http-kernel/Client.php
+++ b/core/vendor/symfony/http-kernel/Client.php
@@ -101,7 +101,7 @@ protected function getScript($request)
 
         $r = new \ReflectionClass('\\Symfony\\Component\\ClassLoader\\ClassLoader');
         $requirePath = str_replace("'", "\\'", $r->getFileName());
-        $symfonyPath = str_replace("'", "\\'", dirname(dirname(dirname(__DIR__))));
+        $symfonyPath = str_replace("'", "\\'", realpath(__DIR__.'/../../..'));
         $errorReporting = error_reporting();
 
         $code = <<<EOF
diff --git a/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
index 9a499a737ad02c9a57f8402c5f5c1f1bcbd953ca..4d83e9a849b9d9c94892b87dd283718c84a2fbcb 100644
--- a/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
+++ b/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
@@ -129,10 +129,10 @@ public function collect(Request $request, Response $response, \Exception $except
                     $this->data['controller'] = array(
                         'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
                         'method' => $controller[1],
-                        'file' => $r->getFileName(),
+                        'file' => $r->getFilename(),
                         'line' => $r->getStartLine(),
                     );
-                } catch (\ReflectionException $e) {
+                } catch (\ReflectionException $re) {
                     if (is_callable($controller)) {
                         // using __call or  __callStatic
                         $this->data['controller'] = array(
@@ -148,7 +148,7 @@ public function collect(Request $request, Response $response, \Exception $except
                 $this->data['controller'] = array(
                     'class' => $r->getName(),
                     'method' => null,
-                    'file' => $r->getFileName(),
+                    'file' => $r->getFilename(),
                     'line' => $r->getStartLine(),
                 );
             } elseif (is_object($controller)) {
diff --git a/core/vendor/symfony/http-kernel/Debug/ErrorHandler.php b/core/vendor/symfony/http-kernel/Debug/ErrorHandler.php
index af714a30868876442a3010d3c0a215ca4cbd05c6..577265bfa04d3e171e3c5586527f540ca926b05b 100644
--- a/core/vendor/symfony/http-kernel/Debug/ErrorHandler.php
+++ b/core/vendor/symfony/http-kernel/Debug/ErrorHandler.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\Debug;
 
-@trigger_error('The '.__NAMESPACE__.'\ErrorHandler class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\ErrorHandler class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ErrorHandler class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\ErrorHandler class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Debug\ErrorHandler as DebugErrorHandler;
 
diff --git a/core/vendor/symfony/http-kernel/Debug/ExceptionHandler.php b/core/vendor/symfony/http-kernel/Debug/ExceptionHandler.php
index 50755d97ff972bd47b9e65f625870695c6fa7855..6ffba89f891ffd97a7a0164e7759d0fbf0bf043e 100644
--- a/core/vendor/symfony/http-kernel/Debug/ExceptionHandler.php
+++ b/core/vendor/symfony/http-kernel/Debug/ExceptionHandler.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\Debug;
 
-@trigger_error('The '.__NAMESPACE__.'\ExceptionHandler class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\ExceptionHandler class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ExceptionHandler class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\ExceptionHandler class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Debug\ExceptionHandler as DebugExceptionHandler;
 
diff --git a/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php b/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
index eb1d8a8e97ce4a99af95629dfa861e043a3098b7..0a82d76525491a70a1c6f332e997b646c18d3db8 100644
--- a/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
+++ b/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
@@ -38,7 +38,7 @@ class TraceableEventDispatcher extends BaseTraceableEventDispatcher
      */
     public function setProfiler(Profiler $profiler = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
     }
 
     /**
diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/ContainerAwareHttpKernel.php b/core/vendor/symfony/http-kernel/DependencyInjection/ContainerAwareHttpKernel.php
index 97aa74096266509a6d4b8aea6acefe142b9a8a9b..c64c4c3939981d81a471303e4f7c6194fb441724 100644
--- a/core/vendor/symfony/http-kernel/DependencyInjection/ContainerAwareHttpKernel.php
+++ b/core/vendor/symfony/http-kernel/DependencyInjection/ContainerAwareHttpKernel.php
@@ -46,7 +46,7 @@ public function __construct(EventDispatcherInterface $dispatcher, ContainerInter
         parent::__construct($dispatcher, $controllerResolver, $requestStack);
 
         if ($triggerDeprecation) {
-            @trigger_error('The '.__CLASS__.' class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpKernel class instead.', E_USER_DEPRECATED);
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpKernel class instead.', E_USER_DEPRECATED);
         }
 
         $this->container = $container;
diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
index dc44b2d4492268edb9eff6221634ae37bd96bf9c..c0cd8d4d5da861e840bf5a74d66933289b1cb028 100644
--- a/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
+++ b/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
@@ -60,7 +60,7 @@ public function process(ContainerBuilder $container)
 
             foreach ($tags as $tag) {
                 if (!isset($tag['alias'])) {
-                    @trigger_error(sprintf('Service "%s" will have to define the "alias" attribute on the "%s" tag as of Symfony 3.0.', $id, $this->rendererTag), E_USER_DEPRECATED);
+                    trigger_error(sprintf('Service "%s" will have to define the "alias" attribute on the "%s" tag as of Symfony 3.0.', $id, $this->rendererTag), E_USER_DEPRECATED);
 
                     // register the handler as a non-lazy-loaded one
                     $definition->addMethodCall('addRenderer', array(new Reference($id)));
diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterListenersPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterListenersPass.php
index f1c2247364f55344bdaa9bbfbe7b6fa07fddbf94..386476b3c9ed26445a65518cbe7aa8424cd3d932 100644
--- a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterListenersPass.php
+++ b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterListenersPass.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\DependencyInjection;
 
-@trigger_error('The '.__NAMESPACE__.'\RegisterListenersPass is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\RegisterListenersPass is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass as BaseRegisterListenersPass;
 
diff --git a/core/vendor/symfony/http-kernel/EventListener/ErrorsLoggerListener.php b/core/vendor/symfony/http-kernel/EventListener/ErrorsLoggerListener.php
index 80c3fe59708358c91a62e9476b33b7177b44d4df..230a9494362700e8fd81966b641524959c86b28f 100644
--- a/core/vendor/symfony/http-kernel/EventListener/ErrorsLoggerListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/ErrorsLoggerListener.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\EventListener;
 
-@trigger_error('The '.__NAMESPACE__.'\ErrorsLoggerListener class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\EventListener\DebugHandlersListener class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ErrorsLoggerListener class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\EventListener\DebugHandlersListener class instead.', E_USER_DEPRECATED);
 
 use Psr\Log\LoggerInterface;
 use Symfony\Component\Debug\ErrorHandler;
diff --git a/core/vendor/symfony/http-kernel/EventListener/EsiListener.php b/core/vendor/symfony/http-kernel/EventListener/EsiListener.php
index bceb672654934f5337940ab128b3243a58ce779c..9bede00564ba62315ff255cb0f004e9c9ca4a7e7 100644
--- a/core/vendor/symfony/http-kernel/EventListener/EsiListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/EsiListener.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\EventListener;
 
-@trigger_error('The '.__NAMESPACE__.'\EsiListener class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\EventListener\SurrogateListener class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\EsiListener class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\EventListener\SurrogateListener class instead.', E_USER_DEPRECATED);
 
 /**
  * EsiListener adds a Surrogate-Control HTTP header when the Response needs to be parsed for ESI.
diff --git a/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php b/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php
index 302faa17d02fab8e66ee98aebcfa92febb23c82d..3ff01ee1a3bdcda7569a9b4f7c453aef430ff050 100644
--- a/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php
@@ -94,7 +94,7 @@ protected function validateRequest(Request $request)
      */
     protected function getLocalIpAddresses()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3.19 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3.19 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         return array('127.0.0.1', 'fe80::1', '::1');
     }
diff --git a/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php b/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php
index 564f6dc9b5fbb24807eeb125ff199d8314d7332d..ef3911694a9703e0d735ac5e455651887e7a5c84 100644
--- a/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php
@@ -58,7 +58,7 @@ public function __construct($defaultLocale = 'en', RequestContextAwareInterface
      */
     public function setRequest(Request $request = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         if (null === $request) {
             return;
diff --git a/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php b/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
index 06a5bbf08bbfb9f77edf20a28c2e8cfc718ca103..781475a9925d2fb88053ceadf328af6b50adf64b 100644
--- a/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php
@@ -53,7 +53,7 @@ public function __construct(Profiler $profiler, RequestMatcherInterface $matcher
             // Prevent the deprecation notice to be triggered all the time.
             // The onKernelRequest() method fires some logic only when the
             // RequestStack instance is not provided as a dependency.
-            @trigger_error('Since version 2.4, the '.__METHOD__.' method must accept a RequestStack instance to get the request instead of using the '.__CLASS__.'::onKernelRequest method that will be removed in 3.0.', E_USER_DEPRECATED);
+            trigger_error('Since version 2.4, the '.__METHOD__.' method must accept a RequestStack instance to get the request instead of using the '.__CLASS__.'::onKernelRequest method that will be removed in 3.0.', E_USER_DEPRECATED);
         }
 
         $this->profiler = $profiler;
diff --git a/core/vendor/symfony/http-kernel/EventListener/RouterListener.php b/core/vendor/symfony/http-kernel/EventListener/RouterListener.php
index 297aab6fa12b2007e9b6a2087537ec20fc11d9bd..9a49e2f3c857c684f27cc4e55d218f16d8b72897 100644
--- a/core/vendor/symfony/http-kernel/EventListener/RouterListener.php
+++ b/core/vendor/symfony/http-kernel/EventListener/RouterListener.php
@@ -68,7 +68,7 @@ public function __construct($matcher, RequestContext $context = null, LoggerInte
         }
 
         if (!$requestStack instanceof RequestStack) {
-            @trigger_error('The '.__METHOD__.' method now requires a RequestStack instance as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
+            trigger_error('The '.__METHOD__.' method now requires a RequestStack instance as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
         }
 
         $this->matcher = $matcher;
@@ -90,7 +90,7 @@ public function __construct($matcher, RequestContext $context = null, LoggerInte
      */
     public function setRequest(Request $request = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be made private in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be made private in 3.0.', E_USER_DEPRECATED);
 
         $this->setCurrentRequest($request);
     }
@@ -140,7 +140,7 @@ public function onKernelRequest(GetResponseEvent $event)
             }
 
             if (null !== $this->logger) {
-                $this->logger->info(sprintf('Matched route "%s".', isset($parameters['_route']) ? $parameters['_route'] : 'n/a'), array(
+                $this->logger->info(sprintf('Matched route "%s".', $parameters['_route']), array(
                     'route_parameters' => $parameters,
                     'request_uri' => $request->getUri(),
                 ));
diff --git a/core/vendor/symfony/http-kernel/Exception/FatalErrorException.php b/core/vendor/symfony/http-kernel/Exception/FatalErrorException.php
index 0d2b4f92a91d7b0a7b5ea6e84eb53243002d661c..681d9d6199ccc62ecf4625d49ff678865c8feb0d 100644
--- a/core/vendor/symfony/http-kernel/Exception/FatalErrorException.php
+++ b/core/vendor/symfony/http-kernel/Exception/FatalErrorException.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\Exception;
 
-@trigger_error('The '.__NAMESPACE__.'\FatalErrorException class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\Exception\FatalErrorException class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\FatalErrorException class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\Exception\FatalErrorException class instead.', E_USER_DEPRECATED);
 
 /*
  * Fatal Error Exception.
diff --git a/core/vendor/symfony/http-kernel/Exception/FlattenException.php b/core/vendor/symfony/http-kernel/Exception/FlattenException.php
index 599aa959fc75a31c860c4abddc503c4506ccbea9..eb205a18efcdc7e24a06cebbf4022610d80c7716 100644
--- a/core/vendor/symfony/http-kernel/Exception/FlattenException.php
+++ b/core/vendor/symfony/http-kernel/Exception/FlattenException.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\Exception;
 
-@trigger_error('The '.__NAMESPACE__.'\FlattenException class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\Exception\FlattenException class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\FlattenException class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Debug\Exception\FlattenException class instead.', E_USER_DEPRECATED);
 
 /*
  * FlattenException wraps a PHP Exception to be able to serialize it.
diff --git a/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php b/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
index 774870a273a354f213d7d72f3d388667e2e615a9..eae715e8acb5e569cb049f63865c80269d763b7d 100644
--- a/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
+++ b/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
@@ -80,7 +80,7 @@ public function addRenderer(FragmentRendererInterface $renderer)
      */
     public function setRequest(Request $request = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $this->request = $request;
     }
diff --git a/core/vendor/symfony/http-kernel/HttpCache/Esi.php b/core/vendor/symfony/http-kernel/HttpCache/Esi.php
index e4e0a4be6f1a0ce6bdfead5917e890e4a665fd18..f7031b81fa32d0717155bf0ca0370dc25edddc78 100644
--- a/core/vendor/symfony/http-kernel/HttpCache/Esi.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/Esi.php
@@ -87,7 +87,7 @@ public function hasSurrogateCapability(Request $request)
      */
     public function hasSurrogateEsiCapability(Request $request)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the hasSurrogateCapability() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the hasSurrogateCapability() method instead.', E_USER_DEPRECATED);
 
         return $this->hasSurrogateCapability($request);
     }
@@ -114,7 +114,7 @@ public function addSurrogateCapability(Request $request)
      */
     public function addSurrogateEsiCapability(Request $request)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the addSurrogateCapability() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the addSurrogateCapability() method instead.', E_USER_DEPRECATED);
 
         $this->addSurrogateCapability($request);
     }
@@ -160,7 +160,7 @@ public function needsParsing(Response $response)
      */
     public function needsEsiParsing(Response $response)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the needsParsing() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the needsParsing() method instead.', E_USER_DEPRECATED);
 
         return $this->needsParsing($response);
     }
@@ -234,7 +234,7 @@ public function process(Request $request, Response $response)
             $chunks[$i] = sprintf('<?php echo $this->surrogate->handle($this, %s, %s, %s) ?>'."\n",
                 var_export($options['src'], true),
                 var_export(isset($options['alt']) ? $options['alt'] : '', true),
-                isset($options['onerror']) && 'continue' === $options['onerror'] ? 'true' : 'false'
+                isset($options['onerror']) && 'continue' == $options['onerror'] ? 'true' : 'false'
             );
             ++$i;
             $chunks[$i] = str_replace($this->phpEscapeMap[0], $this->phpEscapeMap[1], $chunks[$i]);
diff --git a/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategy.php b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategy.php
index 636f60e9390670e0240fcc8d97d8e5c67aafd0fb..0d855464a37e43b189b351b82e5d4d8a0c9defd1 100644
--- a/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategy.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategy.php
@@ -15,7 +15,7 @@
 
 namespace Symfony\Component\HttpKernel\HttpCache;
 
-@trigger_error('The '.__NAMESPACE__.'\EsiResponseCacheStrategy class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpCache\ResponseCacheStrategy class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\EsiResponseCacheStrategy class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpCache\ResponseCacheStrategy class instead.', E_USER_DEPRECATED);
 
 /**
  * EsiResponseCacheStrategy knows how to compute the Response cache HTTP header
diff --git a/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategyInterface.php b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategyInterface.php
index 2320867d43984f1ba44efa3e3a87e6afdeec848e..22abb88639c04c87084f4d873972c15929134300 100644
--- a/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategyInterface.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/EsiResponseCacheStrategyInterface.php
@@ -15,7 +15,7 @@
 
 namespace Symfony\Component\HttpKernel\HttpCache;
 
-@trigger_error('The '.__NAMESPACE__.'\EsiResponseCacheStrategyInterface class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpCache\ResponseCacheStrategyInterface class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\EsiResponseCacheStrategyInterface class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpKernel\HttpCache\ResponseCacheStrategyInterface class instead.', E_USER_DEPRECATED);
 
 /**
  * ResponseCacheStrategyInterface implementations know how to compute the
diff --git a/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php b/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php
index da90600bba54975e54755cd6bbf3fd8011ee8188..b6ccafc18815c894bd53605aed330b3420ffea9a 100644
--- a/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php
+++ b/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php
@@ -160,11 +160,7 @@ public function getKernel()
      */
     public function getSurrogate()
     {
-        if (!$this->surrogate instanceof Esi) {
-            throw new \LogicException('This instance of HttpCache was not set up to use ESI as surrogate handler. You must overwrite and use createSurrogate');
-        }
-
-        return $this->surrogate;
+        return $this->getEsi();
     }
 
     /**
@@ -178,9 +174,13 @@ public function getSurrogate()
      */
     public function getEsi()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getSurrogate() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getSurrogate() method instead.', E_USER_DEPRECATED);
 
-        return $this->getSurrogate();
+        if (!$this->surrogate instanceof Esi) {
+            throw new \LogicException('This instance of HttpCache was not set up to use ESI as surrogate handler. You must overwrite and use createSurrogate');
+        }
+
+        return $this->surrogate;
     }
 
     /**
@@ -388,7 +388,7 @@ protected function validate(Request $request, Response $entry, $catch = false)
         // We keep the etags from the client to handle the case when the client
         // has a different private valid entry which is not cached here.
         $cachedEtags = $entry->getEtag() ? array($entry->getEtag()) : array();
-        $requestEtags = $request->getETags();
+        $requestEtags = $request->getEtags();
         if ($etags = array_unique(array_merge($cachedEtags, $requestEtags))) {
             $subRequest->headers->set('if_none_match', implode(', ', $etags));
         }
diff --git a/core/vendor/symfony/http-kernel/Kernel.php b/core/vendor/symfony/http-kernel/Kernel.php
index ccb89dadd7a8fcfb15464784da41596db99595af..41defa20575c757a8440a143123e8141e3bf41f9 100644
--- a/core/vendor/symfony/http-kernel/Kernel.php
+++ b/core/vendor/symfony/http-kernel/Kernel.php
@@ -60,11 +60,11 @@
     protected $startTime;
     protected $loadClassCache;
 
-    const VERSION = '2.7.3';
-    const VERSION_ID = '20703';
+    const VERSION = '2.7.0';
+    const VERSION_ID = '20700';
     const MAJOR_VERSION = '2';
     const MINOR_VERSION = '7';
-    const RELEASE_VERSION = '3';
+    const RELEASE_VERSION = '0';
     const EXTRA_VERSION = '';
 
     const END_OF_MAINTENANCE = '05/2018';
@@ -93,7 +93,7 @@ public function __construct($environment, $debug)
         $defClass = $defClass->getDeclaringClass()->name;
 
         if (__CLASS__ !== $defClass) {
-            @trigger_error(sprintf('Calling the %s::init() method is deprecated since version 2.3 and will be removed in 3.0. Move your logic to the constructor method instead.', $defClass), E_USER_DEPRECATED);
+            trigger_error(sprintf('Calling the %s::init() method is deprecated since version 2.3 and will be removed in 3.0. Move your logic to the constructor method instead.', $defClass), E_USER_DEPRECATED);
             $this->init();
         }
     }
@@ -103,7 +103,7 @@ public function __construct($environment, $debug)
      */
     public function init()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Move your logic to the constructor method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Move your logic to the constructor method instead.', E_USER_DEPRECATED);
     }
 
     public function __clone()
@@ -225,7 +225,7 @@ public function getBundles()
      */
     public function isClassInActiveBundle($class)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in version 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in version 3.0.', E_USER_DEPRECATED);
 
         foreach ($this->getBundles() as $bundle) {
             if (0 === strpos($class, $bundle->getNamespace())) {
diff --git a/core/vendor/symfony/http-kernel/Log/NullLogger.php b/core/vendor/symfony/http-kernel/Log/NullLogger.php
index b9e3ac495856cb1f03c0d2556f86352012387d4b..915773b0088f30d216b22cde7304b227c139b33f 100644
--- a/core/vendor/symfony/http-kernel/Log/NullLogger.php
+++ b/core/vendor/symfony/http-kernel/Log/NullLogger.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\Log;
 
-@trigger_error('The '.__NAMESPACE__.'\NullLogger class is deprecated since version 2.2 and will be removed in 3.0. Use the Psr\Log\NullLogger class instead from the psr/log Composer package.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\NullLogger class is deprecated since version 2.2 and will be removed in 3.0. Use the Psr\Log\NullLogger class instead from the psr/log Composer package.', E_USER_DEPRECATED);
 
 use Psr\Log\NullLogger as PsrNullLogger;
 
@@ -29,7 +29,7 @@ class NullLogger extends PsrNullLogger implements LoggerInterface
      */
     public function emerg($message, array $context = array())
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new emergency() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new emergency() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
     }
 
     /**
@@ -37,7 +37,7 @@ public function emerg($message, array $context = array())
      */
     public function crit($message, array $context = array())
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new critical() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new critical() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
     }
 
     /**
@@ -45,7 +45,7 @@ public function crit($message, array $context = array())
      */
     public function err($message, array $context = array())
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new error() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new error() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
     }
 
     /**
@@ -53,6 +53,6 @@ public function err($message, array $context = array())
      */
     public function warn($message, array $context = array())
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new warning() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. You should use the new warning() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
     }
 }
diff --git a/core/vendor/symfony/http-kernel/Profiler/MemcacheProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/MemcacheProfilerStorage.php
index 2727405cb1e0cbbc09329652a6f0ee3801abec8c..e90083fb7e2cff57e3636c8e2bf9594c1dc87d22 100644
--- a/core/vendor/symfony/http-kernel/Profiler/MemcacheProfilerStorage.php
+++ b/core/vendor/symfony/http-kernel/Profiler/MemcacheProfilerStorage.php
@@ -41,7 +41,7 @@ protected function getMemcache()
             $port = $matches[3];
 
             $memcache = new \Memcache();
-            $memcache->addserver($host, $port);
+            $memcache->addServer($host, $port);
 
             $this->memcache = $memcache;
         }
diff --git a/core/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php b/core/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
index 4a0dc263b7d8ac0f3f680c84aa3bc9f058159f2c..4aa01f0e7c371a387915d3cb4924a41b14e7df6b 100644
--- a/core/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
@@ -37,9 +37,9 @@ public function testCollect()
 
         // if else clause because we don't know it
         if (extension_loaded('xdebug')) {
-            $this->assertTrue($c->hasXDebug());
+            $this->assertTrue($c->hasXdebug());
         } else {
-            $this->assertFalse($c->hasXDebug());
+            $this->assertFalse($c->hasXdebug());
         }
 
         // if else clause because we don't know it
diff --git a/core/vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
index c32f5bb01a4f136d3051a611ece6b2c0d2fd7377..d64cf68a4190d864314b32543b4928ebec8395c8 100644
--- a/core/vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php
@@ -103,10 +103,10 @@ public function testHandleRestoresThePreviousRequestOnException($type)
         try {
             $kernel->handle($request, $type);
             $this->fail('->handle() suppresses the controller exception');
-        } catch (\PHPUnit_Framework_Exception $e) {
-            throw $e;
-        } catch (\Exception $e) {
-            $this->assertSame($expected, $e, '->handle() throws the controller exception');
+        } catch (\PHPUnit_Framework_Exception $exception) {
+            throw $exception;
+        } catch (\Exception $actual) {
+            $this->assertSame($expected, $actual, '->handle() throws the controller exception');
         }
     }
 
diff --git a/core/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
index 3e2bfd072aaa874cacf2d60d7cda5f9c791c796d..a46a07cf1d989b504f46fa5d2445c954fe0dbba7 100644
--- a/core/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
@@ -23,6 +23,8 @@ class FragmentRendererPassTest extends \PHPUnit_Framework_TestCase
      */
     public function testLegacyFragmentRedererWithoutAlias()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         // no alias
         $services = array(
             'my_content_renderer' => array(array()),
diff --git a/core/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
index fd5d63b1675690c44c53967226a9c6e71b8e7cff..18edee6123c79edcc2fd1c078c40edfcf769e6d7 100644
--- a/core/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
@@ -34,6 +34,7 @@ public function testOnlyTriggeredOnFragmentRoute()
         $this->assertTrue($request->query->has('_path'));
     }
 
+
     public function testOnlyTriggeredIfControllerWasNotDefinedYet()
     {
         $request = Request::create('http://example.com/_fragment?_path=foo%3Dbar%26_controller%3Dfoo');
diff --git a/core/vendor/symfony/http-kernel/Tests/EventListener/ProfilerListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/ProfilerListenerTest.php
index 84ff0d6f50bc5295747756bfb443533664816e1c..605ea9dd24ce6b16f537fcc5a79536927c525e86 100644
--- a/core/vendor/symfony/http-kernel/Tests/EventListener/ProfilerListenerTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/EventListener/ProfilerListenerTest.php
@@ -29,6 +29,8 @@ class ProfilerListenerTest extends \PHPUnit_Framework_TestCase
      */
     public function testLegacyEventsWithoutRequestStack()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $profile = $this->getMockBuilder('Symfony\Component\HttpKernel\Profiler\Profile')
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/core/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php b/core/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
index 245b53aceaff8933f7c1cd5a20d4538801a0e8a1..d6e5b45ba13031d3966843b6ee55177167dea98a 100644
--- a/core/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
@@ -128,34 +128,4 @@ public function testSubRequestWithDifferentMethod()
 
         $this->assertEquals('GET', $context->getMethod());
     }
-
-    /**
-     * @dataProvider getLoggingParameterData
-     */
-    public function testLoggingParameter($parameter, $log)
-    {
-        $requestMatcher = $this->getMock('Symfony\Component\Routing\Matcher\RequestMatcherInterface');
-        $requestMatcher->expects($this->once())
-          ->method('matchRequest')
-          ->will($this->returnValue($parameter));
-
-        $logger = $this->getMock('Psr\Log\LoggerInterface');
-        $logger->expects($this->once())
-          ->method('info')
-          ->with($this->equalTo($log));
-
-        $kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
-        $request = Request::create('http://localhost/');
-
-        $listener = new RouterListener($requestMatcher, new RequestContext(), $logger, $this->requestStack);
-        $listener->onKernelRequest(new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST));
-    }
-
-    public function getLoggingParameterData()
-    {
-        return array(
-            array(array('_route' => 'foo'), 'Matched route "foo".'),
-            array(array(), 'Matched route "n/a".'),
-        );
-    }
 }
diff --git a/core/vendor/symfony/http-kernel/Tests/KernelTest.php b/core/vendor/symfony/http-kernel/Tests/KernelTest.php
index c9e00dd68ea7504f5f5bcb63e4b224f1fb7256cf..2b75ba222f4f9fdc7d93e0b344a2680ec52ea8af 100644
--- a/core/vendor/symfony/http-kernel/Tests/KernelTest.php
+++ b/core/vendor/symfony/http-kernel/Tests/KernelTest.php
@@ -344,6 +344,8 @@ public function testLegacyIsClassInActiveBundleTrue()
 
     protected function getKernelMockForIsClassInActiveBundleTest()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $bundle = new FooBarBundle();
 
         $kernel = $this->getKernel(array('getBundles'));
diff --git a/core/vendor/symfony/http-kernel/Tests/Logger.php b/core/vendor/symfony/http-kernel/Tests/Logger.php
index 54300960d3fe429f9fc7f9b14104357d2b58ee7e..017518a3059dd3bac87262816be7c71b8ddecea4 100644
--- a/core/vendor/symfony/http-kernel/Tests/Logger.php
+++ b/core/vendor/symfony/http-kernel/Tests/Logger.php
@@ -91,7 +91,7 @@ public function debug($message, array $context = array())
      */
     public function emerg($message, array $context = array())
     {
-        @trigger_error('Use emergency() which is PSR-3 compatible', E_USER_DEPRECATED);
+        trigger_error('Use emergency() which is PSR-3 compatible', E_USER_DEPRECATED);
 
         $this->log('emergency', $message, $context);
     }
@@ -101,7 +101,7 @@ public function emerg($message, array $context = array())
      */
     public function crit($message, array $context = array())
     {
-        @trigger_error('Use critical() which is PSR-3 compatible', E_USER_DEPRECATED);
+        trigger_error('Use critical() which is PSR-3 compatible', E_USER_DEPRECATED);
 
         $this->log('critical', $message, $context);
     }
@@ -111,7 +111,7 @@ public function crit($message, array $context = array())
      */
     public function err($message, array $context = array())
     {
-        @trigger_error('Use error() which is PSR-3 compatible', E_USER_DEPRECATED);
+        trigger_error('Use error() which is PSR-3 compatible', E_USER_DEPRECATED);
 
         $this->log('error', $message, $context);
     }
@@ -121,7 +121,7 @@ public function err($message, array $context = array())
      */
     public function warn($message, array $context = array())
     {
-        @trigger_error('Use warning() which is PSR-3 compatible', E_USER_DEPRECATED);
+        trigger_error('Use warning() which is PSR-3 compatible', E_USER_DEPRECATED);
 
         $this->log('warning', $message, $context);
     }
diff --git a/core/vendor/symfony/http-kernel/composer.json b/core/vendor/symfony/http-kernel/composer.json
index a63b6b3f4854585c51ef4152deb6543e1fb415d5..9c1cc0b61cf0e51cf4404f74f3016e7fc679e428 100644
--- a/core/vendor/symfony/http-kernel/composer.json
+++ b/core/vendor/symfony/http-kernel/composer.json
@@ -17,7 +17,7 @@
     ],
     "require": {
         "php": ">=5.3.9",
-        "symfony/event-dispatcher": "~2.6,>=2.6.7",
+        "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
         "symfony/http-foundation": "~2.5,>=2.5.4",
         "symfony/debug": "~2.6,>=2.6.2",
         "psr/log": "~1.0"
diff --git a/core/vendor/symfony/process/PhpExecutableFinder.php b/core/vendor/symfony/process/PhpExecutableFinder.php
index f8f57cc536a2532246852078ec1228552a233176..91d6d78a67036a7efc042b71da79e3091298d3f8 100644
--- a/core/vendor/symfony/process/PhpExecutableFinder.php
+++ b/core/vendor/symfony/process/PhpExecutableFinder.php
@@ -37,7 +37,7 @@ public function find($includeArgs = true)
     {
         // HHVM support
         if (defined('HHVM_VERSION')) {
-            return (getenv('PHP_BINARY') ?: PHP_BINARY).($includeArgs ? ' '.implode(' ', $this->findArguments()) : '');
+            return (false !== ($hhvm = getenv('PHP_BINARY')) ? $hhvm : PHP_BINARY).($includeArgs ? ' '.implode(' ', $this->findArguments()) : '');
         }
 
         // PHP_BINARY return the current sapi executable
diff --git a/core/vendor/symfony/process/Process.php b/core/vendor/symfony/process/Process.php
index 1474d698276482190d3ad1b7a7f2f096cb0c9367..fdb395de825ffdcee6e1d33377ee99bed6da7c86 100644
--- a/core/vendor/symfony/process/Process.php
+++ b/core/vendor/symfony/process/Process.php
@@ -1069,7 +1069,7 @@ public function setEnv(array $env)
      */
     public function getStdin()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getInput() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getInput() method instead.', E_USER_DEPRECATED);
 
         return $this->getInput();
     }
@@ -1099,7 +1099,7 @@ public function getInput()
      */
     public function setStdin($stdin)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the setInput() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the setInput() method instead.', E_USER_DEPRECATED);
 
         return $this->setInput($stdin);
     }
diff --git a/core/vendor/symfony/process/ProcessUtils.php b/core/vendor/symfony/process/ProcessUtils.php
index 4f30b630dcfe53b29b4cff2c4ef92e480ec7a764..488010bacf9388223a536eb7ac89afe43f3724aa 100644
--- a/core/vendor/symfony/process/ProcessUtils.php
+++ b/core/vendor/symfony/process/ProcessUtils.php
@@ -49,7 +49,7 @@ public static function escapeArgument($argument)
 
             $escapedArgument = '';
             $quote = false;
-            foreach (preg_split('/(")/', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) {
+            foreach (preg_split('/(")/i', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) {
                 if ('"' === $part) {
                     $escapedArgument .= '\\"';
                 } elseif (self::isSurroundedBy($part, '%')) {
@@ -97,7 +97,7 @@ public static function validateInput($caller, $input)
             }
             // deprecated as of Symfony 2.5, to be removed in 3.0
             if (is_object($input) && method_exists($input, '__toString')) {
-                @trigger_error('Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+                trigger_error('Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
                 return (string) $input;
             }
diff --git a/core/vendor/symfony/process/Tests/AbstractProcessTest.php b/core/vendor/symfony/process/Tests/AbstractProcessTest.php
index 2add8cc9385285cae1b8013a612c238ee67799ac..2a4d583cb2b369bf36ca7210bd689ba903ecb3e2 100644
--- a/core/vendor/symfony/process/Tests/AbstractProcessTest.php
+++ b/core/vendor/symfony/process/Tests/AbstractProcessTest.php
@@ -11,30 +11,21 @@
 
 namespace Symfony\Component\Process\Tests;
 
-use Symfony\Component\Process\Exception\LogicException;
 use Symfony\Component\Process\Exception\ProcessTimedOutException;
-use Symfony\Component\Process\Exception\RuntimeException;
-use Symfony\Component\Process\PhpExecutableFinder;
+use Symfony\Component\Process\Exception\LogicException;
 use Symfony\Component\Process\Pipes\PipesInterface;
 use Symfony\Component\Process\Process;
+use Symfony\Component\Process\Exception\RuntimeException;
 
 /**
  * @author Robert SchÃ¶nthal <seroscho@googlemail.com>
  */
 abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 {
-    protected static $phpBin;
-
-    public static function setUpBeforeClass()
-    {
-        $phpBin = new PhpExecutableFinder();
-        self::$phpBin = $phpBin->find();
-    }
-
     public function testThatProcessDoesNotThrowWarningDuringRun()
     {
         @trigger_error('Test Error', E_USER_NOTICE);
-        $process = $this->getProcess(self::$phpBin." -r 'sleep(3)'");
+        $process = $this->getProcess("php -r 'sleep(3)'");
         $process->run();
         $actualError = error_get_last();
         $this->assertEquals('Test Error', $actualError['message']);
@@ -104,7 +95,7 @@ public function testAllOutputIsActuallyReadOnTermination()
         $expectedOutputSize = PipesInterface::CHUNK_SIZE * 2 + 2;
 
         $code = sprintf('echo str_repeat(\'*\', %d);', $expectedOutputSize);
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
 
         $p->start();
         // Let's wait enough time for process to finish...
@@ -143,7 +134,7 @@ public function testCallbacksAreExecutedWithStart()
      */
     public function testProcessResponses($expected, $getter, $code)
     {
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
         $p->run();
 
         $this->assertSame($expected, $p->$getter());
@@ -159,7 +150,7 @@ public function testProcessPipes($code, $size)
         $expected = str_repeat(str_repeat('*', 1024), $size).'!';
         $expectedLength = (1024 * $size) + 1;
 
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
         $p->setInput($expected);
         $p->run();
 
@@ -179,7 +170,7 @@ public function testSetStreamAsInput($code, $size)
         fwrite($stream, $expected);
         rewind($stream);
 
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code)));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
         $p->setInput($stream);
         $p->run();
 
@@ -191,7 +182,7 @@ public function testSetStreamAsInput($code, $size)
 
     public function testSetInputWhileRunningThrowsAnException()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $process = $this->getProcess('php -r "usleep(500000);"');
         $process->start();
         try {
             $process->setInput('foobar');
@@ -210,7 +201,7 @@ public function testSetInputWhileRunningThrowsAnException()
      */
     public function testInvalidInput($value)
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -v');
         $process->setInput($value);
     }
 
@@ -227,7 +218,7 @@ public function provideInvalidInputValues()
      */
     public function testValidInput($expected, $value)
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -v');
         $process->setInput($value);
         $this->assertSame($expected, $process->getInput());
     }
@@ -247,7 +238,9 @@ public function provideInputValues()
      */
     public function testLegacyValidInput($expected, $value)
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $process = $this->getProcess('php -v');
         $process->setInput($value);
         $this->assertSame($expected, $process->getInput());
     }
@@ -285,7 +278,7 @@ public function testChainedCommandsOutput($expected, $operator, $input)
 
     public function testCallbackIsExecutedForOutput()
     {
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('echo \'foo\';')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('echo \'foo\';')));
 
         $called = false;
         $p->run(function ($type, $buffer) use (&$called) {
@@ -297,7 +290,7 @@ public function testCallbackIsExecutedForOutput()
 
     public function testGetErrorOutput()
     {
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }')));
 
         $p->run();
         $this->assertEquals(3, preg_match_all('/ERROR/', $p->getErrorOutput(), $matches));
@@ -310,7 +303,7 @@ public function testGetIncrementalErrorOutput()
         $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
         file_put_contents($lock, 'W');
 
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
 
         $p->start();
         while ($p->isRunning()) {
@@ -326,7 +319,7 @@ public function testGetIncrementalErrorOutput()
 
     public function testFlushErrorOutput()
     {
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }')));
 
         $p->run();
         $p->clearErrorOutput();
@@ -340,7 +333,7 @@ public function testGetEmptyIncrementalErrorOutput()
         $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
         file_put_contents($lock, 'W');
 
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
 
         $p->start();
 
@@ -366,7 +359,7 @@ public function testGetEmptyIncrementalErrorOutput()
 
     public function testGetOutput()
     {
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { echo \' foo \'; $n++; }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { echo \' foo \'; $n++; }')));
 
         $p->run();
         $this->assertEquals(3, preg_match_all('/foo/', $p->getOutput(), $matches));
@@ -379,7 +372,7 @@ public function testGetIncrementalOutput()
         $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
         file_put_contents($lock, 'W');
 
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
 
         $p->start();
         while ($p->isRunning()) {
@@ -395,7 +388,7 @@ public function testGetIncrementalOutput()
 
     public function testFlushOutput()
     {
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n=0;while ($n<3) {echo \' foo \';$n++;}')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n=0;while ($n<3) {echo \' foo \';$n++;}')));
 
         $p->run();
         $p->clearOutput();
@@ -409,7 +402,7 @@ public function testGetEmptyIncrementalOutput()
         $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
         file_put_contents($lock, 'W');
 
-        $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
 
         $p->start();
 
@@ -555,7 +548,7 @@ public function testExitCodeText()
 
     public function testStartIsNonBlocking()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $process = $this->getProcess('php -r "usleep(500000);"');
         $start = microtime(true);
         $process->start();
         $end = microtime(true);
@@ -565,14 +558,14 @@ public function testStartIsNonBlocking()
 
     public function testUpdateStatus()
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -h');
         $process->run();
         $this->assertTrue(strlen($process->getOutput()) > 0);
     }
 
     public function testGetExitCodeIsNullOnStart()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(200000);"');
+        $process = $this->getProcess('php -r "usleep(200000);"');
         $this->assertNull($process->getExitCode());
         $process->start();
         $this->assertNull($process->getExitCode());
@@ -582,7 +575,7 @@ public function testGetExitCodeIsNullOnStart()
 
     public function testGetExitCodeIsNullOnWhenStartingAgain()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(200000);"');
+        $process = $this->getProcess('php -r "usleep(200000);"');
         $process->run();
         $this->assertEquals(0, $process->getExitCode());
         $process->start();
@@ -593,14 +586,14 @@ public function testGetExitCodeIsNullOnWhenStartingAgain()
 
     public function testGetExitCode()
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $process->run();
         $this->assertSame(0, $process->getExitCode());
     }
 
     public function testStatus()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $process = $this->getProcess('php -r "usleep(500000);"');
         $this->assertFalse($process->isRunning());
         $this->assertFalse($process->isStarted());
         $this->assertFalse($process->isTerminated());
@@ -619,7 +612,7 @@ public function testStatus()
 
     public function testStop()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"');
+        $process = $this->getProcess('php -r "sleep(4);"');
         $process->start();
         $this->assertTrue($process->isRunning());
         $process->stop();
@@ -628,14 +621,14 @@ public function testStop()
 
     public function testIsSuccessful()
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $process->run();
         $this->assertTrue($process->isSuccessful());
     }
 
     public function testIsSuccessfulOnlyAfterTerminated()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"');
+        $process = $this->getProcess('php -r "sleep(1);"');
         $process->start();
         while ($process->isRunning()) {
             $this->assertFalse($process->isSuccessful());
@@ -647,7 +640,7 @@ public function testIsSuccessfulOnlyAfterTerminated()
 
     public function testIsNotSuccessful()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);throw new \Exception(\'BOUM\');"');
+        $process = $this->getProcess('php -r "usleep(500000);throw new \Exception(\'BOUM\');"');
         $process->start();
         $this->assertTrue($process->isRunning());
         $process->wait();
@@ -660,7 +653,7 @@ public function testProcessIsNotSignaled()
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $process->run();
         $this->assertFalse($process->hasBeenSignaled());
     }
@@ -671,7 +664,7 @@ public function testProcessWithoutTermSignalIsNotSignaled()
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $process->run();
         $this->assertFalse($process->hasBeenSignaled());
     }
@@ -682,7 +675,7 @@ public function testProcessWithoutTermSignal()
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $process->run();
         $this->assertEquals(0, $process->getTermSignal());
     }
@@ -693,7 +686,7 @@ public function testProcessIsSignaledIfStopped()
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"');
+        $process = $this->getProcess('php -r "sleep(4);"');
         $process->start();
         $process->stop();
         $this->assertTrue($process->hasBeenSignaled());
@@ -708,7 +701,7 @@ public function testProcessWithTermSignal()
         // SIGTERM is only defined if pcntl extension is present
         $termSignal = defined('SIGTERM') ? SIGTERM : 15;
 
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"');
+        $process = $this->getProcess('php -r "sleep(4);"');
         $process->start();
         $process->stop();
 
@@ -737,7 +730,7 @@ public function testProcessThrowsExceptionWhenExternallySignaled()
 
     public function testRestart()
     {
-        $process1 = $this->getProcess(self::$phpBin.' -r "echo getmypid();"');
+        $process1 = $this->getProcess('php -r "echo getmypid();"');
         $process1->run();
         $process2 = $process1->restart();
 
@@ -759,7 +752,7 @@ public function testPhpDeadlock()
 
         // Sleep doesn't work as it will allow the process to handle signals and close
         // file handles from the other end.
-        $process = $this->getProcess(self::$phpBin.' -r "while (true) {}"');
+        $process = $this->getProcess('php -r "while (true) {}"');
         $process->start();
 
         // PHP will deadlock when it tries to cleanup $process
@@ -768,7 +761,7 @@ public function testPhpDeadlock()
     public function testRunProcessWithTimeout()
     {
         $timeout = 0.5;
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(600000);"');
+        $process = $this->getProcess('php -r "usleep(600000);"');
         $process->setTimeout($timeout);
         $start = microtime(true);
         try {
@@ -790,13 +783,13 @@ public function testRunProcessWithTimeout()
 
     public function testCheckTimeoutOnNonStartedProcess()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
+        $process = $this->getProcess('php -r "sleep(3);"');
         $process->checkTimeout();
     }
 
     public function testCheckTimeoutOnTerminatedProcess()
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -v');
         $process->run();
         $process->checkTimeout();
     }
@@ -805,7 +798,7 @@ public function testCheckTimeoutOnStartedProcess()
     {
         $timeout = 0.5;
         $precision = 100000;
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
+        $process = $this->getProcess('php -r "sleep(3);"');
         $process->setTimeout($timeout);
         $start = microtime(true);
 
@@ -827,7 +820,7 @@ public function testCheckTimeoutOnStartedProcess()
 
     public function testIdleTimeout()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
+        $process = $this->getProcess('php -r "sleep(3);"');
         $process->setTimeout(10);
         $process->setIdleTimeout(0.5);
 
@@ -844,7 +837,7 @@ public function testIdleTimeout()
 
     public function testIdleTimeoutNotExceededWhenOutputIsSent()
     {
-        $process = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 30; while ($n--) {echo "foo\n"; usleep(100000); }')));
+        $process = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 30; while ($n--) {echo "foo\n"; usleep(100000); }')));
         $process->setTimeout(2);
         $process->setIdleTimeout(1);
 
@@ -860,7 +853,7 @@ public function testIdleTimeoutNotExceededWhenOutputIsSent()
 
     public function testStartAfterATimeout()
     {
-        $process = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 1000; while ($n--) {echo \'\'; usleep(1000); }')));
+        $process = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 1000; while ($n--) {echo \'\'; usleep(1000); }')));
         $process->setTimeout(0.1);
 
         try {
@@ -875,7 +868,7 @@ public function testStartAfterATimeout()
 
     public function testGetPid()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $process = $this->getProcess('php -r "usleep(500000);"');
         $process->start();
         $this->assertGreaterThan(0, $process->getPid());
         $process->wait();
@@ -883,13 +876,13 @@ public function testGetPid()
 
     public function testGetPidIsNullBeforeStart()
     {
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"');
+        $process = $this->getProcess('php -r "sleep(1);"');
         $this->assertNull($process->getPid());
     }
 
     public function testGetPidIsNullAfterRun()
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $process->run();
         $this->assertNull($process->getPid());
     }
@@ -934,7 +927,7 @@ public function testExitCodeIsAvailableAfterSignal()
     public function testSignalProcessNotRunning()
     {
         $this->verifyPosixIsEnabled();
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $process->signal(SIGHUP);
     }
 
@@ -943,7 +936,7 @@ public function testSignalProcessNotRunning()
      */
     public function testMethodsThatNeedARunningProcess($method)
     {
-        $process = $this->getProcess(self::$phpBin.' -v');
+        $process = $this->getProcess('php -m');
         $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', sprintf('Process must be started before calling %s.', $method));
         $process->{$method}();
     }
@@ -964,7 +957,7 @@ public function provideMethodsThatNeedARunningProcess()
      */
     public function testMethodsThatNeedATerminatedProcess($method)
     {
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"');
+        $process = $this->getProcess('php -r "sleep(1);"');
         $process->start();
         try {
             $process->{$method}();
@@ -1006,7 +999,7 @@ public function testSignalWithWrongIntSignal()
             $this->markTestSkipped('POSIX signals do not work on Windows');
         }
 
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
+        $process = $this->getProcess('php -r "sleep(3);"');
         $process->start();
         $process->signal(-4);
     }
@@ -1020,14 +1013,14 @@ public function testSignalWithWrongNonIntSignal()
             $this->markTestSkipped('POSIX signals do not work on Windows');
         }
 
-        $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"');
+        $process = $this->getProcess('php -r "sleep(3);"');
         $process->start();
         $process->signal('CÃ©phalopodes');
     }
 
     public function testDisableOutputDisablesTheOutput()
     {
-        $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $p = $this->getProcess('php -r "usleep(500000);"');
         $this->assertFalse($p->isOutputDisabled());
         $p->disableOutput();
         $this->assertTrue($p->isOutputDisabled());
@@ -1037,7 +1030,7 @@ public function testDisableOutputDisablesTheOutput()
 
     public function testDisableOutputWhileRunningThrowsException()
     {
-        $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $p = $this->getProcess('php -r "usleep(500000);"');
         $p->start();
         $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Disabling output while the process is running is not possible.');
         $p->disableOutput();
@@ -1045,7 +1038,7 @@ public function testDisableOutputWhileRunningThrowsException()
 
     public function testEnableOutputWhileRunningThrowsException()
     {
-        $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $p = $this->getProcess('php -r "usleep(500000);"');
         $p->disableOutput();
         $p->start();
         $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Enabling output while the process is running is not possible.');
@@ -1054,7 +1047,7 @@ public function testEnableOutputWhileRunningThrowsException()
 
     public function testEnableOrDisableOutputAfterRunDoesNotThrowException()
     {
-        $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $p = $this->getProcess('php -r "usleep(500000);"');
         $p->disableOutput();
         $p->start();
         $p->wait();
@@ -1090,7 +1083,7 @@ public function testSetNullIdleTimeoutWhileOutputIsDisabled()
      */
     public function testStartWithACallbackAndDisabledOutput($startMethod, $exception, $exceptionMessage)
     {
-        $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $p = $this->getProcess('php -r "usleep(500000);"');
         $p->disableOutput();
         $this->setExpectedException($exception, $exceptionMessage);
         $p->{$startMethod}(function () {});
@@ -1110,7 +1103,7 @@ public function provideStartMethods()
      */
     public function testGetOutputWhileDisabled($fetchMethod)
     {
-        $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"');
+        $p = $this->getProcess('php -r "usleep(500000);"');
         $p->disableOutput();
         $p->start();
         $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Output has been disabled.');
diff --git a/core/vendor/symfony/process/Tests/ExecutableFinderTest.php b/core/vendor/symfony/process/Tests/ExecutableFinderTest.php
index 61a471b4f6dfdd57a2ec6d4fdbaca61423a99b13..20b12b1c3ce49441ef457fdd0331aec7b2be2d94 100644
--- a/core/vendor/symfony/process/Tests/ExecutableFinderTest.php
+++ b/core/vendor/symfony/process/Tests/ExecutableFinderTest.php
@@ -102,7 +102,7 @@ public function testFindWithOpenBaseDir()
             $this->markTestSkipped('Cannot test when open_basedir is set');
         }
 
-        $this->iniSet('open_basedir', dirname(PHP_BINARY).(!defined('HHVM_VERSION') ? PATH_SEPARATOR.'/' : ''));
+        $this->iniSet('open_basedir', dirname(PHP_BINARY).PATH_SEPARATOR.'/');
 
         $finder = new ExecutableFinder();
         $result = $finder->find($this->getPhpBinaryName());
@@ -125,7 +125,7 @@ public function testFindProcessInOpenBasedir()
         }
 
         $this->setPath('');
-        $this->iniSet('open_basedir', PHP_BINARY.(!defined('HHVM_VERSION') ? PATH_SEPARATOR.'/' : ''));
+        $this->iniSet('open_basedir', PHP_BINARY.PATH_SEPARATOR.'/');
 
         $finder = new ExecutableFinder();
         $result = $finder->find($this->getPhpBinaryName(), false);
diff --git a/core/vendor/symfony/process/Tests/PhpExecutableFinderTest.php b/core/vendor/symfony/process/Tests/PhpExecutableFinderTest.php
index cd4abedc9df73641adf58559c7c85c45ad80ed73..3acccacc3b1eba587084bdb0db573e82384b7820 100644
--- a/core/vendor/symfony/process/Tests/PhpExecutableFinderTest.php
+++ b/core/vendor/symfony/process/Tests/PhpExecutableFinderTest.php
@@ -53,10 +53,10 @@ public function testFindWithHHVM()
 
         $f = new PhpExecutableFinder();
 
-        $current = getenv('PHP_BINARY') ?: PHP_BINARY;
+        $current = $f->find();
 
-        $this->assertEquals($current.' --php', $f->find(), '::find() returns the executable PHP');
-        $this->assertEquals($current, $f->find(false), '::find() returns the executable PHP');
+        $this->assertEquals($f->find(), $current.' --php', '::find() returns the executable PHP');
+        $this->assertEquals($f->find(false), $current, '::find() returns the executable PHP');
     }
 
     /**
@@ -91,7 +91,7 @@ public function testFindWithSuffix()
         //TODO maybe php executable is custom or even Windows
         if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertTrue(is_executable($current));
-            $this->assertTrue((bool) preg_match('/'.addslashes(DIRECTORY_SEPARATOR).'php\.(exe|bat|cmd|com)$/i', $current), '::find() returns the executable PHP with suffixes');
+            $this->assertTrue((bool) preg_match('/'.addSlashes(DIRECTORY_SEPARATOR).'php\.(exe|bat|cmd|com)$/i', $current), '::find() returns the executable PHP with suffixes');
         }
     }
 }
diff --git a/core/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php b/core/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
index 26673ea45a1c3436ec1db5e0fc376bcf516c20d4..89d1f6a1acafb28a42cdf137580d4a4b8347c8ed 100644
--- a/core/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
+++ b/core/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
@@ -32,7 +32,7 @@
         }
         $out = (binary) substr($out, $written);
     }
-    if (null === $read && '' === $out) {
+    if (null === $read && strlen($out) < 1) {
         $write = array_diff($write, array(STDOUT));
     }
 
@@ -43,7 +43,7 @@
         }
         $err = (binary) substr($err, $written);
     }
-    if (null === $read && '' === $err) {
+    if (null === $read && strlen($err) < 1) {
         $write = array_diff($write, array(STDERR));
     }
 
diff --git a/core/vendor/symfony/process/Tests/SimpleProcessTest.php b/core/vendor/symfony/process/Tests/SimpleProcessTest.php
index 98eeb0ecbc9a4dbdb34c20661691cc5e60bbaa0b..4bf9ad87c6f0acc243ba99236dca7ff098efa13a 100644
--- a/core/vendor/symfony/process/Tests/SimpleProcessTest.php
+++ b/core/vendor/symfony/process/Tests/SimpleProcessTest.php
@@ -150,7 +150,7 @@ public function testSignalWithWrongNonIntSignal()
     public function testStopTerminatesProcessCleanly()
     {
         try {
-            $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"');
+            $process = $this->getProcess('php -r "echo \'foo\'; sleep(1); echo \'bar\';"');
             $process->run(function () use ($process) {
                 $process->stop();
             });
@@ -164,7 +164,7 @@ public function testKillSignalTerminatesProcessCleanly()
         $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
 
         try {
-            $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"');
+            $process = $this->getProcess('php -r "echo \'foo\'; sleep(1); echo \'bar\';"');
             $process->run(function () use ($process) {
                 if ($process->isRunning()) {
                     $process->signal(defined('SIGKILL') ? SIGKILL : 9);
@@ -180,7 +180,7 @@ public function testTermSignalTerminatesProcessCleanly()
         $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.');
 
         try {
-            $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"');
+            $process = $this->getProcess('php -r "echo \'foo\'; sleep(1); echo \'bar\';"');
             $process->run(function () use ($process) {
                 if ($process->isRunning()) {
                     $process->signal(defined('SIGTERM') ? SIGTERM : 15);
diff --git a/core/vendor/symfony/psr-http-message-bridge/.gitignore b/core/vendor/symfony/psr-http-message-bridge/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..c49a5d8df5c6548379f00c77fe572a7217bce218
--- /dev/null
+++ b/core/vendor/symfony/psr-http-message-bridge/.gitignore
@@ -0,0 +1,3 @@
+vendor/
+composer.lock
+phpunit.xml
diff --git a/core/vendor/symfony/routing/Annotation/Route.php b/core/vendor/symfony/routing/Annotation/Route.php
index 7e7e056bd16707e9140c3fe178b8edd66a16745f..af2158250c770669279e347de166904bdb46562d 100644
--- a/core/vendor/symfony/routing/Annotation/Route.php
+++ b/core/vendor/symfony/routing/Annotation/Route.php
@@ -48,7 +48,7 @@ public function __construct(array $data)
         foreach ($data as $key => $value) {
             $method = 'set'.str_replace('_', '', $key);
             if (!method_exists($this, $method)) {
-                throw new \BadMethodCallException(sprintf('Unknown property "%s" on annotation "%s".', $key, get_class($this)));
+                throw new \BadMethodCallException(sprintf("Unknown property '%s' on annotation '%s'.", $key, get_class($this)));
             }
             $this->$method($value);
         }
@@ -59,7 +59,7 @@ public function __construct(array $data)
      */
     public function setPattern($pattern)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the setPath() method instead and use the "path" option instead of the "pattern" option in the route definition.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the setPath() method instead and use the "path" option instead of the "pattern" option in the route definition.', E_USER_DEPRECATED);
 
         $this->path = $pattern;
     }
@@ -69,7 +69,7 @@ public function setPattern($pattern)
      */
     public function getPattern()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the getPath() method instead and use the "path" option instead of the "pattern" option in the route definition.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the getPath() method instead and use the "path" option instead of the "pattern" option in the route definition.', E_USER_DEPRECATED);
 
         return $this->path;
     }
@@ -106,22 +106,6 @@ public function getName()
 
     public function setRequirements($requirements)
     {
-        if (isset($requirements['_method'])) {
-            if (0 === count($this->methods)) {
-                $this->methods = explode('|', $requirements['_method']);
-            }
-
-            @trigger_error('The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the "methods" option instead.', E_USER_DEPRECATED);
-        }
-
-        if (isset($requirements['_scheme'])) {
-            if (0 === count($this->schemes)) {
-                $this->schemes = explode('|', $requirements['_scheme']);
-            }
-
-            @trigger_error('The "_scheme" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the "schemes" option instead.', E_USER_DEPRECATED);
-        }
-
         $this->requirements = $requirements;
     }
 
diff --git a/core/vendor/symfony/routing/Loader/XmlFileLoader.php b/core/vendor/symfony/routing/Loader/XmlFileLoader.php
index e8c7f6b14819e586a5272022dc19ce6cc33cf682..81bd5de6f12c3330970c164ddc08fdd7f42b9e9a 100644
--- a/core/vendor/symfony/routing/Loader/XmlFileLoader.php
+++ b/core/vendor/symfony/routing/Loader/XmlFileLoader.php
@@ -122,7 +122,7 @@ protected function parseRoute(RouteCollection $collection, \DOMElement $node, $p
                 throw new \InvalidArgumentException(sprintf('The <route> element in file "%s" cannot define both a "path" and a "pattern" attribute. Use only "path".', $path));
             }
 
-            @trigger_error(sprintf('The "pattern" option in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "path" option in the route definition instead.', $path), E_USER_DEPRECATED);
+            trigger_error(sprintf('The "pattern" option in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "path" option in the route definition instead.', $path), E_USER_DEPRECATED);
 
             $node->setAttribute('path', $node->getAttribute('pattern'));
             $node->removeAttribute('pattern');
@@ -133,24 +133,6 @@ protected function parseRoute(RouteCollection $collection, \DOMElement $node, $p
 
         list($defaults, $requirements, $options, $condition) = $this->parseConfigs($node, $path);
 
-        if (isset($requirements['_method'])) {
-            if (0 === count($methods)) {
-                $methods = explode('|', $requirements['_method']);
-            }
-
-            unset($requirements['_method']);
-            @trigger_error(sprintf('The "_method" requirement of route "%s" in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "methods" attribute instead.', $id, $path), E_USER_DEPRECATED);
-        }
-
-        if (isset($requirements['_scheme'])) {
-            if (0 === count($schemes)) {
-                $schemes = explode('|', $requirements['_scheme']);
-            }
-
-            unset($requirements['_scheme']);
-            @trigger_error(sprintf('The "_scheme" requirement of route "%s" in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "schemes" attribute instead.', $id, $path), E_USER_DEPRECATED);
-        }
-
         $route = new Route($node->getAttribute('path'), $defaults, $requirements, $options, $node->getAttribute('host'), $schemes, $methods, $condition);
         $collection->add($id, $route);
     }
diff --git a/core/vendor/symfony/routing/Loader/YamlFileLoader.php b/core/vendor/symfony/routing/Loader/YamlFileLoader.php
index d30da91d2a45dc045113cdc1c0b78fece2144be6..f004fd14ad65c50655cd451cea7012e6f8e6b51d 100644
--- a/core/vendor/symfony/routing/Loader/YamlFileLoader.php
+++ b/core/vendor/symfony/routing/Loader/YamlFileLoader.php
@@ -81,7 +81,7 @@ public function load($file, $type = null)
                     throw new \InvalidArgumentException(sprintf('The file "%s" cannot define both a "path" and a "pattern" attribute. Use only "path".', $path));
                 }
 
-                @trigger_error(sprintf('The "pattern" option in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "path" option in the route definition instead.', $path), E_USER_DEPRECATED);
+                trigger_error(sprintf('The "pattern" option in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "path" option in the route definition instead.', $path), E_USER_DEPRECATED);
 
                 $config['path'] = $config['pattern'];
                 unset($config['pattern']);
@@ -127,24 +127,6 @@ protected function parseRoute(RouteCollection $collection, $name, array $config,
         $methods = isset($config['methods']) ? $config['methods'] : array();
         $condition = isset($config['condition']) ? $config['condition'] : null;
 
-        if (isset($requirements['_method'])) {
-            if (0 === count($methods)) {
-                $methods = explode('|', $requirements['_method']);
-            }
-
-            unset($requirements['_method']);
-            @trigger_error(sprintf('The "_method" requirement of route "%s" in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "methods" option instead.', $name, $path), E_USER_DEPRECATED);
-        }
-
-        if (isset($requirements['_scheme'])) {
-            if (0 === count($schemes)) {
-                $schemes = explode('|', $requirements['_scheme']);
-            }
-
-            unset($requirements['_scheme']);
-            @trigger_error(sprintf('The "_scheme" requirement of route "%s" in file "%s" is deprecated since version 2.2 and will be removed in 3.0. Use the "schemes" option instead.', $name, $path), E_USER_DEPRECATED);
-        }
-
         $route = new Route($config['path'], $defaults, $requirements, $options, $host, $schemes, $methods, $condition);
 
         $collection->add($name, $route);
diff --git a/core/vendor/symfony/routing/Matcher/ApacheUrlMatcher.php b/core/vendor/symfony/routing/Matcher/ApacheUrlMatcher.php
index c0474f22fd55adfeb45d15e8ce063da07885b02c..058ced4dedd5db68c5b05d7f5f55536f271ba5ee 100644
--- a/core/vendor/symfony/routing/Matcher/ApacheUrlMatcher.php
+++ b/core/vendor/symfony/routing/Matcher/ApacheUrlMatcher.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Routing\Matcher;
 
-@trigger_error('The '.__NAMESPACE__.'\ApacheUrlMatcher class is deprecated since version 2.5 and will be removed in 3.0. It\'s hard to replicate the behaviour of the PHP implementation and the performance gains are minimal.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ApacheUrlMatcher class is deprecated since version 2.5 and will be removed in 3.0. It\'s hard to replicate the behaviour of the PHP implementation and the performance gains are minimal.', E_USER_DEPRECATED);
 
 use Symfony\Component\Routing\Exception\MethodNotAllowedException;
 
diff --git a/core/vendor/symfony/routing/Matcher/Dumper/ApacheMatcherDumper.php b/core/vendor/symfony/routing/Matcher/Dumper/ApacheMatcherDumper.php
index 1eb51852a07d350a29ba30413bcd85fbd31f5472..d1c14a6f815b447c7445be8fe480cd774897efdb 100644
--- a/core/vendor/symfony/routing/Matcher/Dumper/ApacheMatcherDumper.php
+++ b/core/vendor/symfony/routing/Matcher/Dumper/ApacheMatcherDumper.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Routing\Matcher\Dumper;
 
-@trigger_error('The '.__NAMESPACE__.'\ApacheMatcherDumper class is deprecated since version 2.5 and will be removed in 3.0. It\'s hard to replicate the behaviour of the PHP implementation and the performance gains are minimal.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ApacheMatcherDumper class is deprecated since version 2.5 and will be removed in 3.0. It\'s hard to replicate the behaviour of the PHP implementation and the performance gains are minimal.', E_USER_DEPRECATED);
 
 use Symfony\Component\Routing\Route;
 
diff --git a/core/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php b/core/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php
index aa7df8a78b5bae403137fe1fce5cd72dfb495773..de414480f22bf7e62da6fe48e7af12d39f324b9d 100644
--- a/core/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php
+++ b/core/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php
@@ -229,11 +229,11 @@ private function compileRoute(Route $route, $name, $supportsRedirections, $paren
                 $conditions[] = sprintf("rtrim(\$pathinfo, '/') === %s", var_export(rtrim(str_replace('\\', '', $m['url']), '/'), true));
                 $hasTrailingSlash = true;
             } else {
-                $conditions[] = sprintf('$pathinfo === %s', var_export(str_replace('\\', '', $m['url']), true));
+                $conditions[] = sprintf("\$pathinfo === %s", var_export(str_replace('\\', '', $m['url']), true));
             }
         } else {
             if ($compiledRoute->getStaticPrefix() && $compiledRoute->getStaticPrefix() !== $parentPrefix) {
-                $conditions[] = sprintf('0 === strpos($pathinfo, %s)', var_export($compiledRoute->getStaticPrefix(), true));
+                $conditions[] = sprintf("0 === strpos(\$pathinfo, %s)", var_export($compiledRoute->getStaticPrefix(), true));
             }
 
             $regex = $compiledRoute->getRegex();
@@ -241,7 +241,7 @@ private function compileRoute(Route $route, $name, $supportsRedirections, $paren
                 $regex = substr($regex, 0, $pos).'/?$'.substr($regex, $pos + 2);
                 $hasTrailingSlash = true;
             }
-            $conditions[] = sprintf('preg_match(%s, $pathinfo, $matches)', var_export($regex, true));
+            $conditions[] = sprintf("preg_match(%s, \$pathinfo, \$matches)", var_export($regex, true));
 
             $matches = true;
         }
diff --git a/core/vendor/symfony/routing/Route.php b/core/vendor/symfony/routing/Route.php
index 19a48f13bd1d41a207c670d9c9a70092a29b4b53..a7b6ad1fd4733eefdd1b0cc0600271db7dbc597e 100644
--- a/core/vendor/symfony/routing/Route.php
+++ b/core/vendor/symfony/routing/Route.php
@@ -151,7 +151,7 @@ public function unserialize($serialized)
      */
     public function getPattern()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the getPath() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the getPath() method instead.', E_USER_DEPRECATED);
 
         return $this->path;
     }
@@ -169,7 +169,7 @@ public function getPattern()
      */
     public function setPattern($pattern)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the setPath() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Use the setPath() method instead.', E_USER_DEPRECATED);
 
         return $this->setPath($pattern);
     }
@@ -549,9 +549,9 @@ public function addRequirements(array $requirements)
     public function getRequirement($key)
     {
         if ('_scheme' === $key) {
-            @trigger_error('The "_scheme" requirement is deprecated since version 2.2 and will be removed in 3.0. Use getSchemes() instead.', E_USER_DEPRECATED);
+            trigger_error('The "_scheme" requirement is deprecated since version 2.2 and will be removed in 3.0. Use getSchemes() instead.', E_USER_DEPRECATED);
         } elseif ('_method' === $key) {
-            @trigger_error('The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use getMethods() instead.', E_USER_DEPRECATED);
+            trigger_error('The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use getMethods() instead.', E_USER_DEPRECATED);
         }
 
         return isset($this->requirements[$key]) ? $this->requirements[$key] : null;
@@ -655,11 +655,11 @@ private function sanitizeRequirement($key, $regex)
 
         // this is to keep BC and will be removed in a future version
         if ('_scheme' === $key) {
-            @trigger_error('The "_scheme" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the setSchemes() method instead.', E_USER_DEPRECATED);
+            trigger_error('The "_scheme" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the setSchemes() method instead or the "schemes" option in the route definition.', E_USER_DEPRECATED);
 
             $this->setSchemes(explode('|', $regex));
         } elseif ('_method' === $key) {
-            @trigger_error('The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the setMethods() method instead.', E_USER_DEPRECATED);
+            trigger_error('The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the setMethods() method instead or the "methods" option in the route definition.', E_USER_DEPRECATED);
 
             $this->setMethods(explode('|', $regex));
         }
diff --git a/core/vendor/symfony/routing/Tests/Annotation/RouteTest.php b/core/vendor/symfony/routing/Tests/Annotation/RouteTest.php
index 3b340b33eeaee3bed26b005858f82cd85e2f04b8..5eda4064f0595176827fdd2cdb57f01961f5007f 100644
--- a/core/vendor/symfony/routing/Tests/Annotation/RouteTest.php
+++ b/core/vendor/symfony/routing/Tests/Annotation/RouteTest.php
@@ -52,6 +52,8 @@ public function getValidParameters()
      */
     public function testLegacyGetPattern()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $route = new Route(array('value' => '/Blog'));
         $this->assertEquals($route->getPattern(), '/Blog');
     }
diff --git a/core/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php b/core/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
index 525b9f569303d097b9129054bdcc64da00fe101b..6fbf7e220348b83908cd30bb55dea9bddab8a38c 100644
--- a/core/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
+++ b/core/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
@@ -39,7 +39,7 @@ protected function setUp()
 
         $this->routeCollection = new RouteCollection();
         $this->generatorDumper = new PhpGeneratorDumper($this->routeCollection);
-        $this->testTmpFilepath = sys_get_temp_dir().DIRECTORY_SEPARATOR.'php_generator.'.$this->getName().'.php';
+        $this->testTmpFilepath = sys_get_temp_dir().DIRECTORY_SEPARATOR.'php_generator.php';
         @unlink($this->testTmpFilepath);
     }
 
diff --git a/core/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php b/core/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
index 29460c7aeb19eec6190452f3bc9afc10c3182740..0005e3a534679e74c66dac8a560cd7fd3947ce54 100644
--- a/core/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
+++ b/core/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
@@ -461,6 +461,8 @@ public function testHostIsCaseInsensitive()
      */
     public function testLegacyGenerateNetworkPath()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $routes = $this->getRoutes('test', new Route('/{name}', array(), array('_scheme' => 'http'), array(), '{locale}.example.com'));
 
         $this->assertSame('//fr.example.com/app.php/Fabien', $this->getGenerator($routes)->generate('test',
diff --git a/core/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
index 78065070a0a7c7b329c79153c336966f91adc096..37bbc0cd69294a815c3d59412c3edc904eaf5749 100644
--- a/core/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
+++ b/core/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
@@ -50,6 +50,8 @@ public function testLoadWithRoute()
      */
     public function testLegacyRouteDefinitionLoading()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
         $routeCollection = $loader->load('legacy_validpattern.xml');
         $route = $routeCollection->get('blog_show_legacy');
diff --git a/core/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php b/core/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
index 17e07dab193099b01de92bf7891c5c9899e536a8..f9b7547a1bef0572a17ce6ac98384c524e879d6d 100644
--- a/core/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
+++ b/core/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
@@ -86,6 +86,8 @@ public function testLoadWithRoute()
      */
     public function testLegacyRouteDefinitionLoading()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $loader = new YamlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
         $routeCollection = $loader->load('legacy_validpattern.yml');
         $route = $routeCollection->get('blog_show_legacy');
diff --git a/core/vendor/symfony/routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php b/core/vendor/symfony/routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
index 4bf513e9a6b30da7960612cb244aae4e59540284..6d34c96d56607824dab8bf295dda5852b461e049 100644
--- a/core/vendor/symfony/routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
+++ b/core/vendor/symfony/routing/Tests/Matcher/Dumper/LegacyApacheMatcherDumperTest.php
@@ -27,6 +27,11 @@ public static function setUpBeforeClass()
         self::$fixturesPath = realpath(__DIR__.'/../../Fixtures/');
     }
 
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
     public function testDump()
     {
         $dumper = new ApacheMatcherDumper($this->getRouteCollection());
diff --git a/core/vendor/symfony/routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php b/core/vendor/symfony/routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php
index 931f910df4c5dddf37b5b6bde23de3c828030b31..f42b7f206b1f4fe5ec50c7d6071d186b3b720ada 100644
--- a/core/vendor/symfony/routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php
+++ b/core/vendor/symfony/routing/Tests/Matcher/LegacyApacheUrlMatcherTest.php
@@ -24,6 +24,7 @@ class LegacyApacheUrlMatcherTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
         $this->server = $_SERVER;
     }
 
diff --git a/core/vendor/symfony/routing/Tests/RouteTest.php b/core/vendor/symfony/routing/Tests/RouteTest.php
index 85273a696a80a2c71ff8e5ce6641155bb3ed1b9b..11c0cd8dcf00683451f78c492a92b6b5fed5c59c 100644
--- a/core/vendor/symfony/routing/Tests/RouteTest.php
+++ b/core/vendor/symfony/routing/Tests/RouteTest.php
@@ -169,6 +169,8 @@ public function testScheme()
      */
     public function testLegacySchemeRequirement()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $route = new Route('/');
         $route->setRequirement('_scheme', 'http|https');
         $this->assertEquals('http|https', $route->getRequirement('_scheme'));
@@ -197,6 +199,8 @@ public function testMethod()
      */
     public function testLegacyMethodRequirement()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $route = new Route('/');
         $route->setRequirement('_method', 'GET|POST');
         $this->assertEquals('GET|POST', $route->getRequirement('_method'));
@@ -229,6 +233,8 @@ public function testCompile()
      */
     public function testLegacyPattern()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $route = new Route('/{foo}');
         $this->assertEquals('/{foo}', $route->getPattern());
 
diff --git a/core/vendor/symfony/serializer/Annotation/Groups.php b/core/vendor/symfony/serializer/Annotation/Groups.php
index 519837a55b73ea44992ce0371b1cc9fb18cc3c44..e88ffa71d7e21ee3cc84c20cb0b0f67619b5b0a5 100644
--- a/core/vendor/symfony/serializer/Annotation/Groups.php
+++ b/core/vendor/symfony/serializer/Annotation/Groups.php
@@ -30,22 +30,21 @@ class Groups
 
     /**
      * @param array $data
-     *
-     * @throws InvalidArgumentException
+     * @throws \InvalidArgumentException
      */
     public function __construct(array $data)
     {
         if (!isset($data['value']) || !$data['value']) {
-            throw new InvalidArgumentException(sprintf('Parameter of annotation "%s" cannot be empty.', get_class($this)));
+            throw new InvalidArgumentException(sprintf("Parameter of annotation '%s' cannot be empty.", get_class($this)));
         }
 
         if (!is_array($data['value'])) {
-            throw new InvalidArgumentException(sprintf('Parameter of annotation "%s" must be an array of strings.', get_class($this)));
+            throw new InvalidArgumentException(sprintf("Parameter of annotation '%s' must be an array of strings.", get_class($this)));
         }
 
         foreach ($data['value'] as $group) {
             if (!is_string($group)) {
-                throw new InvalidArgumentException(sprintf('Parameter of annotation "%s" must be an array of strings.', get_class($this)));
+                throw new InvalidArgumentException(sprintf("Parameter of annotation '%s' must be an array of strings.", get_class($this)));
             }
         }
 
@@ -53,7 +52,7 @@ public function __construct(array $data)
     }
 
     /**
-     * Gets groups.
+     * Gets groups
      *
      * @return array
      */
diff --git a/core/vendor/symfony/serializer/Encoder/JsonDecode.php b/core/vendor/symfony/serializer/Encoder/JsonDecode.php
index 1067296f9a5881b48c55eee307b7f29cffac56f6..14c1a752c946510feb3ee548b3f9a06d2759bdca 100644
--- a/core/vendor/symfony/serializer/Encoder/JsonDecode.php
+++ b/core/vendor/symfony/serializer/Encoder/JsonDecode.php
@@ -62,7 +62,7 @@ public function __construct($associative = false, $depth = 512)
      */
     public function getLastError()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the decode() method instead to get the last JSON decoding error.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the decode() method instead to get the last JSON decoding error.', E_USER_DEPRECATED);
 
         return $this->lastError;
     }
diff --git a/core/vendor/symfony/serializer/Encoder/JsonEncode.php b/core/vendor/symfony/serializer/Encoder/JsonEncode.php
index 37f384b25756d2fe5600b66c6af44a9dc42513e5..76345bed694b2efee2b5b35c87929d8e528be866 100644
--- a/core/vendor/symfony/serializer/Encoder/JsonEncode.php
+++ b/core/vendor/symfony/serializer/Encoder/JsonEncode.php
@@ -40,7 +40,7 @@ public function __construct($bitmask = 0)
      */
     public function getLastError()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the encode() method instead to get the last JSON encoding error.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the encode() method instead to get the last JSON encoding error.', E_USER_DEPRECATED);
 
         return $this->lastError;
     }
diff --git a/core/vendor/symfony/serializer/Encoder/JsonEncoder.php b/core/vendor/symfony/serializer/Encoder/JsonEncoder.php
index 284f579a048eef6167cd91034862a0102e2041d1..1f7a1fb0e3301f8b0f313957a47f395e6bf58501 100644
--- a/core/vendor/symfony/serializer/Encoder/JsonEncoder.php
+++ b/core/vendor/symfony/serializer/Encoder/JsonEncoder.php
@@ -45,7 +45,7 @@ public function __construct(JsonEncode $encodingImpl = null, JsonDecode $decodin
      */
     public function getLastEncodingError()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the Symfony\Component\Serializer\Encoder\JsonEncode::encode() method instead to get the last JSON encoding error.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the Symfony\Component\Serializer\Encoder\JsonEncode::encode() method instead to get the last JSON encoding error.', E_USER_DEPRECATED);
 
         return $this->encodingImpl->getLastError();
     }
@@ -59,7 +59,7 @@ public function getLastEncodingError()
      */
     public function getLastDecodingError()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the Symfony\Component\Serializer\Encoder\JsonDecode::decode() method instead to get the last JSON decoding error.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Catch the exception raised by the Symfony\Component\Serializer\Encoder\JsonDecode::decode() method instead to get the last JSON decoding error.', E_USER_DEPRECATED);
 
         return $this->decodingImpl->getLastError();
     }
diff --git a/core/vendor/symfony/serializer/Mapping/ClassMetadata.php b/core/vendor/symfony/serializer/Mapping/ClassMetadata.php
index 55ddf52a64bb524d64edaeb59ce5f64f915cd298..3794a7451b55eaa0ecba2773891e61967fa957fe 100644
--- a/core/vendor/symfony/serializer/Mapping/ClassMetadata.php
+++ b/core/vendor/symfony/serializer/Mapping/ClassMetadata.php
@@ -110,7 +110,7 @@ public function __sleep()
     {
         return array(
             'name',
-            'attributesMetadata',
+            'attributes',
         );
     }
 }
diff --git a/core/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php b/core/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
index 93dfba9a396b513526000f033f2fa6e869f6ee9b..8e89dd509614f812ea614ce893d80a3345f52cd1 100644
--- a/core/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
+++ b/core/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
@@ -153,7 +153,7 @@ public function setIgnoredAttributes(array $ignoredAttributes)
      */
     public function setCamelizedAttributes(array $camelizedAttributes)
     {
-        @trigger_error(sprintf('%s is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.', __METHOD__), E_USER_DEPRECATED);
+        trigger_error(sprintf('%s is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.', __METHOD__), E_USER_DEPRECATED);
 
         if ($this->nameConverter && !$this->nameConverter instanceof CamelCaseToSnakeCaseNameConverter) {
             throw new LogicException(sprintf('%s cannot be called if a custom Name Converter is defined.', __METHOD__));
@@ -232,7 +232,7 @@ protected function handleCircularReference($object)
      */
     protected function formatAttribute($attributeName)
     {
-        @trigger_error(sprintf('%s is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.', __METHOD__), E_USER_DEPRECATED);
+        trigger_error(sprintf('%s is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter instead.', __METHOD__), E_USER_DEPRECATED);
 
         return $this->nameConverter ? $this->nameConverter->normalize($attributeName) : $attributeName;
     }
@@ -272,11 +272,23 @@ protected function getAllowedAttributes($classOrObject, array $context, $attribu
      */
     protected function prepareForDenormalization($data)
     {
-        return (array) $data;
+        if (is_array($data) || is_object($data) && $data instanceof \ArrayAccess) {
+            $normalizedData = $data;
+        } elseif (is_object($data)) {
+            $normalizedData = array();
+
+            foreach ($data as $attribute => $value) {
+                $normalizedData[$attribute] = $value;
+            }
+        } else {
+            $normalizedData = array();
+        }
+
+        return $normalizedData;
     }
 
     /**
-     * Instantiates an object using constructor parameters when needed.
+     * Instantiates an object using contructor parameters when needed.
      *
      * This method also allows to denormalize data into an existing object if
      * it is present in the context with the object_to_populate key.
@@ -291,7 +303,7 @@ protected function prepareForDenormalization($data)
      *
      * @throws RuntimeException
      */
-    protected function instantiateObject(array &$data, $class, array &$context, \ReflectionClass $reflectionClass, $allowedAttributes)
+    protected function instantiateObject(array $data, $class, array &$context, \ReflectionClass $reflectionClass, $allowedAttributes)
     {
         if (
             isset($context['object_to_populate']) &&
diff --git a/core/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php b/core/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
index 44a71cf1b487f9e8846be96e70913a46ba5659a6..de4c3ece1dc98599ca9b0a2f2b1180536cc00eb5 100644
--- a/core/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
+++ b/core/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
@@ -102,7 +102,6 @@ public function denormalize($data, $class, $format = null, array $context = arra
         $reflectionClass = new \ReflectionClass($class);
         $object = $this->instantiateObject($normalizedData, $class, $context, $reflectionClass, $allowedAttributes);
 
-        $classMethods = get_class_methods($object);
         foreach ($normalizedData as $attribute => $value) {
             if ($this->nameConverter) {
                 $attribute = $this->nameConverter->denormalize($attribute);
@@ -114,7 +113,7 @@ public function denormalize($data, $class, $format = null, array $context = arra
             if ($allowed && !$ignored) {
                 $setter = 'set'.ucfirst($attribute);
 
-                if (in_array($setter, $classMethods)) {
+                if (method_exists($object, $setter)) {
                     $object->$setter($value);
                 }
             }
diff --git a/core/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php b/core/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
index 72b877729dc834f5c92f59a02cb600d61a50f280..b427325f08640c68240b939e9da4406cc9c0fc3e 100644
--- a/core/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
+++ b/core/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
@@ -19,7 +19,7 @@
 class GroupsTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
+     * @expectedException \InvalidArgumentException
      */
     public function testEmptyGroupsParameter()
     {
@@ -27,7 +27,7 @@ public function testEmptyGroupsParameter()
     }
 
     /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
+     * @expectedException \InvalidArgumentException
      */
     public function testNotAnArrayGroupsParameter()
     {
@@ -35,7 +35,7 @@ public function testNotAnArrayGroupsParameter()
     }
 
     /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
+     * @expectedException \InvalidArgumentException
      */
     public function testInvalidGroupsParameter()
     {
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/AttributeMetadataTest.php b/core/vendor/symfony/serializer/Tests/Mapping/AttributeMetadataTest.php
index 4a32831cb698d7211dfc67c7fd7ee3d038f70f14..f22746bc5de756e868797ae34dc244bc4b15c62b 100644
--- a/core/vendor/symfony/serializer/Tests/Mapping/AttributeMetadataTest.php
+++ b/core/vendor/symfony/serializer/Tests/Mapping/AttributeMetadataTest.php
@@ -54,14 +54,4 @@ public function testMerge()
 
         $this->assertEquals(array('a', 'b', 'c'), $attributeMetadata1->getGroups());
     }
-
-    public function testSerialize()
-    {
-        $attributeMetadata = new AttributeMetadata('attribute');
-        $attributeMetadata->addGroup('a');
-        $attributeMetadata->addGroup('b');
-
-        $serialized = serialize($attributeMetadata);
-        $this->assertEquals($attributeMetadata, unserialize($serialized));
-    }
 }
diff --git a/core/vendor/symfony/serializer/Tests/Mapping/ClassMetadataTest.php b/core/vendor/symfony/serializer/Tests/Mapping/ClassMetadataTest.php
index 629c17b788d23af79af1fc2568e095221ebee9ff..90017580ac70392be6917d1cb19ec98fcac7d1ab 100644
--- a/core/vendor/symfony/serializer/Tests/Mapping/ClassMetadataTest.php
+++ b/core/vendor/symfony/serializer/Tests/Mapping/ClassMetadataTest.php
@@ -62,21 +62,4 @@ public function testMerge()
 
         $this->assertEquals(array('a1' => $ac1), $classMetadata2->getAttributesMetadata());
     }
-
-    public function testSerialize()
-    {
-        $classMetadata = new ClassMetadata('a');
-
-        $a1 = $this->getMock('Symfony\Component\Serializer\Mapping\AttributeMetadataInterface');
-        $a1->method('getName')->willReturn('b1');
-
-        $a2 = $this->getMock('Symfony\Component\Serializer\Mapping\AttributeMetadataInterface');
-        $a2->method('getName')->willReturn('b2');
-
-        $classMetadata->addAttributeMetadata($a1);
-        $classMetadata->addAttributeMetadata($a2);
-
-        $serialized = serialize($classMetadata);
-        $this->assertEquals($classMetadata, unserialize($serialized));
-    }
 }
diff --git a/core/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/core/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
index 32d729a211476d9fbf53683556c140715b228229..e8156dd10fb9de75441dc8886ef4452bc4985d28 100644
--- a/core/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
+++ b/core/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
@@ -105,6 +105,8 @@ public function testDenormalizeWithObject()
      */
     public function testLegacyDenormalizeOnCamelCaseFormat()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $this->normalizer->setCamelizedAttributes(array('camel_case'));
         $obj = $this->normalizer->denormalize(
             array('camel_case' => 'camelCase'),
@@ -134,6 +136,8 @@ public function testDenormalizeNull()
      */
     public function testLegacyCamelizedAttributesNormalize()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $obj = new GetCamelizedDummy('dunglas.fr');
         $obj->setFooBar('les-tilleuls.coop');
         $obj->setBar_foo('lostinthesupermarket.fr');
@@ -158,6 +162,8 @@ public function testLegacyCamelizedAttributesNormalize()
      */
     public function testLegacyCamelizedAttributesDenormalize()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $obj = new GetCamelizedDummy('dunglas.fr');
         $obj->setFooBar('les-tilleuls.coop');
         $obj->setBar_foo('lostinthesupermarket.fr');
@@ -228,12 +234,6 @@ public function testConstructorWithObjectDenormalize()
         $this->assertEquals('bar', $obj->getBar());
     }
 
-    public function testConstructorWArgWithPrivateMutator()
-    {
-        $obj = $this->normalizer->denormalize(array('foo' => 'bar'), __NAMESPACE__.'\ObjectConstructorArgsWithPrivateMutatorDummy', 'any');
-        $this->assertEquals('bar', $obj->getFoo());
-    }
-
     public function testGroupsNormalize()
     {
         $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
@@ -517,8 +517,8 @@ public function testObjectToPopulate()
     public function testDenormalizeNonExistingAttribute()
     {
         $this->assertEquals(
-            new GetSetDummy(),
-            $this->normalizer->denormalize(array('non_existing' => true), __NAMESPACE__.'\GetSetDummy')
+            new PropertyDummy(),
+            $this->normalizer->denormalize(array('non_existing' => true), __NAMESPACE__.'\PropertyDummy')
         );
     }
 
@@ -526,12 +526,6 @@ public function testNoTraversableSupport()
     {
         $this->assertFalse($this->normalizer->supportsNormalization(new \ArrayObject()));
     }
-
-    public function testPrivateSetter()
-    {
-        $obj = $this->normalizer->denormalize(array('foo' => 'foobar'), __NAMESPACE__.'\ObjectWithPrivateSetterDummy');
-        $this->assertEquals('bar', $obj->getFoo());
-    }
 }
 
 class GetSetDummy
@@ -738,37 +732,3 @@ public function getBar_foo()
         return $this->bar_foo;
     }
 }
-
-class ObjectConstructorArgsWithPrivateMutatorDummy
-{
-    private $foo;
-
-    public function __construct($foo)
-    {
-        $this->setFoo($foo);
-    }
-
-    public function getFoo()
-    {
-        return $this->foo;
-    }
-
-    private function setFoo($foo)
-    {
-        $this->foo = $foo;
-    }
-}
-
-class ObjectWithPrivateSetterDummy
-{
-    private $foo = 'bar';
-
-    public function getFoo()
-    {
-        return $this->foo;
-    }
-
-    private function setFoo($foo)
-    {
-    }
-}
diff --git a/core/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php b/core/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
index 7d9da645c4f4e86d5f12c9560025ff695017dd3c..14a268f5bc0eb3c439af1f778a42da36eb5dfbfc 100644
--- a/core/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
+++ b/core/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
@@ -102,6 +102,8 @@ public function testDenormalizeWithObject()
      */
     public function testLegacyDenormalizeOnCamelCaseFormat()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $this->normalizer->setCamelizedAttributes(array('camel_case'));
         $obj = $this->normalizer->denormalize(
             array('camel_case' => 'camelCase'),
diff --git a/core/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php b/core/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
index 62e6d5d925ca3e46da9834662b75999347931c43..52ce54087c343c79249a73513e873d5869812439 100644
--- a/core/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
+++ b/core/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
@@ -68,6 +68,8 @@ public function testDenormalize()
      */
     public function testLegacyDenormalizeOnCamelCaseFormat()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $this->normalizer->setCamelizedAttributes(array('camel_case'));
         $obj = $this->normalizer->denormalize(
             array('camel_case' => 'value'),
@@ -81,6 +83,8 @@ public function testLegacyDenormalizeOnCamelCaseFormat()
      */
     public function testLegacyCamelizedAttributesNormalize()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $obj = new PropertyCamelizedDummy('dunglas.fr');
         $obj->fooBar = 'les-tilleuls.coop';
         $obj->bar_foo = 'lostinthesupermarket.fr';
@@ -105,6 +109,8 @@ public function testLegacyCamelizedAttributesNormalize()
      */
     public function testLegacyCamelizedAttributesDenormalize()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $obj = new PropertyCamelizedDummy('dunglas.fr');
         $obj->fooBar = 'les-tilleuls.coop';
         $obj->bar_foo = 'lostinthesupermarket.fr';
diff --git a/core/vendor/symfony/translation/Loader/JsonFileLoader.php b/core/vendor/symfony/translation/Loader/JsonFileLoader.php
index 81717f3d9418f74f7f4bb979c69d36389b365757..09138835a6070bcac380c8bc9062641ac2d09b87 100644
--- a/core/vendor/symfony/translation/Loader/JsonFileLoader.php
+++ b/core/vendor/symfony/translation/Loader/JsonFileLoader.php
@@ -20,7 +20,7 @@
  *
  * @author singles
  */
-class JsonFileLoader extends ArrayLoader
+class JsonFileLoader extends ArrayLoader implements LoaderInterface
 {
     /**
      * {@inheritdoc}
diff --git a/core/vendor/symfony/translation/MessageSelector.php b/core/vendor/symfony/translation/MessageSelector.php
index f7fde31ad90905cab4d59faaf9bab68d8bd93ce2..9f5430cfe29ae3fc851bc4bb4ed2a1a821717027 100644
--- a/core/vendor/symfony/translation/MessageSelector.php
+++ b/core/vendor/symfony/translation/MessageSelector.php
@@ -57,7 +57,7 @@ public function choose($message, $number, $locale)
         foreach ($parts as $part) {
             $part = trim($part);
 
-            if (preg_match('/^(?P<interval>'.Interval::getIntervalRegexp().')\s*(?P<message>.*?)$/xs', $part, $matches)) {
+            if (preg_match('/^(?P<interval>'.Interval::getIntervalRegexp().')\s*(?P<message>.*?)$/x', $part, $matches)) {
                 $explicitRules[$matches['interval']] = $matches['message'];
             } elseif (preg_match('/^\w+\:\s*(.*?)$/', $part, $matches)) {
                 $standardRules[] = $matches[1];
diff --git a/core/vendor/symfony/translation/PluralizationRules.php b/core/vendor/symfony/translation/PluralizationRules.php
index 3ef8f00b6e934f2c1ba487cd9de253c57230ae8f..e1eac82ce9b56106428b1200e5b9ddf2d5875059 100644
--- a/core/vendor/symfony/translation/PluralizationRules.php
+++ b/core/vendor/symfony/translation/PluralizationRules.php
@@ -55,7 +55,6 @@ public static function get($number, $locale)
          * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
          */
         switch ($locale) {
-            case 'az':
             case 'bo':
             case 'dz':
             case 'id':
@@ -74,6 +73,7 @@ public static function get($number, $locale)
                 break;
 
             case 'af':
+            case 'az':
             case 'bn':
             case 'bg':
             case 'ca':
diff --git a/core/vendor/symfony/translation/Tests/MessageSelectorTest.php b/core/vendor/symfony/translation/Tests/MessageSelectorTest.php
index f89bed16d59b42cc205a0ad0a0fa5ab5999d0cde..d5a4f3e3d536abe02875c3764f5e7d5f7f20c5df 100644
--- a/core/vendor/symfony/translation/Tests/MessageSelectorTest.php
+++ b/core/vendor/symfony/translation/Tests/MessageSelectorTest.php
@@ -93,38 +93,6 @@ public function getChooseTests()
             array('There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0),
             array('There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0),
             array('There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0),
-
-            // Test texts with new-lines
-            // with double-quotes and \n in id & double-quotes and actual newlines in text
-            array("This is a text with a\n            new-line in it. Selector = 0.", '{0}This is a text with a
-            new-line in it. Selector = 0.|{1}This is a text with a
-            new-line in it. Selector = 1.|[1,Inf]This is a text with a
-            new-line in it. Selector > 1.', 0),
-            // with double-quotes and \n in id and single-quotes and actual newlines in text
-            array("This is a text with a\n            new-line in it. Selector = 1.", '{0}This is a text with a
-            new-line in it. Selector = 0.|{1}This is a text with a
-            new-line in it. Selector = 1.|[1,Inf]This is a text with a
-            new-line in it. Selector > 1.', 1),
-            array("This is a text with a\n            new-line in it. Selector > 1.", '{0}This is a text with a
-            new-line in it. Selector = 0.|{1}This is a text with a
-            new-line in it. Selector = 1.|[1,Inf]This is a text with a
-            new-line in it. Selector > 1.', 5),
-            // with double-quotes and id split accros lines
-            array('This is a text with a
-            new-line in it. Selector = 1.', '{0}This is a text with a
-            new-line in it. Selector = 0.|{1}This is a text with a
-            new-line in it. Selector = 1.|[1,Inf]This is a text with a
-            new-line in it. Selector > 1.', 1),
-            // with single-quotes and id split accros lines
-            array('This is a text with a
-            new-line in it. Selector > 1.', '{0}This is a text with a
-            new-line in it. Selector = 0.|{1}This is a text with a
-            new-line in it. Selector = 1.|[1,Inf]This is a text with a
-            new-line in it. Selector > 1.', 5),
-            // with single-quotes and \n in text
-            array('This is a text with a\nnew-line in it. Selector = 0.', '{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.', 0),
-            // with double-quotes and id split accros lines
-            array("This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1),
         );
     }
 }
diff --git a/core/vendor/symfony/translation/Tests/TranslatorCacheTest.php b/core/vendor/symfony/translation/Tests/TranslatorCacheTest.php
index abe364c7368c7d3a33e1a8deadc58fbdb67f9e14..d5d4639984ce5c9bbc135069c4bd3ddb36fa14f4 100644
--- a/core/vendor/symfony/translation/Tests/TranslatorCacheTest.php
+++ b/core/vendor/symfony/translation/Tests/TranslatorCacheTest.php
@@ -74,6 +74,41 @@ public function testThatACacheIsUsed($debug)
         $this->assertEquals('OK', $translator->trans($msgid), '-> caching does not work in '.($debug ? 'debug' : 'production'));
     }
 
+    public function testRefreshCacheWhenResourcesChange()
+    {
+        // prime the cache
+        $loader = $this->getMock('Symfony\Component\Translation\Loader\LoaderInterface');
+        $loader
+            ->method('load')
+            ->will($this->returnValue($this->getCatalogue('fr', array(
+                'foo' => 'foo A',
+            ))))
+        ;
+
+        $translator = new Translator('fr', null, $this->tmpDir, true);
+        $translator->setLocale('fr');
+        $translator->addLoader('loader', $loader);
+        $translator->addResource('loader', 'foo', 'fr');
+
+        $this->assertEquals('foo A', $translator->trans('foo'));
+
+        // add a new resource to refresh the cache
+        $loader = $this->getMock('Symfony\Component\Translation\Loader\LoaderInterface');
+        $loader
+            ->method('load')
+            ->will($this->returnValue($this->getCatalogue('fr', array(
+                'foo' => 'foo B',
+            ))))
+        ;
+
+        $translator = new Translator('fr', null, $this->tmpDir, true);
+        $translator->setLocale('fr');
+        $translator->addLoader('loader', $loader);
+        $translator->addResource('loader', 'bar', 'fr');
+
+        $this->assertEquals('foo B', $translator->trans('foo'));
+    }
+
     public function testCatalogueIsReloadedWhenResourcesAreNoLongerFresh()
     {
         /*
@@ -118,6 +153,32 @@ public function testCatalogueIsReloadedWhenResourcesAreNoLongerFresh()
     /**
      * @dataProvider runForDebugAndProduction
      */
+    public function testDifferentTranslatorsForSameLocaleDoNotInterfere($debug)
+    {
+        $locale = 'any_locale';
+        $format = 'some_format';
+        $msgid = 'test';
+
+        // Create a Translator and prime its cache
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, new ArrayLoader());
+        $translator->addResource($format, array($msgid => 'FAIL'), $locale);
+        $translator->trans($msgid);
+
+        /*
+         * Create another Translator with the same locale but a different resource.
+         * It should not use the first translator's cache but return the value from its own resource.
+         */
+        $translator = new Translator($locale, null, $this->tmpDir, $debug);
+        $translator->addLoader($format, new ArrayLoader());
+        $translator->addResource($format, array($msgid => 'OK'), $locale);
+
+        $this->assertEquals('OK', $translator->trans($msgid), '-> different translators for the same domain interfere in '.($debug ? 'debug' : 'production'));
+    }
+
+    /**
+     * @dataProvider runForDebugAndProduction
+     */
     public function testDifferentTranslatorsForSameLocaleDoNotOverwriteEachOthersCache($debug)
     {
         /*
diff --git a/core/vendor/symfony/translation/Tests/TranslatorTest.php b/core/vendor/symfony/translation/Tests/TranslatorTest.php
index cb361831883e90f721b1508160c389fc12b670d7..3ee9be019dd25109328f0050100888510e8958cd 100644
--- a/core/vendor/symfony/translation/Tests/TranslatorTest.php
+++ b/core/vendor/symfony/translation/Tests/TranslatorTest.php
@@ -502,7 +502,7 @@ public function testTransChoiceFallbackWithNoTranslation()
     public function testGetMessages($resources, $locale, $expected)
     {
         $locales = array_keys($resources);
-        $_locale = null !== $locale ? $locale : reset($locales);
+        $_locale = !is_null($locale) ? $locale : reset($locales);
         $locales = array_slice($locales, 0, array_search($_locale, $locales));
 
         $translator = new Translator($_locale, new MessageSelector());
diff --git a/core/vendor/symfony/translation/Translator.php b/core/vendor/symfony/translation/Translator.php
index 9b1b73550c57fcec8cdc1cb427bb1014b939cef1..ec315066f7b04c084a9efbb7e807e94c84d0dd59 100644
--- a/core/vendor/symfony/translation/Translator.php
+++ b/core/vendor/symfony/translation/Translator.php
@@ -177,7 +177,7 @@ public function getLocale()
      */
     public function setFallbackLocale($locales)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the setFallbackLocales() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the setFallbackLocales() method instead.', E_USER_DEPRECATED);
 
         $this->setFallbackLocales(is_array($locales) ? $locales : array($locales));
     }
@@ -419,7 +419,12 @@ private function getFallbackContent(MessageCatalogue $catalogue)
 
     private function getCatalogueCachePath($locale)
     {
-        return $this->cacheDir.'/catalogue.'.$locale.'.'.sha1(serialize($this->fallbackLocales)).'.php';
+        $catalogueHash = sha1(serialize(array(
+            'resources' => isset($this->resources[$locale]) ? $this->resources[$locale] : array(),
+            'fallback_locales' => $this->fallbackLocales,
+        )));
+
+        return $this->cacheDir.'/catalogue.'.$locale.'.'.$catalogueHash.'.php';
     }
 
     private function doLoadCatalogue($locale)
diff --git a/core/vendor/symfony/validator/ConstraintValidator.php b/core/vendor/symfony/validator/ConstraintValidator.php
index 3b5d6bc16471bd26aebef5411b474bbd3dccd662..7a412737bd9a135ab48538964b773711be6ad330 100644
--- a/core/vendor/symfony/validator/ConstraintValidator.php
+++ b/core/vendor/symfony/validator/ConstraintValidator.php
@@ -65,7 +65,7 @@ public function initialize(ExecutionContextInterface $context)
      */
     protected function buildViolation($message, array $parameters = array())
     {
-        @trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         if ($this->context instanceof ExecutionContextInterface2Dot5) {
             return $this->context->buildViolation($message, $parameters);
@@ -88,7 +88,7 @@ protected function buildViolation($message, array $parameters = array())
      */
     protected function buildViolationInContext(ExecutionContextInterface $context, $message, array $parameters = array())
     {
-        @trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         if ($context instanceof ExecutionContextInterface2Dot5) {
             return $context->buildViolation($message, $parameters);
diff --git a/core/vendor/symfony/validator/ConstraintViolation.php b/core/vendor/symfony/validator/ConstraintViolation.php
index 31b44d23cd3dae7d870597718d4d00794d894cd3..7df3f3fadeef729218861e0022eb2dabadbc00f6 100644
--- a/core/vendor/symfony/validator/ConstraintViolation.php
+++ b/core/vendor/symfony/validator/ConstraintViolation.php
@@ -147,7 +147,7 @@ public function getMessageTemplate()
      */
     public function getMessageParameters()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7, to be removed in 3.0. Use the ConstraintViolation::getParameters() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.7, to be removed in 3.0. Use the ConstraintViolation::getParameters() method instead.', E_USER_DEPRECATED);
 
         return $this->parameters;
     }
@@ -168,7 +168,7 @@ public function getParameters()
      */
     public function getMessagePluralization()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7, to be removed in 3.0. Use the ConstraintViolation::getPlural() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.7, to be removed in 3.0. Use the ConstraintViolation::getPlural() method instead.', E_USER_DEPRECATED);
 
         return $this->plural;
     }
diff --git a/core/vendor/symfony/validator/Constraints/Callback.php b/core/vendor/symfony/validator/Constraints/Callback.php
index d1d05fa26b04a1abcef7c1d66abab15a08657373..bb8c076e0454734e79bb6de93492641a3b9e7464 100644
--- a/core/vendor/symfony/validator/Constraints/Callback.php
+++ b/core/vendor/symfony/validator/Constraints/Callback.php
@@ -48,7 +48,7 @@ public function __construct($options = null)
         }
 
         if (is_array($options) && isset($options['methods'])) {
-            @trigger_error('The "methods" option of the '.__CLASS__.' class is deprecated since version 2.4 and will be removed in 3.0. Use the "callback" option instead.', E_USER_DEPRECATED);
+            trigger_error('The "methods" option of the '.__CLASS__.' class is deprecated since version 2.4 and will be removed in 3.0. Use the "callback" option instead.', E_USER_DEPRECATED);
         }
 
         if (is_array($options) && !isset($options['callback']) && !isset($options['methods']) && !isset($options['groups'])) {
diff --git a/core/vendor/symfony/validator/Constraints/CallbackValidator.php b/core/vendor/symfony/validator/Constraints/CallbackValidator.php
index eaf2f3c0114c223727604c9ad4baf55df048692a..9939306cb85dc7d5635cc19fd9471eef0255faa2 100644
--- a/core/vendor/symfony/validator/Constraints/CallbackValidator.php
+++ b/core/vendor/symfony/validator/Constraints/CallbackValidator.php
@@ -60,7 +60,7 @@ public function validate($object, Constraint $constraint)
                 call_user_func($method, $object, $this->context);
             } elseif (null !== $object) {
                 if (!method_exists($object, $method)) {
-                    throw new ConstraintDefinitionException(sprintf('Method "%s" targeted by Callback constraint does not exist in class %s', $method, get_class($object)));
+                    throw new ConstraintDefinitionException(sprintf('Method "%s" targeted by Callback constraint does not exist', $method));
                 }
 
                 $reflMethod = new \ReflectionMethod($object, $method);
diff --git a/core/vendor/symfony/validator/Constraints/CardSchemeValidator.php b/core/vendor/symfony/validator/Constraints/CardSchemeValidator.php
index 229e0d2c18997a932e5a236741a5a95674f8095c..708ae09390b397bbd53681b25912eb589b8297ab 100644
--- a/core/vendor/symfony/validator/Constraints/CardSchemeValidator.php
+++ b/core/vendor/symfony/validator/Constraints/CardSchemeValidator.php
@@ -24,7 +24,6 @@
  *
  * @see http://en.wikipedia.org/wiki/Bank_card_number
  * @see http://www.regular-expressions.info/creditcard.html
- * @see http://www.barclaycard.co.uk/business/files/Ranges_and_Rules_September_2014.pdf
  */
 class CardSchemeValidator extends ConstraintValidator
 {
@@ -65,13 +64,10 @@ class CardSchemeValidator extends ConstraintValidator
         'LASER' => array(
             '/^(6304|670[69]|6771)[0-9]{12,15}$/',
         ),
-        // Maestro international cards begin with 675900..675999 and have between 12 and 19 digits.
-        // Maestro UK cards begin with either 500000..509999 or 560000..699999 and have between 12 and 19 digits.
+        // Maestro cards begin with either 5018, 5020, 5038, 5893, 6304, 6759, 6761, 6762, 6763 or 0604
+        // They have between 12 and 19 digits.
         'MAESTRO' => array(
-            '/^(6759[0-9]{2})[0-9]{6,13}$/',
-            '/^(50[0-9]{4})[0-9]{6,13}$/',
-            '/^5[6-9][0-9]{10,17}$/',
-            '/^6[0-9]{11,18}$/',
+            '/^(5018|5020|5038|6304|6759|6761|676[23]|0604)[0-9]{8,15}$/',
         ),
         // All MasterCard numbers start with the numbers 51 through 55. All have 16 digits.
         'MASTERCARD' => array(
diff --git a/core/vendor/symfony/validator/Constraints/Collection/Optional.php b/core/vendor/symfony/validator/Constraints/Collection/Optional.php
index 68471f925579afa00e8a4d79c6dd9eb858fb01c3..cd9af50b9acfa370bf724bfe71a32e51ad724d2a 100644
--- a/core/vendor/symfony/validator/Constraints/Collection/Optional.php
+++ b/core/vendor/symfony/validator/Constraints/Collection/Optional.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints\Collection;
 
-@trigger_error('The '.__NAMESPACE__.'\Optional class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Validator\Constraints\Optional class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\Optional class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Validator\Constraints\Optional class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Validator\Constraints\Optional as BaseOptional;
 
diff --git a/core/vendor/symfony/validator/Constraints/Collection/Required.php b/core/vendor/symfony/validator/Constraints/Collection/Required.php
index 4b062bb558db704d2cc6dff42e0f19ed89538ec5..55041020b7a56ce223ad3458bb0b22fe93e07863 100644
--- a/core/vendor/symfony/validator/Constraints/Collection/Required.php
+++ b/core/vendor/symfony/validator/Constraints/Collection/Required.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints\Collection;
 
-@trigger_error('The '.__NAMESPACE__.'\Required class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Validator\Constraints\Required class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\Required class is deprecated since version 2.3 and will be removed in 3.0. Use the Symfony\Component\Validator\Constraints\Required class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Validator\Constraints\Required as BaseRequired;
 
diff --git a/core/vendor/symfony/validator/Constraints/EmailValidator.php b/core/vendor/symfony/validator/Constraints/EmailValidator.php
index ab1e9ba8fb01873de9c5f58ce62ce520cbfb480a..95f9aa123bfb5b43c528284b5237e130917ba11f 100644
--- a/core/vendor/symfony/validator/Constraints/EmailValidator.php
+++ b/core/vendor/symfony/validator/Constraints/EmailValidator.php
@@ -25,6 +25,8 @@
 class EmailValidator extends ConstraintValidator
 {
     /**
+     * isStrict
+     *
      * @var bool
      */
     private $isStrict;
@@ -79,7 +81,7 @@ public function validate($value, Constraint $constraint)
 
                 return;
             }
-        } elseif (!preg_match('/^.+\@\S+\.\S+$/', $value)) {
+        } elseif (!preg_match('/.+\@.+\..+/', $value)) {
             if ($this->context instanceof ExecutionContextInterface) {
                 $this->context->buildViolation($constraint->message)
                     ->setParameter('{{ value }}', $this->formatValue($value))
diff --git a/core/vendor/symfony/validator/Constraints/False.php b/core/vendor/symfony/validator/Constraints/False.php
index 1e103ade514d62a1f9f8d0863dbe888f71db81a8..166878863cf7d2a735a4508f050e853d2ef5cda9 100644
--- a/core/vendor/symfony/validator/Constraints/False.php
+++ b/core/vendor/symfony/validator/Constraints/False.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
-@trigger_error('The '.__NAMESPACE__.'\False class is deprecated since version 2.7 and will be removed in 3.0. Use the IsFalse class in the same namespace instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\False class is deprecated since version 2.7 and will be removed in 3.0. Use the IsFalse class in the same namespace instead.', E_USER_DEPRECATED);
 
 /**
  * @Annotation
diff --git a/core/vendor/symfony/validator/Constraints/FalseValidator.php b/core/vendor/symfony/validator/Constraints/FalseValidator.php
index 9614c3037fe92b7cd18aed3682254d8ccf0a89cf..24eb91010feb5ddfda4af79a40516d4d8fabe58c 100644
--- a/core/vendor/symfony/validator/Constraints/FalseValidator.php
+++ b/core/vendor/symfony/validator/Constraints/FalseValidator.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
-@trigger_error('The '.__NAMESPACE__.'\FalseValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsFalseValidator class in the same namespace instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\FalseValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsFalseValidator class in the same namespace instead.', E_USER_DEPRECATED);
 
 /**
  * @author Bernhard Schussek <bschussek@gmail.com>
diff --git a/core/vendor/symfony/validator/Constraints/File.php b/core/vendor/symfony/validator/Constraints/File.php
index f35f93cdb5e0fe39e3a1f1301bc6e272b68a46e4..ae0ad673955948f24d0865eca059b34cd8246553 100644
--- a/core/vendor/symfony/validator/Constraints/File.php
+++ b/core/vendor/symfony/validator/Constraints/File.php
@@ -40,6 +40,7 @@ class File extends Constraint
         self::INVALID_MIME_TYPE_ERROR => 'INVALID_MIME_TYPE_ERROR',
     );
 
+    public $maxSize;
     public $binaryFormat;
     public $mimeTypes = array();
     public $notFoundMessage = 'The file could not be found.';
@@ -57,56 +58,29 @@ class File extends Constraint
     public $uploadExtensionErrorMessage = 'A PHP extension caused the upload to fail.';
     public $uploadErrorMessage = 'The file could not be uploaded.';
 
-    protected $maxSize;
-
     public function __construct($options = null)
     {
         parent::__construct($options);
 
-        if (null !== $this->maxSize) {
-            $this->normalizeBinaryFormat($this->maxSize);
-        }
-    }
-
-    public function __set($option, $value)
-    {
-        if ('maxSize' === $option) {
-            $this->normalizeBinaryFormat($value);
-
-            return;
-        }
-
-        parent::__set($option, $value);
-    }
-
-    public function __get($option)
-    {
-        if ('maxSize' === $option) {
-            return $this->maxSize;
-        }
-
-        return parent::__get($option);
-    }
-
-    private function normalizeBinaryFormat($maxSize)
-    {
-        if (ctype_digit((string) $maxSize)) {
-            $this->maxSize = (int) $maxSize;
-            $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat;
-        } elseif (preg_match('/^\d++k$/i', $maxSize)) {
-            $this->maxSize = $maxSize * 1000;
-            $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat;
-        } elseif (preg_match('/^\d++M$/i', $maxSize)) {
-            $this->maxSize = $maxSize * 1000000;
-            $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat;
-        } elseif (preg_match('/^\d++Ki$/i', $maxSize)) {
-            $this->maxSize = $maxSize << 10;
-            $this->binaryFormat = null === $this->binaryFormat ? true : $this->binaryFormat;
-        } elseif (preg_match('/^\d++Mi$/i', $maxSize)) {
-            $this->maxSize = $maxSize << 20;
-            $this->binaryFormat = null === $this->binaryFormat ? true : $this->binaryFormat;
-        } else {
-            throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum size', $this->maxSize));
+        if ($this->maxSize) {
+            if (ctype_digit((string) $this->maxSize)) {
+                $this->maxSize = (int) $this->maxSize;
+                $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat;
+            } elseif (preg_match('/^\d++k$/i', $this->maxSize)) {
+                $this->maxSize = $this->maxSize * 1000;
+                $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat;
+            } elseif (preg_match('/^\d++M$/i', $this->maxSize)) {
+                $this->maxSize = $this->maxSize * 1000000;
+                $this->binaryFormat = null === $this->binaryFormat ? false : $this->binaryFormat;
+            } elseif (preg_match('/^\d++Ki$/i', $this->maxSize)) {
+                $this->maxSize = $this->maxSize << 10;
+                $this->binaryFormat = null === $this->binaryFormat ? true : $this->binaryFormat;
+            } elseif (preg_match('/^\d++Mi$/i', $this->maxSize)) {
+                $this->maxSize = $this->maxSize << 20;
+                $this->binaryFormat = null === $this->binaryFormat ? true : $this->binaryFormat;
+            } else {
+                throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum size', $this->maxSize));
+            }
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Constraints/GroupSequence.php b/core/vendor/symfony/validator/Constraints/GroupSequence.php
index b74f92caa8fd770cc7e5ce611415e593a9d3daf5..52d75394313a8b50e2b6a1df40e9825fe2c02031 100644
--- a/core/vendor/symfony/validator/Constraints/GroupSequence.php
+++ b/core/vendor/symfony/validator/Constraints/GroupSequence.php
@@ -107,7 +107,7 @@ public function __construct(array $groups)
      */
     public function getIterator()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         return new \ArrayIterator($this->groups);
     }
@@ -125,7 +125,7 @@ public function getIterator()
      */
     public function offsetExists($offset)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         return isset($this->groups[$offset]);
     }
@@ -145,7 +145,7 @@ public function offsetExists($offset)
      */
     public function offsetGet($offset)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         if (!isset($this->groups[$offset])) {
             throw new OutOfBoundsException(sprintf(
@@ -169,7 +169,7 @@ public function offsetGet($offset)
      */
     public function offsetSet($offset, $value)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         if (null !== $offset) {
             $this->groups[$offset] = $value;
@@ -191,7 +191,7 @@ public function offsetSet($offset, $value)
      */
     public function offsetUnset($offset)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         unset($this->groups[$offset]);
     }
@@ -207,7 +207,7 @@ public function offsetUnset($offset)
      */
     public function count()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         return count($this->groups);
     }
diff --git a/core/vendor/symfony/validator/Constraints/IsbnValidator.php b/core/vendor/symfony/validator/Constraints/IsbnValidator.php
index 301a8217718d463d85124ef020604dd6d56ba3d5..ccdf4e88d2e94ca8f46bb78b221a438d50c598f8 100644
--- a/core/vendor/symfony/validator/Constraints/IsbnValidator.php
+++ b/core/vendor/symfony/validator/Constraints/IsbnValidator.php
@@ -49,10 +49,10 @@ public function validate($value, Constraint $constraint)
 
         if (null === $constraint->type) {
             if ($constraint->isbn10 && !$constraint->isbn13) {
-                @trigger_error('The "isbn10" option of the Isbn constraint is deprecated since version 2.5 and will be removed in 3.0. Use the "type" option instead.', E_USER_DEPRECATED);
+                trigger_error('The "isbn10" option of the Isbn constraint is deprecated since version 2.5 and will be removed in 3.0. Use the "type" option instead.', E_USER_DEPRECATED);
                 $constraint->type = 'isbn10';
             } elseif ($constraint->isbn13 && !$constraint->isbn10) {
-                @trigger_error('The "isbn13" option of the Isbn constraint is deprecated since version 2.5 and will be removed in 3.0. Use the "type" option instead.', E_USER_DEPRECATED);
+                trigger_error('The "isbn13" option of the Isbn constraint is deprecated since version 2.5 and will be removed in 3.0. Use the "type" option instead.', E_USER_DEPRECATED);
                 $constraint->type = 'isbn13';
             }
         }
diff --git a/core/vendor/symfony/validator/Constraints/Null.php b/core/vendor/symfony/validator/Constraints/Null.php
index 705d93fc41f3ca2ac3f526b97a9a362b57ef6323..934b8eedc61af51fcaa4c1b713feb5e34ddda170 100644
--- a/core/vendor/symfony/validator/Constraints/Null.php
+++ b/core/vendor/symfony/validator/Constraints/Null.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
-@trigger_error('The '.__NAMESPACE__.'\Null class is deprecated since version 2.7 and will be removed in 3.0. Use the IsNull class in the same namespace instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\Null class is deprecated since version 2.7 and will be removed in 3.0. Use the IsNull class in the same namespace instead.', E_USER_DEPRECATED);
 
 /**
  * @Annotation
diff --git a/core/vendor/symfony/validator/Constraints/NullValidator.php b/core/vendor/symfony/validator/Constraints/NullValidator.php
index bd17eab528c207df272c9d501ff67ff1463a5583..0900c8cd2d3e34d26df24a801a35265e1967d9b2 100644
--- a/core/vendor/symfony/validator/Constraints/NullValidator.php
+++ b/core/vendor/symfony/validator/Constraints/NullValidator.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
-@trigger_error('The '.__NAMESPACE__.'\NullValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsNullValidator class in the same namespace instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\NullValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsNullValidator class in the same namespace instead.', E_USER_DEPRECATED);
 
 /**
  * @author Bernhard Schussek <bschussek@gmail.com>
diff --git a/core/vendor/symfony/validator/Constraints/True.php b/core/vendor/symfony/validator/Constraints/True.php
index b9efff375e1bf8fbf28cd29584e3962afc515787..376f69ff3f95ef028d50a6ca9d2f2765c0773769 100644
--- a/core/vendor/symfony/validator/Constraints/True.php
+++ b/core/vendor/symfony/validator/Constraints/True.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
-@trigger_error('The '.__NAMESPACE__.'\True class is deprecated since version 2.7 and will be removed in 3.0. Use the IsTrue class in the same namespace instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\True class is deprecated since version 2.7 and will be removed in 3.0. Use the IsTrue class in the same namespace instead.', E_USER_DEPRECATED);
 
 /**
  * @Annotation
diff --git a/core/vendor/symfony/validator/Constraints/TrueValidator.php b/core/vendor/symfony/validator/Constraints/TrueValidator.php
index 14d879808da02d6754b849336e958f6b10a5fed0..1cb252ae3f220afb95906976c6e63b0c86faee76 100644
--- a/core/vendor/symfony/validator/Constraints/TrueValidator.php
+++ b/core/vendor/symfony/validator/Constraints/TrueValidator.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Constraints;
 
-@trigger_error('The '.__NAMESPACE__.'\TrueValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsTrueValidator class in the same namespace instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\TrueValidator class is deprecated since version 2.7 and will be removed in 3.0. Use the IsTrueValidator class in the same namespace instead.', E_USER_DEPRECATED);
 
 /**
  * @author Bernhard Schussek <bschussek@gmail.com>
diff --git a/core/vendor/symfony/validator/Constraints/Valid.php b/core/vendor/symfony/validator/Constraints/Valid.php
index 9fc00156328222a1507645b46279dc8b86d185ef..cb520c93d4c556219cd079cd30a0557faa83c06b 100644
--- a/core/vendor/symfony/validator/Constraints/Valid.php
+++ b/core/vendor/symfony/validator/Constraints/Valid.php
@@ -41,7 +41,7 @@ public function __construct($options = null)
         }
 
         if (is_array($options) && array_key_exists('deep', $options)) {
-            @trigger_error('The "deep" option for the Valid constraint is deprecated since version 2.5 and will be removed in 3.0. When traversing arrays, nested arrays are always traversed. When traversing nested objects, their traversal strategy is used.', E_USER_DEPRECATED);
+            trigger_error('The "deep" option for the Valid constraint is deprecated since version 2.5 and will be removed in 3.0. When traversing arrays, nested arrays are always traversed. When traversing nested objects, their traversal strategy is used.', E_USER_DEPRECATED);
         }
 
         parent::__construct($options);
diff --git a/core/vendor/symfony/validator/Context/ExecutionContext.php b/core/vendor/symfony/validator/Context/ExecutionContext.php
index 39f92fbc6d2a45ba3132f08341eda42b44873750..39f7d1506d6462cdbd4f79b1b72b556ccdacb1f8 100644
--- a/core/vendor/symfony/validator/Context/ExecutionContext.php
+++ b/core/vendor/symfony/validator/Context/ExecutionContext.php
@@ -188,7 +188,7 @@ public function addViolation($message, array $parameters = array(), $invalidValu
         // API, as they are not present in the new interface anymore.
         // You should use buildViolation() instead.
         if (func_num_args() > 2) {
-            @trigger_error('The parameters $invalidValue, $plural and $code in method '.__METHOD__.' are deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::buildViolation method instead.', E_USER_DEPRECATED);
+            trigger_error('The parameters $invalidValue, $plural and $code in method '.__METHOD__.' are deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::buildViolation method instead.', E_USER_DEPRECATED);
 
             $this
                 ->buildViolation($message, $parameters)
@@ -317,7 +317,7 @@ public function getPropertyPath($subPath = '')
      */
     public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::buildViolation method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::buildViolation method instead.', E_USER_DEPRECATED);
 
         if (func_num_args() > 2) {
             $this
@@ -344,7 +344,7 @@ public function addViolationAt($subPath, $message, array $parameters = array(),
      */
     public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::getValidator() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::getValidator() method instead.', E_USER_DEPRECATED);
 
         if (is_array($value)) {
             // The $traverse flag is ignored for arrays
@@ -382,7 +382,7 @@ public function validate($value, $subPath = '', $groups = null, $traverse = fals
      */
     public function validateValue($value, $constraints, $subPath = '', $groups = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::getValidator() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the '.__CLASS__.'::getValidator() method instead.', E_USER_DEPRECATED);
 
         return $this
             ->getValidator()
@@ -397,7 +397,7 @@ public function validateValue($value, $constraints, $subPath = '', $groups = nul
      */
     public function getMetadataFactory()
     {
-        @trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0. Use the new Symfony\Component\Validator\Context\ExecutionContext::getValidator method in combination with Symfony\Component\Validator\Validator\ValidatorInterface::getMetadataFor or Symfony\Component\Validator\Validator\ValidatorInterface::hasMetadataFor method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' is deprecated since version 2.5 and will be removed in 3.0. Use the new Symfony\Component\Validator\Context\ExecutionContext::getValidator method in combination with Symfony\Component\Validator\Validator\ValidatorInterface::getMetadataFor or Symfony\Component\Validator\Validator\ValidatorInterface::hasMetadataFor method instead.', E_USER_DEPRECATED);
 
         $validator = $this->getValidator();
 
diff --git a/core/vendor/symfony/validator/Context/LegacyExecutionContext.php b/core/vendor/symfony/validator/Context/LegacyExecutionContext.php
index 4d5be451d91dd781a9a45afc6c8445608fa4760f..5ee7a228c47d15a49ab2adc0299c0c2c65498977 100644
--- a/core/vendor/symfony/validator/Context/LegacyExecutionContext.php
+++ b/core/vendor/symfony/validator/Context/LegacyExecutionContext.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Context;
 
-@trigger_error('The '.__NAMESPACE__.'\LegacyExecutionContext class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\LegacyExecutionContext class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\MetadataFactoryInterface;
diff --git a/core/vendor/symfony/validator/Context/LegacyExecutionContextFactory.php b/core/vendor/symfony/validator/Context/LegacyExecutionContextFactory.php
index 9e8498a6b9da922e155ee0c294105eb627fee509..31fb4cbdde0ec918b1cd2352be214974951d22d9 100644
--- a/core/vendor/symfony/validator/Context/LegacyExecutionContextFactory.php
+++ b/core/vendor/symfony/validator/Context/LegacyExecutionContextFactory.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Context;
 
-@trigger_error('The '.__NAMESPACE__.'\LegacyExecutionContextFactory class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\LegacyExecutionContextFactory class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\MetadataFactoryInterface;
diff --git a/core/vendor/symfony/validator/DefaultTranslator.php b/core/vendor/symfony/validator/DefaultTranslator.php
index 85853d8d858cea4e9940bf81e5d408acd5fb0be3..37c9c170fcd5aea3305ec036b86e668ba753ce4f 100644
--- a/core/vendor/symfony/validator/DefaultTranslator.php
+++ b/core/vendor/symfony/validator/DefaultTranslator.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator;
 
-@trigger_error('The class '.__NAMESPACE__.'\DefaultTranslator is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Translation\IdentityTranslator instead.', E_USER_DEPRECATED);
+trigger_error('The class '.__NAMESPACE__.'\DefaultTranslator is deprecated since version 2.7 and will be removed in 3.0. Use Symfony\Component\Translation\IdentityTranslator instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\Exception\BadMethodCallException;
diff --git a/core/vendor/symfony/validator/ExecutionContext.php b/core/vendor/symfony/validator/ExecutionContext.php
index 5875e94ef45d7a5c47ccbc72402fcc4a0bf48d32..d21dd780f1c064e9d40436491905136f0fac32c6 100644
--- a/core/vendor/symfony/validator/ExecutionContext.php
+++ b/core/vendor/symfony/validator/ExecutionContext.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator;
 
-@trigger_error('The '.__NAMESPACE__.'\ExecutionContext class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Context\ExecutionContext class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ExecutionContext class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Context\ExecutionContext class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Translation\TranslatorInterface;
 
diff --git a/core/vendor/symfony/validator/ExecutionContextInterface.php b/core/vendor/symfony/validator/ExecutionContextInterface.php
index 2b6cd01e18ef6ef49c6983a78ce7a6b468ad0937..3fedfe15de02f51b1c1a421c413ff775b94e4838 100644
--- a/core/vendor/symfony/validator/ExecutionContextInterface.php
+++ b/core/vendor/symfony/validator/ExecutionContextInterface.php
@@ -91,8 +91,6 @@
     /**
      * Adds a violation at the current node of the validation graph.
      *
-     * Note: the parameters $invalidValue, $plural and $code are deprecated since version 2.5 and will be removed in 3.0.
-     *
      * @param string   $message      The error message
      * @param array    $params       The parameters substituted in the error message
      * @param mixed    $invalidValue The invalid, validated value
@@ -100,6 +98,8 @@
      * @param int|null $code         The violation code
      *
      * @api
+     *
+     * @deprecated the parameters $invalidValue, $plural and $code are deprecated since version 2.5 and will be removed in 3.0.
      */
     public function addViolation($message, array $params = array(), $invalidValue = null, $plural = null, $code = null);
 
diff --git a/core/vendor/symfony/validator/Mapping/BlackholeMetadataFactory.php b/core/vendor/symfony/validator/Mapping/BlackholeMetadataFactory.php
index 01b80138d590e7642896994cd71e713116746530..ad5a980e4ca310d6ee0fda9e03fa04d50cb0155e 100644
--- a/core/vendor/symfony/validator/Mapping/BlackholeMetadataFactory.php
+++ b/core/vendor/symfony/validator/Mapping/BlackholeMetadataFactory.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Mapping;
 
-@trigger_error('The '.__NAMESPACE__.'\BlackholeMetadataFactory class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\BlackholeMetadataFactory class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Validator\Mapping\Factory\BlackHoleMetadataFactory as MappingBlackHoleMetadataFactory;
 
diff --git a/core/vendor/symfony/validator/Mapping/Cache/ApcCache.php b/core/vendor/symfony/validator/Mapping/Cache/ApcCache.php
index 63fc8ac05a405a31a39da66a55f27b7044c250df..5dbe9f406a148f4137c2637e6888a7c6208a7635 100644
--- a/core/vendor/symfony/validator/Mapping/Cache/ApcCache.php
+++ b/core/vendor/symfony/validator/Mapping/Cache/ApcCache.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Mapping\Cache;
 
-@trigger_error('The '.__NAMESPACE__.'\ApcCache class is deprecated since version 2.5 and will be removed in 3.0. Use DoctrineCache with the Doctrine\Common\Cache\ApcCache class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ApcCache class is deprecated since version 2.5 and will be removed in 3.0. Use DoctrineCache with the Doctrine\Common\Cache\ApcCache class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Validator\Mapping\ClassMetadata;
 
diff --git a/core/vendor/symfony/validator/Mapping/ClassMetadata.php b/core/vendor/symfony/validator/Mapping/ClassMetadata.php
index 3f4f51b83b41c4805191f097412615372012d75b..5991f3489e513cb6541b011fe98f2e1e20141a68 100644
--- a/core/vendor/symfony/validator/Mapping/ClassMetadata.php
+++ b/core/vendor/symfony/validator/Mapping/ClassMetadata.php
@@ -133,7 +133,7 @@ public function __construct($class)
      */
     public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         if (null === $propagatedGroup && Constraint::DEFAULT_GROUP === $group
                 && ($this->hasGroupSequence() || $this->isGroupSequenceProvider())) {
@@ -377,7 +377,7 @@ public function mergeConstraints(ClassMetadata $source)
      */
     protected function addMemberMetadata(MemberMetadata $metadata)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the addPropertyMetadata() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the addPropertyMetadata() method instead.', E_USER_DEPRECATED);
 
         $this->addPropertyMetadata($metadata);
     }
@@ -393,7 +393,7 @@ protected function addMemberMetadata(MemberMetadata $metadata)
      */
     public function hasMemberMetadatas($property)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the hasPropertyMetadata() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the hasPropertyMetadata() method instead.', E_USER_DEPRECATED);
 
         return $this->hasPropertyMetadata($property);
     }
@@ -409,7 +409,7 @@ public function hasMemberMetadatas($property)
      */
     public function getMemberMetadatas($property)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getPropertyMetadata() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use the getPropertyMetadata() method instead.', E_USER_DEPRECATED);
 
         return $this->getPropertyMetadata($property);
     }
diff --git a/core/vendor/symfony/validator/Mapping/ClassMetadataFactory.php b/core/vendor/symfony/validator/Mapping/ClassMetadataFactory.php
index 4069b3fbcad0ef0178aa16237458311c846556e1..92cc85b2ef67d10f13bc63e70deb32177d986cad 100644
--- a/core/vendor/symfony/validator/Mapping/ClassMetadataFactory.php
+++ b/core/vendor/symfony/validator/Mapping/ClassMetadataFactory.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Mapping;
 
-@trigger_error('The '.__NAMESPACE__.'\ClassMetadataFactory class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ClassMetadataFactory class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
 
diff --git a/core/vendor/symfony/validator/Mapping/ElementMetadata.php b/core/vendor/symfony/validator/Mapping/ElementMetadata.php
index 69fe8bfa7372963a907237fc12e15e3753550956..1783864e0067a80fbda93ea616826759117aa565 100644
--- a/core/vendor/symfony/validator/Mapping/ElementMetadata.php
+++ b/core/vendor/symfony/validator/Mapping/ElementMetadata.php
@@ -24,7 +24,7 @@
     public function __construct()
     {
         if (!$this instanceof MemberMetadata && !$this instanceof ClassMetadata) {
-            @trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\GenericMetadata class instead.', E_USER_DEPRECATED);
+            trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\GenericMetadata class instead.', E_USER_DEPRECATED);
         }
     }
 }
diff --git a/core/vendor/symfony/validator/Mapping/MemberMetadata.php b/core/vendor/symfony/validator/Mapping/MemberMetadata.php
index 0def248431f2dc9d7e0205efed48298d3a5fcd41..394fa2059fd8c79f56247e321ff85a86e870b5aa 100644
--- a/core/vendor/symfony/validator/Mapping/MemberMetadata.php
+++ b/core/vendor/symfony/validator/Mapping/MemberMetadata.php
@@ -82,7 +82,7 @@ public function __construct($class, $name, $property)
      */
     public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
         $visitor->visit($this, $value, $group, $propertyPath);
 
@@ -192,7 +192,7 @@ public function isPrivate($objectOrClassName)
      */
     public function isCascaded()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getCascadingStrategy() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getCascadingStrategy() method instead.', E_USER_DEPRECATED);
 
         return (bool) ($this->cascadingStrategy & CascadingStrategy::CASCADE);
     }
@@ -208,7 +208,7 @@ public function isCascaded()
      */
     public function isCollectionCascaded()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
 
         return (bool) ($this->traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE));
     }
@@ -224,7 +224,7 @@ public function isCollectionCascaded()
      */
     public function isCollectionCascadedDeeply()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
 
         return !($this->traversalStrategy & TraversalStrategy::STOP_RECURSION);
     }
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.it.xlf b/core/vendor/symfony/validator/Resources/translations/validators.it.xlf
index b1dcb1e7b6217d3574cb6bcbc1460b34423b6b43..5a411eaa0ac96984d11a80e9245823102be8e29c 100644
--- a/core/vendor/symfony/validator/Resources/translations/validators.it.xlf
+++ b/core/vendor/symfony/validator/Resources/translations/validators.it.xlf
@@ -40,7 +40,7 @@
             </trans-unit>
             <trans-unit id="10">
                 <source>This field is missing.</source>
-                <target>Questo campo Ã¨ mancante.</target>
+                <target>Questo campo Ã¨ manca.</target>
             </trans-unit>
             <trans-unit id="11">
                 <source>This value is not a valid date.</source>
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.ja.xlf b/core/vendor/symfony/validator/Resources/translations/validators.ja.xlf
index a58f5b8d8c660b5d89f7a875eecfcd8d87365377..63eecc0e19e79630b2c9374d802e91e14c9ea0a9 100644
--- a/core/vendor/symfony/validator/Resources/translations/validators.ja.xlf
+++ b/core/vendor/symfony/validator/Resources/translations/validators.ja.xlf
@@ -175,7 +175,7 @@
                 <target>ç”»åƒ�ã�®é«˜ã�•ã�Œå°�ã�•ã�™ã�Žã�¾ã�™({{ height }}ãƒ”ã‚¯ã‚»ãƒ«)ã€‚{{ min_height }}ãƒ”ã‚¯ã‚»ãƒ«ä»¥ä¸Šã�«ã�—ã�¦ã��ã� ã�•ã�„ã€‚</target>
             </trans-unit>
             <trans-unit id="47">
-                <source>This value should be the user's current password.</source>
+                <source>This value should be the user current password.</source>
                 <target>ãƒ¦ãƒ¼ã‚¶ãƒ¼ã�®ç�¾åœ¨ã�®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã�§ã�ªã�‘ã‚Œã�°ã�ªã‚Šã�¾ã�›ã‚“ã€‚</target>
             </trans-unit>
             <trans-unit id="48">
diff --git a/core/vendor/symfony/validator/Resources/translations/validators.th.xlf b/core/vendor/symfony/validator/Resources/translations/validators.th.xlf
index d5b57031b9f69101c6f73e43fe5e63e6fea82373..0237a308acd5fbdf890fca625364e87e81edbc68 100644
--- a/core/vendor/symfony/validator/Resources/translations/validators.th.xlf
+++ b/core/vendor/symfony/validator/Resources/translations/validators.th.xlf
@@ -175,7 +175,7 @@
                 <target>à¸„à¸§à¸²à¸¡à¸ªà¸¹à¸‡à¸‚à¸­à¸‡à¸ à¸²à¸žà¹„à¸¡à¹ˆà¹„à¸”à¹‰à¸‚à¸™à¸²à¸” ({{ height }}px) à¸­à¸™à¸¸à¸�à¸²à¸•à¹ƒà¸«à¹‰à¸ªà¸¹à¸‡à¸­à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸­à¸¢à¸—à¸µà¹ˆà¸ªà¸¸à¸” {{ min_height }}px</target>
             </trans-unit>
             <trans-unit id="47">
-                <source>This value should be the user's current password.</source>
+                <source>This value should be the user current password.</source>
                 <target>à¸„à¹ˆà¸²à¸™à¸µà¹‰à¸„à¸§à¸£à¸ˆà¸°à¹€à¸›à¹‡à¸™à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸‚à¸­à¸‡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰</target>
             </trans-unit>
             <trans-unit id="48">
diff --git a/core/vendor/symfony/validator/Tests/Constraints/AbstractConstraintValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/AbstractConstraintValidatorTest.php
index b5e2a7a97ddb0ee705552e5e48653c668e119990..55ddbfe9c8593a37273c6937bd6a69d43c30aa69 100644
--- a/core/vendor/symfony/validator/Tests/Constraints/AbstractConstraintValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/AbstractConstraintValidatorTest.php
@@ -51,6 +51,10 @@
 
     protected function setUp()
     {
+        if (Validation::API_VERSION_2_5 !== $this->getApiVersion()) {
+            $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+        }
+
         $this->group = 'MyGroup';
         $this->metadata = null;
         $this->object = null;
@@ -256,7 +260,7 @@ protected function assertNoViolation()
      */
     protected function assertViolation($message, array $parameters = array(), $propertyPath = 'property.path', $invalidValue = 'InvalidValue', $plural = null, $code = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the buildViolation() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the buildViolation() method instead.', E_USER_DEPRECATED);
 
         $this->buildViolation($message)
             ->setParameters($parameters)
@@ -275,7 +279,7 @@ protected function assertViolation($message, array $parameters = array(), $prope
      */
     protected function assertViolations(array $expected)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the buildViolation() method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.3 and will be removed in 3.0. Use the buildViolation() method instead.', E_USER_DEPRECATED);
 
         $violations = $this->context->getViolations();
 
diff --git a/core/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
index b619291665e9d2221e9c1b7b173a4c3f57e0823c..b53f6c6995cc10bee902c1ee854129a77604538e 100644
--- a/core/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
@@ -191,6 +191,8 @@ public function testArrayCallableExplicitName()
      */
     public function testLegacySingleMethodBc()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array('validate'));
 
@@ -207,6 +209,8 @@ public function testLegacySingleMethodBc()
      */
     public function testLegacySingleMethodBcExplicitName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array('methods' => array('validate')));
 
@@ -223,6 +227,8 @@ public function testLegacySingleMethodBcExplicitName()
      */
     public function testLegacyMultipleMethodsBc()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array('validate', 'validateStatic'));
 
@@ -241,6 +247,8 @@ public function testLegacyMultipleMethodsBc()
      */
     public function testLegacyMultipleMethodsBcExplicitName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array(
             'methods' => array('validate', 'validateStatic'),
@@ -261,6 +269,8 @@ public function testLegacyMultipleMethodsBcExplicitName()
      */
     public function testLegacySingleStaticMethodBc()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array(
             array(__CLASS__.'_Class', 'validateCallback'),
@@ -279,6 +289,8 @@ public function testLegacySingleStaticMethodBc()
      */
     public function testLegacySingleStaticMethodBcExplicitName()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
         $constraint = new Callback(array(
             'methods' => array(array(__CLASS__.'_Class', 'validateCallback')),
@@ -317,6 +329,8 @@ public function testExpectValidCallbacks()
      */
     public function testLegacyExpectEitherCallbackOrMethods()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $object = new CallbackValidatorTest_Object();
 
         $this->validator->validate($object, new Callback(array(
diff --git a/core/vendor/symfony/validator/Tests/Constraints/CardSchemeValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/CardSchemeValidatorTest.php
index 2d623c97846ee03406c1ae7cd03bfa25786ed708..aab54e590f0d50972da53ced8a261a6a7c201d9d 100644
--- a/core/vendor/symfony/validator/Tests/Constraints/CardSchemeValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/CardSchemeValidatorTest.php
@@ -97,10 +97,8 @@ public function getValidNumbers()
             array('LASER', '6771656738314582216'),
             array('MAESTRO', '6759744069209'),
             array('MAESTRO', '5020507657408074712'),
-            array('MAESTRO', '5612559223580173965'),
             array('MAESTRO', '6759744069209'),
             array('MAESTRO', '6759744069209'),
-            array('MAESTRO', '6594371785970435599'),
             array('MASTERCARD', '5555555555554444'),
             array('MASTERCARD', '5105105105105100'),
             array('VISA', '4111111111111111'),
diff --git a/core/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php b/core/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
index 7e7a5cc70f0d357293987b14d6b32e129a6bb1d0..0361333fdc16a0006288f7f516391dae3c6ad4f8 100644
--- a/core/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
@@ -91,7 +91,6 @@ public function getInvalidEmails()
             array('example'),
             array('example@'),
             array('example@localhost'),
-            array('foo@example.com bar'),
         );
     }
 
diff --git a/core/vendor/symfony/validator/Tests/Constraints/FileTest.php b/core/vendor/symfony/validator/Tests/Constraints/FileTest.php
index fbd4b074260b9e4b774cf2832b14dbfcc0ef5abb..2ee46813bf8b0bedfcad235852c9ac3b2bc779d8 100644
--- a/core/vendor/symfony/validator/Tests/Constraints/FileTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/FileTest.php
@@ -12,14 +12,13 @@
 namespace Symfony\Component\Validator\Tests\Constraints;
 
 use Symfony\Component\Validator\Constraints\File;
-use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
 
 class FileTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @param mixed $maxSize
-     * @param int   $bytes
-     * @param bool  $binaryFormat
+     * @param int   bytes
+     * @param bool  $bytes
      * @dataProvider provideValidSizes
      */
     public function testMaxSize($maxSize, $bytes, $binaryFormat)
@@ -31,54 +30,10 @@ public function testMaxSize($maxSize, $bytes, $binaryFormat)
     }
 
     /**
-     * @dataProvider provideValidSizes
-     *
-     * @param int|string $maxSize
-     * @param int        $bytes
-     * @param string     $binaryFormat
-     */
-    public function testMaxSizeCanBeSetAfterInitialization($maxSize, $bytes, $binaryFormat)
-    {
-        $file = new File();
-        $file->maxSize = $maxSize;
-
-        $this->assertSame($bytes, $file->maxSize);
-        $this->assertSame($binaryFormat, $file->binaryFormat);
-    }
-
-    /**
-     * @dataProvider provideInvalidSizes
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     *
-     * @param int|string $maxSize
-     */
-    public function testInvalidValueForMaxSizeThrowsExceptionAfterInitialization($maxSize)
-    {
-        $file = new File(array('maxSize' => 1000));
-        $file->maxSize = $maxSize;
-    }
-
-    /**
-     * @dataProvider provideInvalidSizes
-     *
-     * @param int|string $maxSize
-     */
-    public function testMaxSizeCannotBeSetToInvalidValueAfterInitialization($maxSize)
-    {
-        $file = new File(array('maxSize' => 1000));
-
-        try {
-            $file->maxSize = $maxSize;
-        } catch (ConstraintDefinitionException $e) {
-        }
-
-        $this->assertSame(1000, $file->maxSize);
-    }
-
-    /**
      * @param mixed $maxSize
+     * @param int   $bytes
      * @dataProvider provideInValidSizes
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
+     * @expectedException Symfony\Component\Validator\Exception\ConstraintDefinitionException
      */
     public function testInvalideMaxSize($maxSize)
     {
diff --git a/core/vendor/symfony/validator/Tests/Constraints/GroupSequenceTest.php b/core/vendor/symfony/validator/Tests/Constraints/GroupSequenceTest.php
index aa2d601042c55d6a5aa8645be41f4d41498e0b58..30f024537289a3e509886e5101254b8ef0972f24 100644
--- a/core/vendor/symfony/validator/Tests/Constraints/GroupSequenceTest.php
+++ b/core/vendor/symfony/validator/Tests/Constraints/GroupSequenceTest.php
@@ -37,6 +37,8 @@ public function testCreateDoctrineStyle()
      */
     public function testLegacyIterate()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $this->assertSame(array('Group 1', 'Group 2'), iterator_to_array($sequence));
@@ -47,6 +49,8 @@ public function testLegacyIterate()
      */
     public function testLegacyCount()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $this->assertCount(2, $sequence);
@@ -57,6 +61,8 @@ public function testLegacyCount()
      */
     public function testLegacyArrayAccess()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $this->assertSame('Group 1', $sequence[0]);
@@ -79,6 +85,8 @@ public function testLegacyArrayAccess()
      */
     public function testLegacyGetExpectsExistingKey()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         $sequence[2];
@@ -89,6 +97,8 @@ public function testLegacyGetExpectsExistingKey()
      */
     public function testLegacyUnsetIgnoresNonExistingKeys()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $sequence = new GroupSequence(array('Group 1', 'Group 2'));
 
         // should not fail
diff --git a/core/vendor/symfony/validator/Tests/LegacyExecutionContextTest.php b/core/vendor/symfony/validator/Tests/LegacyExecutionContextTest.php
index f0139c0da5ffc434a4cbedb11de9ddf43971aa15..4fec2aacb56aaceb444ca81a98951ab29f2e7af6 100644
--- a/core/vendor/symfony/validator/Tests/LegacyExecutionContextTest.php
+++ b/core/vendor/symfony/validator/Tests/LegacyExecutionContextTest.php
@@ -41,6 +41,8 @@ class LegacyExecutionContextTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $this->visitor = $this->getMockBuilder('Symfony\Component\Validator\ValidationVisitor')
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/core/vendor/symfony/validator/Tests/Mapping/Cache/LegacyApcCacheTest.php b/core/vendor/symfony/validator/Tests/Mapping/Cache/LegacyApcCacheTest.php
index 9d39784280e3fc307b246c9faf66a8e872edc32c..bb69cf5e7497aa96a3a98396918b74bc228403d7 100644
--- a/core/vendor/symfony/validator/Tests/Mapping/Cache/LegacyApcCacheTest.php
+++ b/core/vendor/symfony/validator/Tests/Mapping/Cache/LegacyApcCacheTest.php
@@ -20,6 +20,8 @@ class LegacyApcCacheTest extends \PHPUnit_Framework_TestCase
 {
     protected function setUp()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         if (!extension_loaded('apc') || !ini_get('apc.enable_cli')) {
             $this->markTestSkipped('APC is not loaded.');
         }
diff --git a/core/vendor/symfony/validator/Tests/Mapping/LegacyElementMetadataTest.php b/core/vendor/symfony/validator/Tests/Mapping/LegacyElementMetadataTest.php
index b68c88293f194a5bc45224b6aaf16d8b15c36380..c77e6fe9aa15be738b68fffc777cc98f1ddd049c 100644
--- a/core/vendor/symfony/validator/Tests/Mapping/LegacyElementMetadataTest.php
+++ b/core/vendor/symfony/validator/Tests/Mapping/LegacyElementMetadataTest.php
@@ -24,6 +24,8 @@ class LegacyElementMetadataTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $this->metadata = new TestElementMetadata();
     }
 
diff --git a/core/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php b/core/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
index fafde341ac06259b6ed4f095f5f038f707d5925d..a4473bc68a0364b0eb578174500b5393706cc36a 100644
--- a/core/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
+++ b/core/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
@@ -40,6 +40,8 @@ protected function tearDown()
      */
     public function testLegacyAddValidSetsMemberToCascaded()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $result = $this->metadata->addConstraint(new Valid());
 
         $this->assertEquals(array(), $this->metadata->getConstraints());
@@ -52,6 +54,8 @@ public function testLegacyAddValidSetsMemberToCascaded()
      */
     public function testLegacyAddOtherConstraintDoesNotSetMemberToCascaded()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $result = $this->metadata->addConstraint($constraint = new ConstraintA());
 
         $this->assertEquals(array($constraint), $this->metadata->getConstraints());
diff --git a/core/vendor/symfony/validator/Tests/Validator/Abstract2Dot5ApiTest.php b/core/vendor/symfony/validator/Tests/Validator/Abstract2Dot5ApiTest.php
index 12c8d87f2ca5b43ac4db21d928b76186c33de682..4a041afbff0d54dd665059d5bf4d904efcc2a7bc 100644
--- a/core/vendor/symfony/validator/Tests/Validator/Abstract2Dot5ApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/Abstract2Dot5ApiTest.php
@@ -75,12 +75,6 @@ public function testValidateConstraintWithoutGroup()
         $this->assertCount(1, $violations);
     }
 
-    public function testValidateWithEmptyArrayAsConstraint()
-    {
-        $violations = $this->validator->validate('value', array());
-        $this->assertCount(0, $violations);
-    }
-
     public function testGroupSequenceAbortsAfterFailedGroup()
     {
         $entity = new Entity();
@@ -584,6 +578,8 @@ public function testReferenceMetadataMustImplementClassMetadataInterface()
      */
     public function testLegacyPropertyMetadataMustImplementPropertyMetadataInterface()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $entity = new Entity();
 
         // Legacy interface
diff --git a/core/vendor/symfony/validator/Tests/Validator/AbstractLegacyApiTest.php b/core/vendor/symfony/validator/Tests/Validator/AbstractLegacyApiTest.php
index 5f4167dcd8849d311302797a3a0838a6100b90fa..77ec10212a37f2be2b12d47aaad6fdcb8b2c20ea 100644
--- a/core/vendor/symfony/validator/Tests/Validator/AbstractLegacyApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/AbstractLegacyApiTest.php
@@ -42,6 +42,8 @@
 
     protected function setUp()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         parent::setUp();
 
         $this->validator = $this->createValidator($this->metadataFactory);
diff --git a/core/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php b/core/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
index 69c025d4594ee8b5fb8e1e6feadea374b3b178bf..d8833dedcfb4eb1fdb5fa2765a0fb473cef0062a 100644
--- a/core/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
@@ -844,6 +844,8 @@ public function testValidateProperty()
      */
     public function testLegacyValidatePropertyFailsIfPropertiesNotSupported()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         // $metadata does not implement PropertyMetadataContainerInterface
         $metadata = $this->getMock('Symfony\Component\Validator\MetadataInterface');
 
@@ -975,6 +977,8 @@ public function testValidatePropertyValueWithClassName()
      */
     public function testLegacyValidatePropertyValueFailsIfPropertiesNotSupported()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         // $metadata does not implement PropertyMetadataContainerInterface
         $metadata = $this->getMock('Symfony\Component\Validator\MetadataInterface');
 
diff --git a/core/vendor/symfony/validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php b/core/vendor/symfony/validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
index b27e6454bea7a471711f7c0998823b578ed82e78..05961269a5552969f27e132309c2f35dea63b1b8 100644
--- a/core/vendor/symfony/validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
+++ b/core/vendor/symfony/validator/Tests/Validator/RecursiveValidator2Dot5ApiTest.php
@@ -15,7 +15,6 @@
 use Symfony\Component\Validator\ConstraintValidatorFactory;
 use Symfony\Component\Validator\Context\ExecutionContextFactory;
 use Symfony\Component\Validator\MetadataFactoryInterface;
-use Symfony\Component\Validator\Tests\Fixtures\Entity;
 use Symfony\Component\Validator\Validator\RecursiveValidator;
 
 class RecursiveValidator2Dot5ApiTest extends Abstract2Dot5ApiTest
@@ -30,28 +29,4 @@ protected function createValidator(MetadataFactoryInterface $metadataFactory, ar
 
         return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers);
     }
-
-    public function testEmptyGroupsArrayDoesNotTriggerDeprecation()
-    {
-        $entity = new Entity();
-
-        $validatorContext = $this->getMock('Symfony\Component\Validator\Validator\ContextualValidatorInterface');
-        $validatorContext
-            ->expects($this->once())
-            ->method('validate')
-            ->with($entity, null, array())
-            ->willReturnSelf();
-
-        $validator = $this
-            ->getMockBuilder('Symfony\Component\Validator\Validator\RecursiveValidator')
-            ->disableOriginalConstructor()
-            ->setMethods(array('startContext'))
-            ->getMock();
-        $validator
-            ->expects($this->once())
-            ->method('startContext')
-            ->willReturn($validatorContext);
-
-        $validator->validate($entity, null, array());
-    }
 }
diff --git a/core/vendor/symfony/validator/ValidationVisitor.php b/core/vendor/symfony/validator/ValidationVisitor.php
index 838646260f36ba25999a7006cfd9c6539ec3a8dd..c7e06554b8cb5ac82df9d71f857fb74963b87385 100644
--- a/core/vendor/symfony/validator/ValidationVisitor.php
+++ b/core/vendor/symfony/validator/ValidationVisitor.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator;
 
-@trigger_error('The '.__NAMESPACE__.'\ValidationVisitor class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\ValidationVisitor class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\Exception\NoSuchMetadataException;
diff --git a/core/vendor/symfony/validator/Validator.php b/core/vendor/symfony/validator/Validator.php
index 4da27e7b375a0f83648337a5ec2353200b7729d3..8243f17acbf6bcce45a95802ddd8930abbd963f5 100644
--- a/core/vendor/symfony/validator/Validator.php
+++ b/core/vendor/symfony/validator/Validator.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator;
 
-@trigger_error('The '.__NAMESPACE__.'\Validator class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Validator\RecursiveValidator class instead.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\Validator class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Validator\RecursiveValidator class instead.', E_USER_DEPRECATED);
 
 use Symfony\Component\Translation\TranslatorInterface;
 use Symfony\Component\Validator\Constraints\Valid;
diff --git a/core/vendor/symfony/validator/Validator/LegacyValidator.php b/core/vendor/symfony/validator/Validator/LegacyValidator.php
index 0b0934bd3e2536e35993a1e8650857786639744d..6c5a10c355591d7dbb589e0fcce2bf7b58568bf2 100644
--- a/core/vendor/symfony/validator/Validator/LegacyValidator.php
+++ b/core/vendor/symfony/validator/Validator/LegacyValidator.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Validator;
 
-@trigger_error('The '.__NAMESPACE__.'\LegacyValidator class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\LegacyValidator class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
 /**
  * A validator that supports both the API of Symfony < 2.5 and Symfony 2.5+.
diff --git a/core/vendor/symfony/validator/Validator/RecursiveValidator.php b/core/vendor/symfony/validator/Validator/RecursiveValidator.php
index e4dc0fb057d29c8fa6e69c1f858e43e7066b9ceb..c825bfa6f48b8f5cbda33e82f067af0765eb357c 100644
--- a/core/vendor/symfony/validator/Validator/RecursiveValidator.php
+++ b/core/vendor/symfony/validator/Validator/RecursiveValidator.php
@@ -25,7 +25,6 @@
  * Recursive implementation of {@link ValidatorInterface}.
  *
  * @since  2.5
- *
  * @author Bernhard Schussek <bschussek@gmail.com>
  */
 class RecursiveValidator implements ValidatorInterface, LegacyValidatorInterface
@@ -125,7 +124,7 @@ public function validate($value, $groups = null, $traverse = false, $deep = fals
             $constraints = $groups;
             $groups = $traverse;
         } else {
-            @trigger_error('The Symfony\Component\Validator\ValidatorInterface::validate method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::validate method instead.', E_USER_DEPRECATED);
+            trigger_error('The Symfony\Component\Validator\ValidatorInterface::validate method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::validate method instead.', E_USER_DEPRECATED);
 
             $constraints = new Valid(array('traverse' => $traverse, 'deep' => $deep));
         }
@@ -161,7 +160,7 @@ public function validatePropertyValue($objectOrClass, $propertyName, $value, $gr
      */
     public function validateValue($value, $constraints, $groups = null)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::validate method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::validate method instead.', E_USER_DEPRECATED);
 
         return $this->validate($value, $constraints, $groups);
     }
@@ -171,18 +170,18 @@ public function validateValue($value, $constraints, $groups = null)
      */
     public function getMetadataFactory()
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::getMetadataFor or Symfony\Component\Validator\Validator\ValidatorInterface::hasMetadataFor method instead.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated in version 2.5 and will be removed in version 3.0. Use the Symfony\Component\Validator\Validator\ValidatorInterface::getMetadataFor or Symfony\Component\Validator\Validator\ValidatorInterface::hasMetadataFor method instead.', E_USER_DEPRECATED);
 
         return $this->metadataFactory;
     }
 
     private static function testConstraints($constraints)
     {
-        return null === $constraints || $constraints instanceof Constraint || (is_array($constraints) && (0 === count($constraints) || current($constraints) instanceof Constraint));
+        return null === $constraints || $constraints instanceof Constraint || (is_array($constraints) && current($constraints) instanceof Constraint);
     }
 
     private static function testGroups($groups)
     {
-        return null === $groups || is_string($groups) || $groups instanceof GroupSequence || (is_array($groups) && (0 === count($groups) || is_string(current($groups)) || current($groups) instanceof GroupSequence));
+        return null === $groups || is_string($groups) || $groups instanceof GroupSequence || (is_array($groups) && (is_string(current($groups)) || current($groups) instanceof GroupSequence));
     }
 }
diff --git a/core/vendor/symfony/validator/ValidatorBuilder.php b/core/vendor/symfony/validator/ValidatorBuilder.php
index 4a69976ed2b11227cca39acf9ffdc9031052ddfe..dd772cf3832547ca644d2e3a913dac965afcf9ad 100644
--- a/core/vendor/symfony/validator/ValidatorBuilder.php
+++ b/core/vendor/symfony/validator/ValidatorBuilder.php
@@ -300,7 +300,7 @@ public function setTranslationDomain($translationDomain)
      */
     public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. The validator will function without a property accessor.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. The validator will function without a property accessor.', E_USER_DEPRECATED);
 
         if (null !== $this->validatorFactory) {
             throw new ValidatorException('You cannot set a property accessor after setting a custom validator factory. Configure your validator factory instead.');
@@ -318,7 +318,7 @@ public function setPropertyAccessor(PropertyAccessorInterface $propertyAccessor)
      */
     public function setApiVersion($apiVersion)
     {
-        @trigger_error('The '.__METHOD__.' method is deprecated in version 2.7 and will be removed in version 3.0.', E_USER_DEPRECATED);
+        trigger_error('The '.__METHOD__.' method is deprecated in version 2.7 and will be removed in version 3.0.', E_USER_DEPRECATED);
 
         if (!in_array($apiVersion, array(Validation::API_VERSION_2_4, Validation::API_VERSION_2_5, Validation::API_VERSION_2_5_BC))) {
             throw new InvalidArgumentException(sprintf('The requested API version is invalid: "%s"', $apiVersion));
diff --git a/core/vendor/symfony/validator/Violation/LegacyConstraintViolationBuilder.php b/core/vendor/symfony/validator/Violation/LegacyConstraintViolationBuilder.php
index 7410b0a6fc2d7c1646955e9e9fe23b252cd12799..0ce6da90608e3fc2a7f8063617efe8caef0ff3a9 100644
--- a/core/vendor/symfony/validator/Violation/LegacyConstraintViolationBuilder.php
+++ b/core/vendor/symfony/validator/Violation/LegacyConstraintViolationBuilder.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Validator\Violation;
 
-@trigger_error('The '.__NAMESPACE__.'\LegacyConstraintViolationBuilder class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
+trigger_error('The '.__NAMESPACE__.'\LegacyConstraintViolationBuilder class is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
 
 use Symfony\Component\Validator\ExecutionContextInterface;
 
diff --git a/core/vendor/symfony/yaml/Inline.php b/core/vendor/symfony/yaml/Inline.php
index 6e3877bff041f02391bc62980fd0a134b3d8b9fb..52ea724cf407095786be9068cf0e0dd7aa8a35b7 100644
--- a/core/vendor/symfony/yaml/Inline.php
+++ b/core/vendor/symfony/yaml/Inline.php
@@ -48,7 +48,7 @@ public static function parse($value, $exceptionOnInvalidType = false, $objectSup
 
         $value = trim($value);
 
-        if ('' === $value) {
+        if (0 == strlen($value)) {
             return '';
         }
 
diff --git a/core/vendor/symfony/yaml/Parser.php b/core/vendor/symfony/yaml/Parser.php
index 2de62e58bd075ce9ad9058ca04b1e10ab83554a1..d72c7639c8337ef663dfc8472e35f82ea0f3d168 100644
--- a/core/vendor/symfony/yaml/Parser.php
+++ b/core/vendor/symfony/yaml/Parser.php
@@ -234,7 +234,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
                 }
 
                 // 1-liner optionally followed by newline(s)
-                if (is_string($value) && $this->lines[0] === trim($value)) {
+                if ($this->lines[0] === trim($value)) {
                     try {
                         $value = Inline::parse($this->lines[0], $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs);
                     } catch (ParseException $e) {
@@ -356,7 +356,7 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false)
             return;
         }
 
-        if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) {
+        if ($inSequence && $oldLineIndentation === $newIndent && '-' === $data[0][0]) {
             // the previous line contained a dash but no item content, this line is a sequence item with the same indentation
             // and therefore no nested list or mapping
             $this->moveToPreviousLine();
@@ -546,9 +546,9 @@ private function parseFoldedScalar($separator, $indicator = '', $indentation = 0
 
         // deal with trailing newlines as indicated
         if ('' === $indicator) {
-            $text = preg_replace('/\n+$/', "\n", $text);
+            $text = preg_replace('/\n+$/s', "\n", $text);
         } elseif ('-' === $indicator) {
-            $text = preg_replace('/\n+$/', '', $text);
+            $text = preg_replace('/\n+$/s', '', $text);
         }
 
         return $text;
@@ -647,7 +647,7 @@ private function cleanup($value)
             $value = $trimmedValue;
 
             // remove end of the document marker (...)
-            $value = preg_replace('#\.\.\.\s*$#', '', $value);
+            $value = preg_replace('#\.\.\.\s*$#s', '', $value);
         }
 
         return $value;
diff --git a/core/vendor/symfony/yaml/Tests/InlineTest.php b/core/vendor/symfony/yaml/Tests/InlineTest.php
index 0776e4fa8dfbf999875e36db9edfc02c1668db40..320eb5072132bc349a1a70fd0edb2f88937a6f91 100644
--- a/core/vendor/symfony/yaml/Tests/InlineTest.php
+++ b/core/vendor/symfony/yaml/Tests/InlineTest.php
@@ -50,19 +50,15 @@ public function testDumpNumericValueWithLocale()
             $this->markTestSkipped('Your platform does not support locales.');
         }
 
-        try {
-            $requiredLocales = array('fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252');
-            if (false === setlocale(LC_NUMERIC, $requiredLocales)) {
-                $this->markTestSkipped('Could not set any of required locales: '.implode(', ', $requiredLocales));
-            }
-
-            $this->assertEquals('1.2', Inline::dump(1.2));
-            $this->assertContains('fr', strtolower(setlocale(LC_NUMERIC, 0)));
-            setlocale(LC_NUMERIC, $locale);
-        } catch (\Exception $e) {
-            setlocale(LC_NUMERIC, $locale);
-            throw $e;
+        $required_locales = array('fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252');
+        if (false === setlocale(LC_ALL, $required_locales)) {
+            $this->markTestSkipped('Could not set any of required locales: '.implode(', ', $required_locales));
         }
+
+        $this->assertEquals('1.2', Inline::dump(1.2));
+        $this->assertContains('fr', strtolower(setlocale(LC_NUMERIC, 0)));
+
+        setlocale(LC_ALL, $locale);
     }
 
     public function testHashStringsResemblingExponentialNumericsShouldNotBeChangedToINF()
diff --git a/core/vendor/symfony/yaml/Tests/ParserTest.php b/core/vendor/symfony/yaml/Tests/ParserTest.php
index f434d5585d8eab004d3b0eea29b6fffb13ab5cea..6e39e7dc660ee5c95ace44bcab21749478db3ad3 100644
--- a/core/vendor/symfony/yaml/Tests/ParserTest.php
+++ b/core/vendor/symfony/yaml/Tests/ParserTest.php
@@ -552,21 +552,6 @@ public function testMappingInASequence()
     }
 
     /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage missing colon
-     */
-    public function testScalarInSequence()
-    {
-        Yaml::parse(<<<EOF
-foo:
-    - bar
-"missing colon"
-    foo: bar
-EOF
-        );
-    }
-
-    /**
      * > It is an error for two equal keys to appear in the same mapping node.
      * > In such a case the YAML processor may continue, ignoring the second
      * > `key: value` pair and issuing an appropriate warning. This strategy
diff --git a/core/vendor/symfony/yaml/Tests/YamlTest.php b/core/vendor/symfony/yaml/Tests/YamlTest.php
index 8db65e39905120b720741b60714b88d76232a779..a7261562d539c3b89e514f69c55f2d95518b8159 100644
--- a/core/vendor/symfony/yaml/Tests/YamlTest.php
+++ b/core/vendor/symfony/yaml/Tests/YamlTest.php
@@ -28,6 +28,8 @@ public function testParseAndDump()
      */
     public function testLegacyParseFromFile()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $filename = __DIR__.'/Fixtures/index.yml';
         $contents = file_get_contents($filename);
         $parsedByFilename = Yaml::parse($filename);
diff --git a/core/vendor/symfony/yaml/Yaml.php b/core/vendor/symfony/yaml/Yaml.php
index b6def51749e6c6b14c75dfc5d94dc4bd64a0272f..e17698a07c74f9a64bcaa96c669b3c9d641eca09 100644
--- a/core/vendor/symfony/yaml/Yaml.php
+++ b/core/vendor/symfony/yaml/Yaml.php
@@ -38,8 +38,6 @@ 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.
      *
-     * Note: the ability to pass file names to the Yaml::parse method is deprecated since version 2.2 and will be removed in 3.0. Pass the YAML contents of the file instead.
-     *
      * @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
@@ -49,6 +47,8 @@ class Yaml
      *
      * @throws ParseException If the YAML is not valid
      *
+     * @deprecated The ability to pass file names to the Yaml::parse method is deprecated since version 2.2 and will be removed in 3.0. Pass the YAML contents of the file instead.
+     *
      * @api
      */
     public static function parse($input, $exceptionOnInvalidType = false, $objectSupport = false, $objectForMap = false)
@@ -56,7 +56,7 @@ public static function parse($input, $exceptionOnInvalidType = false, $objectSup
         // if input is a file, process it
         $file = '';
         if (strpos($input, "\n") === false && is_file($input)) {
-            @trigger_error('The ability to pass file names to the '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Pass the YAML contents of the file instead.', E_USER_DEPRECATED);
+            trigger_error('The ability to pass file names to the '.__METHOD__.' method is deprecated since version 2.2 and will be removed in 3.0. Pass the YAML contents of the file instead.', E_USER_DEPRECATED);
 
             if (false === is_readable($input)) {
                 throw new ParseException(sprintf('Unable to parse "%s" as the file is not readable.', $input));
diff --git a/core/vendor/zendframework/zend-escaper/.coveralls.yml b/core/vendor/zendframework/zend-escaper/.coveralls.yml
new file mode 100644
index 0000000000000000000000000000000000000000..53bda829c8127d2fc8263e6fb6a54fb66f4916b1
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/.coveralls.yml
@@ -0,0 +1,3 @@
+coverage_clover: clover.xml
+json_path: coveralls-upload.json
+src_dir: src
diff --git a/core/vendor/zendframework/zend-escaper/CONTRIBUTING.md b/core/vendor/zendframework/zend-escaper/CONTRIBUTING.md
index e77f5d2d5b37809160135bc2c6b6a51b6637d794..2b58aca399b57002997d02228346ade66ccf7fe4 100644
--- a/core/vendor/zendframework/zend-escaper/CONTRIBUTING.md
+++ b/core/vendor/zendframework/zend-escaper/CONTRIBUTING.md
@@ -1,3 +1,229 @@
 # CONTRIBUTING
 
-Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
\ No newline at end of file
+## RESOURCES
+
+If you wish to contribute to Zend Framework, please be sure to
+read/subscribe to the following resources:
+
+ -  [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
+ -  [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
+ -  ZF Contributor's mailing list:
+    Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
+    Subscribe: zf-contributors-subscribe@lists.zend.com
+ -  ZF Contributor's IRC channel:
+    #zftalk.dev on Freenode.net
+
+If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-escaper/issues/new).
+
+## Reporting Potential Security Issues
+
+If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
+issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
+We will work with you to verify the vulnerability and patch it as soon as possible.
+
+When reporting issues, please provide the following information:
+
+- Component(s) affected
+- A description indicating how to reproduce the issue
+- A summary of the security vulnerability and impact
+
+We request that you contact us via the email address above and give the project
+contributors a chance to resolve the vulnerability and issue a new release prior
+to any public exposure; this helps protect users and provides them with a chance
+to upgrade and/or update in order to protect their applications.
+
+For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
+
+## RUNNING TESTS
+
+> ### Note: testing versions prior to 2.4
+>
+> This component originates with Zend Framework 2. During the lifetime of ZF2,
+> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
+> changes were necessary. However, due to the migration, tests may not run on
+> versions < 2.4. As such, you may need to change the PHPUnit dependency if
+> attempting a fix on such a version.
+
+To run tests:
+
+- Clone the repository:
+
+  ```console
+  $ git clone git@github.com:zendframework/zend-escaper.git
+  $ cd
+  ```
+
+- Install dependencies via composer:
+
+  ```console
+  $ curl -sS https://getcomposer.org/installer | php --
+  $ ./composer.phar install
+  ```
+
+  If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
+
+- Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
+
+  ```console
+  $ ./vendor/bin/phpunit
+  ```
+
+You can turn on conditional tests with the phpunit.xml file.
+To do so:
+
+ -  Copy `phpunit.xml.dist` file to `phpunit.xml`
+ -  Edit `phpunit.xml` to enable any specific functionality you
+    want to test, as well as to provide test values to utilize.
+
+## Running Coding Standards Checks
+
+This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
+standards checks, and provides configuration for our selected checks.
+`php-cs-fixer` is installed by default via Composer.
+
+To run checks only:
+
+```console
+$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
+```
+
+To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
+flag:
+
+```console
+$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
+```
+
+If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
+they pass, and make sure you add and commit the changes after verification.
+
+## Recommended Workflow for Contributions
+
+Your first step is to establish a public repository from which we can
+pull your work into the master repository. We recommend using
+[GitHub](https://github.com), as that is where the component is already hosted.
+
+1. Setup a [GitHub account](http://github.com/), if you haven't yet
+2. Fork the repository (http://github.com/zendframework/zend-escaper)
+3. Clone the canonical repository locally and enter it.
+
+   ```console
+   $ git clone git://github.com:zendframework/zend-escaper.git
+   $ cd zend-escaper
+   ```
+
+4. Add a remote to your fork; substitute your GitHub username in the command
+   below.
+
+   ```console
+   $ git remote add {username} git@github.com:{username}/zend-escaper.git
+   $ git fetch {username}
+   ```
+
+### Keeping Up-to-Date
+
+Periodically, you should update your fork or personal repository to
+match the canonical ZF repository. Assuming you have setup your local repository
+per the instructions above, you can do the following:
+
+
+```console
+$ git checkout master
+$ git fetch origin
+$ git rebase origin/master
+# OPTIONALLY, to keep your remote up-to-date -
+$ git push {username} master:master
+```
+
+If you're tracking other branches -- for example, the "develop" branch, where
+new feature development occurs -- you'll want to do the same operations for that
+branch; simply substitute  "develop" for "master".
+
+### Working on a patch
+
+We recommend you do each new feature or bugfix in a new branch. This simplifies
+the task of code review as well as the task of merging your changes into the
+canonical repository.
+
+A typical workflow will then consist of the following:
+
+1. Create a new local branch based off either your master or develop branch.
+2. Switch to your new local branch. (This step can be combined with the
+   previous step with the use of `git checkout -b`.)
+3. Do some work, commit, repeat as necessary.
+4. Push the local branch to your remote repository.
+5. Send a pull request.
+
+The mechanics of this process are actually quite trivial. Below, we will
+create a branch for fixing an issue in the tracker.
+
+```console
+$ git checkout -b hotfix/9295
+Switched to a new branch 'hotfix/9295'
+```
+
+... do some work ...
+
+
+```console
+$ git commit
+```
+
+... write your log message ...
+
+
+```console
+$ git push {username} hotfix/9295:hotfix/9295
+Counting objects: 38, done.
+Delta compression using up to 2 threads.
+Compression objects: 100% (18/18), done.
+Writing objects: 100% (20/20), 8.19KiB, done.
+Total 20 (delta 12), reused 0 (delta 0)
+To ssh://git@github.com/{username}/zend-escaper.git
+   b5583aa..4f51698  HEAD -> master
+```
+
+To send a pull request, you have two options.
+
+If using GitHub, you can do the pull request from there. Navigate to
+your repository, select the branch you just created, and then select the
+"Pull Request" button in the upper right. Select the user/organization
+"zendframework" as the recipient.
+
+If using your own repository - or even if using GitHub - you can use `git
+format-patch` to create a patchset for us to apply; in fact, this is
+**recommended** for security-related patches. If you use `format-patch`, please
+send the patches as attachments to:
+
+-  zf-devteam@zend.com for patches without security implications
+-  zf-security@zend.com for security patches
+
+#### What branch to issue the pull request against?
+
+Which branch should you issue a pull request against?
+
+- For fixes against the stable release, issue the pull request against the
+  "master" branch.
+- For new features, or fixes that introduce new elements to the public API (such
+  as new public methods or properties), issue the pull request against the
+  "develop" branch.
+
+### Branch Cleanup
+
+As you might imagine, if you are a frequent contributor, you'll start to
+get a ton of branches both locally and on your remote.
+
+Once you know that your changes have been accepted to the master
+repository, we suggest doing some cleanup of these branches.
+
+-  Local branch cleanup
+
+   ```console
+   $ git branch -d <branchname>
+   ```
+
+-  Remote branch removal
+
+   ```console
+   $ git push {username} :<branchname>
+   ```
diff --git a/core/vendor/zendframework/zend-escaper/Escaper.php b/core/vendor/zendframework/zend-escaper/Escaper.php
deleted file mode 100644
index 072d543f711d33cd1f9a6b2cbb957a67ed1d59b6..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-escaper/Escaper.php
+++ /dev/null
@@ -1,386 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Escaper;
-
-/**
- * Context specific methods for use in secure output escaping
- */
-class Escaper
-{
-    /**
-     * Entity Map mapping Unicode codepoints to any available named HTML entities.
-     *
-     * While HTML supports far more named entities, the lowest common denominator
-     * has become HTML5's XML Serialisation which is restricted to the those named
-     * entities that XML supports. Using HTML entities would result in this error:
-     *     XML Parsing Error: undefined entity
-     *
-     * @var array
-     */
-    protected static $htmlNamedEntityMap = array(
-        34 => 'quot',         // quotation mark
-        38 => 'amp',          // ampersand
-        60 => 'lt',           // less-than sign
-        62 => 'gt',           // greater-than sign
-    );
-
-    /**
-     * Current encoding for escaping. If not UTF-8, we convert strings from this encoding
-     * pre-escaping and back to this encoding post-escaping.
-     *
-     * @var string
-     */
-    protected $encoding = 'utf-8';
-
-    /**
-     * Holds the value of the special flags passed as second parameter to
-     * htmlspecialchars(). We modify these for PHP 5.4 to take advantage
-     * of the new ENT_SUBSTITUTE flag for correctly dealing with invalid
-     * UTF-8 sequences.
-     *
-     * @var string
-     */
-    protected $htmlSpecialCharsFlags = ENT_QUOTES;
-
-    /**
-     * Static Matcher which escapes characters for HTML Attribute contexts
-     *
-     * @var callable
-     */
-    protected $htmlAttrMatcher;
-
-    /**
-     * Static Matcher which escapes characters for Javascript contexts
-     *
-     * @var callable
-     */
-    protected $jsMatcher;
-
-    /**
-     * Static Matcher which escapes characters for CSS Attribute contexts
-     *
-     * @var callable
-     */
-    protected $cssMatcher;
-
-    /**
-     * List of all encoding supported by this class
-     *
-     * @var array
-     */
-    protected $supportedEncodings = array(
-        'iso-8859-1',   'iso8859-1',    'iso-8859-5',   'iso8859-5',
-        'iso-8859-15',  'iso8859-15',   'utf-8',        'cp866',
-        'ibm866',       '866',          'cp1251',       'windows-1251',
-        'win-1251',     '1251',         'cp1252',       'windows-1252',
-        '1252',         'koi8-r',       'koi8-ru',      'koi8r',
-        'big5',         '950',          'gb2312',       '936',
-        'big5-hkscs',   'shift_jis',    'sjis',         'sjis-win',
-        'cp932',        '932',          'euc-jp',       'eucjp',
-        'eucjp-win',    'macroman'
-    );
-
-    /**
-     * Constructor: Single parameter allows setting of global encoding for use by
-     * the current object. If PHP 5.4 is detected, additional ENT_SUBSTITUTE flag
-     * is set for htmlspecialchars() calls.
-     *
-     * @param string $encoding
-     * @throws Exception\InvalidArgumentException
-     */
-    public function __construct($encoding = null)
-    {
-        if ($encoding !== null) {
-            $encoding = (string) $encoding;
-            if ($encoding === '') {
-                throw new Exception\InvalidArgumentException(
-                    get_class($this) . ' constructor parameter does not allow a blank value'
-                );
-            }
-
-            $encoding = strtolower($encoding);
-            if (!in_array($encoding, $this->supportedEncodings)) {
-                throw new Exception\InvalidArgumentException(
-                    'Value of \'' . $encoding . '\' passed to ' . get_class($this)
-                    . ' constructor parameter is invalid. Provide an encoding supported by htmlspecialchars()'
-                );
-            }
-
-            $this->encoding = $encoding;
-        }
-
-        if (defined('ENT_SUBSTITUTE')) {
-            $this->htmlSpecialCharsFlags|= ENT_SUBSTITUTE;
-        }
-
-        // set matcher callbacks
-        $this->htmlAttrMatcher = array($this, 'htmlAttrMatcher');
-        $this->jsMatcher       = array($this, 'jsMatcher');
-        $this->cssMatcher      = array($this, 'cssMatcher');
-    }
-
-    /**
-     * Return the encoding that all output/input is expected to be encoded in.
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Escape a string for the HTML Body context where there are very few characters
-     * of special meaning. Internally this will use htmlspecialchars().
-     *
-     * @param string $string
-     * @return string
-     */
-    public function escapeHtml($string)
-    {
-        return htmlspecialchars($string, $this->htmlSpecialCharsFlags, $this->encoding);
-    }
-
-    /**
-     * Escape a string for the HTML Attribute context. We use an extended set of characters
-     * to escape that are not covered by htmlspecialchars() to cover cases where an attribute
-     * might be unquoted or quoted illegally (e.g. backticks are valid quotes for IE).
-     *
-     * @param string $string
-     * @return string
-     */
-    public function escapeHtmlAttr($string)
-    {
-        $string = $this->toUtf8($string);
-        if ($string === '' || ctype_digit($string)) {
-            return $string;
-        }
-
-        $result = preg_replace_callback('/[^a-z0-9,\.\-_]/iSu', $this->htmlAttrMatcher, $string);
-        return $this->fromUtf8($result);
-    }
-
-    /**
-     * Escape a string for the Javascript context. This does not use json_encode(). An extended
-     * set of characters are escaped beyond ECMAScript's rules for Javascript literal string
-     * escaping in order to prevent misinterpretation of Javascript as HTML leading to the
-     * injection of special characters and entities. The escaping used should be tolerant
-     * of cases where HTML escaping was not applied on top of Javascript escaping correctly.
-     * Backslash escaping is not used as it still leaves the escaped character as-is and so
-     * is not useful in a HTML context.
-     *
-     * @param string $string
-     * @return string
-     */
-    public function escapeJs($string)
-    {
-        $string = $this->toUtf8($string);
-        if ($string === '' || ctype_digit($string)) {
-            return $string;
-        }
-
-        $result = preg_replace_callback('/[^a-z0-9,\._]/iSu', $this->jsMatcher, $string);
-        return $this->fromUtf8($result);
-    }
-
-    /**
-     * Escape a string for the URI or Parameter contexts. This should not be used to escape
-     * an entire URI - only a subcomponent being inserted. The function is a simple proxy
-     * to rawurlencode() which now implements RFC 3986 since PHP 5.3 completely.
-     *
-     * @param string $string
-     * @return string
-     */
-    public function escapeUrl($string)
-    {
-        return rawurlencode($string);
-    }
-
-    /**
-     * Escape a string for the CSS context. CSS escaping can be applied to any string being
-     * inserted into CSS and escapes everything except alphanumerics.
-     *
-     * @param string $string
-     * @return string
-     */
-    public function escapeCss($string)
-    {
-        $string = $this->toUtf8($string);
-        if ($string === '' || ctype_digit($string)) {
-            return $string;
-        }
-
-        $result = preg_replace_callback('/[^a-z0-9]/iSu', $this->cssMatcher, $string);
-        return $this->fromUtf8($result);
-    }
-
-    /**
-     * Callback function for preg_replace_callback that applies HTML Attribute
-     * escaping to all matches.
-     *
-     * @param array $matches
-     * @return string
-     */
-    protected function htmlAttrMatcher($matches)
-    {
-        $chr = $matches[0];
-        $ord = ord($chr);
-
-        /**
-         * The following replaces characters undefined in HTML with the
-         * hex entity for the Unicode replacement character.
-         */
-        if (($ord <= 0x1f && $chr != "\t" && $chr != "\n" && $chr != "\r")
-            || ($ord >= 0x7f && $ord <= 0x9f)
-        ) {
-            return '&#xFFFD;';
-        }
-
-        /**
-         * Check if the current character to escape has a name entity we should
-         * replace it with while grabbing the integer value of the character.
-         */
-        if (strlen($chr) > 1) {
-            $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
-        }
-
-        $hex = bin2hex($chr);
-        $ord = hexdec($hex);
-        if (isset(static::$htmlNamedEntityMap[$ord])) {
-            return '&' . static::$htmlNamedEntityMap[$ord] . ';';
-        }
-
-        /**
-         * Per OWASP recommendations, we'll use upper hex entities
-         * for any other characters where a named entity does not exist.
-         */
-        if ($ord > 255) {
-            return sprintf('&#x%04X;', $ord);
-        }
-        return sprintf('&#x%02X;', $ord);
-    }
-
-    /**
-     * Callback function for preg_replace_callback that applies Javascript
-     * escaping to all matches.
-     *
-     * @param array $matches
-     * @return string
-     */
-    protected function jsMatcher($matches)
-    {
-        $chr = $matches[0];
-        if (strlen($chr) == 1) {
-            return sprintf('\\x%02X', ord($chr));
-        }
-        $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
-        return sprintf('\\u%04s', strtoupper(bin2hex($chr)));
-    }
-
-    /**
-     * Callback function for preg_replace_callback that applies CSS
-     * escaping to all matches.
-     *
-     * @param array $matches
-     * @return string
-     */
-    protected function cssMatcher($matches)
-    {
-        $chr = $matches[0];
-        if (strlen($chr) == 1) {
-            $ord = ord($chr);
-        } else {
-            $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
-            $ord = hexdec(bin2hex($chr));
-        }
-        return sprintf('\\%X ', $ord);
-    }
-
-    /**
-     * Converts a string to UTF-8 from the base encoding. The base encoding is set via this
-     * class' constructor.
-     *
-     * @param string $string
-     * @throws Exception\RuntimeException
-     * @return string
-     */
-    protected function toUtf8($string)
-    {
-        if ($this->getEncoding() === 'utf-8') {
-            $result = $string;
-        } else {
-            $result = $this->convertEncoding($string, 'UTF-8', $this->getEncoding());
-        }
-
-        if (!$this->isUtf8($result)) {
-            throw new Exception\RuntimeException(
-                sprintf('String to be escaped was not valid UTF-8 or could not be converted: %s', $result)
-            );
-        }
-
-        return $result;
-    }
-
-    /**
-     * Converts a string from UTF-8 to the base encoding. The base encoding is set via this
-     * class' constructor.
-     * @param string $string
-     * @return string
-     */
-    protected function fromUtf8($string)
-    {
-        if ($this->getEncoding() === 'utf-8') {
-            return $string;
-        }
-
-        return $this->convertEncoding($string, $this->getEncoding(), 'UTF-8');
-    }
-
-    /**
-     * Checks if a given string appears to be valid UTF-8 or not.
-     *
-     * @param string $string
-     * @return bool
-     */
-    protected function isUtf8($string)
-    {
-        return ($string === '' || preg_match('/^./su', $string));
-    }
-
-    /**
-     * Encoding conversion helper which wraps iconv and mbstring where they exist or throws
-     * and exception where neither is available.
-     *
-     * @param string $string
-     * @param string $to
-     * @param array|string $from
-     * @throws Exception\RuntimeException
-     * @return string
-     */
-    protected function convertEncoding($string, $to, $from)
-    {
-        if (function_exists('iconv')) {
-            $result = iconv($from, $to, $string);
-        } elseif (function_exists('mb_convert_encoding')) {
-            $result = mb_convert_encoding($string, $to, $from);
-        } else {
-            throw new Exception\RuntimeException(
-                get_class($this)
-                . ' requires either the iconv or mbstring extension to be installed'
-                . ' when escaping for non UTF-8 strings.'
-            );
-        }
-
-        if ($result === false) {
-            return ''; // return non-fatal blank string on encoding errors from users
-        }
-        return $result;
-    }
-}
diff --git a/core/vendor/zendframework/zend-escaper/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-escaper/Exception/ExceptionInterface.php
deleted file mode 100644
index 7174796a3248a59f1ce8a68c2af167090bb53294..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-escaper/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Escaper\Exception;
-
-interface ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-escaper/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-escaper/Exception/InvalidArgumentException.php
deleted file mode 100644
index 0ad3f7313db0710283adc9e7312a24160c273a9e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-escaper/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Escaper\Exception;
-
-/**
- * Invalid argument exception
- */
-class InvalidArgumentException extends \InvalidArgumentException implements
-    ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-escaper/Exception/RuntimeException.php b/core/vendor/zendframework/zend-escaper/Exception/RuntimeException.php
deleted file mode 100644
index d626123af2e2b0b12191b5bc4e558cb1709ac2cf..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-escaper/Exception/RuntimeException.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Escaper\Exception;
-
-/**
- * Invalid argument exception
- */
-class RuntimeException extends \RuntimeException implements
-    ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-escaper/LICENSE.txt b/core/vendor/zendframework/zend-escaper/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6eab5aa14fd421059dfecada369abb8dd79c8a48
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/LICENSE.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2005-2015, Zend Technologies USA, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    * Neither the name of Zend Technologies USA, Inc. nor the names of its
+      contributors may be used to endorse or promote products derived from this
+      software without specific prior written permission.
+
+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.
diff --git a/core/vendor/zendframework/zend-escaper/README.md b/core/vendor/zendframework/zend-escaper/README.md
index 83bd91628059eb6d34d7eb4828269d5ee769d7c2..dd96215ec796062a821571ebcbdb6b507c4dd9a0 100644
--- a/core/vendor/zendframework/zend-escaper/README.md
+++ b/core/vendor/zendframework/zend-escaper/README.md
@@ -1,15 +1,11 @@
-Escaper Component from ZF2
-==========================
+# zend-escaper
 
-This is the Escaper component for ZF2.
+The OWASP Top 10 web security risks study lists Cross-Site Scripting (XSS) in
+second place. PHPâ€™s sole functionality against XSS is limited to two functions
+of which one is commonly misapplied. Thus, the `Zend\Escaper` component was written.
+It offers developers a way to escape output and defend from XSS and related
+vulnerabilities by introducing contextual escaping based on peer-reviewed rules.
 
-- File issues at https://github.com/zendframework/zf2/issues
-- Create pull requests against https://github.com/zendframework/zf2
-- Documentation is at http://framework.zend.com/docs
-
-LICENSE
--------
-
-The files in this archive are released under the [Zend Framework
-license](http://framework.zend.com/license), which is a 3-clause BSD license.
 
+- File issues at https://github.com/zendframework/zend-escaper/issues
+- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-escaper
diff --git a/core/vendor/zendframework/zend-escaper/composer.json b/core/vendor/zendframework/zend-escaper/composer.json
index 958f14a82c2d350c7c7f5a7411cb9b87a303423a..a81cb245df7e8549dc5a21963583a72e6253712c 100644
--- a/core/vendor/zendframework/zend-escaper/composer.json
+++ b/core/vendor/zendframework/zend-escaper/composer.json
@@ -6,10 +6,10 @@
         "zf2",
         "escaper"
     ],
-    "homepage": "https://github.com/zendframework/zf2",
+    "homepage": "https://github.com/zendframework/zend-escaper",
     "autoload": {
         "psr-4": {
-            "Zend\\Escaper\\": ""
+            "Zend\\Escaper\\": "src/"
         }
     },
     "require": {
@@ -20,5 +20,15 @@
             "dev-master": "2.3-dev",
             "dev-develop": "2.4-dev"
         }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "ZendTest\\Escaper\\": "test/"
+        }
+    },
+    "require-dev": {
+        "fabpot/php-cs-fixer": "1.7.*",
+        "satooshi/php-coveralls": "dev-master",
+        "phpunit/PHPUnit": "~4.0"
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/zendframework/zend-escaper/phpunit.xml.dist b/core/vendor/zendframework/zend-escaper/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..c887b361eb58e6302f32e76e902b5e24771dab6d
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/phpunit.xml.dist
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
+         bootstrap="./test/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite name="zend-escaper Test Suite">
+            <directory>./test/</directory>
+        </testsuite>
+    </testsuites>
+
+    <groups>
+        <exclude>
+            <group>disable</group>
+        </exclude>
+    </groups>
+
+    <filter>
+        <whitelist addUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+
+    <php>
+        <ini name="date.timezone" value="UTC"/>
+
+        <!-- OB_ENABLED should be enabled for some tests to check if all
+             functionality works as expected. Such tests include those for
+             Zend\Soap and Zend\Session, which require that headers not be sent
+             in order to work. -->
+        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
+
+
+    </php>
+</phpunit>
diff --git a/core/vendor/zendframework/zend-escaper/phpunit.xml.travis b/core/vendor/zendframework/zend-escaper/phpunit.xml.travis
new file mode 100644
index 0000000000000000000000000000000000000000..c887b361eb58e6302f32e76e902b5e24771dab6d
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/phpunit.xml.travis
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
+         bootstrap="./test/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite name="zend-escaper Test Suite">
+            <directory>./test/</directory>
+        </testsuite>
+    </testsuites>
+
+    <groups>
+        <exclude>
+            <group>disable</group>
+        </exclude>
+    </groups>
+
+    <filter>
+        <whitelist addUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+
+    <php>
+        <ini name="date.timezone" value="UTC"/>
+
+        <!-- OB_ENABLED should be enabled for some tests to check if all
+             functionality works as expected. Such tests include those for
+             Zend\Soap and Zend\Session, which require that headers not be sent
+             in order to work. -->
+        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
+
+
+    </php>
+</phpunit>
diff --git a/core/vendor/zendframework/zend-escaper/src/Escaper.php b/core/vendor/zendframework/zend-escaper/src/Escaper.php
new file mode 100644
index 0000000000000000000000000000000000000000..072d543f711d33cd1f9a6b2cbb957a67ed1d59b6
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/src/Escaper.php
@@ -0,0 +1,386 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Escaper;
+
+/**
+ * Context specific methods for use in secure output escaping
+ */
+class Escaper
+{
+    /**
+     * Entity Map mapping Unicode codepoints to any available named HTML entities.
+     *
+     * While HTML supports far more named entities, the lowest common denominator
+     * has become HTML5's XML Serialisation which is restricted to the those named
+     * entities that XML supports. Using HTML entities would result in this error:
+     *     XML Parsing Error: undefined entity
+     *
+     * @var array
+     */
+    protected static $htmlNamedEntityMap = array(
+        34 => 'quot',         // quotation mark
+        38 => 'amp',          // ampersand
+        60 => 'lt',           // less-than sign
+        62 => 'gt',           // greater-than sign
+    );
+
+    /**
+     * Current encoding for escaping. If not UTF-8, we convert strings from this encoding
+     * pre-escaping and back to this encoding post-escaping.
+     *
+     * @var string
+     */
+    protected $encoding = 'utf-8';
+
+    /**
+     * Holds the value of the special flags passed as second parameter to
+     * htmlspecialchars(). We modify these for PHP 5.4 to take advantage
+     * of the new ENT_SUBSTITUTE flag for correctly dealing with invalid
+     * UTF-8 sequences.
+     *
+     * @var string
+     */
+    protected $htmlSpecialCharsFlags = ENT_QUOTES;
+
+    /**
+     * Static Matcher which escapes characters for HTML Attribute contexts
+     *
+     * @var callable
+     */
+    protected $htmlAttrMatcher;
+
+    /**
+     * Static Matcher which escapes characters for Javascript contexts
+     *
+     * @var callable
+     */
+    protected $jsMatcher;
+
+    /**
+     * Static Matcher which escapes characters for CSS Attribute contexts
+     *
+     * @var callable
+     */
+    protected $cssMatcher;
+
+    /**
+     * List of all encoding supported by this class
+     *
+     * @var array
+     */
+    protected $supportedEncodings = array(
+        'iso-8859-1',   'iso8859-1',    'iso-8859-5',   'iso8859-5',
+        'iso-8859-15',  'iso8859-15',   'utf-8',        'cp866',
+        'ibm866',       '866',          'cp1251',       'windows-1251',
+        'win-1251',     '1251',         'cp1252',       'windows-1252',
+        '1252',         'koi8-r',       'koi8-ru',      'koi8r',
+        'big5',         '950',          'gb2312',       '936',
+        'big5-hkscs',   'shift_jis',    'sjis',         'sjis-win',
+        'cp932',        '932',          'euc-jp',       'eucjp',
+        'eucjp-win',    'macroman'
+    );
+
+    /**
+     * Constructor: Single parameter allows setting of global encoding for use by
+     * the current object. If PHP 5.4 is detected, additional ENT_SUBSTITUTE flag
+     * is set for htmlspecialchars() calls.
+     *
+     * @param string $encoding
+     * @throws Exception\InvalidArgumentException
+     */
+    public function __construct($encoding = null)
+    {
+        if ($encoding !== null) {
+            $encoding = (string) $encoding;
+            if ($encoding === '') {
+                throw new Exception\InvalidArgumentException(
+                    get_class($this) . ' constructor parameter does not allow a blank value'
+                );
+            }
+
+            $encoding = strtolower($encoding);
+            if (!in_array($encoding, $this->supportedEncodings)) {
+                throw new Exception\InvalidArgumentException(
+                    'Value of \'' . $encoding . '\' passed to ' . get_class($this)
+                    . ' constructor parameter is invalid. Provide an encoding supported by htmlspecialchars()'
+                );
+            }
+
+            $this->encoding = $encoding;
+        }
+
+        if (defined('ENT_SUBSTITUTE')) {
+            $this->htmlSpecialCharsFlags|= ENT_SUBSTITUTE;
+        }
+
+        // set matcher callbacks
+        $this->htmlAttrMatcher = array($this, 'htmlAttrMatcher');
+        $this->jsMatcher       = array($this, 'jsMatcher');
+        $this->cssMatcher      = array($this, 'cssMatcher');
+    }
+
+    /**
+     * Return the encoding that all output/input is expected to be encoded in.
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        return $this->encoding;
+    }
+
+    /**
+     * Escape a string for the HTML Body context where there are very few characters
+     * of special meaning. Internally this will use htmlspecialchars().
+     *
+     * @param string $string
+     * @return string
+     */
+    public function escapeHtml($string)
+    {
+        return htmlspecialchars($string, $this->htmlSpecialCharsFlags, $this->encoding);
+    }
+
+    /**
+     * Escape a string for the HTML Attribute context. We use an extended set of characters
+     * to escape that are not covered by htmlspecialchars() to cover cases where an attribute
+     * might be unquoted or quoted illegally (e.g. backticks are valid quotes for IE).
+     *
+     * @param string $string
+     * @return string
+     */
+    public function escapeHtmlAttr($string)
+    {
+        $string = $this->toUtf8($string);
+        if ($string === '' || ctype_digit($string)) {
+            return $string;
+        }
+
+        $result = preg_replace_callback('/[^a-z0-9,\.\-_]/iSu', $this->htmlAttrMatcher, $string);
+        return $this->fromUtf8($result);
+    }
+
+    /**
+     * Escape a string for the Javascript context. This does not use json_encode(). An extended
+     * set of characters are escaped beyond ECMAScript's rules for Javascript literal string
+     * escaping in order to prevent misinterpretation of Javascript as HTML leading to the
+     * injection of special characters and entities. The escaping used should be tolerant
+     * of cases where HTML escaping was not applied on top of Javascript escaping correctly.
+     * Backslash escaping is not used as it still leaves the escaped character as-is and so
+     * is not useful in a HTML context.
+     *
+     * @param string $string
+     * @return string
+     */
+    public function escapeJs($string)
+    {
+        $string = $this->toUtf8($string);
+        if ($string === '' || ctype_digit($string)) {
+            return $string;
+        }
+
+        $result = preg_replace_callback('/[^a-z0-9,\._]/iSu', $this->jsMatcher, $string);
+        return $this->fromUtf8($result);
+    }
+
+    /**
+     * Escape a string for the URI or Parameter contexts. This should not be used to escape
+     * an entire URI - only a subcomponent being inserted. The function is a simple proxy
+     * to rawurlencode() which now implements RFC 3986 since PHP 5.3 completely.
+     *
+     * @param string $string
+     * @return string
+     */
+    public function escapeUrl($string)
+    {
+        return rawurlencode($string);
+    }
+
+    /**
+     * Escape a string for the CSS context. CSS escaping can be applied to any string being
+     * inserted into CSS and escapes everything except alphanumerics.
+     *
+     * @param string $string
+     * @return string
+     */
+    public function escapeCss($string)
+    {
+        $string = $this->toUtf8($string);
+        if ($string === '' || ctype_digit($string)) {
+            return $string;
+        }
+
+        $result = preg_replace_callback('/[^a-z0-9]/iSu', $this->cssMatcher, $string);
+        return $this->fromUtf8($result);
+    }
+
+    /**
+     * Callback function for preg_replace_callback that applies HTML Attribute
+     * escaping to all matches.
+     *
+     * @param array $matches
+     * @return string
+     */
+    protected function htmlAttrMatcher($matches)
+    {
+        $chr = $matches[0];
+        $ord = ord($chr);
+
+        /**
+         * The following replaces characters undefined in HTML with the
+         * hex entity for the Unicode replacement character.
+         */
+        if (($ord <= 0x1f && $chr != "\t" && $chr != "\n" && $chr != "\r")
+            || ($ord >= 0x7f && $ord <= 0x9f)
+        ) {
+            return '&#xFFFD;';
+        }
+
+        /**
+         * Check if the current character to escape has a name entity we should
+         * replace it with while grabbing the integer value of the character.
+         */
+        if (strlen($chr) > 1) {
+            $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
+        }
+
+        $hex = bin2hex($chr);
+        $ord = hexdec($hex);
+        if (isset(static::$htmlNamedEntityMap[$ord])) {
+            return '&' . static::$htmlNamedEntityMap[$ord] . ';';
+        }
+
+        /**
+         * Per OWASP recommendations, we'll use upper hex entities
+         * for any other characters where a named entity does not exist.
+         */
+        if ($ord > 255) {
+            return sprintf('&#x%04X;', $ord);
+        }
+        return sprintf('&#x%02X;', $ord);
+    }
+
+    /**
+     * Callback function for preg_replace_callback that applies Javascript
+     * escaping to all matches.
+     *
+     * @param array $matches
+     * @return string
+     */
+    protected function jsMatcher($matches)
+    {
+        $chr = $matches[0];
+        if (strlen($chr) == 1) {
+            return sprintf('\\x%02X', ord($chr));
+        }
+        $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
+        return sprintf('\\u%04s', strtoupper(bin2hex($chr)));
+    }
+
+    /**
+     * Callback function for preg_replace_callback that applies CSS
+     * escaping to all matches.
+     *
+     * @param array $matches
+     * @return string
+     */
+    protected function cssMatcher($matches)
+    {
+        $chr = $matches[0];
+        if (strlen($chr) == 1) {
+            $ord = ord($chr);
+        } else {
+            $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
+            $ord = hexdec(bin2hex($chr));
+        }
+        return sprintf('\\%X ', $ord);
+    }
+
+    /**
+     * Converts a string to UTF-8 from the base encoding. The base encoding is set via this
+     * class' constructor.
+     *
+     * @param string $string
+     * @throws Exception\RuntimeException
+     * @return string
+     */
+    protected function toUtf8($string)
+    {
+        if ($this->getEncoding() === 'utf-8') {
+            $result = $string;
+        } else {
+            $result = $this->convertEncoding($string, 'UTF-8', $this->getEncoding());
+        }
+
+        if (!$this->isUtf8($result)) {
+            throw new Exception\RuntimeException(
+                sprintf('String to be escaped was not valid UTF-8 or could not be converted: %s', $result)
+            );
+        }
+
+        return $result;
+    }
+
+    /**
+     * Converts a string from UTF-8 to the base encoding. The base encoding is set via this
+     * class' constructor.
+     * @param string $string
+     * @return string
+     */
+    protected function fromUtf8($string)
+    {
+        if ($this->getEncoding() === 'utf-8') {
+            return $string;
+        }
+
+        return $this->convertEncoding($string, $this->getEncoding(), 'UTF-8');
+    }
+
+    /**
+     * Checks if a given string appears to be valid UTF-8 or not.
+     *
+     * @param string $string
+     * @return bool
+     */
+    protected function isUtf8($string)
+    {
+        return ($string === '' || preg_match('/^./su', $string));
+    }
+
+    /**
+     * Encoding conversion helper which wraps iconv and mbstring where they exist or throws
+     * and exception where neither is available.
+     *
+     * @param string $string
+     * @param string $to
+     * @param array|string $from
+     * @throws Exception\RuntimeException
+     * @return string
+     */
+    protected function convertEncoding($string, $to, $from)
+    {
+        if (function_exists('iconv')) {
+            $result = iconv($from, $to, $string);
+        } elseif (function_exists('mb_convert_encoding')) {
+            $result = mb_convert_encoding($string, $to, $from);
+        } else {
+            throw new Exception\RuntimeException(
+                get_class($this)
+                . ' requires either the iconv or mbstring extension to be installed'
+                . ' when escaping for non UTF-8 strings.'
+            );
+        }
+
+        if ($result === false) {
+            return ''; // return non-fatal blank string on encoding errors from users
+        }
+        return $result;
+    }
+}
diff --git a/core/vendor/zendframework/zend-escaper/src/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-escaper/src/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..7174796a3248a59f1ce8a68c2af167090bb53294
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/src/Exception/ExceptionInterface.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Escaper\Exception;
+
+interface ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-escaper/src/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-escaper/src/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ad3f7313db0710283adc9e7312a24160c273a9e
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/src/Exception/InvalidArgumentException.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Escaper\Exception;
+
+/**
+ * Invalid argument exception
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements
+    ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-escaper/src/Exception/RuntimeException.php b/core/vendor/zendframework/zend-escaper/src/Exception/RuntimeException.php
new file mode 100644
index 0000000000000000000000000000000000000000..d626123af2e2b0b12191b5bc4e558cb1709ac2cf
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/src/Exception/RuntimeException.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Escaper\Exception;
+
+/**
+ * Invalid argument exception
+ */
+class RuntimeException extends \RuntimeException implements
+    ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/.coveralls.yml b/core/vendor/zendframework/zend-feed/.coveralls.yml
new file mode 100644
index 0000000000000000000000000000000000000000..53bda829c8127d2fc8263e6fb6a54fb66f4916b1
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/.coveralls.yml
@@ -0,0 +1,3 @@
+coverage_clover: clover.xml
+json_path: coveralls-upload.json
+src_dir: src
diff --git a/core/vendor/zendframework/zend-feed/CONTRIBUTING.md b/core/vendor/zendframework/zend-feed/CONTRIBUTING.md
index e77f5d2d5b37809160135bc2c6b6a51b6637d794..e964373fc18b2a9bbcf3ab1ae81d7af7a1d8d7d3 100644
--- a/core/vendor/zendframework/zend-feed/CONTRIBUTING.md
+++ b/core/vendor/zendframework/zend-feed/CONTRIBUTING.md
@@ -1,3 +1,229 @@
 # CONTRIBUTING
 
-Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
\ No newline at end of file
+## RESOURCES
+
+If you wish to contribute to Zend Framework, please be sure to
+read/subscribe to the following resources:
+
+ -  [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
+ -  [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
+ -  ZF Contributor's mailing list:
+    Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
+    Subscribe: zf-contributors-subscribe@lists.zend.com
+ -  ZF Contributor's IRC channel:
+    #zftalk.dev on Freenode.net
+
+If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-feed/issues/new).
+
+## Reporting Potential Security Issues
+
+If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
+issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
+We will work with you to verify the vulnerability and patch it as soon as possible.
+
+When reporting issues, please provide the following information:
+
+- Component(s) affected
+- A description indicating how to reproduce the issue
+- A summary of the security vulnerability and impact
+
+We request that you contact us via the email address above and give the project
+contributors a chance to resolve the vulnerability and issue a new release prior
+to any public exposure; this helps protect users and provides them with a chance
+to upgrade and/or update in order to protect their applications.
+
+For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
+
+## RUNNING TESTS
+
+> ### Note: testing versions prior to 2.4
+>
+> This component originates with Zend Framework 2. During the lifetime of ZF2,
+> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
+> changes were necessary. However, due to the migration, tests may not run on
+> versions < 2.4. As such, you may need to change the PHPUnit dependency if
+> attempting a fix on such a version.
+
+To run tests:
+
+- Clone the repository:
+
+  ```console
+  $ git clone git@github.com:zendframework/zend-feed.git
+  $ cd
+  ```
+
+- Install dependencies via composer:
+
+  ```console
+  $ curl -sS https://getcomposer.org/installer | php --
+  $ ./composer.phar install
+  ```
+
+  If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
+
+- Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
+
+  ```console
+  $ ./vendor/bin/phpunit
+  ```
+
+You can turn on conditional tests with the phpunit.xml file.
+To do so:
+
+ -  Copy `phpunit.xml.dist` file to `phpunit.xml`
+ -  Edit `phpunit.xml` to enable any specific functionality you
+    want to test, as well as to provide test values to utilize.
+
+## Running Coding Standards Checks
+
+This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
+standards checks, and provides configuration for our selected checks.
+`php-cs-fixer` is installed by default via Composer.
+
+To run checks only:
+
+```console
+$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
+```
+
+To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
+flag:
+
+```console
+$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
+```
+
+If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
+they pass, and make sure you add and commit the changes after verification.
+
+## Recommended Workflow for Contributions
+
+Your first step is to establish a public repository from which we can
+pull your work into the master repository. We recommend using
+[GitHub](https://github.com), as that is where the component is already hosted.
+
+1. Setup a [GitHub account](http://github.com/), if you haven't yet
+2. Fork the repository (http://github.com/zendframework/zend-feed)
+3. Clone the canonical repository locally and enter it.
+
+   ```console
+   $ git clone git://github.com:zendframework/zend-feed.git
+   $ cd zend-feed
+   ```
+
+4. Add a remote to your fork; substitute your GitHub username in the command
+   below.
+
+   ```console
+   $ git remote add {username} git@github.com:{username}/zend-feed.git
+   $ git fetch {username}
+   ```
+
+### Keeping Up-to-Date
+
+Periodically, you should update your fork or personal repository to
+match the canonical ZF repository. Assuming you have setup your local repository
+per the instructions above, you can do the following:
+
+
+```console
+$ git checkout master
+$ git fetch origin
+$ git rebase origin/master
+# OPTIONALLY, to keep your remote up-to-date -
+$ git push {username} master:master
+```
+
+If you're tracking other branches -- for example, the "develop" branch, where
+new feature development occurs -- you'll want to do the same operations for that
+branch; simply substitute  "develop" for "master".
+
+### Working on a patch
+
+We recommend you do each new feature or bugfix in a new branch. This simplifies
+the task of code review as well as the task of merging your changes into the
+canonical repository.
+
+A typical workflow will then consist of the following:
+
+1. Create a new local branch based off either your master or develop branch.
+2. Switch to your new local branch. (This step can be combined with the
+   previous step with the use of `git checkout -b`.)
+3. Do some work, commit, repeat as necessary.
+4. Push the local branch to your remote repository.
+5. Send a pull request.
+
+The mechanics of this process are actually quite trivial. Below, we will
+create a branch for fixing an issue in the tracker.
+
+```console
+$ git checkout -b hotfix/9295
+Switched to a new branch 'hotfix/9295'
+```
+
+... do some work ...
+
+
+```console
+$ git commit
+```
+
+... write your log message ...
+
+
+```console
+$ git push {username} hotfix/9295:hotfix/9295
+Counting objects: 38, done.
+Delta compression using up to 2 threads.
+Compression objects: 100% (18/18), done.
+Writing objects: 100% (20/20), 8.19KiB, done.
+Total 20 (delta 12), reused 0 (delta 0)
+To ssh://git@github.com/{username}/zend-feed.git
+   b5583aa..4f51698  HEAD -> master
+```
+
+To send a pull request, you have two options.
+
+If using GitHub, you can do the pull request from there. Navigate to
+your repository, select the branch you just created, and then select the
+"Pull Request" button in the upper right. Select the user/organization
+"zendframework" as the recipient.
+
+If using your own repository - or even if using GitHub - you can use `git
+format-patch` to create a patchset for us to apply; in fact, this is
+**recommended** for security-related patches. If you use `format-patch`, please
+send the patches as attachments to:
+
+-  zf-devteam@zend.com for patches without security implications
+-  zf-security@zend.com for security patches
+
+#### What branch to issue the pull request against?
+
+Which branch should you issue a pull request against?
+
+- For fixes against the stable release, issue the pull request against the
+  "master" branch.
+- For new features, or fixes that introduce new elements to the public API (such
+  as new public methods or properties), issue the pull request against the
+  "develop" branch.
+
+### Branch Cleanup
+
+As you might imagine, if you are a frequent contributor, you'll start to
+get a ton of branches both locally and on your remote.
+
+Once you know that your changes have been accepted to the master
+repository, we suggest doing some cleanup of these branches.
+
+-  Local branch cleanup
+
+   ```console
+   $ git branch -d <branchname>
+   ```
+
+-  Remote branch removal
+
+   ```console
+   $ git push {username} :<branchname>
+   ```
diff --git a/core/vendor/zendframework/zend-feed/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-feed/Exception/BadMethodCallException.php
deleted file mode 100644
index 3e994f2eb2b3a387726497b5b37a5636dac69eb0..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Exception/BadMethodCallException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Exception;
-
-class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/Exception/ExceptionInterface.php
deleted file mode 100644
index 0f752962f18c5a4b2c3bb9268cceace24e184414..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Exception;
-
-interface ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/Exception/InvalidArgumentException.php
deleted file mode 100644
index 29b64828ac5d6c9c6a49fa5fc88319ed73c71171..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Exception;
-
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/Exception/RuntimeException.php
deleted file mode 100644
index 43167a1e74f5fba5de4a126c281c9487b099b9c0..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Exception/RuntimeException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Exception;
-
-class RuntimeException extends \RuntimeException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/LICENSE.txt b/core/vendor/zendframework/zend-feed/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6eab5aa14fd421059dfecada369abb8dd79c8a48
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/LICENSE.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2005-2015, Zend Technologies USA, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    * Neither the name of Zend Technologies USA, Inc. nor the names of its
+      contributors may be used to endorse or promote products derived from this
+      software without specific prior written permission.
+
+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.
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/AbstractCallback.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/AbstractCallback.php
deleted file mode 100644
index 7321c9625df4b318023006c8250b2eb36e4665e9..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/AbstractCallback.php
+++ /dev/null
@@ -1,291 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub;
-
-use Traversable;
-use Zend\Http\PhpEnvironment\Response as PhpResponse;
-use Zend\Stdlib\ArrayUtils;
-
-abstract class AbstractCallback implements CallbackInterface
-{
-    /**
-     * An instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistenceInterface
-     * used to background save any verification tokens associated with a subscription
-     * or other.
-     *
-     * @var Model\SubscriptionPersistenceInterface
-     */
-    protected $storage = null;
-
-    /**
-     * An instance of a class handling Http Responses. This is implemented in
-     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
-     * (i.e. not inherited from) Zend\Controller\Response\Http.
-     *
-     * @var HttpResponse|PhpResponse
-     */
-    protected $httpResponse = null;
-
-    /**
-     * The number of Subscribers for which any updates are on behalf of.
-     *
-     * @var int
-     */
-    protected $subscriberCount = 1;
-
-    /**
-     * Constructor; accepts an array or Traversable object to preset
-     * options for the Subscriber without calling all supported setter
-     * methods in turn.
-     *
-     * @param  array|Traversable $options Options array or Traversable object
-     */
-    public function __construct($options = null)
-    {
-        if ($options !== null) {
-            $this->setOptions($options);
-        }
-    }
-
-    /**
-     * Process any injected configuration options
-     *
-     * @param  array|Traversable $options Options array or Traversable object
-     * @return AbstractCallback
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setOptions($options)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if (!is_array($options)) {
-            throw new Exception\InvalidArgumentException('Array or Traversable object'
-            . 'expected, got ' . gettype($options));
-        }
-
-        if (is_array($options)) {
-            $this->setOptions($options);
-        }
-
-        if (array_key_exists('storage', $options)) {
-            $this->setStorage($options['storage']);
-        }
-        return $this;
-    }
-
-    /**
-     * Send the response, including all headers.
-     * If you wish to handle this via Zend\Http, use the getter methods
-     * to retrieve any data needed to be set on your HTTP Response object, or
-     * simply give this object the HTTP Response instance to work with for you!
-     *
-     * @return void
-     */
-    public function sendResponse()
-    {
-        $this->getHttpResponse()->send();
-    }
-
-    /**
-     * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used
-     * to background save any verification tokens associated with a subscription
-     * or other.
-     *
-     * @param  Model\SubscriptionPersistenceInterface $storage
-     * @return AbstractCallback
-     */
-    public function setStorage(Model\SubscriptionPersistenceInterface $storage)
-    {
-        $this->storage = $storage;
-        return $this;
-    }
-
-    /**
-     * Gets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used
-     * to background save any verification tokens associated with a subscription
-     * or other.
-     *
-     * @return Model\SubscriptionPersistenceInterface
-     * @throws Exception\RuntimeException
-     */
-    public function getStorage()
-    {
-        if ($this->storage === null) {
-            throw new Exception\RuntimeException('No storage object has been'
-                . ' set that subclasses Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence');
-        }
-        return $this->storage;
-    }
-
-    /**
-     * An instance of a class handling Http Responses. This is implemented in
-     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
-     * (i.e. not inherited from) Zend\Controller\Response\Http.
-     *
-     * @param  HttpResponse|PhpResponse $httpResponse
-     * @return AbstractCallback
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setHttpResponse($httpResponse)
-    {
-        if (!$httpResponse instanceof HttpResponse && !$httpResponse instanceof PhpResponse) {
-            throw new Exception\InvalidArgumentException('HTTP Response object must'
-                . ' implement one of Zend\Feed\Pubsubhubbub\HttpResponse or'
-                . ' Zend\Http\PhpEnvironment\Response');
-        }
-        $this->httpResponse = $httpResponse;
-        return $this;
-    }
-
-    /**
-     * An instance of a class handling Http Responses. This is implemented in
-     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
-     * (i.e. not inherited from) Zend\Controller\Response\Http.
-     *
-     * @return HttpResponse|PhpResponse
-     */
-    public function getHttpResponse()
-    {
-        if ($this->httpResponse === null) {
-            $this->httpResponse = new HttpResponse;
-        }
-        return $this->httpResponse;
-    }
-
-    /**
-     * Sets the number of Subscribers for which any updates are on behalf of.
-     * In other words, is this class serving one or more subscribers? How many?
-     * Defaults to 1 if left unchanged.
-     *
-     * @param  string|int $count
-     * @return AbstractCallback
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setSubscriberCount($count)
-    {
-        $count = intval($count);
-        if ($count <= 0) {
-            throw new Exception\InvalidArgumentException('Subscriber count must be'
-                . ' greater than zero');
-        }
-        $this->subscriberCount = $count;
-        return $this;
-    }
-
-    /**
-     * Gets the number of Subscribers for which any updates are on behalf of.
-     * In other words, is this class serving one or more subscribers? How many?
-     *
-     * @return int
-     */
-    public function getSubscriberCount()
-    {
-        return $this->subscriberCount;
-    }
-
-    /**
-     * Attempt to detect the callback URL (specifically the path forward)
-     * @return string
-     */
-    protected function _detectCallbackUrl()
-    {
-        $callbackUrl = '';
-        if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
-            $callbackUrl = $_SERVER['HTTP_X_ORIGINAL_URL'];
-        } elseif (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
-            $callbackUrl = $_SERVER['HTTP_X_REWRITE_URL'];
-        } elseif (isset($_SERVER['REQUEST_URI'])) {
-            $callbackUrl = $_SERVER['REQUEST_URI'];
-            $scheme = 'http';
-            if ($_SERVER['HTTPS'] == 'on') {
-                $scheme = 'https';
-            }
-            $schemeAndHttpHost = $scheme . '://' . $this->_getHttpHost();
-            if (strpos($callbackUrl, $schemeAndHttpHost) === 0) {
-                $callbackUrl = substr($callbackUrl, strlen($schemeAndHttpHost));
-            }
-        } elseif (isset($_SERVER['ORIG_PATH_INFO'])) {
-            $callbackUrl= $_SERVER['ORIG_PATH_INFO'];
-            if (!empty($_SERVER['QUERY_STRING'])) {
-                $callbackUrl .= '?' . $_SERVER['QUERY_STRING'];
-            }
-        }
-        return $callbackUrl;
-    }
-
-    /**
-     * Get the HTTP host
-     *
-     * @return string
-     */
-    protected function _getHttpHost()
-    {
-        if (!empty($_SERVER['HTTP_HOST'])) {
-            return $_SERVER['HTTP_HOST'];
-        }
-        $scheme = 'http';
-        if ($_SERVER['HTTPS'] == 'on') {
-            $scheme = 'https';
-        }
-        $name = $_SERVER['SERVER_NAME'];
-        $port = $_SERVER['SERVER_PORT'];
-        if (($scheme == 'http' && $port == 80)
-            || ($scheme == 'https' && $port == 443)
-        ) {
-            return $name;
-        }
-
-        return $name . ':' . $port;
-    }
-
-    /**
-     * Retrieve a Header value from either $_SERVER or Apache
-     *
-     * @param string $header
-     * @return bool|string
-     */
-    protected function _getHeader($header)
-    {
-        $temp = strtoupper(str_replace('-', '_', $header));
-        if (!empty($_SERVER[$temp])) {
-            return $_SERVER[$temp];
-        }
-        $temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
-        if (!empty($_SERVER[$temp])) {
-            return $_SERVER[$temp];
-        }
-        if (function_exists('apache_request_headers')) {
-            $headers = apache_request_headers();
-            if (!empty($headers[$header])) {
-                return $headers[$header];
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return the raw body of the request
-     *
-     * @return string|false Raw body, or false if not present
-     */
-    protected function _getRawBody()
-    {
-        $body = file_get_contents('php://input');
-        if (strlen(trim($body)) == 0 && isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
-            $body = $GLOBALS['HTTP_RAW_POST_DATA'];
-        }
-        if (strlen(trim($body)) > 0) {
-            return $body;
-        }
-        return false;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/CallbackInterface.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/CallbackInterface.php
deleted file mode 100644
index c6b7412fd0c8bece79e5baf9f047af7073c8bb32..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/CallbackInterface.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub;
-
-interface CallbackInterface
-{
-    /**
-     * Handle any callback from a Hub Server responding to a subscription or
-     * unsubscription request. This should be the Hub Server confirming the
-     * the request prior to taking action on it.
-     *
-     * @param array $httpData GET/POST data if available and not in $_GET/POST
-     * @param bool $sendResponseNow Whether to send response now or when asked
-     */
-    public function handle(array $httpData = null, $sendResponseNow = false);
-
-    /**
-     * Send the response, including all headers.
-     * If you wish to handle this via Zend\Mvc\Controller, use the getter methods
-     * to retrieve any data needed to be set on your HTTP Response object, or
-     * simply give this object the HTTP Response instance to work with for you!
-     *
-     * @return void
-     */
-    public function sendResponse();
-
-    /**
-     * An instance of a class handling Http Responses. This is implemented in
-     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
-     * (i.e. not inherited from) Zend\Feed\Pubsubhubbub\AbstractCallback.
-     *
-     * @param HttpResponse|\Zend\Http\PhpEnvironment\Response $httpResponse
-     */
-    public function setHttpResponse($httpResponse);
-
-    /**
-     * An instance of a class handling Http Responses. This is implemented in
-     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
-     * (i.e. not inherited from) Zend\Feed\Pubsubhubbub\AbstractCallback.
-     *
-     * @return HttpResponse|\Zend\Http\PhpEnvironment\Response
-     */
-    public function getHttpResponse();
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/ExceptionInterface.php
deleted file mode 100644
index f32bc1c3ee166e673ae3eb758a3b64579a0c0bdb..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub\Exception;
-
-use Zend\Feed\Exception\ExceptionInterface as Exception;
-
-interface ExceptionInterface extends Exception
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/InvalidArgumentException.php
deleted file mode 100644
index cad1e01bdbf02fb446a5f28490e98f3aa5d6b581..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub\Exception;
-
-use Zend\Feed\Exception;
-
-class InvalidArgumentException extends Exception\InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/RuntimeException.php
deleted file mode 100644
index cc954a519baf5dd4ed15ac1d5eb08c2809f4dcbe..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Exception/RuntimeException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub\Exception;
-
-use Zend\Feed\Exception;
-
-class RuntimeException extends Exception\RuntimeException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/HttpResponse.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/HttpResponse.php
deleted file mode 100644
index 0c1adf2ecb6963ffba18cae796eae9ab99bc31e4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/HttpResponse.php
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub;
-
-class HttpResponse
-{
-    /**
-     * The body of any response to the current callback request
-     *
-     * @var string
-     */
-    protected $content = '';
-
-    /**
-     * Array of headers. Each header is an array with keys 'name' and 'value'
-     *
-     * @var array
-     */
-    protected $headers = array();
-
-    /**
-     * HTTP response code to use in headers
-     *
-     * @var int
-     */
-    protected $statusCode = 200;
-
-    /**
-     * Send the response, including all headers
-     *
-     * @return void
-     */
-    public function send()
-    {
-        $this->sendHeaders();
-        echo $this->getContent();
-    }
-
-    /**
-     * Send all headers
-     *
-     * Sends any headers specified. If an {@link setHttpResponseCode() HTTP response code}
-     * has been specified, it is sent with the first header.
-     *
-     * @return void
-     */
-    public function sendHeaders()
-    {
-        if (count($this->headers) || (200 != $this->statusCode)) {
-            $this->canSendHeaders(true);
-        } elseif (200 == $this->statusCode) {
-            return;
-        }
-        $httpCodeSent = false;
-        foreach ($this->headers as $header) {
-            if (!$httpCodeSent && $this->statusCode) {
-                header($header['name'] . ': ' . $header['value'], $header['replace'], $this->statusCode);
-                $httpCodeSent = true;
-            } else {
-                header($header['name'] . ': ' . $header['value'], $header['replace']);
-            }
-        }
-        if (!$httpCodeSent) {
-            header('HTTP/1.1 ' . $this->statusCode);
-        }
-    }
-
-    /**
-     * Set a header
-     *
-     * If $replace is true, replaces any headers already defined with that
-     * $name.
-     *
-     * @param  string $name
-     * @param  string $value
-     * @param  bool $replace
-     * @return \Zend\Feed\PubSubHubbub\HttpResponse
-     */
-    public function setHeader($name, $value, $replace = false)
-    {
-        $name  = $this->_normalizeHeader($name);
-        $value = (string) $value;
-        if ($replace) {
-            foreach ($this->headers as $key => $header) {
-                if ($name == $header['name']) {
-                    unset($this->headers[$key]);
-                }
-            }
-        }
-        $this->headers[] = array(
-            'name'    => $name,
-            'value'   => $value,
-            'replace' => $replace,
-        );
-
-        return $this;
-    }
-
-    /**
-     * Check if a specific Header is set and return its value
-     *
-     * @param  string $name
-     * @return string|null
-     */
-    public function getHeader($name)
-    {
-        $name = $this->_normalizeHeader($name);
-        foreach ($this->headers as $header) {
-            if ($header['name'] == $name) {
-                return $header['value'];
-            }
-        }
-    }
-
-    /**
-     * Return array of headers; see {@link $headers} for format
-     *
-     * @return array
-     */
-    public function getHeaders()
-    {
-        return $this->headers;
-    }
-
-    /**
-     * Can we send headers?
-     *
-     * @param  bool $throw Whether or not to throw an exception if headers have been sent; defaults to false
-     * @return HttpResponse
-     * @throws Exception\RuntimeException
-     */
-    public function canSendHeaders($throw = false)
-    {
-        $ok = headers_sent($file, $line);
-        if ($ok && $throw) {
-            throw new Exception\RuntimeException('Cannot send headers; headers already sent in ' . $file . ', line ' . $line);
-        }
-        return !$ok;
-    }
-
-    /**
-     * Set HTTP response code to use with headers
-     *
-     * @param  int $code
-     * @return HttpResponse
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setStatusCode($code)
-    {
-        if (!is_int($code) || (100 > $code) || (599 < $code)) {
-            throw new Exception\InvalidArgumentException('Invalid HTTP response'
-            . ' code:' . $code);
-        }
-        $this->statusCode = $code;
-        return $this;
-    }
-
-    /**
-     * Retrieve HTTP response code
-     *
-     * @return int
-     */
-    public function getStatusCode()
-    {
-        return $this->statusCode;
-    }
-
-    /**
-     * Set body content
-     *
-     * @param  string $content
-     * @return \Zend\Feed\PubSubHubbub\HttpResponse
-     */
-    public function setContent($content)
-    {
-        $this->content = (string) $content;
-        $this->setHeader('content-length', strlen($content));
-        return $this;
-    }
-
-    /**
-     * Return the body content
-     *
-     * @return string
-     */
-    public function getContent()
-    {
-        return $this->content;
-    }
-
-    /**
-     * Normalizes a header name to X-Capitalized-Names
-     *
-     * @param  string $name
-     * @return string
-     */
-    protected function _normalizeHeader($name)
-    {
-        $filtered = str_replace(array('-', '_'), ' ', (string) $name);
-        $filtered = ucwords(strtolower($filtered));
-        $filtered = str_replace(' ', '-', $filtered);
-        return $filtered;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/AbstractModel.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/AbstractModel.php
deleted file mode 100644
index 3ebd07f5b8d33c242f51309f49096ea8f0bf738a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/AbstractModel.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub\Model;
-
-use Zend\Db\TableGateway\TableGateway;
-use Zend\Db\TableGateway\TableGatewayInterface;
-
-class AbstractModel
-{
-    /**
-     * Zend\Db\TableGateway\TableGatewayInterface instance to host database methods
-     *
-     * @var TableGatewayInterface
-     */
-    protected $db = null;
-
-    /**
-     * Constructor
-     *
-     * @param null|TableGatewayInterface $tableGateway
-     */
-    public function __construct(TableGatewayInterface $tableGateway = null)
-    {
-        if ($tableGateway === null) {
-            $parts = explode('\\', get_class($this));
-            $table = strtolower(array_pop($parts));
-            $this->db = new TableGateway($table, null);
-        } else {
-            $this->db = $tableGateway;
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/Subscription.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/Subscription.php
deleted file mode 100644
index 46a5d82c80a7e822adbb5d4c83918adf7d2bcb06..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/Subscription.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub\Model;
-
-use DateInterval;
-use DateTime;
-use Zend\Feed\PubSubHubbub;
-
-class Subscription extends AbstractModel implements SubscriptionPersistenceInterface
-{
-    /**
-     * Common DateTime object to assist with unit testing
-     *
-     * @var DateTime
-     */
-    protected $now;
-
-    /**
-     * Save subscription to RDMBS
-     *
-     * @param array $data
-     * @return bool
-     * @throws PubSubHubbub\Exception\InvalidArgumentException
-     */
-    public function setSubscription(array $data)
-    {
-        if (!isset($data['id'])) {
-            throw new PubSubHubbub\Exception\InvalidArgumentException(
-                'ID must be set before attempting a save'
-            );
-        }
-        $result = $this->db->select(array('id' => $data['id']));
-        if ($result && (0 < count($result))) {
-            $data['created_time'] = $result->current()->created_time;
-            $now = $this->getNow();
-            if (array_key_exists('lease_seconds', $data)
-                && $data['lease_seconds']
-            ) {
-                $data['expiration_time'] = $now->add(new DateInterval('PT' . $data['lease_seconds'] . 'S'))
-                    ->format('Y-m-d H:i:s');
-            }
-            $this->db->update(
-                $data,
-                array('id' => $data['id'])
-            );
-            return false;
-        }
-
-        $this->db->insert($data);
-        return true;
-    }
-
-    /**
-     * Get subscription by ID/key
-     *
-     * @param  string $key
-     * @return array
-     * @throws PubSubHubbub\Exception\InvalidArgumentException
-     */
-    public function getSubscription($key)
-    {
-        if (empty($key) || !is_string($key)) {
-            throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"'
-                .' of "' . $key . '" must be a non-empty string');
-        }
-        $result = $this->db->select(array('id' => $key));
-        if (count($result)) {
-            return $result->current()->getArrayCopy();
-        }
-        return false;
-    }
-
-    /**
-     * Determine if a subscription matching the key exists
-     *
-     * @param  string $key
-     * @return bool
-     * @throws PubSubHubbub\Exception\InvalidArgumentException
-     */
-    public function hasSubscription($key)
-    {
-        if (empty($key) || !is_string($key)) {
-            throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"'
-                .' of "' . $key . '" must be a non-empty string');
-        }
-        $result = $this->db->select(array('id' => $key));
-        if (count($result)) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Delete a subscription
-     *
-     * @param string $key
-     * @return bool
-     */
-    public function deleteSubscription($key)
-    {
-        $result = $this->db->select(array('id' => $key));
-        if (count($result)) {
-            $this->db->delete(
-                array('id' => $key)
-            );
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Get a new DateTime or the one injected for testing
-     *
-     * @return DateTime
-     */
-    public function getNow()
-    {
-        if (null === $this->now) {
-            return new DateTime();
-        }
-        return $this->now;
-    }
-
-    /**
-     * Set a DateTime instance for assisting with unit testing
-     *
-     * @param DateTime $now
-     * @return Subscription
-     */
-    public function setNow(DateTime $now)
-    {
-        $this->now = $now;
-        return $this;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php
deleted file mode 100644
index 09e7d7559f30ed76ba699789ac25d1728fb46f49..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub\Model;
-
-interface SubscriptionPersistenceInterface
-{
-    /**
-     * Save subscription to RDMBS
-     *
-     * @param array $data The key must be stored here as a $data['id'] entry
-     * @return bool
-     */
-    public function setSubscription(array $data);
-
-    /**
-     * Get subscription by ID/key
-     *
-     * @param  string $key
-     * @return array
-     */
-    public function getSubscription($key);
-
-    /**
-     * Determine if a subscription matching the key exists
-     *
-     * @param  string $key
-     * @return bool
-     */
-    public function hasSubscription($key);
-
-    /**
-     * Delete a subscription
-     *
-     * @param string $key
-     * @return bool
-     */
-    public function deleteSubscription($key);
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/PubSubHubbub.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/PubSubHubbub.php
deleted file mode 100644
index a930a70bed640bde8e6cff876a5e8c624752c385..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/PubSubHubbub.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub;
-
-use Zend\Escaper\Escaper;
-use Zend\Feed\Reader;
-use Zend\Http;
-
-class PubSubHubbub
-{
-    /**
-     * Verification Modes
-     */
-    const VERIFICATION_MODE_SYNC  = 'sync';
-    const VERIFICATION_MODE_ASYNC = 'async';
-
-    /**
-     * Subscription States
-     */
-    const SUBSCRIPTION_VERIFIED    = 'verified';
-    const SUBSCRIPTION_NOTVERIFIED = 'not_verified';
-    const SUBSCRIPTION_TODELETE    = 'to_delete';
-
-    /**
-     * @var Escaper
-     */
-    protected static $escaper;
-
-    /**
-     * Singleton instance if required of the HTTP client
-     *
-     * @var Http\Client
-     */
-    protected static $httpClient = null;
-
-    /**
-     * Simple utility function which imports any feed URL and
-     * determines the existence of Hub Server endpoints. This works
-     * best if directly given an instance of Zend\Feed\Reader\Atom|Rss
-     * to leverage off.
-     *
-     * @param  \Zend\Feed\Reader\Feed\AbstractFeed|string $source
-     * @return array
-     * @throws Exception\InvalidArgumentException
-     */
-    public static function detectHubs($source)
-    {
-        if (is_string($source)) {
-            $feed = Reader\Reader::import($source);
-        } elseif ($source instanceof Reader\Feed\AbstractFeed) {
-            $feed = $source;
-        } else {
-            throw new Exception\InvalidArgumentException('The source parameter was'
-            . ' invalid, i.e. not a URL string or an instance of type'
-            . ' Zend\Feed\Reader\Feed\AbstractFeed');
-        }
-        return $feed->getHubs();
-    }
-
-    /**
-     * Allows the external environment to make ZendOAuth use a specific
-     * Client instance.
-     *
-     * @param  Http\Client $httpClient
-     * @return void
-     */
-    public static function setHttpClient(Http\Client $httpClient)
-    {
-        static::$httpClient = $httpClient;
-    }
-
-    /**
-     * Return the singleton instance of the HTTP Client. Note that
-     * the instance is reset and cleared of previous parameters GET/POST.
-     * Headers are NOT reset but handled by this component if applicable.
-     *
-     * @return Http\Client
-     */
-    public static function getHttpClient()
-    {
-        if (!isset(static::$httpClient)) {
-            static::$httpClient = new Http\Client;
-        } else {
-            static::$httpClient->resetParameters();
-        }
-        return static::$httpClient;
-    }
-
-    /**
-     * Simple mechanism to delete the entire singleton HTTP Client instance
-     * which forces a new instantiation for subsequent requests.
-     *
-     * @return void
-     */
-    public static function clearHttpClient()
-    {
-        static::$httpClient = null;
-    }
-
-    /**
-     * Set the Escaper instance
-     *
-     * If null, resets the instance
-     *
-     * @param  null|Escaper $escaper
-     */
-    public static function setEscaper(Escaper $escaper = null)
-    {
-        static::$escaper = $escaper;
-    }
-
-    /**
-     * Get the Escaper instance
-     *
-     * If none registered, lazy-loads an instance.
-     *
-     * @return Escaper
-     */
-    public static function getEscaper()
-    {
-        if (null === static::$escaper) {
-            static::setEscaper(new Escaper());
-        }
-        return static::$escaper;
-    }
-
-    /**
-     * RFC 3986 safe url encoding method
-     *
-     * @param  string $string
-     * @return string
-     */
-    public static function urlencode($string)
-    {
-        $escaper    = static::getEscaper();
-        $rawencoded = $escaper->escapeUrl($string);
-        $rfcencoded = str_replace('%7E', '~', $rawencoded);
-        return $rfcencoded;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Publisher.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Publisher.php
deleted file mode 100644
index 6130992bdc94ea16a20a4e318b5d2598722ebffb..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Publisher.php
+++ /dev/null
@@ -1,397 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub;
-
-use Traversable;
-use Zend\Feed\Uri;
-use Zend\Http\Request as HttpRequest;
-use Zend\Stdlib\ArrayUtils;
-
-class Publisher
-{
-    /**
-     * An array of URLs for all Hub Servers used by the Publisher, and to
-     * which all topic update notifications will be sent.
-     *
-     * @var array
-     */
-    protected $hubUrls = array();
-
-    /**
-     * An array of topic (Atom or RSS feed) URLs which have been updated and
-     * whose updated status will be notified to all Hub Servers.
-     *
-     * @var array
-     */
-    protected $updatedTopicUrls = array();
-
-    /**
-     * An array of any errors including keys for 'response', 'hubUrl'.
-     * The response is the actual Zend\Http\Response object.
-     *
-     * @var array
-     */
-    protected $errors = array();
-
-    /**
-     * An array of topic (Atom or RSS feed) URLs which have been updated and
-     * whose updated status will be notified to all Hub Servers.
-     *
-     * @var array
-     */
-    protected $parameters = array();
-
-    /**
-     * Constructor; accepts an array or Zend\Config\Config instance to preset
-     * options for the Publisher without calling all supported setter
-     * methods in turn.
-     *
-     * @param  array|Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        if ($options !== null) {
-            $this->setOptions($options);
-        }
-    }
-
-    /**
-     * Process any injected configuration options
-     *
-     * @param  array|Traversable $options Options array or Traversable object
-     * @return Publisher
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setOptions($options)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if (!is_array($options)) {
-            throw new Exception\InvalidArgumentException('Array or Traversable object'
-                                . 'expected, got ' . gettype($options));
-        }
-        if (array_key_exists('hubUrls', $options)) {
-            $this->addHubUrls($options['hubUrls']);
-        }
-        if (array_key_exists('updatedTopicUrls', $options)) {
-            $this->addUpdatedTopicUrls($options['updatedTopicUrls']);
-        }
-        if (array_key_exists('parameters', $options)) {
-            $this->setParameters($options['parameters']);
-        }
-        return $this;
-    }
-
-    /**
-     * Add a Hub Server URL supported by Publisher
-     *
-     * @param  string $url
-     * @return Publisher
-     * @throws Exception\InvalidArgumentException
-     */
-    public function addHubUrl($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
-                . ' of "' . $url . '" must be a non-empty string and a valid'
-                . 'URL');
-        }
-        $this->hubUrls[] = $url;
-        return $this;
-    }
-
-    /**
-     * Add an array of Hub Server URLs supported by Publisher
-     *
-     * @param  array $urls
-     * @return Publisher
-     */
-    public function addHubUrls(array $urls)
-    {
-        foreach ($urls as $url) {
-            $this->addHubUrl($url);
-        }
-        return $this;
-    }
-
-    /**
-     * Remove a Hub Server URL
-     *
-     * @param  string $url
-     * @return Publisher
-     */
-    public function removeHubUrl($url)
-    {
-        if (!in_array($url, $this->getHubUrls())) {
-            return $this;
-        }
-        $key = array_search($url, $this->hubUrls);
-        unset($this->hubUrls[$key]);
-        return $this;
-    }
-
-    /**
-     * Return an array of unique Hub Server URLs currently available
-     *
-     * @return array
-     */
-    public function getHubUrls()
-    {
-        $this->hubUrls = array_unique($this->hubUrls);
-        return $this->hubUrls;
-    }
-
-    /**
-     * Add a URL to a topic (Atom or RSS feed) which has been updated
-     *
-     * @param  string $url
-     * @return Publisher
-     * @throws Exception\InvalidArgumentException
-     */
-    public function addUpdatedTopicUrl($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
-                . ' of "' . $url . '" must be a non-empty string and a valid'
-                . 'URL');
-        }
-        $this->updatedTopicUrls[] = $url;
-        return $this;
-    }
-
-    /**
-     * Add an array of Topic URLs which have been updated
-     *
-     * @param  array $urls
-     * @return Publisher
-     */
-    public function addUpdatedTopicUrls(array $urls)
-    {
-        foreach ($urls as $url) {
-            $this->addUpdatedTopicUrl($url);
-        }
-        return $this;
-    }
-
-    /**
-     * Remove an updated topic URL
-     *
-     * @param  string $url
-     * @return Publisher
-     */
-    public function removeUpdatedTopicUrl($url)
-    {
-        if (!in_array($url, $this->getUpdatedTopicUrls())) {
-            return $this;
-        }
-        $key = array_search($url, $this->updatedTopicUrls);
-        unset($this->updatedTopicUrls[$key]);
-        return $this;
-    }
-
-    /**
-     * Return an array of unique updated topic URLs currently available
-     *
-     * @return array
-     */
-    public function getUpdatedTopicUrls()
-    {
-        $this->updatedTopicUrls = array_unique($this->updatedTopicUrls);
-        return $this->updatedTopicUrls;
-    }
-
-    /**
-     * Notifies a single Hub Server URL of changes
-     *
-     * @param  string $url The Hub Server's URL
-     * @return void
-     * @throws Exception\InvalidArgumentException
-     * @throws Exception\RuntimeException
-     */
-    public function notifyHub($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
-                . ' of "' . $url . '" must be a non-empty string and a valid'
-                . 'URL');
-        }
-        $client = $this->_getHttpClient();
-        $client->setUri($url);
-        $response = $client->getResponse();
-        if ($response->getStatusCode() !== 204) {
-            throw new Exception\RuntimeException('Notification to Hub Server '
-                . 'at "' . $url . '" appears to have failed with a status code of "'
-                . $response->getStatusCode() . '" and message "'
-                . $response->getContent() . '"');
-        }
-    }
-
-    /**
-     * Notifies all Hub Server URLs of changes
-     *
-     * If a Hub notification fails, certain data will be retained in an
-     * an array retrieved using getErrors(), if a failure occurs for any Hubs
-     * the isSuccess() check will return FALSE. This method is designed not
-     * to needlessly fail with an Exception/Error unless from Zend\Http\Client.
-     *
-     * @return void
-     * @throws Exception\RuntimeException
-     */
-    public function notifyAll()
-    {
-        $client = $this->_getHttpClient();
-        $hubs   = $this->getHubUrls();
-        if (empty($hubs)) {
-            throw new Exception\RuntimeException('No Hub Server URLs'
-                . ' have been set so no notifications can be sent');
-        }
-        $this->errors = array();
-        foreach ($hubs as $url) {
-            $client->setUri($url);
-            $response = $client->getResponse();
-            if ($response->getStatusCode() !== 204) {
-                $this->errors[] = array(
-                    'response' => $response,
-                    'hubUrl' => $url
-                );
-            }
-        }
-    }
-
-    /**
-     * Add an optional parameter to the update notification requests
-     *
-     * @param  string $name
-     * @param  string|null $value
-     * @return Publisher
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setParameter($name, $value = null)
-    {
-        if (is_array($name)) {
-            $this->setParameters($name);
-            return $this;
-        }
-        if (empty($name) || !is_string($name)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
-                . ' of "' . $name . '" must be a non-empty string');
-        }
-        if ($value === null) {
-            $this->removeParameter($name);
-            return $this;
-        }
-        if (empty($value) || (!is_string($value) && $value !== null)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "value"'
-                . ' of "' . $value . '" must be a non-empty string');
-        }
-        $this->parameters[$name] = $value;
-        return $this;
-    }
-
-    /**
-     * Add an optional parameter to the update notification requests
-     *
-     * @param  array $parameters
-     * @return Publisher
-     */
-    public function setParameters(array $parameters)
-    {
-        foreach ($parameters as $name => $value) {
-            $this->setParameter($name, $value);
-        }
-        return $this;
-    }
-
-    /**
-     * Remove an optional parameter for the notification requests
-     *
-     * @param  string $name
-     * @return Publisher
-     * @throws Exception\InvalidArgumentException
-     */
-    public function removeParameter($name)
-    {
-        if (empty($name) || !is_string($name)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
-                . ' of "' . $name . '" must be a non-empty string');
-        }
-        if (array_key_exists($name, $this->parameters)) {
-            unset($this->parameters[$name]);
-        }
-        return $this;
-    }
-
-    /**
-     * Return an array of optional parameters for notification requests
-     *
-     * @return array
-     */
-    public function getParameters()
-    {
-        return $this->parameters;
-    }
-
-    /**
-     * Returns a boolean indicator of whether the notifications to Hub
-     * Servers were ALL successful. If even one failed, FALSE is returned.
-     *
-     * @return bool
-     */
-    public function isSuccess()
-    {
-        return !(count($this->errors) != 0);
-    }
-
-    /**
-     * Return an array of errors met from any failures, including keys:
-     * 'response' => the Zend\Http\Response object from the failure
-     * 'hubUrl' => the URL of the Hub Server whose notification failed
-     *
-     * @return array
-     */
-    public function getErrors()
-    {
-        return $this->errors;
-    }
-
-    /**
-     * Get a basic prepared HTTP client for use
-     *
-     * @return \Zend\Http\Client
-     * @throws Exception\RuntimeException
-     */
-    protected function _getHttpClient()
-    {
-        $client = PubSubHubbub::getHttpClient();
-        $client->setMethod(HttpRequest::METHOD_POST);
-        $client->setOptions(array(
-            'useragent' => 'Zend_Feed_Pubsubhubbub_Publisher/' . Version::VERSION,
-        ));
-        $params   = array();
-        $params[] = 'hub.mode=publish';
-        $topics   = $this->getUpdatedTopicUrls();
-        if (empty($topics)) {
-            throw new Exception\RuntimeException('No updated topic URLs'
-                . ' have been set');
-        }
-        foreach ($topics as $topicUrl) {
-            $params[] = 'hub.url=' . urlencode($topicUrl);
-        }
-        $optParams = $this->getParameters();
-        foreach ($optParams as $name => $value) {
-            $params[] = urlencode($name) . '=' . urlencode($value);
-        }
-        $paramString = implode('&', $params);
-        $client->setRawBody($paramString);
-        return $client;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Subscriber.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Subscriber.php
deleted file mode 100644
index d5db908509672e2d803ce72d6c362feafa3278e6..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Subscriber.php
+++ /dev/null
@@ -1,837 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub;
-
-use DateInterval;
-use DateTime;
-use Traversable;
-use Zend\Feed\Uri;
-use Zend\Http\Request as HttpRequest;
-use Zend\Stdlib\ArrayUtils;
-
-class Subscriber
-{
-    /**
-     * An array of URLs for all Hub Servers to subscribe/unsubscribe.
-     *
-     * @var array
-     */
-    protected $hubUrls = array();
-
-    /**
-     * An array of optional parameters to be included in any
-     * (un)subscribe requests.
-     *
-     * @var array
-     */
-    protected $parameters = array();
-
-    /**
-     * The URL of the topic (Rss or Atom feed) which is the subject of
-     * our current intent to subscribe to/unsubscribe from updates from
-     * the currently configured Hub Servers.
-     *
-     * @var string
-     */
-    protected $topicUrl = '';
-
-    /**
-     * The URL Hub Servers must use when communicating with this Subscriber
-     *
-     * @var string
-     */
-    protected $callbackUrl = '';
-
-    /**
-     * The number of seconds for which the subscriber would like to have the
-     * subscription active. Defaults to null, i.e. not sent, to setup a
-     * permanent subscription if possible.
-     *
-     * @var int
-     */
-    protected $leaseSeconds = null;
-
-    /**
-     * The preferred verification mode (sync or async). By default, this
-     * Subscriber prefers synchronous verification, but is considered
-     * desirable to support asynchronous verification if possible.
-     *
-     * Zend\Feed\Pubsubhubbub\Subscriber will always send both modes, whose
-     * order of occurrence in the parameter list determines this preference.
-     *
-     * @var string
-     */
-    protected $preferredVerificationMode = PubSubHubbub::VERIFICATION_MODE_SYNC;
-
-    /**
-     * An array of any errors including keys for 'response', 'hubUrl'.
-     * The response is the actual Zend\Http\Response object.
-     *
-     * @var array
-     */
-    protected $errors = array();
-
-    /**
-     * An array of Hub Server URLs for Hubs operating at this time in
-     * asynchronous verification mode.
-     *
-     * @var array
-     */
-    protected $asyncHubs = array();
-
-    /**
-     * An instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background
-     * save any verification tokens associated with a subscription or other.
-     *
-     * @var \Zend\Feed\PubSubHubbub\Model\SubscriptionPersistenceInterface
-     */
-    protected $storage = null;
-
-    /**
-     * An array of authentication credentials for HTTP Basic Authentication
-     * if required by specific Hubs. The array is indexed by Hub Endpoint URI
-     * and the value is a simple array of the username and password to apply.
-     *
-     * @var array
-     */
-    protected $authentications = array();
-
-    /**
-     * Tells the Subscriber to append any subscription identifier to the path
-     * of the base Callback URL. E.g. an identifier "subkey1" would be added
-     * to the callback URL "http://www.example.com/callback" to create a subscription
-     * specific Callback URL of "http://www.example.com/callback/subkey1".
-     *
-     * This is required for all Hubs using the Pubsubhubbub 0.1 Specification.
-     * It should be manually intercepted and passed to the Callback class using
-     * Zend\Feed\Pubsubhubbub\Subscriber\Callback::setSubscriptionKey(). Will
-     * require a route in the form "callback/:subkey" to allow the parameter be
-     * retrieved from an action using the Zend\Controller\Action::\getParam()
-     * method.
-     *
-     * @var string
-     */
-    protected $usePathParameter = false;
-
-    /**
-     * Constructor; accepts an array or Traversable instance to preset
-     * options for the Subscriber without calling all supported setter
-     * methods in turn.
-     *
-     * @param  array|Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        if ($options !== null) {
-            $this->setOptions($options);
-        }
-    }
-
-    /**
-     * Process any injected configuration options
-     *
-     * @param  array|Traversable $options
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setOptions($options)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if (!is_array($options)) {
-            throw new Exception\InvalidArgumentException('Array or Traversable object'
-                                . 'expected, got ' . gettype($options));
-        }
-        if (array_key_exists('hubUrls', $options)) {
-            $this->addHubUrls($options['hubUrls']);
-        }
-        if (array_key_exists('callbackUrl', $options)) {
-            $this->setCallbackUrl($options['callbackUrl']);
-        }
-        if (array_key_exists('topicUrl', $options)) {
-            $this->setTopicUrl($options['topicUrl']);
-        }
-        if (array_key_exists('storage', $options)) {
-            $this->setStorage($options['storage']);
-        }
-        if (array_key_exists('leaseSeconds', $options)) {
-            $this->setLeaseSeconds($options['leaseSeconds']);
-        }
-        if (array_key_exists('parameters', $options)) {
-            $this->setParameters($options['parameters']);
-        }
-        if (array_key_exists('authentications', $options)) {
-            $this->addAuthentications($options['authentications']);
-        }
-        if (array_key_exists('usePathParameter', $options)) {
-            $this->usePathParameter($options['usePathParameter']);
-        }
-        if (array_key_exists('preferredVerificationMode', $options)) {
-            $this->setPreferredVerificationMode(
-                $options['preferredVerificationMode']
-            );
-        }
-        return $this;
-    }
-
-    /**
-     * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe
-     * event will relate
-     *
-     * @param  string $url
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setTopicUrl($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
-                .' of "' . $url . '" must be a non-empty string and a valid'
-                .' URL');
-        }
-        $this->topicUrl = $url;
-        return $this;
-    }
-
-    /**
-     * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe
-     * event will relate
-     *
-     * @return string
-     * @throws Exception\RuntimeException
-     */
-    public function getTopicUrl()
-    {
-        if (empty($this->topicUrl)) {
-            throw new Exception\RuntimeException('A valid Topic (RSS or Atom'
-                . ' feed) URL MUST be set before attempting any operation');
-        }
-        return $this->topicUrl;
-    }
-
-    /**
-     * Set the number of seconds for which any subscription will remain valid
-     *
-     * @param  int $seconds
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setLeaseSeconds($seconds)
-    {
-        $seconds = intval($seconds);
-        if ($seconds <= 0) {
-            throw new Exception\InvalidArgumentException('Expected lease seconds'
-                . ' must be an integer greater than zero');
-        }
-        $this->leaseSeconds = $seconds;
-        return $this;
-    }
-
-    /**
-     * Get the number of lease seconds on subscriptions
-     *
-     * @return int
-     */
-    public function getLeaseSeconds()
-    {
-        return $this->leaseSeconds;
-    }
-
-    /**
-     * Set the callback URL to be used by Hub Servers when communicating with
-     * this Subscriber
-     *
-     * @param  string $url
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setCallbackUrl($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
-                . ' of "' . $url . '" must be a non-empty string and a valid'
-                . ' URL');
-        }
-        $this->callbackUrl = $url;
-        return $this;
-    }
-
-    /**
-     * Get the callback URL to be used by Hub Servers when communicating with
-     * this Subscriber
-     *
-     * @return string
-     * @throws Exception\RuntimeException
-     */
-    public function getCallbackUrl()
-    {
-        if (empty($this->callbackUrl)) {
-            throw new Exception\RuntimeException('A valid Callback URL MUST be'
-                . ' set before attempting any operation');
-        }
-        return $this->callbackUrl;
-    }
-
-    /**
-     * Set preferred verification mode (sync or async). By default, this
-     * Subscriber prefers synchronous verification, but does support
-     * asynchronous if that's the Hub Server's utilised mode.
-     *
-     * Zend\Feed\Pubsubhubbub\Subscriber will always send both modes, whose
-     * order of occurrence in the parameter list determines this preference.
-     *
-     * @param  string $mode Should be 'sync' or 'async'
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setPreferredVerificationMode($mode)
-    {
-        if ($mode !== PubSubHubbub::VERIFICATION_MODE_SYNC
-            && $mode !== PubSubHubbub::VERIFICATION_MODE_ASYNC
-        ) {
-            throw new Exception\InvalidArgumentException('Invalid preferred'
-                . ' mode specified: "' . $mode . '" but should be one of'
-                . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_SYNC or'
-                . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_ASYNC');
-        }
-        $this->preferredVerificationMode = $mode;
-        return $this;
-    }
-
-    /**
-     * Get preferred verification mode (sync or async).
-     *
-     * @return string
-     */
-    public function getPreferredVerificationMode()
-    {
-        return $this->preferredVerificationMode;
-    }
-
-    /**
-     * Add a Hub Server URL supported by Publisher
-     *
-     * @param  string $url
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function addHubUrl($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
-                . ' of "' . $url . '" must be a non-empty string and a valid'
-                . ' URL');
-        }
-        $this->hubUrls[] = $url;
-        return $this;
-    }
-
-    /**
-     * Add an array of Hub Server URLs supported by Publisher
-     *
-     * @param  array $urls
-     * @return Subscriber
-     */
-    public function addHubUrls(array $urls)
-    {
-        foreach ($urls as $url) {
-            $this->addHubUrl($url);
-        }
-        return $this;
-    }
-
-    /**
-     * Remove a Hub Server URL
-     *
-     * @param  string $url
-     * @return Subscriber
-     */
-    public function removeHubUrl($url)
-    {
-        if (!in_array($url, $this->getHubUrls())) {
-            return $this;
-        }
-        $key = array_search($url, $this->hubUrls);
-        unset($this->hubUrls[$key]);
-        return $this;
-    }
-
-    /**
-     * Return an array of unique Hub Server URLs currently available
-     *
-     * @return array
-     */
-    public function getHubUrls()
-    {
-        $this->hubUrls = array_unique($this->hubUrls);
-        return $this->hubUrls;
-    }
-
-    /**
-     * Add authentication credentials for a given URL
-     *
-     * @param  string $url
-     * @param  array $authentication
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function addAuthentication($url, array $authentication)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
-                . ' of "' . $url . '" must be a non-empty string and a valid'
-                . ' URL');
-        }
-        $this->authentications[$url] = $authentication;
-        return $this;
-    }
-
-    /**
-     * Add authentication credentials for hub URLs
-     *
-     * @param  array $authentications
-     * @return Subscriber
-     */
-    public function addAuthentications(array $authentications)
-    {
-        foreach ($authentications as $url => $authentication) {
-            $this->addAuthentication($url, $authentication);
-        }
-        return $this;
-    }
-
-    /**
-     * Get all hub URL authentication credentials
-     *
-     * @return array
-     */
-    public function getAuthentications()
-    {
-        return $this->authentications;
-    }
-
-    /**
-     * Set flag indicating whether or not to use a path parameter
-     *
-     * @param  bool $bool
-     * @return Subscriber
-     */
-    public function usePathParameter($bool = true)
-    {
-        $this->usePathParameter = $bool;
-        return $this;
-    }
-
-    /**
-     * Add an optional parameter to the (un)subscribe requests
-     *
-     * @param  string $name
-     * @param  string|null $value
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setParameter($name, $value = null)
-    {
-        if (is_array($name)) {
-            $this->setParameters($name);
-            return $this;
-        }
-        if (empty($name) || !is_string($name)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
-                . ' of "' . $name . '" must be a non-empty string');
-        }
-        if ($value === null) {
-            $this->removeParameter($name);
-            return $this;
-        }
-        if (empty($value) || (!is_string($value) && $value !== null)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "value"'
-                . ' of "' . $value . '" must be a non-empty string');
-        }
-        $this->parameters[$name] = $value;
-        return $this;
-    }
-
-    /**
-     * Add an optional parameter to the (un)subscribe requests
-     *
-     * @param  array $parameters
-     * @return Subscriber
-     */
-    public function setParameters(array $parameters)
-    {
-        foreach ($parameters as $name => $value) {
-            $this->setParameter($name, $value);
-        }
-        return $this;
-    }
-
-    /**
-     * Remove an optional parameter for the (un)subscribe requests
-     *
-     * @param  string $name
-     * @return Subscriber
-     * @throws Exception\InvalidArgumentException
-     */
-    public function removeParameter($name)
-    {
-        if (empty($name) || !is_string($name)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
-                . ' of "' . $name . '" must be a non-empty string');
-        }
-        if (array_key_exists($name, $this->parameters)) {
-            unset($this->parameters[$name]);
-        }
-        return $this;
-    }
-
-    /**
-     * Return an array of optional parameters for (un)subscribe requests
-     *
-     * @return array
-     */
-    public function getParameters()
-    {
-        return $this->parameters;
-    }
-
-    /**
-     * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background
-     * save any verification tokens associated with a subscription or other.
-     *
-     * @param  Model\SubscriptionPersistenceInterface $storage
-     * @return Subscriber
-     */
-    public function setStorage(Model\SubscriptionPersistenceInterface $storage)
-    {
-        $this->storage = $storage;
-        return $this;
-    }
-
-    /**
-     * Gets an instance of Zend\Feed\Pubsubhubbub\Storage\StoragePersistence used
-     * to background save any verification tokens associated with a subscription
-     * or other.
-     *
-     * @return Model\SubscriptionPersistenceInterface
-     * @throws Exception\RuntimeException
-     */
-    public function getStorage()
-    {
-        if ($this->storage === null) {
-            throw new Exception\RuntimeException('No storage vehicle '
-                . 'has been set.');
-        }
-        return $this->storage;
-    }
-
-    /**
-     * Subscribe to one or more Hub Servers using the stored Hub URLs
-     * for the given Topic URL (RSS or Atom feed)
-     *
-     * @return void
-     */
-    public function subscribeAll()
-    {
-        $this->_doRequest('subscribe');
-    }
-
-    /**
-     * Unsubscribe from one or more Hub Servers using the stored Hub URLs
-     * for the given Topic URL (RSS or Atom feed)
-     *
-     * @return void
-     */
-    public function unsubscribeAll()
-    {
-        $this->_doRequest('unsubscribe');
-    }
-
-    /**
-     * Returns a boolean indicator of whether the notifications to Hub
-     * Servers were ALL successful. If even one failed, FALSE is returned.
-     *
-     * @return bool
-     */
-    public function isSuccess()
-    {
-        if (count($this->errors) > 0) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Return an array of errors met from any failures, including keys:
-     * 'response' => the Zend\Http\Response object from the failure
-     * 'hubUrl' => the URL of the Hub Server whose notification failed
-     *
-     * @return array
-     */
-    public function getErrors()
-    {
-        return $this->errors;
-    }
-
-    /**
-     * Return an array of Hub Server URLs who returned a response indicating
-     * operation in Asynchronous Verification Mode, i.e. they will not confirm
-     * any (un)subscription immediately but at a later time (Hubs may be
-     * doing this as a batch process when load balancing)
-     *
-     * @return array
-     */
-    public function getAsyncHubs()
-    {
-        return $this->asyncHubs;
-    }
-
-    /**
-     * Executes an (un)subscribe request
-     *
-     * @param  string $mode
-     * @return void
-     * @throws Exception\RuntimeException
-     */
-    protected function _doRequest($mode)
-    {
-        $client = $this->_getHttpClient();
-        $hubs   = $this->getHubUrls();
-        if (empty($hubs)) {
-            throw new Exception\RuntimeException('No Hub Server URLs'
-                . ' have been set so no subscriptions can be attempted');
-        }
-        $this->errors = array();
-        $this->asyncHubs = array();
-        foreach ($hubs as $url) {
-            if (array_key_exists($url, $this->authentications)) {
-                $auth = $this->authentications[$url];
-                $client->setAuth($auth[0], $auth[1]);
-            }
-            $client->setUri($url);
-            $client->setRawBody($params = $this->_getRequestParameters($url, $mode));
-            $response = $client->send();
-            if ($response->getStatusCode() !== 204
-                && $response->getStatusCode() !== 202
-            ) {
-                $this->errors[] = array(
-                    'response' => $response,
-                    'hubUrl'   => $url,
-                );
-            /**
-             * At first I thought it was needed, but the backend storage will
-             * allow tracking async without any user interference. It's left
-             * here in case the user is interested in knowing what Hubs
-             * are using async verification modes so they may update Models and
-             * move these to asynchronous processes.
-             */
-            } elseif ($response->getStatusCode() == 202) {
-                $this->asyncHubs[] = array(
-                    'response' => $response,
-                    'hubUrl'   => $url,
-                );
-            }
-        }
-    }
-
-    /**
-     * Get a basic prepared HTTP client for use
-     *
-     * @return \Zend\Http\Client
-     */
-    protected function _getHttpClient()
-    {
-        $client = PubSubHubbub::getHttpClient();
-        $client->setMethod(HttpRequest::METHOD_POST);
-        $client->setOptions(array('useragent' => 'Zend_Feed_Pubsubhubbub_Subscriber/'
-            . Version::VERSION));
-        return $client;
-    }
-
-    /**
-     * Return a list of standard protocol/optional parameters for addition to
-     * client's POST body that are specific to the current Hub Server URL
-     *
-     * @param  string $hubUrl
-     * @param  string $mode
-     * @return string
-     * @throws Exception\InvalidArgumentException
-     */
-    protected function _getRequestParameters($hubUrl, $mode)
-    {
-        if (!in_array($mode, array('subscribe', 'unsubscribe'))) {
-            throw new Exception\InvalidArgumentException('Invalid mode specified: "'
-                . $mode . '" which should have been "subscribe" or "unsubscribe"');
-        }
-
-        $params = array(
-            'hub.mode'  => $mode,
-            'hub.topic' => $this->getTopicUrl(),
-        );
-
-        if ($this->getPreferredVerificationMode()
-                == PubSubHubbub::VERIFICATION_MODE_SYNC
-        ) {
-            $vmodes = array(
-                PubSubHubbub::VERIFICATION_MODE_SYNC,
-                PubSubHubbub::VERIFICATION_MODE_ASYNC,
-            );
-        } else {
-            $vmodes = array(
-                PubSubHubbub::VERIFICATION_MODE_ASYNC,
-                PubSubHubbub::VERIFICATION_MODE_SYNC,
-            );
-        }
-        $params['hub.verify'] = array();
-        foreach ($vmodes as $vmode) {
-            $params['hub.verify'][] = $vmode;
-        }
-
-        /**
-         * Establish a persistent verify_token and attach key to callback
-         * URL's path/query_string
-         */
-        $key   = $this->_generateSubscriptionKey($params, $hubUrl);
-        $token = $this->_generateVerifyToken();
-        $params['hub.verify_token'] = $token;
-
-        // Note: query string only usable with PuSH 0.2 Hubs
-        if (!$this->usePathParameter) {
-            $params['hub.callback'] = $this->getCallbackUrl()
-                . '?xhub.subscription=' . PubSubHubbub::urlencode($key);
-        } else {
-            $params['hub.callback'] = rtrim($this->getCallbackUrl(), '/')
-                . '/' . PubSubHubbub::urlencode($key);
-        }
-        if ($mode == 'subscribe' && $this->getLeaseSeconds() !== null) {
-            $params['hub.lease_seconds'] = $this->getLeaseSeconds();
-        }
-
-        // hub.secret not currently supported
-        $optParams = $this->getParameters();
-        foreach ($optParams as $name => $value) {
-            $params[$name] = $value;
-        }
-
-        // store subscription to storage
-        $now = new DateTime();
-        $expires = null;
-        if (isset($params['hub.lease_seconds'])) {
-            $expires = $now->add(new DateInterval('PT' . $params['hub.lease_seconds'] . 'S'))
-                ->format('Y-m-d H:i:s');
-        }
-        $data = array(
-            'id'                 => $key,
-            'topic_url'          => $params['hub.topic'],
-            'hub_url'            => $hubUrl,
-            'created_time'       => $now->format('Y-m-d H:i:s'),
-            'lease_seconds'      => $params['hub.lease_seconds'],
-            'verify_token'       => hash('sha256', $params['hub.verify_token']),
-            'secret'             => null,
-            'expiration_time'    => $expires,
-            'subscription_state' => ($mode == 'unsubscribe')? PubSubHubbub::SUBSCRIPTION_TODELETE : PubSubHubbub::SUBSCRIPTION_NOTVERIFIED,
-        );
-        $this->getStorage()->setSubscription($data);
-
-        return $this->_toByteValueOrderedString(
-            $this->_urlEncode($params)
-        );
-    }
-
-    /**
-     * Simple helper to generate a verification token used in (un)subscribe
-     * requests to a Hub Server. Follows no particular method, which means
-     * it might be improved/changed in future.
-     *
-     * @return string
-     */
-    protected function _generateVerifyToken()
-    {
-        if (!empty($this->testStaticToken)) {
-            return $this->testStaticToken;
-        }
-        return uniqid(rand(), true) . time();
-    }
-
-    /**
-     * Simple helper to generate a verification token used in (un)subscribe
-     * requests to a Hub Server.
-     *
-     * @param array   $params
-     * @param string $hubUrl The Hub Server URL for which this token will apply
-     * @return string
-     */
-    protected function _generateSubscriptionKey(array $params, $hubUrl)
-    {
-        $keyBase = $params['hub.topic'] . $hubUrl;
-        $key     = md5($keyBase);
-
-        return $key;
-    }
-
-    /**
-     * URL Encode an array of parameters
-     *
-     * @param  array $params
-     * @return array
-     */
-    protected function _urlEncode(array $params)
-    {
-        $encoded = array();
-        foreach ($params as $key => $value) {
-            if (is_array($value)) {
-                $ekey = PubSubHubbub::urlencode($key);
-                $encoded[$ekey] = array();
-                foreach ($value as $duplicateKey) {
-                    $encoded[$ekey][]
-                        = PubSubHubbub::urlencode($duplicateKey);
-                }
-            } else {
-                $encoded[PubSubHubbub::urlencode($key)]
-                    = PubSubHubbub::urlencode($value);
-            }
-        }
-        return $encoded;
-    }
-
-    /**
-     * Order outgoing parameters
-     *
-     * @param  array $params
-     * @return array
-     */
-    protected function _toByteValueOrderedString(array $params)
-    {
-        $return = array();
-        uksort($params, 'strnatcmp');
-        foreach ($params as $key => $value) {
-            if (is_array($value)) {
-                foreach ($value as $keyduplicate) {
-                    $return[] = $key . '=' . $keyduplicate;
-                }
-            } else {
-                $return[] = $key . '=' . $value;
-            }
-        }
-        return implode('&', $return);
-    }
-
-    /**
-     * This is STRICTLY for testing purposes only...
-     */
-    protected $testStaticToken = null;
-
-    final public function setTestStaticToken($token)
-    {
-        $this->testStaticToken = (string) $token;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Subscriber/Callback.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Subscriber/Callback.php
deleted file mode 100644
index 5160259003b88ab6ae2f6a148b9fe8546fa6d215..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Subscriber/Callback.php
+++ /dev/null
@@ -1,316 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub\Subscriber;
-
-use Zend\Feed\PubSubHubbub;
-use Zend\Feed\PubSubHubbub\Exception;
-use Zend\Feed\Uri;
-
-class Callback extends PubSubHubbub\AbstractCallback
-{
-    /**
-     * Contains the content of any feeds sent as updates to the Callback URL
-     *
-     * @var string
-     */
-    protected $feedUpdate = null;
-
-    /**
-     * Holds a manually set subscription key (i.e. identifies a unique
-     * subscription) which is typical when it is not passed in the query string
-     * but is part of the Callback URL path, requiring manual retrieval e.g.
-     * using a route and the \Zend\Mvc\Router\RouteMatch::getParam() method.
-     *
-     * @var string
-     */
-    protected $subscriptionKey = null;
-
-    /**
-     * After verification, this is set to the verified subscription's data.
-     *
-     * @var array
-     */
-    protected $currentSubscriptionData = null;
-
-    /**
-     * Set a subscription key to use for the current callback request manually.
-     * Required if usePathParameter is enabled for the Subscriber.
-     *
-     * @param  string $key
-     * @return \Zend\Feed\PubSubHubbub\Subscriber\Callback
-     */
-    public function setSubscriptionKey($key)
-    {
-        $this->subscriptionKey = $key;
-        return $this;
-    }
-
-    /**
-     * Handle any callback from a Hub Server responding to a subscription or
-     * unsubscription request. This should be the Hub Server confirming the
-     * the request prior to taking action on it.
-     *
-     * @param  array $httpGetData GET data if available and not in $_GET
-     * @param  bool $sendResponseNow Whether to send response now or when asked
-     * @return void
-     */
-    public function handle(array $httpGetData = null, $sendResponseNow = false)
-    {
-        if ($httpGetData === null) {
-            $httpGetData = $_GET;
-        }
-
-        /**
-         * Handle any feed updates (sorry for the mess :P)
-         *
-         * This DOES NOT attempt to process a feed update. Feed updates
-         * SHOULD be validated/processed by an asynchronous process so as
-         * to avoid holding up responses to the Hub.
-         */
-        $contentType = $this->_getHeader('Content-Type');
-        if (strtolower($_SERVER['REQUEST_METHOD']) == 'post'
-            && $this->_hasValidVerifyToken(null, false)
-            && (stripos($contentType, 'application/atom+xml') === 0
-                || stripos($contentType, 'application/rss+xml') === 0
-                || stripos($contentType, 'application/xml') === 0
-                || stripos($contentType, 'text/xml') === 0
-                || stripos($contentType, 'application/rdf+xml') === 0)
-        ) {
-            $this->setFeedUpdate($this->_getRawBody());
-            $this->getHttpResponse()->setHeader('X-Hub-On-Behalf-Of', $this->getSubscriberCount());
-        /**
-         * Handle any (un)subscribe confirmation requests
-         */
-        } elseif ($this->isValidHubVerification($httpGetData)) {
-            $this->getHttpResponse()->setContent($httpGetData['hub_challenge']);
-
-            switch (strtolower($httpGetData['hub_mode'])) {
-                case 'subscribe':
-                    $data = $this->currentSubscriptionData;
-                    $data['subscription_state'] = PubSubHubbub\PubSubHubbub::SUBSCRIPTION_VERIFIED;
-                    if (isset($httpGetData['hub_lease_seconds'])) {
-                        $data['lease_seconds'] = $httpGetData['hub_lease_seconds'];
-                    }
-                    $this->getStorage()->setSubscription($data);
-                    break;
-                case 'unsubscribe':
-                    $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData);
-                    $this->getStorage()->deleteSubscription($verifyTokenKey);
-                    break;
-                default:
-                    throw new Exception\RuntimeException(sprintf(
-                        'Invalid hub_mode ("%s") provided',
-                        $httpGetData['hub_mode']
-                    ));
-            }
-        /**
-         * Hey, C'mon! We tried everything else!
-         */
-        } else {
-            $this->getHttpResponse()->setStatusCode(404);
-        }
-
-        if ($sendResponseNow) {
-            $this->sendResponse();
-        }
-    }
-
-    /**
-     * Checks validity of the request simply by making a quick pass and
-     * confirming the presence of all REQUIRED parameters.
-     *
-     * @param  array $httpGetData
-     * @return bool
-     */
-    public function isValidHubVerification(array $httpGetData)
-    {
-        /**
-         * As per the specification, the hub.verify_token is OPTIONAL. This
-         * implementation of Pubsubhubbub considers it REQUIRED and will
-         * always send a hub.verify_token parameter to be echoed back
-         * by the Hub Server. Therefore, its absence is considered invalid.
-         */
-        if (strtolower($_SERVER['REQUEST_METHOD']) !== 'get') {
-            return false;
-        }
-        $required = array(
-            'hub_mode',
-            'hub_topic',
-            'hub_challenge',
-            'hub_verify_token',
-        );
-        foreach ($required as $key) {
-            if (!array_key_exists($key, $httpGetData)) {
-                return false;
-            }
-        }
-        if ($httpGetData['hub_mode'] !== 'subscribe'
-            && $httpGetData['hub_mode'] !== 'unsubscribe'
-        ) {
-            return false;
-        }
-        if ($httpGetData['hub_mode'] == 'subscribe'
-            && !array_key_exists('hub_lease_seconds', $httpGetData)
-        ) {
-            return false;
-        }
-        if (!Uri::factory($httpGetData['hub_topic'])->isValid()) {
-            return false;
-        }
-
-        /**
-         * Attempt to retrieve any Verification Token Key attached to Callback
-         * URL's path by our Subscriber implementation
-         */
-        if (!$this->_hasValidVerifyToken($httpGetData)) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Sets a newly received feed (Atom/RSS) sent by a Hub as an update to a
-     * Topic we've subscribed to.
-     *
-     * @param  string $feed
-     * @return \Zend\Feed\PubSubHubbub\Subscriber\Callback
-     */
-    public function setFeedUpdate($feed)
-    {
-        $this->feedUpdate = $feed;
-        return $this;
-    }
-
-    /**
-     * Check if any newly received feed (Atom/RSS) update was received
-     *
-     * @return bool
-     */
-    public function hasFeedUpdate()
-    {
-        if ($this->feedUpdate === null) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Gets a newly received feed (Atom/RSS) sent by a Hub as an update to a
-     * Topic we've subscribed to.
-     *
-     * @return string
-     */
-    public function getFeedUpdate()
-    {
-        return $this->feedUpdate;
-    }
-
-    /**
-     * Check for a valid verify_token. By default attempts to compare values
-     * with that sent from Hub, otherwise merely ascertains its existence.
-     *
-     * @param  array $httpGetData
-     * @param  bool $checkValue
-     * @return bool
-     */
-    protected function _hasValidVerifyToken(array $httpGetData = null, $checkValue = true)
-    {
-        $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData);
-        if (empty($verifyTokenKey)) {
-            return false;
-        }
-        $verifyTokenExists = $this->getStorage()->hasSubscription($verifyTokenKey);
-        if (!$verifyTokenExists) {
-            return false;
-        }
-        if ($checkValue) {
-            $data = $this->getStorage()->getSubscription($verifyTokenKey);
-            $verifyToken = $data['verify_token'];
-            if ($verifyToken !== hash('sha256', $httpGetData['hub_verify_token'])) {
-                return false;
-            }
-            $this->currentSubscriptionData = $data;
-            return true;
-        }
-        return true;
-    }
-
-    /**
-     * Attempt to detect the verification token key. This would be passed in
-     * the Callback URL (which we are handling with this class!) as a URI
-     * path part (the last part by convention).
-     *
-     * @param  null|array $httpGetData
-     * @return false|string
-     */
-    protected function _detectVerifyTokenKey(array $httpGetData = null)
-    {
-        /**
-         * Available when sub keys encoding in Callback URL path
-         */
-        if (isset($this->subscriptionKey)) {
-            return $this->subscriptionKey;
-        }
-
-        /**
-         * Available only if allowed by PuSH 0.2 Hubs
-         */
-        if (is_array($httpGetData)
-            && isset($httpGetData['xhub_subscription'])
-        ) {
-            return $httpGetData['xhub_subscription'];
-        }
-
-        /**
-         * Available (possibly) if corrupted in transit and not part of $_GET
-         */
-        $params = $this->_parseQueryString();
-        if (isset($params['xhub.subscription'])) {
-            return rawurldecode($params['xhub.subscription']);
-        }
-
-        return false;
-    }
-
-    /**
-     * Build an array of Query String parameters.
-     * This bypasses $_GET which munges parameter names and cannot accept
-     * multiple parameters with the same key.
-     *
-     * @return array|void
-     */
-    protected function _parseQueryString()
-    {
-        $params      = array();
-        $queryString = '';
-        if (isset($_SERVER['QUERY_STRING'])) {
-            $queryString = $_SERVER['QUERY_STRING'];
-        }
-        if (empty($queryString)) {
-            return array();
-        }
-        $parts = explode('&', $queryString);
-        foreach ($parts as $kvpair) {
-            $pair  = explode('=', $kvpair);
-            $key   = rawurldecode($pair[0]);
-            $value = rawurldecode($pair[1]);
-            if (isset($params[$key])) {
-                if (is_array($params[$key])) {
-                    $params[$key][] = $value;
-                } else {
-                    $params[$key] = array($params[$key], $value);
-                }
-            } else {
-                $params[$key] = $value;
-            }
-        }
-        return $params;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/PubSubHubbub/Version.php b/core/vendor/zendframework/zend-feed/PubSubHubbub/Version.php
deleted file mode 100644
index 9ac7fb4bdb41832beca537d361d4244ecba251b4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/PubSubHubbub/Version.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\PubSubHubbub;
-
-abstract class Version
-{
-    const VERSION = '2';
-}
diff --git a/core/vendor/zendframework/zend-feed/README.md b/core/vendor/zendframework/zend-feed/README.md
index ffc73a9c262e2137aa7f0b307de8aae31af45e58..cffad17e601af141207804996999309cf29587c7 100644
--- a/core/vendor/zendframework/zend-feed/README.md
+++ b/core/vendor/zendframework/zend-feed/README.md
@@ -1,15 +1,10 @@
-Feed Component from ZF2
-=======================
+# zend-feed
 
-This is the Feed component for ZF2.
+`Zend\Feed` provides functionality for consuming RSS and Atom feeds. It provides
+a natural syntax for accessing elements of feeds, feed attributes, and entry
+attributes. `Zend\Feed` also has extensive support for modifying feed and entry
+structure with the same natural syntax, and turning the result back into XML.
 
-- File issues at https://github.com/zendframework/zf2/issues
-- Create pull requests against https://github.com/zendframework/zf2
-- Documentation is at http://framework.zend.com/docs
-
-LICENSE
--------
-
-The files in this archive are released under the [Zend Framework
-license](http://framework.zend.com/license), which is a 3-clause BSD license.
 
+- File issues at https://github.com/zendframework/zend-feed/issues
+- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-feed
diff --git a/core/vendor/zendframework/zend-feed/Reader/AbstractEntry.php b/core/vendor/zendframework/zend-feed/Reader/AbstractEntry.php
deleted file mode 100644
index a5bcd4287ace31206637c8f4a54dc30316cc8826..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/AbstractEntry.php
+++ /dev/null
@@ -1,224 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-use DOMDocument;
-use DOMElement;
-use DOMXPath;
-
-abstract class AbstractEntry
-{
-    /**
-     * Feed entry data
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * DOM document object
-     *
-     * @var DOMDocument
-     */
-    protected $domDocument = null;
-
-    /**
-     * Entry instance
-     *
-     * @var DOMElement
-     */
-    protected $entry = null;
-
-    /**
-     * Pointer to the current entry
-     *
-     * @var int
-     */
-    protected $entryKey = 0;
-
-    /**
-     * XPath object
-     *
-     * @var DOMXPath
-     */
-    protected $xpath = null;
-
-    /**
-     * Registered extensions
-     *
-     * @var array
-     */
-    protected $extensions = array();
-
-    /**
-     * Constructor
-     *
-     * @param  DOMElement $entry
-     * @param  int $entryKey
-     * @param  null|string $type
-     */
-    public function __construct(DOMElement $entry, $entryKey, $type = null)
-    {
-        $this->entry       = $entry;
-        $this->entryKey    = $entryKey;
-        $this->domDocument = $entry->ownerDocument;
-        if ($type !== null) {
-            $this->data['type'] = $type;
-        } else {
-            $this->data['type'] = Reader::detectType($entry);
-        }
-        $this->_loadExtensions();
-    }
-
-    /**
-     * Get the DOM
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument()
-    {
-        return $this->domDocument;
-    }
-
-    /**
-     * Get the entry element
-     *
-     * @return DOMElement
-     */
-    public function getElement()
-    {
-        return $this->entry;
-    }
-
-    /**
-     * Get the Entry's encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        $assumed = $this->getDomDocument()->encoding;
-        if (empty($assumed)) {
-            $assumed = 'UTF-8';
-        }
-        return $assumed;
-    }
-
-    /**
-     * Get entry as xml
-     *
-     * @return string
-     */
-    public function saveXml()
-    {
-        $dom = new DOMDocument('1.0', $this->getEncoding());
-        $entry = $dom->importNode($this->getElement(), true);
-        $dom->appendChild($entry);
-        return $dom->saveXml();
-    }
-
-    /**
-     * Get the entry type
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        return $this->data['type'];
-    }
-
-    /**
-     * Get the XPath query object
-     *
-     * @return DOMXPath
-     */
-    public function getXpath()
-    {
-        if (!$this->xpath) {
-            $this->setXpath(new DOMXPath($this->getDomDocument()));
-        }
-        return $this->xpath;
-    }
-
-    /**
-     * Set the XPath query
-     *
-     * @param  DOMXPath $xpath
-     * @return \Zend\Feed\Reader\AbstractEntry
-     */
-    public function setXpath(DOMXPath $xpath)
-    {
-        $this->xpath = $xpath;
-        return $this;
-    }
-
-    /**
-     * Get registered extensions
-     *
-     * @return array
-     */
-    public function getExtensions()
-    {
-        return $this->extensions;
-    }
-
-    /**
-     * Return an Extension object with the matching name (postfixed with _Entry)
-     *
-     * @param string $name
-     * @return \Zend\Feed\Reader\Extension\AbstractEntry
-     */
-    public function getExtension($name)
-    {
-        if (array_key_exists($name . '\Entry', $this->extensions)) {
-            return $this->extensions[$name . '\Entry'];
-        }
-        return;
-    }
-
-    /**
-     * Method overloading: call given method on first extension implementing it
-     *
-     * @param  string $method
-     * @param  array $args
-     * @return mixed
-     * @throws Exception\BadMethodCallException if no extensions implements the method
-     */
-    public function __call($method, $args)
-    {
-        foreach ($this->extensions as $extension) {
-            if (method_exists($extension, $method)) {
-                return call_user_func_array(array($extension, $method), $args);
-            }
-        }
-        throw new Exception\BadMethodCallException('Method: ' . $method
-            . 'does not exist and could not be located on a registered Extension');
-    }
-
-    /**
-     * Load extensions from Zend\Feed\Reader\Reader
-     *
-     * @return void
-     */
-    protected function _loadExtensions()
-    {
-        $all = Reader::getExtensions();
-        $feed = $all['entry'];
-        foreach ($feed as $extension) {
-            if (in_array($extension, $all['core'])) {
-                continue;
-            }
-            $className = Reader::getPluginLoader()->getClassName($extension);
-            $this->extensions[$extension] = new $className(
-                $this->getElement(), $this->entryKey, $this->data['type']
-            );
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/AbstractFeed.php b/core/vendor/zendframework/zend-feed/Reader/AbstractFeed.php
deleted file mode 100644
index 1ded7441821d50ee4989d68151035baf79cc1520..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/AbstractFeed.php
+++ /dev/null
@@ -1,300 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-use DOMDocument;
-use DOMElement;
-use DOMXPath;
-
-abstract class AbstractFeed implements Feed\FeedInterface
-{
-    /**
-     * Parsed feed data
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Parsed feed data in the shape of a DOMDocument
-     *
-     * @var DOMDocument
-     */
-    protected $domDocument = null;
-
-    /**
-     * An array of parsed feed entries
-     *
-     * @var array
-     */
-    protected $entries = array();
-
-    /**
-     * A pointer for the iterator to keep track of the entries array
-     *
-     * @var int
-     */
-    protected $entriesKey = 0;
-
-    /**
-     * The base XPath query used to retrieve feed data
-     *
-     * @var DOMXPath
-     */
-    protected $xpath = null;
-
-    /**
-     * Array of loaded extensions
-     *
-     * @var array
-     */
-    protected $extensions = array();
-
-    /**
-     * Original Source URI (set if imported from a URI)
-     *
-     * @var string
-     */
-    protected $originalSourceUri = null;
-
-    /**
-     * Constructor
-     *
-     * @param DomDocument $domDocument The DOM object for the feed's XML
-     * @param string $type Feed type
-     */
-    public function __construct(DOMDocument $domDocument, $type = null)
-    {
-        $this->domDocument = $domDocument;
-        $this->xpath = new DOMXPath($this->domDocument);
-
-        if ($type !== null) {
-            $this->data['type'] = $type;
-        } else {
-            $this->data['type'] = Reader::detectType($this->domDocument);
-        }
-        $this->registerNamespaces();
-        $this->indexEntries();
-        $this->loadExtensions();
-    }
-
-    /**
-     * Set an original source URI for the feed being parsed. This value
-     * is returned from getFeedLink() method if the feed does not carry
-     * a self-referencing URI.
-     *
-     * @param string $uri
-     */
-    public function setOriginalSourceUri($uri)
-    {
-        $this->originalSourceUri = $uri;
-    }
-
-    /**
-     * Get an original source URI for the feed being parsed. Returns null if
-     * unset or the feed was not imported from a URI.
-     *
-     * @return string|null
-     */
-    public function getOriginalSourceUri()
-    {
-        return $this->originalSourceUri;
-    }
-
-    /**
-     * Get the number of feed entries.
-     * Required by the Iterator interface.
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->entries);
-    }
-
-    /**
-     * Return the current entry
-     *
-     * @return \Zend\Feed\Reader\AbstractEntry
-     */
-    public function current()
-    {
-        if (substr($this->getType(), 0, 3) == 'rss') {
-            $reader = new Entry\RSS($this->entries[$this->key()], $this->key(), $this->getType());
-        } else {
-            $reader = new Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType());
-        }
-
-        $reader->setXpath($this->xpath);
-
-        return $reader;
-    }
-
-    /**
-     * Get the DOM
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument()
-    {
-        return $this->domDocument;
-    }
-
-    /**
-     * Get the Feed's encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        $assumed = $this->getDomDocument()->encoding;
-        if (empty($assumed)) {
-            $assumed = 'UTF-8';
-        }
-        return $assumed;
-    }
-
-    /**
-     * Get feed as xml
-     *
-     * @return string
-     */
-    public function saveXml()
-    {
-        return $this->getDomDocument()->saveXml();
-    }
-
-    /**
-     * Get the DOMElement representing the items/feed element
-     *
-     * @return DOMElement
-     */
-    public function getElement()
-    {
-        return $this->getDomDocument()->documentElement;
-    }
-
-    /**
-     * Get the DOMXPath object for this feed
-     *
-     * @return DOMXPath
-     */
-    public function getXpath()
-    {
-        return $this->xpath;
-    }
-
-    /**
-     * Get the feed type
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        return $this->data['type'];
-    }
-
-    /**
-     * Return the current feed key
-     *
-     * @return int
-     */
-    public function key()
-    {
-        return $this->entriesKey;
-    }
-
-    /**
-     * Move the feed pointer forward
-     *
-     */
-    public function next()
-    {
-        ++$this->entriesKey;
-    }
-
-    /**
-     * Reset the pointer in the feed object
-     *
-     */
-    public function rewind()
-    {
-        $this->entriesKey = 0;
-    }
-
-    /**
-     * Check to see if the iterator is still valid
-     *
-     * @return bool
-     */
-    public function valid()
-    {
-        return 0 <= $this->entriesKey && $this->entriesKey < $this->count();
-    }
-
-    public function getExtensions()
-    {
-        return $this->extensions;
-    }
-
-    public function __call($method, $args)
-    {
-        foreach ($this->extensions as $extension) {
-            if (method_exists($extension, $method)) {
-                return call_user_func_array(array($extension, $method), $args);
-            }
-        }
-        throw new Exception\BadMethodCallException('Method: ' . $method
-        . 'does not exist and could not be located on a registered Extension');
-    }
-
-    /**
-     * Return an Extension object with the matching name (postfixed with _Feed)
-     *
-     * @param string $name
-     * @return \Zend\Feed\Reader\Extension\AbstractFeed
-     */
-    public function getExtension($name)
-    {
-        if (array_key_exists($name . '\Feed', $this->extensions)) {
-            return $this->extensions[$name . '\Feed'];
-        }
-        return;
-    }
-
-    protected function loadExtensions()
-    {
-        $all     = Reader::getExtensions();
-        $manager = Reader::getExtensionManager();
-        $feed    = $all['feed'];
-        foreach ($feed as $extension) {
-            if (in_array($extension, $all['core'])) {
-                continue;
-            }
-            $plugin = $manager->get($extension);
-            $plugin->setDomDocument($this->getDomDocument());
-            $plugin->setType($this->data['type']);
-            $plugin->setXpath($this->xpath);
-            $this->extensions[$extension] = $plugin;
-        }
-    }
-
-    /**
-     * Read all entries to the internal entries array
-     *
-     */
-    abstract protected function indexEntries();
-
-    /**
-     * Register the default namespaces for the current feed format
-     *
-     */
-    abstract protected function registerNamespaces();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Collection.php b/core/vendor/zendframework/zend-feed/Reader/Collection.php
deleted file mode 100644
index f50c1bc2f2f934c0fe9291649efd4362ee99c184..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Collection.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-use ArrayObject;
-
-class Collection extends ArrayObject
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Collection/AbstractCollection.php b/core/vendor/zendframework/zend-feed/Reader/Collection/AbstractCollection.php
deleted file mode 100644
index 749ff5c809b88dd9098c074577e54fb71aed402b..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Collection/AbstractCollection.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Collection;
-
-use ArrayObject;
-
-abstract class AbstractCollection extends ArrayObject
-{
-    /**
-     * Return a simple array of the most relevant slice of
-     * the collection values. For example, feed categories contain
-     * the category name, domain/URI, and other data. This method would
-     * merely return the most useful data - i.e. the category names.
-     *
-     * @return array
-     */
-    abstract public function getValues();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Collection/Author.php b/core/vendor/zendframework/zend-feed/Reader/Collection/Author.php
deleted file mode 100644
index 82716db2a2b5fb8479154076257a30bd5df824cf..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Collection/Author.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Collection;
-
-class Author extends AbstractCollection
-{
-    /**
-     * Return a simple array of the most relevant slice of
-     * the author values, i.e. all author names.
-     *
-     * @return array
-     */
-    public function getValues()
-    {
-        $authors = array();
-        foreach ($this->getIterator() as $element) {
-            $authors[] = $element['name'];
-        }
-        return array_unique($authors);
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Collection/Category.php b/core/vendor/zendframework/zend-feed/Reader/Collection/Category.php
deleted file mode 100644
index 57d056040d12880fa780afeeaa1e31ec53070167..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Collection/Category.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Collection;
-
-class Category extends AbstractCollection
-{
-    /**
-     * Return a simple array of the most relevant slice of
-     * the collection values. For example, feed categories contain
-     * the category name, domain/URI, and other data. This method would
-     * merely return the most useful data - i.e. the category names.
-     *
-     * @return array
-     */
-    public function getValues()
-    {
-        $categories = array();
-        foreach ($this->getIterator() as $element) {
-            if (isset($element['label']) && !empty($element['label'])) {
-                $categories[] = $element['label'];
-            } else {
-                $categories[] = $element['term'];
-            }
-        }
-        return array_unique($categories);
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Collection/Collection.php b/core/vendor/zendframework/zend-feed/Reader/Collection/Collection.php
deleted file mode 100644
index cf791c2e58c586cf2484d09c99af1d7b7d400c5e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Collection/Collection.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Collection;
-
-use ArrayObject;
-
-class Collection extends ArrayObject
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Entry/AbstractEntry.php b/core/vendor/zendframework/zend-feed/Reader/Entry/AbstractEntry.php
deleted file mode 100644
index 7b006875b113c1cf9f1793277ff8b2e45c2c93f6..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Entry/AbstractEntry.php
+++ /dev/null
@@ -1,233 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Entry;
-
-use DOMDocument;
-use DOMElement;
-use DOMXPath;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Exception;
-
-abstract class AbstractEntry
-{
-    /**
-     * Feed entry data
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * DOM document object
-     *
-     * @var DOMDocument
-     */
-    protected $domDocument = null;
-
-    /**
-     * Entry instance
-     *
-     * @var DOMElement
-     */
-    protected $entry = null;
-
-    /**
-     * Pointer to the current entry
-     *
-     * @var int
-     */
-    protected $entryKey = 0;
-
-    /**
-     * XPath object
-     *
-     * @var DOMXPath
-     */
-    protected $xpath = null;
-
-    /**
-     * Registered extensions
-     *
-     * @var array
-     */
-    protected $extensions = array();
-
-    /**
-     * Constructor
-     *
-     * @param  DOMElement $entry
-     * @param  int $entryKey
-     * @param  string $type
-     */
-    public function __construct(DOMElement $entry, $entryKey, $type = null)
-    {
-        $this->entry       = $entry;
-        $this->entryKey    = $entryKey;
-        $this->domDocument = $entry->ownerDocument;
-        if ($type !== null) {
-            $this->data['type'] = $type;
-        } elseif ($this->domDocument !== null) {
-            $this->data['type'] = Reader\Reader::detectType($this->domDocument);
-        } else {
-            $this->data['type'] = Reader\Reader::TYPE_ANY;
-        }
-        $this->loadExtensions();
-    }
-
-    /**
-     * Get the DOM
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument()
-    {
-        return $this->domDocument;
-    }
-
-    /**
-     * Get the entry element
-     *
-     * @return DOMElement
-     */
-    public function getElement()
-    {
-        return $this->entry;
-    }
-
-    /**
-     * Get the Entry's encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        $assumed = $this->getDomDocument()->encoding;
-        if (empty($assumed)) {
-            $assumed = 'UTF-8';
-        }
-        return $assumed;
-    }
-
-    /**
-     * Get entry as xml
-     *
-     * @return string
-     */
-    public function saveXml()
-    {
-        $dom   = new DOMDocument('1.0', $this->getEncoding());
-        $deep  = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
-        $entry = $dom->importNode($this->getElement(), $deep);
-        $dom->appendChild($entry);
-        return $dom->saveXml();
-    }
-
-    /**
-     * Get the entry type
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        return $this->data['type'];
-    }
-
-    /**
-     * Get the XPath query object
-     *
-     * @return DOMXPath
-     */
-    public function getXpath()
-    {
-        if (!$this->xpath) {
-            $this->setXpath(new DOMXPath($this->getDomDocument()));
-        }
-        return $this->xpath;
-    }
-
-    /**
-     * Set the XPath query
-     *
-     * @param  DOMXPath $xpath
-     * @return AbstractEntry
-     */
-    public function setXpath(DOMXPath $xpath)
-    {
-        $this->xpath = $xpath;
-        return $this;
-    }
-
-    /**
-     * Get registered extensions
-     *
-     * @return array
-     */
-    public function getExtensions()
-    {
-        return $this->extensions;
-    }
-
-    /**
-     * Return an Extension object with the matching name (postfixed with _Entry)
-     *
-     * @param string $name
-     * @return Reader\Extension\AbstractEntry
-     */
-    public function getExtension($name)
-    {
-        if (array_key_exists($name . '\\Entry', $this->extensions)) {
-            return $this->extensions[$name . '\\Entry'];
-        }
-        return;
-    }
-
-    /**
-     * Method overloading: call given method on first extension implementing it
-     *
-     * @param  string $method
-     * @param  array $args
-     * @return mixed
-     * @throws Exception\RuntimeException if no extensions implements the method
-     */
-    public function __call($method, $args)
-    {
-        foreach ($this->extensions as $extension) {
-            if (method_exists($extension, $method)) {
-                return call_user_func_array(array($extension, $method), $args);
-            }
-        }
-        throw new Exception\RuntimeException(sprintf(
-            'Method: %s does not exist and could not be located on a registered Extension',
-            $method
-        ));
-    }
-
-    /**
-     * Load extensions from Zend\Feed\Reader\Reader
-     *
-     * @return void
-     */
-    protected function loadExtensions()
-    {
-        $all     = Reader\Reader::getExtensions();
-        $manager = Reader\Reader::getExtensionManager();
-        $feed    = $all['entry'];
-        foreach ($feed as $extension) {
-            if (in_array($extension, $all['core'])) {
-                continue;
-            }
-            $plugin = $manager->get($extension);
-            $plugin->setEntryElement($this->getElement());
-            $plugin->setEntryKey($this->entryKey);
-            $plugin->setType($this->data['type']);
-            $this->extensions[$extension] = $plugin;
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Entry/Atom.php b/core/vendor/zendframework/zend-feed/Reader/Entry/Atom.php
deleted file mode 100644
index 543f4566170981bac18c2c36dad6eed4ac12c680..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Entry/Atom.php
+++ /dev/null
@@ -1,370 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Entry;
-
-use DOMElement;
-use DOMXPath;
-use Zend\Feed\Reader;
-
-class Atom extends AbstractEntry implements EntryInterface
-{
-    /**
-     * XPath query
-     *
-     * @var string
-     */
-    protected $xpathQuery = '';
-
-    /**
-     * Constructor
-     *
-     * @param  DOMElement $entry
-     * @param  int $entryKey
-     * @param  string $type
-     */
-    public function __construct(DOMElement $entry, $entryKey, $type = null)
-    {
-        parent::__construct($entry, $entryKey, $type);
-
-        // Everyone by now should know XPath indices start from 1 not 0
-        $this->xpathQuery = '//atom:entry[' . ($this->entryKey + 1) . ']';
-
-        $manager    = Reader\Reader::getExtensionManager();
-        $extensions = array('Atom\Entry', 'Thread\Entry', 'DublinCore\Entry');
-
-        foreach ($extensions as $name) {
-            $extension = $manager->get($name);
-            $extension->setEntryElement($entry);
-            $extension->setEntryKey($entryKey);
-            $extension->setType($type);
-            $this->extensions[$name] = $extension;
-        }
-    }
-
-    /**
-     * Get the specified author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $people = $this->getExtension('Atom')->getAuthors();
-
-        $this->data['authors'] = $people;
-
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the entry content
-     *
-     * @return string
-     */
-    public function getContent()
-    {
-        if (array_key_exists('content', $this->data)) {
-            return $this->data['content'];
-        }
-
-        $content = $this->getExtension('Atom')->getContent();
-
-        $this->data['content'] = $content;
-
-        return $this->data['content'];
-    }
-
-    /**
-     * Get the entry creation date
-     *
-     * @return string
-     */
-    public function getDateCreated()
-    {
-        if (array_key_exists('datecreated', $this->data)) {
-            return $this->data['datecreated'];
-        }
-
-        $dateCreated = $this->getExtension('Atom')->getDateCreated();
-
-        $this->data['datecreated'] = $dateCreated;
-
-        return $this->data['datecreated'];
-    }
-
-    /**
-     * Get the entry modification date
-     *
-     * @return string
-     */
-    public function getDateModified()
-    {
-        if (array_key_exists('datemodified', $this->data)) {
-            return $this->data['datemodified'];
-        }
-
-        $dateModified = $this->getExtension('Atom')->getDateModified();
-
-        $this->data['datemodified'] = $dateModified;
-
-        return $this->data['datemodified'];
-    }
-
-    /**
-     * Get the entry description
-     *
-     * @return string
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        $description = $this->getExtension('Atom')->getDescription();
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the entry enclosure
-     *
-     * @return string
-     */
-    public function getEnclosure()
-    {
-        if (array_key_exists('enclosure', $this->data)) {
-            return $this->data['enclosure'];
-        }
-
-        $enclosure = $this->getExtension('Atom')->getEnclosure();
-
-        $this->data['enclosure'] = $enclosure;
-
-        return $this->data['enclosure'];
-    }
-
-    /**
-     * Get the entry ID
-     *
-     * @return string
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = $this->getExtension('Atom')->getId();
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get a specific link
-     *
-     * @param  int $index
-     * @return string
-     */
-    public function getLink($index = 0)
-    {
-        if (!array_key_exists('links', $this->data)) {
-            $this->getLinks();
-        }
-
-        if (isset($this->data['links'][$index])) {
-            return $this->data['links'][$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get all links
-     *
-     * @return array
-     */
-    public function getLinks()
-    {
-        if (array_key_exists('links', $this->data)) {
-            return $this->data['links'];
-        }
-
-        $links = $this->getExtension('Atom')->getLinks();
-
-        $this->data['links'] = $links;
-
-        return $this->data['links'];
-    }
-
-    /**
-     * Get a permalink to the entry
-     *
-     * @return string
-     */
-    public function getPermalink()
-    {
-        return $this->getLink(0);
-    }
-
-    /**
-     * Get the entry title
-     *
-     * @return string
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        $title = $this->getExtension('Atom')->getTitle();
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     * Get the number of comments/replies for current entry
-     *
-     * @return int
-     */
-    public function getCommentCount()
-    {
-        if (array_key_exists('commentcount', $this->data)) {
-            return $this->data['commentcount'];
-        }
-
-        $commentcount = $this->getExtension('Thread')->getCommentCount();
-
-        if (!$commentcount) {
-            $commentcount = $this->getExtension('Atom')->getCommentCount();
-        }
-
-        $this->data['commentcount'] = $commentcount;
-
-        return $this->data['commentcount'];
-    }
-
-    /**
-     * Returns a URI pointing to the HTML page where comments can be made on this entry
-     *
-     * @return string
-     */
-    public function getCommentLink()
-    {
-        if (array_key_exists('commentlink', $this->data)) {
-            return $this->data['commentlink'];
-        }
-
-        $commentlink = $this->getExtension('Atom')->getCommentLink();
-
-        $this->data['commentlink'] = $commentlink;
-
-        return $this->data['commentlink'];
-    }
-
-    /**
-     * Returns a URI pointing to a feed of all comments for this entry
-     *
-     * @return string
-     */
-    public function getCommentFeedLink()
-    {
-        if (array_key_exists('commentfeedlink', $this->data)) {
-            return $this->data['commentfeedlink'];
-        }
-
-        $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink();
-
-        $this->data['commentfeedlink'] = $commentfeedlink;
-
-        return $this->data['commentfeedlink'];
-    }
-
-    /**
-     * Get category data as a Reader\Reader_Collection_Category object
-     *
-     * @return Reader\Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        $categoryCollection = $this->getExtension('Atom')->getCategories();
-
-        if (count($categoryCollection) == 0) {
-            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
-        }
-
-        $this->data['categories'] = $categoryCollection;
-
-        return $this->data['categories'];
-    }
-
-    /**
-     * Get source feed metadata from the entry
-     *
-     * @return Reader\Feed\Atom\Source|null
-     */
-    public function getSource()
-    {
-        if (array_key_exists('source', $this->data)) {
-            return $this->data['source'];
-        }
-
-        $source = $this->getExtension('Atom')->getSource();
-
-        $this->data['source'] = $source;
-
-        return $this->data['source'];
-    }
-
-    /**
-     * Set the XPath query (incl. on all Extensions)
-     *
-     * @param DOMXPath $xpath
-     * @return void
-     */
-    public function setXpath(DOMXPath $xpath)
-    {
-        parent::setXpath($xpath);
-        foreach ($this->extensions as $extension) {
-            $extension->setXpath($this->xpath);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Entry/EntryInterface.php b/core/vendor/zendframework/zend-feed/Reader/Entry/EntryInterface.php
deleted file mode 100644
index c5e5fb2241b512a56c618f1342d7ad67486e6bfa..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Entry/EntryInterface.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Entry;
-
-use Zend\Feed\Reader\Collection\Category;
-
-interface EntryInterface
-{
-    /**
-     * Get the specified author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0);
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors();
-
-    /**
-     * Get the entry content
-     *
-     * @return string
-     */
-    public function getContent();
-
-    /**
-     * Get the entry creation date
-     *
-     * @return string
-     */
-    public function getDateCreated();
-
-    /**
-     * Get the entry modification date
-     *
-     * @return string
-     */
-    public function getDateModified();
-
-    /**
-     * Get the entry description
-     *
-     * @return string
-     */
-    public function getDescription();
-
-    /**
-     * Get the entry enclosure
-     *
-     * @return \stdClass
-     */
-    public function getEnclosure();
-
-    /**
-     * Get the entry ID
-     *
-     * @return string
-     */
-    public function getId();
-
-    /**
-     * Get a specific link
-     *
-     * @param  int $index
-     * @return string
-     */
-    public function getLink($index = 0);
-
-    /**
-     * Get all links
-     *
-     * @return array
-     */
-    public function getLinks();
-
-    /**
-     * Get a permalink to the entry
-     *
-     * @return string
-     */
-    public function getPermalink();
-
-    /**
-     * Get the entry title
-     *
-     * @return string
-     */
-    public function getTitle();
-
-    /**
-     * Get the number of comments/replies for current entry
-     *
-     * @return int
-     */
-    public function getCommentCount();
-
-    /**
-     * Returns a URI pointing to the HTML page where comments can be made on this entry
-     *
-     * @return string
-     */
-    public function getCommentLink();
-
-    /**
-     * Returns a URI pointing to a feed of all comments for this entry
-     *
-     * @return string
-     */
-    public function getCommentFeedLink();
-
-    /**
-     * Get all categories
-     *
-     * @return Category
-     */
-    public function getCategories();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Entry/Rss.php b/core/vendor/zendframework/zend-feed/Reader/Entry/Rss.php
deleted file mode 100644
index 409190450c1c3bf98ea25ccf48ecfc0139fa7bcb..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Entry/Rss.php
+++ /dev/null
@@ -1,595 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Entry;
-
-use DateTime;
-use DOMElement;
-use DOMXPath;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Exception;
-
-class Rss extends AbstractEntry implements EntryInterface
-{
-    /**
-     * XPath query for RDF
-     *
-     * @var string
-     */
-    protected $xpathQueryRdf = '';
-
-    /**
-     * XPath query for RSS
-     *
-     * @var string
-     */
-    protected $xpathQueryRss = '';
-
-    /**
-     * Constructor
-     *
-     * @param  DOMElement $entry
-     * @param  string $entryKey
-     * @param  string $type
-     */
-    public function __construct(DOMElement $entry, $entryKey, $type = null)
-    {
-        parent::__construct($entry, $entryKey, $type);
-        $this->xpathQueryRss = '//item[' . ($this->entryKey+1) . ']';
-        $this->xpathQueryRdf = '//rss:item[' . ($this->entryKey+1) . ']';
-
-        $manager    = Reader\Reader::getExtensionManager();
-        $extensions = array(
-            'DublinCore\Entry',
-            'Content\Entry',
-            'Atom\Entry',
-            'WellFormedWeb\Entry',
-            'Slash\Entry',
-            'Thread\Entry',
-        );
-        foreach ($extensions as $name) {
-            $extension = $manager->get($name);
-            $extension->setEntryElement($entry);
-            $extension->setEntryKey($entryKey);
-            $extension->setType($type);
-            $this->extensions[$name] = $extension;
-        }
-    }
-
-    /**
-     * Get an author entry
-     *
-     * @param int $index
-     * @return string
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $authors = array();
-        $authorsDc = $this->getExtension('DublinCore')->getAuthors();
-        if (!empty($authorsDc)) {
-            foreach ($authorsDc as $author) {
-                $authors[] = array(
-                    'name' => $author['name']
-                );
-            }
-        }
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-        && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $list = $this->xpath->query($this->xpathQueryRss . '//author');
-        } else {
-            $list = $this->xpath->query($this->xpathQueryRdf . '//rss:author');
-        }
-        if ($list->length) {
-            foreach ($list as $author) {
-                $string = trim($author->nodeValue);
-                $data = array();
-                // Pretty rough parsing - but it's a catchall
-                if (preg_match("/^.*@[^ ]*/", $string, $matches)) {
-                    $data['email'] = trim($matches[0]);
-                    if (preg_match("/\((.*)\)$/", $string, $matches)) {
-                        $data['name'] = $matches[1];
-                    }
-                    $authors[] = $data;
-                }
-            }
-        }
-
-        if (count($authors) == 0) {
-            $authors = $this->getExtension('Atom')->getAuthors();
-        } else {
-            $authors = new Reader\Collection\Author(
-                Reader\Reader::arrayUnique($authors)
-            );
-        }
-
-        if (count($authors) == 0) {
-            $authors = null;
-        }
-
-        $this->data['authors'] = $authors;
-
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the entry content
-     *
-     * @return string
-     */
-    public function getContent()
-    {
-        if (array_key_exists('content', $this->data)) {
-            return $this->data['content'];
-        }
-
-        $content = $this->getExtension('Content')->getContent();
-
-        if (!$content) {
-            $content = $this->getDescription();
-        }
-
-        if (empty($content)) {
-            $content = $this->getExtension('Atom')->getContent();
-        }
-
-        $this->data['content'] = $content;
-
-        return $this->data['content'];
-    }
-
-    /**
-     * Get the entry's date of creation
-     *
-     * @return string
-     */
-    public function getDateCreated()
-    {
-        return $this->getDateModified();
-    }
-
-    /**
-     * Get the entry's date of modification
-     *
-     * @throws Exception\RuntimeException
-     * @return string
-     */
-    public function getDateModified()
-    {
-        if (array_key_exists('datemodified', $this->data)) {
-            return $this->data['datemodified'];
-        }
-
-        $date = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-            && $this->getType() !== Reader\Reader::TYPE_RSS_090
-        ) {
-            $dateModified = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/pubDate)');
-            if ($dateModified) {
-                $dateModifiedParsed = strtotime($dateModified);
-                if ($dateModifiedParsed) {
-                    $date = new DateTime('@' . $dateModifiedParsed);
-                } else {
-                    $dateStandards = array(DateTime::RSS, DateTime::RFC822,
-                                           DateTime::RFC2822, null);
-                    foreach ($dateStandards as $standard) {
-                        try {
-                            $date = date_create_from_format($standard, $dateModified);
-                            break;
-                        } catch (\Exception $e) {
-                            if ($standard == null) {
-                                throw new Exception\RuntimeException(
-                                    'Could not load date due to unrecognised'
-                                    .' format (should follow RFC 822 or 2822):'
-                                    . $e->getMessage(),
-                                    0, $e
-                                );
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if (!$date) {
-            $date = $this->getExtension('DublinCore')->getDate();
-        }
-
-        if (!$date) {
-            $date = $this->getExtension('Atom')->getDateModified();
-        }
-
-        if (!$date) {
-            $date = null;
-        }
-
-        $this->data['datemodified'] = $date;
-
-        return $this->data['datemodified'];
-    }
-
-    /**
-     * Get the entry description
-     *
-     * @return string
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        $description = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-            && $this->getType() !== Reader\Reader::TYPE_RSS_090
-        ) {
-            $description = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/description)');
-        } else {
-            $description = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:description)');
-        }
-
-        if (!$description) {
-            $description = $this->getExtension('DublinCore')->getDescription();
-        }
-
-        if (empty($description)) {
-            $description = $this->getExtension('Atom')->getDescription();
-        }
-
-        if (!$description) {
-            $description = null;
-        }
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the entry enclosure
-     * @return string
-     */
-    public function getEnclosure()
-    {
-        if (array_key_exists('enclosure', $this->data)) {
-            return $this->data['enclosure'];
-        }
-
-        $enclosure = null;
-
-        if ($this->getType() == Reader\Reader::TYPE_RSS_20) {
-            $nodeList = $this->xpath->query($this->xpathQueryRss . '/enclosure');
-
-            if ($nodeList->length > 0) {
-                $enclosure = new \stdClass();
-                $enclosure->url    = $nodeList->item(0)->getAttribute('url');
-                $enclosure->length = $nodeList->item(0)->getAttribute('length');
-                $enclosure->type   = $nodeList->item(0)->getAttribute('type');
-            }
-        }
-
-        if (!$enclosure) {
-            $enclosure = $this->getExtension('Atom')->getEnclosure();
-        }
-
-        $this->data['enclosure'] = $enclosure;
-
-        return $this->data['enclosure'];
-    }
-
-    /**
-     * Get the entry ID
-     *
-     * @return string
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-            && $this->getType() !== Reader\Reader::TYPE_RSS_090
-        ) {
-            $id = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/guid)');
-        }
-
-        if (!$id) {
-            $id = $this->getExtension('DublinCore')->getId();
-        }
-
-        if (empty($id)) {
-            $id = $this->getExtension('Atom')->getId();
-        }
-
-        if (!$id) {
-            if ($this->getPermalink()) {
-                $id = $this->getPermalink();
-            } elseif ($this->getTitle()) {
-                $id = $this->getTitle();
-            } else {
-                $id = null;
-            }
-        }
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get a specific link
-     *
-     * @param  int $index
-     * @return string
-     */
-    public function getLink($index = 0)
-    {
-        if (!array_key_exists('links', $this->data)) {
-            $this->getLinks();
-        }
-
-        if (isset($this->data['links'][$index])) {
-            return $this->data['links'][$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get all links
-     *
-     * @return array
-     */
-    public function getLinks()
-    {
-        if (array_key_exists('links', $this->data)) {
-            return $this->data['links'];
-        }
-
-        $links = array();
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $list = $this->xpath->query($this->xpathQueryRss . '//link');
-        } else {
-            $list = $this->xpath->query($this->xpathQueryRdf . '//rss:link');
-        }
-
-        if (!$list->length) {
-            $links = $this->getExtension('Atom')->getLinks();
-        } else {
-            foreach ($list as $link) {
-                $links[] = $link->nodeValue;
-            }
-        }
-
-        $this->data['links'] = $links;
-
-        return $this->data['links'];
-    }
-
-    /**
-     * Get all categories
-     *
-     * @return Reader\Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $list = $this->xpath->query($this->xpathQueryRss . '//category');
-        } else {
-            $list = $this->xpath->query($this->xpathQueryRdf . '//rss:category');
-        }
-
-        if ($list->length) {
-            $categoryCollection = new Reader\Collection\Category;
-            foreach ($list as $category) {
-                $categoryCollection[] = array(
-                    'term' => $category->nodeValue,
-                    'scheme' => $category->getAttribute('domain'),
-                    'label' => $category->nodeValue,
-                );
-            }
-        } else {
-            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
-        }
-
-        if (count($categoryCollection) == 0) {
-            $categoryCollection = $this->getExtension('Atom')->getCategories();
-        }
-
-        $this->data['categories'] = $categoryCollection;
-
-        return $this->data['categories'];
-    }
-
-    /**
-     * Get a permalink to the entry
-     *
-     * @return string
-     */
-    public function getPermalink()
-    {
-        return $this->getLink(0);
-    }
-
-    /**
-     * Get the entry title
-     *
-     * @return string
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        $title = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-            && $this->getType() !== Reader\Reader::TYPE_RSS_090
-        ) {
-            $title = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/title)');
-        } else {
-            $title = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:title)');
-        }
-
-        if (!$title) {
-            $title = $this->getExtension('DublinCore')->getTitle();
-        }
-
-        if (!$title) {
-            $title = $this->getExtension('Atom')->getTitle();
-        }
-
-        if (!$title) {
-            $title = null;
-        }
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     * Get the number of comments/replies for current entry
-     *
-     * @return string|null
-     */
-    public function getCommentCount()
-    {
-        if (array_key_exists('commentcount', $this->data)) {
-            return $this->data['commentcount'];
-        }
-
-        $commentcount = $this->getExtension('Slash')->getCommentCount();
-
-        if (!$commentcount) {
-            $commentcount = $this->getExtension('Thread')->getCommentCount();
-        }
-
-        if (!$commentcount) {
-            $commentcount = $this->getExtension('Atom')->getCommentCount();
-        }
-
-        if (!$commentcount) {
-            $commentcount = null;
-        }
-
-        $this->data['commentcount'] = $commentcount;
-
-        return $this->data['commentcount'];
-    }
-
-    /**
-     * Returns a URI pointing to the HTML page where comments can be made on this entry
-     *
-     * @return string
-     */
-    public function getCommentLink()
-    {
-        if (array_key_exists('commentlink', $this->data)) {
-            return $this->data['commentlink'];
-        }
-
-        $commentlink = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-            && $this->getType() !== Reader\Reader::TYPE_RSS_090
-        ) {
-            $commentlink = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/comments)');
-        }
-
-        if (!$commentlink) {
-            $commentlink = $this->getExtension('Atom')->getCommentLink();
-        }
-
-        if (!$commentlink) {
-            $commentlink = null;
-        }
-
-        $this->data['commentlink'] = $commentlink;
-
-        return $this->data['commentlink'];
-    }
-
-    /**
-     * Returns a URI pointing to a feed of all comments for this entry
-     *
-     * @return string
-     */
-    public function getCommentFeedLink()
-    {
-        if (array_key_exists('commentfeedlink', $this->data)) {
-            return $this->data['commentfeedlink'];
-        }
-
-        $commentfeedlink = $this->getExtension('WellFormedWeb')->getCommentFeedLink();
-
-        if (!$commentfeedlink) {
-            $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rss');
-        }
-
-        if (!$commentfeedlink) {
-            $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rdf');
-        }
-
-        if (!$commentfeedlink) {
-            $commentfeedlink = null;
-        }
-
-        $this->data['commentfeedlink'] = $commentfeedlink;
-
-        return $this->data['commentfeedlink'];
-    }
-
-    /**
-     * Set the XPath query (incl. on all Extensions)
-     *
-     * @param DOMXPath $xpath
-     * @return void
-     */
-    public function setXpath(DOMXPath $xpath)
-    {
-        parent::setXpath($xpath);
-        foreach ($this->extensions as $extension) {
-            $extension->setXpath($this->xpath);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-feed/Reader/Exception/BadMethodCallException.php
deleted file mode 100644
index 008c57eccef18a9bc746094501fc176a109af15b..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Exception/BadMethodCallException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Exception;
-
-use Zend\Feed\Exception;
-
-class BadMethodCallException extends Exception\BadMethodCallException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/Reader/Exception/ExceptionInterface.php
deleted file mode 100644
index e5e664aff6a94f46cb5503d3fa215413d0793ea3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Exception;
-
-use Zend\Feed\Exception\ExceptionInterface as Exception;
-
-interface ExceptionInterface extends Exception
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/Reader/Exception/InvalidArgumentException.php
deleted file mode 100644
index 646b767b93a4bd24b3400376ef88386e75854858..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Exception;
-
-use Zend\Feed\Exception;
-
-class InvalidArgumentException extends Exception\InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/Reader/Exception/RuntimeException.php
deleted file mode 100644
index d876e7f00e942178ccedd682e5fb8886e0a4337d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Exception/RuntimeException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Exception;
-
-use Zend\Feed\Exception;
-
-class RuntimeException extends Exception\RuntimeException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/AbstractEntry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/AbstractEntry.php
deleted file mode 100644
index 72bd62ea3905a9d6cd88f0a74b71c88701db6eb1..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/AbstractEntry.php
+++ /dev/null
@@ -1,233 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension;
-
-use DOMDocument;
-use DOMElement;
-use DOMXPath;
-use Zend\Feed\Reader;
-
-abstract class AbstractEntry
-{
-    /**
-     * Feed entry data
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * DOM document object
-     *
-     * @var DOMDocument
-     */
-    protected $domDocument = null;
-
-    /**
-     * Entry instance
-     *
-     * @var DOMElement
-     */
-    protected $entry = null;
-
-    /**
-     * Pointer to the current entry
-     *
-     * @var int
-     */
-    protected $entryKey = 0;
-
-    /**
-     * XPath object
-     *
-     * @var DOMXPath
-     */
-    protected $xpath = null;
-
-    /**
-     * XPath query
-     *
-     * @var string
-     */
-    protected $xpathPrefix = '';
-
-    /**
-     * Set the entry DOMElement
-     *
-     * Has side effect of setting the DOMDocument for the entry.
-     *
-     * @param  DOMElement $entry
-     * @return AbstractEntry
-     */
-    public function setEntryElement(DOMElement $entry)
-    {
-        $this->entry = $entry;
-        $this->domDocument = $entry->ownerDocument;
-        return $this;
-    }
-
-    /**
-     * Get the entry DOMElement
-     *
-     * @return DOMElement
-     */
-    public function getEntryElement()
-    {
-        return $this->entry;
-    }
-
-    /**
-     * Set the entry key
-     *
-     * @param  string $entryKey
-     * @return AbstractEntry
-     */
-    public function setEntryKey($entryKey)
-    {
-        $this->entryKey = $entryKey;
-        return $this;
-    }
-
-    /**
-     * Get the DOM
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument()
-    {
-        return $this->domDocument;
-    }
-
-    /**
-     * Get the Entry's encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        $assumed = $this->getDomDocument()->encoding;
-        return $assumed;
-    }
-
-    /**
-     * Set the entry type
-     *
-     * Has side effect of setting xpath prefix
-     *
-     * @param  string $type
-     * @return AbstractEntry
-     */
-    public function setType($type)
-    {
-        if (null === $type) {
-            $this->data['type'] = null;
-            return $this;
-        }
-
-        $this->data['type'] = $type;
-        if ($type === Reader\Reader::TYPE_RSS_10
-            || $type === Reader\Reader::TYPE_RSS_090
-        ) {
-            $this->setXpathPrefix('//rss:item[' . ($this->entryKey + 1) . ']');
-            return $this;
-        }
-
-        if ($type === Reader\Reader::TYPE_ATOM_10
-            || $type === Reader\Reader::TYPE_ATOM_03
-        ) {
-            $this->setXpathPrefix('//atom:entry[' . ($this->entryKey + 1) . ']');
-            return $this;
-        }
-
-        $this->setXpathPrefix('//item[' . ($this->entryKey + 1) . ']');
-        return $this;
-    }
-
-    /**
-     * Get the entry type
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        $type = $this->data['type'];
-        if ($type === null) {
-            $type = Reader\Reader::detectType($this->getEntryElement(), true);
-            $this->setType($type);
-        }
-
-        return $type;
-    }
-
-    /**
-     * Set the XPath query
-     *
-     * @param  DOMXPath $xpath
-     * @return AbstractEntry
-     */
-    public function setXpath(DOMXPath $xpath)
-    {
-        $this->xpath = $xpath;
-        $this->registerNamespaces();
-        return $this;
-    }
-
-    /**
-     * Get the XPath query object
-     *
-     * @return DOMXPath
-     */
-    public function getXpath()
-    {
-        if (!$this->xpath) {
-            $this->setXpath(new DOMXPath($this->getDomDocument()));
-        }
-        return $this->xpath;
-    }
-
-    /**
-     * Serialize the entry to an array
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        return $this->data;
-    }
-
-    /**
-     * Get the XPath prefix
-     *
-     * @return string
-     */
-    public function getXpathPrefix()
-    {
-        return $this->xpathPrefix;
-    }
-
-    /**
-     * Set the XPath prefix
-     *
-     * @param  string $prefix
-     * @return AbstractEntry
-     */
-    public function setXpathPrefix($prefix)
-    {
-        $this->xpathPrefix = $prefix;
-        return $this;
-    }
-
-    /**
-     * Register XML namespaces
-     *
-     * @return void
-     */
-    abstract protected function registerNamespaces();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/AbstractFeed.php b/core/vendor/zendframework/zend-feed/Reader/Extension/AbstractFeed.php
deleted file mode 100644
index 94acea6e3584d330eea18b44d0d74b396937db4d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/AbstractFeed.php
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension;
-
-use DOMDocument;
-use DOMXPath;
-use Zend\Feed\Reader;
-
-abstract class AbstractFeed
-{
-    /**
-     * Parsed feed data
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Parsed feed data in the shape of a DOMDocument
-     *
-     * @var DOMDocument
-     */
-    protected $domDocument = null;
-
-    /**
-     * The base XPath query used to retrieve feed data
-     *
-     * @var DOMXPath
-     */
-    protected $xpath = null;
-
-    /**
-     * The XPath prefix
-     *
-     * @var string
-     */
-    protected $xpathPrefix = '';
-
-    /**
-     * Set the DOM document
-     *
-     * @param  DOMDocument $dom
-     * @return AbstractFeed
-     */
-    public function setDomDocument(DOMDocument $dom)
-    {
-        $this->domDocument = $dom;
-        return $this;
-    }
-
-    /**
-     * Get the DOM
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument()
-    {
-        return $this->domDocument;
-    }
-
-    /**
-     * Get the Feed's encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        $assumed = $this->getDomDocument()->encoding;
-        return $assumed;
-    }
-
-    /**
-     * Set the feed type
-     *
-     * @param  string $type
-     * @return AbstractFeed
-     */
-    public function setType($type)
-    {
-        $this->data['type'] = $type;
-        return $this;
-    }
-
-    /**
-     * Get the feed type
-     *
-     * If null, it will attempt to autodetect the type.
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        $type = $this->data['type'];
-        if (null === $type) {
-            $type = Reader\Reader::detectType($this->getDomDocument());
-            $this->setType($type);
-        }
-        return $type;
-    }
-
-    /**
-     * Return the feed as an array
-     *
-     * @return array
-     */
-    public function toArray() // untested
-    {
-        return $this->data;
-    }
-
-    /**
-     * Set the XPath query
-     *
-     * @param  DOMXPath $xpath
-     * @return AbstractEntry
-     */
-    public function setXpath(DOMXPath $xpath = null)
-    {
-        if (null === $xpath) {
-            $this->xpath = null;
-            return $this;
-        }
-
-        $this->xpath = $xpath;
-        $this->registerNamespaces();
-        return $this;
-    }
-
-    /**
-     * Get the DOMXPath object
-     *
-     * @return string
-     */
-    public function getXpath()
-    {
-        if (null === $this->xpath) {
-            $this->setXpath(new DOMXPath($this->getDomDocument()));
-        }
-
-        return $this->xpath;
-    }
-
-    /**
-     * Get the XPath prefix
-     *
-     * @return string
-     */
-    public function getXpathPrefix()
-    {
-        return $this->xpathPrefix;
-    }
-
-    /**
-     * Set the XPath prefix
-     *
-     * @param string $prefix
-     * @return void
-     */
-    public function setXpathPrefix($prefix)
-    {
-        $this->xpathPrefix = $prefix;
-    }
-
-    /**
-     * Register the default namespaces for the current feed format
-     */
-    abstract protected function registerNamespaces();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Atom/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Atom/Entry.php
deleted file mode 100644
index 06e94a2755541851b8842da12b1429896195b66e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Atom/Entry.php
+++ /dev/null
@@ -1,634 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Atom;
-
-use DateTime;
-use DOMDocument;
-use DOMElement;
-use stdClass;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Collection;
-use Zend\Feed\Reader\Extension;
-use Zend\Feed\Uri;
-
-class Entry extends Extension\AbstractEntry
-{
-    /**
-     * Get the specified author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return Collection\Author
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $authors = array();
-        $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:author');
-
-        if (!$list->length) {
-            /**
-             * TODO: Limit query to feed level els only!
-             */
-            $list = $this->getXpath()->query('//atom:author');
-        }
-
-        if ($list->length) {
-            foreach ($list as $author) {
-                $author = $this->getAuthorFromElement($author);
-                if (!empty($author)) {
-                    $authors[] = $author;
-                }
-            }
-        }
-
-        if (count($authors) == 0) {
-            $authors = new Collection\Author();
-        } else {
-            $authors = new Collection\Author(
-                Reader\Reader::arrayUnique($authors)
-            );
-        }
-
-        $this->data['authors'] = $authors;
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the entry content
-     *
-     * @return string
-     */
-    public function getContent()
-    {
-        if (array_key_exists('content', $this->data)) {
-            return $this->data['content'];
-        }
-
-        $content = null;
-
-        $el = $this->getXpath()->query($this->getXpathPrefix() . '/atom:content');
-        if ($el->length > 0) {
-            $el = $el->item(0);
-            $type = $el->getAttribute('type');
-            switch ($type) {
-                case '':
-                case 'text':
-                case 'text/plain':
-                case 'html':
-                case 'text/html':
-                    $content = $el->nodeValue;
-                    break;
-                case 'xhtml':
-                    $this->getXpath()->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml');
-                    $xhtml = $this->getXpath()->query(
-                        $this->getXpathPrefix() . '/atom:content/xhtml:div'
-                    )->item(0);
-                    $d = new DOMDocument('1.0', $this->getEncoding());
-                    $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
-                    $xhtmls = $d->importNode($xhtml, $deep);
-                    $d->appendChild($xhtmls);
-                    $content = $this->collectXhtml(
-                        $d->saveXML(),
-                        $d->lookupPrefix('http://www.w3.org/1999/xhtml')
-                    );
-                    break;
-            }
-        }
-
-        if (!$content) {
-            $content = $this->getDescription();
-        }
-
-        $this->data['content'] = trim($content);
-
-        return $this->data['content'];
-    }
-
-    /**
-     * Parse out XHTML to remove the namespacing
-     *
-     * @param $xhtml
-     * @param $prefix
-     * @return mixed
-     */
-    protected function collectXhtml($xhtml, $prefix)
-    {
-        if (!empty($prefix)) {
-            $prefix = $prefix . ':';
-        }
-        $matches = array(
-            "/<\?xml[^<]*>[^<]*<" . $prefix . "div[^<]*/",
-            "/<\/" . $prefix . "div>\s*$/"
-        );
-        $xhtml = preg_replace($matches, '', $xhtml);
-        if (!empty($prefix)) {
-            $xhtml = preg_replace("/(<[\/]?)" . $prefix . "([a-zA-Z]+)/", '$1$2', $xhtml);
-        }
-        return $xhtml;
-    }
-
-    /**
-     * Get the entry creation date
-     *
-     * @return string
-     */
-    public function getDateCreated()
-    {
-        if (array_key_exists('datecreated', $this->data)) {
-            return $this->data['datecreated'];
-        }
-
-        $date = null;
-
-        if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) {
-            $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)');
-        } else {
-            $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)');
-        }
-
-        if ($dateCreated) {
-            $date = new DateTime($dateCreated);
-        }
-
-        $this->data['datecreated'] = $date;
-
-        return $this->data['datecreated'];
-    }
-
-    /**
-     * Get the entry modification date
-     *
-     * @return string
-     */
-    public function getDateModified()
-    {
-        if (array_key_exists('datemodified', $this->data)) {
-            return $this->data['datemodified'];
-        }
-
-        $date = null;
-
-        if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) {
-            $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)');
-        } else {
-            $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)');
-        }
-
-        if ($dateModified) {
-            $date = new DateTime($dateModified);
-        }
-
-        $this->data['datemodified'] = $date;
-
-        return $this->data['datemodified'];
-    }
-
-    /**
-     * Get the entry description
-     *
-     * @return string
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:summary)');
-
-        if (!$description) {
-            $description = null;
-        }
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the entry enclosure
-     *
-     * @return string
-     */
-    public function getEnclosure()
-    {
-        if (array_key_exists('enclosure', $this->data)) {
-            return $this->data['enclosure'];
-        }
-
-        $enclosure = null;
-
-        $nodeList = $this->getXpath()->query($this->getXpathPrefix() . '/atom:link[@rel="enclosure"]');
-
-        if ($nodeList->length > 0) {
-            $enclosure         = new stdClass();
-            $enclosure->url    = $nodeList->item(0)->getAttribute('href');
-            $enclosure->length = $nodeList->item(0)->getAttribute('length');
-            $enclosure->type   = $nodeList->item(0)->getAttribute('type');
-        }
-
-        $this->data['enclosure'] = $enclosure;
-
-        return $this->data['enclosure'];
-    }
-
-    /**
-     * Get the entry ID
-     *
-     * @return string
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)');
-
-        if (!$id) {
-            if ($this->getPermalink()) {
-                $id = $this->getPermalink();
-            } elseif ($this->getTitle()) {
-                $id = $this->getTitle();
-            } else {
-                $id = null;
-            }
-        }
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get the base URI of the feed (if set).
-     *
-     * @return string|null
-     */
-    public function getBaseUrl()
-    {
-        if (array_key_exists('baseUrl', $this->data)) {
-            return $this->data['baseUrl'];
-        }
-
-        $baseUrl = $this->getXpath()->evaluate(
-            'string('
-            . $this->getXpathPrefix()
-            . '/@xml:base[1]'
-            . ')'
-        );
-
-        if (!$baseUrl) {
-            $baseUrl = $this->getXpath()->evaluate('string(//@xml:base[1])');
-        }
-
-        if (!$baseUrl) {
-            $baseUrl = null;
-        }
-
-        $this->data['baseUrl'] = $baseUrl;
-
-        return $this->data['baseUrl'];
-    }
-
-    /**
-     * Get a specific link
-     *
-     * @param  int $index
-     * @return string
-     */
-    public function getLink($index = 0)
-    {
-        if (!array_key_exists('links', $this->data)) {
-            $this->getLinks();
-        }
-
-        if (isset($this->data['links'][$index])) {
-            return $this->data['links'][$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get all links
-     *
-     * @return array
-     */
-    public function getLinks()
-    {
-        if (array_key_exists('links', $this->data)) {
-            return $this->data['links'];
-        }
-
-        $links = array();
-
-        $list = $this->getXpath()->query(
-            $this->getXpathPrefix() . '//atom:link[@rel="alternate"]/@href' . '|' .
-            $this->getXpathPrefix() . '//atom:link[not(@rel)]/@href'
-        );
-
-        if ($list->length) {
-            foreach ($list as $link) {
-                $links[] = $this->absolutiseUri($link->value);
-            }
-        }
-
-        $this->data['links'] = $links;
-
-        return $this->data['links'];
-    }
-
-    /**
-     * Get a permalink to the entry
-     *
-     * @return string
-     */
-    public function getPermalink()
-    {
-        return $this->getLink(0);
-    }
-
-    /**
-     * Get the entry title
-     *
-     * @return string
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)');
-
-        if (!$title) {
-            $title = null;
-        }
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     * Get the number of comments/replies for current entry
-     *
-     * @return int
-     */
-    public function getCommentCount()
-    {
-        if (array_key_exists('commentcount', $this->data)) {
-            return $this->data['commentcount'];
-        }
-
-        $count = null;
-
-        $this->getXpath()->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0');
-        $list = $this->getXpath()->query(
-            $this->getXpathPrefix() . '//atom:link[@rel="replies"]/@thread10:count'
-        );
-
-        if ($list->length) {
-            $count = $list->item(0)->value;
-        }
-
-        $this->data['commentcount'] = $count;
-
-        return $this->data['commentcount'];
-    }
-
-    /**
-     * Returns a URI pointing to the HTML page where comments can be made on this entry
-     *
-     * @return string
-     */
-    public function getCommentLink()
-    {
-        if (array_key_exists('commentlink', $this->data)) {
-            return $this->data['commentlink'];
-        }
-
-        $link = null;
-
-        $list = $this->getXpath()->query(
-            $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="text/html"]/@href'
-        );
-
-        if ($list->length) {
-            $link = $list->item(0)->value;
-            $link = $this->absolutiseUri($link);
-        }
-
-        $this->data['commentlink'] = $link;
-
-        return $this->data['commentlink'];
-    }
-
-    /**
-     * Returns a URI pointing to a feed of all comments for this entry
-     *
-     * @param string $type
-     * @return string
-     */
-    public function getCommentFeedLink($type = 'atom')
-    {
-        if (array_key_exists('commentfeedlink', $this->data)) {
-            return $this->data['commentfeedlink'];
-        }
-
-        $link = null;
-
-        $list = $this->getXpath()->query(
-            $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="application/' . $type.'+xml"]/@href'
-        );
-
-        if ($list->length) {
-            $link = $list->item(0)->value;
-            $link = $this->absolutiseUri($link);
-        }
-
-        $this->data['commentfeedlink'] = $link;
-
-        return $this->data['commentfeedlink'];
-    }
-
-    /**
-     * Get all categories
-     *
-     * @return Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        if ($this->getAtomType() == Reader\Reader::TYPE_ATOM_10) {
-            $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:category');
-        } else {
-            /**
-             * Since Atom 0.3 did not support categories, it would have used the
-             * Dublin Core extension. However there is a small possibility Atom 0.3
-             * may have been retrofitted to use Atom 1.0 instead.
-             */
-            $this->getXpath()->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10);
-            $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom10:category');
-        }
-
-        if ($list->length) {
-            $categoryCollection = new Collection\Category;
-            foreach ($list as $category) {
-                $categoryCollection[] = array(
-                    'term' => $category->getAttribute('term'),
-                    'scheme' => $category->getAttribute('scheme'),
-                    'label' => $category->getAttribute('label')
-                );
-            }
-        } else {
-            return new Collection\Category;
-        }
-
-        $this->data['categories'] = $categoryCollection;
-
-        return $this->data['categories'];
-    }
-
-    /**
-     * Get source feed metadata from the entry
-     *
-     * @return Reader\Feed\Atom\Source|null
-     */
-    public function getSource()
-    {
-        if (array_key_exists('source', $this->data)) {
-            return $this->data['source'];
-        }
-
-        $source = null;
-        // TODO: Investigate why _getAtomType() fails here. Is it even needed?
-        if ($this->getType() == Reader\Reader::TYPE_ATOM_10) {
-            $list = $this->getXpath()->query($this->getXpathPrefix() . '/atom:source[1]');
-            if ($list->length) {
-                $element = $list->item(0);
-                $source = new Reader\Feed\Atom\Source($element, $this->getXpathPrefix());
-            }
-        }
-
-        $this->data['source'] = $source;
-        return $this->data['source'];
-    }
-
-    /**
-     *  Attempt to absolutise the URI, i.e. if a relative URI apply the
-     *  xml:base value as a prefix to turn into an absolute URI.
-     *
-     * @param $link
-     * @return string
-     */
-    protected function absolutiseUri($link)
-    {
-        if (!Uri::factory($link)->isAbsolute()) {
-            if ($this->getBaseUrl() !== null) {
-                $link = $this->getBaseUrl() . $link;
-                if (!Uri::factory($link)->isValid()) {
-                    $link = null;
-                }
-            }
-        }
-        return $link;
-    }
-
-    /**
-     * Get an author entry
-     *
-     * @param DOMElement $element
-     * @return string
-     */
-    protected function getAuthorFromElement(DOMElement $element)
-    {
-        $author = array();
-
-        $emailNode = $element->getElementsByTagName('email');
-        $nameNode  = $element->getElementsByTagName('name');
-        $uriNode   = $element->getElementsByTagName('uri');
-
-        if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) {
-            $author['email'] = $emailNode->item(0)->nodeValue;
-        }
-
-        if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) {
-            $author['name'] = $nameNode->item(0)->nodeValue;
-        }
-
-        if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) {
-            $author['uri'] = $uriNode->item(0)->nodeValue;
-        }
-
-        if (empty($author)) {
-            return;
-        }
-        return $author;
-    }
-
-    /**
-     * Register the default namespaces for the current feed format
-     */
-    protected function registerNamespaces()
-    {
-        switch ($this->getAtomType()) {
-            case Reader\Reader::TYPE_ATOM_03:
-                $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03);
-                break;
-            default:
-                $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10);
-                break;
-        }
-    }
-
-    /**
-     * Detect the presence of any Atom namespaces in use
-     *
-     * @return string
-     */
-    protected function getAtomType()
-    {
-        $dom = $this->getDomDocument();
-        $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03);
-        $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10);
-        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03)
-        || !empty($prefixAtom03)) {
-            return Reader\Reader::TYPE_ATOM_03;
-        }
-        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10)
-        || !empty($prefixAtom10)) {
-            return Reader\Reader::TYPE_ATOM_10;
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Atom/Feed.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Atom/Feed.php
deleted file mode 100644
index 19dbf5a56eebc381f9d2afd2882f1a690ab5eab7..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Atom/Feed.php
+++ /dev/null
@@ -1,536 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Atom;
-
-use DateTime;
-use DOMElement;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Collection;
-use Zend\Feed\Reader\Extension;
-use Zend\Feed\Uri;
-
-class Feed extends Extension\AbstractFeed
-{
-    /**
-     * Get a single author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return Collection\Author
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $list = $this->xpath->query('//atom:author');
-
-        $authors = array();
-
-        if ($list->length) {
-            foreach ($list as $author) {
-                $author = $this->getAuthorFromElement($author);
-                if (!empty($author)) {
-                    $authors[] = $author;
-                }
-            }
-        }
-
-        if (count($authors) == 0) {
-            $authors = new Collection\Author();
-        } else {
-            $authors = new Collection\Author(
-                Reader\Reader::arrayUnique($authors)
-            );
-        }
-
-        $this->data['authors'] = $authors;
-
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the copyright entry
-     *
-     * @return string|null
-     */
-    public function getCopyright()
-    {
-        if (array_key_exists('copyright', $this->data)) {
-            return $this->data['copyright'];
-        }
-
-        $copyright = null;
-
-        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
-            $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:copyright)');
-        } else {
-            $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:rights)');
-        }
-
-        if (!$copyright) {
-            $copyright = null;
-        }
-
-        $this->data['copyright'] = $copyright;
-
-        return $this->data['copyright'];
-    }
-
-    /**
-     * Get the feed creation date
-     *
-     * @return DateTime|null
-     */
-    public function getDateCreated()
-    {
-        if (array_key_exists('datecreated', $this->data)) {
-            return $this->data['datecreated'];
-        }
-
-        $date = null;
-
-        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
-            $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)');
-        } else {
-            $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)');
-        }
-
-        if ($dateCreated) {
-            $date = new DateTime($dateCreated);
-        }
-
-        $this->data['datecreated'] = $date;
-
-        return $this->data['datecreated'];
-    }
-
-    /**
-     * Get the feed modification date
-     *
-     * @return DateTime|null
-     */
-    public function getDateModified()
-    {
-        if (array_key_exists('datemodified', $this->data)) {
-            return $this->data['datemodified'];
-        }
-
-        $date = null;
-
-        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
-            $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)');
-        } else {
-            $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)');
-        }
-
-        if ($dateModified) {
-            $date = new DateTime($dateModified);
-        }
-
-        $this->data['datemodified'] = $date;
-
-        return $this->data['datemodified'];
-    }
-
-    /**
-     * Get the feed description
-     *
-     * @return string|null
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        $description = null;
-
-        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
-            $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:tagline)');
-        } else {
-            $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:subtitle)');
-        }
-
-        if (!$description) {
-            $description = null;
-        }
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the feed generator entry
-     *
-     * @return string|null
-     */
-    public function getGenerator()
-    {
-        if (array_key_exists('generator', $this->data)) {
-            return $this->data['generator'];
-        }
-        // TODO: Add uri support
-        $generator = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:generator)');
-
-        if (!$generator) {
-            $generator = null;
-        }
-
-        $this->data['generator'] = $generator;
-
-        return $this->data['generator'];
-    }
-
-    /**
-     * Get the feed ID
-     *
-     * @return string|null
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)');
-
-        if (!$id) {
-            if ($this->getLink()) {
-                $id = $this->getLink();
-            } elseif ($this->getTitle()) {
-                $id = $this->getTitle();
-            } else {
-                $id = null;
-            }
-        }
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get the feed language
-     *
-     * @return string|null
-     */
-    public function getLanguage()
-    {
-        if (array_key_exists('language', $this->data)) {
-            return $this->data['language'];
-        }
-
-        $language = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:lang)');
-
-        if (!$language) {
-            $language = $this->xpath->evaluate('string(//@xml:lang[1])');
-        }
-
-        if (!$language) {
-            $language = null;
-        }
-
-        $this->data['language'] = $language;
-
-        return $this->data['language'];
-    }
-
-    /**
-     * Get the feed image
-     *
-     * @return array|null
-     */
-    public function getImage()
-    {
-        if (array_key_exists('image', $this->data)) {
-            return $this->data['image'];
-        }
-
-        $imageUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:logo)');
-
-        if (!$imageUrl) {
-            $image = null;
-        } else {
-            $image = array('uri' => $imageUrl);
-        }
-
-        $this->data['image'] = $image;
-
-        return $this->data['image'];
-    }
-
-    /**
-     * Get the base URI of the feed (if set).
-     *
-     * @return string|null
-     */
-    public function getBaseUrl()
-    {
-        if (array_key_exists('baseUrl', $this->data)) {
-            return $this->data['baseUrl'];
-        }
-
-        $baseUrl = $this->xpath->evaluate('string(//@xml:base[1])');
-
-        if (!$baseUrl) {
-            $baseUrl = null;
-        }
-        $this->data['baseUrl'] = $baseUrl;
-
-        return $this->data['baseUrl'];
-    }
-
-    /**
-     * Get a link to the source website
-     *
-     * @return string|null
-     */
-    public function getLink()
-    {
-        if (array_key_exists('link', $this->data)) {
-            return $this->data['link'];
-        }
-
-        $link = null;
-
-        $list = $this->xpath->query(
-            $this->getXpathPrefix() . '/atom:link[@rel="alternate"]/@href' . '|' .
-            $this->getXpathPrefix() . '/atom:link[not(@rel)]/@href'
-        );
-
-        if ($list->length) {
-            $link = $list->item(0)->nodeValue;
-            $link = $this->absolutiseUri($link);
-        }
-
-        $this->data['link'] = $link;
-
-        return $this->data['link'];
-    }
-
-    /**
-     * Get a link to the feed's XML Url
-     *
-     * @return string|null
-     */
-    public function getFeedLink()
-    {
-        if (array_key_exists('feedlink', $this->data)) {
-            return $this->data['feedlink'];
-        }
-
-        $link = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:link[@rel="self"]/@href)');
-
-        $link = $this->absolutiseUri($link);
-
-        $this->data['feedlink'] = $link;
-
-        return $this->data['feedlink'];
-    }
-
-    /**
-     * Get an array of any supported Pusubhubbub endpoints
-     *
-     * @return array|null
-     */
-    public function getHubs()
-    {
-        if (array_key_exists('hubs', $this->data)) {
-            return $this->data['hubs'];
-        }
-        $hubs = array();
-
-        $list = $this->xpath->query($this->getXpathPrefix()
-            . '//atom:link[@rel="hub"]/@href');
-
-        if ($list->length) {
-            foreach ($list as $uri) {
-                $hubs[] = $this->absolutiseUri($uri->nodeValue);
-            }
-        } else {
-            $hubs = null;
-        }
-
-        $this->data['hubs'] = $hubs;
-
-        return $this->data['hubs'];
-    }
-
-    /**
-     * Get the feed title
-     *
-     * @return string|null
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        $title = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)');
-
-        if (!$title) {
-            $title = null;
-        }
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     * Get all categories
-     *
-     * @return Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        if ($this->getType() == Reader\Reader::TYPE_ATOM_10) {
-            $list = $this->xpath->query($this->getXpathPrefix() . '/atom:category');
-        } else {
-            /**
-             * Since Atom 0.3 did not support categories, it would have used the
-             * Dublin Core extension. However there is a small possibility Atom 0.3
-             * may have been retrofittied to use Atom 1.0 instead.
-             */
-            $this->xpath->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10);
-            $list = $this->xpath->query($this->getXpathPrefix() . '/atom10:category');
-        }
-
-        if ($list->length) {
-            $categoryCollection = new Collection\Category;
-            foreach ($list as $category) {
-                $categoryCollection[] = array(
-                    'term' => $category->getAttribute('term'),
-                    'scheme' => $category->getAttribute('scheme'),
-                    'label' => $category->getAttribute('label')
-                );
-            }
-        } else {
-            return new Collection\Category;
-        }
-
-        $this->data['categories'] = $categoryCollection;
-
-        return $this->data['categories'];
-    }
-
-    /**
-     * Get an author entry in RSS format
-     *
-     * @param  DOMElement $element
-     * @return string
-     */
-    protected function getAuthorFromElement(DOMElement $element)
-    {
-        $author = array();
-
-        $emailNode = $element->getElementsByTagName('email');
-        $nameNode  = $element->getElementsByTagName('name');
-        $uriNode   = $element->getElementsByTagName('uri');
-
-        if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) {
-            $author['email'] = $emailNode->item(0)->nodeValue;
-        }
-
-        if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) {
-            $author['name'] = $nameNode->item(0)->nodeValue;
-        }
-
-        if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) {
-            $author['uri'] = $uriNode->item(0)->nodeValue;
-        }
-
-        if (empty($author)) {
-            return;
-        }
-        return $author;
-    }
-
-    /**
-     *  Attempt to absolutise the URI, i.e. if a relative URI apply the
-     *  xml:base value as a prefix to turn into an absolute URI.
-     */
-    protected function absolutiseUri($link)
-    {
-        if (!Uri::factory($link)->isAbsolute()) {
-            if ($this->getBaseUrl() !== null) {
-                $link = $this->getBaseUrl() . $link;
-                if (!Uri::factory($link)->isValid()) {
-                    $link = null;
-                }
-            }
-        }
-        return $link;
-    }
-
-    /**
-     * Register the default namespaces for the current feed format
-     */
-    protected function registerNamespaces()
-    {
-        if ($this->getType() == Reader\Reader::TYPE_ATOM_10
-            || $this->getType() == Reader\Reader::TYPE_ATOM_03
-        ) {
-            return; // pre-registered at Feed level
-        }
-        $atomDetected = $this->getAtomType();
-        switch ($atomDetected) {
-            case Reader\Reader::TYPE_ATOM_03:
-                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03);
-                break;
-            default:
-                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10);
-                break;
-        }
-    }
-
-    /**
-     * Detect the presence of any Atom namespaces in use
-     */
-    protected function getAtomType()
-    {
-        $dom = $this->getDomDocument();
-        $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03);
-        $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10);
-        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10)
-            || !empty($prefixAtom10)
-        ) {
-            return Reader\Reader::TYPE_ATOM_10;
-        }
-        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03)
-            || !empty($prefixAtom03)
-        ) {
-            return Reader\Reader::TYPE_ATOM_03;
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Content/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Content/Entry.php
deleted file mode 100644
index 539848f25825efab60c4e18da6ecc0437e000958..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Content/Entry.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Content;
-
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Extension;
-
-class Entry extends Extension\AbstractEntry
-{
-    public function getContent()
-    {
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-            && $this->getType() !== Reader\Reader::TYPE_RSS_090
-        ) {
-            $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)');
-        } else {
-            $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)');
-        }
-        return $content;
-    }
-
-    /**
-     * Register RSS Content Module namespace
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('content', 'http://purl.org/rss/1.0/modules/content/');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/CreativeCommons/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/CreativeCommons/Entry.php
deleted file mode 100644
index 9194682f889210a2f787aac0174ebc6a009898e3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/CreativeCommons/Entry.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\CreativeCommons;
-
-use Zend\Feed\Reader\Extension;
-
-class Entry extends Extension\AbstractEntry
-{
-    /**
-     * Get the entry license
-     *
-     * @param int $index
-     * @return string|null
-     */
-    public function getLicense($index = 0)
-    {
-        $licenses = $this->getLicenses();
-
-        if (isset($licenses[$index])) {
-            return $licenses[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get the entry licenses
-     *
-     * @return array
-     */
-    public function getLicenses()
-    {
-        $name = 'licenses';
-        if (array_key_exists($name, $this->data)) {
-            return $this->data[$name];
-        }
-
-        $licenses = array();
-        $list = $this->xpath->evaluate($this->getXpathPrefix() . '//cc:license');
-
-        if ($list->length) {
-            foreach ($list as $license) {
-                $licenses[] = $license->nodeValue;
-            }
-
-            $licenses = array_unique($licenses);
-        } else {
-            $cc = new Feed();
-            $licenses = $cc->getLicenses();
-        }
-
-        $this->data[$name] = $licenses;
-
-        return $this->data[$name];
-    }
-
-    /**
-     * Register Creative Commons namespaces
-     *
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/CreativeCommons/Feed.php b/core/vendor/zendframework/zend-feed/Reader/Extension/CreativeCommons/Feed.php
deleted file mode 100644
index c833bbda9c5d10d3fd51a49d39a0a8fd47964557..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/CreativeCommons/Feed.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\CreativeCommons;
-
-use Zend\Feed\Reader\Extension;
-
-class Feed extends Extension\AbstractFeed
-{
-    /**
-     * Get the entry license
-     *
-     * @param int $index
-     * @return string|null
-     */
-    public function getLicense($index = 0)
-    {
-        $licenses = $this->getLicenses();
-
-        if (isset($licenses[$index])) {
-            return $licenses[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get the entry licenses
-     *
-     * @return array
-     */
-    public function getLicenses()
-    {
-        $name = 'licenses';
-        if (array_key_exists($name, $this->data)) {
-            return $this->data[$name];
-        }
-
-        $licenses = array();
-        $list = $this->xpath->evaluate('channel/cc:license');
-
-        if ($list->length) {
-            foreach ($list as $license) {
-                $licenses[] = $license->nodeValue;
-            }
-
-            $licenses = array_unique($licenses);
-        }
-
-        $this->data[$name] = $licenses;
-
-        return $this->data[$name];
-    }
-
-    /**
-     * Register Creative Commons namespaces
-     *
-     * @return void
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/DublinCore/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/DublinCore/Entry.php
deleted file mode 100644
index e23de8101ca8c7dbe00c842c2692799e3a3f0301..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/DublinCore/Entry.php
+++ /dev/null
@@ -1,234 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\DublinCore;
-
-use DateTime;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Collection;
-use Zend\Feed\Reader\Extension;
-
-class Entry extends Extension\AbstractEntry
-{
-    /**
-     * Get an author entry
-     *
-     * @param int $index
-     * @return string
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $authors = array();
-        $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:creator');
-
-        if (!$list->length) {
-            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:creator');
-        }
-        if (!$list->length) {
-            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:publisher');
-
-            if (!$list->length) {
-                $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:publisher');
-            }
-        }
-
-        if ($list->length) {
-            foreach ($list as $author) {
-                $authors[] = array(
-                    'name' => $author->nodeValue
-                );
-            }
-            $authors = new Collection\Author(
-                Reader\Reader::arrayUnique($authors)
-            );
-        } else {
-            $authors = null;
-        }
-
-        $this->data['authors'] = $authors;
-
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get categories (subjects under DC)
-     *
-     * @return Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject');
-
-        if (!$list->length) {
-            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject');
-        }
-
-        if ($list->length) {
-            $categoryCollection = new Collection\Category;
-            foreach ($list as $category) {
-                $categoryCollection[] = array(
-                    'term' => $category->nodeValue,
-                    'scheme' => null,
-                    'label' => $category->nodeValue,
-                );
-            }
-        } else {
-            $categoryCollection = new Collection\Category;
-        }
-
-        $this->data['categories'] = $categoryCollection;
-        return $this->data['categories'];
-    }
-
-    /**
-     * Get the entry content
-     *
-     * @return string
-     */
-    public function getContent()
-    {
-        return $this->getDescription();
-    }
-
-    /**
-     * Get the entry description
-     *
-     * @return string
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)');
-
-        if (!$description) {
-            $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)');
-        }
-
-        if (!$description) {
-            $description = null;
-        }
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the entry ID
-     *
-     * @return string
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)');
-
-        if (!$id) {
-            $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)');
-        }
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get the entry title
-     *
-     * @return string
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)');
-
-        if (!$title) {
-            $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)');
-        }
-
-        if (!$title) {
-            $title = null;
-        }
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     *
-     *
-     * @return DateTime|null
-     */
-    public function getDate()
-    {
-        if (array_key_exists('date', $this->data)) {
-            return $this->data['date'];
-        }
-
-        $d    = null;
-        $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)');
-
-        if (!$date) {
-            $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)');
-        }
-
-        if ($date) {
-            $d = new DateTime($date);
-        }
-
-        $this->data['date'] = $d;
-
-        return $this->data['date'];
-    }
-
-    /**
-     * Register DC namespaces
-     *
-     * @return void
-     */
-    protected function registerNamespaces()
-    {
-        $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/');
-        $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/DublinCore/Feed.php b/core/vendor/zendframework/zend-feed/Reader/Extension/DublinCore/Feed.php
deleted file mode 100644
index 6b54b081f2da1c08fb223a7d3b5a12c16be9d554..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/DublinCore/Feed.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\DublinCore;
-
-use DateTime;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Collection;
-use Zend\Feed\Reader\Extension;
-
-class Feed extends Extension\AbstractFeed
-{
-    /**
-     * Get a single author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $authors = array();
-        $list    = $this->getXpath()->query('//dc11:creator');
-
-        if (!$list->length) {
-            $list = $this->getXpath()->query('//dc10:creator');
-        }
-        if (!$list->length) {
-            $list = $this->getXpath()->query('//dc11:publisher');
-
-            if (!$list->length) {
-                $list = $this->getXpath()->query('//dc10:publisher');
-            }
-        }
-
-        if ($list->length) {
-            foreach ($list as $author) {
-                $authors[] = array(
-                    'name' => $author->nodeValue
-                );
-            }
-            $authors = new Collection\Author(
-                Reader\Reader::arrayUnique($authors)
-            );
-        } else {
-            $authors = null;
-        }
-
-        $this->data['authors'] = $authors;
-
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the copyright entry
-     *
-     * @return string|null
-     */
-    public function getCopyright()
-    {
-        if (array_key_exists('copyright', $this->data)) {
-            return $this->data['copyright'];
-        }
-
-        $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:rights)');
-
-        if (!$copyright) {
-            $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:rights)');
-        }
-
-        if (!$copyright) {
-            $copyright = null;
-        }
-
-        $this->data['copyright'] = $copyright;
-
-        return $this->data['copyright'];
-    }
-
-    /**
-     * Get the feed description
-     *
-     * @return string|null
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)');
-
-        if (!$description) {
-            $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)');
-        }
-
-        if (!$description) {
-            $description = null;
-        }
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the feed ID
-     *
-     * @return string|null
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)');
-
-        if (!$id) {
-            $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)');
-        }
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get the feed language
-     *
-     * @return string|null
-     */
-    public function getLanguage()
-    {
-        if (array_key_exists('language', $this->data)) {
-            return $this->data['language'];
-        }
-
-        $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:language)');
-
-        if (!$language) {
-            $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:language)');
-        }
-
-        if (!$language) {
-            $language = null;
-        }
-
-        $this->data['language'] = $language;
-
-        return $this->data['language'];
-    }
-
-    /**
-     * Get the feed title
-     *
-     * @return string|null
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)');
-
-        if (!$title) {
-            $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)');
-        }
-
-        if (!$title) {
-            $title = null;
-        }
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     *
-     *
-     * @return DateTime|null
-     */
-    public function getDate()
-    {
-        if (array_key_exists('date', $this->data)) {
-            return $this->data['date'];
-        }
-
-        $d = null;
-        $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)');
-
-        if (!$date) {
-            $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)');
-        }
-
-        if ($date) {
-            $d = new DateTime($date);
-        }
-
-        $this->data['date'] = $d;
-
-        return $this->data['date'];
-    }
-
-    /**
-     * Get categories (subjects under DC)
-     *
-     * @return Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject');
-
-        if (!$list->length) {
-            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject');
-        }
-
-        if ($list->length) {
-            $categoryCollection = new Collection\Category;
-            foreach ($list as $category) {
-                $categoryCollection[] = array(
-                    'term' => $category->nodeValue,
-                    'scheme' => null,
-                    'label' => $category->nodeValue,
-                );
-            }
-        } else {
-            $categoryCollection = new Collection\Category;
-        }
-
-        $this->data['categories'] = $categoryCollection;
-        return $this->data['categories'];
-    }
-
-    /**
-     * Register the default namespaces for the current feed format
-     *
-     * @return void
-     */
-    protected function registerNamespaces()
-    {
-        $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/');
-        $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Podcast/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Podcast/Entry.php
deleted file mode 100644
index 5aec2fd9ccc10ba0a890d4bb0eb0542d6881cffe..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Podcast/Entry.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Podcast;
-
-use Zend\Feed\Reader\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractEntry
-{
-    /**
-     * Get the entry author
-     *
-     * @return string
-     */
-    public function getCastAuthor()
-    {
-        if (isset($this->data['author'])) {
-            return $this->data['author'];
-        }
-
-        $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)');
-
-        if (!$author) {
-            $author = null;
-        }
-
-        $this->data['author'] = $author;
-
-        return $this->data['author'];
-    }
-
-    /**
-     * Get the entry block
-     *
-     * @return string
-     */
-    public function getBlock()
-    {
-        if (isset($this->data['block'])) {
-            return $this->data['block'];
-        }
-
-        $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)');
-
-        if (!$block) {
-            $block = null;
-        }
-
-        $this->data['block'] = $block;
-
-        return $this->data['block'];
-    }
-
-    /**
-     * Get the entry duration
-     *
-     * @return string
-     */
-    public function getDuration()
-    {
-        if (isset($this->data['duration'])) {
-            return $this->data['duration'];
-        }
-
-        $duration = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:duration)');
-
-        if (!$duration) {
-            $duration = null;
-        }
-
-        $this->data['duration'] = $duration;
-
-        return $this->data['duration'];
-    }
-
-    /**
-     * Get the entry explicit
-     *
-     * @return string
-     */
-    public function getExplicit()
-    {
-        if (isset($this->data['explicit'])) {
-            return $this->data['explicit'];
-        }
-
-        $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)');
-
-        if (!$explicit) {
-            $explicit = null;
-        }
-
-        $this->data['explicit'] = $explicit;
-
-        return $this->data['explicit'];
-    }
-
-    /**
-     * Get the entry keywords
-     *
-     * @return string
-     */
-    public function getKeywords()
-    {
-        if (isset($this->data['keywords'])) {
-            return $this->data['keywords'];
-        }
-
-        $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)');
-
-        if (!$keywords) {
-            $keywords = null;
-        }
-
-        $this->data['keywords'] = $keywords;
-
-        return $this->data['keywords'];
-    }
-
-    /**
-     * Get the entry subtitle
-     *
-     * @return string
-     */
-    public function getSubtitle()
-    {
-        if (isset($this->data['subtitle'])) {
-            return $this->data['subtitle'];
-        }
-
-        $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)');
-
-        if (!$subtitle) {
-            $subtitle = null;
-        }
-
-        $this->data['subtitle'] = $subtitle;
-
-        return $this->data['subtitle'];
-    }
-
-    /**
-     * Get the entry summary
-     *
-     * @return string
-     */
-    public function getSummary()
-    {
-        if (isset($this->data['summary'])) {
-            return $this->data['summary'];
-        }
-
-        $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)');
-
-        if (!$summary) {
-            $summary = null;
-        }
-
-        $this->data['summary'] = $summary;
-
-        return $this->data['summary'];
-    }
-
-    /**
-     * Register iTunes namespace
-     *
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Podcast/Feed.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Podcast/Feed.php
deleted file mode 100644
index 9fb80de540c7d1c2b76296aa563e9298b16f47a4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Podcast/Feed.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Podcast;
-
-use DOMText;
-use Zend\Feed\Reader\Extension;
-
-/**
-*/
-class Feed extends Extension\AbstractFeed
-{
-    /**
-     * Get the entry author
-     *
-     * @return string
-     */
-    public function getCastAuthor()
-    {
-        if (isset($this->data['author'])) {
-            return $this->data['author'];
-        }
-
-        $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)');
-
-        if (!$author) {
-            $author = null;
-        }
-
-        $this->data['author'] = $author;
-
-        return $this->data['author'];
-    }
-
-    /**
-     * Get the entry block
-     *
-     * @return string
-     */
-    public function getBlock()
-    {
-        if (isset($this->data['block'])) {
-            return $this->data['block'];
-        }
-
-        $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)');
-
-        if (!$block) {
-            $block = null;
-        }
-
-        $this->data['block'] = $block;
-
-        return $this->data['block'];
-    }
-
-    /**
-     * Get the entry category
-     *
-     * @return array|null
-     */
-    public function getItunesCategories()
-    {
-        if (isset($this->data['categories'])) {
-            return $this->data['categories'];
-        }
-
-        $categoryList = $this->xpath->query($this->getXpathPrefix() . '/itunes:category');
-
-        $categories = array();
-
-        if ($categoryList->length > 0) {
-            foreach ($categoryList as $node) {
-                $children = null;
-
-                if ($node->childNodes->length > 0) {
-                    $children = array();
-
-                    foreach ($node->childNodes as $childNode) {
-                        if (!($childNode instanceof DOMText)) {
-                            $children[$childNode->getAttribute('text')] = null;
-                        }
-                    }
-                }
-
-                $categories[$node->getAttribute('text')] = $children;
-            }
-        }
-
-        if (!$categories) {
-            $categories = null;
-        }
-
-        $this->data['categories'] = $categories;
-
-        return $this->data['categories'];
-    }
-
-    /**
-     * Get the entry explicit
-     *
-     * @return string
-     */
-    public function getExplicit()
-    {
-        if (isset($this->data['explicit'])) {
-            return $this->data['explicit'];
-        }
-
-        $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)');
-
-        if (!$explicit) {
-            $explicit = null;
-        }
-
-        $this->data['explicit'] = $explicit;
-
-        return $this->data['explicit'];
-    }
-
-    /**
-     * Get the entry image
-     *
-     * @return string
-     */
-    public function getItunesImage()
-    {
-        if (isset($this->data['image'])) {
-            return $this->data['image'];
-        }
-
-        $image = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:image/@href)');
-
-        if (!$image) {
-            $image = null;
-        }
-
-        $this->data['image'] = $image;
-
-        return $this->data['image'];
-    }
-
-    /**
-     * Get the entry keywords
-     *
-     * @return string
-     */
-    public function getKeywords()
-    {
-        if (isset($this->data['keywords'])) {
-            return $this->data['keywords'];
-        }
-
-        $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)');
-
-        if (!$keywords) {
-            $keywords = null;
-        }
-
-        $this->data['keywords'] = $keywords;
-
-        return $this->data['keywords'];
-    }
-
-    /**
-     * Get the entry's new feed url
-     *
-     * @return string
-     */
-    public function getNewFeedUrl()
-    {
-        if (isset($this->data['new-feed-url'])) {
-            return $this->data['new-feed-url'];
-        }
-
-        $newFeedUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:new-feed-url)');
-
-        if (!$newFeedUrl) {
-            $newFeedUrl = null;
-        }
-
-        $this->data['new-feed-url'] = $newFeedUrl;
-
-        return $this->data['new-feed-url'];
-    }
-
-    /**
-     * Get the entry owner
-     *
-     * @return string
-     */
-    public function getOwner()
-    {
-        if (isset($this->data['owner'])) {
-            return $this->data['owner'];
-        }
-
-        $owner = null;
-
-        $email = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:email)');
-        $name  = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:name)');
-
-        if (!empty($email)) {
-            $owner = $email . (empty($name) ? '' : ' (' . $name . ')');
-        } elseif (!empty($name)) {
-            $owner = $name;
-        }
-
-        if (!$owner) {
-            $owner = null;
-        }
-
-        $this->data['owner'] = $owner;
-
-        return $this->data['owner'];
-    }
-
-    /**
-     * Get the entry subtitle
-     *
-     * @return string
-     */
-    public function getSubtitle()
-    {
-        if (isset($this->data['subtitle'])) {
-            return $this->data['subtitle'];
-        }
-
-        $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)');
-
-        if (!$subtitle) {
-            $subtitle = null;
-        }
-
-        $this->data['subtitle'] = $subtitle;
-
-        return $this->data['subtitle'];
-    }
-
-    /**
-     * Get the entry summary
-     *
-     * @return string
-     */
-    public function getSummary()
-    {
-        if (isset($this->data['summary'])) {
-            return $this->data['summary'];
-        }
-
-        $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)');
-
-        if (!$summary) {
-            $summary = null;
-        }
-
-        $this->data['summary'] = $summary;
-
-        return $this->data['summary'];
-    }
-
-    /**
-     * Register iTunes namespace
-     *
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Slash/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Slash/Entry.php
deleted file mode 100644
index 786d894ea4a1db78e370fb4f58f6df34fb1aa2fc..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Slash/Entry.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Slash;
-
-use Zend\Feed\Reader\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractEntry
-{
-    /**
-     * Get the entry section
-     *
-     * @return string|null
-     */
-    public function getSection()
-    {
-        return $this->getData('section');
-    }
-
-    /**
-     * Get the entry department
-     *
-     * @return string|null
-     */
-    public function getDepartment()
-    {
-        return $this->getData('department');
-    }
-
-    /**
-     * Get the entry hit_parade
-     *
-     * @return array
-     */
-    public function getHitParade()
-    {
-        $name = 'hit_parade';
-
-        if (isset($this->data[$name])) {
-            return $this->data[$name];
-        }
-
-        $stringParade = $this->getData($name);
-        $hitParade    = array();
-
-        if (!empty($stringParade)) {
-            $stringParade = explode(',', $stringParade);
-
-            foreach ($stringParade as $hit) {
-                $hitParade[] = $hit + 0; //cast to integer
-            }
-        }
-
-        $this->data[$name] = $hitParade;
-        return $hitParade;
-    }
-
-    /**
-     * Get the entry comments
-     *
-     * @return int
-     */
-    public function getCommentCount()
-    {
-        $name = 'comments';
-
-        if (isset($this->data[$name])) {
-            return $this->data[$name];
-        }
-
-        $comments = $this->getData($name, 'string');
-
-        if (!$comments) {
-            $this->data[$name] = null;
-            return $this->data[$name];
-        }
-
-        return $comments;
-    }
-
-    /**
-     * Get the entry data specified by name
-     * @param string $name
-     * @param string $type
-     *
-     * @return mixed|null
-     */
-    protected function getData($name, $type = 'string')
-    {
-        if (array_key_exists($name, $this->data)) {
-            return $this->data[$name];
-        }
-
-        $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/slash10:' . $name . ')');
-
-        if (!$data) {
-            $data = null;
-        }
-
-        $this->data[$name] = $data;
-
-        return $data;
-    }
-
-    /**
-     * Register Slash namespaces
-     *
-     * @return void
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('slash10', 'http://purl.org/rss/1.0/modules/slash/');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Syndication/Feed.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Syndication/Feed.php
deleted file mode 100644
index 09f12ddea251b1600d5c6775d698b0cd1926a52d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Syndication/Feed.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Syndication;
-
-use DateTime;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Extension;
-
-class Feed extends Extension\AbstractFeed
-{
-    /**
-     * Get update period
-     *
-     * @return string
-     * @throws Reader\Exception\InvalidArgumentException
-     */
-    public function getUpdatePeriod()
-    {
-        $name = 'updatePeriod';
-        $period = $this->getData($name);
-
-        if ($period === null) {
-            $this->data[$name] = 'daily';
-            return 'daily'; //Default specified by spec
-        }
-
-        switch ($period) {
-            case 'hourly':
-            case 'daily':
-            case 'weekly':
-            case 'yearly':
-                return $period;
-            default:
-                throw new Reader\Exception\InvalidArgumentException("Feed specified invalid update period: '$period'."
-                    .  " Must be one of hourly, daily, weekly or yearly"
-                );
-        }
-    }
-
-    /**
-     * Get update frequency
-     *
-     * @return int
-     */
-    public function getUpdateFrequency()
-    {
-        $name = 'updateFrequency';
-        $freq = $this->getData($name, 'number');
-
-        if (!$freq || $freq < 1) {
-            $this->data[$name] = 1;
-            return 1;
-        }
-
-        return $freq;
-    }
-
-    /**
-     * Get update frequency as ticks
-     *
-     * @return int
-     */
-    public function getUpdateFrequencyAsTicks()
-    {
-        $name = 'updateFrequency';
-        $freq = $this->getData($name, 'number');
-
-        if (!$freq || $freq < 1) {
-            $this->data[$name] = 1;
-            $freq = 1;
-        }
-
-        $period = $this->getUpdatePeriod();
-        $ticks = 1;
-
-        switch ($period) {
-            case 'yearly':
-                $ticks *= 52; //TODO: fix generalisation, how?
-                // no break
-            case 'weekly':
-                $ticks *= 7;
-                // no break
-            case 'daily':
-                $ticks *= 24;
-                // no break
-            case 'hourly':
-                $ticks *= 3600;
-                break;
-            default: //Never arrive here, exception thrown in getPeriod()
-                break;
-        }
-
-        return $ticks / $freq;
-    }
-
-    /**
-     * Get update base
-     *
-     * @return DateTime|null
-     */
-    public function getUpdateBase()
-    {
-        $updateBase = $this->getData('updateBase');
-        $date = null;
-        if ($updateBase) {
-            $date = DateTime::createFromFormat(DateTime::W3C, $updateBase);
-        }
-        return $date;
-    }
-
-    /**
-     * Get the entry data specified by name
-     *
-     * @param string $name
-     * @param string $type
-     * @return mixed|null
-     */
-    private function getData($name, $type = 'string')
-    {
-        if (array_key_exists($name, $this->data)) {
-            return $this->data[$name];
-        }
-
-        $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/syn10:' . $name . ')');
-
-        if (!$data) {
-            $data = null;
-        }
-
-        $this->data[$name] = $data;
-
-        return $data;
-    }
-
-    /**
-     * Register Syndication namespaces
-     *
-     * @return void
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('syn10', 'http://purl.org/rss/1.0/modules/syndication/');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/Thread/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/Thread/Entry.php
deleted file mode 100644
index e5de5bb1cd94a0ea0dd3b3a7ab634c9dbc01b644..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/Thread/Entry.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\Thread;
-
-use Zend\Feed\Reader\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractEntry
-{
-    /**
-     * Get the "in-reply-to" value
-     *
-     * @return string
-     */
-    public function getInReplyTo()
-    {
-        // TODO: to be implemented
-    }
-
-    // TODO: Implement "replies" and "updated" constructs from standard
-
-    /**
-     * Get the total number of threaded responses (i.e comments)
-     *
-     * @return int|null
-     */
-    public function getCommentCount()
-    {
-        return $this->getData('total');
-    }
-
-    /**
-     * Get the entry data specified by name
-     *
-     * @param  string $name
-     * @return mixed|null
-     */
-    protected function getData($name)
-    {
-        if (array_key_exists($name, $this->data)) {
-            return $this->data[$name];
-        }
-
-        $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/thread10:' . $name . ')');
-
-        if (!$data) {
-            $data = null;
-        }
-
-        $this->data[$name] = $data;
-
-        return $data;
-    }
-
-    /**
-     * Register Atom Thread Extension 1.0 namespace
-     *
-     * @return void
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Extension/WellFormedWeb/Entry.php b/core/vendor/zendframework/zend-feed/Reader/Extension/WellFormedWeb/Entry.php
deleted file mode 100644
index 42fafb4aa4a429330035f979b84fcb08929a6cf0..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Extension/WellFormedWeb/Entry.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Extension\WellFormedWeb;
-
-use Zend\Feed\Reader\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractEntry
-{
-    /**
-     * Get the entry comment Uri
-     *
-     * @return string|null
-     */
-    public function getCommentFeedLink()
-    {
-        $name = 'commentRss';
-        if (array_key_exists($name, $this->data)) {
-            return $this->data[$name];
-        }
-
-        $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/wfw:' . $name . ')');
-
-        if (!$data) {
-            $data = null;
-        }
-
-        $this->data[$name] = $data;
-
-        return $data;
-    }
-
-    /**
-     * Register Slash namespaces
-     *
-     * @return void
-     */
-    protected function registerNamespaces()
-    {
-        $this->xpath->registerNamespace('wfw', 'http://wellformedweb.org/CommentAPI/');
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/ExtensionManager.php b/core/vendor/zendframework/zend-feed/Reader/ExtensionManager.php
deleted file mode 100644
index bf694c8e273051639094e1ef0960a0cfe8a0f558..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/ExtensionManager.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-/**
- * Default implementation of ExtensionManagerInterface
- *
- * Decorator of ExtensionPluginManager.
- */
-class ExtensionManager implements ExtensionManagerInterface
-{
-    protected $pluginManager;
-
-    /**
-     * Constructor
-     *
-     * Seeds the extension manager with a plugin manager; if none provided,
-     * creates an instance.
-     *
-     * @param  null|ExtensionPluginManager $pluginManager
-     */
-    public function __construct(ExtensionPluginManager $pluginManager = null)
-    {
-        if (null === $pluginManager) {
-            $pluginManager = new ExtensionPluginManager();
-        }
-        $this->pluginManager = $pluginManager;
-    }
-
-    /**
-     * Method overloading
-     *
-     * Proxy to composed ExtensionPluginManager instance.
-     *
-     * @param  string $method
-     * @param  array $args
-     * @return mixed
-     * @throws Exception\BadMethodCallException
-     */
-    public function __call($method, $args)
-    {
-        if (!method_exists($this->pluginManager, $method)) {
-            throw new Exception\BadMethodCallException(sprintf(
-                'Method by name of %s does not exist in %s',
-                $method,
-                __CLASS__
-            ));
-        }
-        return call_user_func_array(array($this->pluginManager, $method), $args);
-    }
-
-    /**
-     * Get the named extension
-     *
-     * @param  string $name
-     * @return Extension\AbstractEntry|Extension\AbstractFeed
-     */
-    public function get($name)
-    {
-        return $this->pluginManager->get($name);
-    }
-
-    /**
-     * Do we have the named extension?
-     *
-     * @param  string $name
-     * @return bool
-     */
-    public function has($name)
-    {
-        return $this->pluginManager->has($name);
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/ExtensionManagerInterface.php b/core/vendor/zendframework/zend-feed/Reader/ExtensionManagerInterface.php
deleted file mode 100644
index 70ec37d4c07024ef716a971de0ba43400359917c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/ExtensionManagerInterface.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-interface ExtensionManagerInterface
-{
-    /**
-     * Do we have the extension?
-     *
-     * @param  string $extension
-     * @return bool
-     */
-    public function has($extension);
-
-    /**
-     * Retrieve the extension
-     *
-     * @param  string $extension
-     * @return mixed
-     */
-    public function get($extension);
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/ExtensionPluginManager.php b/core/vendor/zendframework/zend-feed/Reader/ExtensionPluginManager.php
deleted file mode 100644
index 3e3308c29acbec52731bdd2d1d9973ed1da7752f..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/ExtensionPluginManager.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-use Zend\ServiceManager\AbstractPluginManager;
-
-/**
- * Plugin manager implementation for feed reader extensions based on the
- * AbstractPluginManager.
- *
- * Validation checks that we have an Extension\AbstractEntry or
- * Extension\AbstractFeed.
- */
-class ExtensionPluginManager extends AbstractPluginManager
-{
-    /**
-     * Default set of extension classes
-     *
-     * @var array
-     */
-    protected $invokableClasses = array(
-        'atomentry'            => 'Zend\Feed\Reader\Extension\Atom\Entry',
-        'atomfeed'             => 'Zend\Feed\Reader\Extension\Atom\Feed',
-        'contententry'         => 'Zend\Feed\Reader\Extension\Content\Entry',
-        'creativecommonsentry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry',
-        'creativecommonsfeed'  => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed',
-        'dublincoreentry'      => 'Zend\Feed\Reader\Extension\DublinCore\Entry',
-        'dublincorefeed'       => 'Zend\Feed\Reader\Extension\DublinCore\Feed',
-        'podcastentry'         => 'Zend\Feed\Reader\Extension\Podcast\Entry',
-        'podcastfeed'          => 'Zend\Feed\Reader\Extension\Podcast\Feed',
-        'slashentry'           => 'Zend\Feed\Reader\Extension\Slash\Entry',
-        'syndicationfeed'      => 'Zend\Feed\Reader\Extension\Syndication\Feed',
-        'threadentry'          => 'Zend\Feed\Reader\Extension\Thread\Entry',
-        'wellformedwebentry'   => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry',
-    );
-
-    /**
-     * Do not share instances
-     *
-     * @var bool
-     */
-    protected $shareByDefault = false;
-
-    /**
-     * Validate the plugin
-     *
-     * Checks that the extension loaded is of a valid type.
-     *
-     * @param  mixed $plugin
-     * @return void
-     * @throws Exception\InvalidArgumentException if invalid
-     */
-    public function validatePlugin($plugin)
-    {
-        if ($plugin instanceof Extension\AbstractEntry
-            || $plugin instanceof Extension\AbstractFeed
-        ) {
-            // we're okay
-            return;
-        }
-
-        throw new Exception\InvalidArgumentException(sprintf(
-            'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
-            . 'or %s\Extension\AbstractEntry',
-            (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
-            __NAMESPACE__,
-            __NAMESPACE__
-        ));
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Feed/AbstractFeed.php b/core/vendor/zendframework/zend-feed/Reader/Feed/AbstractFeed.php
deleted file mode 100644
index 9814967a62e955765f6ec1990d89811fe12bd625..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Feed/AbstractFeed.php
+++ /dev/null
@@ -1,307 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Feed;
-
-use DOMDocument;
-use DOMElement;
-use DOMXPath;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Exception;
-
-/**
-*/
-abstract class AbstractFeed implements FeedInterface
-{
-    /**
-     * Parsed feed data
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Parsed feed data in the shape of a DOMDocument
-     *
-     * @var DOMDocument
-     */
-    protected $domDocument = null;
-
-    /**
-     * An array of parsed feed entries
-     *
-     * @var array
-     */
-    protected $entries = array();
-
-    /**
-     * A pointer for the iterator to keep track of the entries array
-     *
-     * @var int
-     */
-    protected $entriesKey = 0;
-
-    /**
-     * The base XPath query used to retrieve feed data
-     *
-     * @var DOMXPath
-     */
-    protected $xpath = null;
-
-    /**
-     * Array of loaded extensions
-     *
-     * @var array
-     */
-    protected $extensions = array();
-
-    /**
-     * Original Source URI (set if imported from a URI)
-     *
-     * @var string
-     */
-    protected $originalSourceUri = null;
-
-    /**
-     * Constructor
-     *
-     * @param DOMDocument $domDocument The DOM object for the feed's XML
-     * @param string $type Feed type
-     */
-    public function __construct(DOMDocument $domDocument, $type = null)
-    {
-        $this->domDocument = $domDocument;
-        $this->xpath = new DOMXPath($this->domDocument);
-
-        if ($type !== null) {
-            $this->data['type'] = $type;
-        } else {
-            $this->data['type'] = Reader\Reader::detectType($this->domDocument);
-        }
-        $this->registerNamespaces();
-        $this->indexEntries();
-        $this->loadExtensions();
-    }
-
-    /**
-     * Set an original source URI for the feed being parsed. This value
-     * is returned from getFeedLink() method if the feed does not carry
-     * a self-referencing URI.
-     *
-     * @param string $uri
-     */
-    public function setOriginalSourceUri($uri)
-    {
-        $this->originalSourceUri = $uri;
-    }
-
-    /**
-     * Get an original source URI for the feed being parsed. Returns null if
-     * unset or the feed was not imported from a URI.
-     *
-     * @return string|null
-     */
-    public function getOriginalSourceUri()
-    {
-        return $this->originalSourceUri;
-    }
-
-    /**
-     * Get the number of feed entries.
-     * Required by the Iterator interface.
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->entries);
-    }
-
-    /**
-     * Return the current entry
-     *
-     * @return \Zend\Feed\Reader\Entry\EntryInterface
-     */
-    public function current()
-    {
-        if (substr($this->getType(), 0, 3) == 'rss') {
-            $reader = new Reader\Entry\Rss($this->entries[$this->key()], $this->key(), $this->getType());
-        } else {
-            $reader = new Reader\Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType());
-        }
-
-        $reader->setXpath($this->xpath);
-
-        return $reader;
-    }
-
-    /**
-     * Get the DOM
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument()
-    {
-        return $this->domDocument;
-    }
-
-    /**
-     * Get the Feed's encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        $assumed = $this->getDomDocument()->encoding;
-        if (empty($assumed)) {
-            $assumed = 'UTF-8';
-        }
-        return $assumed;
-    }
-
-    /**
-     * Get feed as xml
-     *
-     * @return string
-     */
-    public function saveXml()
-    {
-        return $this->getDomDocument()->saveXml();
-    }
-
-    /**
-     * Get the DOMElement representing the items/feed element
-     *
-     * @return DOMElement
-     */
-    public function getElement()
-    {
-        return $this->getDomDocument()->documentElement;
-    }
-
-    /**
-     * Get the DOMXPath object for this feed
-     *
-     * @return DOMXPath
-     */
-    public function getXpath()
-    {
-        return $this->xpath;
-    }
-
-    /**
-     * Get the feed type
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        return $this->data['type'];
-    }
-
-    /**
-     * Return the current feed key
-     *
-     * @return int
-     */
-    public function key()
-    {
-        return $this->entriesKey;
-    }
-
-    /**
-     * Move the feed pointer forward
-     *
-     */
-    public function next()
-    {
-        ++$this->entriesKey;
-    }
-
-    /**
-     * Reset the pointer in the feed object
-     *
-     */
-    public function rewind()
-    {
-        $this->entriesKey = 0;
-    }
-
-    /**
-     * Check to see if the iterator is still valid
-     *
-     * @return bool
-     */
-    public function valid()
-    {
-        return 0 <= $this->entriesKey && $this->entriesKey < $this->count();
-    }
-
-    public function getExtensions()
-    {
-        return $this->extensions;
-    }
-
-    public function __call($method, $args)
-    {
-        foreach ($this->extensions as $extension) {
-            if (method_exists($extension, $method)) {
-                return call_user_func_array(array($extension, $method), $args);
-            }
-        }
-        throw new Exception\BadMethodCallException('Method: ' . $method
-        . 'does not exist and could not be located on a registered Extension');
-    }
-
-    /**
-     * Return an Extension object with the matching name (postfixed with _Feed)
-     *
-     * @param string $name
-     * @return \Zend\Feed\Reader\Extension\AbstractFeed
-     */
-    public function getExtension($name)
-    {
-        if (array_key_exists($name . '\\Feed', $this->extensions)) {
-            return $this->extensions[$name . '\\Feed'];
-        }
-        return;
-    }
-
-    protected function loadExtensions()
-    {
-        $all     = Reader\Reader::getExtensions();
-        $manager = Reader\Reader::getExtensionManager();
-        $feed    = $all['feed'];
-        foreach ($feed as $extension) {
-            if (in_array($extension, $all['core'])) {
-                continue;
-            }
-            if (!$manager->has($extension)) {
-                throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; cannot find class', $extension));
-            }
-            $plugin = $manager->get($extension);
-            $plugin->setDomDocument($this->getDomDocument());
-            $plugin->setType($this->data['type']);
-            $plugin->setXpath($this->xpath);
-            $this->extensions[$extension] = $plugin;
-        }
-    }
-
-    /**
-     * Read all entries to the internal entries array
-     *
-     */
-    abstract protected function indexEntries();
-
-    /**
-     * Register the default namespaces for the current feed format
-     *
-     */
-    abstract protected function registerNamespaces();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Feed/Atom.php b/core/vendor/zendframework/zend-feed/Reader/Feed/Atom.php
deleted file mode 100644
index 37064701c7cc18f9fe71e514607cec8c7dd9eb33..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Feed/Atom.php
+++ /dev/null
@@ -1,408 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Feed;
-
-use DOMDocument;
-use Zend\Feed\Reader;
-
-/**
-*/
-class Atom extends AbstractFeed
-{
-    /**
-     * Constructor
-     *
-     * @param  DOMDocument $dom
-     * @param  string $type
-     */
-    public function __construct(DOMDocument $dom, $type = null)
-    {
-        parent::__construct($dom, $type);
-        $manager = Reader\Reader::getExtensionManager();
-
-        $atomFeed = $manager->get('Atom\Feed');
-        $atomFeed->setDomDocument($dom);
-        $atomFeed->setType($this->data['type']);
-        $atomFeed->setXpath($this->xpath);
-        $this->extensions['Atom\\Feed'] = $atomFeed;
-
-        $atomFeed = $manager->get('DublinCore\Feed');
-        $atomFeed->setDomDocument($dom);
-        $atomFeed->setType($this->data['type']);
-        $atomFeed->setXpath($this->xpath);
-        $this->extensions['DublinCore\\Feed'] = $atomFeed;
-
-        foreach ($this->extensions as $extension) {
-            $extension->setXpathPrefix('/atom:feed');
-        }
-    }
-
-    /**
-     * Get a single author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $authors = $this->getExtension('Atom')->getAuthors();
-
-        $this->data['authors'] = $authors;
-
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the copyright entry
-     *
-     * @return string|null
-     */
-    public function getCopyright()
-    {
-        if (array_key_exists('copyright', $this->data)) {
-            return $this->data['copyright'];
-        }
-
-        $copyright = $this->getExtension('Atom')->getCopyright();
-
-        if (!$copyright) {
-            $copyright = null;
-        }
-
-        $this->data['copyright'] = $copyright;
-
-        return $this->data['copyright'];
-    }
-
-    /**
-     * Get the feed creation date
-     *
-     * @return string|null
-     */
-    public function getDateCreated()
-    {
-        if (array_key_exists('datecreated', $this->data)) {
-            return $this->data['datecreated'];
-        }
-
-        $dateCreated = $this->getExtension('Atom')->getDateCreated();
-
-        if (!$dateCreated) {
-            $dateCreated = null;
-        }
-
-        $this->data['datecreated'] = $dateCreated;
-
-        return $this->data['datecreated'];
-    }
-
-    /**
-     * Get the feed modification date
-     *
-     * @return string|null
-     */
-    public function getDateModified()
-    {
-        if (array_key_exists('datemodified', $this->data)) {
-            return $this->data['datemodified'];
-        }
-
-        $dateModified = $this->getExtension('Atom')->getDateModified();
-
-        if (!$dateModified) {
-            $dateModified = null;
-        }
-
-        $this->data['datemodified'] = $dateModified;
-
-        return $this->data['datemodified'];
-    }
-
-    /**
-     * Get the feed lastBuild date. This is not implemented in Atom.
-     *
-     * @return string|null
-     */
-    public function getLastBuildDate()
-    {
-        return;
-    }
-
-    /**
-     * Get the feed description
-     *
-     * @return string|null
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        $description = $this->getExtension('Atom')->getDescription();
-
-        if (!$description) {
-            $description = null;
-        }
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the feed generator entry
-     *
-     * @return string|null
-     */
-    public function getGenerator()
-    {
-        if (array_key_exists('generator', $this->data)) {
-            return $this->data['generator'];
-        }
-
-        $generator = $this->getExtension('Atom')->getGenerator();
-
-        $this->data['generator'] = $generator;
-
-        return $this->data['generator'];
-    }
-
-    /**
-     * Get the feed ID
-     *
-     * @return string|null
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = $this->getExtension('Atom')->getId();
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get the feed language
-     *
-     * @return string|null
-     */
-    public function getLanguage()
-    {
-        if (array_key_exists('language', $this->data)) {
-            return $this->data['language'];
-        }
-
-        $language = $this->getExtension('Atom')->getLanguage();
-
-        if (!$language) {
-            $language = $this->xpath->evaluate('string(//@xml:lang[1])');
-        }
-
-        if (!$language) {
-            $language = null;
-        }
-
-        $this->data['language'] = $language;
-
-        return $this->data['language'];
-    }
-
-    /**
-     * Get a link to the source website
-     *
-     * @return string|null
-     */
-    public function getBaseUrl()
-    {
-        if (array_key_exists('baseUrl', $this->data)) {
-            return $this->data['baseUrl'];
-        }
-
-        $baseUrl = $this->getExtension('Atom')->getBaseUrl();
-
-        $this->data['baseUrl'] = $baseUrl;
-
-        return $this->data['baseUrl'];
-    }
-
-    /**
-     * Get a link to the source website
-     *
-     * @return string|null
-     */
-    public function getLink()
-    {
-        if (array_key_exists('link', $this->data)) {
-            return $this->data['link'];
-        }
-
-        $link = $this->getExtension('Atom')->getLink();
-
-        $this->data['link'] = $link;
-
-        return $this->data['link'];
-    }
-
-    /**
-     * Get feed image data
-     *
-     * @return array|null
-     */
-    public function getImage()
-    {
-        if (array_key_exists('image', $this->data)) {
-            return $this->data['image'];
-        }
-
-        $link = $this->getExtension('Atom')->getImage();
-
-        $this->data['image'] = $link;
-
-        return $this->data['image'];
-    }
-
-    /**
-     * Get a link to the feed's XML Url
-     *
-     * @return string|null
-     */
-    public function getFeedLink()
-    {
-        if (array_key_exists('feedlink', $this->data)) {
-            return $this->data['feedlink'];
-        }
-
-        $link = $this->getExtension('Atom')->getFeedLink();
-
-        if ($link === null || empty($link)) {
-            $link = $this->getOriginalSourceUri();
-        }
-
-        $this->data['feedlink'] = $link;
-
-        return $this->data['feedlink'];
-    }
-
-    /**
-     * Get the feed title
-     *
-     * @return string|null
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        $title = $this->getExtension('Atom')->getTitle();
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     * Get an array of any supported Pusubhubbub endpoints
-     *
-     * @return array|null
-     */
-    public function getHubs()
-    {
-        if (array_key_exists('hubs', $this->data)) {
-            return $this->data['hubs'];
-        }
-
-        $hubs = $this->getExtension('Atom')->getHubs();
-
-        $this->data['hubs'] = $hubs;
-
-        return $this->data['hubs'];
-    }
-
-    /**
-     * Get all categories
-     *
-     * @return Reader\Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        $categoryCollection = $this->getExtension('Atom')->getCategories();
-
-        if (count($categoryCollection) == 0) {
-            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
-        }
-
-        $this->data['categories'] = $categoryCollection;
-
-        return $this->data['categories'];
-    }
-
-    /**
-     * Read all entries to the internal entries array
-     *
-     * @return void
-     */
-    protected function indexEntries()
-    {
-        if ($this->getType() == Reader\Reader::TYPE_ATOM_10 ||
-            $this->getType() == Reader\Reader::TYPE_ATOM_03) {
-            $entries = $this->xpath->evaluate('//atom:entry');
-
-            foreach ($entries as $index => $entry) {
-                $this->entries[$index] = $entry;
-            }
-        }
-    }
-
-    /**
-     * Register the default namespaces for the current feed format
-     *
-     */
-    protected function registerNamespaces()
-    {
-        switch ($this->data['type']) {
-            case Reader\Reader::TYPE_ATOM_03:
-                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03);
-                break;
-            case Reader\Reader::TYPE_ATOM_10:
-            default:
-                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Feed/Atom/Source.php b/core/vendor/zendframework/zend-feed/Reader/Feed/Atom/Source.php
deleted file mode 100644
index 2590de655571f488ee9a3ad07f462d581eedc59f..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Feed/Atom/Source.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Feed\Atom;
-
-use DOMElement;
-use DOMXPath;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Feed;
-
-/**
-*/
-class Source extends Feed\Atom
-{
-    /**
-     * Constructor: Create a Source object which is largely just a normal
-     * Zend\Feed\Reader\AbstractFeed object only designed to retrieve feed level
-     * metadata from an Atom entry's source element.
-     *
-     * @param DOMElement $source
-     * @param string $xpathPrefix Passed from parent Entry object
-     * @param string $type Nearly always Atom 1.0
-     */
-    public function __construct(DOMElement $source, $xpathPrefix, $type = Reader\Reader::TYPE_ATOM_10)
-    {
-        $this->domDocument = $source->ownerDocument;
-        $this->xpath = new DOMXPath($this->domDocument);
-        $this->data['type'] = $type;
-        $this->registerNamespaces();
-        $this->loadExtensions();
-
-        $manager = Reader\Reader::getExtensionManager();
-        $extensions = array('Atom\Feed', 'DublinCore\Feed');
-
-        foreach ($extensions as $name) {
-            $extension = $manager->get($name);
-            $extension->setDomDocument($this->domDocument);
-            $extension->setType($this->data['type']);
-            $extension->setXpath($this->xpath);
-            $this->extensions[$name] = $extension;
-        }
-
-        foreach ($this->extensions as $extension) {
-            $extension->setXpathPrefix(rtrim($xpathPrefix, '/') . '/atom:source');
-        }
-    }
-
-    /**
-     * Since this is not an Entry carrier but a vehicle for Feed metadata, any
-     * applicable Entry methods are stubbed out and do nothing.
-     */
-
-    /**
-     * @return void
-     */
-    public function count()
-    {
-    }
-
-    /**
-     * @return void
-     */
-    public function current()
-    {
-    }
-
-    /**
-     * @return void
-     */
-    public function key()
-    {
-    }
-
-    /**
-     * @return void
-     */
-    public function next()
-    {
-    }
-
-    /**
-     * @return void
-     */
-    public function rewind()
-    {
-    }
-
-    /**
-     * @return void
-     */
-    public function valid()
-    {
-    }
-
-    /**
-     * @return void
-     */
-    protected function indexEntries()
-    {
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Feed/FeedInterface.php b/core/vendor/zendframework/zend-feed/Reader/Feed/FeedInterface.php
deleted file mode 100644
index 441ba9269c553f19019a87ab47ec5767ab94a2a9..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Feed/FeedInterface.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Feed;
-
-use Countable;
-use Iterator;
-
-/**
-*/
-interface FeedInterface extends Iterator, Countable
-{
-    /**
-     * Get a single author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0);
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors();
-
-    /**
-     * Get the copyright entry
-     *
-     * @return string|null
-     */
-    public function getCopyright();
-
-    /**
-     * Get the feed creation date
-     *
-     * @return string|null
-     */
-    public function getDateCreated();
-
-    /**
-     * Get the feed modification date
-     *
-     * @return string|null
-     */
-    public function getDateModified();
-
-    /**
-     * Get the feed description
-     *
-     * @return string|null
-     */
-    public function getDescription();
-
-    /**
-     * Get the feed generator entry
-     *
-     * @return string|null
-     */
-    public function getGenerator();
-
-    /**
-     * Get the feed ID
-     *
-     * @return string|null
-     */
-    public function getId();
-
-    /**
-     * Get the feed language
-     *
-     * @return string|null
-     */
-    public function getLanguage();
-
-    /**
-     * Get a link to the HTML source
-     *
-     * @return string|null
-     */
-    public function getLink();
-
-    /**
-     * Get a link to the XML feed
-     *
-     * @return string|null
-     */
-    public function getFeedLink();
-
-    /**
-     * Get the feed title
-     *
-     * @return string|null
-     */
-    public function getTitle();
-
-    /**
-     * Get all categories
-     *
-     * @return \Zend\Feed\Reader\Collection\Category
-     */
-    public function getCategories();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Feed/Rss.php b/core/vendor/zendframework/zend-feed/Reader/Feed/Rss.php
deleted file mode 100644
index cb9f038bccaa369751b9360c9a11ad2454f111f3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Feed/Rss.php
+++ /dev/null
@@ -1,694 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Feed;
-
-use DateTime;
-use DOMDocument;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Collection;
-use Zend\Feed\Reader\Exception;
-
-/**
-*/
-class Rss extends AbstractFeed
-{
-    /**
-     * Constructor
-     *
-     * @param  DOMDocument $dom
-     * @param  string $type
-     */
-    public function __construct(DOMDocument $dom, $type = null)
-    {
-        parent::__construct($dom, $type);
-
-        $manager = Reader\Reader::getExtensionManager();
-
-        $feed = $manager->get('DublinCore\Feed');
-        $feed->setDomDocument($dom);
-        $feed->setType($this->data['type']);
-        $feed->setXpath($this->xpath);
-        $this->extensions['DublinCore\Feed'] = $feed;
-
-        $feed = $manager->get('Atom\Feed');
-        $feed->setDomDocument($dom);
-        $feed->setType($this->data['type']);
-        $feed->setXpath($this->xpath);
-        $this->extensions['Atom\Feed'] = $feed;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-            && $this->getType() !== Reader\Reader::TYPE_RSS_090
-        ) {
-            $xpathPrefix = '/rss/channel';
-        } else {
-            $xpathPrefix = '/rdf:RDF/rss:channel';
-        }
-        foreach ($this->extensions as $extension) {
-            $extension->setXpathPrefix($xpathPrefix);
-        }
-    }
-
-    /**
-     * Get a single author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0)
-    {
-        $authors = $this->getAuthors();
-
-        if (isset($authors[$index])) {
-            return $authors[$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (array_key_exists('authors', $this->data)) {
-            return $this->data['authors'];
-        }
-
-        $authors = array();
-        $authorsDc = $this->getExtension('DublinCore')->getAuthors();
-        if (!empty($authorsDc)) {
-            foreach ($authorsDc as $author) {
-                $authors[] = array(
-                    'name' => $author['name']
-                );
-            }
-        }
-
-        /**
-         * Technically RSS doesn't specific author element use at the feed level
-         * but it's supported on a "just in case" basis.
-         */
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
-        && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $list = $this->xpath->query('//author');
-        } else {
-            $list = $this->xpath->query('//rss:author');
-        }
-        if ($list->length) {
-            foreach ($list as $author) {
-                $string = trim($author->nodeValue);
-                $data = array();
-                // Pretty rough parsing - but it's a catchall
-                if (preg_match("/^.*@[^ ]*/", $string, $matches)) {
-                    $data['email'] = trim($matches[0]);
-                    if (preg_match("/\((.*)\)$/", $string, $matches)) {
-                        $data['name'] = $matches[1];
-                    }
-                    $authors[] = $data;
-                }
-            }
-        }
-
-        if (count($authors) == 0) {
-            $authors = $this->getExtension('Atom')->getAuthors();
-        } else {
-            $authors = new Reader\Collection\Author(
-                Reader\Reader::arrayUnique($authors)
-            );
-        }
-
-        if (count($authors) == 0) {
-            $authors = null;
-        }
-
-        $this->data['authors'] = $authors;
-
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the copyright entry
-     *
-     * @return string|null
-     */
-    public function getCopyright()
-    {
-        if (array_key_exists('copyright', $this->data)) {
-            return $this->data['copyright'];
-        }
-
-        $copyright = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $copyright = $this->xpath->evaluate('string(/rss/channel/copyright)');
-        }
-
-        if (!$copyright && $this->getExtension('DublinCore') !== null) {
-            $copyright = $this->getExtension('DublinCore')->getCopyright();
-        }
-
-        if (empty($copyright)) {
-            $copyright = $this->getExtension('Atom')->getCopyright();
-        }
-
-        if (!$copyright) {
-            $copyright = null;
-        }
-
-        $this->data['copyright'] = $copyright;
-
-        return $this->data['copyright'];
-    }
-
-    /**
-     * Get the feed creation date
-     *
-     * @return string|null
-     */
-    public function getDateCreated()
-    {
-        return $this->getDateModified();
-    }
-
-    /**
-     * Get the feed modification date
-     *
-     * @return DateTime
-     * @throws Exception\RuntimeException
-     */
-    public function getDateModified()
-    {
-        if (array_key_exists('datemodified', $this->data)) {
-            return $this->data['datemodified'];
-        }
-
-        $date = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $dateModified = $this->xpath->evaluate('string(/rss/channel/pubDate)');
-            if (!$dateModified) {
-                $dateModified = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)');
-            }
-            if ($dateModified) {
-                $dateModifiedParsed = strtotime($dateModified);
-                if ($dateModifiedParsed) {
-                    $date = new DateTime('@' . $dateModifiedParsed);
-                } else {
-                    $dateStandards = array(DateTime::RSS, DateTime::RFC822,
-                                           DateTime::RFC2822, null);
-                    foreach ($dateStandards as $standard) {
-                        try {
-                            $date = DateTime::createFromFormat($standard, $dateModified);
-                            break;
-                        } catch (\Exception $e) {
-                            if ($standard == null) {
-                                throw new Exception\RuntimeException(
-                                    'Could not load date due to unrecognised'
-                                    .' format (should follow RFC 822 or 2822):'
-                                    . $e->getMessage(),
-                                    0, $e
-                                );
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if (!$date) {
-            $date = $this->getExtension('DublinCore')->getDate();
-        }
-
-        if (!$date) {
-            $date = $this->getExtension('Atom')->getDateModified();
-        }
-
-        if (!$date) {
-            $date = null;
-        }
-
-        $this->data['datemodified'] = $date;
-
-        return $this->data['datemodified'];
-    }
-
-    /**
-     * Get the feed lastBuild date
-     *
-     * @throws Exception\RuntimeException
-     * @return DateTime
-     */
-    public function getLastBuildDate()
-    {
-        if (array_key_exists('lastBuildDate', $this->data)) {
-            return $this->data['lastBuildDate'];
-        }
-
-        $date = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $lastBuildDate = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)');
-            if ($lastBuildDate) {
-                $lastBuildDateParsed = strtotime($lastBuildDate);
-                if ($lastBuildDateParsed) {
-                    $date = new DateTime('@' . $lastBuildDateParsed);
-                } else {
-                    $dateStandards = array(DateTime::RSS, DateTime::RFC822,
-                                           DateTime::RFC2822, null);
-                    foreach ($dateStandards as $standard) {
-                        try {
-                            $date = DateTime::createFromFormat($standard, $lastBuildDateParsed);
-                            break;
-                        } catch (\Exception $e) {
-                            if ($standard == null) {
-                                throw new Exception\RuntimeException(
-                                    'Could not load date due to unrecognised'
-                                    .' format (should follow RFC 822 or 2822):'
-                                    . $e->getMessage(),
-                                    0, $e
-                                );
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if (!$date) {
-            $date = null;
-        }
-
-        $this->data['lastBuildDate'] = $date;
-
-        return $this->data['lastBuildDate'];
-    }
-
-    /**
-     * Get the feed description
-     *
-     * @return string|null
-     */
-    public function getDescription()
-    {
-        if (array_key_exists('description', $this->data)) {
-            return $this->data['description'];
-        }
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $description = $this->xpath->evaluate('string(/rss/channel/description)');
-        } else {
-            $description = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:description)');
-        }
-
-        if (!$description && $this->getExtension('DublinCore') !== null) {
-            $description = $this->getExtension('DublinCore')->getDescription();
-        }
-
-        if (empty($description)) {
-            $description = $this->getExtension('Atom')->getDescription();
-        }
-
-        if (!$description) {
-            $description = null;
-        }
-
-        $this->data['description'] = $description;
-
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the feed ID
-     *
-     * @return string|null
-     */
-    public function getId()
-    {
-        if (array_key_exists('id', $this->data)) {
-            return $this->data['id'];
-        }
-
-        $id = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $id = $this->xpath->evaluate('string(/rss/channel/guid)');
-        }
-
-        if (!$id && $this->getExtension('DublinCore') !== null) {
-            $id = $this->getExtension('DublinCore')->getId();
-        }
-
-        if (empty($id)) {
-            $id = $this->getExtension('Atom')->getId();
-        }
-
-        if (!$id) {
-            if ($this->getLink()) {
-                $id = $this->getLink();
-            } elseif ($this->getTitle()) {
-                $id = $this->getTitle();
-            } else {
-                $id = null;
-            }
-        }
-
-        $this->data['id'] = $id;
-
-        return $this->data['id'];
-    }
-
-    /**
-     * Get the feed image data
-     *
-     * @return array|null
-     */
-    public function getImage()
-    {
-        if (array_key_exists('image', $this->data)) {
-            return $this->data['image'];
-        }
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $list = $this->xpath->query('/rss/channel/image');
-            $prefix = '/rss/channel/image[1]';
-        } else {
-            $list = $this->xpath->query('/rdf:RDF/rss:channel/rss:image');
-            $prefix = '/rdf:RDF/rss:channel/rss:image[1]';
-        }
-        if ($list->length > 0) {
-            $image = array();
-            $value = $this->xpath->evaluate('string(' . $prefix . '/url)');
-            if ($value) {
-                $image['uri'] = $value;
-            }
-            $value = $this->xpath->evaluate('string(' . $prefix . '/link)');
-            if ($value) {
-                $image['link'] = $value;
-            }
-            $value = $this->xpath->evaluate('string(' . $prefix . '/title)');
-            if ($value) {
-                $image['title'] = $value;
-            }
-            $value = $this->xpath->evaluate('string(' . $prefix . '/height)');
-            if ($value) {
-                $image['height'] = $value;
-            }
-            $value = $this->xpath->evaluate('string(' . $prefix . '/width)');
-            if ($value) {
-                $image['width'] = $value;
-            }
-            $value = $this->xpath->evaluate('string(' . $prefix . '/description)');
-            if ($value) {
-                $image['description'] = $value;
-            }
-        } else {
-            $image = null;
-        }
-
-        $this->data['image'] = $image;
-
-        return $this->data['image'];
-    }
-
-    /**
-     * Get the feed language
-     *
-     * @return string|null
-     */
-    public function getLanguage()
-    {
-        if (array_key_exists('language', $this->data)) {
-            return $this->data['language'];
-        }
-
-        $language = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $language = $this->xpath->evaluate('string(/rss/channel/language)');
-        }
-
-        if (!$language && $this->getExtension('DublinCore') !== null) {
-            $language = $this->getExtension('DublinCore')->getLanguage();
-        }
-
-        if (empty($language)) {
-            $language = $this->getExtension('Atom')->getLanguage();
-        }
-
-        if (!$language) {
-            $language = $this->xpath->evaluate('string(//@xml:lang[1])');
-        }
-
-        if (!$language) {
-            $language = null;
-        }
-
-        $this->data['language'] = $language;
-
-        return $this->data['language'];
-    }
-
-    /**
-     * Get a link to the feed
-     *
-     * @return string|null
-     */
-    public function getLink()
-    {
-        if (array_key_exists('link', $this->data)) {
-            return $this->data['link'];
-        }
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $link = $this->xpath->evaluate('string(/rss/channel/link)');
-        } else {
-            $link = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:link)');
-        }
-
-        if (empty($link)) {
-            $link = $this->getExtension('Atom')->getLink();
-        }
-
-        if (!$link) {
-            $link = null;
-        }
-
-        $this->data['link'] = $link;
-
-        return $this->data['link'];
-    }
-
-    /**
-     * Get a link to the feed XML
-     *
-     * @return string|null
-     */
-    public function getFeedLink()
-    {
-        if (array_key_exists('feedlink', $this->data)) {
-            return $this->data['feedlink'];
-        }
-
-        $link = $this->getExtension('Atom')->getFeedLink();
-
-        if ($link === null || empty($link)) {
-            $link = $this->getOriginalSourceUri();
-        }
-
-        $this->data['feedlink'] = $link;
-
-        return $this->data['feedlink'];
-    }
-
-    /**
-     * Get the feed generator entry
-     *
-     * @return string|null
-     */
-    public function getGenerator()
-    {
-        if (array_key_exists('generator', $this->data)) {
-            return $this->data['generator'];
-        }
-
-        $generator = null;
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $generator = $this->xpath->evaluate('string(/rss/channel/generator)');
-        }
-
-        if (!$generator) {
-            if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-                $generator = $this->xpath->evaluate('string(/rss/channel/atom:generator)');
-            } else {
-                $generator = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/atom:generator)');
-            }
-        }
-
-        if (empty($generator)) {
-            $generator = $this->getExtension('Atom')->getGenerator();
-        }
-
-        if (!$generator) {
-            $generator = null;
-        }
-
-        $this->data['generator'] = $generator;
-
-        return $this->data['generator'];
-    }
-
-    /**
-     * Get the feed title
-     *
-     * @return string|null
-     */
-    public function getTitle()
-    {
-        if (array_key_exists('title', $this->data)) {
-            return $this->data['title'];
-        }
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $title = $this->xpath->evaluate('string(/rss/channel/title)');
-        } else {
-            $title = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:title)');
-        }
-
-        if (!$title && $this->getExtension('DublinCore') !== null) {
-            $title = $this->getExtension('DublinCore')->getTitle();
-        }
-
-        if (!$title) {
-            $title = $this->getExtension('Atom')->getTitle();
-        }
-
-        if (!$title) {
-            $title = null;
-        }
-
-        $this->data['title'] = $title;
-
-        return $this->data['title'];
-    }
-
-    /**
-     * Get an array of any supported Pusubhubbub endpoints
-     *
-     * @return array|null
-     */
-    public function getHubs()
-    {
-        if (array_key_exists('hubs', $this->data)) {
-            return $this->data['hubs'];
-        }
-
-        $hubs = $this->getExtension('Atom')->getHubs();
-
-        if (empty($hubs)) {
-            $hubs = null;
-        } else {
-            $hubs = array_unique($hubs);
-        }
-
-        $this->data['hubs'] = $hubs;
-
-        return $this->data['hubs'];
-    }
-
-    /**
-     * Get all categories
-     *
-     * @return Reader\Collection\Category
-     */
-    public function getCategories()
-    {
-        if (array_key_exists('categories', $this->data)) {
-            return $this->data['categories'];
-        }
-
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
-            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $list = $this->xpath->query('/rss/channel//category');
-        } else {
-            $list = $this->xpath->query('/rdf:RDF/rss:channel//rss:category');
-        }
-
-        if ($list->length) {
-            $categoryCollection = new Collection\Category;
-            foreach ($list as $category) {
-                $categoryCollection[] = array(
-                    'term' => $category->nodeValue,
-                    'scheme' => $category->getAttribute('domain'),
-                    'label' => $category->nodeValue,
-                );
-            }
-        } else {
-            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
-        }
-
-        if (count($categoryCollection) == 0) {
-            $categoryCollection = $this->getExtension('Atom')->getCategories();
-        }
-
-        $this->data['categories'] = $categoryCollection;
-
-        return $this->data['categories'];
-    }
-
-    /**
-     * Read all entries to the internal entries array
-     *
-     */
-    protected function indexEntries()
-    {
-        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
-            $entries = $this->xpath->evaluate('//item');
-        } else {
-            $entries = $this->xpath->evaluate('//rss:item');
-        }
-
-        foreach ($entries as $index => $entry) {
-            $this->entries[$index] = $entry;
-        }
-    }
-
-    /**
-     * Register the default namespaces for the current feed format
-     *
-     */
-    protected function registerNamespaces()
-    {
-        switch ($this->data['type']) {
-            case Reader\Reader::TYPE_RSS_10:
-                $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF);
-                $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_10);
-                break;
-
-            case Reader\Reader::TYPE_RSS_090:
-                $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF);
-                $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_090);
-                break;
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/FeedSet.php b/core/vendor/zendframework/zend-feed/Reader/FeedSet.php
deleted file mode 100644
index 8fab2cbae8e0fdb611aded67d9ba181670739d3f..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/FeedSet.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-use ArrayObject;
-use DOMNodeList;
-use Zend\Feed\Uri;
-
-/**
-*/
-class FeedSet extends ArrayObject
-{
-    public $rss = null;
-
-    public $rdf = null;
-
-    public $atom = null;
-
-    /**
-     * Import a DOMNodeList from any document containing a set of links
-     * for alternate versions of a document, which will normally refer to
-     * RSS/RDF/Atom feeds for the current document.
-     *
-     * All such links are stored internally, however the first instance of
-     * each RSS, RDF or Atom type has its URI stored as a public property
-     * as a shortcut where the use case is simply to get a quick feed ref.
-     *
-     * Note that feeds are not loaded at this point, but will be lazy
-     * loaded automatically when each links 'feed' array key is accessed.
-     *
-     * @param DOMNodeList $links
-     * @param string $uri
-     * @return void
-     */
-    public function addLinks(DOMNodeList $links, $uri)
-    {
-        foreach ($links as $link) {
-            if (strtolower($link->getAttribute('rel')) !== 'alternate'
-                || !$link->getAttribute('type') || !$link->getAttribute('href')) {
-                continue;
-            }
-            if (!isset($this->rss) && $link->getAttribute('type') == 'application/rss+xml') {
-                $this->rss = $this->absolutiseUri(trim($link->getAttribute('href')), $uri);
-            } elseif (!isset($this->atom) && $link->getAttribute('type') == 'application/atom+xml') {
-                $this->atom = $this->absolutiseUri(trim($link->getAttribute('href')), $uri);
-            } elseif (!isset($this->rdf) && $link->getAttribute('type') == 'application/rdf+xml') {
-                $this->rdf = $this->absolutiseUri(trim($link->getAttribute('href')), $uri);
-            }
-            $this[] = new static(array(
-                'rel' => 'alternate',
-                'type' => $link->getAttribute('type'),
-                'href' => $this->absolutiseUri(trim($link->getAttribute('href')), $uri),
-            ));
-        }
-    }
-
-    /**
-     *  Attempt to turn a relative URI into an absolute URI
-     */
-    protected function absolutiseUri($link, $uri = null)
-    {
-        $linkUri = Uri::factory($link);
-        if (!$linkUri->isAbsolute() or !$linkUri->isValid()) {
-            if ($uri !== null) {
-                $uri = Uri::factory($uri);
-
-                if ($link[0] !== '/') {
-                    $link = $uri->getPath() . '/' . $link;
-                }
-
-                $link = $uri->getScheme() . '://' . $uri->getHost() . '/' . $this->canonicalizePath($link);
-                if (!Uri::factory($link)->isValid()) {
-                    $link = null;
-                }
-            }
-        }
-        return $link;
-    }
-
-    /**
-     *  Canonicalize relative path
-     */
-    protected function canonicalizePath($path)
-    {
-        $parts = array_filter(explode('/', $path));
-        $absolutes = array();
-        foreach ($parts as $part) {
-            if ('.' == $part) {
-                continue;
-            }
-            if ('..' == $part) {
-                array_pop($absolutes);
-            } else {
-                $absolutes[] = $part;
-            }
-        }
-        return implode('/', $absolutes);
-    }
-
-    /**
-     * Supports lazy loading of feeds using Reader::import() but
-     * delegates any other operations to the parent class.
-     *
-     * @param string $offset
-     * @return mixed
-     */
-    public function offsetGet($offset)
-    {
-        if ($offset == 'feed' && !$this->offsetExists('feed')) {
-            if (!$this->offsetExists('href')) {
-                return;
-            }
-            $feed = Reader::import($this->offsetGet('href'));
-            $this->offsetSet('feed', $feed);
-            return $feed;
-        }
-        return parent::offsetGet($offset);
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Http/ClientInterface.php b/core/vendor/zendframework/zend-feed/Reader/Http/ClientInterface.php
deleted file mode 100644
index 138798185908bf2145a1e8b3f14abc43ffefcf52..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Http/ClientInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Http;
-
-interface ClientInterface
-{
-    /**
-     * Make a GET request to a given URI
-     *
-     * @param  string $uri
-     * @return ResponseInterface
-     */
-    public function get($uri);
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Http/ResponseInterface.php b/core/vendor/zendframework/zend-feed/Reader/Http/ResponseInterface.php
deleted file mode 100644
index 96b422e16dedce220738d3642437bb08be8b09af..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Http/ResponseInterface.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Http;
-
-interface ResponseInterface
-{
-    /**
-     * Retrieve the response body
-     *
-     * @return string
-     */
-    public function getBody();
-
-    /**
-     * Retrieve the HTTP response status code
-     *
-     * @return int
-     */
-    public function getStatusCode();
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/Reader.php b/core/vendor/zendframework/zend-feed/Reader/Reader.php
deleted file mode 100644
index c5eb3d454f43bc59c05072ba0844d2dec4ba1198..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/Reader.php
+++ /dev/null
@@ -1,676 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-use DOMDocument;
-use DOMXPath;
-use Zend\Cache\Storage\StorageInterface as CacheStorage;
-use Zend\Http as ZendHttp;
-use Zend\Stdlib\ErrorHandler;
-
-/**
-*/
-class Reader implements ReaderImportInterface
-{
-    /**
-     * Namespace constants
-     */
-    const NAMESPACE_ATOM_03  = 'http://purl.org/atom/ns#';
-    const NAMESPACE_ATOM_10  = 'http://www.w3.org/2005/Atom';
-    const NAMESPACE_RDF      = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
-    const NAMESPACE_RSS_090  = 'http://my.netscape.com/rdf/simple/0.9/';
-    const NAMESPACE_RSS_10   = 'http://purl.org/rss/1.0/';
-
-    /**
-     * Feed type constants
-     */
-    const TYPE_ANY              = 'any';
-    const TYPE_ATOM_03          = 'atom-03';
-    const TYPE_ATOM_10          = 'atom-10';
-    const TYPE_ATOM_10_ENTRY    = 'atom-10-entry';
-    const TYPE_ATOM_ANY         = 'atom';
-    const TYPE_RSS_090          = 'rss-090';
-    const TYPE_RSS_091          = 'rss-091';
-    const TYPE_RSS_091_NETSCAPE = 'rss-091n';
-    const TYPE_RSS_091_USERLAND = 'rss-091u';
-    const TYPE_RSS_092          = 'rss-092';
-    const TYPE_RSS_093          = 'rss-093';
-    const TYPE_RSS_094          = 'rss-094';
-    const TYPE_RSS_10           = 'rss-10';
-    const TYPE_RSS_20           = 'rss-20';
-    const TYPE_RSS_ANY          = 'rss';
-
-    /**
-     * Cache instance
-     *
-     * @var CacheStorage
-     */
-    protected static $cache = null;
-
-    /**
-     * HTTP client object to use for retrieving feeds
-     *
-     * @var ZendHttp\Client
-     */
-    protected static $httpClient = null;
-
-    /**
-     * Override HTTP PUT and DELETE request methods?
-     *
-     * @var bool
-     */
-    protected static $httpMethodOverride = false;
-
-    protected static $httpConditionalGet = false;
-
-    protected static $extensionManager = null;
-
-    protected static $extensions = array(
-        'feed' => array(
-            'DublinCore\Feed',
-            'Atom\Feed'
-        ),
-        'entry' => array(
-            'Content\Entry',
-            'DublinCore\Entry',
-            'Atom\Entry'
-        ),
-        'core' => array(
-            'DublinCore\Feed',
-            'Atom\Feed',
-            'Content\Entry',
-            'DublinCore\Entry',
-            'Atom\Entry'
-        )
-    );
-
-    /**
-     * Get the Feed cache
-     *
-     * @return CacheStorage
-     */
-    public static function getCache()
-    {
-        return static::$cache;
-    }
-
-    /**
-     * Set the feed cache
-     *
-     * @param  CacheStorage $cache
-     * @return void
-     */
-    public static function setCache(CacheStorage $cache)
-    {
-        static::$cache = $cache;
-    }
-
-    /**
-     * Set the HTTP client instance
-     *
-     * Sets the HTTP client object to use for retrieving the feeds.
-     *
-     * @param  ZendHttp\Client $httpClient
-     * @return void
-     */
-    public static function setHttpClient(ZendHttp\Client $httpClient)
-    {
-        static::$httpClient = $httpClient;
-    }
-
-    /**
-     * Gets the HTTP client object. If none is set, a new ZendHttp\Client will be used.
-     *
-     * @return ZendHttp\Client
-     */
-    public static function getHttpClient()
-    {
-        if (!static::$httpClient instanceof ZendHttp\Client) {
-            static::$httpClient = new ZendHttp\Client();
-        }
-
-        return static::$httpClient;
-    }
-
-    /**
-     * Toggle using POST instead of PUT and DELETE HTTP methods
-     *
-     * Some feed implementations do not accept PUT and DELETE HTTP
-     * methods, or they can't be used because of proxies or other
-     * measures. This allows turning on using POST where PUT and
-     * DELETE would normally be used; in addition, an
-     * X-Method-Override header will be sent with a value of PUT or
-     * DELETE as appropriate.
-     *
-     * @param  bool $override Whether to override PUT and DELETE.
-     * @return void
-     */
-    public static function setHttpMethodOverride($override = true)
-    {
-        static::$httpMethodOverride = $override;
-    }
-
-    /**
-     * Get the HTTP override state
-     *
-     * @return bool
-     */
-    public static function getHttpMethodOverride()
-    {
-        return static::$httpMethodOverride;
-    }
-
-    /**
-     * Set the flag indicating whether or not to use HTTP conditional GET
-     *
-     * @param  bool $bool
-     * @return void
-     */
-    public static function useHttpConditionalGet($bool = true)
-    {
-        static::$httpConditionalGet = $bool;
-    }
-
-    /**
-     * Import a feed by providing a URI
-     *
-     * @param  string $uri The URI to the feed
-     * @param  string $etag OPTIONAL Last received ETag for this resource
-     * @param  string $lastModified OPTIONAL Last-Modified value for this resource
-     * @return Feed\FeedInterface
-     * @throws Exception\RuntimeException
-     */
-    public static function import($uri, $etag = null, $lastModified = null)
-    {
-        $cache       = self::getCache();
-        $client      = self::getHttpClient();
-        $client->resetParameters();
-        $headers = new ZendHttp\Headers();
-        $client->setHeaders($headers);
-        $client->setUri($uri);
-        $cacheId = 'Zend_Feed_Reader_' . md5($uri);
-
-        if (static::$httpConditionalGet && $cache) {
-            $data = $cache->getItem($cacheId);
-            if ($data) {
-                if ($etag === null) {
-                    $etag = $cache->getItem($cacheId . '_etag');
-                }
-                if ($lastModified === null) {
-                    $lastModified = $cache->getItem($cacheId . '_lastmodified');
-                }
-                if ($etag) {
-                    $headers->addHeaderLine('If-None-Match', $etag);
-                }
-                if ($lastModified) {
-                    $headers->addHeaderLine('If-Modified-Since', $lastModified);
-                }
-            }
-            $response = $client->send();
-            if ($response->getStatusCode() !== 200 && $response->getStatusCode() !== 304) {
-                throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
-            }
-            if ($response->getStatusCode() == 304) {
-                $responseXml = $data;
-            } else {
-                $responseXml = $response->getBody();
-                $cache->setItem($cacheId, $responseXml);
-                if ($response->getHeaders()->get('ETag')) {
-                    $cache->setItem($cacheId . '_etag', $response->getHeaders()->get('ETag')->getFieldValue());
-                }
-                if ($response->getHeaders()->get('Last-Modified')) {
-                    $cache->setItem($cacheId . '_lastmodified', $response->getHeaders()->get('Last-Modified')->getFieldValue());
-                }
-            }
-            return static::importString($responseXml);
-        } elseif ($cache) {
-            $data = $cache->getItem($cacheId);
-            if ($data) {
-                return static::importString($data);
-            }
-            $response = $client->send();
-            if ((int) $response->getStatusCode() !== 200) {
-                throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
-            }
-            $responseXml = $response->getBody();
-            $cache->setItem($cacheId, $responseXml);
-            return static::importString($responseXml);
-        } else {
-            $response = $client->send();
-            if ((int) $response->getStatusCode() !== 200) {
-                throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
-            }
-            $reader = static::importString($response->getBody());
-            $reader->setOriginalSourceUri($uri);
-            return $reader;
-        }
-    }
-
-    /**
-     * Import a feed from a remote URI
-     *
-     * Performs similarly to import(), except it uses the HTTP client passed to
-     * the method, and does not take into account cached data.
-     *
-     * Primary purpose is to make it possible to use the Reader with alternate
-     * HTTP client implementations.
-     *
-     * @param  string $uri
-     * @param  Http\ClientInterface $client
-     * @return self
-     * @throws Exception\RuntimeException if response is not an Http\ResponseInterface
-     */
-    public static function importRemoteFeed($uri, Http\ClientInterface $client)
-    {
-        $response = $client->get($uri);
-        if (!$response instanceof Http\ResponseInterface) {
-            throw new Exception\RuntimeException(sprintf(
-                'Did not receive a %s\Http\ResponseInterface from the provided HTTP client; received "%s"',
-                __NAMESPACE__,
-                (is_object($response) ? get_class($response) : gettype($response))
-            ));
-        }
-
-        if ((int) $response->getStatusCode() !== 200) {
-            throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
-        }
-        $reader = static::importString($response->getBody());
-        $reader->setOriginalSourceUri($uri);
-        return $reader;
-    }
-
-    /**
-     * Import a feed from a string
-     *
-     * @param  string $string
-     * @return Feed\FeedInterface
-     * @throws Exception\InvalidArgumentException
-     * @throws Exception\RuntimeException
-     */
-    public static function importString($string)
-    {
-        $trimmed = trim($string);
-        if (!is_string($string) || empty($trimmed)) {
-            throw new Exception\InvalidArgumentException('Only non empty strings are allowed as input');
-        }
-
-        $libxmlErrflag = libxml_use_internal_errors(true);
-        $oldValue = libxml_disable_entity_loader(true);
-        $dom = new DOMDocument;
-        $status = $dom->loadXML(trim($string));
-        foreach ($dom->childNodes as $child) {
-            if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
-                throw new Exception\InvalidArgumentException(
-                    'Invalid XML: Detected use of illegal DOCTYPE'
-                );
-            }
-        }
-        libxml_disable_entity_loader($oldValue);
-        libxml_use_internal_errors($libxmlErrflag);
-
-        if (!$status) {
-            // Build error message
-            $error = libxml_get_last_error();
-            if ($error && $error->message) {
-                $error->message = trim($error->message);
-                $errormsg = "DOMDocument cannot parse XML: {$error->message}";
-            } else {
-                $errormsg = "DOMDocument cannot parse XML: Please check the XML document's validity";
-            }
-            throw new Exception\RuntimeException($errormsg);
-        }
-
-        $type = static::detectType($dom);
-
-        static::registerCoreExtensions();
-
-        if (substr($type, 0, 3) == 'rss') {
-            $reader = new Feed\Rss($dom, $type);
-        } elseif (substr($type, 8, 5) == 'entry') {
-            $reader = new Entry\Atom($dom->documentElement, 0, self::TYPE_ATOM_10);
-        } elseif (substr($type, 0, 4) == 'atom') {
-            $reader = new Feed\Atom($dom, $type);
-        } else {
-            throw new Exception\RuntimeException('The URI used does not point to a '
-            . 'valid Atom, RSS or RDF feed that Zend\Feed\Reader can parse.');
-        }
-        return $reader;
-    }
-
-    /**
-     * Imports a feed from a file located at $filename.
-     *
-     * @param  string $filename
-     * @throws Exception\RuntimeException
-     * @return Feed\FeedInterface
-     */
-    public static function importFile($filename)
-    {
-        ErrorHandler::start();
-        $feed = file_get_contents($filename);
-        $err  = ErrorHandler::stop();
-        if ($feed === false) {
-            throw new Exception\RuntimeException("File '{$filename}' could not be loaded", 0, $err);
-        }
-        return static::importString($feed);
-    }
-
-    /**
-     * Find feed links
-     *
-     * @param $uri
-     * @return FeedSet
-     * @throws Exception\RuntimeException
-     */
-    public static function findFeedLinks($uri)
-    {
-        $client = static::getHttpClient();
-        $client->setUri($uri);
-        $response = $client->send();
-        if ($response->getStatusCode() !== 200) {
-            throw new Exception\RuntimeException("Failed to access $uri, got response code " . $response->getStatusCode());
-        }
-        $responseHtml = $response->getBody();
-        $libxmlErrflag = libxml_use_internal_errors(true);
-        $oldValue = libxml_disable_entity_loader(true);
-        $dom = new DOMDocument;
-        $status = $dom->loadHTML(trim($responseHtml));
-        libxml_disable_entity_loader($oldValue);
-        libxml_use_internal_errors($libxmlErrflag);
-        if (!$status) {
-            // Build error message
-            $error = libxml_get_last_error();
-            if ($error && $error->message) {
-                $error->message = trim($error->message);
-                $errormsg = "DOMDocument cannot parse HTML: {$error->message}";
-            } else {
-                $errormsg = "DOMDocument cannot parse HTML: Please check the XML document's validity";
-            }
-            throw new Exception\RuntimeException($errormsg);
-        }
-        $feedSet = new FeedSet;
-        $links = $dom->getElementsByTagName('link');
-        $feedSet->addLinks($links, $uri);
-        return $feedSet;
-    }
-
-    /**
-     * Detect the feed type of the provided feed
-     *
-     * @param  Feed\AbstractFeed|DOMDocument|string $feed
-     * @param  bool $specOnly
-     * @return string
-     * @throws Exception\InvalidArgumentException
-     * @throws Exception\RuntimeException
-     */
-    public static function detectType($feed, $specOnly = false)
-    {
-        if ($feed instanceof Feed\AbstractFeed) {
-            $dom = $feed->getDomDocument();
-        } elseif ($feed instanceof DOMDocument) {
-            $dom = $feed;
-        } elseif (is_string($feed) && !empty($feed)) {
-            ErrorHandler::start(E_NOTICE|E_WARNING);
-            ini_set('track_errors', 1);
-            $oldValue = libxml_disable_entity_loader(true);
-            $dom = new DOMDocument;
-            $status = $dom->loadXML($feed);
-            foreach ($dom->childNodes as $child) {
-                if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
-                    throw new Exception\InvalidArgumentException(
-                        'Invalid XML: Detected use of illegal DOCTYPE'
-                    );
-                }
-            }
-            libxml_disable_entity_loader($oldValue);
-            ini_restore('track_errors');
-            ErrorHandler::stop();
-            if (!$status) {
-                if (!isset($phpErrormsg)) {
-                    if (function_exists('xdebug_is_enabled')) {
-                        $phpErrormsg = '(error message not available, when XDebug is running)';
-                    } else {
-                        $phpErrormsg = '(error message not available)';
-                    }
-                }
-                throw new Exception\RuntimeException("DOMDocument cannot parse XML: $phpErrormsg");
-            }
-        } else {
-            throw new Exception\InvalidArgumentException('Invalid object/scalar provided: must'
-            . ' be of type Zend\Feed\Reader\Feed, DomDocument or string');
-        }
-        $xpath = new DOMXPath($dom);
-
-        if ($xpath->query('/rss')->length) {
-            $type = self::TYPE_RSS_ANY;
-            $version = $xpath->evaluate('string(/rss/@version)');
-
-            if (strlen($version) > 0) {
-                switch ($version) {
-                    case '2.0':
-                        $type = self::TYPE_RSS_20;
-                        break;
-
-                    case '0.94':
-                        $type = self::TYPE_RSS_094;
-                        break;
-
-                    case '0.93':
-                        $type = self::TYPE_RSS_093;
-                        break;
-
-                    case '0.92':
-                        $type = self::TYPE_RSS_092;
-                        break;
-
-                    case '0.91':
-                        $type = self::TYPE_RSS_091;
-                        break;
-                }
-            }
-
-            return $type;
-        }
-
-        $xpath->registerNamespace('rdf', self::NAMESPACE_RDF);
-
-        if ($xpath->query('/rdf:RDF')->length) {
-            $xpath->registerNamespace('rss', self::NAMESPACE_RSS_10);
-
-            if ($xpath->query('/rdf:RDF/rss:channel')->length
-                || $xpath->query('/rdf:RDF/rss:image')->length
-                || $xpath->query('/rdf:RDF/rss:item')->length
-                || $xpath->query('/rdf:RDF/rss:textinput')->length
-            ) {
-                return self::TYPE_RSS_10;
-            }
-
-            $xpath->registerNamespace('rss', self::NAMESPACE_RSS_090);
-
-            if ($xpath->query('/rdf:RDF/rss:channel')->length
-                || $xpath->query('/rdf:RDF/rss:image')->length
-                || $xpath->query('/rdf:RDF/rss:item')->length
-                || $xpath->query('/rdf:RDF/rss:textinput')->length
-            ) {
-                return self::TYPE_RSS_090;
-            }
-        }
-
-        $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_10);
-
-        if ($xpath->query('//atom:feed')->length) {
-            return self::TYPE_ATOM_10;
-        }
-
-        if ($xpath->query('//atom:entry')->length) {
-            if ($specOnly == true) {
-                return self::TYPE_ATOM_10;
-            } else {
-                return self::TYPE_ATOM_10_ENTRY;
-            }
-        }
-
-        $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_03);
-
-        if ($xpath->query('//atom:feed')->length) {
-            return self::TYPE_ATOM_03;
-        }
-
-        return self::TYPE_ANY;
-    }
-
-    /**
-     * Set plugin manager for use with Extensions
-     *
-     * @param ExtensionManagerInterface $extensionManager
-     */
-    public static function setExtensionManager(ExtensionManagerInterface $extensionManager)
-    {
-        static::$extensionManager = $extensionManager;
-    }
-
-    /**
-     * Get plugin manager for use with Extensions
-     *
-     * @return ExtensionManagerInterface
-     */
-    public static function getExtensionManager()
-    {
-        if (!isset(static::$extensionManager)) {
-            static::setExtensionManager(new StandaloneExtensionManager());
-        }
-        return static::$extensionManager;
-    }
-
-    /**
-     * Register an Extension by name
-     *
-     * @param  string $name
-     * @return void
-     * @throws Exception\RuntimeException if unable to resolve Extension class
-     */
-    public static function registerExtension($name)
-    {
-        $feedName  = $name . '\Feed';
-        $entryName = $name . '\Entry';
-        $manager   = static::getExtensionManager();
-        if (static::isRegistered($name)) {
-            if ($manager->has($feedName) || $manager->has($entryName)) {
-                return;
-            }
-        }
-
-        if (!$manager->has($feedName) && !$manager->has($entryName)) {
-            throw new Exception\RuntimeException('Could not load extension: ' . $name
-                . ' using Plugin Loader. Check prefix paths are configured and extension exists.');
-        }
-        if ($manager->has($feedName)) {
-            static::$extensions['feed'][] = $feedName;
-        }
-        if ($manager->has($entryName)) {
-            static::$extensions['entry'][] = $entryName;
-        }
-    }
-
-    /**
-     * Is a given named Extension registered?
-     *
-     * @param  string $extensionName
-     * @return bool
-     */
-    public static function isRegistered($extensionName)
-    {
-        $feedName  = $extensionName . '\Feed';
-        $entryName = $extensionName . '\Entry';
-        if (in_array($feedName, static::$extensions['feed'])
-            || in_array($entryName, static::$extensions['entry'])
-        ) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Get a list of extensions
-     *
-     * @return array
-     */
-    public static function getExtensions()
-    {
-        return static::$extensions;
-    }
-
-    /**
-     * Reset class state to defaults
-     *
-     * @return void
-     */
-    public static function reset()
-    {
-        static::$cache              = null;
-        static::$httpClient         = null;
-        static::$httpMethodOverride = false;
-        static::$httpConditionalGet = false;
-        static::$extensionManager   = null;
-        static::$extensions         = array(
-            'feed' => array(
-                'DublinCore\Feed',
-                'Atom\Feed'
-            ),
-            'entry' => array(
-                'Content\Entry',
-                'DublinCore\Entry',
-                'Atom\Entry'
-            ),
-            'core' => array(
-                'DublinCore\Feed',
-                'Atom\Feed',
-                'Content\Entry',
-                'DublinCore\Entry',
-                'Atom\Entry'
-            )
-        );
-    }
-
-    /**
-     * Register core (default) extensions
-     *
-     * @return void
-     */
-    protected static function registerCoreExtensions()
-    {
-        static::registerExtension('DublinCore');
-        static::registerExtension('Content');
-        static::registerExtension('Atom');
-        static::registerExtension('Slash');
-        static::registerExtension('WellFormedWeb');
-        static::registerExtension('Thread');
-        static::registerExtension('Podcast');
-    }
-
-    /**
-     * Utility method to apply array_unique operation to a multidimensional
-     * array.
-     *
-     * @param array
-     * @return array
-     */
-    public static function arrayUnique(array $array)
-    {
-        foreach ($array as &$value) {
-            $value = serialize($value);
-        }
-        $array = array_unique($array);
-        foreach ($array as &$value) {
-            $value = unserialize($value);
-        }
-        return $array;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/ReaderImportInterface.php b/core/vendor/zendframework/zend-feed/Reader/ReaderImportInterface.php
deleted file mode 100644
index 0a2edd14ccc6dc897d99cd35cbb9d2e4f3ca158e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/ReaderImportInterface.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-interface ReaderImportInterface
-{
-    /**
-     * Import a feed by providing a URI
-     *
-     * @param  string $uri The URI to the feed
-     * @param  string $etag OPTIONAL Last received ETag for this resource
-     * @param  string $lastModified OPTIONAL Last-Modified value for this resource
-     * @return Feed\FeedInterface
-     * @throws Exception\RuntimeException
-     */
-    public static function import($uri, $etag = null, $lastModified = null);
-
-    /**
-     * Import a feed from a remote URI
-     *
-     * Performs similarly to import(), except it uses the HTTP client passed to
-     * the method, and does not take into account cached data.
-     *
-     * Primary purpose is to make it possible to use the Reader with alternate
-     * HTTP client implementations.
-     *
-     * @param  string $uri
-     * @param  Http\ClientInterface $client
-     * @return self
-     * @throws Exception\RuntimeException if response is not an Http\ResponseInterface
-     */
-    public static function importRemoteFeed($uri, Http\ClientInterface $client);
-
-
-    /**
-     * Import a feed from a string
-     *
-     * @param  string $string
-     * @return Feed\FeedInterface
-     * @throws Exception\InvalidArgumentException
-     * @throws Exception\RuntimeException
-     */
-    public static function importString($string);
-
-
-    /**
-     * Imports a feed from a file located at $filename.
-     *
-     * @param  string $filename
-     * @throws Exception\RuntimeException
-     * @return Feed\FeedInterface
-     */
-    public static function importFile($filename);
-}
diff --git a/core/vendor/zendframework/zend-feed/Reader/StandaloneExtensionManager.php b/core/vendor/zendframework/zend-feed/Reader/StandaloneExtensionManager.php
deleted file mode 100644
index ac85e8a74be88d3521d1578101350e634ef4499c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Reader/StandaloneExtensionManager.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader;
-
-class StandaloneExtensionManager implements ExtensionManagerInterface
-{
-    private $extensions = array(
-        'Atom\Entry'            => 'Zend\Feed\Reader\Extension\Atom\Entry',
-        'Atom\Feed'             => 'Zend\Feed\Reader\Extension\Atom\Feed',
-        'Content\Entry'         => 'Zend\Feed\Reader\Extension\Content\Entry',
-        'CreativeCommons\Entry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry',
-        'CreativeCommons\Feed'  => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed',
-        'DublinCore\Entry'      => 'Zend\Feed\Reader\Extension\DublinCore\Entry',
-        'DublinCore\Feed'       => 'Zend\Feed\Reader\Extension\DublinCore\Feed',
-        'Podcast\Entry'         => 'Zend\Feed\Reader\Extension\Podcast\Entry',
-        'Podcast\Feed'          => 'Zend\Feed\Reader\Extension\Podcast\Feed',
-        'Slash\Entry'           => 'Zend\Feed\Reader\Extension\Slash\Entry',
-        'Syndication\Feed'      => 'Zend\Feed\Reader\Extension\Syndication\Feed',
-        'Thread\Entry'          => 'Zend\Feed\Reader\Extension\Thread\Entry',
-        'WellFormedWeb\Entry'   => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry',
-    );
-
-    /**
-     * Do we have the extension?
-     *
-     * @param  string $extension
-     * @return bool
-     */
-    public function has($extension)
-    {
-        return array_key_exists($extension, $this->extensions);
-    }
-
-    /**
-     * Retrieve the extension
-     *
-     * @param  string $extension
-     * @return Extension\AbstractEntry|Extension\AbstractFeed
-     */
-    public function get($extension)
-    {
-        $class = $this->extensions[$extension];
-        return new $class();
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Uri.php b/core/vendor/zendframework/zend-feed/Uri.php
deleted file mode 100644
index 9a4565e3584e0adc8b3951ed7c309e6f3dda86c7..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Uri.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed;
-
-class Uri
-{
-    /**
-     * @var string
-     */
-    protected $fragment;
-
-    /**
-     * @var string
-     */
-    protected $host;
-
-    /**
-     * @var string
-     */
-    protected $pass;
-
-    /**
-     * @var string
-     */
-    protected $path;
-
-    /**
-     * @var int
-     */
-    protected $port;
-
-    /**
-     * @var string
-     */
-    protected $query;
-
-    /**
-     * @var string
-     */
-    protected $scheme;
-
-    /**
-     * @var string
-     */
-    protected $user;
-
-    /**
-     * @var bool
-     */
-    protected $valid;
-
-    /**
-     * Valid schemes
-     */
-    protected $validSchemes = array(
-        'http',
-        'https',
-        'file',
-    );
-
-    /**
-     * @param  string $uri
-     */
-    public function __construct($uri)
-    {
-        $parsed = parse_url($uri);
-        if (false === $parsed) {
-            $this->valid = false;
-            return;
-        }
-
-        $this->scheme   = isset($parsed['scheme'])   ? $parsed['scheme']   : null;
-        $this->host     = isset($parsed['host'])     ? $parsed['host']     : null;
-        $this->port     = isset($parsed['port'])     ? $parsed['port']     : null;
-        $this->user     = isset($parsed['user'])     ? $parsed['user']     : null;
-        $this->pass     = isset($parsed['pass'])     ? $parsed['pass']     : null;
-        $this->path     = isset($parsed['path'])     ? $parsed['path']     : null;
-        $this->query    = isset($parsed['query'])    ? $parsed['query']    : null;
-        $this->fragment = isset($parsed['fragment']) ? $parsed['fragment'] : null;
-    }
-
-    /**
-     * Create an instance
-     *
-     * Useful for chained validations
-     *
-     * @param  string $uri
-     * @return self
-     */
-    public static function factory($uri)
-    {
-        return new static($uri);
-    }
-
-    /**
-     * Retrieve the host
-     *
-     * @return string
-     */
-    public function getHost()
-    {
-        return $this->host;
-    }
-
-    /**
-     * Retrieve the URI path
-     *
-     * @return string
-     */
-    public function getPath()
-    {
-        return $this->path;
-    }
-
-    /**
-     * Retrieve the scheme
-     *
-     * @return string
-     */
-    public function getScheme()
-    {
-        return $this->scheme;
-    }
-
-    /**
-     * Is the URI valid?
-     *
-     * @return bool
-     */
-    public function isValid()
-    {
-        if (false === $this->valid) {
-            return false;
-        }
-
-        if ($this->scheme && !in_array($this->scheme, $this->validSchemes)) {
-            return false;
-        }
-
-        if ($this->host) {
-            if ($this->path && substr($this->path, 0, 1) != '/') {
-                return false;
-            }
-            return true;
-        }
-
-        // no host, but user and/or port... what?
-        if ($this->user || $this->port) {
-            return false;
-        }
-
-        if ($this->path) {
-            // Check path-only (no host) URI
-            if (substr($this->path, 0, 2) == '//') {
-                return false;
-            }
-            return true;
-        }
-
-        if (! ($this->query || $this->fragment)) {
-            // No host, path, query or fragment - this is not a valid URI
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Is the URI absolute?
-     *
-     * @return bool
-     */
-    public function isAbsolute()
-    {
-        return ($this->scheme !== null);
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/AbstractFeed.php b/core/vendor/zendframework/zend-feed/Writer/AbstractFeed.php
deleted file mode 100644
index 26616b06d7b69834c465b2295911e4de4002aa00..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/AbstractFeed.php
+++ /dev/null
@@ -1,846 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-use DateTime;
-use Zend\Feed\Uri;
-use Zend\Validator;
-
-class AbstractFeed
-{
-    /**
-     * Contains all Feed level date to append in feed output
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Holds the value "atom" or "rss" depending on the feed type set when
-     * when last exported.
-     *
-     * @var string
-     */
-    protected $type = null;
-
-    /**
-     * @var $extensions
-     */
-    protected $extensions;
-
-    /**
-     * Constructor: Primarily triggers the registration of core extensions and
-     * loads those appropriate to this data container.
-     *
-     */
-    public function __construct()
-    {
-        Writer::registerCoreExtensions();
-        $this->_loadExtensions();
-    }
-
-    /**
-     * Set a single author
-     *
-     * The following option keys are supported:
-     * 'name'  => (string) The name
-     * 'email' => (string) An optional email
-     * 'uri'   => (string) An optional and valid URI
-     *
-     * @param array $author
-     * @throws Exception\InvalidArgumentException If any value of $author not follow the format.
-     * @return AbstractFeed
-     */
-    public function addAuthor(array $author)
-    {
-        // Check array values
-        if (!array_key_exists('name', $author)
-            || empty($author['name'])
-            || !is_string($author['name'])
-        ) {
-            throw new Exception\InvalidArgumentException(
-                'Invalid parameter: author array must include a "name" key with a non-empty string value');
-        }
-
-        if (isset($author['email'])) {
-            if (empty($author['email']) || !is_string($author['email'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Invalid parameter: "email" array value must be a non-empty string');
-            }
-        }
-        if (isset($author['uri'])) {
-            if (empty($author['uri']) || !is_string($author['uri']) ||
-                !Uri::factory($author['uri'])->isValid()
-            ) {
-                throw new Exception\InvalidArgumentException(
-                    'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI');
-            }
-        }
-
-        $this->data['authors'][] = $author;
-
-        return $this;
-    }
-
-    /**
-     * Set an array with feed authors
-     *
-     * @see addAuthor
-     * @param array $authors
-     * @return AbstractFeed
-     */
-    public function addAuthors(array $authors)
-    {
-        foreach ($authors as $author) {
-            $this->addAuthor($author);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Set the copyright entry
-     *
-     * @param  string      $copyright
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setCopyright($copyright)
-    {
-        if (empty($copyright) || !is_string($copyright)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['copyright'] = $copyright;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed creation date
-     *
-     * @param null|int|DateTime
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setDateCreated($date = null)
-    {
-        if ($date === null) {
-            $date = new DateTime();
-        } elseif (is_int($date)) {
-            $date = new DateTime('@' . $date);
-        } elseif (!$date instanceof DateTime) {
-            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
-                                                         . ' passed as parameter');
-        }
-        $this->data['dateCreated'] = $date;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed modification date
-     *
-     * @param null|int|DateTime
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setDateModified($date = null)
-    {
-        if ($date === null) {
-            $date = new DateTime();
-        } elseif (is_int($date)) {
-            $date = new DateTime('@' . $date);
-        } elseif (!$date instanceof DateTime) {
-            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
-                                                         . ' passed as parameter');
-        }
-        $this->data['dateModified'] = $date;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed last-build date. Ignored for Atom 1.0.
-     *
-     * @param null|int|DateTime
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setLastBuildDate($date = null)
-    {
-        if ($date === null) {
-            $date = new DateTime();
-        } elseif (is_int($date)) {
-            $date = new DateTime('@' . $date);
-        } elseif (!$date instanceof DateTime) {
-            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
-                                                         . ' passed as parameter');
-        }
-        $this->data['lastBuildDate'] = $date;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed description
-     *
-     * @param string $description
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setDescription($description)
-    {
-        if (empty($description) || !is_string($description)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['description'] = $description;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed generator entry
-     *
-     * @param array|string $name
-     * @param null|string $version
-     * @param null|string $uri
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setGenerator($name, $version = null, $uri = null)
-    {
-        if (is_array($name)) {
-            $data = $name;
-            if (empty($data['name']) || !is_string($data['name'])) {
-                throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string');
-            }
-            $generator = array('name' => $data['name']);
-            if (isset($data['version'])) {
-                if (empty($data['version']) || !is_string($data['version'])) {
-                    throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string');
-                }
-                $generator['version'] = $data['version'];
-            }
-            if (isset($data['uri'])) {
-                if (empty($data['uri']) || !is_string($data['uri']) || !Uri::factory($data['uri'])->isValid()) {
-                    throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI');
-                }
-                $generator['uri'] = $data['uri'];
-            }
-        } else {
-            if (empty($name) || !is_string($name)) {
-                throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string');
-            }
-            $generator = array('name' => $name);
-            if (isset($version)) {
-                if (empty($version) || !is_string($version)) {
-                    throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string');
-                }
-                $generator['version'] = $version;
-            }
-            if (isset($uri)) {
-                if (empty($uri) || !is_string($uri) || !Uri::factory($uri)->isValid()) {
-                    throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI');
-                }
-                $generator['uri'] = $uri;
-            }
-        }
-        $this->data['generator'] = $generator;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed ID - URI or URN (via PCRE pattern) supported
-     *
-     * @param string $id
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setId($id)
-    {
-        if ((empty($id) || !is_string($id) || !Uri::factory($id)->isValid())
-            && !preg_match("#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#", $id)
-            && !$this->_validateTagUri($id)
-        ) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI');
-        }
-        $this->data['id'] = $id;
-
-        return $this;
-    }
-
-    /**
-     * Validate a URI using the tag scheme (RFC 4151)
-     *
-     * @param string $id
-     * @return bool
-     */
-    protected function _validateTagUri($id)
-    {
-        if (preg_match('/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/', $id, $matches)) {
-            $dvalid = false;
-            $date = $matches['date'];
-            $d6 = strtotime($date);
-            if ((strlen($date) == 4) && $date <= date('Y')) {
-                $dvalid = true;
-            } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) {
-                $dvalid = true;
-            } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) {
-                $dvalid = true;
-            }
-            $validator = new Validator\EmailAddress;
-            if ($validator->isValid($matches['name'])) {
-                $nvalid = true;
-            } else {
-                $nvalid = $validator->isValid('info@' . $matches['name']);
-            }
-            return $dvalid && $nvalid;
-        }
-        return false;
-    }
-
-    /**
-     * Set a feed image (URI at minimum). Parameter is a single array with the
-     * required key 'uri'. When rendering as RSS, the required keys are 'uri',
-     * 'title' and 'link'. RSS also specifies three optional parameters 'width',
-     * 'height' and 'description'. Only 'uri' is required and used for Atom rendering.
-     *
-     * @param array $data
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setImage(array $data)
-    {
-        if (empty($data['uri']) || !is_string($data['uri'])
-            || !Uri::factory($data['uri'])->isValid()
-        ) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter \'uri\''
-            . ' must be a non-empty string and valid URI/IRI');
-        }
-        $this->data['image'] = $data;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed language
-     *
-     * @param string $language
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setLanguage($language)
-    {
-        if (empty($language) || !is_string($language)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['language'] = $language;
-
-        return $this;
-    }
-
-    /**
-     * Set a link to the HTML source
-     *
-     * @param string $link
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setLink($link)
-    {
-        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI');
-        }
-        $this->data['link'] = $link;
-
-        return $this;
-    }
-
-    /**
-     * Set a link to an XML feed for any feed type/version
-     *
-     * @param string $link
-     * @param string $type
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setFeedLink($link, $type)
-    {
-        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "link"" must be a non-empty string and valid URI/IRI');
-        }
-        if (!in_array(strtolower($type), array('rss', 'rdf', 'atom'))) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "type"; You must declare the type of feed the link points to, i.e. RSS, RDF or Atom');
-        }
-        $this->data['feedLinks'][strtolower($type)] = $link;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed title
-     *
-     * @param string $title
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setTitle($title)
-    {
-        if (empty($title) || !is_string($title)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['title'] = $title;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed character encoding
-     *
-     * @param string $encoding
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setEncoding($encoding)
-    {
-        if (empty($encoding) || !is_string($encoding)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['encoding'] = $encoding;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed's base URL
-     *
-     * @param string $url
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function setBaseUrl($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value'
-            . ' must be a non-empty string and valid URI/IRI');
-        }
-        $this->data['baseUrl'] = $url;
-
-        return $this;
-    }
-
-    /**
-     * Add a Pubsubhubbub hub endpoint URL
-     *
-     * @param string $url
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function addHub($url)
-    {
-        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value'
-            . ' must be a non-empty string and valid URI/IRI');
-        }
-        if (!isset($this->data['hubs'])) {
-            $this->data['hubs'] = array();
-        }
-        $this->data['hubs'][] = $url;
-
-        return $this;
-    }
-
-    /**
-     * Add Pubsubhubbub hub endpoint URLs
-     *
-     * @param array $urls
-     * @return AbstractFeed
-     */
-    public function addHubs(array $urls)
-    {
-        foreach ($urls as $url) {
-            $this->addHub($url);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Add a feed category
-     *
-     * @param array $category
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractFeed
-     */
-    public function addCategory(array $category)
-    {
-        if (!isset($category['term'])) {
-            throw new Exception\InvalidArgumentException('Each category must be an array and '
-            . 'contain at least a "term" element containing the machine '
-            . ' readable category name');
-        }
-        if (isset($category['scheme'])) {
-            if (empty($category['scheme'])
-                || !is_string($category['scheme'])
-                || !Uri::factory($category['scheme'])->isValid()
-            ) {
-                throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of'
-                . ' a category must be a valid URI');
-            }
-        }
-        if (!isset($this->data['categories'])) {
-            $this->data['categories'] = array();
-        }
-        $this->data['categories'][] = $category;
-
-        return $this;
-    }
-
-    /**
-     * Set an array of feed categories
-     *
-     * @param array $categories
-     * @return AbstractFeed
-     */
-    public function addCategories(array $categories)
-    {
-        foreach ($categories as $category) {
-            $this->addCategory($category);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Get a single author
-     *
-     * @param  int $index
-     * @return string|null
-     */
-    public function getAuthor($index = 0)
-    {
-        if (isset($this->data['authors'][$index])) {
-            return $this->data['authors'][$index];
-        }
-
-        return;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (!array_key_exists('authors', $this->data)) {
-            return;
-        }
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the copyright entry
-     *
-     * @return string|null
-     */
-    public function getCopyright()
-    {
-        if (!array_key_exists('copyright', $this->data)) {
-            return;
-        }
-        return $this->data['copyright'];
-    }
-
-    /**
-     * Get the feed creation date
-     *
-     * @return string|null
-     */
-    public function getDateCreated()
-    {
-        if (!array_key_exists('dateCreated', $this->data)) {
-            return;
-        }
-        return $this->data['dateCreated'];
-    }
-
-    /**
-     * Get the feed modification date
-     *
-     * @return string|null
-     */
-    public function getDateModified()
-    {
-        if (!array_key_exists('dateModified', $this->data)) {
-            return;
-        }
-        return $this->data['dateModified'];
-    }
-
-    /**
-     * Get the feed last-build date
-     *
-     * @return string|null
-     */
-    public function getLastBuildDate()
-    {
-        if (!array_key_exists('lastBuildDate', $this->data)) {
-            return;
-        }
-        return $this->data['lastBuildDate'];
-    }
-
-    /**
-     * Get the feed description
-     *
-     * @return string|null
-     */
-    public function getDescription()
-    {
-        if (!array_key_exists('description', $this->data)) {
-            return;
-        }
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the feed generator entry
-     *
-     * @return string|null
-     */
-    public function getGenerator()
-    {
-        if (!array_key_exists('generator', $this->data)) {
-            return;
-        }
-        return $this->data['generator'];
-    }
-
-    /**
-     * Get the feed ID
-     *
-     * @return string|null
-     */
-    public function getId()
-    {
-        if (!array_key_exists('id', $this->data)) {
-            return;
-        }
-        return $this->data['id'];
-    }
-
-    /**
-     * Get the feed image URI
-     *
-     * @return array
-     */
-    public function getImage()
-    {
-        if (!array_key_exists('image', $this->data)) {
-            return;
-        }
-        return $this->data['image'];
-    }
-
-    /**
-     * Get the feed language
-     *
-     * @return string|null
-     */
-    public function getLanguage()
-    {
-        if (!array_key_exists('language', $this->data)) {
-            return;
-        }
-        return $this->data['language'];
-    }
-
-    /**
-     * Get a link to the HTML source
-     *
-     * @return string|null
-     */
-    public function getLink()
-    {
-        if (!array_key_exists('link', $this->data)) {
-            return;
-        }
-        return $this->data['link'];
-    }
-
-    /**
-     * Get a link to the XML feed
-     *
-     * @return string|null
-     */
-    public function getFeedLinks()
-    {
-        if (!array_key_exists('feedLinks', $this->data)) {
-            return;
-        }
-        return $this->data['feedLinks'];
-    }
-
-    /**
-     * Get the feed title
-     *
-     * @return string|null
-     */
-    public function getTitle()
-    {
-        if (!array_key_exists('title', $this->data)) {
-            return;
-        }
-        return $this->data['title'];
-    }
-
-    /**
-     * Get the feed character encoding
-     *
-     * @return string|null
-     */
-    public function getEncoding()
-    {
-        if (!array_key_exists('encoding', $this->data)) {
-            return 'UTF-8';
-        }
-        return $this->data['encoding'];
-    }
-
-    /**
-     * Get the feed's base url
-     *
-     * @return string|null
-     */
-    public function getBaseUrl()
-    {
-        if (!array_key_exists('baseUrl', $this->data)) {
-            return;
-        }
-        return $this->data['baseUrl'];
-    }
-
-    /**
-     * Get the URLs used as Pubsubhubbub hubs endpoints
-     *
-     * @return string|null
-     */
-    public function getHubs()
-    {
-        if (!array_key_exists('hubs', $this->data)) {
-            return;
-        }
-        return $this->data['hubs'];
-    }
-
-    /**
-     * Get the feed categories
-     *
-     * @return string|null
-     */
-    public function getCategories()
-    {
-        if (!array_key_exists('categories', $this->data)) {
-            return;
-        }
-        return $this->data['categories'];
-    }
-
-    /**
-     * Resets the instance and deletes all data
-     *
-     * @return void
-     */
-    public function reset()
-    {
-        $this->data = array();
-    }
-
-    /**
-     * Set the current feed type being exported to "rss" or "atom". This allows
-     * other objects to gracefully choose whether to execute or not, depending
-     * on their appropriateness for the current type, e.g. renderers.
-     *
-     * @param string $type
-     * @return AbstractFeed
-     */
-    public function setType($type)
-    {
-        $this->type = $type;
-        return $this;
-    }
-
-    /**
-     * Retrieve the current or last feed type exported.
-     *
-     * @return string Value will be "rss" or "atom"
-     */
-    public function getType()
-    {
-        return $this->type;
-    }
-
-    /**
-     * Unset a specific data point
-     *
-     * @param string $name
-     * @return AbstractFeed
-     */
-    public function remove($name)
-    {
-        if (isset($this->data[$name])) {
-            unset($this->data[$name]);
-        }
-        return $this;
-    }
-
-    /**
-     * Method overloading: call given method on first extension implementing it
-     *
-     * @param  string $method
-     * @param  array $args
-     * @return mixed
-     * @throws Exception\BadMethodCallException if no extensions implements the method
-     */
-    public function __call($method, $args)
-    {
-        foreach ($this->extensions as $extension) {
-            try {
-                return call_user_func_array(array($extension, $method), $args);
-            } catch (Exception\BadMethodCallException $e) {
-            }
-        }
-        throw new Exception\BadMethodCallException(
-            'Method: ' . $method . ' does not exist and could not be located on a registered Extension'
-        );
-    }
-
-    /**
-     * Load extensions from Zend\Feed\Writer\Writer
-     *
-     * @throws Exception\RuntimeException
-     * @return void
-     */
-    protected function _loadExtensions()
-    {
-        $all     = Writer::getExtensions();
-        $manager = Writer::getExtensionManager();
-        $exts    = $all['feed'];
-        foreach ($exts as $ext) {
-            if (!$manager->has($ext)) {
-                throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; could not resolve to class', $ext));
-            }
-            $this->extensions[$ext] = $manager->get($ext);
-            $this->extensions[$ext]->setEncoding($this->getEncoding());
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Deleted.php b/core/vendor/zendframework/zend-feed/Writer/Deleted.php
deleted file mode 100644
index 1d72fc920db45fc31c2bd3af0ebf44c75fe717e3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Deleted.php
+++ /dev/null
@@ -1,236 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-use DateTime;
-use Zend\Feed\Uri;
-
-/**
-*/
-class Deleted
-{
-    /**
-     * Internal array containing all data associated with this entry or item.
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Holds the value "atom" or "rss" depending on the feed type set when
-     * when last exported.
-     *
-     * @var string
-     */
-    protected $type = null;
-
-    /**
-     * Set the feed character encoding
-     *
-     * @param  $encoding
-     * @throws Exception\InvalidArgumentException
-     * @return string|null
-     * @return Deleted
-     */
-    public function setEncoding($encoding)
-    {
-        if (empty($encoding) || !is_string($encoding)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['encoding'] = $encoding;
-
-        return $this;
-    }
-
-    /**
-     * Get the feed character encoding
-     *
-     * @return string|null
-     */
-    public function getEncoding()
-    {
-        if (!array_key_exists('encoding', $this->data)) {
-            return 'UTF-8';
-        }
-        return $this->data['encoding'];
-    }
-
-    /**
-     * Unset a specific data point
-     *
-     * @param string $name
-     * @return Deleted
-     */
-    public function remove($name)
-    {
-        if (isset($this->data[$name])) {
-            unset($this->data[$name]);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Set the current feed type being exported to "rss" or "atom". This allows
-     * other objects to gracefully choose whether to execute or not, depending
-     * on their appropriateness for the current type, e.g. renderers.
-     *
-     * @param string $type
-     * @return Deleted
-     */
-    public function setType($type)
-    {
-        $this->type = $type;
-        return $this;
-    }
-
-    /**
-     * Retrieve the current or last feed type exported.
-     *
-     * @return string Value will be "rss" or "atom"
-     */
-    public function getType()
-    {
-        return $this->type;
-    }
-
-    /**
-     * Set reference
-     *
-     * @param $reference
-     * @throws Exception\InvalidArgumentException
-     * @return Deleted
-     */
-    public function setReference($reference)
-    {
-        if (empty($reference) || !is_string($reference)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: reference must be a non-empty string');
-        }
-        $this->data['reference'] = $reference;
-
-        return $this;
-    }
-
-    /**
-     * @return string
-     */
-    public function getReference()
-    {
-        if (!array_key_exists('reference', $this->data)) {
-            return;
-        }
-        return $this->data['reference'];
-    }
-
-    /**
-     * Set when
-     *
-     * @param null|string|DateTime $date
-     * @throws Exception\InvalidArgumentException
-     * @return Deleted
-     */
-    public function setWhen($date = null)
-    {
-        if ($date === null) {
-            $date = new DateTime();
-        } elseif (is_int($date)) {
-            $date = new DateTime('@' . $date);
-        } elseif (!$date instanceof DateTime) {
-            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
-            . ' passed as parameter');
-        }
-        $this->data['when'] = $date;
-
-        return $this;
-    }
-
-    /**
-     * @return DateTime
-     */
-    public function getWhen()
-    {
-        if (!array_key_exists('when', $this->data)) {
-            return;
-        }
-        return $this->data['when'];
-    }
-
-    /**
-     * Set by
-     *
-     * @param array $by
-     * @throws Exception\InvalidArgumentException
-     * @return Deleted
-     */
-    public function setBy(array $by)
-    {
-        $author = array();
-        if (!array_key_exists('name', $by)
-            || empty($by['name'])
-            || !is_string($by['name'])
-        ) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: author array must include a'
-            . ' "name" key with a non-empty string value');
-        }
-        $author['name'] = $by['name'];
-        if (isset($by['email'])) {
-            if (empty($by['email']) || !is_string($by['email'])) {
-                throw new Exception\InvalidArgumentException('Invalid parameter: "email" array'
-                . ' value must be a non-empty string');
-            }
-            $author['email'] = $by['email'];
-        }
-        if (isset($by['uri'])) {
-            if (empty($by['uri'])
-                || !is_string($by['uri'])
-                || !Uri::factory($by['uri'])->isValid()
-            ) {
-                throw new Exception\InvalidArgumentException('Invalid parameter: "uri" array value must'
-                 . ' be a non-empty string and valid URI/IRI');
-            }
-            $author['uri'] = $by['uri'];
-        }
-        $this->data['by'] = $author;
-
-        return $this;
-    }
-
-    /**
-     * @return string
-     */
-    public function getBy()
-    {
-        if (!array_key_exists('by', $this->data)) {
-            return;
-        }
-        return $this->data['by'];
-    }
-
-    /**
-     * @param string $comment
-     * @return Deleted
-     */
-    public function setComment($comment)
-    {
-        $this->data['comment'] = $comment;
-        return $this;
-    }
-
-    /**
-     * @return string
-     */
-    public function getComment()
-    {
-        if (!array_key_exists('comment', $this->data)) {
-            return;
-        }
-        return $this->data['comment'];
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Entry.php
deleted file mode 100644
index 78b968dcbcd27a5cc487f3d499fc0088df4e0577..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Entry.php
+++ /dev/null
@@ -1,765 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-use DateTime;
-use Zend\Feed\Uri;
-
-/**
-*/
-class Entry
-{
-    /**
-     * Internal array containing all data associated with this entry or item.
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Registered extensions
-     *
-     * @var array
-     */
-    protected $extensions = array();
-
-    /**
-     * Holds the value "atom" or "rss" depending on the feed type set when
-     * when last exported.
-     *
-     * @var string
-     */
-    protected $type = null;
-
-    /**
-     * Constructor: Primarily triggers the registration of core extensions and
-     * loads those appropriate to this data container.
-     *
-     */
-    public function __construct()
-    {
-        Writer::registerCoreExtensions();
-        $this->_loadExtensions();
-    }
-
-    /**
-     * Set a single author
-     *
-     * The following option keys are supported:
-     * 'name'  => (string) The name
-     * 'email' => (string) An optional email
-     * 'uri'   => (string) An optional and valid URI
-     *
-     * @param array $author
-     * @throws Exception\InvalidArgumentException If any value of $author not follow the format.
-     * @return Entry
-     */
-    public function addAuthor(array $author)
-    {
-        // Check array values
-        if (!array_key_exists('name', $author)
-            || empty($author['name'])
-            || !is_string($author['name'])
-        ) {
-            throw new Exception\InvalidArgumentException(
-                'Invalid parameter: author array must include a "name" key with a non-empty string value');
-        }
-
-        if (isset($author['email'])) {
-            if (empty($author['email']) || !is_string($author['email'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Invalid parameter: "email" array value must be a non-empty string');
-            }
-        }
-        if (isset($author['uri'])) {
-            if (empty($author['uri']) || !is_string($author['uri']) ||
-                !Uri::factory($author['uri'])->isValid()
-            ) {
-                throw new Exception\InvalidArgumentException(
-                    'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI');
-            }
-        }
-
-        $this->data['authors'][] = $author;
-
-        return $this;
-    }
-
-    /**
-     * Set an array with feed authors
-     *
-     * @see addAuthor
-     * @param array $authors
-     * @return Entry
-     */
-    public function addAuthors(array $authors)
-    {
-        foreach ($authors as $author) {
-            $this->addAuthor($author);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Set the feed character encoding
-     *
-     * @param string $encoding
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setEncoding($encoding)
-    {
-        if (empty($encoding) || !is_string($encoding)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['encoding'] = $encoding;
-
-        return $this;
-    }
-
-    /**
-     * Get the feed character encoding
-     *
-     * @return string|null
-     */
-    public function getEncoding()
-    {
-        if (!array_key_exists('encoding', $this->data)) {
-            return 'UTF-8';
-        }
-        return $this->data['encoding'];
-    }
-
-    /**
-     * Set the copyright entry
-     *
-     * @param string $copyright
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setCopyright($copyright)
-    {
-        if (empty($copyright) || !is_string($copyright)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['copyright'] = $copyright;
-
-        return $this;
-    }
-
-    /**
-     * Set the entry's content
-     *
-     * @param string $content
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setContent($content)
-    {
-        if (empty($content) || !is_string($content)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['content'] = $content;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed creation date
-     *
-     * @param null|int|DateTime $date
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setDateCreated($date = null)
-    {
-        if ($date === null) {
-            $date = new DateTime();
-        } elseif (is_int($date)) {
-            $date = new DateTime('@' . $date);
-        } elseif (!$date instanceof DateTime) {
-            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter');
-        }
-        $this->data['dateCreated'] = $date;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed modification date
-     *
-     * @param null|int|DateTime $date
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setDateModified($date = null)
-    {
-        if ($date === null) {
-            $date = new DateTime();
-        } elseif (is_int($date)) {
-            $date = new DateTime('@' . $date);
-        } elseif (!$date instanceof DateTime) {
-            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter');
-        }
-        $this->data['dateModified'] = $date;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed description
-     *
-     * @param string $description
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setDescription($description)
-    {
-        if (empty($description) || !is_string($description)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['description'] = $description;
-
-        return $this;
-    }
-
-    /**
-     * Set the feed ID
-     *
-     * @param string $id
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setId($id)
-    {
-        if (empty($id) || !is_string($id)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['id'] = $id;
-
-        return $this;
-    }
-
-    /**
-     * Set a link to the HTML source of this entry
-     *
-     * @param string $link
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setLink($link)
-    {
-        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI');
-        }
-        $this->data['link'] = $link;
-
-        return $this;
-    }
-
-    /**
-     * Set the number of comments associated with this entry
-     *
-     * @param int $count
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setCommentCount($count)
-    {
-        if (!is_numeric($count) || (int) $count != $count || (int) $count < 0) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "count" must be a positive integer number or zero');
-        }
-        $this->data['commentCount'] = (int) $count;
-
-        return $this;
-    }
-
-    /**
-     * Set a link to a HTML page containing comments associated with this entry
-     *
-     * @param string $link
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setCommentLink($link)
-    {
-        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI');
-        }
-        $this->data['commentLink'] = $link;
-
-        return $this;
-    }
-
-    /**
-     * Set a link to an XML feed for any comments associated with this entry
-     *
-     * @param array $link
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setCommentFeedLink(array $link)
-    {
-        if (!isset($link['uri']) || !is_string($link['uri']) || !Uri::factory($link['uri'])->isValid()) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI');
-        }
-        if (!isset($link['type']) || !in_array($link['type'], array('atom', 'rss', 'rdf'))) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: "type" must be one'
-            . ' of "atom", "rss" or "rdf"');
-        }
-        if (!isset($this->data['commentFeedLinks'])) {
-            $this->data['commentFeedLinks'] = array();
-        }
-        $this->data['commentFeedLinks'][] = $link;
-
-        return $this;
-    }
-
-    /**
-     * Set a links to an XML feed for any comments associated with this entry.
-     * Each link is an array with keys "uri" and "type", where type is one of:
-     * "atom", "rss" or "rdf".
-     *
-     * @param array $links
-     * @return Entry
-     */
-    public function setCommentFeedLinks(array $links)
-    {
-        foreach ($links as $link) {
-            $this->setCommentFeedLink($link);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Set the feed title
-     *
-     * @param string $title
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setTitle($title)
-    {
-        if (empty($title) || !is_string($title)) {
-            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
-        }
-        $this->data['title'] = $title;
-
-        return $this;
-    }
-
-    /**
-     * Get an array with feed authors
-     *
-     * @return array
-     */
-    public function getAuthors()
-    {
-        if (!array_key_exists('authors', $this->data)) {
-            return;
-        }
-        return $this->data['authors'];
-    }
-
-    /**
-     * Get the entry content
-     *
-     * @return string
-     */
-    public function getContent()
-    {
-        if (!array_key_exists('content', $this->data)) {
-            return;
-        }
-        return $this->data['content'];
-    }
-
-    /**
-     * Get the entry copyright information
-     *
-     * @return string
-     */
-    public function getCopyright()
-    {
-        if (!array_key_exists('copyright', $this->data)) {
-            return;
-        }
-        return $this->data['copyright'];
-    }
-
-    /**
-     * Get the entry creation date
-     *
-     * @return string
-     */
-    public function getDateCreated()
-    {
-        if (!array_key_exists('dateCreated', $this->data)) {
-            return;
-        }
-        return $this->data['dateCreated'];
-    }
-
-    /**
-     * Get the entry modification date
-     *
-     * @return string
-     */
-    public function getDateModified()
-    {
-        if (!array_key_exists('dateModified', $this->data)) {
-            return;
-        }
-        return $this->data['dateModified'];
-    }
-
-    /**
-     * Get the entry description
-     *
-     * @return string
-     */
-    public function getDescription()
-    {
-        if (!array_key_exists('description', $this->data)) {
-            return;
-        }
-        return $this->data['description'];
-    }
-
-    /**
-     * Get the entry ID
-     *
-     * @return string
-     */
-    public function getId()
-    {
-        if (!array_key_exists('id', $this->data)) {
-            return;
-        }
-        return $this->data['id'];
-    }
-
-    /**
-     * Get a link to the HTML source
-     *
-     * @return string|null
-     */
-    public function getLink()
-    {
-        if (!array_key_exists('link', $this->data)) {
-            return;
-        }
-        return $this->data['link'];
-    }
-
-
-    /**
-     * Get all links
-     *
-     * @return array
-     */
-    public function getLinks()
-    {
-        if (!array_key_exists('links', $this->data)) {
-            return;
-        }
-        return $this->data['links'];
-    }
-
-    /**
-     * Get the entry title
-     *
-     * @return string
-     */
-    public function getTitle()
-    {
-        if (!array_key_exists('title', $this->data)) {
-            return;
-        }
-        return $this->data['title'];
-    }
-
-    /**
-     * Get the number of comments/replies for current entry
-     *
-     * @return int
-     */
-    public function getCommentCount()
-    {
-        if (!array_key_exists('commentCount', $this->data)) {
-            return;
-        }
-        return $this->data['commentCount'];
-    }
-
-    /**
-     * Returns a URI pointing to the HTML page where comments can be made on this entry
-     *
-     * @return string
-     */
-    public function getCommentLink()
-    {
-        if (!array_key_exists('commentLink', $this->data)) {
-            return;
-        }
-        return $this->data['commentLink'];
-    }
-
-    /**
-     * Returns an array of URIs pointing to a feed of all comments for this entry
-     * where the array keys indicate the feed type (atom, rss or rdf).
-     *
-     * @return string
-     */
-    public function getCommentFeedLinks()
-    {
-        if (!array_key_exists('commentFeedLinks', $this->data)) {
-            return;
-        }
-        return $this->data['commentFeedLinks'];
-    }
-
-    /**
-     * Add an entry category
-     *
-     * @param array $category
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function addCategory(array $category)
-    {
-        if (!isset($category['term'])) {
-            throw new Exception\InvalidArgumentException('Each category must be an array and '
-            . 'contain at least a "term" element containing the machine '
-            . ' readable category name');
-        }
-        if (isset($category['scheme'])) {
-            if (empty($category['scheme'])
-                || !is_string($category['scheme'])
-                || !Uri::factory($category['scheme'])->isValid()
-            ) {
-                throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of'
-                . ' a category must be a valid URI');
-            }
-        }
-        if (!isset($this->data['categories'])) {
-            $this->data['categories'] = array();
-        }
-        $this->data['categories'][] = $category;
-
-        return $this;
-    }
-
-    /**
-     * Set an array of entry categories
-     *
-     * @param array $categories
-     * @return Entry
-     */
-    public function addCategories(array $categories)
-    {
-        foreach ($categories as $category) {
-            $this->addCategory($category);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Get the entry categories
-     *
-     * @return string|null
-     */
-    public function getCategories()
-    {
-        if (!array_key_exists('categories', $this->data)) {
-            return;
-        }
-        return $this->data['categories'];
-    }
-
-    /**
-     * Adds an enclosure to the entry. The array parameter may contain the
-     * keys 'uri', 'type' and 'length'. Only 'uri' is required for Atom, though the
-     * others must also be provided or RSS rendering (where they are required)
-     * will throw an Exception.
-     *
-     * @param array $enclosure
-     * @throws Exception\InvalidArgumentException
-     * @return Entry
-     */
-    public function setEnclosure(array $enclosure)
-    {
-        if (!isset($enclosure['uri'])) {
-            throw new Exception\InvalidArgumentException('Enclosure "uri" is not set');
-        }
-        if (!Uri::factory($enclosure['uri'])->isValid()) {
-            throw new Exception\InvalidArgumentException('Enclosure "uri" is not a valid URI/IRI');
-        }
-        $this->data['enclosure'] = $enclosure;
-
-        return $this;
-    }
-
-    /**
-     * Retrieve an array of all enclosures to be added to entry.
-     *
-     * @return array
-     */
-    public function getEnclosure()
-    {
-        if (!array_key_exists('enclosure', $this->data)) {
-            return;
-        }
-        return $this->data['enclosure'];
-    }
-
-    /**
-     * Unset a specific data point
-     *
-     * @param string $name
-     * @return Entry
-     */
-    public function remove($name)
-    {
-        if (isset($this->data[$name])) {
-            unset($this->data[$name]);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Get registered extensions
-     *
-     * @return array
-     */
-    public function getExtensions()
-    {
-        return $this->extensions;
-    }
-
-    /**
-     * Return an Extension object with the matching name (postfixed with _Entry)
-     *
-     * @param string $name
-     * @return object
-     */
-    public function getExtension($name)
-    {
-        if (array_key_exists($name . '\\Entry', $this->extensions)) {
-            return $this->extensions[$name . '\\Entry'];
-        }
-        return;
-    }
-
-    /**
-     * Set the current feed type being exported to "rss" or "atom". This allows
-     * other objects to gracefully choose whether to execute or not, depending
-     * on their appropriateness for the current type, e.g. renderers.
-     *
-     * @param string $type
-     * @return Entry
-     */
-    public function setType($type)
-    {
-        $this->type = $type;
-        return $this;
-    }
-
-    /**
-     * Retrieve the current or last feed type exported.
-     *
-     * @return string Value will be "rss" or "atom"
-     */
-    public function getType()
-    {
-        return $this->type;
-    }
-
-    /**
-     * Method overloading: call given method on first extension implementing it
-     *
-     * @param  string $method
-     * @param  array $args
-     * @return mixed
-     * @throws Exception\BadMethodCallException if no extensions implements the method
-     */
-    public function __call($method, $args)
-    {
-        foreach ($this->extensions as $extension) {
-            try {
-                return call_user_func_array(array($extension, $method), $args);
-            } catch (\BadMethodCallException $e) {
-            }
-        }
-        throw new Exception\BadMethodCallException('Method: ' . $method
-            . ' does not exist and could not be located on a registered Extension');
-    }
-
-    /**
-     * Creates a new Zend\Feed\Writer\Source data container for use. This is NOT
-     * added to the current feed automatically, but is necessary to create a
-     * container with some initial values preset based on the current feed data.
-     *
-     * @return Source
-     */
-    public function createSource()
-    {
-        $source = new Source;
-        if ($this->getEncoding()) {
-            $source->setEncoding($this->getEncoding());
-        }
-        $source->setType($this->getType());
-        return $source;
-    }
-
-    /**
-     * Appends a Zend\Feed\Writer\Entry object representing a new entry/item
-     * the feed data container's internal group of entries.
-     *
-     * @param Source $source
-     * @return Entry
-     */
-    public function setSource(Source $source)
-    {
-        $this->data['source'] = $source;
-        return $this;
-    }
-
-    /**
-     * @return Source
-     */
-    public function getSource()
-    {
-        if (isset($this->data['source'])) {
-            return $this->data['source'];
-        }
-        return;
-    }
-
-    /**
-     * Load extensions from Zend\Feed\Writer\Writer
-     *
-     * @return void
-     */
-    protected function _loadExtensions()
-    {
-        $all     = Writer::getExtensions();
-        $manager = Writer::getExtensionManager();
-        $exts    = $all['entry'];
-        foreach ($exts as $ext) {
-            $this->extensions[$ext] = $manager->get($ext);
-            $this->extensions[$ext]->setEncoding($this->getEncoding());
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-feed/Writer/Exception/BadMethodCallException.php
deleted file mode 100644
index b2ea2bef008cb55f5cbab61369b35b06ea0c6c45..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Exception/BadMethodCallException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Exception;
-
-use Zend\Feed\Exception;
-
-/**
- * Feed exceptions
- *
- * Class to represent exceptions that occur during Feed operations.
- */
-class BadMethodCallException extends Exception\BadMethodCallException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/Writer/Exception/ExceptionInterface.php
deleted file mode 100644
index ee8bdaf62bd348caf31ec32404b4cd5ce5dc62ae..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Exception;
-
-/**
- * Feed exceptions
- *
- * Interface to represent exceptions that occur during Feed operations.
- */
-interface ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/Writer/Exception/InvalidArgumentException.php
deleted file mode 100644
index d8c4a8b82cb721a69b1d5f84d9416bb592ba4577..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Exception;
-
-use Zend\Feed\Exception;
-
-/**
- * Feed exceptions
- *
- * Class to represent exceptions that occur during Feed operations.
- */
-class InvalidArgumentException extends Exception\InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/Writer/Exception/RuntimeException.php
deleted file mode 100644
index ae8ee361f7c7528418f0a90457b4f08fdaffd785..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Exception/RuntimeException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Exception;
-
-use Zend\Feed\Exception;
-
-class RuntimeException extends Exception\RuntimeException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/AbstractRenderer.php b/core/vendor/zendframework/zend-feed/Writer/Extension/AbstractRenderer.php
deleted file mode 100644
index 1a32b4756293e56d0eda7732df350313ec3db284..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/AbstractRenderer.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension;
-
-use DOMDocument;
-use DOMElement;
-
-/**
-*/
-abstract class AbstractRenderer implements RendererInterface
-{
-    /**
-     * @var DOMDocument
-     */
-    protected $dom = null;
-
-    /**
-     * @var mixed
-     */
-    protected $entry = null;
-
-    /**
-     * @var DOMElement
-     */
-    protected $base = null;
-
-    /**
-     * @var mixed
-     */
-    protected $container = null;
-
-    /**
-     * @var string
-     */
-    protected $type = null;
-
-    /**
-     * @var DOMElement
-     */
-    protected $rootElement = null;
-
-    /**
-     * Encoding of all text values
-     *
-     * @var string
-     */
-    protected $encoding = 'UTF-8';
-
-    /**
-     * Set the data container
-     *
-     * @param  mixed $container
-     * @return AbstractRenderer
-     */
-    public function setDataContainer($container)
-    {
-        $this->container = $container;
-        return $this;
-    }
-
-    /**
-     * Set feed encoding
-     *
-     * @param  string $enc
-     * @return AbstractRenderer
-     */
-    public function setEncoding($enc)
-    {
-        $this->encoding = $enc;
-        return $this;
-    }
-
-    /**
-     * Get feed encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Set DOMDocument and DOMElement on which to operate
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $base
-     * @return AbstractRenderer
-     */
-    public function setDomDocument(DOMDocument $dom, DOMElement $base)
-    {
-        $this->dom  = $dom;
-        $this->base = $base;
-        return $this;
-    }
-
-    /**
-     * Get data container being rendered
-     *
-     * @return mixed
-     */
-    public function getDataContainer()
-    {
-        return $this->container;
-    }
-
-    /**
-     * Set feed type
-     *
-     * @param  string $type
-     * @return AbstractRenderer
-     */
-    public function setType($type)
-    {
-        $this->type = $type;
-        return $this;
-    }
-
-    /**
-     * Get feedtype
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        return $this->type;
-    }
-
-    /**
-     * Set root element of document
-     *
-     * @param  DOMElement $root
-     * @return AbstractRenderer
-     */
-    public function setRootElement(DOMElement $root)
-    {
-        $this->rootElement = $root;
-        return $this;
-    }
-
-    /**
-     * Get root element
-     *
-     * @return DOMElement
-     */
-    public function getRootElement()
-    {
-        return $this->rootElement;
-    }
-
-    /**
-     * Append namespaces to feed
-     *
-     * @return void
-     */
-    abstract protected function _appendNamespaces();
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/Atom/Renderer/Feed.php b/core/vendor/zendframework/zend-feed/Writer/Extension/Atom/Renderer/Feed.php
deleted file mode 100644
index 25571c0e0d63185a1e8e844700c60b070c09fcbe..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/Atom/Renderer/Feed.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\Atom\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Feed extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render feed
-     *
-     * @return void
-     */
-    public function render()
-    {
-        /**
-         * RSS 2.0 only. Used mainly to include Atom links and
-         * Pubsubhubbub Hub endpoint URIs under the Atom namespace
-         */
-        if (strtolower($this->getType()) == 'atom') {
-            return;
-        }
-        $this->_setFeedLinks($this->dom, $this->base);
-        $this->_setHubs($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append namespaces to root element of feed
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:atom',
-            'http://www.w3.org/2005/Atom');
-    }
-
-    /**
-     * Set feed link elements
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setFeedLinks(DOMDocument $dom, DOMElement $root)
-    {
-        $flinks = $this->getDataContainer()->getFeedLinks();
-        if (!$flinks || empty($flinks)) {
-            return;
-        }
-        foreach ($flinks as $type => $href) {
-            if (strtolower($type) == $this->getType()) { // issue 2605
-                $mime  = 'application/' . strtolower($type) . '+xml';
-                $flink = $dom->createElement('atom:link');
-                $root->appendChild($flink);
-                $flink->setAttribute('rel', 'self');
-                $flink->setAttribute('type', $mime);
-                $flink->setAttribute('href', $href);
-            }
-        }
-        $this->called = true;
-    }
-
-    /**
-     * Set PuSH hubs
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setHubs(DOMDocument $dom, DOMElement $root)
-    {
-        $hubs = $this->getDataContainer()->getHubs();
-        if (!$hubs || empty($hubs)) {
-            return;
-        }
-        foreach ($hubs as $hubUrl) {
-            $hub = $dom->createElement('atom:link');
-            $hub->setAttribute('rel', 'hub');
-            $hub->setAttribute('href', $hubUrl);
-            $root->appendChild($hub);
-        }
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/Content/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Extension/Content/Renderer/Entry.php
deleted file mode 100644
index 939b2492bc921533b9e9fe801f2090da5a9b1828..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/Content/Renderer/Entry.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\Content\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render entry
-     *
-     * @return void
-     */
-    public function render()
-    {
-        if (strtolower($this->getType()) == 'atom') {
-            return;
-        }
-        $this->_setContent($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append namespaces to root element
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:content',
-            'http://purl.org/rss/1.0/modules/content/');
-    }
-
-    /**
-     * Set entry content
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setContent(DOMDocument $dom, DOMElement $root)
-    {
-        $content = $this->getDataContainer()->getContent();
-        if (!$content) {
-            return;
-        }
-        $element = $dom->createElement('content:encoded');
-        $root->appendChild($element);
-        $cdata = $dom->createCDATASection($content);
-        $element->appendChild($cdata);
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/DublinCore/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Extension/DublinCore/Renderer/Entry.php
deleted file mode 100644
index 5cc86cd6b8bdb6b174cfc2a6e78f2b675d5db8f5..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/DublinCore/Renderer/Entry.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\DublinCore\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render entry
-     *
-     * @return void
-     */
-    public function render()
-    {
-        if (strtolower($this->getType()) == 'atom') {
-            return;
-        }
-        $this->_setAuthors($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append namespaces to entry
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:dc',
-            'http://purl.org/dc/elements/1.1/');
-    }
-
-    /**
-     * Set entry author elements
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->getDataContainer()->getAuthors();
-        if (!$authors || empty($authors)) {
-            return;
-        }
-        foreach ($authors as $data) {
-            $author = $this->dom->createElement('dc:creator');
-            if (array_key_exists('name', $data)) {
-                $text = $dom->createTextNode($data['name']);
-                $author->appendChild($text);
-                $root->appendChild($author);
-            }
-        }
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/DublinCore/Renderer/Feed.php b/core/vendor/zendframework/zend-feed/Writer/Extension/DublinCore/Renderer/Feed.php
deleted file mode 100644
index 160b5a48481fecd03e5d13a9bbe89479ec1eba74..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/DublinCore/Renderer/Feed.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\DublinCore\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Feed extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render feed
-     *
-     * @return void
-     */
-    public function render()
-    {
-        if (strtolower($this->getType()) == 'atom') {
-            return;
-        }
-        $this->_setAuthors($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append namespaces to feed element
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:dc',
-            'http://purl.org/dc/elements/1.1/');
-    }
-
-    /**
-     * Set feed authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->getDataContainer()->getAuthors();
-        if (!$authors || empty($authors)) {
-            return;
-        }
-        foreach ($authors as $data) {
-            $author = $this->dom->createElement('dc:creator');
-            if (array_key_exists('name', $data)) {
-                $text = $dom->createTextNode($data['name']);
-                $author->appendChild($text);
-                $root->appendChild($author);
-            }
-        }
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Entry.php
deleted file mode 100644
index c06e8a97021894f9d92caa4270fd1bc42e81365e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Entry.php
+++ /dev/null
@@ -1,246 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\ITunes;
-
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Extension;
-use Zend\Stdlib\StringUtils;
-use Zend\Stdlib\StringWrapper\StringWrapperInterface;
-
-/**
-*/
-class Entry
-{
-    /**
-     * Array of Feed data for rendering by Extension's renderers
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Encoding of all text values
-     *
-     * @var string
-     */
-    protected $encoding = 'UTF-8';
-
-    /**
-     * The used string wrapper supporting encoding
-     *
-     * @var StringWrapperInterface
-     */
-    protected $stringWrapper;
-
-    public function __construct()
-    {
-        $this->stringWrapper = StringUtils::getWrapper($this->encoding);
-    }
-
-    /**
-     * Set feed encoding
-     *
-     * @param  string $enc
-     * @return Entry
-     */
-    public function setEncoding($enc)
-    {
-        $this->stringWrapper = StringUtils::getWrapper($enc);
-        $this->encoding      = $enc;
-        return $this;
-    }
-
-    /**
-     * Get feed encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Set a block value of "yes" or "no". You may also set an empty string.
-     *
-     * @param  string
-     * @return Entry
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesBlock($value)
-    {
-        if (!ctype_alpha($value) && strlen($value) > 0) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
-            . ' contain alphabetic characters');
-        }
-
-        if ($this->stringWrapper->strlen($value) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
-            . ' contain a maximum of 255 characters');
-        }
-        $this->data['block'] = $value;
-    }
-
-    /**
-     * Add authors to itunes entry
-     *
-     * @param  array $values
-     * @return Entry
-     */
-    public function addItunesAuthors(array $values)
-    {
-        foreach ($values as $value) {
-            $this->addItunesAuthor($value);
-        }
-        return $this;
-    }
-
-    /**
-     * Add author to itunes entry
-     *
-     * @param  string $value
-     * @return Entry
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function addItunesAuthor($value)
-    {
-        if ($this->stringWrapper->strlen($value) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only'
-            . ' contain a maximum of 255 characters each');
-        }
-        if (!isset($this->data['authors'])) {
-            $this->data['authors'] = array();
-        }
-        $this->data['authors'][] = $value;
-        return $this;
-    }
-
-    /**
-     * Set duration
-     *
-     * @param  int $value
-     * @return Entry
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesDuration($value)
-    {
-        $value = (string) $value;
-        if (!ctype_digit($value)
-            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value)
-            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value)
-        ) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only'
-            . ' be of a specified [[HH:]MM:]SS format');
-        }
-        $this->data['duration'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set "explicit" flag
-     *
-     * @param  bool $value
-     * @return Entry
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesExplicit($value)
-    {
-        if (!in_array($value, array('yes', 'no', 'clean'))) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only'
-            . ' be one of "yes", "no" or "clean"');
-        }
-        $this->data['explicit'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set keywords
-     *
-     * @param  array $value
-     * @return Entry
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesKeywords(array $value)
-    {
-        if (count($value) > 12) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
-            . ' contain a maximum of 12 terms');
-        }
-
-        $concat = implode(',', $value);
-        if ($this->stringWrapper->strlen($concat) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
-            . ' have a concatenated length of 255 chars where terms are delimited'
-            . ' by a comma');
-        }
-        $this->data['keywords'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set subtitle
-     *
-     * @param  string $value
-     * @return Entry
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesSubtitle($value)
-    {
-        if ($this->stringWrapper->strlen($value) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only'
-            . ' contain a maximum of 255 characters');
-        }
-        $this->data['subtitle'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set summary
-     *
-     * @param  string $value
-     * @return Entry
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesSummary($value)
-    {
-        if ($this->stringWrapper->strlen($value) > 4000) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only'
-            . ' contain a maximum of 4000 characters');
-        }
-        $this->data['summary'] = $value;
-        return $this;
-    }
-
-    /**
-     * Overloading to itunes specific setters
-     *
-     * @param  string $method
-     * @param  array $params
-     * @throws Writer\Exception\BadMethodCallException
-     * @return mixed
-     */
-    public function __call($method, array $params)
-    {
-        $point = lcfirst(substr($method, 9));
-        if (!method_exists($this, 'setItunes' . ucfirst($point))
-            && !method_exists($this, 'addItunes' . ucfirst($point))
-        ) {
-            throw new Writer\Exception\BadMethodCallException(
-                'invalid method: ' . $method
-            );
-        }
-        if (!array_key_exists($point, $this->data)
-            || empty($this->data[$point])
-        ) {
-            return;
-        }
-        return $this->data[$point];
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Feed.php b/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Feed.php
deleted file mode 100644
index 08a6b13fe6a429f93b11ef39dfc3725c985541d4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Feed.php
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\ITunes;
-
-use Zend\Feed\Uri;
-use Zend\Feed\Writer;
-use Zend\Stdlib\StringUtils;
-use Zend\Stdlib\StringWrapper\StringWrapperInterface;
-
-/**
-*/
-class Feed
-{
-    /**
-     * Array of Feed data for rendering by Extension's renderers
-     *
-     * @var array
-     */
-    protected $data = array();
-
-    /**
-     * Encoding of all text values
-     *
-     * @var string
-     */
-    protected $encoding = 'UTF-8';
-
-    /**
-     * The used string wrapper supporting encoding
-     *
-     * @var StringWrapperInterface
-     */
-    protected $stringWrapper;
-
-    /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        $this->stringWrapper = StringUtils::getWrapper($this->encoding);
-    }
-
-    /**
-     * Set feed encoding
-     *
-     * @param  string $enc
-     * @return Feed
-     */
-    public function setEncoding($enc)
-    {
-        $this->stringWrapper = StringUtils::getWrapper($enc);
-        $this->encoding      = $enc;
-        return $this;
-    }
-
-    /**
-     * Get feed encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Set a block value of "yes" or "no". You may also set an empty string.
-     *
-     * @param  string
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesBlock($value)
-    {
-        if (!ctype_alpha($value) && strlen($value) > 0) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
-            . ' contain alphabetic characters');
-        }
-        if ($this->stringWrapper->strlen($value) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
-            . ' contain a maximum of 255 characters');
-        }
-        $this->data['block'] = $value;
-        return $this;
-    }
-
-    /**
-     * Add feed authors
-     *
-     * @param  array $values
-     * @return Feed
-     */
-    public function addItunesAuthors(array $values)
-    {
-        foreach ($values as $value) {
-            $this->addItunesAuthor($value);
-        }
-        return $this;
-    }
-
-    /**
-     * Add feed author
-     *
-     * @param  string $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function addItunesAuthor($value)
-    {
-        if ($this->stringWrapper->strlen($value) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only'
-            . ' contain a maximum of 255 characters each');
-        }
-        if (!isset($this->data['authors'])) {
-            $this->data['authors'] = array();
-        }
-        $this->data['authors'][] = $value;
-        return $this;
-    }
-
-    /**
-     * Set feed categories
-     *
-     * @param  array $values
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesCategories(array $values)
-    {
-        if (!isset($this->data['categories'])) {
-            $this->data['categories'] = array();
-        }
-        foreach ($values as $key => $value) {
-            if (!is_array($value)) {
-                if ($this->stringWrapper->strlen($value) > 255) {
-                    throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only'
-                    . ' contain a maximum of 255 characters each');
-                }
-                $this->data['categories'][] = $value;
-            } else {
-                if ($this->stringWrapper->strlen($key) > 255) {
-                    throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only'
-                    . ' contain a maximum of 255 characters each');
-                }
-                $this->data['categories'][$key] = array();
-                foreach ($value as $val) {
-                    if ($this->stringWrapper->strlen($val) > 255) {
-                        throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only'
-                        . ' contain a maximum of 255 characters each');
-                    }
-                    $this->data['categories'][$key][] = $val;
-                }
-            }
-        }
-        return $this;
-    }
-
-    /**
-     * Set feed image (icon)
-     *
-     * @param  string $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesImage($value)
-    {
-        if (!Uri::factory($value)->isValid()) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only'
-            . ' be a valid URI/IRI');
-        }
-        if (!in_array(substr($value, -3), array('jpg', 'png'))) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only'
-            . ' use file extension "jpg" or "png" which must be the last three'
-            . ' characters of the URI (i.e. no query string or fragment)');
-        }
-        $this->data['image'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set feed cumulative duration
-     *
-     * @param  string $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesDuration($value)
-    {
-        $value = (string) $value;
-        if (!ctype_digit($value)
-            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value)
-            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value)
-        ) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only'
-            . ' be of a specified [[HH:]MM:]SS format');
-        }
-        $this->data['duration'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set "explicit" flag
-     *
-     * @param  bool $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesExplicit($value)
-    {
-        if (!in_array($value, array('yes', 'no', 'clean'))) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only'
-            . ' be one of "yes", "no" or "clean"');
-        }
-        $this->data['explicit'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set feed keywords
-     *
-     * @param  array $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesKeywords(array $value)
-    {
-        if (count($value) > 12) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
-            . ' contain a maximum of 12 terms');
-        }
-        $concat = implode(',', $value);
-        if ($this->stringWrapper->strlen($concat) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
-            . ' have a concatenated length of 255 chars where terms are delimited'
-            . ' by a comma');
-        }
-        $this->data['keywords'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set new feed URL
-     *
-     * @param  string $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesNewFeedUrl($value)
-    {
-        if (!Uri::factory($value)->isValid()) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "newFeedUrl" may only'
-            . ' be a valid URI/IRI');
-        }
-        $this->data['newFeedUrl'] = $value;
-        return $this;
-    }
-
-    /**
-     * Add feed owners
-     *
-     * @param  array $values
-     * @return Feed
-     */
-    public function addItunesOwners(array $values)
-    {
-        foreach ($values as $value) {
-            $this->addItunesOwner($value);
-        }
-        return $this;
-    }
-
-    /**
-     * Add feed owner
-     *
-     * @param  array $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function addItunesOwner(array $value)
-    {
-        if (!isset($value['name']) || !isset($value['email'])) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" must'
-            . ' be an array containing keys "name" and "email"');
-        }
-        if ($this->stringWrapper->strlen($value['name']) > 255
-            || $this->stringWrapper->strlen($value['email']) > 255
-        ) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" may only'
-            . ' contain a maximum of 255 characters each for "name" and "email"');
-        }
-        if (!isset($this->data['owners'])) {
-            $this->data['owners'] = array();
-        }
-        $this->data['owners'][] = $value;
-        return $this;
-    }
-
-    /**
-     * Set feed subtitle
-     *
-     * @param  string $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesSubtitle($value)
-    {
-        if ($this->stringWrapper->strlen($value) > 255) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only'
-            . ' contain a maximum of 255 characters');
-        }
-        $this->data['subtitle'] = $value;
-        return $this;
-    }
-
-    /**
-     * Set feed summary
-     *
-     * @param  string $value
-     * @return Feed
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function setItunesSummary($value)
-    {
-        if ($this->stringWrapper->strlen($value) > 4000) {
-            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only'
-            . ' contain a maximum of 4000 characters');
-        }
-        $this->data['summary'] = $value;
-        return $this;
-    }
-
-    /**
-     * Overloading: proxy to internal setters
-     *
-     * @param  string $method
-     * @param  array $params
-     * @return mixed
-     * @throws Writer\Exception\BadMethodCallException
-     */
-    public function __call($method, array $params)
-    {
-        $point = lcfirst(substr($method, 9));
-        if (!method_exists($this, 'setItunes' . ucfirst($point))
-            && !method_exists($this, 'addItunes' . ucfirst($point))
-        ) {
-            throw new Writer\Exception\BadMethodCallException(
-                'invalid method: ' . $method
-            );
-        }
-        if (!array_key_exists($point, $this->data) || empty($this->data[$point])) {
-            return;
-        }
-        return $this->data[$point];
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Renderer/Entry.php
deleted file mode 100644
index ed8f732ed7c3b872d77b0c872cfedd3fd8133a69..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Renderer/Entry.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\ITunes\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render entry
-     *
-     * @return void
-     */
-    public function render()
-    {
-        $this->_setAuthors($this->dom, $this->base);
-        $this->_setBlock($this->dom, $this->base);
-        $this->_setDuration($this->dom, $this->base);
-        $this->_setExplicit($this->dom, $this->base);
-        $this->_setKeywords($this->dom, $this->base);
-        $this->_setSubtitle($this->dom, $this->base);
-        $this->_setSummary($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append namespaces to entry root
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:itunes',
-            'http://www.itunes.com/dtds/podcast-1.0.dtd');
-    }
-
-    /**
-     * Set entry authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->getDataContainer()->getItunesAuthors();
-        if (!$authors || empty($authors)) {
-            return;
-        }
-        foreach ($authors as $author) {
-            $el = $dom->createElement('itunes:author');
-            $text = $dom->createTextNode($author);
-            $el->appendChild($text);
-            $root->appendChild($el);
-            $this->called = true;
-        }
-    }
-
-    /**
-     * Set itunes block
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setBlock(DOMDocument $dom, DOMElement $root)
-    {
-        $block = $this->getDataContainer()->getItunesBlock();
-        if ($block === null) {
-            return;
-        }
-        $el = $dom->createElement('itunes:block');
-        $text = $dom->createTextNode($block);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set entry duration
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDuration(DOMDocument $dom, DOMElement $root)
-    {
-        $duration = $this->getDataContainer()->getItunesDuration();
-        if (!$duration) {
-            return;
-        }
-        $el = $dom->createElement('itunes:duration');
-        $text = $dom->createTextNode($duration);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set explicit flag
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setExplicit(DOMDocument $dom, DOMElement $root)
-    {
-        $explicit = $this->getDataContainer()->getItunesExplicit();
-        if ($explicit === null) {
-            return;
-        }
-        $el = $dom->createElement('itunes:explicit');
-        $text = $dom->createTextNode($explicit);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set entry keywords
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setKeywords(DOMDocument $dom, DOMElement $root)
-    {
-        $keywords = $this->getDataContainer()->getItunesKeywords();
-        if (!$keywords || empty($keywords)) {
-            return;
-        }
-        $el = $dom->createElement('itunes:keywords');
-        $text = $dom->createTextNode(implode(',', $keywords));
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set entry subtitle
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setSubtitle(DOMDocument $dom, DOMElement $root)
-    {
-        $subtitle = $this->getDataContainer()->getItunesSubtitle();
-        if (!$subtitle) {
-            return;
-        }
-        $el = $dom->createElement('itunes:subtitle');
-        $text = $dom->createTextNode($subtitle);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set entry summary
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setSummary(DOMDocument $dom, DOMElement $root)
-    {
-        $summary = $this->getDataContainer()->getItunesSummary();
-        if (!$summary) {
-            return;
-        }
-        $el = $dom->createElement('itunes:summary');
-        $text = $dom->createTextNode($summary);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Renderer/Feed.php b/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Renderer/Feed.php
deleted file mode 100644
index d978f03201e4bc2b78ef705d1b7c7672d9f6b9f2..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/ITunes/Renderer/Feed.php
+++ /dev/null
@@ -1,303 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\ITunes\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Feed extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render feed
-     *
-     * @return void
-     */
-    public function render()
-    {
-        $this->_setAuthors($this->dom, $this->base);
-        $this->_setBlock($this->dom, $this->base);
-        $this->_setCategories($this->dom, $this->base);
-        $this->_setImage($this->dom, $this->base);
-        $this->_setDuration($this->dom, $this->base);
-        $this->_setExplicit($this->dom, $this->base);
-        $this->_setKeywords($this->dom, $this->base);
-        $this->_setNewFeedUrl($this->dom, $this->base);
-        $this->_setOwners($this->dom, $this->base);
-        $this->_setSubtitle($this->dom, $this->base);
-        $this->_setSummary($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append feed namespaces
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:itunes',
-            'http://www.itunes.com/dtds/podcast-1.0.dtd');
-    }
-
-    /**
-     * Set feed authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->getDataContainer()->getItunesAuthors();
-        if (!$authors || empty($authors)) {
-            return;
-        }
-        foreach ($authors as $author) {
-            $el = $dom->createElement('itunes:author');
-            $text = $dom->createTextNode($author);
-            $el->appendChild($text);
-            $root->appendChild($el);
-        }
-        $this->called = true;
-    }
-
-    /**
-     * Set feed itunes block
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setBlock(DOMDocument $dom, DOMElement $root)
-    {
-        $block = $this->getDataContainer()->getItunesBlock();
-        if ($block === null) {
-            return;
-        }
-        $el = $dom->createElement('itunes:block');
-        $text = $dom->createTextNode($block);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set feed categories
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCategories(DOMDocument $dom, DOMElement $root)
-    {
-        $cats = $this->getDataContainer()->getItunesCategories();
-        if (!$cats || empty($cats)) {
-            return;
-        }
-        foreach ($cats as $key => $cat) {
-            if (!is_array($cat)) {
-                $el = $dom->createElement('itunes:category');
-                $el->setAttribute('text', $cat);
-                $root->appendChild($el);
-            } else {
-                $el = $dom->createElement('itunes:category');
-                $el->setAttribute('text', $key);
-                $root->appendChild($el);
-                foreach ($cat as $subcat) {
-                    $el2 = $dom->createElement('itunes:category');
-                    $el2->setAttribute('text', $subcat);
-                    $el->appendChild($el2);
-                }
-            }
-        }
-        $this->called = true;
-    }
-
-    /**
-     * Set feed image (icon)
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setImage(DOMDocument $dom, DOMElement $root)
-    {
-        $image = $this->getDataContainer()->getItunesImage();
-        if (!$image) {
-            return;
-        }
-        $el = $dom->createElement('itunes:image');
-        $el->setAttribute('href', $image);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set feed cumulative duration
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDuration(DOMDocument $dom, DOMElement $root)
-    {
-        $duration = $this->getDataContainer()->getItunesDuration();
-        if (!$duration) {
-            return;
-        }
-        $el = $dom->createElement('itunes:duration');
-        $text = $dom->createTextNode($duration);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set explicit flag
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setExplicit(DOMDocument $dom, DOMElement $root)
-    {
-        $explicit = $this->getDataContainer()->getItunesExplicit();
-        if ($explicit === null) {
-            return;
-        }
-        $el = $dom->createElement('itunes:explicit');
-        $text = $dom->createTextNode($explicit);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set feed keywords
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setKeywords(DOMDocument $dom, DOMElement $root)
-    {
-        $keywords = $this->getDataContainer()->getItunesKeywords();
-        if (!$keywords || empty($keywords)) {
-            return;
-        }
-        $el = $dom->createElement('itunes:keywords');
-        $text = $dom->createTextNode(implode(',', $keywords));
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set feed's new URL
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setNewFeedUrl(DOMDocument $dom, DOMElement $root)
-    {
-        $url = $this->getDataContainer()->getItunesNewFeedUrl();
-        if (!$url) {
-            return;
-        }
-        $el = $dom->createElement('itunes:new-feed-url');
-        $text = $dom->createTextNode($url);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set feed owners
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setOwners(DOMDocument $dom, DOMElement $root)
-    {
-        $owners = $this->getDataContainer()->getItunesOwners();
-        if (!$owners || empty($owners)) {
-            return;
-        }
-        foreach ($owners as $owner) {
-            $el = $dom->createElement('itunes:owner');
-            $name = $dom->createElement('itunes:name');
-            $text = $dom->createTextNode($owner['name']);
-            $name->appendChild($text);
-            $email = $dom->createElement('itunes:email');
-            $text = $dom->createTextNode($owner['email']);
-            $email->appendChild($text);
-            $root->appendChild($el);
-            $el->appendChild($name);
-            $el->appendChild($email);
-        }
-        $this->called = true;
-    }
-
-    /**
-     * Set feed subtitle
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setSubtitle(DOMDocument $dom, DOMElement $root)
-    {
-        $subtitle = $this->getDataContainer()->getItunesSubtitle();
-        if (!$subtitle) {
-            return;
-        }
-        $el = $dom->createElement('itunes:subtitle');
-        $text = $dom->createTextNode($subtitle);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-
-    /**
-     * Set feed summary
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setSummary(DOMDocument $dom, DOMElement $root)
-    {
-        $summary = $this->getDataContainer()->getItunesSummary();
-        if (!$summary) {
-            return;
-        }
-        $el = $dom->createElement('itunes:summary');
-        $text = $dom->createTextNode($summary);
-        $el->appendChild($text);
-        $root->appendChild($el);
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/RendererInterface.php b/core/vendor/zendframework/zend-feed/Writer/Extension/RendererInterface.php
deleted file mode 100644
index 9afe88b2a2dc6b03025752203d6a4440aa911230..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/RendererInterface.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension;
-
-use DOMDocument;
-use DOMElement;
-
-/**
-*/
-interface RendererInterface
-{
-    /**
-     * Set the data container
-     *
-     * @param  mixed $container
-     * @return void
-     */
-    public function setDataContainer($container);
-
-    /**
-     * Retrieve container
-     *
-     * @return mixed
-     */
-    public function getDataContainer();
-
-    /**
-     * Set DOMDocument and DOMElement on which to operate
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $base
-     * @return void
-     */
-    public function setDomDocument(DOMDocument $dom, DOMElement $base);
-
-    /**
-     * Render
-     *
-     * @return void
-     */
-    public function render();
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/Slash/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Extension/Slash/Renderer/Entry.php
deleted file mode 100644
index c74cb02023f443eaa99454c0af42489b4ec89fa2..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/Slash/Renderer/Entry.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\Slash\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render entry
-     *
-     * @return void
-     */
-    public function render()
-    {
-        if (strtolower($this->getType()) == 'atom') {
-            return; // RSS 2.0 only
-        }
-        $this->_setCommentCount($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append entry namespaces
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:slash',
-            'http://purl.org/rss/1.0/modules/slash/');
-    }
-
-    /**
-     * Set entry comment count
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCommentCount(DOMDocument $dom, DOMElement $root)
-    {
-        $count = $this->getDataContainer()->getCommentCount();
-        if (!$count) {
-            $count = 0;
-        }
-        $tcount = $this->dom->createElement('slash:comments');
-        $tcount->nodeValue = $count;
-        $root->appendChild($tcount);
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/Threading/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Extension/Threading/Renderer/Entry.php
deleted file mode 100644
index 6f19641b89572795ba1a6a42ad9ca448ae076a6a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/Threading/Renderer/Entry.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\Threading\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render entry
-     *
-     * @return void
-     */
-    public function render()
-    {
-        if (strtolower($this->getType()) == 'rss') {
-            return; // Atom 1.0 only
-        }
-        $this->_setCommentLink($this->dom, $this->base);
-        $this->_setCommentFeedLinks($this->dom, $this->base);
-        $this->_setCommentCount($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append entry namespaces
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:thr',
-            'http://purl.org/syndication/thread/1.0');
-    }
-
-    /**
-     * Set comment link
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCommentLink(DOMDocument $dom, DOMElement $root)
-    {
-        $link = $this->getDataContainer()->getCommentLink();
-        if (!$link) {
-            return;
-        }
-        $clink = $this->dom->createElement('link');
-        $clink->setAttribute('rel', 'replies');
-        $clink->setAttribute('type', 'text/html');
-        $clink->setAttribute('href', $link);
-        $count = $this->getDataContainer()->getCommentCount();
-        if ($count !== null) {
-            $clink->setAttribute('thr:count', $count);
-        }
-        $root->appendChild($clink);
-        $this->called = true;
-    }
-
-    /**
-     * Set comment feed links
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root)
-    {
-        $links = $this->getDataContainer()->getCommentFeedLinks();
-        if (!$links || empty($links)) {
-            return;
-        }
-        foreach ($links as $link) {
-            $flink = $this->dom->createElement('link');
-            $flink->setAttribute('rel', 'replies');
-            $flink->setAttribute('type', 'application/' . $link['type'] . '+xml');
-            $flink->setAttribute('href', $link['uri']);
-            $count = $this->getDataContainer()->getCommentCount();
-            if ($count !== null) {
-                $flink->setAttribute('thr:count', $count);
-            }
-            $root->appendChild($flink);
-            $this->called = true;
-        }
-    }
-
-    /**
-     * Set entry comment count
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCommentCount(DOMDocument $dom, DOMElement $root)
-    {
-        $count = $this->getDataContainer()->getCommentCount();
-        if ($count === null) {
-            return;
-        }
-        $tcount = $this->dom->createElement('thr:total');
-        $tcount->nodeValue = $count;
-        $root->appendChild($tcount);
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Extension/WellFormedWeb/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/Writer/Extension/WellFormedWeb/Renderer/Entry.php
deleted file mode 100644
index 48c0d8f2e3248803cb8f543452ea0afcfd03313d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Extension/WellFormedWeb/Renderer/Entry.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Extension\WellFormedWeb\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer\Extension;
-
-/**
-*/
-class Entry extends Extension\AbstractRenderer
-{
-    /**
-     * Set to TRUE if a rendering method actually renders something. This
-     * is used to prevent premature appending of a XML namespace declaration
-     * until an element which requires it is actually appended.
-     *
-     * @var bool
-     */
-    protected $called = false;
-
-    /**
-     * Render entry
-     *
-     * @return void
-     */
-    public function render()
-    {
-        if (strtolower($this->getType()) == 'atom') {
-            return; // RSS 2.0 only
-        }
-        $this->_setCommentFeedLinks($this->dom, $this->base);
-        if ($this->called) {
-            $this->_appendNamespaces();
-        }
-    }
-
-    /**
-     * Append entry namespaces
-     *
-     * @return void
-     */
-    protected function _appendNamespaces()
-    {
-        $this->getRootElement()->setAttribute('xmlns:wfw',
-            'http://wellformedweb.org/CommentAPI/');
-    }
-
-    /**
-     * Set entry comment feed links
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root)
-    {
-        $links = $this->getDataContainer()->getCommentFeedLinks();
-        if (!$links || empty($links)) {
-            return;
-        }
-        foreach ($links as $link) {
-            if ($link['type'] == 'rss') {
-                $flink = $this->dom->createElement('wfw:commentRss');
-                $text = $dom->createTextNode($link['uri']);
-                $flink->appendChild($text);
-                $root->appendChild($flink);
-            }
-        }
-        $this->called = true;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/ExtensionManager.php b/core/vendor/zendframework/zend-feed/Writer/ExtensionManager.php
deleted file mode 100644
index 89be41d88240f735f50b7e01f7abfbcff5067fd2..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/ExtensionManager.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-/**
- * Default implementation of ExtensionManagerInterface
- *
- * Decorator of ExtensionPluginManager.
- */
-class ExtensionManager implements ExtensionManagerInterface
-{
-    protected $pluginManager;
-
-    /**
-     * Constructor
-     *
-     * Seeds the extension manager with a plugin manager; if none provided,
-     * creates an instance.
-     *
-     * @param  null|ExtensionPluginManager $pluginManager
-     */
-    public function __construct(ExtensionPluginManager $pluginManager = null)
-    {
-        if (null === $pluginManager) {
-            $pluginManager = new ExtensionPluginManager();
-        }
-        $this->pluginManager = $pluginManager;
-    }
-
-    /**
-     * Method overloading
-     *
-     * Proxy to composed ExtensionPluginManager instance.
-     *
-     * @param  string $method
-     * @param  array $args
-     * @return mixed
-     * @throws Exception\BadMethodCallException
-     */
-    public function __call($method, $args)
-    {
-        if (!method_exists($this->pluginManager, $method)) {
-            throw new Exception\BadMethodCallException(sprintf(
-                'Method by name of %s does not exist in %s',
-                $method,
-                __CLASS__
-            ));
-        }
-        return call_user_func_array(array($this->pluginManager, $method), $args);
-    }
-
-    /**
-     * Get the named extension
-     *
-     * @param  string $name
-     * @return Extension\AbstractRenderer
-     */
-    public function get($name)
-    {
-        return $this->pluginManager->get($name);
-    }
-
-    /**
-     * Do we have the named extension?
-     *
-     * @param  string $name
-     * @return bool
-     */
-    public function has($name)
-    {
-        return $this->pluginManager->has($name);
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/ExtensionManagerInterface.php b/core/vendor/zendframework/zend-feed/Writer/ExtensionManagerInterface.php
deleted file mode 100644
index b0e28a08c4b3f5e7a7f0481f4c20bc2470f2be2f..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/ExtensionManagerInterface.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-interface ExtensionManagerInterface
-{
-    /**
-     * Do we have the extension?
-     *
-     * @param  string $extension
-     * @return bool
-     */
-    public function has($extension);
-
-    /**
-     * Retrieve the extension
-     *
-     * @param  string $extension
-     * @return mixed
-     */
-    public function get($extension);
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/ExtensionPluginManager.php b/core/vendor/zendframework/zend-feed/Writer/ExtensionPluginManager.php
deleted file mode 100644
index 6763374cabb27c65ac3eb179363714a3db692392..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/ExtensionPluginManager.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-use Zend\ServiceManager\AbstractPluginManager;
-
-/**
- * Plugin manager implementation for feed writer extensions
- *
- * Validation checks that we have an Entry, Feed, or Extension\AbstractRenderer.
- */
-class ExtensionPluginManager extends AbstractPluginManager
-{
-    /**
-     * Default set of extension classes
-     *
-     * @var array
-     */
-    protected $invokableClasses = array(
-        'atomrendererfeed'           => 'Zend\Feed\Writer\Extension\Atom\Renderer\Feed',
-        'contentrendererentry'       => 'Zend\Feed\Writer\Extension\Content\Renderer\Entry',
-        'dublincorerendererentry'    => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry',
-        'dublincorerendererfeed'     => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed',
-        'itunesentry'                => 'Zend\Feed\Writer\Extension\ITunes\Entry',
-        'itunesfeed'                 => 'Zend\Feed\Writer\Extension\ITunes\Feed',
-        'itunesrendererentry'        => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Entry',
-        'itunesrendererfeed'         => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Feed',
-        'slashrendererentry'         => 'Zend\Feed\Writer\Extension\Slash\Renderer\Entry',
-        'threadingrendererentry'     => 'Zend\Feed\Writer\Extension\Threading\Renderer\Entry',
-        'wellformedwebrendererentry' => 'Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry',
-    );
-
-    /**
-     * Do not share instances
-     *
-     * @var bool
-     */
-    protected $shareByDefault = false;
-
-    /**
-     * Validate the plugin
-     *
-     * Checks that the extension loaded is of a valid type.
-     *
-     * @param  mixed $plugin
-     * @return void
-     * @throws Exception\InvalidArgumentException if invalid
-     */
-    public function validatePlugin($plugin)
-    {
-        if ($plugin instanceof Extension\AbstractRenderer) {
-            // we're okay
-            return;
-        }
-
-        if ('Feed' == substr(get_class($plugin), -4)) {
-            // we're okay
-            return;
-        }
-
-        if ('Entry' == substr(get_class($plugin), -5)) {
-            // we're okay
-            return;
-        }
-
-        throw new Exception\InvalidArgumentException(sprintf(
-            'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface '
-            . 'or the classname must end in "Feed" or "Entry"',
-            (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
-            __NAMESPACE__
-        ));
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Feed.php b/core/vendor/zendframework/zend-feed/Writer/Feed.php
deleted file mode 100644
index d402bb8f6344cfedfe2a4358742bd210a308a4b7..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Feed.php
+++ /dev/null
@@ -1,239 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-use Countable;
-use Iterator;
-
-/**
-*/
-class Feed extends AbstractFeed implements Iterator, Countable
-{
-    /**
-     * Contains all entry objects
-     *
-     * @var array
-     */
-    protected $entries = array();
-
-    /**
-     * A pointer for the iterator to keep track of the entries array
-     *
-     * @var int
-     */
-    protected $entriesKey = 0;
-
-    /**
-     * Creates a new Zend\Feed\Writer\Entry data container for use. This is NOT
-     * added to the current feed automatically, but is necessary to create a
-     * container with some initial values preset based on the current feed data.
-     *
-     * @return \Zend\Feed\Writer\Entry
-     */
-    public function createEntry()
-    {
-        $entry = new Entry;
-        if ($this->getEncoding()) {
-            $entry->setEncoding($this->getEncoding());
-        }
-        $entry->setType($this->getType());
-        return $entry;
-    }
-
-    /**
-     * Appends a Zend\Feed\Writer\Deleted object representing a new entry tombstone
-     * to the feed data container's internal group of entries.
-     *
-     * @param Deleted $deleted
-     * @return void
-     */
-    public function addTombstone(Deleted $deleted)
-    {
-        $this->entries[] = $deleted;
-    }
-
-    /**
-     * Creates a new Zend\Feed\Writer\Deleted data container for use. This is NOT
-     * added to the current feed automatically, but is necessary to create a
-     * container with some initial values preset based on the current feed data.
-     *
-     * @return Deleted
-     */
-    public function createTombstone()
-    {
-        $deleted = new Deleted;
-        if ($this->getEncoding()) {
-            $deleted->setEncoding($this->getEncoding());
-        }
-        $deleted->setType($this->getType());
-        return $deleted;
-    }
-
-    /**
-     * Appends a Zend\Feed\Writer\Entry object representing a new entry/item
-     * the feed data container's internal group of entries.
-     *
-     * @param Entry $entry
-     * @return Feed
-     */
-    public function addEntry(Entry $entry)
-    {
-        $this->entries[] = $entry;
-        return $this;
-    }
-
-    /**
-     * Removes a specific indexed entry from the internal queue. Entries must be
-     * added to a feed container in order to be indexed.
-     *
-     * @param int $index
-     * @throws Exception\InvalidArgumentException
-     * @return Feed
-     */
-    public function removeEntry($index)
-    {
-        if (!isset($this->entries[$index])) {
-            throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.');
-        }
-        unset($this->entries[$index]);
-
-        return $this;
-    }
-
-    /**
-     * Retrieve a specific indexed entry from the internal queue. Entries must be
-     * added to a feed container in order to be indexed.
-     *
-     * @param int $index
-     * @throws Exception\InvalidArgumentException
-     */
-    public function getEntry($index = 0)
-    {
-        if (isset($this->entries[$index])) {
-            return $this->entries[$index];
-        }
-        throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.');
-    }
-
-    /**
-     * Orders all indexed entries by date, thus offering date ordered readable
-     * content where a parser (or Homo Sapien) ignores the generic rule that
-     * XML element order is irrelevant and has no intrinsic meaning.
-     *
-     * Using this method will alter the original indexation.
-     *
-     * @return Feed
-     */
-    public function orderByDate()
-    {
-        /**
-         * Could do with some improvement for performance perhaps
-         */
-        $timestamp = time();
-        $entries = array();
-        foreach ($this->entries as $entry) {
-            if ($entry->getDateModified()) {
-                $timestamp = (int) $entry->getDateModified()->getTimestamp();
-            } elseif ($entry->getDateCreated()) {
-                $timestamp = (int) $entry->getDateCreated()->getTimestamp();
-            }
-            $entries[$timestamp] = $entry;
-        }
-        krsort($entries, SORT_NUMERIC);
-        $this->entries = array_values($entries);
-
-        return $this;
-    }
-
-    /**
-     * Get the number of feed entries.
-     * Required by the Iterator interface.
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->entries);
-    }
-
-    /**
-     * Return the current entry
-     *
-     * @return Entry
-     */
-    public function current()
-    {
-        return $this->entries[$this->key()];
-    }
-
-    /**
-     * Return the current feed key
-     *
-     * @return mixed
-     */
-    public function key()
-    {
-        return $this->entriesKey;
-    }
-
-    /**
-     * Move the feed pointer forward
-     *
-     * @return void
-     */
-    public function next()
-    {
-        ++$this->entriesKey;
-    }
-
-    /**
-     * Reset the pointer in the feed object
-     *
-     * @return void
-     */
-    public function rewind()
-    {
-        $this->entriesKey = 0;
-    }
-
-    /**
-     * Check to see if the iterator is still valid
-     *
-     * @return bool
-     */
-    public function valid()
-    {
-        return 0 <= $this->entriesKey && $this->entriesKey < $this->count();
-    }
-
-    /**
-     * Attempt to build and return the feed resulting from the data set
-     *
-     * @param  string  $type The feed type "rss" or "atom" to export as
-     * @param  bool    $ignoreExceptions
-     * @throws Exception\InvalidArgumentException
-     * @return string
-     */
-    public function export($type, $ignoreExceptions = false)
-    {
-        $this->setType(strtolower($type));
-        $type = ucfirst($this->getType());
-        if ($type !== 'Rss' && $type !== 'Atom') {
-            throw new Exception\InvalidArgumentException('Invalid feed type specified: ' . $type . '.'
-            . ' Should be one of "rss" or "atom".');
-        }
-        $renderClass = 'Zend\\Feed\\Writer\\Renderer\\Feed\\' . $type;
-        $renderer = new $renderClass($this);
-        if ($ignoreExceptions) {
-            $renderer->ignoreExceptions();
-        }
-        return $renderer->render()->saveXml();
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/FeedFactory.php b/core/vendor/zendframework/zend-feed/Writer/FeedFactory.php
deleted file mode 100644
index 99b528c73aebda2b703e48b95ef67a430efab630..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/FeedFactory.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-use Traversable;
-
-abstract class FeedFactory
-{
-    /**
-     * Create and return a Feed based on data provided.
-     *
-     * @param  array|Traversable $data
-     * @throws Exception\InvalidArgumentException
-     * @return Feed
-     */
-    public static function factory($data)
-    {
-        if (!is_array($data) && !$data instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s expects an array or Traversable argument; received "%s"',
-                __METHOD__,
-                (is_object($data) ? get_class($data) : gettype($data))
-            ));
-        }
-
-        $feed = new Feed();
-
-        foreach ($data as $key => $value) {
-            // Setters
-            $key    = static::convertKey($key);
-            $method = 'set' . $key;
-            if (method_exists($feed, $method)) {
-                switch ($method) {
-                    case 'setfeedlink':
-                        if (!is_array($value)) {
-                            // Need an array
-                            break;
-                        }
-                        if (!array_key_exists('link', $value) || !array_key_exists('type', $value)) {
-                            // Need both keys to set this correctly
-                            break;
-                        }
-                        $feed->setFeedLink($value['link'], $value['type']);
-                        break;
-                    default:
-                        $feed->$method($value);
-                        break;
-                }
-                continue;
-            }
-
-            // Entries
-            if ('entries' == $key) {
-                static::createEntries($value, $feed);
-                continue;
-            }
-        }
-
-        return $feed;
-    }
-
-    /**
-     * Normalize a key
-     *
-     * @param  string $key
-     * @return string
-     */
-    protected static function convertKey($key)
-    {
-        $key = str_replace('_', '', strtolower($key));
-        return $key;
-    }
-
-    /**
-     * Create and attach entries to a feed
-     *
-     * @param  array|Traversable $entries
-     * @param  Feed $feed
-     * @throws Exception\InvalidArgumentException
-     * @return void
-     */
-    protected static function createEntries($entries, Feed $feed)
-    {
-        if (!is_array($entries) && !$entries instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s::factory expects the "entries" value to be an array or Traversable; received "%s"',
-                get_called_class(),
-                (is_object($entries) ? get_class($entries) : gettype($entries))
-            ));
-        }
-
-        foreach ($entries as $data) {
-            if (!is_array($data) && !$data instanceof Traversable && !$data instanceof Entry) {
-                throw new Exception\InvalidArgumentException(sprintf(
-                    '%s expects an array, Traversable, or Zend\Feed\Writer\Entry argument; received "%s"',
-                    __METHOD__,
-                    (is_object($data) ? get_class($data) : gettype($data))
-                ));
-            }
-
-            // Use case 1: Entry item
-            if ($data instanceof Entry) {
-                $feed->addEntry($data);
-                continue;
-            }
-
-            // Use case 2: iterate item and populate entry
-            $entry = $feed->createEntry();
-            foreach ($data as $key => $value) {
-                $key    = static::convertKey($key);
-                $method = 'set' . $key;
-                if (!method_exists($entry, $method)) {
-                    continue;
-                }
-                $entry->$method($value);
-            }
-            $feed->addEntry($entry);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/AbstractRenderer.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/AbstractRenderer.php
deleted file mode 100644
index 76b9a685a15aebd1199dfbde3f9bdfe64f0e5340..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/AbstractRenderer.php
+++ /dev/null
@@ -1,233 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer;
-
-/**
-*/
-class AbstractRenderer
-{
-    /**
-     * Extensions
-     * @var array
-     */
-    protected $extensions = array();
-
-    /**
-     * @var Writer\AbstractFeed
-     */
-    protected $container = null;
-
-    /**
-     * @var DOMDocument
-     */
-    protected $dom = null;
-
-    /**
-     * @var bool
-     */
-    protected $ignoreExceptions = false;
-
-    /**
-     * @var array
-     */
-    protected $exceptions = array();
-
-    /**
-     * Encoding of all text values
-     *
-     * @var string
-     */
-    protected $encoding = 'UTF-8';
-
-    /**
-     * Holds the value "atom" or "rss" depending on the feed type set when
-     * when last exported.
-     *
-     * @var string
-     */
-    protected $type = null;
-
-    /**
-     * @var DOMElement
-     */
-    protected $rootElement = null;
-
-    /**
-     * Constructor
-     *
-     * @param Writer\AbstractFeed $container
-     */
-    public function __construct($container)
-    {
-        $this->container = $container;
-        $this->setType($container->getType());
-        $this->_loadExtensions();
-    }
-
-    /**
-     * Save XML to string
-     *
-     * @return string
-     */
-    public function saveXml()
-    {
-        return $this->getDomDocument()->saveXml();
-    }
-
-    /**
-     * Get DOM document
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument()
-    {
-        return $this->dom;
-    }
-
-    /**
-     * Get document element from DOM
-     *
-     * @return DOMElement
-     */
-    public function getElement()
-    {
-        return $this->getDomDocument()->documentElement;
-    }
-
-    /**
-     * Get data container of items being rendered
-     *
-     * @return Writer\AbstractFeed
-     */
-    public function getDataContainer()
-    {
-        return $this->container;
-    }
-
-    /**
-     * Set feed encoding
-     *
-     * @param  string $enc
-     * @return AbstractRenderer
-     */
-    public function setEncoding($enc)
-    {
-        $this->encoding = $enc;
-        return $this;
-    }
-
-    /**
-     * Get feed encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Indicate whether or not to ignore exceptions
-     *
-     * @param  bool $bool
-     * @return AbstractRenderer
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    public function ignoreExceptions($bool = true)
-    {
-        if (!is_bool($bool)) {
-            throw new Writer\Exception\InvalidArgumentException('Invalid parameter: $bool. Should be TRUE or FALSE (defaults to TRUE if null)');
-        }
-        $this->ignoreExceptions = $bool;
-        return $this;
-    }
-
-    /**
-     * Get exception list
-     *
-     * @return array
-     */
-    public function getExceptions()
-    {
-        return $this->exceptions;
-    }
-
-    /**
-     * Set the current feed type being exported to "rss" or "atom". This allows
-     * other objects to gracefully choose whether to execute or not, depending
-     * on their appropriateness for the current type, e.g. renderers.
-     *
-     * @param string $type
-     */
-    public function setType($type)
-    {
-        $this->type = $type;
-    }
-
-    /**
-     * Retrieve the current or last feed type exported.
-     *
-     * @return string Value will be "rss" or "atom"
-     */
-    public function getType()
-    {
-        return $this->type;
-    }
-
-    /**
-     * Sets the absolute root element for the XML feed being generated. This
-     * helps simplify the appending of namespace declarations, but also ensures
-     * namespaces are added to the root element - not scattered across the entire
-     * XML file - may assist namespace unsafe parsers and looks pretty ;).
-     *
-     * @param DOMElement $root
-     */
-    public function setRootElement(DOMElement $root)
-    {
-        $this->rootElement = $root;
-    }
-
-    /**
-     * Retrieve the absolute root element for the XML feed being generated.
-     *
-     * @return DOMElement
-     */
-    public function getRootElement()
-    {
-        return $this->rootElement;
-    }
-
-    /**
-     * Load extensions from Zend\Feed\Writer\Writer
-     *
-     * @return void
-     */
-    protected function _loadExtensions()
-    {
-        Writer\Writer::registerCoreExtensions();
-        $manager = Writer\Writer::getExtensionManager();
-        $all = Writer\Writer::getExtensions();
-        if (stripos(get_class($this), 'entry')) {
-            $exts = $all['entryRenderer'];
-        } else {
-            $exts = $all['feedRenderer'];
-        }
-        foreach ($exts as $extension) {
-            $plugin = $manager->get($extension);
-            $plugin->setDataContainer($this->getDataContainer());
-            $plugin->setEncoding($this->getEncoding());
-            $this->extensions[$extension] = $plugin;
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Atom.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Atom.php
deleted file mode 100644
index 31b0a9aca47741794079cd004496224396a9dcef..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Atom.php
+++ /dev/null
@@ -1,434 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Entry;
-
-use DateTime;
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Uri;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-use Zend\Validator;
-
-class Atom extends Renderer\AbstractRenderer implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Entry $container
-     */
-    public function __construct(Writer\Entry $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render atom entry
-     *
-     * @return Atom
-     */
-    public function render()
-    {
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $entry = $this->dom->createElementNS(Writer\Writer::NAMESPACE_ATOM_10, 'entry');
-        $this->dom->appendChild($entry);
-
-        $this->_setSource($this->dom, $entry);
-        $this->_setTitle($this->dom, $entry);
-        $this->_setDescription($this->dom, $entry);
-        $this->_setDateCreated($this->dom, $entry);
-        $this->_setDateModified($this->dom, $entry);
-        $this->_setLink($this->dom, $entry);
-        $this->_setId($this->dom, $entry);
-        $this->_setAuthors($this->dom, $entry);
-        $this->_setEnclosure($this->dom, $entry);
-        $this->_setContent($this->dom, $entry);
-        $this->_setCategories($this->dom, $entry);
-
-        foreach ($this->extensions as $ext) {
-            $ext->setType($this->getType());
-            $ext->setRootElement($this->getRootElement());
-            $ext->setDOMDocument($this->getDOMDocument(), $entry);
-            $ext->render();
-        }
-
-        return $this;
-    }
-
-    /**
-     * Set entry title
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setTitle(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getTitle()) {
-            $message = 'Atom 1.0 entry elements MUST contain exactly one'
-            . ' atom:title element but a title has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        $title = $dom->createElement('title');
-        $root->appendChild($title);
-        $title->setAttribute('type', 'html');
-        $cdata = $dom->createCDATASection($this->getDataContainer()->getTitle());
-        $title->appendChild($cdata);
-    }
-
-    /**
-     * Set entry description
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDescription(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDescription()) {
-            return; // unless src content or base64
-        }
-        $subtitle = $dom->createElement('summary');
-        $root->appendChild($subtitle);
-        $subtitle->setAttribute('type', 'html');
-        $cdata = $dom->createCDATASection(
-            $this->getDataContainer()->getDescription()
-        );
-        $subtitle->appendChild($cdata);
-    }
-
-    /**
-     * Set date entry was modified
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateModified()) {
-            $message = 'Atom 1.0 entry elements MUST contain exactly one'
-            . ' atom:updated element but a modification date has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        $updated = $dom->createElement('updated');
-        $root->appendChild($updated);
-        $text = $dom->createTextNode(
-            $this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
-        );
-        $updated->appendChild($text);
-    }
-
-    /**
-     * Set date entry was created
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateCreated()) {
-            return;
-        }
-        $el = $dom->createElement('published');
-        $root->appendChild($el);
-        $text = $dom->createTextNode(
-            $this->getDataContainer()->getDateCreated()->format(DateTime::ATOM)
-        );
-        $el->appendChild($text);
-    }
-
-    /**
-     * Set entry authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->container->getAuthors();
-        if ((!$authors || empty($authors))) {
-            /**
-             * This will actually trigger an Exception at the feed level if
-             * a feed level author is not set.
-             */
-            return;
-        }
-        foreach ($authors as $data) {
-            $author = $this->dom->createElement('author');
-            $name = $this->dom->createElement('name');
-            $author->appendChild($name);
-            $root->appendChild($author);
-            $text = $dom->createTextNode($data['name']);
-            $name->appendChild($text);
-            if (array_key_exists('email', $data)) {
-                $email = $this->dom->createElement('email');
-                $author->appendChild($email);
-                $text = $dom->createTextNode($data['email']);
-                $email->appendChild($text);
-            }
-            if (array_key_exists('uri', $data)) {
-                $uri = $this->dom->createElement('uri');
-                $author->appendChild($uri);
-                $text = $dom->createTextNode($data['uri']);
-                $uri->appendChild($text);
-            }
-        }
-    }
-
-    /**
-     * Set entry enclosure
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setEnclosure(DOMDocument $dom, DOMElement $root)
-    {
-        $data = $this->container->getEnclosure();
-        if ((!$data || empty($data))) {
-            return;
-        }
-        $enclosure = $this->dom->createElement('link');
-        $enclosure->setAttribute('rel', 'enclosure');
-        if (isset($data['type'])) {
-            $enclosure->setAttribute('type', $data['type']);
-        }
-        if (isset($data['length'])) {
-            $enclosure->setAttribute('length', $data['length']);
-        }
-        $enclosure->setAttribute('href', $data['uri']);
-        $root->appendChild($enclosure);
-    }
-
-    protected function _setLink(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getLink()) {
-            return;
-        }
-        $link = $dom->createElement('link');
-        $root->appendChild($link);
-        $link->setAttribute('rel', 'alternate');
-        $link->setAttribute('type', 'text/html');
-        $link->setAttribute('href', $this->getDataContainer()->getLink());
-    }
-
-    /**
-     * Set entry identifier
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setId(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getId()
-        && !$this->getDataContainer()->getLink()) {
-            $message = 'Atom 1.0 entry elements MUST contain exactly one '
-            . 'atom:id element, or as an alternative, we can use the same '
-            . 'value as atom:link however neither a suitable link nor an '
-            . 'id have been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        if (!$this->getDataContainer()->getId()) {
-            $this->getDataContainer()->setId(
-                $this->getDataContainer()->getLink()
-            );
-        }
-        if (!Uri::factory($this->getDataContainer()->getId())->isValid()
-            && !preg_match(
-                "#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#",
-                $this->getDataContainer()->getId()
-            )
-            && !$this->_validateTagUri($this->getDataContainer()->getId())
-        ) {
-            throw new Writer\Exception\InvalidArgumentException('Atom 1.0 IDs must be a valid URI/IRI');
-        }
-        $id = $dom->createElement('id');
-        $root->appendChild($id);
-        $text = $dom->createTextNode($this->getDataContainer()->getId());
-        $id->appendChild($text);
-    }
-
-    /**
-     * Validate a URI using the tag scheme (RFC 4151)
-     *
-     * @param string $id
-     * @return bool
-     */
-    protected function _validateTagUri($id)
-    {
-        if (preg_match(
-            '/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/',
-            $id,
-            $matches
-        )) {
-            $dvalid = false;
-            $date = $matches['date'];
-            $d6 = strtotime($date);
-            if ((strlen($date) == 4) && $date <= date('Y')) {
-                $dvalid = true;
-            } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) {
-                $dvalid = true;
-            } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) {
-                $dvalid = true;
-            }
-            $validator = new Validator\EmailAddress;
-            if ($validator->isValid($matches['name'])) {
-                $nvalid = true;
-            } else {
-                $nvalid = $validator->isValid('info@' . $matches['name']);
-            }
-            return $dvalid && $nvalid;
-        }
-        return false;
-    }
-
-    /**
-     * Set entry content
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setContent(DOMDocument $dom, DOMElement $root)
-    {
-        $content = $this->getDataContainer()->getContent();
-        if (!$content && !$this->getDataContainer()->getLink()) {
-            $message = 'Atom 1.0 entry elements MUST contain exactly one '
-            . 'atom:content element, or as an alternative, at least one link '
-            . 'with a rel attribute of "alternate" to indicate an alternate '
-            . 'method to consume the content.';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        if (!$content) {
-            return;
-        }
-        $element = $dom->createElement('content');
-        $element->setAttribute('type', 'xhtml');
-        $xhtmlElement = $this->_loadXhtml($content);
-        $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
-        $xhtml = $dom->importNode($xhtmlElement, $deep);
-        $element->appendChild($xhtml);
-        $root->appendChild($element);
-    }
-
-    /**
-     * Load a HTML string and attempt to normalise to XML
-     */
-    protected function _loadXhtml($content)
-    {
-        if (class_exists('tidy', false)) {
-            $tidy = new \tidy;
-            $config = array(
-                'output-xhtml' => true,
-                'show-body-only' => true,
-                'quote-nbsp' => false
-            );
-            $encoding = str_replace('-', '', $this->getEncoding());
-            $tidy->parseString($content, $config, $encoding);
-            $tidy->cleanRepair();
-            $xhtml = (string) $tidy;
-        } else {
-            $xhtml = $content;
-        }
-        $xhtml = preg_replace(array(
-            "/(<[\/]?)([a-zA-Z]+)/"
-        ), '$1xhtml:$2', $xhtml);
-        $dom = new DOMDocument('1.0', $this->getEncoding());
-        $dom->loadXML(
-            '<xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml">'
-            . $xhtml
-            . '</xhtml:div>'
-        );
-        return $dom->documentElement;
-    }
-
-    /**
-     * Set entry categories
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCategories(DOMDocument $dom, DOMElement $root)
-    {
-        $categories = $this->getDataContainer()->getCategories();
-        if (!$categories) {
-            return;
-        }
-        foreach ($categories as $cat) {
-            $category = $dom->createElement('category');
-            $category->setAttribute('term', $cat['term']);
-            if (isset($cat['label'])) {
-                $category->setAttribute('label', $cat['label']);
-            } else {
-                $category->setAttribute('label', $cat['term']);
-            }
-            if (isset($cat['scheme'])) {
-                $category->setAttribute('scheme', $cat['scheme']);
-            }
-            $root->appendChild($category);
-        }
-    }
-
-    /**
-     * Append Source element (Atom 1.0 Feed Metadata)
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setSource(DOMDocument $dom, DOMElement $root)
-    {
-        $source = $this->getDataContainer()->getSource();
-        if (!$source) {
-            return;
-        }
-        $renderer = new Renderer\Feed\AtomSource($source);
-        $renderer->setType($this->getType());
-        $element = $renderer->render()->getElement();
-        $imported = $dom->importNode($element, true);
-        $root->appendChild($imported);
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Atom/Deleted.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Atom/Deleted.php
deleted file mode 100644
index 8519bd9d9ea1a4afdfc5201eb915290b64e4f386..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Atom/Deleted.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Entry\Atom;
-
-use DateTime;
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-
-class Deleted extends Renderer\AbstractRenderer implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Deleted $container
-     */
-    public function __construct(Writer\Deleted $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render atom entry
-     *
-     * @return Writer\Renderer\Entry\Atom
-     */
-    public function render()
-    {
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $entry = $this->dom->createElement('at:deleted-entry');
-        $this->dom->appendChild($entry);
-
-        $entry->setAttribute('ref', $this->container->getReference());
-        $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ATOM));
-
-        $this->_setBy($this->dom, $entry);
-        $this->_setComment($this->dom, $entry);
-
-        return $this;
-    }
-
-    /**
-     * Set tombstone comment
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setComment(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getComment()) {
-            return;
-        }
-        $c = $dom->createElement('at:comment');
-        $root->appendChild($c);
-        $c->setAttribute('type', 'html');
-        $cdata = $dom->createCDATASection($this->getDataContainer()->getComment());
-        $c->appendChild($cdata);
-    }
-
-    /**
-     * Set entry authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setBy(DOMDocument $dom, DOMElement $root)
-    {
-        $data = $this->container->getBy();
-        if ((!$data || empty($data))) {
-            return;
-        }
-        $author = $this->dom->createElement('at:by');
-        $name = $this->dom->createElement('name');
-        $author->appendChild($name);
-        $root->appendChild($author);
-        $text = $dom->createTextNode($data['name']);
-        $name->appendChild($text);
-        if (array_key_exists('email', $data)) {
-            $email = $this->dom->createElement('email');
-            $author->appendChild($email);
-            $text = $dom->createTextNode($data['email']);
-            $email->appendChild($text);
-        }
-        if (array_key_exists('uri', $data)) {
-            $uri = $this->dom->createElement('uri');
-            $author->appendChild($uri);
-            $text = $dom->createTextNode($data['uri']);
-            $uri->appendChild($text);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/AtomDeleted.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/AtomDeleted.php
deleted file mode 100644
index f0db3e9328ebd38a0e0a7b19a2be953335a745fe..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/AtomDeleted.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Entry;
-
-use DateTime;
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-
-/**
-*/
-class AtomDeleted extends Renderer\AbstractRenderer implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Deleted $container
-     */
-    public function __construct(Writer\Deleted $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render atom entry
-     *
-     * @return \Zend\Feed\Writer\Renderer\Entry\Atom
-     */
-    public function render()
-    {
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $entry = $this->dom->createElement('at:deleted-entry');
-        $this->dom->appendChild($entry);
-
-        $entry->setAttribute('ref', $this->container->getReference());
-        $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ATOM));
-
-        $this->_setBy($this->dom, $entry);
-        $this->_setComment($this->dom, $entry);
-
-        return $this;
-    }
-
-    /**
-     * Set tombstone comment
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setComment(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getComment()) {
-            return;
-        }
-        $c = $dom->createElement('at:comment');
-        $root->appendChild($c);
-        $c->setAttribute('type', 'html');
-        $cdata = $dom->createCDATASection($this->getDataContainer()->getComment());
-        $c->appendChild($cdata);
-    }
-
-    /**
-     * Set entry authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setBy(DOMDocument $dom, DOMElement $root)
-    {
-        $data = $this->container->getBy();
-        if ((!$data || empty($data))) {
-            return;
-        }
-        $author = $this->dom->createElement('at:by');
-        $name = $this->dom->createElement('name');
-        $author->appendChild($name);
-        $root->appendChild($author);
-        $text = $dom->createTextNode($data['name']);
-        $name->appendChild($text);
-        if (array_key_exists('email', $data)) {
-            $email = $this->dom->createElement('email');
-            $author->appendChild($email);
-            $text = $dom->createTextNode($data['email']);
-            $email->appendChild($text);
-        }
-        if (array_key_exists('uri', $data)) {
-            $uri = $this->dom->createElement('uri');
-            $author->appendChild($uri);
-            $text = $dom->createTextNode($data['uri']);
-            $uri->appendChild($text);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Rss.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Rss.php
deleted file mode 100644
index aae2f46e2839987688d83b39af5db232b741bc6d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Entry/Rss.php
+++ /dev/null
@@ -1,329 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Entry;
-
-use DateTime;
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Uri;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-
-/**
-*/
-class Rss extends Renderer\AbstractRenderer implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Entry $container
-     */
-    public function __construct(Writer\Entry $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render RSS entry
-     *
-     * @return Rss
-     */
-    public function render()
-    {
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $this->dom->substituteEntities = false;
-        $entry = $this->dom->createElement('item');
-        $this->dom->appendChild($entry);
-
-        $this->_setTitle($this->dom, $entry);
-        $this->_setDescription($this->dom, $entry);
-        $this->_setDateCreated($this->dom, $entry);
-        $this->_setDateModified($this->dom, $entry);
-        $this->_setLink($this->dom, $entry);
-        $this->_setId($this->dom, $entry);
-        $this->_setAuthors($this->dom, $entry);
-        $this->_setEnclosure($this->dom, $entry);
-        $this->_setCommentLink($this->dom, $entry);
-        $this->_setCategories($this->dom, $entry);
-        foreach ($this->extensions as $ext) {
-            $ext->setType($this->getType());
-            $ext->setRootElement($this->getRootElement());
-            $ext->setDOMDocument($this->getDOMDocument(), $entry);
-            $ext->render();
-        }
-
-        return $this;
-    }
-
-    /**
-     * Set entry title
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setTitle(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDescription()
-        && !$this->getDataContainer()->getTitle()) {
-            $message = 'RSS 2.0 entry elements SHOULD contain exactly one'
-            . ' title element but a title has not been set. In addition, there'
-            . ' is no description as required in the absence of a title.';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        $title = $dom->createElement('title');
-        $root->appendChild($title);
-        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
-        $title->appendChild($text);
-    }
-
-    /**
-     * Set entry description
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setDescription(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDescription()
-        && !$this->getDataContainer()->getTitle()) {
-            $message = 'RSS 2.0 entry elements SHOULD contain exactly one'
-            . ' description element but a description has not been set. In'
-            . ' addition, there is no title element as required in the absence'
-            . ' of a description.';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        if (!$this->getDataContainer()->getDescription()) {
-            return;
-        }
-        $subtitle = $dom->createElement('description');
-        $root->appendChild($subtitle);
-        $text = $dom->createCDATASection($this->getDataContainer()->getDescription());
-        $subtitle->appendChild($text);
-    }
-
-    /**
-     * Set date entry was last modified
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateModified()) {
-            return;
-        }
-
-        $updated = $dom->createElement('pubDate');
-        $root->appendChild($updated);
-        $text = $dom->createTextNode(
-            $this->getDataContainer()->getDateModified()->format(DateTime::RSS)
-        );
-        $updated->appendChild($text);
-    }
-
-    /**
-     * Set date entry was created
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateCreated()) {
-            return;
-        }
-        if (!$this->getDataContainer()->getDateModified()) {
-            $this->getDataContainer()->setDateModified(
-                $this->getDataContainer()->getDateCreated()
-            );
-        }
-    }
-
-    /**
-     * Set entry authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->container->getAuthors();
-        if ((!$authors || empty($authors))) {
-            return;
-        }
-        foreach ($authors as $data) {
-            $author = $this->dom->createElement('author');
-            $name = $data['name'];
-            if (array_key_exists('email', $data)) {
-                $name = $data['email'] . ' (' . $data['name'] . ')';
-            }
-            $text = $dom->createTextNode($name);
-            $author->appendChild($text);
-            $root->appendChild($author);
-        }
-    }
-
-    /**
-     * Set entry enclosure
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setEnclosure(DOMDocument $dom, DOMElement $root)
-    {
-        $data = $this->container->getEnclosure();
-        if ((!$data || empty($data))) {
-            return;
-        }
-        if (!isset($data['type'])) {
-            $exception = new Writer\Exception\InvalidArgumentException('Enclosure "type" is not set');
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        if (!isset($data['length'])) {
-            $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" is not set');
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        if (isset($data['length']) && (int) $data['length'] <= 0) {
-            $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" must be an integer'
-            . ' indicating the content\'s length in bytes');
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        $enclosure = $this->dom->createElement('enclosure');
-        $enclosure->setAttribute('type', $data['type']);
-        $enclosure->setAttribute('length', $data['length']);
-        $enclosure->setAttribute('url', $data['uri']);
-        $root->appendChild($enclosure);
-    }
-
-    /**
-     * Set link to entry
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setLink(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getLink()) {
-            return;
-        }
-        $link = $dom->createElement('link');
-        $root->appendChild($link);
-        $text = $dom->createTextNode($this->getDataContainer()->getLink());
-        $link->appendChild($text);
-    }
-
-    /**
-     * Set entry identifier
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setId(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getId()
-        && !$this->getDataContainer()->getLink()) {
-            return;
-        }
-
-        $id = $dom->createElement('guid');
-        $root->appendChild($id);
-        if (!$this->getDataContainer()->getId()) {
-            $this->getDataContainer()->setId(
-                $this->getDataContainer()->getLink());
-        }
-        $text = $dom->createTextNode($this->getDataContainer()->getId());
-        $id->appendChild($text);
-        if (!Uri::factory($this->getDataContainer()->getId())->isValid()) {
-            $id->setAttribute('isPermaLink', 'false');
-        }
-    }
-
-    /**
-     * Set link to entry comments
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCommentLink(DOMDocument $dom, DOMElement $root)
-    {
-        $link = $this->getDataContainer()->getCommentLink();
-        if (!$link) {
-            return;
-        }
-        $clink = $this->dom->createElement('comments');
-        $text = $dom->createTextNode($link);
-        $clink->appendChild($text);
-        $root->appendChild($clink);
-    }
-
-    /**
-     * Set entry categories
-     *
-     * @param DOMDocument $dom
-     * @param DOMElement $root
-     * @return void
-     */
-    protected function _setCategories(DOMDocument $dom, DOMElement $root)
-    {
-        $categories = $this->getDataContainer()->getCategories();
-        if (!$categories) {
-            return;
-        }
-        foreach ($categories as $cat) {
-            $category = $dom->createElement('category');
-            if (isset($cat['scheme'])) {
-                $category->setAttribute('domain', $cat['scheme']);
-            }
-            $text = $dom->createCDATASection($cat['term']);
-            $category->appendChild($text);
-            $root->appendChild($category);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/AbstractAtom.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/AbstractAtom.php
deleted file mode 100644
index a5400a6050290a25597bae601cd85af6e821c517..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/AbstractAtom.php
+++ /dev/null
@@ -1,403 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Feed;
-
-use DateTime;
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-use Zend\Feed\Writer\Version;
-
-/**
-*/
-class AbstractAtom extends Renderer\AbstractRenderer
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\AbstractFeed $container
-     */
-    public function __construct($container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Set feed language
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setLanguage(DOMDocument $dom, DOMElement $root)
-    {
-        if ($this->getDataContainer()->getLanguage()) {
-            $root->setAttribute('xml:lang', $this->getDataContainer()
-                ->getLanguage());
-        }
-    }
-
-    /**
-     * Set feed title
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setTitle(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getTitle()) {
-            $message = 'Atom 1.0 feed elements MUST contain exactly one'
-            . ' atom:title element but a title has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        $title = $dom->createElement('title');
-        $root->appendChild($title);
-        $title->setAttribute('type', 'text');
-        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
-        $title->appendChild($text);
-    }
-
-    /**
-     * Set feed description
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDescription(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDescription()) {
-            return;
-        }
-        $subtitle = $dom->createElement('subtitle');
-        $root->appendChild($subtitle);
-        $subtitle->setAttribute('type', 'text');
-        $text = $dom->createTextNode($this->getDataContainer()->getDescription());
-        $subtitle->appendChild($text);
-    }
-
-    /**
-     * Set date feed was last modified
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateModified()) {
-            $message = 'Atom 1.0 feed elements MUST contain exactly one'
-            . ' atom:updated element but a modification date has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        $updated = $dom->createElement('updated');
-        $root->appendChild($updated);
-        $text = $dom->createTextNode(
-            $this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
-        );
-        $updated->appendChild($text);
-    }
-
-    /**
-     * Set feed generator string
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getGenerator()) {
-            $this->getDataContainer()->setGenerator('Zend_Feed_Writer',
-                Version::VERSION, 'http://framework.zend.com');
-        }
-
-        $gdata = $this->getDataContainer()->getGenerator();
-        $generator = $dom->createElement('generator');
-        $root->appendChild($generator);
-        $text = $dom->createTextNode($gdata['name']);
-        $generator->appendChild($text);
-        if (array_key_exists('uri', $gdata)) {
-            $generator->setAttribute('uri', $gdata['uri']);
-        }
-        if (array_key_exists('version', $gdata)) {
-            $generator->setAttribute('version', $gdata['version']);
-        }
-    }
-
-    /**
-     * Set link to feed
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setLink(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getLink()) {
-            return;
-        }
-        $link = $dom->createElement('link');
-        $root->appendChild($link);
-        $link->setAttribute('rel', 'alternate');
-        $link->setAttribute('type', 'text/html');
-        $link->setAttribute('href', $this->getDataContainer()->getLink());
-    }
-
-    /**
-     * Set feed links
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setFeedLinks(DOMDocument $dom, DOMElement $root)
-    {
-        $flinks = $this->getDataContainer()->getFeedLinks();
-        if (!$flinks || !array_key_exists('atom', $flinks)) {
-            $message = 'Atom 1.0 feed elements SHOULD contain one atom:link '
-            . 'element with a rel attribute value of "self".  This is the '
-            . 'preferred URI for retrieving Atom Feed Documents representing '
-            . 'this Atom feed but a feed link has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        foreach ($flinks as $type => $href) {
-            $mime = 'application/' . strtolower($type) . '+xml';
-            $flink = $dom->createElement('link');
-            $root->appendChild($flink);
-            $flink->setAttribute('rel', 'self');
-            $flink->setAttribute('type', $mime);
-            $flink->setAttribute('href', $href);
-        }
-    }
-
-    /**
-     * Set feed authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->container->getAuthors();
-        if (!$authors || empty($authors)) {
-            /**
-             * Technically we should defer an exception until we can check
-             * that all entries contain an author. If any entry is missing
-             * an author, then a missing feed author element is invalid
-             */
-            return;
-        }
-        foreach ($authors as $data) {
-            $author = $this->dom->createElement('author');
-            $name = $this->dom->createElement('name');
-            $author->appendChild($name);
-            $root->appendChild($author);
-            $text = $dom->createTextNode($data['name']);
-            $name->appendChild($text);
-            if (array_key_exists('email', $data)) {
-                $email = $this->dom->createElement('email');
-                $author->appendChild($email);
-                $text = $dom->createTextNode($data['email']);
-                $email->appendChild($text);
-            }
-            if (array_key_exists('uri', $data)) {
-                $uri = $this->dom->createElement('uri');
-                $author->appendChild($uri);
-                $text = $dom->createTextNode($data['uri']);
-                $uri->appendChild($text);
-            }
-        }
-    }
-
-    /**
-     * Set feed identifier
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setId(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getId()
-        && !$this->getDataContainer()->getLink()) {
-            $message = 'Atom 1.0 feed elements MUST contain exactly one '
-            . 'atom:id element, or as an alternative, we can use the same '
-            . 'value as atom:link however neither a suitable link nor an '
-            . 'id have been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        if (!$this->getDataContainer()->getId()) {
-            $this->getDataContainer()->setId(
-                $this->getDataContainer()->getLink());
-        }
-        $id = $dom->createElement('id');
-        $root->appendChild($id);
-        $text = $dom->createTextNode($this->getDataContainer()->getId());
-        $id->appendChild($text);
-    }
-
-    /**
-     * Set feed copyright
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCopyright(DOMDocument $dom, DOMElement $root)
-    {
-        $copyright = $this->getDataContainer()->getCopyright();
-        if (!$copyright) {
-            return;
-        }
-        $copy = $dom->createElement('rights');
-        $root->appendChild($copy);
-        $text = $dom->createTextNode($copyright);
-        $copy->appendChild($text);
-    }
-
-    /**
-     * Set feed level logo (image)
-     *
-     * @param DOMDocument $dom
-     * @param DOMElement $root
-     * @return void
-     */
-    protected function _setImage(DOMDocument $dom, DOMElement $root)
-    {
-        $image = $this->getDataContainer()->getImage();
-        if (!$image) {
-            return;
-        }
-        $img = $dom->createElement('logo');
-        $root->appendChild($img);
-        $text = $dom->createTextNode($image['uri']);
-        $img->appendChild($text);
-    }
-
-    /**
-     * Set date feed was created
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateCreated()) {
-            return;
-        }
-        if (!$this->getDataContainer()->getDateModified()) {
-            $this->getDataContainer()->setDateModified(
-                $this->getDataContainer()->getDateCreated()
-            );
-        }
-    }
-
-    /**
-     * Set base URL to feed links
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setBaseUrl(DOMDocument $dom, DOMElement $root)
-    {
-        $baseUrl = $this->getDataContainer()->getBaseUrl();
-        if (!$baseUrl) {
-            return;
-        }
-        $root->setAttribute('xml:base', $baseUrl);
-    }
-
-    /**
-     * Set hubs to which this feed pushes
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setHubs(DOMDocument $dom, DOMElement $root)
-    {
-        $hubs = $this->getDataContainer()->getHubs();
-        if (!$hubs) {
-            return;
-        }
-        foreach ($hubs as $hubUrl) {
-            $hub = $dom->createElement('link');
-            $hub->setAttribute('rel', 'hub');
-            $hub->setAttribute('href', $hubUrl);
-            $root->appendChild($hub);
-        }
-    }
-
-    /**
-     * Set feed categories
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCategories(DOMDocument $dom, DOMElement $root)
-    {
-        $categories = $this->getDataContainer()->getCategories();
-        if (!$categories) {
-            return;
-        }
-        foreach ($categories as $cat) {
-            $category = $dom->createElement('category');
-            $category->setAttribute('term', $cat['term']);
-            if (isset($cat['label'])) {
-                $category->setAttribute('label', $cat['label']);
-            } else {
-                $category->setAttribute('label', $cat['term']);
-            }
-            if (isset($cat['scheme'])) {
-                $category->setAttribute('scheme', $cat['scheme']);
-            }
-            $root->appendChild($category);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom.php
deleted file mode 100644
index 939babc0b6e4af7811bd1f68977d014a94f12d00..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Feed;
-
-use DOMDocument;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-
-/**
-*/
-class Atom extends AbstractAtom implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Feed $container
-     */
-    public function __construct(Writer\Feed $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render Atom feed
-     *
-     * @return Atom
-     */
-    public function render()
-    {
-        if (!$this->container->getEncoding()) {
-            $this->container->setEncoding('UTF-8');
-        }
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $root = $this->dom->createElementNS(
-            Writer\Writer::NAMESPACE_ATOM_10,
-            'feed'
-        );
-        $this->setRootElement($root);
-        $this->dom->appendChild($root);
-        $this->_setLanguage($this->dom, $root);
-        $this->_setBaseUrl($this->dom, $root);
-        $this->_setTitle($this->dom, $root);
-        $this->_setDescription($this->dom, $root);
-        $this->_setImage($this->dom, $root);
-        $this->_setDateCreated($this->dom, $root);
-        $this->_setDateModified($this->dom, $root);
-        $this->_setGenerator($this->dom, $root);
-        $this->_setLink($this->dom, $root);
-        $this->_setFeedLinks($this->dom, $root);
-        $this->_setId($this->dom, $root);
-        $this->_setAuthors($this->dom, $root);
-        $this->_setCopyright($this->dom, $root);
-        $this->_setCategories($this->dom, $root);
-        $this->_setHubs($this->dom, $root);
-
-        foreach ($this->extensions as $ext) {
-            $ext->setType($this->getType());
-            $ext->setRootElement($this->getRootElement());
-            $ext->setDOMDocument($this->getDOMDocument(), $root);
-            $ext->render();
-        }
-
-        foreach ($this->container as $entry) {
-            if ($this->getDataContainer()->getEncoding()) {
-                $entry->setEncoding($this->getDataContainer()->getEncoding());
-            }
-            if ($entry instanceof Writer\Entry) {
-                $renderer = new Renderer\Entry\Atom($entry);
-            } else {
-                if (!$this->dom->documentElement->hasAttribute('xmlns:at')) {
-                    $this->dom->documentElement->setAttribute(
-                        'xmlns:at',
-                        'http://purl.org/atompub/tombstones/1.0'
-                    );
-                }
-                $renderer = new Renderer\Entry\AtomDeleted($entry);
-            }
-            if ($this->ignoreExceptions === true) {
-                $renderer->ignoreExceptions();
-            }
-            $renderer->setType($this->getType());
-            $renderer->setRootElement($this->dom->documentElement);
-            $renderer->render();
-            $element = $renderer->getElement();
-            $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
-            $imported = $this->dom->importNode($element, $deep);
-            $root->appendChild($imported);
-        }
-        return $this;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom/AbstractAtom.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom/AbstractAtom.php
deleted file mode 100644
index 20fc8df81e79144cabcf9d52a76d4ee4f59a5cc7..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom/AbstractAtom.php
+++ /dev/null
@@ -1,399 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Feed\Atom;
-
-use Datetime;
-use DOMDocument;
-use DOMElement;
-use Zend\Feed;
-use Zend\Feed\Writer\Version;
-
-class AbstractAtom extends Feed\Writer\Renderer\AbstractRenderer
-{
-    /**
-     * Constructor
-     *
-     * @param  \Zend\Feed\Writer\Feed $container
-     */
-    public function __construct($container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Set feed language
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setLanguage(DOMDocument $dom, DOMElement $root)
-    {
-        if ($this->getDataContainer()->getLanguage()) {
-            $root->setAttribute('xml:lang', $this->getDataContainer()
-                ->getLanguage());
-        }
-    }
-
-    /**
-     * Set feed title
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Feed\Exception\InvalidArgumentException
-     */
-    protected function _setTitle(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getTitle()) {
-            $message = 'Atom 1.0 feed elements MUST contain exactly one'
-                . ' atom:title element but a title has not been set';
-            $exception = new Feed\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        $title = $dom->createElement('title');
-        $root->appendChild($title);
-        $title->setAttribute('type', 'text');
-        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
-        $title->appendChild($text);
-    }
-
-    /**
-     * Set feed description
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDescription(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDescription()) {
-            return;
-        }
-        $subtitle = $dom->createElement('subtitle');
-        $root->appendChild($subtitle);
-        $subtitle->setAttribute('type', 'text');
-        $text = $dom->createTextNode($this->getDataContainer()->getDescription());
-        $subtitle->appendChild($text);
-    }
-
-    /**
-     * Set date feed was last modified
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Feed\Exception\InvalidArgumentException
-     */
-    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateModified()) {
-            $message = 'Atom 1.0 feed elements MUST contain exactly one'
-                . ' atom:updated element but a modification date has not been set';
-            $exception = new Feed\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        $updated = $dom->createElement('updated');
-        $root->appendChild($updated);
-        $text = $dom->createTextNode(
-            $this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
-        );
-        $updated->appendChild($text);
-    }
-
-    /**
-     * Set feed generator string
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getGenerator()) {
-            $this->getDataContainer()->setGenerator('Zend_Feed_Writer',
-                Version::VERSION, 'http://framework.zend.com');
-        }
-
-        $gdata = $this->getDataContainer()->getGenerator();
-        $generator = $dom->createElement('generator');
-        $root->appendChild($generator);
-        $text = $dom->createTextNode($gdata['name']);
-        $generator->appendChild($text);
-        if (array_key_exists('uri', $gdata)) {
-            $generator->setAttribute('uri', $gdata['uri']);
-        }
-        if (array_key_exists('version', $gdata)) {
-            $generator->setAttribute('version', $gdata['version']);
-        }
-    }
-
-    /**
-     * Set link to feed
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setLink(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getLink()) {
-            return;
-        }
-        $link = $dom->createElement('link');
-        $root->appendChild($link);
-        $link->setAttribute('rel', 'alternate');
-        $link->setAttribute('type', 'text/html');
-        $link->setAttribute('href', $this->getDataContainer()->getLink());
-    }
-
-    /**
-     * Set feed links
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Feed\Exception\InvalidArgumentException
-     */
-    protected function _setFeedLinks(DOMDocument $dom, DOMElement $root)
-    {
-        $flinks = $this->getDataContainer()->getFeedLinks();
-        if (!$flinks || !array_key_exists('atom', $flinks)) {
-            $message = 'Atom 1.0 feed elements SHOULD contain one atom:link '
-                . 'element with a rel attribute value of "self".  This is the '
-                . 'preferred URI for retrieving Atom Feed Documents representing '
-                . 'this Atom feed but a feed link has not been set';
-            $exception = new Feed\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        foreach ($flinks as $type => $href) {
-            $mime = 'application/' . strtolower($type) . '+xml';
-            $flink = $dom->createElement('link');
-            $root->appendChild($flink);
-            $flink->setAttribute('rel', 'self');
-            $flink->setAttribute('type', $mime);
-            $flink->setAttribute('href', $href);
-        }
-    }
-
-    /**
-     * Set feed authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->container->getAuthors();
-        if (!$authors || empty($authors)) {
-            /**
-             * Technically we should defer an exception until we can check
-             * that all entries contain an author. If any entry is missing
-             * an author, then a missing feed author element is invalid
-             */
-            return;
-        }
-        foreach ($authors as $data) {
-            $author = $this->dom->createElement('author');
-            $name = $this->dom->createElement('name');
-            $author->appendChild($name);
-            $root->appendChild($author);
-            $text = $dom->createTextNode($data['name']);
-            $name->appendChild($text);
-            if (array_key_exists('email', $data)) {
-                $email = $this->dom->createElement('email');
-                $author->appendChild($email);
-                $text = $dom->createTextNode($data['email']);
-                $email->appendChild($text);
-            }
-            if (array_key_exists('uri', $data)) {
-                $uri = $this->dom->createElement('uri');
-                $author->appendChild($uri);
-                $text = $dom->createTextNode($data['uri']);
-                $uri->appendChild($text);
-            }
-        }
-    }
-
-    /**
-     * Set feed identifier
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Feed\Exception\InvalidArgumentException
-     */
-    protected function _setId(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getId()
-        && !$this->getDataContainer()->getLink()) {
-            $message = 'Atom 1.0 feed elements MUST contain exactly one '
-                . 'atom:id element, or as an alternative, we can use the same '
-                . 'value as atom:link however neither a suitable link nor an '
-                . 'id have been set';
-            $exception = new Feed\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        if (!$this->getDataContainer()->getId()) {
-            $this->getDataContainer()->setId(
-                $this->getDataContainer()->getLink());
-        }
-        $id = $dom->createElement('id');
-        $root->appendChild($id);
-        $text = $dom->createTextNode($this->getDataContainer()->getId());
-        $id->appendChild($text);
-    }
-
-    /**
-     * Set feed copyright
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCopyright(DOMDocument $dom, DOMElement $root)
-    {
-        $copyright = $this->getDataContainer()->getCopyright();
-        if (!$copyright) {
-            return;
-        }
-        $copy = $dom->createElement('rights');
-        $root->appendChild($copy);
-        $text = $dom->createTextNode($copyright);
-        $copy->appendChild($text);
-    }
-    /**
-     * Set feed level logo (image)
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setImage(DOMDocument $dom, DOMElement $root)
-    {
-        $image = $this->getDataContainer()->getImage();
-        if (!$image) {
-            return;
-        }
-        $img = $dom->createElement('logo');
-        $root->appendChild($img);
-        $text = $dom->createTextNode($image['uri']);
-        $img->appendChild($text);
-    }
-
-    /**
-     * Set date feed was created
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateCreated()) {
-            return;
-        }
-        if (!$this->getDataContainer()->getDateModified()) {
-            $this->getDataContainer()->setDateModified(
-                $this->getDataContainer()->getDateCreated()
-            );
-        }
-    }
-
-    /**
-     * Set base URL to feed links
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setBaseUrl(DOMDocument $dom, DOMElement $root)
-    {
-        $baseUrl = $this->getDataContainer()->getBaseUrl();
-        if (!$baseUrl) {
-            return;
-        }
-        $root->setAttribute('xml:base', $baseUrl);
-    }
-
-    /**
-     * Set hubs to which this feed pushes
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setHubs(DOMDocument $dom, DOMElement $root)
-    {
-        $hubs = $this->getDataContainer()->getHubs();
-        if (!$hubs) {
-            return;
-        }
-        foreach ($hubs as $hubUrl) {
-            $hub = $dom->createElement('link');
-            $hub->setAttribute('rel', 'hub');
-            $hub->setAttribute('href', $hubUrl);
-            $root->appendChild($hub);
-        }
-    }
-
-    /**
-     * Set feed categories
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCategories(DOMDocument $dom, DOMElement $root)
-    {
-        $categories = $this->getDataContainer()->getCategories();
-        if (!$categories) {
-            return;
-        }
-        foreach ($categories as $cat) {
-            $category = $dom->createElement('category');
-            $category->setAttribute('term', $cat['term']);
-            if (isset($cat['label'])) {
-                $category->setAttribute('label', $cat['label']);
-            } else {
-                $category->setAttribute('label', $cat['term']);
-            }
-            if (isset($cat['scheme'])) {
-                $category->setAttribute('scheme', $cat['scheme']);
-            }
-            $root->appendChild($category);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom/Source.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom/Source.php
deleted file mode 100644
index 3793db0cbca2771f591933f59323fcfa3351f63d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Atom/Source.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Feed\Atom;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-
-class Source extends AbstractAtom implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Source $container
-     */
-    public function __construct(Writer\Source $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render Atom Feed Metadata (Source element)
-     *
-     * @return Writer\Renderer\Feed\Atom
-     */
-    public function render()
-    {
-        if (!$this->container->getEncoding()) {
-            $this->container->setEncoding('UTF-8');
-        }
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $root = $this->dom->createElement('source');
-        $this->setRootElement($root);
-        $this->dom->appendChild($root);
-        $this->_setLanguage($this->dom, $root);
-        $this->_setBaseUrl($this->dom, $root);
-        $this->_setTitle($this->dom, $root);
-        $this->_setDescription($this->dom, $root);
-        $this->_setDateCreated($this->dom, $root);
-        $this->_setDateModified($this->dom, $root);
-        $this->_setGenerator($this->dom, $root);
-        $this->_setLink($this->dom, $root);
-        $this->_setFeedLinks($this->dom, $root);
-        $this->_setId($this->dom, $root);
-        $this->_setAuthors($this->dom, $root);
-        $this->_setCopyright($this->dom, $root);
-        $this->_setCategories($this->dom, $root);
-
-        foreach ($this->extensions as $ext) {
-            $ext->setType($this->getType());
-            $ext->setRootElement($this->getRootElement());
-            $ext->setDomDocument($this->getDomDocument(), $root);
-            $ext->render();
-        }
-        return $this;
-    }
-
-    /**
-     * Set feed generator string
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getGenerator()) {
-            return;
-        }
-
-        $gdata = $this->getDataContainer()->getGenerator();
-        $generator = $dom->createElement('generator');
-        $root->appendChild($generator);
-        $text = $dom->createTextNode($gdata['name']);
-        $generator->appendChild($text);
-        if (array_key_exists('uri', $gdata)) {
-            $generator->setAttribute('uri', $gdata['uri']);
-        }
-        if (array_key_exists('version', $gdata)) {
-            $generator->setAttribute('version', $gdata['version']);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/AtomSource.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/AtomSource.php
deleted file mode 100644
index d552b8089229ae9b6fe3704046fe036765295a85..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/AtomSource.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Feed;
-
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-
-/**
-*/
-class AtomSource extends AbstractAtom implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Source $container
-     */
-    public function __construct(Writer\Source $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render Atom Feed Metadata (Source element)
-     *
-     * @return \Zend\Feed\Writer\Renderer\Feed\Atom
-     */
-    public function render()
-    {
-        if (!$this->container->getEncoding()) {
-            $this->container->setEncoding('UTF-8');
-        }
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $root = $this->dom->createElement('source');
-        $this->setRootElement($root);
-        $this->dom->appendChild($root);
-        $this->_setLanguage($this->dom, $root);
-        $this->_setBaseUrl($this->dom, $root);
-        $this->_setTitle($this->dom, $root);
-        $this->_setDescription($this->dom, $root);
-        $this->_setDateCreated($this->dom, $root);
-        $this->_setDateModified($this->dom, $root);
-        $this->_setGenerator($this->dom, $root);
-        $this->_setLink($this->dom, $root);
-        $this->_setFeedLinks($this->dom, $root);
-        $this->_setId($this->dom, $root);
-        $this->_setAuthors($this->dom, $root);
-        $this->_setCopyright($this->dom, $root);
-        $this->_setCategories($this->dom, $root);
-
-        foreach ($this->extensions as $ext) {
-            $ext->setType($this->getType());
-            $ext->setRootElement($this->getRootElement());
-            $ext->setDOMDocument($this->getDOMDocument(), $root);
-            $ext->render();
-        }
-        return $this;
-    }
-
-    /**
-     * Set feed generator string
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getGenerator()) {
-            return;
-        }
-
-        $gdata = $this->getDataContainer()->getGenerator();
-        $generator = $dom->createElement('generator');
-        $root->appendChild($generator);
-        $text = $dom->createTextNode($gdata['name']);
-        $generator->appendChild($text);
-        if (array_key_exists('uri', $gdata)) {
-            $generator->setAttribute('uri', $gdata['uri']);
-        }
-        if (array_key_exists('version', $gdata)) {
-            $generator->setAttribute('version', $gdata['version']);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Rss.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Rss.php
deleted file mode 100644
index be902b8a901770f68e2816e424c44159477de500..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/Feed/Rss.php
+++ /dev/null
@@ -1,488 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer\Feed;
-
-use DateTime;
-use DOMDocument;
-use DOMElement;
-use Zend\Feed\Uri;
-use Zend\Feed\Writer;
-use Zend\Feed\Writer\Renderer;
-use Zend\Feed\Writer\Version;
-
-/**
-*/
-class Rss extends Renderer\AbstractRenderer implements Renderer\RendererInterface
-{
-    /**
-     * Constructor
-     *
-     * @param  Writer\Feed $container
-     */
-    public function __construct(Writer\Feed $container)
-    {
-        parent::__construct($container);
-    }
-
-    /**
-     * Render RSS feed
-     *
-     * @return self
-     */
-    public function render()
-    {
-        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
-        $this->dom->formatOutput = true;
-        $this->dom->substituteEntities = false;
-        $rss = $this->dom->createElement('rss');
-        $this->setRootElement($rss);
-        $rss->setAttribute('version', '2.0');
-
-        $channel = $this->dom->createElement('channel');
-        $rss->appendChild($channel);
-        $this->dom->appendChild($rss);
-        $this->_setLanguage($this->dom, $channel);
-        $this->_setBaseUrl($this->dom, $channel);
-        $this->_setTitle($this->dom, $channel);
-        $this->_setDescription($this->dom, $channel);
-        $this->_setImage($this->dom, $channel);
-        $this->_setDateCreated($this->dom, $channel);
-        $this->_setDateModified($this->dom, $channel);
-        $this->_setLastBuildDate($this->dom, $channel);
-        $this->_setGenerator($this->dom, $channel);
-        $this->_setLink($this->dom, $channel);
-        $this->_setAuthors($this->dom, $channel);
-        $this->_setCopyright($this->dom, $channel);
-        $this->_setCategories($this->dom, $channel);
-
-        foreach ($this->extensions as $ext) {
-            $ext->setType($this->getType());
-            $ext->setRootElement($this->getRootElement());
-            $ext->setDOMDocument($this->getDOMDocument(), $channel);
-            $ext->render();
-        }
-
-        foreach ($this->container as $entry) {
-            if ($this->getDataContainer()->getEncoding()) {
-                $entry->setEncoding($this->getDataContainer()->getEncoding());
-            }
-            if ($entry instanceof Writer\Entry) {
-                $renderer = new Renderer\Entry\Rss($entry);
-            } else {
-                continue;
-            }
-            if ($this->ignoreExceptions === true) {
-                $renderer->ignoreExceptions();
-            }
-            $renderer->setType($this->getType());
-            $renderer->setRootElement($this->dom->documentElement);
-            $renderer->render();
-            $element = $renderer->getElement();
-            $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
-            $imported = $this->dom->importNode($element, $deep);
-            $channel->appendChild($imported);
-        }
-        return $this;
-    }
-
-    /**
-     * Set feed language
-     *
-     * @param DOMDocument $dom
-     * @param DOMElement $root
-     * @return void
-     */
-    protected function _setLanguage(DOMDocument $dom, DOMElement $root)
-    {
-        $lang = $this->getDataContainer()->getLanguage();
-        if (!$lang) {
-            return;
-        }
-        $language = $dom->createElement('language');
-        $root->appendChild($language);
-        $language->nodeValue = $lang;
-    }
-
-    /**
-     * Set feed title
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setTitle(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getTitle()) {
-            $message = 'RSS 2.0 feed elements MUST contain exactly one'
-            . ' title element but a title has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        $title = $dom->createElement('title');
-        $root->appendChild($title);
-        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
-        $title->appendChild($text);
-    }
-
-    /**
-     * Set feed description
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setDescription(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDescription()) {
-            $message = 'RSS 2.0 feed elements MUST contain exactly one'
-            . ' description element but one has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        $subtitle = $dom->createElement('description');
-        $root->appendChild($subtitle);
-        $text = $dom->createTextNode($this->getDataContainer()->getDescription());
-        $subtitle->appendChild($text);
-    }
-
-    /**
-     * Set date feed was last modified
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateModified()) {
-            return;
-        }
-
-        $updated = $dom->createElement('pubDate');
-        $root->appendChild($updated);
-        $text = $dom->createTextNode(
-            $this->getDataContainer()->getDateModified()->format(DateTime::RSS)
-        );
-        $updated->appendChild($text);
-    }
-
-    /**
-     * Set feed generator string
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getGenerator()) {
-            $this->getDataContainer()->setGenerator(
-                'Zend_Feed_Writer',
-                Version::VERSION,
-                'http://framework.zend.com'
-            );
-        }
-
-        $gdata = $this->getDataContainer()->getGenerator();
-        $generator = $dom->createElement('generator');
-        $root->appendChild($generator);
-        $name = $gdata['name'];
-        if (array_key_exists('version', $gdata)) {
-            $name .= ' ' . $gdata['version'];
-        }
-        if (array_key_exists('uri', $gdata)) {
-            $name .= ' (' . $gdata['uri'] . ')';
-        }
-        $text = $dom->createTextNode($name);
-        $generator->appendChild($text);
-    }
-
-    /**
-     * Set link to feed
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setLink(DOMDocument $dom, DOMElement $root)
-    {
-        $value = $this->getDataContainer()->getLink();
-        if (!$value) {
-            $message = 'RSS 2.0 feed elements MUST contain exactly one'
-            . ' link element but one has not been set';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-        $link = $dom->createElement('link');
-        $root->appendChild($link);
-        $text = $dom->createTextNode($value);
-        $link->appendChild($text);
-        if (!Uri::factory($value)->isValid()) {
-            $link->setAttribute('isPermaLink', 'false');
-        }
-    }
-
-    /**
-     * Set feed authors
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
-    {
-        $authors = $this->getDataContainer()->getAuthors();
-        if (!$authors || empty($authors)) {
-            return;
-        }
-        foreach ($authors as $data) {
-            $author = $this->dom->createElement('author');
-            $name = $data['name'];
-            if (array_key_exists('email', $data)) {
-                $name = $data['email'] . ' (' . $data['name'] . ')';
-            }
-            $text = $dom->createTextNode($name);
-            $author->appendChild($text);
-            $root->appendChild($author);
-        }
-    }
-
-    /**
-     * Set feed copyright
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCopyright(DOMDocument $dom, DOMElement $root)
-    {
-        $copyright = $this->getDataContainer()->getCopyright();
-        if (!$copyright) {
-            return;
-        }
-        $copy = $dom->createElement('copyright');
-        $root->appendChild($copy);
-        $text = $dom->createTextNode($copyright);
-        $copy->appendChild($text);
-    }
-
-    /**
-     * Set feed channel image
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     * @throws Writer\Exception\InvalidArgumentException
-     */
-    protected function _setImage(DOMDocument $dom, DOMElement $root)
-    {
-        $image = $this->getDataContainer()->getImage();
-        if (!$image) {
-            return;
-        }
-
-        if (!isset($image['title']) || empty($image['title'])
-            || !is_string($image['title'])
-        ) {
-            $message = 'RSS 2.0 feed images must include a title';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        if (empty($image['link']) || !is_string($image['link'])
-            || !Uri::factory($image['link'])->isValid()
-        ) {
-            $message = 'Invalid parameter: parameter \'link\''
-            . ' must be a non-empty string and valid URI/IRI';
-            $exception = new Writer\Exception\InvalidArgumentException($message);
-            if (!$this->ignoreExceptions) {
-                throw $exception;
-            } else {
-                $this->exceptions[] = $exception;
-                return;
-            }
-        }
-
-        $img   = $dom->createElement('image');
-        $root->appendChild($img);
-
-        $url   = $dom->createElement('url');
-        $text  = $dom->createTextNode($image['uri']);
-        $url->appendChild($text);
-
-        $title = $dom->createElement('title');
-        $text  = $dom->createTextNode($image['title']);
-        $title->appendChild($text);
-
-        $link  = $dom->createElement('link');
-        $text  = $dom->createTextNode($image['link']);
-        $link->appendChild($text);
-
-        $img->appendChild($url);
-        $img->appendChild($title);
-        $img->appendChild($link);
-
-        if (isset($image['height'])) {
-            if (!ctype_digit((string) $image['height']) || $image['height'] > 400) {
-                $message = 'Invalid parameter: parameter \'height\''
-                         . ' must be an integer not exceeding 400';
-                $exception = new Writer\Exception\InvalidArgumentException($message);
-                if (!$this->ignoreExceptions) {
-                    throw $exception;
-                } else {
-                    $this->exceptions[] = $exception;
-                    return;
-                }
-            }
-            $height = $dom->createElement('height');
-            $text   = $dom->createTextNode($image['height']);
-            $height->appendChild($text);
-            $img->appendChild($height);
-        }
-        if (isset($image['width'])) {
-            if (!ctype_digit((string) $image['width']) || $image['width'] > 144) {
-                $message = 'Invalid parameter: parameter \'width\''
-                         . ' must be an integer not exceeding 144';
-                $exception = new Writer\Exception\InvalidArgumentException($message);
-                if (!$this->ignoreExceptions) {
-                    throw $exception;
-                } else {
-                    $this->exceptions[] = $exception;
-                    return;
-                }
-            }
-            $width = $dom->createElement('width');
-            $text  = $dom->createTextNode($image['width']);
-            $width->appendChild($text);
-            $img->appendChild($width);
-        }
-        if (isset($image['description'])) {
-            if (empty($image['description']) || !is_string($image['description'])) {
-                $message = 'Invalid parameter: parameter \'description\''
-                         . ' must be a non-empty string';
-                $exception = new Writer\Exception\InvalidArgumentException($message);
-                if (!$this->ignoreExceptions) {
-                    throw $exception;
-                } else {
-                    $this->exceptions[] = $exception;
-                    return;
-                }
-            }
-            $desc = $dom->createElement('description');
-            $text = $dom->createTextNode($image['description']);
-            $desc->appendChild($text);
-            $img->appendChild($desc);
-        }
-    }
-
-    /**
-     * Set date feed was created
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getDateCreated()) {
-            return;
-        }
-        if (!$this->getDataContainer()->getDateModified()) {
-            $this->getDataContainer()->setDateModified(
-                $this->getDataContainer()->getDateCreated()
-            );
-        }
-    }
-
-    /**
-     * Set date feed last build date
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setLastBuildDate(DOMDocument $dom, DOMElement $root)
-    {
-        if (!$this->getDataContainer()->getLastBuildDate()) {
-            return;
-        }
-
-        $lastBuildDate = $dom->createElement('lastBuildDate');
-        $root->appendChild($lastBuildDate);
-        $text = $dom->createTextNode(
-            $this->getDataContainer()->getLastBuildDate()->format(DateTime::RSS)
-        );
-        $lastBuildDate->appendChild($text);
-    }
-
-    /**
-     * Set base URL to feed links
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setBaseUrl(DOMDocument $dom, DOMElement $root)
-    {
-        $baseUrl = $this->getDataContainer()->getBaseUrl();
-        if (!$baseUrl) {
-            return;
-        }
-        $root->setAttribute('xml:base', $baseUrl);
-    }
-
-    /**
-     * Set feed categories
-     *
-     * @param  DOMDocument $dom
-     * @param  DOMElement $root
-     * @return void
-     */
-    protected function _setCategories(DOMDocument $dom, DOMElement $root)
-    {
-        $categories = $this->getDataContainer()->getCategories();
-        if (!$categories) {
-            return;
-        }
-        foreach ($categories as $cat) {
-            $category = $dom->createElement('category');
-            if (isset($cat['scheme'])) {
-                $category->setAttribute('domain', $cat['scheme']);
-            }
-            $text = $dom->createTextNode($cat['term']);
-            $category->appendChild($text);
-            $root->appendChild($category);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Renderer/RendererInterface.php b/core/vendor/zendframework/zend-feed/Writer/Renderer/RendererInterface.php
deleted file mode 100644
index 24738efcab11f09916fd0a42d598383eccc8f163..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Renderer/RendererInterface.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer\Renderer;
-
-use DOMDocument;
-use DOMElement;
-
-/**
-*/
-interface RendererInterface
-{
-    /**
-     * Render feed/entry
-     *
-     * @return void
-     */
-    public function render();
-
-    /**
-     * Save feed and/or entry to XML and return string
-     *
-     * @return string
-     */
-    public function saveXml();
-
-    /**
-     * Get DOM document
-     *
-     * @return DOMDocument
-     */
-    public function getDomDocument();
-
-    /**
-     * Get document element from DOM
-     *
-     * @return DOMElement
-     */
-    public function getElement();
-
-    /**
-     * Get data container containing feed items
-     *
-     * @return mixed
-     */
-    public function getDataContainer();
-
-    /**
-     * Should exceptions be ignored?
-     *
-     * @return mixed
-     */
-    public function ignoreExceptions();
-
-    /**
-     * Get list of thrown exceptions
-     *
-     * @return array
-     */
-    public function getExceptions();
-
-    /**
-     * Set the current feed type being exported to "rss" or "atom". This allows
-     * other objects to gracefully choose whether to execute or not, depending
-     * on their appropriateness for the current type, e.g. renderers.
-     *
-     * @param string $type
-     */
-    public function setType($type);
-
-    /**
-     * Retrieve the current or last feed type exported.
-     *
-     * @return string Value will be "rss" or "atom"
-     */
-    public function getType();
-
-    /**
-     * Sets the absolute root element for the XML feed being generated. This
-     * helps simplify the appending of namespace declarations, but also ensures
-     * namespaces are added to the root element - not scattered across the entire
-     * XML file - may assist namespace unsafe parsers and looks pretty ;).
-     *
-     * @param DOMElement $root
-     */
-    public function setRootElement(DOMElement $root);
-
-    /**
-     * Retrieve the absolute root element for the XML feed being generated.
-     *
-     * @return DOMElement
-     */
-    public function getRootElement();
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Source.php b/core/vendor/zendframework/zend-feed/Writer/Source.php
deleted file mode 100644
index 23affa7a6fadff87680e8ff7117eaf420a9202e5..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Source.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-/**
-*/
-class Source extends AbstractFeed
-{
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Version.php b/core/vendor/zendframework/zend-feed/Writer/Version.php
deleted file mode 100644
index 08351ca3f15dec2934585e1522c1f0e630635051..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Version.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-abstract class Version
-{
-    const VERSION = '2';
-}
diff --git a/core/vendor/zendframework/zend-feed/Writer/Writer.php b/core/vendor/zendframework/zend-feed/Writer/Writer.php
deleted file mode 100644
index 8c5397892bfa8ec5230a6bd12003a09388b9faee..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-feed/Writer/Writer.php
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Writer;
-
-/**
-*/
-class Writer
-{
-    /**
-     * Namespace constants
-     */
-    const NAMESPACE_ATOM_03  = 'http://purl.org/atom/ns#';
-    const NAMESPACE_ATOM_10  = 'http://www.w3.org/2005/Atom';
-    const NAMESPACE_RDF      = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
-    const NAMESPACE_RSS_090  = 'http://my.netscape.com/rdf/simple/0.9/';
-    const NAMESPACE_RSS_10   = 'http://purl.org/rss/1.0/';
-
-    /**
-     * Feed type constants
-     */
-    const TYPE_ANY              = 'any';
-    const TYPE_ATOM_03          = 'atom-03';
-    const TYPE_ATOM_10          = 'atom-10';
-    const TYPE_ATOM_ANY         = 'atom';
-    const TYPE_RSS_090          = 'rss-090';
-    const TYPE_RSS_091          = 'rss-091';
-    const TYPE_RSS_091_NETSCAPE = 'rss-091n';
-    const TYPE_RSS_091_USERLAND = 'rss-091u';
-    const TYPE_RSS_092          = 'rss-092';
-    const TYPE_RSS_093          = 'rss-093';
-    const TYPE_RSS_094          = 'rss-094';
-    const TYPE_RSS_10           = 'rss-10';
-    const TYPE_RSS_20           = 'rss-20';
-    const TYPE_RSS_ANY          = 'rss';
-
-    /**
-     * @var ExtensionManagerInterface
-     */
-    protected static $extensionManager = null;
-
-    /**
-     * Array of registered extensions by class postfix (after the base class
-     * name) across four categories - data containers and renderers for entry
-     * and feed levels.
-     *
-     * @var array
-     */
-    protected static $extensions = array(
-        'entry'         => array(),
-        'feed'          => array(),
-        'entryRenderer' => array(),
-        'feedRenderer'  => array(),
-    );
-
-    /**
-     * Set plugin loader for use with Extensions
-     *
-     * @param ExtensionManagerInterface
-     */
-    public static function setExtensionManager(ExtensionManagerInterface $extensionManager)
-    {
-        static::$extensionManager = $extensionManager;
-    }
-
-    /**
-     * Get plugin manager for use with Extensions
-     *
-     * @return ExtensionManagerInterface
-     */
-    public static function getExtensionManager()
-    {
-        if (!isset(static::$extensionManager)) {
-            static::setExtensionManager(new ExtensionManager());
-        }
-        return static::$extensionManager;
-    }
-
-    /**
-     * Register an Extension by name
-     *
-     * @param  string $name
-     * @return void
-     * @throws Exception\RuntimeException if unable to resolve Extension class
-     */
-    public static function registerExtension($name)
-    {
-        $feedName          = $name . '\Feed';
-        $entryName         = $name . '\Entry';
-        $feedRendererName  = $name . '\Renderer\Feed';
-        $entryRendererName = $name . '\Renderer\Entry';
-        $manager           = static::getExtensionManager();
-        if (static::isRegistered($name)) {
-            if ($manager->has($feedName)
-                || $manager->has($entryName)
-                || $manager->has($feedRendererName)
-                || $manager->has($entryRendererName)
-            ) {
-                return;
-            }
-        }
-        if (!$manager->has($feedName)
-            && !$manager->has($entryName)
-            && !$manager->has($feedRendererName)
-            && !$manager->has($entryRendererName)
-        ) {
-            throw new Exception\RuntimeException('Could not load extension: ' . $name
-                . 'using Plugin Loader. Check prefix paths are configured and extension exists.');
-        }
-        if ($manager->has($feedName)) {
-            static::$extensions['feed'][] = $feedName;
-        }
-        if ($manager->has($entryName)) {
-            static::$extensions['entry'][] = $entryName;
-        }
-        if ($manager->has($feedRendererName)) {
-            static::$extensions['feedRenderer'][] = $feedRendererName;
-        }
-        if ($manager->has($entryRendererName)) {
-            static::$extensions['entryRenderer'][] = $entryRendererName;
-        }
-    }
-
-    /**
-     * Is a given named Extension registered?
-     *
-     * @param  string $extensionName
-     * @return bool
-     */
-    public static function isRegistered($extensionName)
-    {
-        $feedName          = $extensionName . '\Feed';
-        $entryName         = $extensionName . '\Entry';
-        $feedRendererName  = $extensionName . '\Renderer\Feed';
-        $entryRendererName = $extensionName . '\Renderer\Entry';
-        if (in_array($feedName, static::$extensions['feed'])
-            || in_array($entryName, static::$extensions['entry'])
-            || in_array($feedRendererName, static::$extensions['feedRenderer'])
-            || in_array($entryRendererName, static::$extensions['entryRenderer'])
-        ) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Get a list of extensions
-     *
-     * @return array
-     */
-    public static function getExtensions()
-    {
-        return static::$extensions;
-    }
-
-    /**
-     * Reset class state to defaults
-     *
-     * @return void
-     */
-    public static function reset()
-    {
-        static::$extensionManager = null;
-        static::$extensions   = array(
-            'entry'         => array(),
-            'feed'          => array(),
-            'entryRenderer' => array(),
-            'feedRenderer'  => array(),
-        );
-    }
-
-    /**
-     * Register core (default) extensions
-     *
-     * @return void
-     */
-    public static function registerCoreExtensions()
-    {
-        static::registerExtension('DublinCore');
-        static::registerExtension('Content');
-        static::registerExtension('Atom');
-        static::registerExtension('Slash');
-        static::registerExtension('WellFormedWeb');
-        static::registerExtension('Threading');
-        static::registerExtension('ITunes');
-    }
-
-    public static function lcfirst($str)
-    {
-        $str[0] = strtolower($str[0]);
-        return $str;
-    }
-}
diff --git a/core/vendor/zendframework/zend-feed/composer.json b/core/vendor/zendframework/zend-feed/composer.json
index 5541ae5d514d8a8a1f6cdfbd361aadc8c4de8db8..ace0259ab8442a2e7e6ac37afb7f4c78b702e8d6 100644
--- a/core/vendor/zendframework/zend-feed/composer.json
+++ b/core/vendor/zendframework/zend-feed/composer.json
@@ -6,10 +6,10 @@
         "zf2",
         "feed"
     ],
-    "homepage": "https://github.com/zendframework/zf2",
+    "homepage": "https://github.com/zendframework/zend-feed",
     "autoload": {
         "psr-4": {
-            "Zend\\Feed\\": ""
+            "Zend\\Feed\\": "src/"
         }
     },
     "require": {
@@ -22,7 +22,10 @@
         "zendframework/zend-cache": "self.version",
         "zendframework/zend-http": "self.version",
         "zendframework/zend-servicemanager": "self.version",
-        "zendframework/zend-validator": "self.version"
+        "zendframework/zend-validator": "self.version",
+        "fabpot/php-cs-fixer": "1.7.*",
+        "satooshi/php-coveralls": "dev-master",
+        "phpunit/PHPUnit": "~4.0"
     },
     "suggest": {
         "zendframework/zend-cache": "Zend\\Cache component",
@@ -36,5 +39,10 @@
             "dev-master": "2.3-dev",
             "dev-develop": "2.4-dev"
         }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "ZendTest\\Feed\\": "test/"
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/zendframework/zend-feed/phpunit.xml.dist b/core/vendor/zendframework/zend-feed/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..d0a2191f4e78bfd4e5cd68d88526647044340f14
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/phpunit.xml.dist
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
+         bootstrap="./test/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite name="zend-feed Test Suite">
+            <directory>./test/</directory>
+        </testsuite>
+    </testsuites>
+
+    <groups>
+        <exclude>
+            <group>disable</group>
+        </exclude>
+    </groups>
+
+    <filter>
+        <whitelist addUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+
+    <php>
+        <ini name="date.timezone" value="UTC"/>
+
+        <!-- OB_ENABLED should be enabled for some tests to check if all
+             functionality works as expected. Such tests include those for
+             Zend\Soap and Zend\Session, which require that headers not be sent
+             in order to work. -->
+        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
+
+        <const name="TESTS_ZEND_FEED_PUBSUBHUBBUB_BASEURI" value="false" />
+        <const name="TESTS_ZEND_FEED_READER_ONLINE_ENABLED" value="false" />
+    </php>
+</phpunit>
diff --git a/core/vendor/zendframework/zend-feed/phpunit.xml.travis b/core/vendor/zendframework/zend-feed/phpunit.xml.travis
new file mode 100644
index 0000000000000000000000000000000000000000..d0a2191f4e78bfd4e5cd68d88526647044340f14
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/phpunit.xml.travis
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
+         bootstrap="./test/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite name="zend-feed Test Suite">
+            <directory>./test/</directory>
+        </testsuite>
+    </testsuites>
+
+    <groups>
+        <exclude>
+            <group>disable</group>
+        </exclude>
+    </groups>
+
+    <filter>
+        <whitelist addUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+
+    <php>
+        <ini name="date.timezone" value="UTC"/>
+
+        <!-- OB_ENABLED should be enabled for some tests to check if all
+             functionality works as expected. Such tests include those for
+             Zend\Soap and Zend\Session, which require that headers not be sent
+             in order to work. -->
+        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
+
+        <const name="TESTS_ZEND_FEED_PUBSUBHUBBUB_BASEURI" value="false" />
+        <const name="TESTS_ZEND_FEED_READER_ONLINE_ENABLED" value="false" />
+    </php>
+</phpunit>
diff --git a/core/vendor/zendframework/zend-feed/src/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-feed/src/Exception/BadMethodCallException.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e994f2eb2b3a387726497b5b37a5636dac69eb0
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Exception/BadMethodCallException.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Exception;
+
+class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/src/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..0f752962f18c5a4b2c3bb9268cceace24e184414
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Exception/ExceptionInterface.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Exception;
+
+interface ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/src/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..29b64828ac5d6c9c6a49fa5fc88319ed73c71171
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Exception/InvalidArgumentException.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Exception;
+
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/src/Exception/RuntimeException.php
new file mode 100644
index 0000000000000000000000000000000000000000..43167a1e74f5fba5de4a126c281c9487b099b9c0
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Exception/RuntimeException.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Exception;
+
+class RuntimeException extends \RuntimeException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/AbstractCallback.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/AbstractCallback.php
new file mode 100644
index 0000000000000000000000000000000000000000..7321c9625df4b318023006c8250b2eb36e4665e9
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/AbstractCallback.php
@@ -0,0 +1,291 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub;
+
+use Traversable;
+use Zend\Http\PhpEnvironment\Response as PhpResponse;
+use Zend\Stdlib\ArrayUtils;
+
+abstract class AbstractCallback implements CallbackInterface
+{
+    /**
+     * An instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistenceInterface
+     * used to background save any verification tokens associated with a subscription
+     * or other.
+     *
+     * @var Model\SubscriptionPersistenceInterface
+     */
+    protected $storage = null;
+
+    /**
+     * An instance of a class handling Http Responses. This is implemented in
+     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
+     * (i.e. not inherited from) Zend\Controller\Response\Http.
+     *
+     * @var HttpResponse|PhpResponse
+     */
+    protected $httpResponse = null;
+
+    /**
+     * The number of Subscribers for which any updates are on behalf of.
+     *
+     * @var int
+     */
+    protected $subscriberCount = 1;
+
+    /**
+     * Constructor; accepts an array or Traversable object to preset
+     * options for the Subscriber without calling all supported setter
+     * methods in turn.
+     *
+     * @param  array|Traversable $options Options array or Traversable object
+     */
+    public function __construct($options = null)
+    {
+        if ($options !== null) {
+            $this->setOptions($options);
+        }
+    }
+
+    /**
+     * Process any injected configuration options
+     *
+     * @param  array|Traversable $options Options array or Traversable object
+     * @return AbstractCallback
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setOptions($options)
+    {
+        if ($options instanceof Traversable) {
+            $options = ArrayUtils::iteratorToArray($options);
+        }
+
+        if (!is_array($options)) {
+            throw new Exception\InvalidArgumentException('Array or Traversable object'
+            . 'expected, got ' . gettype($options));
+        }
+
+        if (is_array($options)) {
+            $this->setOptions($options);
+        }
+
+        if (array_key_exists('storage', $options)) {
+            $this->setStorage($options['storage']);
+        }
+        return $this;
+    }
+
+    /**
+     * Send the response, including all headers.
+     * If you wish to handle this via Zend\Http, use the getter methods
+     * to retrieve any data needed to be set on your HTTP Response object, or
+     * simply give this object the HTTP Response instance to work with for you!
+     *
+     * @return void
+     */
+    public function sendResponse()
+    {
+        $this->getHttpResponse()->send();
+    }
+
+    /**
+     * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used
+     * to background save any verification tokens associated with a subscription
+     * or other.
+     *
+     * @param  Model\SubscriptionPersistenceInterface $storage
+     * @return AbstractCallback
+     */
+    public function setStorage(Model\SubscriptionPersistenceInterface $storage)
+    {
+        $this->storage = $storage;
+        return $this;
+    }
+
+    /**
+     * Gets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used
+     * to background save any verification tokens associated with a subscription
+     * or other.
+     *
+     * @return Model\SubscriptionPersistenceInterface
+     * @throws Exception\RuntimeException
+     */
+    public function getStorage()
+    {
+        if ($this->storage === null) {
+            throw new Exception\RuntimeException('No storage object has been'
+                . ' set that subclasses Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence');
+        }
+        return $this->storage;
+    }
+
+    /**
+     * An instance of a class handling Http Responses. This is implemented in
+     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
+     * (i.e. not inherited from) Zend\Controller\Response\Http.
+     *
+     * @param  HttpResponse|PhpResponse $httpResponse
+     * @return AbstractCallback
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setHttpResponse($httpResponse)
+    {
+        if (!$httpResponse instanceof HttpResponse && !$httpResponse instanceof PhpResponse) {
+            throw new Exception\InvalidArgumentException('HTTP Response object must'
+                . ' implement one of Zend\Feed\Pubsubhubbub\HttpResponse or'
+                . ' Zend\Http\PhpEnvironment\Response');
+        }
+        $this->httpResponse = $httpResponse;
+        return $this;
+    }
+
+    /**
+     * An instance of a class handling Http Responses. This is implemented in
+     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
+     * (i.e. not inherited from) Zend\Controller\Response\Http.
+     *
+     * @return HttpResponse|PhpResponse
+     */
+    public function getHttpResponse()
+    {
+        if ($this->httpResponse === null) {
+            $this->httpResponse = new HttpResponse;
+        }
+        return $this->httpResponse;
+    }
+
+    /**
+     * Sets the number of Subscribers for which any updates are on behalf of.
+     * In other words, is this class serving one or more subscribers? How many?
+     * Defaults to 1 if left unchanged.
+     *
+     * @param  string|int $count
+     * @return AbstractCallback
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setSubscriberCount($count)
+    {
+        $count = intval($count);
+        if ($count <= 0) {
+            throw new Exception\InvalidArgumentException('Subscriber count must be'
+                . ' greater than zero');
+        }
+        $this->subscriberCount = $count;
+        return $this;
+    }
+
+    /**
+     * Gets the number of Subscribers for which any updates are on behalf of.
+     * In other words, is this class serving one or more subscribers? How many?
+     *
+     * @return int
+     */
+    public function getSubscriberCount()
+    {
+        return $this->subscriberCount;
+    }
+
+    /**
+     * Attempt to detect the callback URL (specifically the path forward)
+     * @return string
+     */
+    protected function _detectCallbackUrl()
+    {
+        $callbackUrl = '';
+        if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
+            $callbackUrl = $_SERVER['HTTP_X_ORIGINAL_URL'];
+        } elseif (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
+            $callbackUrl = $_SERVER['HTTP_X_REWRITE_URL'];
+        } elseif (isset($_SERVER['REQUEST_URI'])) {
+            $callbackUrl = $_SERVER['REQUEST_URI'];
+            $scheme = 'http';
+            if ($_SERVER['HTTPS'] == 'on') {
+                $scheme = 'https';
+            }
+            $schemeAndHttpHost = $scheme . '://' . $this->_getHttpHost();
+            if (strpos($callbackUrl, $schemeAndHttpHost) === 0) {
+                $callbackUrl = substr($callbackUrl, strlen($schemeAndHttpHost));
+            }
+        } elseif (isset($_SERVER['ORIG_PATH_INFO'])) {
+            $callbackUrl= $_SERVER['ORIG_PATH_INFO'];
+            if (!empty($_SERVER['QUERY_STRING'])) {
+                $callbackUrl .= '?' . $_SERVER['QUERY_STRING'];
+            }
+        }
+        return $callbackUrl;
+    }
+
+    /**
+     * Get the HTTP host
+     *
+     * @return string
+     */
+    protected function _getHttpHost()
+    {
+        if (!empty($_SERVER['HTTP_HOST'])) {
+            return $_SERVER['HTTP_HOST'];
+        }
+        $scheme = 'http';
+        if ($_SERVER['HTTPS'] == 'on') {
+            $scheme = 'https';
+        }
+        $name = $_SERVER['SERVER_NAME'];
+        $port = $_SERVER['SERVER_PORT'];
+        if (($scheme == 'http' && $port == 80)
+            || ($scheme == 'https' && $port == 443)
+        ) {
+            return $name;
+        }
+
+        return $name . ':' . $port;
+    }
+
+    /**
+     * Retrieve a Header value from either $_SERVER or Apache
+     *
+     * @param string $header
+     * @return bool|string
+     */
+    protected function _getHeader($header)
+    {
+        $temp = strtoupper(str_replace('-', '_', $header));
+        if (!empty($_SERVER[$temp])) {
+            return $_SERVER[$temp];
+        }
+        $temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
+        if (!empty($_SERVER[$temp])) {
+            return $_SERVER[$temp];
+        }
+        if (function_exists('apache_request_headers')) {
+            $headers = apache_request_headers();
+            if (!empty($headers[$header])) {
+                return $headers[$header];
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Return the raw body of the request
+     *
+     * @return string|false Raw body, or false if not present
+     */
+    protected function _getRawBody()
+    {
+        $body = file_get_contents('php://input');
+        if (strlen(trim($body)) == 0 && isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
+            $body = $GLOBALS['HTTP_RAW_POST_DATA'];
+        }
+        if (strlen(trim($body)) > 0) {
+            return $body;
+        }
+        return false;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/CallbackInterface.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/CallbackInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6b7412fd0c8bece79e5baf9f047af7073c8bb32
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/CallbackInterface.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub;
+
+interface CallbackInterface
+{
+    /**
+     * Handle any callback from a Hub Server responding to a subscription or
+     * unsubscription request. This should be the Hub Server confirming the
+     * the request prior to taking action on it.
+     *
+     * @param array $httpData GET/POST data if available and not in $_GET/POST
+     * @param bool $sendResponseNow Whether to send response now or when asked
+     */
+    public function handle(array $httpData = null, $sendResponseNow = false);
+
+    /**
+     * Send the response, including all headers.
+     * If you wish to handle this via Zend\Mvc\Controller, use the getter methods
+     * to retrieve any data needed to be set on your HTTP Response object, or
+     * simply give this object the HTTP Response instance to work with for you!
+     *
+     * @return void
+     */
+    public function sendResponse();
+
+    /**
+     * An instance of a class handling Http Responses. This is implemented in
+     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
+     * (i.e. not inherited from) Zend\Feed\Pubsubhubbub\AbstractCallback.
+     *
+     * @param HttpResponse|\Zend\Http\PhpEnvironment\Response $httpResponse
+     */
+    public function setHttpResponse($httpResponse);
+
+    /**
+     * An instance of a class handling Http Responses. This is implemented in
+     * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
+     * (i.e. not inherited from) Zend\Feed\Pubsubhubbub\AbstractCallback.
+     *
+     * @return HttpResponse|\Zend\Http\PhpEnvironment\Response
+     */
+    public function getHttpResponse();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..f32bc1c3ee166e673ae3eb758a3b64579a0c0bdb
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/ExceptionInterface.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub\Exception;
+
+use Zend\Feed\Exception\ExceptionInterface as Exception;
+
+interface ExceptionInterface extends Exception
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..cad1e01bdbf02fb446a5f28490e98f3aa5d6b581
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/InvalidArgumentException.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub\Exception;
+
+use Zend\Feed\Exception;
+
+class InvalidArgumentException extends Exception\InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/RuntimeException.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc954a519baf5dd4ed15ac1d5eb08c2809f4dcbe
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Exception/RuntimeException.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub\Exception;
+
+use Zend\Feed\Exception;
+
+class RuntimeException extends Exception\RuntimeException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/HttpResponse.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/HttpResponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c1adf2ecb6963ffba18cae796eae9ab99bc31e4
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/HttpResponse.php
@@ -0,0 +1,211 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub;
+
+class HttpResponse
+{
+    /**
+     * The body of any response to the current callback request
+     *
+     * @var string
+     */
+    protected $content = '';
+
+    /**
+     * Array of headers. Each header is an array with keys 'name' and 'value'
+     *
+     * @var array
+     */
+    protected $headers = array();
+
+    /**
+     * HTTP response code to use in headers
+     *
+     * @var int
+     */
+    protected $statusCode = 200;
+
+    /**
+     * Send the response, including all headers
+     *
+     * @return void
+     */
+    public function send()
+    {
+        $this->sendHeaders();
+        echo $this->getContent();
+    }
+
+    /**
+     * Send all headers
+     *
+     * Sends any headers specified. If an {@link setHttpResponseCode() HTTP response code}
+     * has been specified, it is sent with the first header.
+     *
+     * @return void
+     */
+    public function sendHeaders()
+    {
+        if (count($this->headers) || (200 != $this->statusCode)) {
+            $this->canSendHeaders(true);
+        } elseif (200 == $this->statusCode) {
+            return;
+        }
+        $httpCodeSent = false;
+        foreach ($this->headers as $header) {
+            if (!$httpCodeSent && $this->statusCode) {
+                header($header['name'] . ': ' . $header['value'], $header['replace'], $this->statusCode);
+                $httpCodeSent = true;
+            } else {
+                header($header['name'] . ': ' . $header['value'], $header['replace']);
+            }
+        }
+        if (!$httpCodeSent) {
+            header('HTTP/1.1 ' . $this->statusCode);
+        }
+    }
+
+    /**
+     * Set a header
+     *
+     * If $replace is true, replaces any headers already defined with that
+     * $name.
+     *
+     * @param  string $name
+     * @param  string $value
+     * @param  bool $replace
+     * @return \Zend\Feed\PubSubHubbub\HttpResponse
+     */
+    public function setHeader($name, $value, $replace = false)
+    {
+        $name  = $this->_normalizeHeader($name);
+        $value = (string) $value;
+        if ($replace) {
+            foreach ($this->headers as $key => $header) {
+                if ($name == $header['name']) {
+                    unset($this->headers[$key]);
+                }
+            }
+        }
+        $this->headers[] = array(
+            'name'    => $name,
+            'value'   => $value,
+            'replace' => $replace,
+        );
+
+        return $this;
+    }
+
+    /**
+     * Check if a specific Header is set and return its value
+     *
+     * @param  string $name
+     * @return string|null
+     */
+    public function getHeader($name)
+    {
+        $name = $this->_normalizeHeader($name);
+        foreach ($this->headers as $header) {
+            if ($header['name'] == $name) {
+                return $header['value'];
+            }
+        }
+    }
+
+    /**
+     * Return array of headers; see {@link $headers} for format
+     *
+     * @return array
+     */
+    public function getHeaders()
+    {
+        return $this->headers;
+    }
+
+    /**
+     * Can we send headers?
+     *
+     * @param  bool $throw Whether or not to throw an exception if headers have been sent; defaults to false
+     * @return HttpResponse
+     * @throws Exception\RuntimeException
+     */
+    public function canSendHeaders($throw = false)
+    {
+        $ok = headers_sent($file, $line);
+        if ($ok && $throw) {
+            throw new Exception\RuntimeException('Cannot send headers; headers already sent in ' . $file . ', line ' . $line);
+        }
+        return !$ok;
+    }
+
+    /**
+     * Set HTTP response code to use with headers
+     *
+     * @param  int $code
+     * @return HttpResponse
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setStatusCode($code)
+    {
+        if (!is_int($code) || (100 > $code) || (599 < $code)) {
+            throw new Exception\InvalidArgumentException('Invalid HTTP response'
+            . ' code:' . $code);
+        }
+        $this->statusCode = $code;
+        return $this;
+    }
+
+    /**
+     * Retrieve HTTP response code
+     *
+     * @return int
+     */
+    public function getStatusCode()
+    {
+        return $this->statusCode;
+    }
+
+    /**
+     * Set body content
+     *
+     * @param  string $content
+     * @return \Zend\Feed\PubSubHubbub\HttpResponse
+     */
+    public function setContent($content)
+    {
+        $this->content = (string) $content;
+        $this->setHeader('content-length', strlen($content));
+        return $this;
+    }
+
+    /**
+     * Return the body content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * Normalizes a header name to X-Capitalized-Names
+     *
+     * @param  string $name
+     * @return string
+     */
+    protected function _normalizeHeader($name)
+    {
+        $filtered = str_replace(array('-', '_'), ' ', (string) $name);
+        $filtered = ucwords(strtolower($filtered));
+        $filtered = str_replace(' ', '-', $filtered);
+        return $filtered;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/AbstractModel.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/AbstractModel.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ebd07f5b8d33c242f51309f49096ea8f0bf738a
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/AbstractModel.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub\Model;
+
+use Zend\Db\TableGateway\TableGateway;
+use Zend\Db\TableGateway\TableGatewayInterface;
+
+class AbstractModel
+{
+    /**
+     * Zend\Db\TableGateway\TableGatewayInterface instance to host database methods
+     *
+     * @var TableGatewayInterface
+     */
+    protected $db = null;
+
+    /**
+     * Constructor
+     *
+     * @param null|TableGatewayInterface $tableGateway
+     */
+    public function __construct(TableGatewayInterface $tableGateway = null)
+    {
+        if ($tableGateway === null) {
+            $parts = explode('\\', get_class($this));
+            $table = strtolower(array_pop($parts));
+            $this->db = new TableGateway($table, null);
+        } else {
+            $this->db = $tableGateway;
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/Subscription.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/Subscription.php
new file mode 100644
index 0000000000000000000000000000000000000000..46a5d82c80a7e822adbb5d4c83918adf7d2bcb06
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/Subscription.php
@@ -0,0 +1,142 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub\Model;
+
+use DateInterval;
+use DateTime;
+use Zend\Feed\PubSubHubbub;
+
+class Subscription extends AbstractModel implements SubscriptionPersistenceInterface
+{
+    /**
+     * Common DateTime object to assist with unit testing
+     *
+     * @var DateTime
+     */
+    protected $now;
+
+    /**
+     * Save subscription to RDMBS
+     *
+     * @param array $data
+     * @return bool
+     * @throws PubSubHubbub\Exception\InvalidArgumentException
+     */
+    public function setSubscription(array $data)
+    {
+        if (!isset($data['id'])) {
+            throw new PubSubHubbub\Exception\InvalidArgumentException(
+                'ID must be set before attempting a save'
+            );
+        }
+        $result = $this->db->select(array('id' => $data['id']));
+        if ($result && (0 < count($result))) {
+            $data['created_time'] = $result->current()->created_time;
+            $now = $this->getNow();
+            if (array_key_exists('lease_seconds', $data)
+                && $data['lease_seconds']
+            ) {
+                $data['expiration_time'] = $now->add(new DateInterval('PT' . $data['lease_seconds'] . 'S'))
+                    ->format('Y-m-d H:i:s');
+            }
+            $this->db->update(
+                $data,
+                array('id' => $data['id'])
+            );
+            return false;
+        }
+
+        $this->db->insert($data);
+        return true;
+    }
+
+    /**
+     * Get subscription by ID/key
+     *
+     * @param  string $key
+     * @return array
+     * @throws PubSubHubbub\Exception\InvalidArgumentException
+     */
+    public function getSubscription($key)
+    {
+        if (empty($key) || !is_string($key)) {
+            throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"'
+                .' of "' . $key . '" must be a non-empty string');
+        }
+        $result = $this->db->select(array('id' => $key));
+        if (count($result)) {
+            return $result->current()->getArrayCopy();
+        }
+        return false;
+    }
+
+    /**
+     * Determine if a subscription matching the key exists
+     *
+     * @param  string $key
+     * @return bool
+     * @throws PubSubHubbub\Exception\InvalidArgumentException
+     */
+    public function hasSubscription($key)
+    {
+        if (empty($key) || !is_string($key)) {
+            throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"'
+                .' of "' . $key . '" must be a non-empty string');
+        }
+        $result = $this->db->select(array('id' => $key));
+        if (count($result)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Delete a subscription
+     *
+     * @param string $key
+     * @return bool
+     */
+    public function deleteSubscription($key)
+    {
+        $result = $this->db->select(array('id' => $key));
+        if (count($result)) {
+            $this->db->delete(
+                array('id' => $key)
+            );
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Get a new DateTime or the one injected for testing
+     *
+     * @return DateTime
+     */
+    public function getNow()
+    {
+        if (null === $this->now) {
+            return new DateTime();
+        }
+        return $this->now;
+    }
+
+    /**
+     * Set a DateTime instance for assisting with unit testing
+     *
+     * @param DateTime $now
+     * @return Subscription
+     */
+    public function setNow(DateTime $now)
+    {
+        $this->now = $now;
+        return $this;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/SubscriptionPersistenceInterface.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/SubscriptionPersistenceInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..09e7d7559f30ed76ba699789ac25d1728fb46f49
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Model/SubscriptionPersistenceInterface.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub\Model;
+
+interface SubscriptionPersistenceInterface
+{
+    /**
+     * Save subscription to RDMBS
+     *
+     * @param array $data The key must be stored here as a $data['id'] entry
+     * @return bool
+     */
+    public function setSubscription(array $data);
+
+    /**
+     * Get subscription by ID/key
+     *
+     * @param  string $key
+     * @return array
+     */
+    public function getSubscription($key);
+
+    /**
+     * Determine if a subscription matching the key exists
+     *
+     * @param  string $key
+     * @return bool
+     */
+    public function hasSubscription($key);
+
+    /**
+     * Delete a subscription
+     *
+     * @param string $key
+     * @return bool
+     */
+    public function deleteSubscription($key);
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/PubSubHubbub.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/PubSubHubbub.php
new file mode 100644
index 0000000000000000000000000000000000000000..a930a70bed640bde8e6cff876a5e8c624752c385
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/PubSubHubbub.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub;
+
+use Zend\Escaper\Escaper;
+use Zend\Feed\Reader;
+use Zend\Http;
+
+class PubSubHubbub
+{
+    /**
+     * Verification Modes
+     */
+    const VERIFICATION_MODE_SYNC  = 'sync';
+    const VERIFICATION_MODE_ASYNC = 'async';
+
+    /**
+     * Subscription States
+     */
+    const SUBSCRIPTION_VERIFIED    = 'verified';
+    const SUBSCRIPTION_NOTVERIFIED = 'not_verified';
+    const SUBSCRIPTION_TODELETE    = 'to_delete';
+
+    /**
+     * @var Escaper
+     */
+    protected static $escaper;
+
+    /**
+     * Singleton instance if required of the HTTP client
+     *
+     * @var Http\Client
+     */
+    protected static $httpClient = null;
+
+    /**
+     * Simple utility function which imports any feed URL and
+     * determines the existence of Hub Server endpoints. This works
+     * best if directly given an instance of Zend\Feed\Reader\Atom|Rss
+     * to leverage off.
+     *
+     * @param  \Zend\Feed\Reader\Feed\AbstractFeed|string $source
+     * @return array
+     * @throws Exception\InvalidArgumentException
+     */
+    public static function detectHubs($source)
+    {
+        if (is_string($source)) {
+            $feed = Reader\Reader::import($source);
+        } elseif ($source instanceof Reader\Feed\AbstractFeed) {
+            $feed = $source;
+        } else {
+            throw new Exception\InvalidArgumentException('The source parameter was'
+            . ' invalid, i.e. not a URL string or an instance of type'
+            . ' Zend\Feed\Reader\Feed\AbstractFeed');
+        }
+        return $feed->getHubs();
+    }
+
+    /**
+     * Allows the external environment to make ZendOAuth use a specific
+     * Client instance.
+     *
+     * @param  Http\Client $httpClient
+     * @return void
+     */
+    public static function setHttpClient(Http\Client $httpClient)
+    {
+        static::$httpClient = $httpClient;
+    }
+
+    /**
+     * Return the singleton instance of the HTTP Client. Note that
+     * the instance is reset and cleared of previous parameters GET/POST.
+     * Headers are NOT reset but handled by this component if applicable.
+     *
+     * @return Http\Client
+     */
+    public static function getHttpClient()
+    {
+        if (!isset(static::$httpClient)) {
+            static::$httpClient = new Http\Client;
+        } else {
+            static::$httpClient->resetParameters();
+        }
+        return static::$httpClient;
+    }
+
+    /**
+     * Simple mechanism to delete the entire singleton HTTP Client instance
+     * which forces a new instantiation for subsequent requests.
+     *
+     * @return void
+     */
+    public static function clearHttpClient()
+    {
+        static::$httpClient = null;
+    }
+
+    /**
+     * Set the Escaper instance
+     *
+     * If null, resets the instance
+     *
+     * @param  null|Escaper $escaper
+     */
+    public static function setEscaper(Escaper $escaper = null)
+    {
+        static::$escaper = $escaper;
+    }
+
+    /**
+     * Get the Escaper instance
+     *
+     * If none registered, lazy-loads an instance.
+     *
+     * @return Escaper
+     */
+    public static function getEscaper()
+    {
+        if (null === static::$escaper) {
+            static::setEscaper(new Escaper());
+        }
+        return static::$escaper;
+    }
+
+    /**
+     * RFC 3986 safe url encoding method
+     *
+     * @param  string $string
+     * @return string
+     */
+    public static function urlencode($string)
+    {
+        $escaper    = static::getEscaper();
+        $rawencoded = $escaper->escapeUrl($string);
+        $rfcencoded = str_replace('%7E', '~', $rawencoded);
+        return $rfcencoded;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Publisher.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Publisher.php
new file mode 100644
index 0000000000000000000000000000000000000000..6130992bdc94ea16a20a4e318b5d2598722ebffb
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Publisher.php
@@ -0,0 +1,397 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub;
+
+use Traversable;
+use Zend\Feed\Uri;
+use Zend\Http\Request as HttpRequest;
+use Zend\Stdlib\ArrayUtils;
+
+class Publisher
+{
+    /**
+     * An array of URLs for all Hub Servers used by the Publisher, and to
+     * which all topic update notifications will be sent.
+     *
+     * @var array
+     */
+    protected $hubUrls = array();
+
+    /**
+     * An array of topic (Atom or RSS feed) URLs which have been updated and
+     * whose updated status will be notified to all Hub Servers.
+     *
+     * @var array
+     */
+    protected $updatedTopicUrls = array();
+
+    /**
+     * An array of any errors including keys for 'response', 'hubUrl'.
+     * The response is the actual Zend\Http\Response object.
+     *
+     * @var array
+     */
+    protected $errors = array();
+
+    /**
+     * An array of topic (Atom or RSS feed) URLs which have been updated and
+     * whose updated status will be notified to all Hub Servers.
+     *
+     * @var array
+     */
+    protected $parameters = array();
+
+    /**
+     * Constructor; accepts an array or Zend\Config\Config instance to preset
+     * options for the Publisher without calling all supported setter
+     * methods in turn.
+     *
+     * @param  array|Traversable $options
+     */
+    public function __construct($options = null)
+    {
+        if ($options !== null) {
+            $this->setOptions($options);
+        }
+    }
+
+    /**
+     * Process any injected configuration options
+     *
+     * @param  array|Traversable $options Options array or Traversable object
+     * @return Publisher
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setOptions($options)
+    {
+        if ($options instanceof Traversable) {
+            $options = ArrayUtils::iteratorToArray($options);
+        }
+
+        if (!is_array($options)) {
+            throw new Exception\InvalidArgumentException('Array or Traversable object'
+                                . 'expected, got ' . gettype($options));
+        }
+        if (array_key_exists('hubUrls', $options)) {
+            $this->addHubUrls($options['hubUrls']);
+        }
+        if (array_key_exists('updatedTopicUrls', $options)) {
+            $this->addUpdatedTopicUrls($options['updatedTopicUrls']);
+        }
+        if (array_key_exists('parameters', $options)) {
+            $this->setParameters($options['parameters']);
+        }
+        return $this;
+    }
+
+    /**
+     * Add a Hub Server URL supported by Publisher
+     *
+     * @param  string $url
+     * @return Publisher
+     * @throws Exception\InvalidArgumentException
+     */
+    public function addHubUrl($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
+                . ' of "' . $url . '" must be a non-empty string and a valid'
+                . 'URL');
+        }
+        $this->hubUrls[] = $url;
+        return $this;
+    }
+
+    /**
+     * Add an array of Hub Server URLs supported by Publisher
+     *
+     * @param  array $urls
+     * @return Publisher
+     */
+    public function addHubUrls(array $urls)
+    {
+        foreach ($urls as $url) {
+            $this->addHubUrl($url);
+        }
+        return $this;
+    }
+
+    /**
+     * Remove a Hub Server URL
+     *
+     * @param  string $url
+     * @return Publisher
+     */
+    public function removeHubUrl($url)
+    {
+        if (!in_array($url, $this->getHubUrls())) {
+            return $this;
+        }
+        $key = array_search($url, $this->hubUrls);
+        unset($this->hubUrls[$key]);
+        return $this;
+    }
+
+    /**
+     * Return an array of unique Hub Server URLs currently available
+     *
+     * @return array
+     */
+    public function getHubUrls()
+    {
+        $this->hubUrls = array_unique($this->hubUrls);
+        return $this->hubUrls;
+    }
+
+    /**
+     * Add a URL to a topic (Atom or RSS feed) which has been updated
+     *
+     * @param  string $url
+     * @return Publisher
+     * @throws Exception\InvalidArgumentException
+     */
+    public function addUpdatedTopicUrl($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
+                . ' of "' . $url . '" must be a non-empty string and a valid'
+                . 'URL');
+        }
+        $this->updatedTopicUrls[] = $url;
+        return $this;
+    }
+
+    /**
+     * Add an array of Topic URLs which have been updated
+     *
+     * @param  array $urls
+     * @return Publisher
+     */
+    public function addUpdatedTopicUrls(array $urls)
+    {
+        foreach ($urls as $url) {
+            $this->addUpdatedTopicUrl($url);
+        }
+        return $this;
+    }
+
+    /**
+     * Remove an updated topic URL
+     *
+     * @param  string $url
+     * @return Publisher
+     */
+    public function removeUpdatedTopicUrl($url)
+    {
+        if (!in_array($url, $this->getUpdatedTopicUrls())) {
+            return $this;
+        }
+        $key = array_search($url, $this->updatedTopicUrls);
+        unset($this->updatedTopicUrls[$key]);
+        return $this;
+    }
+
+    /**
+     * Return an array of unique updated topic URLs currently available
+     *
+     * @return array
+     */
+    public function getUpdatedTopicUrls()
+    {
+        $this->updatedTopicUrls = array_unique($this->updatedTopicUrls);
+        return $this->updatedTopicUrls;
+    }
+
+    /**
+     * Notifies a single Hub Server URL of changes
+     *
+     * @param  string $url The Hub Server's URL
+     * @return void
+     * @throws Exception\InvalidArgumentException
+     * @throws Exception\RuntimeException
+     */
+    public function notifyHub($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
+                . ' of "' . $url . '" must be a non-empty string and a valid'
+                . 'URL');
+        }
+        $client = $this->_getHttpClient();
+        $client->setUri($url);
+        $response = $client->getResponse();
+        if ($response->getStatusCode() !== 204) {
+            throw new Exception\RuntimeException('Notification to Hub Server '
+                . 'at "' . $url . '" appears to have failed with a status code of "'
+                . $response->getStatusCode() . '" and message "'
+                . $response->getContent() . '"');
+        }
+    }
+
+    /**
+     * Notifies all Hub Server URLs of changes
+     *
+     * If a Hub notification fails, certain data will be retained in an
+     * an array retrieved using getErrors(), if a failure occurs for any Hubs
+     * the isSuccess() check will return FALSE. This method is designed not
+     * to needlessly fail with an Exception/Error unless from Zend\Http\Client.
+     *
+     * @return void
+     * @throws Exception\RuntimeException
+     */
+    public function notifyAll()
+    {
+        $client = $this->_getHttpClient();
+        $hubs   = $this->getHubUrls();
+        if (empty($hubs)) {
+            throw new Exception\RuntimeException('No Hub Server URLs'
+                . ' have been set so no notifications can be sent');
+        }
+        $this->errors = array();
+        foreach ($hubs as $url) {
+            $client->setUri($url);
+            $response = $client->getResponse();
+            if ($response->getStatusCode() !== 204) {
+                $this->errors[] = array(
+                    'response' => $response,
+                    'hubUrl' => $url
+                );
+            }
+        }
+    }
+
+    /**
+     * Add an optional parameter to the update notification requests
+     *
+     * @param  string $name
+     * @param  string|null $value
+     * @return Publisher
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setParameter($name, $value = null)
+    {
+        if (is_array($name)) {
+            $this->setParameters($name);
+            return $this;
+        }
+        if (empty($name) || !is_string($name)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
+                . ' of "' . $name . '" must be a non-empty string');
+        }
+        if ($value === null) {
+            $this->removeParameter($name);
+            return $this;
+        }
+        if (empty($value) || (!is_string($value) && $value !== null)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "value"'
+                . ' of "' . $value . '" must be a non-empty string');
+        }
+        $this->parameters[$name] = $value;
+        return $this;
+    }
+
+    /**
+     * Add an optional parameter to the update notification requests
+     *
+     * @param  array $parameters
+     * @return Publisher
+     */
+    public function setParameters(array $parameters)
+    {
+        foreach ($parameters as $name => $value) {
+            $this->setParameter($name, $value);
+        }
+        return $this;
+    }
+
+    /**
+     * Remove an optional parameter for the notification requests
+     *
+     * @param  string $name
+     * @return Publisher
+     * @throws Exception\InvalidArgumentException
+     */
+    public function removeParameter($name)
+    {
+        if (empty($name) || !is_string($name)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
+                . ' of "' . $name . '" must be a non-empty string');
+        }
+        if (array_key_exists($name, $this->parameters)) {
+            unset($this->parameters[$name]);
+        }
+        return $this;
+    }
+
+    /**
+     * Return an array of optional parameters for notification requests
+     *
+     * @return array
+     */
+    public function getParameters()
+    {
+        return $this->parameters;
+    }
+
+    /**
+     * Returns a boolean indicator of whether the notifications to Hub
+     * Servers were ALL successful. If even one failed, FALSE is returned.
+     *
+     * @return bool
+     */
+    public function isSuccess()
+    {
+        return !(count($this->errors) != 0);
+    }
+
+    /**
+     * Return an array of errors met from any failures, including keys:
+     * 'response' => the Zend\Http\Response object from the failure
+     * 'hubUrl' => the URL of the Hub Server whose notification failed
+     *
+     * @return array
+     */
+    public function getErrors()
+    {
+        return $this->errors;
+    }
+
+    /**
+     * Get a basic prepared HTTP client for use
+     *
+     * @return \Zend\Http\Client
+     * @throws Exception\RuntimeException
+     */
+    protected function _getHttpClient()
+    {
+        $client = PubSubHubbub::getHttpClient();
+        $client->setMethod(HttpRequest::METHOD_POST);
+        $client->setOptions(array(
+            'useragent' => 'Zend_Feed_Pubsubhubbub_Publisher/' . Version::VERSION,
+        ));
+        $params   = array();
+        $params[] = 'hub.mode=publish';
+        $topics   = $this->getUpdatedTopicUrls();
+        if (empty($topics)) {
+            throw new Exception\RuntimeException('No updated topic URLs'
+                . ' have been set');
+        }
+        foreach ($topics as $topicUrl) {
+            $params[] = 'hub.url=' . urlencode($topicUrl);
+        }
+        $optParams = $this->getParameters();
+        foreach ($optParams as $name => $value) {
+            $params[] = urlencode($name) . '=' . urlencode($value);
+        }
+        $paramString = implode('&', $params);
+        $client->setRawBody($paramString);
+        return $client;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Subscriber.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Subscriber.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5db908509672e2d803ce72d6c362feafa3278e6
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Subscriber.php
@@ -0,0 +1,837 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub;
+
+use DateInterval;
+use DateTime;
+use Traversable;
+use Zend\Feed\Uri;
+use Zend\Http\Request as HttpRequest;
+use Zend\Stdlib\ArrayUtils;
+
+class Subscriber
+{
+    /**
+     * An array of URLs for all Hub Servers to subscribe/unsubscribe.
+     *
+     * @var array
+     */
+    protected $hubUrls = array();
+
+    /**
+     * An array of optional parameters to be included in any
+     * (un)subscribe requests.
+     *
+     * @var array
+     */
+    protected $parameters = array();
+
+    /**
+     * The URL of the topic (Rss or Atom feed) which is the subject of
+     * our current intent to subscribe to/unsubscribe from updates from
+     * the currently configured Hub Servers.
+     *
+     * @var string
+     */
+    protected $topicUrl = '';
+
+    /**
+     * The URL Hub Servers must use when communicating with this Subscriber
+     *
+     * @var string
+     */
+    protected $callbackUrl = '';
+
+    /**
+     * The number of seconds for which the subscriber would like to have the
+     * subscription active. Defaults to null, i.e. not sent, to setup a
+     * permanent subscription if possible.
+     *
+     * @var int
+     */
+    protected $leaseSeconds = null;
+
+    /**
+     * The preferred verification mode (sync or async). By default, this
+     * Subscriber prefers synchronous verification, but is considered
+     * desirable to support asynchronous verification if possible.
+     *
+     * Zend\Feed\Pubsubhubbub\Subscriber will always send both modes, whose
+     * order of occurrence in the parameter list determines this preference.
+     *
+     * @var string
+     */
+    protected $preferredVerificationMode = PubSubHubbub::VERIFICATION_MODE_SYNC;
+
+    /**
+     * An array of any errors including keys for 'response', 'hubUrl'.
+     * The response is the actual Zend\Http\Response object.
+     *
+     * @var array
+     */
+    protected $errors = array();
+
+    /**
+     * An array of Hub Server URLs for Hubs operating at this time in
+     * asynchronous verification mode.
+     *
+     * @var array
+     */
+    protected $asyncHubs = array();
+
+    /**
+     * An instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background
+     * save any verification tokens associated with a subscription or other.
+     *
+     * @var \Zend\Feed\PubSubHubbub\Model\SubscriptionPersistenceInterface
+     */
+    protected $storage = null;
+
+    /**
+     * An array of authentication credentials for HTTP Basic Authentication
+     * if required by specific Hubs. The array is indexed by Hub Endpoint URI
+     * and the value is a simple array of the username and password to apply.
+     *
+     * @var array
+     */
+    protected $authentications = array();
+
+    /**
+     * Tells the Subscriber to append any subscription identifier to the path
+     * of the base Callback URL. E.g. an identifier "subkey1" would be added
+     * to the callback URL "http://www.example.com/callback" to create a subscription
+     * specific Callback URL of "http://www.example.com/callback/subkey1".
+     *
+     * This is required for all Hubs using the Pubsubhubbub 0.1 Specification.
+     * It should be manually intercepted and passed to the Callback class using
+     * Zend\Feed\Pubsubhubbub\Subscriber\Callback::setSubscriptionKey(). Will
+     * require a route in the form "callback/:subkey" to allow the parameter be
+     * retrieved from an action using the Zend\Controller\Action::\getParam()
+     * method.
+     *
+     * @var string
+     */
+    protected $usePathParameter = false;
+
+    /**
+     * Constructor; accepts an array or Traversable instance to preset
+     * options for the Subscriber without calling all supported setter
+     * methods in turn.
+     *
+     * @param  array|Traversable $options
+     */
+    public function __construct($options = null)
+    {
+        if ($options !== null) {
+            $this->setOptions($options);
+        }
+    }
+
+    /**
+     * Process any injected configuration options
+     *
+     * @param  array|Traversable $options
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setOptions($options)
+    {
+        if ($options instanceof Traversable) {
+            $options = ArrayUtils::iteratorToArray($options);
+        }
+
+        if (!is_array($options)) {
+            throw new Exception\InvalidArgumentException('Array or Traversable object'
+                                . 'expected, got ' . gettype($options));
+        }
+        if (array_key_exists('hubUrls', $options)) {
+            $this->addHubUrls($options['hubUrls']);
+        }
+        if (array_key_exists('callbackUrl', $options)) {
+            $this->setCallbackUrl($options['callbackUrl']);
+        }
+        if (array_key_exists('topicUrl', $options)) {
+            $this->setTopicUrl($options['topicUrl']);
+        }
+        if (array_key_exists('storage', $options)) {
+            $this->setStorage($options['storage']);
+        }
+        if (array_key_exists('leaseSeconds', $options)) {
+            $this->setLeaseSeconds($options['leaseSeconds']);
+        }
+        if (array_key_exists('parameters', $options)) {
+            $this->setParameters($options['parameters']);
+        }
+        if (array_key_exists('authentications', $options)) {
+            $this->addAuthentications($options['authentications']);
+        }
+        if (array_key_exists('usePathParameter', $options)) {
+            $this->usePathParameter($options['usePathParameter']);
+        }
+        if (array_key_exists('preferredVerificationMode', $options)) {
+            $this->setPreferredVerificationMode(
+                $options['preferredVerificationMode']
+            );
+        }
+        return $this;
+    }
+
+    /**
+     * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe
+     * event will relate
+     *
+     * @param  string $url
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setTopicUrl($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
+                .' of "' . $url . '" must be a non-empty string and a valid'
+                .' URL');
+        }
+        $this->topicUrl = $url;
+        return $this;
+    }
+
+    /**
+     * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe
+     * event will relate
+     *
+     * @return string
+     * @throws Exception\RuntimeException
+     */
+    public function getTopicUrl()
+    {
+        if (empty($this->topicUrl)) {
+            throw new Exception\RuntimeException('A valid Topic (RSS or Atom'
+                . ' feed) URL MUST be set before attempting any operation');
+        }
+        return $this->topicUrl;
+    }
+
+    /**
+     * Set the number of seconds for which any subscription will remain valid
+     *
+     * @param  int $seconds
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setLeaseSeconds($seconds)
+    {
+        $seconds = intval($seconds);
+        if ($seconds <= 0) {
+            throw new Exception\InvalidArgumentException('Expected lease seconds'
+                . ' must be an integer greater than zero');
+        }
+        $this->leaseSeconds = $seconds;
+        return $this;
+    }
+
+    /**
+     * Get the number of lease seconds on subscriptions
+     *
+     * @return int
+     */
+    public function getLeaseSeconds()
+    {
+        return $this->leaseSeconds;
+    }
+
+    /**
+     * Set the callback URL to be used by Hub Servers when communicating with
+     * this Subscriber
+     *
+     * @param  string $url
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setCallbackUrl($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
+                . ' of "' . $url . '" must be a non-empty string and a valid'
+                . ' URL');
+        }
+        $this->callbackUrl = $url;
+        return $this;
+    }
+
+    /**
+     * Get the callback URL to be used by Hub Servers when communicating with
+     * this Subscriber
+     *
+     * @return string
+     * @throws Exception\RuntimeException
+     */
+    public function getCallbackUrl()
+    {
+        if (empty($this->callbackUrl)) {
+            throw new Exception\RuntimeException('A valid Callback URL MUST be'
+                . ' set before attempting any operation');
+        }
+        return $this->callbackUrl;
+    }
+
+    /**
+     * Set preferred verification mode (sync or async). By default, this
+     * Subscriber prefers synchronous verification, but does support
+     * asynchronous if that's the Hub Server's utilised mode.
+     *
+     * Zend\Feed\Pubsubhubbub\Subscriber will always send both modes, whose
+     * order of occurrence in the parameter list determines this preference.
+     *
+     * @param  string $mode Should be 'sync' or 'async'
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setPreferredVerificationMode($mode)
+    {
+        if ($mode !== PubSubHubbub::VERIFICATION_MODE_SYNC
+            && $mode !== PubSubHubbub::VERIFICATION_MODE_ASYNC
+        ) {
+            throw new Exception\InvalidArgumentException('Invalid preferred'
+                . ' mode specified: "' . $mode . '" but should be one of'
+                . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_SYNC or'
+                . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_ASYNC');
+        }
+        $this->preferredVerificationMode = $mode;
+        return $this;
+    }
+
+    /**
+     * Get preferred verification mode (sync or async).
+     *
+     * @return string
+     */
+    public function getPreferredVerificationMode()
+    {
+        return $this->preferredVerificationMode;
+    }
+
+    /**
+     * Add a Hub Server URL supported by Publisher
+     *
+     * @param  string $url
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function addHubUrl($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
+                . ' of "' . $url . '" must be a non-empty string and a valid'
+                . ' URL');
+        }
+        $this->hubUrls[] = $url;
+        return $this;
+    }
+
+    /**
+     * Add an array of Hub Server URLs supported by Publisher
+     *
+     * @param  array $urls
+     * @return Subscriber
+     */
+    public function addHubUrls(array $urls)
+    {
+        foreach ($urls as $url) {
+            $this->addHubUrl($url);
+        }
+        return $this;
+    }
+
+    /**
+     * Remove a Hub Server URL
+     *
+     * @param  string $url
+     * @return Subscriber
+     */
+    public function removeHubUrl($url)
+    {
+        if (!in_array($url, $this->getHubUrls())) {
+            return $this;
+        }
+        $key = array_search($url, $this->hubUrls);
+        unset($this->hubUrls[$key]);
+        return $this;
+    }
+
+    /**
+     * Return an array of unique Hub Server URLs currently available
+     *
+     * @return array
+     */
+    public function getHubUrls()
+    {
+        $this->hubUrls = array_unique($this->hubUrls);
+        return $this->hubUrls;
+    }
+
+    /**
+     * Add authentication credentials for a given URL
+     *
+     * @param  string $url
+     * @param  array $authentication
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function addAuthentication($url, array $authentication)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "url"'
+                . ' of "' . $url . '" must be a non-empty string and a valid'
+                . ' URL');
+        }
+        $this->authentications[$url] = $authentication;
+        return $this;
+    }
+
+    /**
+     * Add authentication credentials for hub URLs
+     *
+     * @param  array $authentications
+     * @return Subscriber
+     */
+    public function addAuthentications(array $authentications)
+    {
+        foreach ($authentications as $url => $authentication) {
+            $this->addAuthentication($url, $authentication);
+        }
+        return $this;
+    }
+
+    /**
+     * Get all hub URL authentication credentials
+     *
+     * @return array
+     */
+    public function getAuthentications()
+    {
+        return $this->authentications;
+    }
+
+    /**
+     * Set flag indicating whether or not to use a path parameter
+     *
+     * @param  bool $bool
+     * @return Subscriber
+     */
+    public function usePathParameter($bool = true)
+    {
+        $this->usePathParameter = $bool;
+        return $this;
+    }
+
+    /**
+     * Add an optional parameter to the (un)subscribe requests
+     *
+     * @param  string $name
+     * @param  string|null $value
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setParameter($name, $value = null)
+    {
+        if (is_array($name)) {
+            $this->setParameters($name);
+            return $this;
+        }
+        if (empty($name) || !is_string($name)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
+                . ' of "' . $name . '" must be a non-empty string');
+        }
+        if ($value === null) {
+            $this->removeParameter($name);
+            return $this;
+        }
+        if (empty($value) || (!is_string($value) && $value !== null)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "value"'
+                . ' of "' . $value . '" must be a non-empty string');
+        }
+        $this->parameters[$name] = $value;
+        return $this;
+    }
+
+    /**
+     * Add an optional parameter to the (un)subscribe requests
+     *
+     * @param  array $parameters
+     * @return Subscriber
+     */
+    public function setParameters(array $parameters)
+    {
+        foreach ($parameters as $name => $value) {
+            $this->setParameter($name, $value);
+        }
+        return $this;
+    }
+
+    /**
+     * Remove an optional parameter for the (un)subscribe requests
+     *
+     * @param  string $name
+     * @return Subscriber
+     * @throws Exception\InvalidArgumentException
+     */
+    public function removeParameter($name)
+    {
+        if (empty($name) || !is_string($name)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter "name"'
+                . ' of "' . $name . '" must be a non-empty string');
+        }
+        if (array_key_exists($name, $this->parameters)) {
+            unset($this->parameters[$name]);
+        }
+        return $this;
+    }
+
+    /**
+     * Return an array of optional parameters for (un)subscribe requests
+     *
+     * @return array
+     */
+    public function getParameters()
+    {
+        return $this->parameters;
+    }
+
+    /**
+     * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background
+     * save any verification tokens associated with a subscription or other.
+     *
+     * @param  Model\SubscriptionPersistenceInterface $storage
+     * @return Subscriber
+     */
+    public function setStorage(Model\SubscriptionPersistenceInterface $storage)
+    {
+        $this->storage = $storage;
+        return $this;
+    }
+
+    /**
+     * Gets an instance of Zend\Feed\Pubsubhubbub\Storage\StoragePersistence used
+     * to background save any verification tokens associated with a subscription
+     * or other.
+     *
+     * @return Model\SubscriptionPersistenceInterface
+     * @throws Exception\RuntimeException
+     */
+    public function getStorage()
+    {
+        if ($this->storage === null) {
+            throw new Exception\RuntimeException('No storage vehicle '
+                . 'has been set.');
+        }
+        return $this->storage;
+    }
+
+    /**
+     * Subscribe to one or more Hub Servers using the stored Hub URLs
+     * for the given Topic URL (RSS or Atom feed)
+     *
+     * @return void
+     */
+    public function subscribeAll()
+    {
+        $this->_doRequest('subscribe');
+    }
+
+    /**
+     * Unsubscribe from one or more Hub Servers using the stored Hub URLs
+     * for the given Topic URL (RSS or Atom feed)
+     *
+     * @return void
+     */
+    public function unsubscribeAll()
+    {
+        $this->_doRequest('unsubscribe');
+    }
+
+    /**
+     * Returns a boolean indicator of whether the notifications to Hub
+     * Servers were ALL successful. If even one failed, FALSE is returned.
+     *
+     * @return bool
+     */
+    public function isSuccess()
+    {
+        if (count($this->errors) > 0) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Return an array of errors met from any failures, including keys:
+     * 'response' => the Zend\Http\Response object from the failure
+     * 'hubUrl' => the URL of the Hub Server whose notification failed
+     *
+     * @return array
+     */
+    public function getErrors()
+    {
+        return $this->errors;
+    }
+
+    /**
+     * Return an array of Hub Server URLs who returned a response indicating
+     * operation in Asynchronous Verification Mode, i.e. they will not confirm
+     * any (un)subscription immediately but at a later time (Hubs may be
+     * doing this as a batch process when load balancing)
+     *
+     * @return array
+     */
+    public function getAsyncHubs()
+    {
+        return $this->asyncHubs;
+    }
+
+    /**
+     * Executes an (un)subscribe request
+     *
+     * @param  string $mode
+     * @return void
+     * @throws Exception\RuntimeException
+     */
+    protected function _doRequest($mode)
+    {
+        $client = $this->_getHttpClient();
+        $hubs   = $this->getHubUrls();
+        if (empty($hubs)) {
+            throw new Exception\RuntimeException('No Hub Server URLs'
+                . ' have been set so no subscriptions can be attempted');
+        }
+        $this->errors = array();
+        $this->asyncHubs = array();
+        foreach ($hubs as $url) {
+            if (array_key_exists($url, $this->authentications)) {
+                $auth = $this->authentications[$url];
+                $client->setAuth($auth[0], $auth[1]);
+            }
+            $client->setUri($url);
+            $client->setRawBody($params = $this->_getRequestParameters($url, $mode));
+            $response = $client->send();
+            if ($response->getStatusCode() !== 204
+                && $response->getStatusCode() !== 202
+            ) {
+                $this->errors[] = array(
+                    'response' => $response,
+                    'hubUrl'   => $url,
+                );
+            /**
+             * At first I thought it was needed, but the backend storage will
+             * allow tracking async without any user interference. It's left
+             * here in case the user is interested in knowing what Hubs
+             * are using async verification modes so they may update Models and
+             * move these to asynchronous processes.
+             */
+            } elseif ($response->getStatusCode() == 202) {
+                $this->asyncHubs[] = array(
+                    'response' => $response,
+                    'hubUrl'   => $url,
+                );
+            }
+        }
+    }
+
+    /**
+     * Get a basic prepared HTTP client for use
+     *
+     * @return \Zend\Http\Client
+     */
+    protected function _getHttpClient()
+    {
+        $client = PubSubHubbub::getHttpClient();
+        $client->setMethod(HttpRequest::METHOD_POST);
+        $client->setOptions(array('useragent' => 'Zend_Feed_Pubsubhubbub_Subscriber/'
+            . Version::VERSION));
+        return $client;
+    }
+
+    /**
+     * Return a list of standard protocol/optional parameters for addition to
+     * client's POST body that are specific to the current Hub Server URL
+     *
+     * @param  string $hubUrl
+     * @param  string $mode
+     * @return string
+     * @throws Exception\InvalidArgumentException
+     */
+    protected function _getRequestParameters($hubUrl, $mode)
+    {
+        if (!in_array($mode, array('subscribe', 'unsubscribe'))) {
+            throw new Exception\InvalidArgumentException('Invalid mode specified: "'
+                . $mode . '" which should have been "subscribe" or "unsubscribe"');
+        }
+
+        $params = array(
+            'hub.mode'  => $mode,
+            'hub.topic' => $this->getTopicUrl(),
+        );
+
+        if ($this->getPreferredVerificationMode()
+                == PubSubHubbub::VERIFICATION_MODE_SYNC
+        ) {
+            $vmodes = array(
+                PubSubHubbub::VERIFICATION_MODE_SYNC,
+                PubSubHubbub::VERIFICATION_MODE_ASYNC,
+            );
+        } else {
+            $vmodes = array(
+                PubSubHubbub::VERIFICATION_MODE_ASYNC,
+                PubSubHubbub::VERIFICATION_MODE_SYNC,
+            );
+        }
+        $params['hub.verify'] = array();
+        foreach ($vmodes as $vmode) {
+            $params['hub.verify'][] = $vmode;
+        }
+
+        /**
+         * Establish a persistent verify_token and attach key to callback
+         * URL's path/query_string
+         */
+        $key   = $this->_generateSubscriptionKey($params, $hubUrl);
+        $token = $this->_generateVerifyToken();
+        $params['hub.verify_token'] = $token;
+
+        // Note: query string only usable with PuSH 0.2 Hubs
+        if (!$this->usePathParameter) {
+            $params['hub.callback'] = $this->getCallbackUrl()
+                . '?xhub.subscription=' . PubSubHubbub::urlencode($key);
+        } else {
+            $params['hub.callback'] = rtrim($this->getCallbackUrl(), '/')
+                . '/' . PubSubHubbub::urlencode($key);
+        }
+        if ($mode == 'subscribe' && $this->getLeaseSeconds() !== null) {
+            $params['hub.lease_seconds'] = $this->getLeaseSeconds();
+        }
+
+        // hub.secret not currently supported
+        $optParams = $this->getParameters();
+        foreach ($optParams as $name => $value) {
+            $params[$name] = $value;
+        }
+
+        // store subscription to storage
+        $now = new DateTime();
+        $expires = null;
+        if (isset($params['hub.lease_seconds'])) {
+            $expires = $now->add(new DateInterval('PT' . $params['hub.lease_seconds'] . 'S'))
+                ->format('Y-m-d H:i:s');
+        }
+        $data = array(
+            'id'                 => $key,
+            'topic_url'          => $params['hub.topic'],
+            'hub_url'            => $hubUrl,
+            'created_time'       => $now->format('Y-m-d H:i:s'),
+            'lease_seconds'      => $params['hub.lease_seconds'],
+            'verify_token'       => hash('sha256', $params['hub.verify_token']),
+            'secret'             => null,
+            'expiration_time'    => $expires,
+            'subscription_state' => ($mode == 'unsubscribe')? PubSubHubbub::SUBSCRIPTION_TODELETE : PubSubHubbub::SUBSCRIPTION_NOTVERIFIED,
+        );
+        $this->getStorage()->setSubscription($data);
+
+        return $this->_toByteValueOrderedString(
+            $this->_urlEncode($params)
+        );
+    }
+
+    /**
+     * Simple helper to generate a verification token used in (un)subscribe
+     * requests to a Hub Server. Follows no particular method, which means
+     * it might be improved/changed in future.
+     *
+     * @return string
+     */
+    protected function _generateVerifyToken()
+    {
+        if (!empty($this->testStaticToken)) {
+            return $this->testStaticToken;
+        }
+        return uniqid(rand(), true) . time();
+    }
+
+    /**
+     * Simple helper to generate a verification token used in (un)subscribe
+     * requests to a Hub Server.
+     *
+     * @param array   $params
+     * @param string $hubUrl The Hub Server URL for which this token will apply
+     * @return string
+     */
+    protected function _generateSubscriptionKey(array $params, $hubUrl)
+    {
+        $keyBase = $params['hub.topic'] . $hubUrl;
+        $key     = md5($keyBase);
+
+        return $key;
+    }
+
+    /**
+     * URL Encode an array of parameters
+     *
+     * @param  array $params
+     * @return array
+     */
+    protected function _urlEncode(array $params)
+    {
+        $encoded = array();
+        foreach ($params as $key => $value) {
+            if (is_array($value)) {
+                $ekey = PubSubHubbub::urlencode($key);
+                $encoded[$ekey] = array();
+                foreach ($value as $duplicateKey) {
+                    $encoded[$ekey][]
+                        = PubSubHubbub::urlencode($duplicateKey);
+                }
+            } else {
+                $encoded[PubSubHubbub::urlencode($key)]
+                    = PubSubHubbub::urlencode($value);
+            }
+        }
+        return $encoded;
+    }
+
+    /**
+     * Order outgoing parameters
+     *
+     * @param  array $params
+     * @return array
+     */
+    protected function _toByteValueOrderedString(array $params)
+    {
+        $return = array();
+        uksort($params, 'strnatcmp');
+        foreach ($params as $key => $value) {
+            if (is_array($value)) {
+                foreach ($value as $keyduplicate) {
+                    $return[] = $key . '=' . $keyduplicate;
+                }
+            } else {
+                $return[] = $key . '=' . $value;
+            }
+        }
+        return implode('&', $return);
+    }
+
+    /**
+     * This is STRICTLY for testing purposes only...
+     */
+    protected $testStaticToken = null;
+
+    final public function setTestStaticToken($token)
+    {
+        $this->testStaticToken = (string) $token;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Subscriber/Callback.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Subscriber/Callback.php
new file mode 100644
index 0000000000000000000000000000000000000000..5160259003b88ab6ae2f6a148b9fe8546fa6d215
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Subscriber/Callback.php
@@ -0,0 +1,316 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub\Subscriber;
+
+use Zend\Feed\PubSubHubbub;
+use Zend\Feed\PubSubHubbub\Exception;
+use Zend\Feed\Uri;
+
+class Callback extends PubSubHubbub\AbstractCallback
+{
+    /**
+     * Contains the content of any feeds sent as updates to the Callback URL
+     *
+     * @var string
+     */
+    protected $feedUpdate = null;
+
+    /**
+     * Holds a manually set subscription key (i.e. identifies a unique
+     * subscription) which is typical when it is not passed in the query string
+     * but is part of the Callback URL path, requiring manual retrieval e.g.
+     * using a route and the \Zend\Mvc\Router\RouteMatch::getParam() method.
+     *
+     * @var string
+     */
+    protected $subscriptionKey = null;
+
+    /**
+     * After verification, this is set to the verified subscription's data.
+     *
+     * @var array
+     */
+    protected $currentSubscriptionData = null;
+
+    /**
+     * Set a subscription key to use for the current callback request manually.
+     * Required if usePathParameter is enabled for the Subscriber.
+     *
+     * @param  string $key
+     * @return \Zend\Feed\PubSubHubbub\Subscriber\Callback
+     */
+    public function setSubscriptionKey($key)
+    {
+        $this->subscriptionKey = $key;
+        return $this;
+    }
+
+    /**
+     * Handle any callback from a Hub Server responding to a subscription or
+     * unsubscription request. This should be the Hub Server confirming the
+     * the request prior to taking action on it.
+     *
+     * @param  array $httpGetData GET data if available and not in $_GET
+     * @param  bool $sendResponseNow Whether to send response now or when asked
+     * @return void
+     */
+    public function handle(array $httpGetData = null, $sendResponseNow = false)
+    {
+        if ($httpGetData === null) {
+            $httpGetData = $_GET;
+        }
+
+        /**
+         * Handle any feed updates (sorry for the mess :P)
+         *
+         * This DOES NOT attempt to process a feed update. Feed updates
+         * SHOULD be validated/processed by an asynchronous process so as
+         * to avoid holding up responses to the Hub.
+         */
+        $contentType = $this->_getHeader('Content-Type');
+        if (strtolower($_SERVER['REQUEST_METHOD']) == 'post'
+            && $this->_hasValidVerifyToken(null, false)
+            && (stripos($contentType, 'application/atom+xml') === 0
+                || stripos($contentType, 'application/rss+xml') === 0
+                || stripos($contentType, 'application/xml') === 0
+                || stripos($contentType, 'text/xml') === 0
+                || stripos($contentType, 'application/rdf+xml') === 0)
+        ) {
+            $this->setFeedUpdate($this->_getRawBody());
+            $this->getHttpResponse()->setHeader('X-Hub-On-Behalf-Of', $this->getSubscriberCount());
+        /**
+         * Handle any (un)subscribe confirmation requests
+         */
+        } elseif ($this->isValidHubVerification($httpGetData)) {
+            $this->getHttpResponse()->setContent($httpGetData['hub_challenge']);
+
+            switch (strtolower($httpGetData['hub_mode'])) {
+                case 'subscribe':
+                    $data = $this->currentSubscriptionData;
+                    $data['subscription_state'] = PubSubHubbub\PubSubHubbub::SUBSCRIPTION_VERIFIED;
+                    if (isset($httpGetData['hub_lease_seconds'])) {
+                        $data['lease_seconds'] = $httpGetData['hub_lease_seconds'];
+                    }
+                    $this->getStorage()->setSubscription($data);
+                    break;
+                case 'unsubscribe':
+                    $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData);
+                    $this->getStorage()->deleteSubscription($verifyTokenKey);
+                    break;
+                default:
+                    throw new Exception\RuntimeException(sprintf(
+                        'Invalid hub_mode ("%s") provided',
+                        $httpGetData['hub_mode']
+                    ));
+            }
+        /**
+         * Hey, C'mon! We tried everything else!
+         */
+        } else {
+            $this->getHttpResponse()->setStatusCode(404);
+        }
+
+        if ($sendResponseNow) {
+            $this->sendResponse();
+        }
+    }
+
+    /**
+     * Checks validity of the request simply by making a quick pass and
+     * confirming the presence of all REQUIRED parameters.
+     *
+     * @param  array $httpGetData
+     * @return bool
+     */
+    public function isValidHubVerification(array $httpGetData)
+    {
+        /**
+         * As per the specification, the hub.verify_token is OPTIONAL. This
+         * implementation of Pubsubhubbub considers it REQUIRED and will
+         * always send a hub.verify_token parameter to be echoed back
+         * by the Hub Server. Therefore, its absence is considered invalid.
+         */
+        if (strtolower($_SERVER['REQUEST_METHOD']) !== 'get') {
+            return false;
+        }
+        $required = array(
+            'hub_mode',
+            'hub_topic',
+            'hub_challenge',
+            'hub_verify_token',
+        );
+        foreach ($required as $key) {
+            if (!array_key_exists($key, $httpGetData)) {
+                return false;
+            }
+        }
+        if ($httpGetData['hub_mode'] !== 'subscribe'
+            && $httpGetData['hub_mode'] !== 'unsubscribe'
+        ) {
+            return false;
+        }
+        if ($httpGetData['hub_mode'] == 'subscribe'
+            && !array_key_exists('hub_lease_seconds', $httpGetData)
+        ) {
+            return false;
+        }
+        if (!Uri::factory($httpGetData['hub_topic'])->isValid()) {
+            return false;
+        }
+
+        /**
+         * Attempt to retrieve any Verification Token Key attached to Callback
+         * URL's path by our Subscriber implementation
+         */
+        if (!$this->_hasValidVerifyToken($httpGetData)) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Sets a newly received feed (Atom/RSS) sent by a Hub as an update to a
+     * Topic we've subscribed to.
+     *
+     * @param  string $feed
+     * @return \Zend\Feed\PubSubHubbub\Subscriber\Callback
+     */
+    public function setFeedUpdate($feed)
+    {
+        $this->feedUpdate = $feed;
+        return $this;
+    }
+
+    /**
+     * Check if any newly received feed (Atom/RSS) update was received
+     *
+     * @return bool
+     */
+    public function hasFeedUpdate()
+    {
+        if ($this->feedUpdate === null) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Gets a newly received feed (Atom/RSS) sent by a Hub as an update to a
+     * Topic we've subscribed to.
+     *
+     * @return string
+     */
+    public function getFeedUpdate()
+    {
+        return $this->feedUpdate;
+    }
+
+    /**
+     * Check for a valid verify_token. By default attempts to compare values
+     * with that sent from Hub, otherwise merely ascertains its existence.
+     *
+     * @param  array $httpGetData
+     * @param  bool $checkValue
+     * @return bool
+     */
+    protected function _hasValidVerifyToken(array $httpGetData = null, $checkValue = true)
+    {
+        $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData);
+        if (empty($verifyTokenKey)) {
+            return false;
+        }
+        $verifyTokenExists = $this->getStorage()->hasSubscription($verifyTokenKey);
+        if (!$verifyTokenExists) {
+            return false;
+        }
+        if ($checkValue) {
+            $data = $this->getStorage()->getSubscription($verifyTokenKey);
+            $verifyToken = $data['verify_token'];
+            if ($verifyToken !== hash('sha256', $httpGetData['hub_verify_token'])) {
+                return false;
+            }
+            $this->currentSubscriptionData = $data;
+            return true;
+        }
+        return true;
+    }
+
+    /**
+     * Attempt to detect the verification token key. This would be passed in
+     * the Callback URL (which we are handling with this class!) as a URI
+     * path part (the last part by convention).
+     *
+     * @param  null|array $httpGetData
+     * @return false|string
+     */
+    protected function _detectVerifyTokenKey(array $httpGetData = null)
+    {
+        /**
+         * Available when sub keys encoding in Callback URL path
+         */
+        if (isset($this->subscriptionKey)) {
+            return $this->subscriptionKey;
+        }
+
+        /**
+         * Available only if allowed by PuSH 0.2 Hubs
+         */
+        if (is_array($httpGetData)
+            && isset($httpGetData['xhub_subscription'])
+        ) {
+            return $httpGetData['xhub_subscription'];
+        }
+
+        /**
+         * Available (possibly) if corrupted in transit and not part of $_GET
+         */
+        $params = $this->_parseQueryString();
+        if (isset($params['xhub.subscription'])) {
+            return rawurldecode($params['xhub.subscription']);
+        }
+
+        return false;
+    }
+
+    /**
+     * Build an array of Query String parameters.
+     * This bypasses $_GET which munges parameter names and cannot accept
+     * multiple parameters with the same key.
+     *
+     * @return array|void
+     */
+    protected function _parseQueryString()
+    {
+        $params      = array();
+        $queryString = '';
+        if (isset($_SERVER['QUERY_STRING'])) {
+            $queryString = $_SERVER['QUERY_STRING'];
+        }
+        if (empty($queryString)) {
+            return array();
+        }
+        $parts = explode('&', $queryString);
+        foreach ($parts as $kvpair) {
+            $pair  = explode('=', $kvpair);
+            $key   = rawurldecode($pair[0]);
+            $value = rawurldecode($pair[1]);
+            if (isset($params[$key])) {
+                if (is_array($params[$key])) {
+                    $params[$key][] = $value;
+                } else {
+                    $params[$key] = array($params[$key], $value);
+                }
+            } else {
+                $params[$key] = $value;
+            }
+        }
+        return $params;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Version.php b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Version.php
new file mode 100644
index 0000000000000000000000000000000000000000..9ac7fb4bdb41832beca537d361d4244ecba251b4
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/PubSubHubbub/Version.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\PubSubHubbub;
+
+abstract class Version
+{
+    const VERSION = '2';
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/AbstractEntry.php b/core/vendor/zendframework/zend-feed/src/Reader/AbstractEntry.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5bcd4287ace31206637c8f4a54dc30316cc8826
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/AbstractEntry.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+use DOMDocument;
+use DOMElement;
+use DOMXPath;
+
+abstract class AbstractEntry
+{
+    /**
+     * Feed entry data
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * DOM document object
+     *
+     * @var DOMDocument
+     */
+    protected $domDocument = null;
+
+    /**
+     * Entry instance
+     *
+     * @var DOMElement
+     */
+    protected $entry = null;
+
+    /**
+     * Pointer to the current entry
+     *
+     * @var int
+     */
+    protected $entryKey = 0;
+
+    /**
+     * XPath object
+     *
+     * @var DOMXPath
+     */
+    protected $xpath = null;
+
+    /**
+     * Registered extensions
+     *
+     * @var array
+     */
+    protected $extensions = array();
+
+    /**
+     * Constructor
+     *
+     * @param  DOMElement $entry
+     * @param  int $entryKey
+     * @param  null|string $type
+     */
+    public function __construct(DOMElement $entry, $entryKey, $type = null)
+    {
+        $this->entry       = $entry;
+        $this->entryKey    = $entryKey;
+        $this->domDocument = $entry->ownerDocument;
+        if ($type !== null) {
+            $this->data['type'] = $type;
+        } else {
+            $this->data['type'] = Reader::detectType($entry);
+        }
+        $this->_loadExtensions();
+    }
+
+    /**
+     * Get the DOM
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument()
+    {
+        return $this->domDocument;
+    }
+
+    /**
+     * Get the entry element
+     *
+     * @return DOMElement
+     */
+    public function getElement()
+    {
+        return $this->entry;
+    }
+
+    /**
+     * Get the Entry's encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        $assumed = $this->getDomDocument()->encoding;
+        if (empty($assumed)) {
+            $assumed = 'UTF-8';
+        }
+        return $assumed;
+    }
+
+    /**
+     * Get entry as xml
+     *
+     * @return string
+     */
+    public function saveXml()
+    {
+        $dom = new DOMDocument('1.0', $this->getEncoding());
+        $entry = $dom->importNode($this->getElement(), true);
+        $dom->appendChild($entry);
+        return $dom->saveXml();
+    }
+
+    /**
+     * Get the entry type
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->data['type'];
+    }
+
+    /**
+     * Get the XPath query object
+     *
+     * @return DOMXPath
+     */
+    public function getXpath()
+    {
+        if (!$this->xpath) {
+            $this->setXpath(new DOMXPath($this->getDomDocument()));
+        }
+        return $this->xpath;
+    }
+
+    /**
+     * Set the XPath query
+     *
+     * @param  DOMXPath $xpath
+     * @return \Zend\Feed\Reader\AbstractEntry
+     */
+    public function setXpath(DOMXPath $xpath)
+    {
+        $this->xpath = $xpath;
+        return $this;
+    }
+
+    /**
+     * Get registered extensions
+     *
+     * @return array
+     */
+    public function getExtensions()
+    {
+        return $this->extensions;
+    }
+
+    /**
+     * Return an Extension object with the matching name (postfixed with _Entry)
+     *
+     * @param string $name
+     * @return \Zend\Feed\Reader\Extension\AbstractEntry
+     */
+    public function getExtension($name)
+    {
+        if (array_key_exists($name . '\Entry', $this->extensions)) {
+            return $this->extensions[$name . '\Entry'];
+        }
+        return;
+    }
+
+    /**
+     * Method overloading: call given method on first extension implementing it
+     *
+     * @param  string $method
+     * @param  array $args
+     * @return mixed
+     * @throws Exception\BadMethodCallException if no extensions implements the method
+     */
+    public function __call($method, $args)
+    {
+        foreach ($this->extensions as $extension) {
+            if (method_exists($extension, $method)) {
+                return call_user_func_array(array($extension, $method), $args);
+            }
+        }
+        throw new Exception\BadMethodCallException('Method: ' . $method
+            . 'does not exist and could not be located on a registered Extension');
+    }
+
+    /**
+     * Load extensions from Zend\Feed\Reader\Reader
+     *
+     * @return void
+     */
+    protected function _loadExtensions()
+    {
+        $all = Reader::getExtensions();
+        $feed = $all['entry'];
+        foreach ($feed as $extension) {
+            if (in_array($extension, $all['core'])) {
+                continue;
+            }
+            $className = Reader::getPluginLoader()->getClassName($extension);
+            $this->extensions[$extension] = new $className(
+                $this->getElement(), $this->entryKey, $this->data['type']
+            );
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/AbstractFeed.php b/core/vendor/zendframework/zend-feed/src/Reader/AbstractFeed.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ded7441821d50ee4989d68151035baf79cc1520
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/AbstractFeed.php
@@ -0,0 +1,300 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+use DOMDocument;
+use DOMElement;
+use DOMXPath;
+
+abstract class AbstractFeed implements Feed\FeedInterface
+{
+    /**
+     * Parsed feed data
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Parsed feed data in the shape of a DOMDocument
+     *
+     * @var DOMDocument
+     */
+    protected $domDocument = null;
+
+    /**
+     * An array of parsed feed entries
+     *
+     * @var array
+     */
+    protected $entries = array();
+
+    /**
+     * A pointer for the iterator to keep track of the entries array
+     *
+     * @var int
+     */
+    protected $entriesKey = 0;
+
+    /**
+     * The base XPath query used to retrieve feed data
+     *
+     * @var DOMXPath
+     */
+    protected $xpath = null;
+
+    /**
+     * Array of loaded extensions
+     *
+     * @var array
+     */
+    protected $extensions = array();
+
+    /**
+     * Original Source URI (set if imported from a URI)
+     *
+     * @var string
+     */
+    protected $originalSourceUri = null;
+
+    /**
+     * Constructor
+     *
+     * @param DomDocument $domDocument The DOM object for the feed's XML
+     * @param string $type Feed type
+     */
+    public function __construct(DOMDocument $domDocument, $type = null)
+    {
+        $this->domDocument = $domDocument;
+        $this->xpath = new DOMXPath($this->domDocument);
+
+        if ($type !== null) {
+            $this->data['type'] = $type;
+        } else {
+            $this->data['type'] = Reader::detectType($this->domDocument);
+        }
+        $this->registerNamespaces();
+        $this->indexEntries();
+        $this->loadExtensions();
+    }
+
+    /**
+     * Set an original source URI for the feed being parsed. This value
+     * is returned from getFeedLink() method if the feed does not carry
+     * a self-referencing URI.
+     *
+     * @param string $uri
+     */
+    public function setOriginalSourceUri($uri)
+    {
+        $this->originalSourceUri = $uri;
+    }
+
+    /**
+     * Get an original source URI for the feed being parsed. Returns null if
+     * unset or the feed was not imported from a URI.
+     *
+     * @return string|null
+     */
+    public function getOriginalSourceUri()
+    {
+        return $this->originalSourceUri;
+    }
+
+    /**
+     * Get the number of feed entries.
+     * Required by the Iterator interface.
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->entries);
+    }
+
+    /**
+     * Return the current entry
+     *
+     * @return \Zend\Feed\Reader\AbstractEntry
+     */
+    public function current()
+    {
+        if (substr($this->getType(), 0, 3) == 'rss') {
+            $reader = new Entry\RSS($this->entries[$this->key()], $this->key(), $this->getType());
+        } else {
+            $reader = new Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType());
+        }
+
+        $reader->setXpath($this->xpath);
+
+        return $reader;
+    }
+
+    /**
+     * Get the DOM
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument()
+    {
+        return $this->domDocument;
+    }
+
+    /**
+     * Get the Feed's encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        $assumed = $this->getDomDocument()->encoding;
+        if (empty($assumed)) {
+            $assumed = 'UTF-8';
+        }
+        return $assumed;
+    }
+
+    /**
+     * Get feed as xml
+     *
+     * @return string
+     */
+    public function saveXml()
+    {
+        return $this->getDomDocument()->saveXml();
+    }
+
+    /**
+     * Get the DOMElement representing the items/feed element
+     *
+     * @return DOMElement
+     */
+    public function getElement()
+    {
+        return $this->getDomDocument()->documentElement;
+    }
+
+    /**
+     * Get the DOMXPath object for this feed
+     *
+     * @return DOMXPath
+     */
+    public function getXpath()
+    {
+        return $this->xpath;
+    }
+
+    /**
+     * Get the feed type
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->data['type'];
+    }
+
+    /**
+     * Return the current feed key
+     *
+     * @return int
+     */
+    public function key()
+    {
+        return $this->entriesKey;
+    }
+
+    /**
+     * Move the feed pointer forward
+     *
+     */
+    public function next()
+    {
+        ++$this->entriesKey;
+    }
+
+    /**
+     * Reset the pointer in the feed object
+     *
+     */
+    public function rewind()
+    {
+        $this->entriesKey = 0;
+    }
+
+    /**
+     * Check to see if the iterator is still valid
+     *
+     * @return bool
+     */
+    public function valid()
+    {
+        return 0 <= $this->entriesKey && $this->entriesKey < $this->count();
+    }
+
+    public function getExtensions()
+    {
+        return $this->extensions;
+    }
+
+    public function __call($method, $args)
+    {
+        foreach ($this->extensions as $extension) {
+            if (method_exists($extension, $method)) {
+                return call_user_func_array(array($extension, $method), $args);
+            }
+        }
+        throw new Exception\BadMethodCallException('Method: ' . $method
+        . 'does not exist and could not be located on a registered Extension');
+    }
+
+    /**
+     * Return an Extension object with the matching name (postfixed with _Feed)
+     *
+     * @param string $name
+     * @return \Zend\Feed\Reader\Extension\AbstractFeed
+     */
+    public function getExtension($name)
+    {
+        if (array_key_exists($name . '\Feed', $this->extensions)) {
+            return $this->extensions[$name . '\Feed'];
+        }
+        return;
+    }
+
+    protected function loadExtensions()
+    {
+        $all     = Reader::getExtensions();
+        $manager = Reader::getExtensionManager();
+        $feed    = $all['feed'];
+        foreach ($feed as $extension) {
+            if (in_array($extension, $all['core'])) {
+                continue;
+            }
+            $plugin = $manager->get($extension);
+            $plugin->setDomDocument($this->getDomDocument());
+            $plugin->setType($this->data['type']);
+            $plugin->setXpath($this->xpath);
+            $this->extensions[$extension] = $plugin;
+        }
+    }
+
+    /**
+     * Read all entries to the internal entries array
+     *
+     */
+    abstract protected function indexEntries();
+
+    /**
+     * Register the default namespaces for the current feed format
+     *
+     */
+    abstract protected function registerNamespaces();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Collection.php b/core/vendor/zendframework/zend-feed/src/Reader/Collection.php
new file mode 100644
index 0000000000000000000000000000000000000000..f50c1bc2f2f934c0fe9291649efd4362ee99c184
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Collection.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+use ArrayObject;
+
+class Collection extends ArrayObject
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Collection/AbstractCollection.php b/core/vendor/zendframework/zend-feed/src/Reader/Collection/AbstractCollection.php
new file mode 100644
index 0000000000000000000000000000000000000000..749ff5c809b88dd9098c074577e54fb71aed402b
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Collection/AbstractCollection.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Collection;
+
+use ArrayObject;
+
+abstract class AbstractCollection extends ArrayObject
+{
+    /**
+     * Return a simple array of the most relevant slice of
+     * the collection values. For example, feed categories contain
+     * the category name, domain/URI, and other data. This method would
+     * merely return the most useful data - i.e. the category names.
+     *
+     * @return array
+     */
+    abstract public function getValues();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Collection/Author.php b/core/vendor/zendframework/zend-feed/src/Reader/Collection/Author.php
new file mode 100644
index 0000000000000000000000000000000000000000..82716db2a2b5fb8479154076257a30bd5df824cf
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Collection/Author.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Collection;
+
+class Author extends AbstractCollection
+{
+    /**
+     * Return a simple array of the most relevant slice of
+     * the author values, i.e. all author names.
+     *
+     * @return array
+     */
+    public function getValues()
+    {
+        $authors = array();
+        foreach ($this->getIterator() as $element) {
+            $authors[] = $element['name'];
+        }
+        return array_unique($authors);
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Collection/Category.php b/core/vendor/zendframework/zend-feed/src/Reader/Collection/Category.php
new file mode 100644
index 0000000000000000000000000000000000000000..57d056040d12880fa780afeeaa1e31ec53070167
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Collection/Category.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Collection;
+
+class Category extends AbstractCollection
+{
+    /**
+     * Return a simple array of the most relevant slice of
+     * the collection values. For example, feed categories contain
+     * the category name, domain/URI, and other data. This method would
+     * merely return the most useful data - i.e. the category names.
+     *
+     * @return array
+     */
+    public function getValues()
+    {
+        $categories = array();
+        foreach ($this->getIterator() as $element) {
+            if (isset($element['label']) && !empty($element['label'])) {
+                $categories[] = $element['label'];
+            } else {
+                $categories[] = $element['term'];
+            }
+        }
+        return array_unique($categories);
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Collection/Collection.php b/core/vendor/zendframework/zend-feed/src/Reader/Collection/Collection.php
new file mode 100644
index 0000000000000000000000000000000000000000..cf791c2e58c586cf2484d09c99af1d7b7d400c5e
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Collection/Collection.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Collection;
+
+use ArrayObject;
+
+class Collection extends ArrayObject
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Entry/AbstractEntry.php b/core/vendor/zendframework/zend-feed/src/Reader/Entry/AbstractEntry.php
new file mode 100644
index 0000000000000000000000000000000000000000..7b006875b113c1cf9f1793277ff8b2e45c2c93f6
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Entry/AbstractEntry.php
@@ -0,0 +1,233 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Entry;
+
+use DOMDocument;
+use DOMElement;
+use DOMXPath;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Exception;
+
+abstract class AbstractEntry
+{
+    /**
+     * Feed entry data
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * DOM document object
+     *
+     * @var DOMDocument
+     */
+    protected $domDocument = null;
+
+    /**
+     * Entry instance
+     *
+     * @var DOMElement
+     */
+    protected $entry = null;
+
+    /**
+     * Pointer to the current entry
+     *
+     * @var int
+     */
+    protected $entryKey = 0;
+
+    /**
+     * XPath object
+     *
+     * @var DOMXPath
+     */
+    protected $xpath = null;
+
+    /**
+     * Registered extensions
+     *
+     * @var array
+     */
+    protected $extensions = array();
+
+    /**
+     * Constructor
+     *
+     * @param  DOMElement $entry
+     * @param  int $entryKey
+     * @param  string $type
+     */
+    public function __construct(DOMElement $entry, $entryKey, $type = null)
+    {
+        $this->entry       = $entry;
+        $this->entryKey    = $entryKey;
+        $this->domDocument = $entry->ownerDocument;
+        if ($type !== null) {
+            $this->data['type'] = $type;
+        } elseif ($this->domDocument !== null) {
+            $this->data['type'] = Reader\Reader::detectType($this->domDocument);
+        } else {
+            $this->data['type'] = Reader\Reader::TYPE_ANY;
+        }
+        $this->loadExtensions();
+    }
+
+    /**
+     * Get the DOM
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument()
+    {
+        return $this->domDocument;
+    }
+
+    /**
+     * Get the entry element
+     *
+     * @return DOMElement
+     */
+    public function getElement()
+    {
+        return $this->entry;
+    }
+
+    /**
+     * Get the Entry's encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        $assumed = $this->getDomDocument()->encoding;
+        if (empty($assumed)) {
+            $assumed = 'UTF-8';
+        }
+        return $assumed;
+    }
+
+    /**
+     * Get entry as xml
+     *
+     * @return string
+     */
+    public function saveXml()
+    {
+        $dom   = new DOMDocument('1.0', $this->getEncoding());
+        $deep  = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
+        $entry = $dom->importNode($this->getElement(), $deep);
+        $dom->appendChild($entry);
+        return $dom->saveXml();
+    }
+
+    /**
+     * Get the entry type
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->data['type'];
+    }
+
+    /**
+     * Get the XPath query object
+     *
+     * @return DOMXPath
+     */
+    public function getXpath()
+    {
+        if (!$this->xpath) {
+            $this->setXpath(new DOMXPath($this->getDomDocument()));
+        }
+        return $this->xpath;
+    }
+
+    /**
+     * Set the XPath query
+     *
+     * @param  DOMXPath $xpath
+     * @return AbstractEntry
+     */
+    public function setXpath(DOMXPath $xpath)
+    {
+        $this->xpath = $xpath;
+        return $this;
+    }
+
+    /**
+     * Get registered extensions
+     *
+     * @return array
+     */
+    public function getExtensions()
+    {
+        return $this->extensions;
+    }
+
+    /**
+     * Return an Extension object with the matching name (postfixed with _Entry)
+     *
+     * @param string $name
+     * @return Reader\Extension\AbstractEntry
+     */
+    public function getExtension($name)
+    {
+        if (array_key_exists($name . '\\Entry', $this->extensions)) {
+            return $this->extensions[$name . '\\Entry'];
+        }
+        return;
+    }
+
+    /**
+     * Method overloading: call given method on first extension implementing it
+     *
+     * @param  string $method
+     * @param  array $args
+     * @return mixed
+     * @throws Exception\RuntimeException if no extensions implements the method
+     */
+    public function __call($method, $args)
+    {
+        foreach ($this->extensions as $extension) {
+            if (method_exists($extension, $method)) {
+                return call_user_func_array(array($extension, $method), $args);
+            }
+        }
+        throw new Exception\RuntimeException(sprintf(
+            'Method: %s does not exist and could not be located on a registered Extension',
+            $method
+        ));
+    }
+
+    /**
+     * Load extensions from Zend\Feed\Reader\Reader
+     *
+     * @return void
+     */
+    protected function loadExtensions()
+    {
+        $all     = Reader\Reader::getExtensions();
+        $manager = Reader\Reader::getExtensionManager();
+        $feed    = $all['entry'];
+        foreach ($feed as $extension) {
+            if (in_array($extension, $all['core'])) {
+                continue;
+            }
+            $plugin = $manager->get($extension);
+            $plugin->setEntryElement($this->getElement());
+            $plugin->setEntryKey($this->entryKey);
+            $plugin->setType($this->data['type']);
+            $this->extensions[$extension] = $plugin;
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Entry/Atom.php b/core/vendor/zendframework/zend-feed/src/Reader/Entry/Atom.php
new file mode 100644
index 0000000000000000000000000000000000000000..543f4566170981bac18c2c36dad6eed4ac12c680
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Entry/Atom.php
@@ -0,0 +1,370 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Entry;
+
+use DOMElement;
+use DOMXPath;
+use Zend\Feed\Reader;
+
+class Atom extends AbstractEntry implements EntryInterface
+{
+    /**
+     * XPath query
+     *
+     * @var string
+     */
+    protected $xpathQuery = '';
+
+    /**
+     * Constructor
+     *
+     * @param  DOMElement $entry
+     * @param  int $entryKey
+     * @param  string $type
+     */
+    public function __construct(DOMElement $entry, $entryKey, $type = null)
+    {
+        parent::__construct($entry, $entryKey, $type);
+
+        // Everyone by now should know XPath indices start from 1 not 0
+        $this->xpathQuery = '//atom:entry[' . ($this->entryKey + 1) . ']';
+
+        $manager    = Reader\Reader::getExtensionManager();
+        $extensions = array('Atom\Entry', 'Thread\Entry', 'DublinCore\Entry');
+
+        foreach ($extensions as $name) {
+            $extension = $manager->get($name);
+            $extension->setEntryElement($entry);
+            $extension->setEntryKey($entryKey);
+            $extension->setType($type);
+            $this->extensions[$name] = $extension;
+        }
+    }
+
+    /**
+     * Get the specified author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $people = $this->getExtension('Atom')->getAuthors();
+
+        $this->data['authors'] = $people;
+
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the entry content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        if (array_key_exists('content', $this->data)) {
+            return $this->data['content'];
+        }
+
+        $content = $this->getExtension('Atom')->getContent();
+
+        $this->data['content'] = $content;
+
+        return $this->data['content'];
+    }
+
+    /**
+     * Get the entry creation date
+     *
+     * @return string
+     */
+    public function getDateCreated()
+    {
+        if (array_key_exists('datecreated', $this->data)) {
+            return $this->data['datecreated'];
+        }
+
+        $dateCreated = $this->getExtension('Atom')->getDateCreated();
+
+        $this->data['datecreated'] = $dateCreated;
+
+        return $this->data['datecreated'];
+    }
+
+    /**
+     * Get the entry modification date
+     *
+     * @return string
+     */
+    public function getDateModified()
+    {
+        if (array_key_exists('datemodified', $this->data)) {
+            return $this->data['datemodified'];
+        }
+
+        $dateModified = $this->getExtension('Atom')->getDateModified();
+
+        $this->data['datemodified'] = $dateModified;
+
+        return $this->data['datemodified'];
+    }
+
+    /**
+     * Get the entry description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        $description = $this->getExtension('Atom')->getDescription();
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the entry enclosure
+     *
+     * @return string
+     */
+    public function getEnclosure()
+    {
+        if (array_key_exists('enclosure', $this->data)) {
+            return $this->data['enclosure'];
+        }
+
+        $enclosure = $this->getExtension('Atom')->getEnclosure();
+
+        $this->data['enclosure'] = $enclosure;
+
+        return $this->data['enclosure'];
+    }
+
+    /**
+     * Get the entry ID
+     *
+     * @return string
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = $this->getExtension('Atom')->getId();
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get a specific link
+     *
+     * @param  int $index
+     * @return string
+     */
+    public function getLink($index = 0)
+    {
+        if (!array_key_exists('links', $this->data)) {
+            $this->getLinks();
+        }
+
+        if (isset($this->data['links'][$index])) {
+            return $this->data['links'][$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get all links
+     *
+     * @return array
+     */
+    public function getLinks()
+    {
+        if (array_key_exists('links', $this->data)) {
+            return $this->data['links'];
+        }
+
+        $links = $this->getExtension('Atom')->getLinks();
+
+        $this->data['links'] = $links;
+
+        return $this->data['links'];
+    }
+
+    /**
+     * Get a permalink to the entry
+     *
+     * @return string
+     */
+    public function getPermalink()
+    {
+        return $this->getLink(0);
+    }
+
+    /**
+     * Get the entry title
+     *
+     * @return string
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        $title = $this->getExtension('Atom')->getTitle();
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     * Get the number of comments/replies for current entry
+     *
+     * @return int
+     */
+    public function getCommentCount()
+    {
+        if (array_key_exists('commentcount', $this->data)) {
+            return $this->data['commentcount'];
+        }
+
+        $commentcount = $this->getExtension('Thread')->getCommentCount();
+
+        if (!$commentcount) {
+            $commentcount = $this->getExtension('Atom')->getCommentCount();
+        }
+
+        $this->data['commentcount'] = $commentcount;
+
+        return $this->data['commentcount'];
+    }
+
+    /**
+     * Returns a URI pointing to the HTML page where comments can be made on this entry
+     *
+     * @return string
+     */
+    public function getCommentLink()
+    {
+        if (array_key_exists('commentlink', $this->data)) {
+            return $this->data['commentlink'];
+        }
+
+        $commentlink = $this->getExtension('Atom')->getCommentLink();
+
+        $this->data['commentlink'] = $commentlink;
+
+        return $this->data['commentlink'];
+    }
+
+    /**
+     * Returns a URI pointing to a feed of all comments for this entry
+     *
+     * @return string
+     */
+    public function getCommentFeedLink()
+    {
+        if (array_key_exists('commentfeedlink', $this->data)) {
+            return $this->data['commentfeedlink'];
+        }
+
+        $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink();
+
+        $this->data['commentfeedlink'] = $commentfeedlink;
+
+        return $this->data['commentfeedlink'];
+    }
+
+    /**
+     * Get category data as a Reader\Reader_Collection_Category object
+     *
+     * @return Reader\Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        $categoryCollection = $this->getExtension('Atom')->getCategories();
+
+        if (count($categoryCollection) == 0) {
+            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
+        }
+
+        $this->data['categories'] = $categoryCollection;
+
+        return $this->data['categories'];
+    }
+
+    /**
+     * Get source feed metadata from the entry
+     *
+     * @return Reader\Feed\Atom\Source|null
+     */
+    public function getSource()
+    {
+        if (array_key_exists('source', $this->data)) {
+            return $this->data['source'];
+        }
+
+        $source = $this->getExtension('Atom')->getSource();
+
+        $this->data['source'] = $source;
+
+        return $this->data['source'];
+    }
+
+    /**
+     * Set the XPath query (incl. on all Extensions)
+     *
+     * @param DOMXPath $xpath
+     * @return void
+     */
+    public function setXpath(DOMXPath $xpath)
+    {
+        parent::setXpath($xpath);
+        foreach ($this->extensions as $extension) {
+            $extension->setXpath($this->xpath);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Entry/EntryInterface.php b/core/vendor/zendframework/zend-feed/src/Reader/Entry/EntryInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5e5fb2241b512a56c618f1342d7ad67486e6bfa
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Entry/EntryInterface.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Entry;
+
+use Zend\Feed\Reader\Collection\Category;
+
+interface EntryInterface
+{
+    /**
+     * Get the specified author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0);
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors();
+
+    /**
+     * Get the entry content
+     *
+     * @return string
+     */
+    public function getContent();
+
+    /**
+     * Get the entry creation date
+     *
+     * @return string
+     */
+    public function getDateCreated();
+
+    /**
+     * Get the entry modification date
+     *
+     * @return string
+     */
+    public function getDateModified();
+
+    /**
+     * Get the entry description
+     *
+     * @return string
+     */
+    public function getDescription();
+
+    /**
+     * Get the entry enclosure
+     *
+     * @return \stdClass
+     */
+    public function getEnclosure();
+
+    /**
+     * Get the entry ID
+     *
+     * @return string
+     */
+    public function getId();
+
+    /**
+     * Get a specific link
+     *
+     * @param  int $index
+     * @return string
+     */
+    public function getLink($index = 0);
+
+    /**
+     * Get all links
+     *
+     * @return array
+     */
+    public function getLinks();
+
+    /**
+     * Get a permalink to the entry
+     *
+     * @return string
+     */
+    public function getPermalink();
+
+    /**
+     * Get the entry title
+     *
+     * @return string
+     */
+    public function getTitle();
+
+    /**
+     * Get the number of comments/replies for current entry
+     *
+     * @return int
+     */
+    public function getCommentCount();
+
+    /**
+     * Returns a URI pointing to the HTML page where comments can be made on this entry
+     *
+     * @return string
+     */
+    public function getCommentLink();
+
+    /**
+     * Returns a URI pointing to a feed of all comments for this entry
+     *
+     * @return string
+     */
+    public function getCommentFeedLink();
+
+    /**
+     * Get all categories
+     *
+     * @return Category
+     */
+    public function getCategories();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Entry/Rss.php b/core/vendor/zendframework/zend-feed/src/Reader/Entry/Rss.php
new file mode 100644
index 0000000000000000000000000000000000000000..409190450c1c3bf98ea25ccf48ecfc0139fa7bcb
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Entry/Rss.php
@@ -0,0 +1,595 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Entry;
+
+use DateTime;
+use DOMElement;
+use DOMXPath;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Exception;
+
+class Rss extends AbstractEntry implements EntryInterface
+{
+    /**
+     * XPath query for RDF
+     *
+     * @var string
+     */
+    protected $xpathQueryRdf = '';
+
+    /**
+     * XPath query for RSS
+     *
+     * @var string
+     */
+    protected $xpathQueryRss = '';
+
+    /**
+     * Constructor
+     *
+     * @param  DOMElement $entry
+     * @param  string $entryKey
+     * @param  string $type
+     */
+    public function __construct(DOMElement $entry, $entryKey, $type = null)
+    {
+        parent::__construct($entry, $entryKey, $type);
+        $this->xpathQueryRss = '//item[' . ($this->entryKey+1) . ']';
+        $this->xpathQueryRdf = '//rss:item[' . ($this->entryKey+1) . ']';
+
+        $manager    = Reader\Reader::getExtensionManager();
+        $extensions = array(
+            'DublinCore\Entry',
+            'Content\Entry',
+            'Atom\Entry',
+            'WellFormedWeb\Entry',
+            'Slash\Entry',
+            'Thread\Entry',
+        );
+        foreach ($extensions as $name) {
+            $extension = $manager->get($name);
+            $extension->setEntryElement($entry);
+            $extension->setEntryKey($entryKey);
+            $extension->setType($type);
+            $this->extensions[$name] = $extension;
+        }
+    }
+
+    /**
+     * Get an author entry
+     *
+     * @param int $index
+     * @return string
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $authors = array();
+        $authorsDc = $this->getExtension('DublinCore')->getAuthors();
+        if (!empty($authorsDc)) {
+            foreach ($authorsDc as $author) {
+                $authors[] = array(
+                    'name' => $author['name']
+                );
+            }
+        }
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+        && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $list = $this->xpath->query($this->xpathQueryRss . '//author');
+        } else {
+            $list = $this->xpath->query($this->xpathQueryRdf . '//rss:author');
+        }
+        if ($list->length) {
+            foreach ($list as $author) {
+                $string = trim($author->nodeValue);
+                $data = array();
+                // Pretty rough parsing - but it's a catchall
+                if (preg_match("/^.*@[^ ]*/", $string, $matches)) {
+                    $data['email'] = trim($matches[0]);
+                    if (preg_match("/\((.*)\)$/", $string, $matches)) {
+                        $data['name'] = $matches[1];
+                    }
+                    $authors[] = $data;
+                }
+            }
+        }
+
+        if (count($authors) == 0) {
+            $authors = $this->getExtension('Atom')->getAuthors();
+        } else {
+            $authors = new Reader\Collection\Author(
+                Reader\Reader::arrayUnique($authors)
+            );
+        }
+
+        if (count($authors) == 0) {
+            $authors = null;
+        }
+
+        $this->data['authors'] = $authors;
+
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the entry content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        if (array_key_exists('content', $this->data)) {
+            return $this->data['content'];
+        }
+
+        $content = $this->getExtension('Content')->getContent();
+
+        if (!$content) {
+            $content = $this->getDescription();
+        }
+
+        if (empty($content)) {
+            $content = $this->getExtension('Atom')->getContent();
+        }
+
+        $this->data['content'] = $content;
+
+        return $this->data['content'];
+    }
+
+    /**
+     * Get the entry's date of creation
+     *
+     * @return string
+     */
+    public function getDateCreated()
+    {
+        return $this->getDateModified();
+    }
+
+    /**
+     * Get the entry's date of modification
+     *
+     * @throws Exception\RuntimeException
+     * @return string
+     */
+    public function getDateModified()
+    {
+        if (array_key_exists('datemodified', $this->data)) {
+            return $this->data['datemodified'];
+        }
+
+        $date = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+            && $this->getType() !== Reader\Reader::TYPE_RSS_090
+        ) {
+            $dateModified = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/pubDate)');
+            if ($dateModified) {
+                $dateModifiedParsed = strtotime($dateModified);
+                if ($dateModifiedParsed) {
+                    $date = new DateTime('@' . $dateModifiedParsed);
+                } else {
+                    $dateStandards = array(DateTime::RSS, DateTime::RFC822,
+                                           DateTime::RFC2822, null);
+                    foreach ($dateStandards as $standard) {
+                        try {
+                            $date = date_create_from_format($standard, $dateModified);
+                            break;
+                        } catch (\Exception $e) {
+                            if ($standard == null) {
+                                throw new Exception\RuntimeException(
+                                    'Could not load date due to unrecognised'
+                                    .' format (should follow RFC 822 or 2822):'
+                                    . $e->getMessage(),
+                                    0, $e
+                                );
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if (!$date) {
+            $date = $this->getExtension('DublinCore')->getDate();
+        }
+
+        if (!$date) {
+            $date = $this->getExtension('Atom')->getDateModified();
+        }
+
+        if (!$date) {
+            $date = null;
+        }
+
+        $this->data['datemodified'] = $date;
+
+        return $this->data['datemodified'];
+    }
+
+    /**
+     * Get the entry description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        $description = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+            && $this->getType() !== Reader\Reader::TYPE_RSS_090
+        ) {
+            $description = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/description)');
+        } else {
+            $description = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:description)');
+        }
+
+        if (!$description) {
+            $description = $this->getExtension('DublinCore')->getDescription();
+        }
+
+        if (empty($description)) {
+            $description = $this->getExtension('Atom')->getDescription();
+        }
+
+        if (!$description) {
+            $description = null;
+        }
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the entry enclosure
+     * @return string
+     */
+    public function getEnclosure()
+    {
+        if (array_key_exists('enclosure', $this->data)) {
+            return $this->data['enclosure'];
+        }
+
+        $enclosure = null;
+
+        if ($this->getType() == Reader\Reader::TYPE_RSS_20) {
+            $nodeList = $this->xpath->query($this->xpathQueryRss . '/enclosure');
+
+            if ($nodeList->length > 0) {
+                $enclosure = new \stdClass();
+                $enclosure->url    = $nodeList->item(0)->getAttribute('url');
+                $enclosure->length = $nodeList->item(0)->getAttribute('length');
+                $enclosure->type   = $nodeList->item(0)->getAttribute('type');
+            }
+        }
+
+        if (!$enclosure) {
+            $enclosure = $this->getExtension('Atom')->getEnclosure();
+        }
+
+        $this->data['enclosure'] = $enclosure;
+
+        return $this->data['enclosure'];
+    }
+
+    /**
+     * Get the entry ID
+     *
+     * @return string
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+            && $this->getType() !== Reader\Reader::TYPE_RSS_090
+        ) {
+            $id = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/guid)');
+        }
+
+        if (!$id) {
+            $id = $this->getExtension('DublinCore')->getId();
+        }
+
+        if (empty($id)) {
+            $id = $this->getExtension('Atom')->getId();
+        }
+
+        if (!$id) {
+            if ($this->getPermalink()) {
+                $id = $this->getPermalink();
+            } elseif ($this->getTitle()) {
+                $id = $this->getTitle();
+            } else {
+                $id = null;
+            }
+        }
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get a specific link
+     *
+     * @param  int $index
+     * @return string
+     */
+    public function getLink($index = 0)
+    {
+        if (!array_key_exists('links', $this->data)) {
+            $this->getLinks();
+        }
+
+        if (isset($this->data['links'][$index])) {
+            return $this->data['links'][$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get all links
+     *
+     * @return array
+     */
+    public function getLinks()
+    {
+        if (array_key_exists('links', $this->data)) {
+            return $this->data['links'];
+        }
+
+        $links = array();
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $list = $this->xpath->query($this->xpathQueryRss . '//link');
+        } else {
+            $list = $this->xpath->query($this->xpathQueryRdf . '//rss:link');
+        }
+
+        if (!$list->length) {
+            $links = $this->getExtension('Atom')->getLinks();
+        } else {
+            foreach ($list as $link) {
+                $links[] = $link->nodeValue;
+            }
+        }
+
+        $this->data['links'] = $links;
+
+        return $this->data['links'];
+    }
+
+    /**
+     * Get all categories
+     *
+     * @return Reader\Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $list = $this->xpath->query($this->xpathQueryRss . '//category');
+        } else {
+            $list = $this->xpath->query($this->xpathQueryRdf . '//rss:category');
+        }
+
+        if ($list->length) {
+            $categoryCollection = new Reader\Collection\Category;
+            foreach ($list as $category) {
+                $categoryCollection[] = array(
+                    'term' => $category->nodeValue,
+                    'scheme' => $category->getAttribute('domain'),
+                    'label' => $category->nodeValue,
+                );
+            }
+        } else {
+            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
+        }
+
+        if (count($categoryCollection) == 0) {
+            $categoryCollection = $this->getExtension('Atom')->getCategories();
+        }
+
+        $this->data['categories'] = $categoryCollection;
+
+        return $this->data['categories'];
+    }
+
+    /**
+     * Get a permalink to the entry
+     *
+     * @return string
+     */
+    public function getPermalink()
+    {
+        return $this->getLink(0);
+    }
+
+    /**
+     * Get the entry title
+     *
+     * @return string
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        $title = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+            && $this->getType() !== Reader\Reader::TYPE_RSS_090
+        ) {
+            $title = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/title)');
+        } else {
+            $title = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:title)');
+        }
+
+        if (!$title) {
+            $title = $this->getExtension('DublinCore')->getTitle();
+        }
+
+        if (!$title) {
+            $title = $this->getExtension('Atom')->getTitle();
+        }
+
+        if (!$title) {
+            $title = null;
+        }
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     * Get the number of comments/replies for current entry
+     *
+     * @return string|null
+     */
+    public function getCommentCount()
+    {
+        if (array_key_exists('commentcount', $this->data)) {
+            return $this->data['commentcount'];
+        }
+
+        $commentcount = $this->getExtension('Slash')->getCommentCount();
+
+        if (!$commentcount) {
+            $commentcount = $this->getExtension('Thread')->getCommentCount();
+        }
+
+        if (!$commentcount) {
+            $commentcount = $this->getExtension('Atom')->getCommentCount();
+        }
+
+        if (!$commentcount) {
+            $commentcount = null;
+        }
+
+        $this->data['commentcount'] = $commentcount;
+
+        return $this->data['commentcount'];
+    }
+
+    /**
+     * Returns a URI pointing to the HTML page where comments can be made on this entry
+     *
+     * @return string
+     */
+    public function getCommentLink()
+    {
+        if (array_key_exists('commentlink', $this->data)) {
+            return $this->data['commentlink'];
+        }
+
+        $commentlink = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+            && $this->getType() !== Reader\Reader::TYPE_RSS_090
+        ) {
+            $commentlink = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/comments)');
+        }
+
+        if (!$commentlink) {
+            $commentlink = $this->getExtension('Atom')->getCommentLink();
+        }
+
+        if (!$commentlink) {
+            $commentlink = null;
+        }
+
+        $this->data['commentlink'] = $commentlink;
+
+        return $this->data['commentlink'];
+    }
+
+    /**
+     * Returns a URI pointing to a feed of all comments for this entry
+     *
+     * @return string
+     */
+    public function getCommentFeedLink()
+    {
+        if (array_key_exists('commentfeedlink', $this->data)) {
+            return $this->data['commentfeedlink'];
+        }
+
+        $commentfeedlink = $this->getExtension('WellFormedWeb')->getCommentFeedLink();
+
+        if (!$commentfeedlink) {
+            $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rss');
+        }
+
+        if (!$commentfeedlink) {
+            $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rdf');
+        }
+
+        if (!$commentfeedlink) {
+            $commentfeedlink = null;
+        }
+
+        $this->data['commentfeedlink'] = $commentfeedlink;
+
+        return $this->data['commentfeedlink'];
+    }
+
+    /**
+     * Set the XPath query (incl. on all Extensions)
+     *
+     * @param DOMXPath $xpath
+     * @return void
+     */
+    public function setXpath(DOMXPath $xpath)
+    {
+        parent::setXpath($xpath);
+        foreach ($this->extensions as $extension) {
+            $extension->setXpath($this->xpath);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-feed/src/Reader/Exception/BadMethodCallException.php
new file mode 100644
index 0000000000000000000000000000000000000000..008c57eccef18a9bc746094501fc176a109af15b
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Exception/BadMethodCallException.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Exception;
+
+use Zend\Feed\Exception;
+
+class BadMethodCallException extends Exception\BadMethodCallException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/src/Reader/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..e5e664aff6a94f46cb5503d3fa215413d0793ea3
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Exception/ExceptionInterface.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Exception;
+
+use Zend\Feed\Exception\ExceptionInterface as Exception;
+
+interface ExceptionInterface extends Exception
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/src/Reader/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..646b767b93a4bd24b3400376ef88386e75854858
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Exception/InvalidArgumentException.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Exception;
+
+use Zend\Feed\Exception;
+
+class InvalidArgumentException extends Exception\InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/src/Reader/Exception/RuntimeException.php
new file mode 100644
index 0000000000000000000000000000000000000000..d876e7f00e942178ccedd682e5fb8886e0a4337d
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Exception/RuntimeException.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Exception;
+
+use Zend\Feed\Exception;
+
+class RuntimeException extends Exception\RuntimeException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/AbstractEntry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/AbstractEntry.php
new file mode 100644
index 0000000000000000000000000000000000000000..72bd62ea3905a9d6cd88f0a74b71c88701db6eb1
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/AbstractEntry.php
@@ -0,0 +1,233 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension;
+
+use DOMDocument;
+use DOMElement;
+use DOMXPath;
+use Zend\Feed\Reader;
+
+abstract class AbstractEntry
+{
+    /**
+     * Feed entry data
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * DOM document object
+     *
+     * @var DOMDocument
+     */
+    protected $domDocument = null;
+
+    /**
+     * Entry instance
+     *
+     * @var DOMElement
+     */
+    protected $entry = null;
+
+    /**
+     * Pointer to the current entry
+     *
+     * @var int
+     */
+    protected $entryKey = 0;
+
+    /**
+     * XPath object
+     *
+     * @var DOMXPath
+     */
+    protected $xpath = null;
+
+    /**
+     * XPath query
+     *
+     * @var string
+     */
+    protected $xpathPrefix = '';
+
+    /**
+     * Set the entry DOMElement
+     *
+     * Has side effect of setting the DOMDocument for the entry.
+     *
+     * @param  DOMElement $entry
+     * @return AbstractEntry
+     */
+    public function setEntryElement(DOMElement $entry)
+    {
+        $this->entry = $entry;
+        $this->domDocument = $entry->ownerDocument;
+        return $this;
+    }
+
+    /**
+     * Get the entry DOMElement
+     *
+     * @return DOMElement
+     */
+    public function getEntryElement()
+    {
+        return $this->entry;
+    }
+
+    /**
+     * Set the entry key
+     *
+     * @param  string $entryKey
+     * @return AbstractEntry
+     */
+    public function setEntryKey($entryKey)
+    {
+        $this->entryKey = $entryKey;
+        return $this;
+    }
+
+    /**
+     * Get the DOM
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument()
+    {
+        return $this->domDocument;
+    }
+
+    /**
+     * Get the Entry's encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        $assumed = $this->getDomDocument()->encoding;
+        return $assumed;
+    }
+
+    /**
+     * Set the entry type
+     *
+     * Has side effect of setting xpath prefix
+     *
+     * @param  string $type
+     * @return AbstractEntry
+     */
+    public function setType($type)
+    {
+        if (null === $type) {
+            $this->data['type'] = null;
+            return $this;
+        }
+
+        $this->data['type'] = $type;
+        if ($type === Reader\Reader::TYPE_RSS_10
+            || $type === Reader\Reader::TYPE_RSS_090
+        ) {
+            $this->setXpathPrefix('//rss:item[' . ($this->entryKey + 1) . ']');
+            return $this;
+        }
+
+        if ($type === Reader\Reader::TYPE_ATOM_10
+            || $type === Reader\Reader::TYPE_ATOM_03
+        ) {
+            $this->setXpathPrefix('//atom:entry[' . ($this->entryKey + 1) . ']');
+            return $this;
+        }
+
+        $this->setXpathPrefix('//item[' . ($this->entryKey + 1) . ']');
+        return $this;
+    }
+
+    /**
+     * Get the entry type
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        $type = $this->data['type'];
+        if ($type === null) {
+            $type = Reader\Reader::detectType($this->getEntryElement(), true);
+            $this->setType($type);
+        }
+
+        return $type;
+    }
+
+    /**
+     * Set the XPath query
+     *
+     * @param  DOMXPath $xpath
+     * @return AbstractEntry
+     */
+    public function setXpath(DOMXPath $xpath)
+    {
+        $this->xpath = $xpath;
+        $this->registerNamespaces();
+        return $this;
+    }
+
+    /**
+     * Get the XPath query object
+     *
+     * @return DOMXPath
+     */
+    public function getXpath()
+    {
+        if (!$this->xpath) {
+            $this->setXpath(new DOMXPath($this->getDomDocument()));
+        }
+        return $this->xpath;
+    }
+
+    /**
+     * Serialize the entry to an array
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        return $this->data;
+    }
+
+    /**
+     * Get the XPath prefix
+     *
+     * @return string
+     */
+    public function getXpathPrefix()
+    {
+        return $this->xpathPrefix;
+    }
+
+    /**
+     * Set the XPath prefix
+     *
+     * @param  string $prefix
+     * @return AbstractEntry
+     */
+    public function setXpathPrefix($prefix)
+    {
+        $this->xpathPrefix = $prefix;
+        return $this;
+    }
+
+    /**
+     * Register XML namespaces
+     *
+     * @return void
+     */
+    abstract protected function registerNamespaces();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/AbstractFeed.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/AbstractFeed.php
new file mode 100644
index 0000000000000000000000000000000000000000..94acea6e3584d330eea18b44d0d74b396937db4d
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/AbstractFeed.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension;
+
+use DOMDocument;
+use DOMXPath;
+use Zend\Feed\Reader;
+
+abstract class AbstractFeed
+{
+    /**
+     * Parsed feed data
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Parsed feed data in the shape of a DOMDocument
+     *
+     * @var DOMDocument
+     */
+    protected $domDocument = null;
+
+    /**
+     * The base XPath query used to retrieve feed data
+     *
+     * @var DOMXPath
+     */
+    protected $xpath = null;
+
+    /**
+     * The XPath prefix
+     *
+     * @var string
+     */
+    protected $xpathPrefix = '';
+
+    /**
+     * Set the DOM document
+     *
+     * @param  DOMDocument $dom
+     * @return AbstractFeed
+     */
+    public function setDomDocument(DOMDocument $dom)
+    {
+        $this->domDocument = $dom;
+        return $this;
+    }
+
+    /**
+     * Get the DOM
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument()
+    {
+        return $this->domDocument;
+    }
+
+    /**
+     * Get the Feed's encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        $assumed = $this->getDomDocument()->encoding;
+        return $assumed;
+    }
+
+    /**
+     * Set the feed type
+     *
+     * @param  string $type
+     * @return AbstractFeed
+     */
+    public function setType($type)
+    {
+        $this->data['type'] = $type;
+        return $this;
+    }
+
+    /**
+     * Get the feed type
+     *
+     * If null, it will attempt to autodetect the type.
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        $type = $this->data['type'];
+        if (null === $type) {
+            $type = Reader\Reader::detectType($this->getDomDocument());
+            $this->setType($type);
+        }
+        return $type;
+    }
+
+    /**
+     * Return the feed as an array
+     *
+     * @return array
+     */
+    public function toArray() // untested
+    {
+        return $this->data;
+    }
+
+    /**
+     * Set the XPath query
+     *
+     * @param  DOMXPath $xpath
+     * @return AbstractEntry
+     */
+    public function setXpath(DOMXPath $xpath = null)
+    {
+        if (null === $xpath) {
+            $this->xpath = null;
+            return $this;
+        }
+
+        $this->xpath = $xpath;
+        $this->registerNamespaces();
+        return $this;
+    }
+
+    /**
+     * Get the DOMXPath object
+     *
+     * @return string
+     */
+    public function getXpath()
+    {
+        if (null === $this->xpath) {
+            $this->setXpath(new DOMXPath($this->getDomDocument()));
+        }
+
+        return $this->xpath;
+    }
+
+    /**
+     * Get the XPath prefix
+     *
+     * @return string
+     */
+    public function getXpathPrefix()
+    {
+        return $this->xpathPrefix;
+    }
+
+    /**
+     * Set the XPath prefix
+     *
+     * @param string $prefix
+     * @return void
+     */
+    public function setXpathPrefix($prefix)
+    {
+        $this->xpathPrefix = $prefix;
+    }
+
+    /**
+     * Register the default namespaces for the current feed format
+     */
+    abstract protected function registerNamespaces();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Atom/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Atom/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..06e94a2755541851b8842da12b1429896195b66e
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Atom/Entry.php
@@ -0,0 +1,634 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Atom;
+
+use DateTime;
+use DOMDocument;
+use DOMElement;
+use stdClass;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Collection;
+use Zend\Feed\Reader\Extension;
+use Zend\Feed\Uri;
+
+class Entry extends Extension\AbstractEntry
+{
+    /**
+     * Get the specified author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return Collection\Author
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $authors = array();
+        $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:author');
+
+        if (!$list->length) {
+            /**
+             * TODO: Limit query to feed level els only!
+             */
+            $list = $this->getXpath()->query('//atom:author');
+        }
+
+        if ($list->length) {
+            foreach ($list as $author) {
+                $author = $this->getAuthorFromElement($author);
+                if (!empty($author)) {
+                    $authors[] = $author;
+                }
+            }
+        }
+
+        if (count($authors) == 0) {
+            $authors = new Collection\Author();
+        } else {
+            $authors = new Collection\Author(
+                Reader\Reader::arrayUnique($authors)
+            );
+        }
+
+        $this->data['authors'] = $authors;
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the entry content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        if (array_key_exists('content', $this->data)) {
+            return $this->data['content'];
+        }
+
+        $content = null;
+
+        $el = $this->getXpath()->query($this->getXpathPrefix() . '/atom:content');
+        if ($el->length > 0) {
+            $el = $el->item(0);
+            $type = $el->getAttribute('type');
+            switch ($type) {
+                case '':
+                case 'text':
+                case 'text/plain':
+                case 'html':
+                case 'text/html':
+                    $content = $el->nodeValue;
+                    break;
+                case 'xhtml':
+                    $this->getXpath()->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml');
+                    $xhtml = $this->getXpath()->query(
+                        $this->getXpathPrefix() . '/atom:content/xhtml:div'
+                    )->item(0);
+                    $d = new DOMDocument('1.0', $this->getEncoding());
+                    $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
+                    $xhtmls = $d->importNode($xhtml, $deep);
+                    $d->appendChild($xhtmls);
+                    $content = $this->collectXhtml(
+                        $d->saveXML(),
+                        $d->lookupPrefix('http://www.w3.org/1999/xhtml')
+                    );
+                    break;
+            }
+        }
+
+        if (!$content) {
+            $content = $this->getDescription();
+        }
+
+        $this->data['content'] = trim($content);
+
+        return $this->data['content'];
+    }
+
+    /**
+     * Parse out XHTML to remove the namespacing
+     *
+     * @param $xhtml
+     * @param $prefix
+     * @return mixed
+     */
+    protected function collectXhtml($xhtml, $prefix)
+    {
+        if (!empty($prefix)) {
+            $prefix = $prefix . ':';
+        }
+        $matches = array(
+            "/<\?xml[^<]*>[^<]*<" . $prefix . "div[^<]*/",
+            "/<\/" . $prefix . "div>\s*$/"
+        );
+        $xhtml = preg_replace($matches, '', $xhtml);
+        if (!empty($prefix)) {
+            $xhtml = preg_replace("/(<[\/]?)" . $prefix . "([a-zA-Z]+)/", '$1$2', $xhtml);
+        }
+        return $xhtml;
+    }
+
+    /**
+     * Get the entry creation date
+     *
+     * @return string
+     */
+    public function getDateCreated()
+    {
+        if (array_key_exists('datecreated', $this->data)) {
+            return $this->data['datecreated'];
+        }
+
+        $date = null;
+
+        if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) {
+            $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)');
+        } else {
+            $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)');
+        }
+
+        if ($dateCreated) {
+            $date = new DateTime($dateCreated);
+        }
+
+        $this->data['datecreated'] = $date;
+
+        return $this->data['datecreated'];
+    }
+
+    /**
+     * Get the entry modification date
+     *
+     * @return string
+     */
+    public function getDateModified()
+    {
+        if (array_key_exists('datemodified', $this->data)) {
+            return $this->data['datemodified'];
+        }
+
+        $date = null;
+
+        if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) {
+            $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)');
+        } else {
+            $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)');
+        }
+
+        if ($dateModified) {
+            $date = new DateTime($dateModified);
+        }
+
+        $this->data['datemodified'] = $date;
+
+        return $this->data['datemodified'];
+    }
+
+    /**
+     * Get the entry description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:summary)');
+
+        if (!$description) {
+            $description = null;
+        }
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the entry enclosure
+     *
+     * @return string
+     */
+    public function getEnclosure()
+    {
+        if (array_key_exists('enclosure', $this->data)) {
+            return $this->data['enclosure'];
+        }
+
+        $enclosure = null;
+
+        $nodeList = $this->getXpath()->query($this->getXpathPrefix() . '/atom:link[@rel="enclosure"]');
+
+        if ($nodeList->length > 0) {
+            $enclosure         = new stdClass();
+            $enclosure->url    = $nodeList->item(0)->getAttribute('href');
+            $enclosure->length = $nodeList->item(0)->getAttribute('length');
+            $enclosure->type   = $nodeList->item(0)->getAttribute('type');
+        }
+
+        $this->data['enclosure'] = $enclosure;
+
+        return $this->data['enclosure'];
+    }
+
+    /**
+     * Get the entry ID
+     *
+     * @return string
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)');
+
+        if (!$id) {
+            if ($this->getPermalink()) {
+                $id = $this->getPermalink();
+            } elseif ($this->getTitle()) {
+                $id = $this->getTitle();
+            } else {
+                $id = null;
+            }
+        }
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get the base URI of the feed (if set).
+     *
+     * @return string|null
+     */
+    public function getBaseUrl()
+    {
+        if (array_key_exists('baseUrl', $this->data)) {
+            return $this->data['baseUrl'];
+        }
+
+        $baseUrl = $this->getXpath()->evaluate(
+            'string('
+            . $this->getXpathPrefix()
+            . '/@xml:base[1]'
+            . ')'
+        );
+
+        if (!$baseUrl) {
+            $baseUrl = $this->getXpath()->evaluate('string(//@xml:base[1])');
+        }
+
+        if (!$baseUrl) {
+            $baseUrl = null;
+        }
+
+        $this->data['baseUrl'] = $baseUrl;
+
+        return $this->data['baseUrl'];
+    }
+
+    /**
+     * Get a specific link
+     *
+     * @param  int $index
+     * @return string
+     */
+    public function getLink($index = 0)
+    {
+        if (!array_key_exists('links', $this->data)) {
+            $this->getLinks();
+        }
+
+        if (isset($this->data['links'][$index])) {
+            return $this->data['links'][$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get all links
+     *
+     * @return array
+     */
+    public function getLinks()
+    {
+        if (array_key_exists('links', $this->data)) {
+            return $this->data['links'];
+        }
+
+        $links = array();
+
+        $list = $this->getXpath()->query(
+            $this->getXpathPrefix() . '//atom:link[@rel="alternate"]/@href' . '|' .
+            $this->getXpathPrefix() . '//atom:link[not(@rel)]/@href'
+        );
+
+        if ($list->length) {
+            foreach ($list as $link) {
+                $links[] = $this->absolutiseUri($link->value);
+            }
+        }
+
+        $this->data['links'] = $links;
+
+        return $this->data['links'];
+    }
+
+    /**
+     * Get a permalink to the entry
+     *
+     * @return string
+     */
+    public function getPermalink()
+    {
+        return $this->getLink(0);
+    }
+
+    /**
+     * Get the entry title
+     *
+     * @return string
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)');
+
+        if (!$title) {
+            $title = null;
+        }
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     * Get the number of comments/replies for current entry
+     *
+     * @return int
+     */
+    public function getCommentCount()
+    {
+        if (array_key_exists('commentcount', $this->data)) {
+            return $this->data['commentcount'];
+        }
+
+        $count = null;
+
+        $this->getXpath()->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0');
+        $list = $this->getXpath()->query(
+            $this->getXpathPrefix() . '//atom:link[@rel="replies"]/@thread10:count'
+        );
+
+        if ($list->length) {
+            $count = $list->item(0)->value;
+        }
+
+        $this->data['commentcount'] = $count;
+
+        return $this->data['commentcount'];
+    }
+
+    /**
+     * Returns a URI pointing to the HTML page where comments can be made on this entry
+     *
+     * @return string
+     */
+    public function getCommentLink()
+    {
+        if (array_key_exists('commentlink', $this->data)) {
+            return $this->data['commentlink'];
+        }
+
+        $link = null;
+
+        $list = $this->getXpath()->query(
+            $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="text/html"]/@href'
+        );
+
+        if ($list->length) {
+            $link = $list->item(0)->value;
+            $link = $this->absolutiseUri($link);
+        }
+
+        $this->data['commentlink'] = $link;
+
+        return $this->data['commentlink'];
+    }
+
+    /**
+     * Returns a URI pointing to a feed of all comments for this entry
+     *
+     * @param string $type
+     * @return string
+     */
+    public function getCommentFeedLink($type = 'atom')
+    {
+        if (array_key_exists('commentfeedlink', $this->data)) {
+            return $this->data['commentfeedlink'];
+        }
+
+        $link = null;
+
+        $list = $this->getXpath()->query(
+            $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="application/' . $type.'+xml"]/@href'
+        );
+
+        if ($list->length) {
+            $link = $list->item(0)->value;
+            $link = $this->absolutiseUri($link);
+        }
+
+        $this->data['commentfeedlink'] = $link;
+
+        return $this->data['commentfeedlink'];
+    }
+
+    /**
+     * Get all categories
+     *
+     * @return Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        if ($this->getAtomType() == Reader\Reader::TYPE_ATOM_10) {
+            $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:category');
+        } else {
+            /**
+             * Since Atom 0.3 did not support categories, it would have used the
+             * Dublin Core extension. However there is a small possibility Atom 0.3
+             * may have been retrofitted to use Atom 1.0 instead.
+             */
+            $this->getXpath()->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10);
+            $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom10:category');
+        }
+
+        if ($list->length) {
+            $categoryCollection = new Collection\Category;
+            foreach ($list as $category) {
+                $categoryCollection[] = array(
+                    'term' => $category->getAttribute('term'),
+                    'scheme' => $category->getAttribute('scheme'),
+                    'label' => $category->getAttribute('label')
+                );
+            }
+        } else {
+            return new Collection\Category;
+        }
+
+        $this->data['categories'] = $categoryCollection;
+
+        return $this->data['categories'];
+    }
+
+    /**
+     * Get source feed metadata from the entry
+     *
+     * @return Reader\Feed\Atom\Source|null
+     */
+    public function getSource()
+    {
+        if (array_key_exists('source', $this->data)) {
+            return $this->data['source'];
+        }
+
+        $source = null;
+        // TODO: Investigate why _getAtomType() fails here. Is it even needed?
+        if ($this->getType() == Reader\Reader::TYPE_ATOM_10) {
+            $list = $this->getXpath()->query($this->getXpathPrefix() . '/atom:source[1]');
+            if ($list->length) {
+                $element = $list->item(0);
+                $source = new Reader\Feed\Atom\Source($element, $this->getXpathPrefix());
+            }
+        }
+
+        $this->data['source'] = $source;
+        return $this->data['source'];
+    }
+
+    /**
+     *  Attempt to absolutise the URI, i.e. if a relative URI apply the
+     *  xml:base value as a prefix to turn into an absolute URI.
+     *
+     * @param $link
+     * @return string
+     */
+    protected function absolutiseUri($link)
+    {
+        if (!Uri::factory($link)->isAbsolute()) {
+            if ($this->getBaseUrl() !== null) {
+                $link = $this->getBaseUrl() . $link;
+                if (!Uri::factory($link)->isValid()) {
+                    $link = null;
+                }
+            }
+        }
+        return $link;
+    }
+
+    /**
+     * Get an author entry
+     *
+     * @param DOMElement $element
+     * @return string
+     */
+    protected function getAuthorFromElement(DOMElement $element)
+    {
+        $author = array();
+
+        $emailNode = $element->getElementsByTagName('email');
+        $nameNode  = $element->getElementsByTagName('name');
+        $uriNode   = $element->getElementsByTagName('uri');
+
+        if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) {
+            $author['email'] = $emailNode->item(0)->nodeValue;
+        }
+
+        if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) {
+            $author['name'] = $nameNode->item(0)->nodeValue;
+        }
+
+        if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) {
+            $author['uri'] = $uriNode->item(0)->nodeValue;
+        }
+
+        if (empty($author)) {
+            return;
+        }
+        return $author;
+    }
+
+    /**
+     * Register the default namespaces for the current feed format
+     */
+    protected function registerNamespaces()
+    {
+        switch ($this->getAtomType()) {
+            case Reader\Reader::TYPE_ATOM_03:
+                $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03);
+                break;
+            default:
+                $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10);
+                break;
+        }
+    }
+
+    /**
+     * Detect the presence of any Atom namespaces in use
+     *
+     * @return string
+     */
+    protected function getAtomType()
+    {
+        $dom = $this->getDomDocument();
+        $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03);
+        $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10);
+        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03)
+        || !empty($prefixAtom03)) {
+            return Reader\Reader::TYPE_ATOM_03;
+        }
+        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10)
+        || !empty($prefixAtom10)) {
+            return Reader\Reader::TYPE_ATOM_10;
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Atom/Feed.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Atom/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..19dbf5a56eebc381f9d2afd2882f1a690ab5eab7
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Atom/Feed.php
@@ -0,0 +1,536 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Atom;
+
+use DateTime;
+use DOMElement;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Collection;
+use Zend\Feed\Reader\Extension;
+use Zend\Feed\Uri;
+
+class Feed extends Extension\AbstractFeed
+{
+    /**
+     * Get a single author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return Collection\Author
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $list = $this->xpath->query('//atom:author');
+
+        $authors = array();
+
+        if ($list->length) {
+            foreach ($list as $author) {
+                $author = $this->getAuthorFromElement($author);
+                if (!empty($author)) {
+                    $authors[] = $author;
+                }
+            }
+        }
+
+        if (count($authors) == 0) {
+            $authors = new Collection\Author();
+        } else {
+            $authors = new Collection\Author(
+                Reader\Reader::arrayUnique($authors)
+            );
+        }
+
+        $this->data['authors'] = $authors;
+
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the copyright entry
+     *
+     * @return string|null
+     */
+    public function getCopyright()
+    {
+        if (array_key_exists('copyright', $this->data)) {
+            return $this->data['copyright'];
+        }
+
+        $copyright = null;
+
+        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
+            $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:copyright)');
+        } else {
+            $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:rights)');
+        }
+
+        if (!$copyright) {
+            $copyright = null;
+        }
+
+        $this->data['copyright'] = $copyright;
+
+        return $this->data['copyright'];
+    }
+
+    /**
+     * Get the feed creation date
+     *
+     * @return DateTime|null
+     */
+    public function getDateCreated()
+    {
+        if (array_key_exists('datecreated', $this->data)) {
+            return $this->data['datecreated'];
+        }
+
+        $date = null;
+
+        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
+            $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)');
+        } else {
+            $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)');
+        }
+
+        if ($dateCreated) {
+            $date = new DateTime($dateCreated);
+        }
+
+        $this->data['datecreated'] = $date;
+
+        return $this->data['datecreated'];
+    }
+
+    /**
+     * Get the feed modification date
+     *
+     * @return DateTime|null
+     */
+    public function getDateModified()
+    {
+        if (array_key_exists('datemodified', $this->data)) {
+            return $this->data['datemodified'];
+        }
+
+        $date = null;
+
+        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
+            $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)');
+        } else {
+            $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)');
+        }
+
+        if ($dateModified) {
+            $date = new DateTime($dateModified);
+        }
+
+        $this->data['datemodified'] = $date;
+
+        return $this->data['datemodified'];
+    }
+
+    /**
+     * Get the feed description
+     *
+     * @return string|null
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        $description = null;
+
+        if ($this->getType() === Reader\Reader::TYPE_ATOM_03) {
+            $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:tagline)');
+        } else {
+            $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:subtitle)');
+        }
+
+        if (!$description) {
+            $description = null;
+        }
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the feed generator entry
+     *
+     * @return string|null
+     */
+    public function getGenerator()
+    {
+        if (array_key_exists('generator', $this->data)) {
+            return $this->data['generator'];
+        }
+        // TODO: Add uri support
+        $generator = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:generator)');
+
+        if (!$generator) {
+            $generator = null;
+        }
+
+        $this->data['generator'] = $generator;
+
+        return $this->data['generator'];
+    }
+
+    /**
+     * Get the feed ID
+     *
+     * @return string|null
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)');
+
+        if (!$id) {
+            if ($this->getLink()) {
+                $id = $this->getLink();
+            } elseif ($this->getTitle()) {
+                $id = $this->getTitle();
+            } else {
+                $id = null;
+            }
+        }
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get the feed language
+     *
+     * @return string|null
+     */
+    public function getLanguage()
+    {
+        if (array_key_exists('language', $this->data)) {
+            return $this->data['language'];
+        }
+
+        $language = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:lang)');
+
+        if (!$language) {
+            $language = $this->xpath->evaluate('string(//@xml:lang[1])');
+        }
+
+        if (!$language) {
+            $language = null;
+        }
+
+        $this->data['language'] = $language;
+
+        return $this->data['language'];
+    }
+
+    /**
+     * Get the feed image
+     *
+     * @return array|null
+     */
+    public function getImage()
+    {
+        if (array_key_exists('image', $this->data)) {
+            return $this->data['image'];
+        }
+
+        $imageUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:logo)');
+
+        if (!$imageUrl) {
+            $image = null;
+        } else {
+            $image = array('uri' => $imageUrl);
+        }
+
+        $this->data['image'] = $image;
+
+        return $this->data['image'];
+    }
+
+    /**
+     * Get the base URI of the feed (if set).
+     *
+     * @return string|null
+     */
+    public function getBaseUrl()
+    {
+        if (array_key_exists('baseUrl', $this->data)) {
+            return $this->data['baseUrl'];
+        }
+
+        $baseUrl = $this->xpath->evaluate('string(//@xml:base[1])');
+
+        if (!$baseUrl) {
+            $baseUrl = null;
+        }
+        $this->data['baseUrl'] = $baseUrl;
+
+        return $this->data['baseUrl'];
+    }
+
+    /**
+     * Get a link to the source website
+     *
+     * @return string|null
+     */
+    public function getLink()
+    {
+        if (array_key_exists('link', $this->data)) {
+            return $this->data['link'];
+        }
+
+        $link = null;
+
+        $list = $this->xpath->query(
+            $this->getXpathPrefix() . '/atom:link[@rel="alternate"]/@href' . '|' .
+            $this->getXpathPrefix() . '/atom:link[not(@rel)]/@href'
+        );
+
+        if ($list->length) {
+            $link = $list->item(0)->nodeValue;
+            $link = $this->absolutiseUri($link);
+        }
+
+        $this->data['link'] = $link;
+
+        return $this->data['link'];
+    }
+
+    /**
+     * Get a link to the feed's XML Url
+     *
+     * @return string|null
+     */
+    public function getFeedLink()
+    {
+        if (array_key_exists('feedlink', $this->data)) {
+            return $this->data['feedlink'];
+        }
+
+        $link = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:link[@rel="self"]/@href)');
+
+        $link = $this->absolutiseUri($link);
+
+        $this->data['feedlink'] = $link;
+
+        return $this->data['feedlink'];
+    }
+
+    /**
+     * Get an array of any supported Pusubhubbub endpoints
+     *
+     * @return array|null
+     */
+    public function getHubs()
+    {
+        if (array_key_exists('hubs', $this->data)) {
+            return $this->data['hubs'];
+        }
+        $hubs = array();
+
+        $list = $this->xpath->query($this->getXpathPrefix()
+            . '//atom:link[@rel="hub"]/@href');
+
+        if ($list->length) {
+            foreach ($list as $uri) {
+                $hubs[] = $this->absolutiseUri($uri->nodeValue);
+            }
+        } else {
+            $hubs = null;
+        }
+
+        $this->data['hubs'] = $hubs;
+
+        return $this->data['hubs'];
+    }
+
+    /**
+     * Get the feed title
+     *
+     * @return string|null
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        $title = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)');
+
+        if (!$title) {
+            $title = null;
+        }
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     * Get all categories
+     *
+     * @return Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        if ($this->getType() == Reader\Reader::TYPE_ATOM_10) {
+            $list = $this->xpath->query($this->getXpathPrefix() . '/atom:category');
+        } else {
+            /**
+             * Since Atom 0.3 did not support categories, it would have used the
+             * Dublin Core extension. However there is a small possibility Atom 0.3
+             * may have been retrofittied to use Atom 1.0 instead.
+             */
+            $this->xpath->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10);
+            $list = $this->xpath->query($this->getXpathPrefix() . '/atom10:category');
+        }
+
+        if ($list->length) {
+            $categoryCollection = new Collection\Category;
+            foreach ($list as $category) {
+                $categoryCollection[] = array(
+                    'term' => $category->getAttribute('term'),
+                    'scheme' => $category->getAttribute('scheme'),
+                    'label' => $category->getAttribute('label')
+                );
+            }
+        } else {
+            return new Collection\Category;
+        }
+
+        $this->data['categories'] = $categoryCollection;
+
+        return $this->data['categories'];
+    }
+
+    /**
+     * Get an author entry in RSS format
+     *
+     * @param  DOMElement $element
+     * @return string
+     */
+    protected function getAuthorFromElement(DOMElement $element)
+    {
+        $author = array();
+
+        $emailNode = $element->getElementsByTagName('email');
+        $nameNode  = $element->getElementsByTagName('name');
+        $uriNode   = $element->getElementsByTagName('uri');
+
+        if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) {
+            $author['email'] = $emailNode->item(0)->nodeValue;
+        }
+
+        if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) {
+            $author['name'] = $nameNode->item(0)->nodeValue;
+        }
+
+        if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) {
+            $author['uri'] = $uriNode->item(0)->nodeValue;
+        }
+
+        if (empty($author)) {
+            return;
+        }
+        return $author;
+    }
+
+    /**
+     *  Attempt to absolutise the URI, i.e. if a relative URI apply the
+     *  xml:base value as a prefix to turn into an absolute URI.
+     */
+    protected function absolutiseUri($link)
+    {
+        if (!Uri::factory($link)->isAbsolute()) {
+            if ($this->getBaseUrl() !== null) {
+                $link = $this->getBaseUrl() . $link;
+                if (!Uri::factory($link)->isValid()) {
+                    $link = null;
+                }
+            }
+        }
+        return $link;
+    }
+
+    /**
+     * Register the default namespaces for the current feed format
+     */
+    protected function registerNamespaces()
+    {
+        if ($this->getType() == Reader\Reader::TYPE_ATOM_10
+            || $this->getType() == Reader\Reader::TYPE_ATOM_03
+        ) {
+            return; // pre-registered at Feed level
+        }
+        $atomDetected = $this->getAtomType();
+        switch ($atomDetected) {
+            case Reader\Reader::TYPE_ATOM_03:
+                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03);
+                break;
+            default:
+                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10);
+                break;
+        }
+    }
+
+    /**
+     * Detect the presence of any Atom namespaces in use
+     */
+    protected function getAtomType()
+    {
+        $dom = $this->getDomDocument();
+        $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03);
+        $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10);
+        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10)
+            || !empty($prefixAtom10)
+        ) {
+            return Reader\Reader::TYPE_ATOM_10;
+        }
+        if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03)
+            || !empty($prefixAtom03)
+        ) {
+            return Reader\Reader::TYPE_ATOM_03;
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Content/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Content/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..539848f25825efab60c4e18da6ecc0437e000958
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Content/Entry.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Content;
+
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Extension;
+
+class Entry extends Extension\AbstractEntry
+{
+    public function getContent()
+    {
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+            && $this->getType() !== Reader\Reader::TYPE_RSS_090
+        ) {
+            $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)');
+        } else {
+            $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)');
+        }
+        return $content;
+    }
+
+    /**
+     * Register RSS Content Module namespace
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('content', 'http://purl.org/rss/1.0/modules/content/');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/CreativeCommons/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/CreativeCommons/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..9194682f889210a2f787aac0174ebc6a009898e3
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/CreativeCommons/Entry.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\CreativeCommons;
+
+use Zend\Feed\Reader\Extension;
+
+class Entry extends Extension\AbstractEntry
+{
+    /**
+     * Get the entry license
+     *
+     * @param int $index
+     * @return string|null
+     */
+    public function getLicense($index = 0)
+    {
+        $licenses = $this->getLicenses();
+
+        if (isset($licenses[$index])) {
+            return $licenses[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get the entry licenses
+     *
+     * @return array
+     */
+    public function getLicenses()
+    {
+        $name = 'licenses';
+        if (array_key_exists($name, $this->data)) {
+            return $this->data[$name];
+        }
+
+        $licenses = array();
+        $list = $this->xpath->evaluate($this->getXpathPrefix() . '//cc:license');
+
+        if ($list->length) {
+            foreach ($list as $license) {
+                $licenses[] = $license->nodeValue;
+            }
+
+            $licenses = array_unique($licenses);
+        } else {
+            $cc = new Feed();
+            $licenses = $cc->getLicenses();
+        }
+
+        $this->data[$name] = $licenses;
+
+        return $this->data[$name];
+    }
+
+    /**
+     * Register Creative Commons namespaces
+     *
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/CreativeCommons/Feed.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/CreativeCommons/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..c833bbda9c5d10d3fd51a49d39a0a8fd47964557
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/CreativeCommons/Feed.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\CreativeCommons;
+
+use Zend\Feed\Reader\Extension;
+
+class Feed extends Extension\AbstractFeed
+{
+    /**
+     * Get the entry license
+     *
+     * @param int $index
+     * @return string|null
+     */
+    public function getLicense($index = 0)
+    {
+        $licenses = $this->getLicenses();
+
+        if (isset($licenses[$index])) {
+            return $licenses[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get the entry licenses
+     *
+     * @return array
+     */
+    public function getLicenses()
+    {
+        $name = 'licenses';
+        if (array_key_exists($name, $this->data)) {
+            return $this->data[$name];
+        }
+
+        $licenses = array();
+        $list = $this->xpath->evaluate('channel/cc:license');
+
+        if ($list->length) {
+            foreach ($list as $license) {
+                $licenses[] = $license->nodeValue;
+            }
+
+            $licenses = array_unique($licenses);
+        }
+
+        $this->data[$name] = $licenses;
+
+        return $this->data[$name];
+    }
+
+    /**
+     * Register Creative Commons namespaces
+     *
+     * @return void
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/DublinCore/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/DublinCore/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..e23de8101ca8c7dbe00c842c2692799e3a3f0301
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/DublinCore/Entry.php
@@ -0,0 +1,234 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\DublinCore;
+
+use DateTime;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Collection;
+use Zend\Feed\Reader\Extension;
+
+class Entry extends Extension\AbstractEntry
+{
+    /**
+     * Get an author entry
+     *
+     * @param int $index
+     * @return string
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $authors = array();
+        $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:creator');
+
+        if (!$list->length) {
+            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:creator');
+        }
+        if (!$list->length) {
+            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:publisher');
+
+            if (!$list->length) {
+                $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:publisher');
+            }
+        }
+
+        if ($list->length) {
+            foreach ($list as $author) {
+                $authors[] = array(
+                    'name' => $author->nodeValue
+                );
+            }
+            $authors = new Collection\Author(
+                Reader\Reader::arrayUnique($authors)
+            );
+        } else {
+            $authors = null;
+        }
+
+        $this->data['authors'] = $authors;
+
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get categories (subjects under DC)
+     *
+     * @return Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject');
+
+        if (!$list->length) {
+            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject');
+        }
+
+        if ($list->length) {
+            $categoryCollection = new Collection\Category;
+            foreach ($list as $category) {
+                $categoryCollection[] = array(
+                    'term' => $category->nodeValue,
+                    'scheme' => null,
+                    'label' => $category->nodeValue,
+                );
+            }
+        } else {
+            $categoryCollection = new Collection\Category;
+        }
+
+        $this->data['categories'] = $categoryCollection;
+        return $this->data['categories'];
+    }
+
+    /**
+     * Get the entry content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        return $this->getDescription();
+    }
+
+    /**
+     * Get the entry description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)');
+
+        if (!$description) {
+            $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)');
+        }
+
+        if (!$description) {
+            $description = null;
+        }
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the entry ID
+     *
+     * @return string
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)');
+
+        if (!$id) {
+            $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)');
+        }
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get the entry title
+     *
+     * @return string
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)');
+
+        if (!$title) {
+            $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)');
+        }
+
+        if (!$title) {
+            $title = null;
+        }
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     *
+     *
+     * @return DateTime|null
+     */
+    public function getDate()
+    {
+        if (array_key_exists('date', $this->data)) {
+            return $this->data['date'];
+        }
+
+        $d    = null;
+        $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)');
+
+        if (!$date) {
+            $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)');
+        }
+
+        if ($date) {
+            $d = new DateTime($date);
+        }
+
+        $this->data['date'] = $d;
+
+        return $this->data['date'];
+    }
+
+    /**
+     * Register DC namespaces
+     *
+     * @return void
+     */
+    protected function registerNamespaces()
+    {
+        $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/');
+        $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/DublinCore/Feed.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/DublinCore/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b54b081f2da1c08fb223a7d3b5a12c16be9d554
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/DublinCore/Feed.php
@@ -0,0 +1,276 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\DublinCore;
+
+use DateTime;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Collection;
+use Zend\Feed\Reader\Extension;
+
+class Feed extends Extension\AbstractFeed
+{
+    /**
+     * Get a single author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $authors = array();
+        $list    = $this->getXpath()->query('//dc11:creator');
+
+        if (!$list->length) {
+            $list = $this->getXpath()->query('//dc10:creator');
+        }
+        if (!$list->length) {
+            $list = $this->getXpath()->query('//dc11:publisher');
+
+            if (!$list->length) {
+                $list = $this->getXpath()->query('//dc10:publisher');
+            }
+        }
+
+        if ($list->length) {
+            foreach ($list as $author) {
+                $authors[] = array(
+                    'name' => $author->nodeValue
+                );
+            }
+            $authors = new Collection\Author(
+                Reader\Reader::arrayUnique($authors)
+            );
+        } else {
+            $authors = null;
+        }
+
+        $this->data['authors'] = $authors;
+
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the copyright entry
+     *
+     * @return string|null
+     */
+    public function getCopyright()
+    {
+        if (array_key_exists('copyright', $this->data)) {
+            return $this->data['copyright'];
+        }
+
+        $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:rights)');
+
+        if (!$copyright) {
+            $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:rights)');
+        }
+
+        if (!$copyright) {
+            $copyright = null;
+        }
+
+        $this->data['copyright'] = $copyright;
+
+        return $this->data['copyright'];
+    }
+
+    /**
+     * Get the feed description
+     *
+     * @return string|null
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)');
+
+        if (!$description) {
+            $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)');
+        }
+
+        if (!$description) {
+            $description = null;
+        }
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the feed ID
+     *
+     * @return string|null
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)');
+
+        if (!$id) {
+            $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)');
+        }
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get the feed language
+     *
+     * @return string|null
+     */
+    public function getLanguage()
+    {
+        if (array_key_exists('language', $this->data)) {
+            return $this->data['language'];
+        }
+
+        $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:language)');
+
+        if (!$language) {
+            $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:language)');
+        }
+
+        if (!$language) {
+            $language = null;
+        }
+
+        $this->data['language'] = $language;
+
+        return $this->data['language'];
+    }
+
+    /**
+     * Get the feed title
+     *
+     * @return string|null
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)');
+
+        if (!$title) {
+            $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)');
+        }
+
+        if (!$title) {
+            $title = null;
+        }
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     *
+     *
+     * @return DateTime|null
+     */
+    public function getDate()
+    {
+        if (array_key_exists('date', $this->data)) {
+            return $this->data['date'];
+        }
+
+        $d = null;
+        $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)');
+
+        if (!$date) {
+            $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)');
+        }
+
+        if ($date) {
+            $d = new DateTime($date);
+        }
+
+        $this->data['date'] = $d;
+
+        return $this->data['date'];
+    }
+
+    /**
+     * Get categories (subjects under DC)
+     *
+     * @return Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject');
+
+        if (!$list->length) {
+            $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject');
+        }
+
+        if ($list->length) {
+            $categoryCollection = new Collection\Category;
+            foreach ($list as $category) {
+                $categoryCollection[] = array(
+                    'term' => $category->nodeValue,
+                    'scheme' => null,
+                    'label' => $category->nodeValue,
+                );
+            }
+        } else {
+            $categoryCollection = new Collection\Category;
+        }
+
+        $this->data['categories'] = $categoryCollection;
+        return $this->data['categories'];
+    }
+
+    /**
+     * Register the default namespaces for the current feed format
+     *
+     * @return void
+     */
+    protected function registerNamespaces()
+    {
+        $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/');
+        $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Podcast/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Podcast/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..5aec2fd9ccc10ba0a890d4bb0eb0542d6881cffe
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Podcast/Entry.php
@@ -0,0 +1,180 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Podcast;
+
+use Zend\Feed\Reader\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractEntry
+{
+    /**
+     * Get the entry author
+     *
+     * @return string
+     */
+    public function getCastAuthor()
+    {
+        if (isset($this->data['author'])) {
+            return $this->data['author'];
+        }
+
+        $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)');
+
+        if (!$author) {
+            $author = null;
+        }
+
+        $this->data['author'] = $author;
+
+        return $this->data['author'];
+    }
+
+    /**
+     * Get the entry block
+     *
+     * @return string
+     */
+    public function getBlock()
+    {
+        if (isset($this->data['block'])) {
+            return $this->data['block'];
+        }
+
+        $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)');
+
+        if (!$block) {
+            $block = null;
+        }
+
+        $this->data['block'] = $block;
+
+        return $this->data['block'];
+    }
+
+    /**
+     * Get the entry duration
+     *
+     * @return string
+     */
+    public function getDuration()
+    {
+        if (isset($this->data['duration'])) {
+            return $this->data['duration'];
+        }
+
+        $duration = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:duration)');
+
+        if (!$duration) {
+            $duration = null;
+        }
+
+        $this->data['duration'] = $duration;
+
+        return $this->data['duration'];
+    }
+
+    /**
+     * Get the entry explicit
+     *
+     * @return string
+     */
+    public function getExplicit()
+    {
+        if (isset($this->data['explicit'])) {
+            return $this->data['explicit'];
+        }
+
+        $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)');
+
+        if (!$explicit) {
+            $explicit = null;
+        }
+
+        $this->data['explicit'] = $explicit;
+
+        return $this->data['explicit'];
+    }
+
+    /**
+     * Get the entry keywords
+     *
+     * @return string
+     */
+    public function getKeywords()
+    {
+        if (isset($this->data['keywords'])) {
+            return $this->data['keywords'];
+        }
+
+        $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)');
+
+        if (!$keywords) {
+            $keywords = null;
+        }
+
+        $this->data['keywords'] = $keywords;
+
+        return $this->data['keywords'];
+    }
+
+    /**
+     * Get the entry subtitle
+     *
+     * @return string
+     */
+    public function getSubtitle()
+    {
+        if (isset($this->data['subtitle'])) {
+            return $this->data['subtitle'];
+        }
+
+        $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)');
+
+        if (!$subtitle) {
+            $subtitle = null;
+        }
+
+        $this->data['subtitle'] = $subtitle;
+
+        return $this->data['subtitle'];
+    }
+
+    /**
+     * Get the entry summary
+     *
+     * @return string
+     */
+    public function getSummary()
+    {
+        if (isset($this->data['summary'])) {
+            return $this->data['summary'];
+        }
+
+        $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)');
+
+        if (!$summary) {
+            $summary = null;
+        }
+
+        $this->data['summary'] = $summary;
+
+        return $this->data['summary'];
+    }
+
+    /**
+     * Register iTunes namespace
+     *
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Podcast/Feed.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Podcast/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..9fb80de540c7d1c2b76296aa563e9298b16f47a4
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Podcast/Feed.php
@@ -0,0 +1,276 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Podcast;
+
+use DOMText;
+use Zend\Feed\Reader\Extension;
+
+/**
+*/
+class Feed extends Extension\AbstractFeed
+{
+    /**
+     * Get the entry author
+     *
+     * @return string
+     */
+    public function getCastAuthor()
+    {
+        if (isset($this->data['author'])) {
+            return $this->data['author'];
+        }
+
+        $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)');
+
+        if (!$author) {
+            $author = null;
+        }
+
+        $this->data['author'] = $author;
+
+        return $this->data['author'];
+    }
+
+    /**
+     * Get the entry block
+     *
+     * @return string
+     */
+    public function getBlock()
+    {
+        if (isset($this->data['block'])) {
+            return $this->data['block'];
+        }
+
+        $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)');
+
+        if (!$block) {
+            $block = null;
+        }
+
+        $this->data['block'] = $block;
+
+        return $this->data['block'];
+    }
+
+    /**
+     * Get the entry category
+     *
+     * @return array|null
+     */
+    public function getItunesCategories()
+    {
+        if (isset($this->data['categories'])) {
+            return $this->data['categories'];
+        }
+
+        $categoryList = $this->xpath->query($this->getXpathPrefix() . '/itunes:category');
+
+        $categories = array();
+
+        if ($categoryList->length > 0) {
+            foreach ($categoryList as $node) {
+                $children = null;
+
+                if ($node->childNodes->length > 0) {
+                    $children = array();
+
+                    foreach ($node->childNodes as $childNode) {
+                        if (!($childNode instanceof DOMText)) {
+                            $children[$childNode->getAttribute('text')] = null;
+                        }
+                    }
+                }
+
+                $categories[$node->getAttribute('text')] = $children;
+            }
+        }
+
+        if (!$categories) {
+            $categories = null;
+        }
+
+        $this->data['categories'] = $categories;
+
+        return $this->data['categories'];
+    }
+
+    /**
+     * Get the entry explicit
+     *
+     * @return string
+     */
+    public function getExplicit()
+    {
+        if (isset($this->data['explicit'])) {
+            return $this->data['explicit'];
+        }
+
+        $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)');
+
+        if (!$explicit) {
+            $explicit = null;
+        }
+
+        $this->data['explicit'] = $explicit;
+
+        return $this->data['explicit'];
+    }
+
+    /**
+     * Get the entry image
+     *
+     * @return string
+     */
+    public function getItunesImage()
+    {
+        if (isset($this->data['image'])) {
+            return $this->data['image'];
+        }
+
+        $image = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:image/@href)');
+
+        if (!$image) {
+            $image = null;
+        }
+
+        $this->data['image'] = $image;
+
+        return $this->data['image'];
+    }
+
+    /**
+     * Get the entry keywords
+     *
+     * @return string
+     */
+    public function getKeywords()
+    {
+        if (isset($this->data['keywords'])) {
+            return $this->data['keywords'];
+        }
+
+        $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)');
+
+        if (!$keywords) {
+            $keywords = null;
+        }
+
+        $this->data['keywords'] = $keywords;
+
+        return $this->data['keywords'];
+    }
+
+    /**
+     * Get the entry's new feed url
+     *
+     * @return string
+     */
+    public function getNewFeedUrl()
+    {
+        if (isset($this->data['new-feed-url'])) {
+            return $this->data['new-feed-url'];
+        }
+
+        $newFeedUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:new-feed-url)');
+
+        if (!$newFeedUrl) {
+            $newFeedUrl = null;
+        }
+
+        $this->data['new-feed-url'] = $newFeedUrl;
+
+        return $this->data['new-feed-url'];
+    }
+
+    /**
+     * Get the entry owner
+     *
+     * @return string
+     */
+    public function getOwner()
+    {
+        if (isset($this->data['owner'])) {
+            return $this->data['owner'];
+        }
+
+        $owner = null;
+
+        $email = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:email)');
+        $name  = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:name)');
+
+        if (!empty($email)) {
+            $owner = $email . (empty($name) ? '' : ' (' . $name . ')');
+        } elseif (!empty($name)) {
+            $owner = $name;
+        }
+
+        if (!$owner) {
+            $owner = null;
+        }
+
+        $this->data['owner'] = $owner;
+
+        return $this->data['owner'];
+    }
+
+    /**
+     * Get the entry subtitle
+     *
+     * @return string
+     */
+    public function getSubtitle()
+    {
+        if (isset($this->data['subtitle'])) {
+            return $this->data['subtitle'];
+        }
+
+        $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)');
+
+        if (!$subtitle) {
+            $subtitle = null;
+        }
+
+        $this->data['subtitle'] = $subtitle;
+
+        return $this->data['subtitle'];
+    }
+
+    /**
+     * Get the entry summary
+     *
+     * @return string
+     */
+    public function getSummary()
+    {
+        if (isset($this->data['summary'])) {
+            return $this->data['summary'];
+        }
+
+        $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)');
+
+        if (!$summary) {
+            $summary = null;
+        }
+
+        $this->data['summary'] = $summary;
+
+        return $this->data['summary'];
+    }
+
+    /**
+     * Register iTunes namespace
+     *
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Slash/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Slash/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..786d894ea4a1db78e370fb4f58f6df34fb1aa2fc
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Slash/Entry.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Slash;
+
+use Zend\Feed\Reader\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractEntry
+{
+    /**
+     * Get the entry section
+     *
+     * @return string|null
+     */
+    public function getSection()
+    {
+        return $this->getData('section');
+    }
+
+    /**
+     * Get the entry department
+     *
+     * @return string|null
+     */
+    public function getDepartment()
+    {
+        return $this->getData('department');
+    }
+
+    /**
+     * Get the entry hit_parade
+     *
+     * @return array
+     */
+    public function getHitParade()
+    {
+        $name = 'hit_parade';
+
+        if (isset($this->data[$name])) {
+            return $this->data[$name];
+        }
+
+        $stringParade = $this->getData($name);
+        $hitParade    = array();
+
+        if (!empty($stringParade)) {
+            $stringParade = explode(',', $stringParade);
+
+            foreach ($stringParade as $hit) {
+                $hitParade[] = $hit + 0; //cast to integer
+            }
+        }
+
+        $this->data[$name] = $hitParade;
+        return $hitParade;
+    }
+
+    /**
+     * Get the entry comments
+     *
+     * @return int
+     */
+    public function getCommentCount()
+    {
+        $name = 'comments';
+
+        if (isset($this->data[$name])) {
+            return $this->data[$name];
+        }
+
+        $comments = $this->getData($name, 'string');
+
+        if (!$comments) {
+            $this->data[$name] = null;
+            return $this->data[$name];
+        }
+
+        return $comments;
+    }
+
+    /**
+     * Get the entry data specified by name
+     * @param string $name
+     * @param string $type
+     *
+     * @return mixed|null
+     */
+    protected function getData($name, $type = 'string')
+    {
+        if (array_key_exists($name, $this->data)) {
+            return $this->data[$name];
+        }
+
+        $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/slash10:' . $name . ')');
+
+        if (!$data) {
+            $data = null;
+        }
+
+        $this->data[$name] = $data;
+
+        return $data;
+    }
+
+    /**
+     * Register Slash namespaces
+     *
+     * @return void
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('slash10', 'http://purl.org/rss/1.0/modules/slash/');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Syndication/Feed.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Syndication/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..09f12ddea251b1600d5c6775d698b0cd1926a52d
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Syndication/Feed.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Syndication;
+
+use DateTime;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Extension;
+
+class Feed extends Extension\AbstractFeed
+{
+    /**
+     * Get update period
+     *
+     * @return string
+     * @throws Reader\Exception\InvalidArgumentException
+     */
+    public function getUpdatePeriod()
+    {
+        $name = 'updatePeriod';
+        $period = $this->getData($name);
+
+        if ($period === null) {
+            $this->data[$name] = 'daily';
+            return 'daily'; //Default specified by spec
+        }
+
+        switch ($period) {
+            case 'hourly':
+            case 'daily':
+            case 'weekly':
+            case 'yearly':
+                return $period;
+            default:
+                throw new Reader\Exception\InvalidArgumentException("Feed specified invalid update period: '$period'."
+                    .  " Must be one of hourly, daily, weekly or yearly"
+                );
+        }
+    }
+
+    /**
+     * Get update frequency
+     *
+     * @return int
+     */
+    public function getUpdateFrequency()
+    {
+        $name = 'updateFrequency';
+        $freq = $this->getData($name, 'number');
+
+        if (!$freq || $freq < 1) {
+            $this->data[$name] = 1;
+            return 1;
+        }
+
+        return $freq;
+    }
+
+    /**
+     * Get update frequency as ticks
+     *
+     * @return int
+     */
+    public function getUpdateFrequencyAsTicks()
+    {
+        $name = 'updateFrequency';
+        $freq = $this->getData($name, 'number');
+
+        if (!$freq || $freq < 1) {
+            $this->data[$name] = 1;
+            $freq = 1;
+        }
+
+        $period = $this->getUpdatePeriod();
+        $ticks = 1;
+
+        switch ($period) {
+            case 'yearly':
+                $ticks *= 52; //TODO: fix generalisation, how?
+                // no break
+            case 'weekly':
+                $ticks *= 7;
+                // no break
+            case 'daily':
+                $ticks *= 24;
+                // no break
+            case 'hourly':
+                $ticks *= 3600;
+                break;
+            default: //Never arrive here, exception thrown in getPeriod()
+                break;
+        }
+
+        return $ticks / $freq;
+    }
+
+    /**
+     * Get update base
+     *
+     * @return DateTime|null
+     */
+    public function getUpdateBase()
+    {
+        $updateBase = $this->getData('updateBase');
+        $date = null;
+        if ($updateBase) {
+            $date = DateTime::createFromFormat(DateTime::W3C, $updateBase);
+        }
+        return $date;
+    }
+
+    /**
+     * Get the entry data specified by name
+     *
+     * @param string $name
+     * @param string $type
+     * @return mixed|null
+     */
+    private function getData($name, $type = 'string')
+    {
+        if (array_key_exists($name, $this->data)) {
+            return $this->data[$name];
+        }
+
+        $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/syn10:' . $name . ')');
+
+        if (!$data) {
+            $data = null;
+        }
+
+        $this->data[$name] = $data;
+
+        return $data;
+    }
+
+    /**
+     * Register Syndication namespaces
+     *
+     * @return void
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('syn10', 'http://purl.org/rss/1.0/modules/syndication/');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/Thread/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Thread/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..e5de5bb1cd94a0ea0dd3b3a7ab634c9dbc01b644
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/Thread/Entry.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\Thread;
+
+use Zend\Feed\Reader\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractEntry
+{
+    /**
+     * Get the "in-reply-to" value
+     *
+     * @return string
+     */
+    public function getInReplyTo()
+    {
+        // TODO: to be implemented
+    }
+
+    // TODO: Implement "replies" and "updated" constructs from standard
+
+    /**
+     * Get the total number of threaded responses (i.e comments)
+     *
+     * @return int|null
+     */
+    public function getCommentCount()
+    {
+        return $this->getData('total');
+    }
+
+    /**
+     * Get the entry data specified by name
+     *
+     * @param  string $name
+     * @return mixed|null
+     */
+    protected function getData($name)
+    {
+        if (array_key_exists($name, $this->data)) {
+            return $this->data[$name];
+        }
+
+        $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/thread10:' . $name . ')');
+
+        if (!$data) {
+            $data = null;
+        }
+
+        $this->data[$name] = $data;
+
+        return $data;
+    }
+
+    /**
+     * Register Atom Thread Extension 1.0 namespace
+     *
+     * @return void
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Extension/WellFormedWeb/Entry.php b/core/vendor/zendframework/zend-feed/src/Reader/Extension/WellFormedWeb/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..42fafb4aa4a429330035f979b84fcb08929a6cf0
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Extension/WellFormedWeb/Entry.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Extension\WellFormedWeb;
+
+use Zend\Feed\Reader\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractEntry
+{
+    /**
+     * Get the entry comment Uri
+     *
+     * @return string|null
+     */
+    public function getCommentFeedLink()
+    {
+        $name = 'commentRss';
+        if (array_key_exists($name, $this->data)) {
+            return $this->data[$name];
+        }
+
+        $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/wfw:' . $name . ')');
+
+        if (!$data) {
+            $data = null;
+        }
+
+        $this->data[$name] = $data;
+
+        return $data;
+    }
+
+    /**
+     * Register Slash namespaces
+     *
+     * @return void
+     */
+    protected function registerNamespaces()
+    {
+        $this->xpath->registerNamespace('wfw', 'http://wellformedweb.org/CommentAPI/');
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/ExtensionManager.php b/core/vendor/zendframework/zend-feed/src/Reader/ExtensionManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf694c8e273051639094e1ef0960a0cfe8a0f558
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/ExtensionManager.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+/**
+ * Default implementation of ExtensionManagerInterface
+ *
+ * Decorator of ExtensionPluginManager.
+ */
+class ExtensionManager implements ExtensionManagerInterface
+{
+    protected $pluginManager;
+
+    /**
+     * Constructor
+     *
+     * Seeds the extension manager with a plugin manager; if none provided,
+     * creates an instance.
+     *
+     * @param  null|ExtensionPluginManager $pluginManager
+     */
+    public function __construct(ExtensionPluginManager $pluginManager = null)
+    {
+        if (null === $pluginManager) {
+            $pluginManager = new ExtensionPluginManager();
+        }
+        $this->pluginManager = $pluginManager;
+    }
+
+    /**
+     * Method overloading
+     *
+     * Proxy to composed ExtensionPluginManager instance.
+     *
+     * @param  string $method
+     * @param  array $args
+     * @return mixed
+     * @throws Exception\BadMethodCallException
+     */
+    public function __call($method, $args)
+    {
+        if (!method_exists($this->pluginManager, $method)) {
+            throw new Exception\BadMethodCallException(sprintf(
+                'Method by name of %s does not exist in %s',
+                $method,
+                __CLASS__
+            ));
+        }
+        return call_user_func_array(array($this->pluginManager, $method), $args);
+    }
+
+    /**
+     * Get the named extension
+     *
+     * @param  string $name
+     * @return Extension\AbstractEntry|Extension\AbstractFeed
+     */
+    public function get($name)
+    {
+        return $this->pluginManager->get($name);
+    }
+
+    /**
+     * Do we have the named extension?
+     *
+     * @param  string $name
+     * @return bool
+     */
+    public function has($name)
+    {
+        return $this->pluginManager->has($name);
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/ExtensionManagerInterface.php b/core/vendor/zendframework/zend-feed/src/Reader/ExtensionManagerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..70ec37d4c07024ef716a971de0ba43400359917c
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/ExtensionManagerInterface.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+interface ExtensionManagerInterface
+{
+    /**
+     * Do we have the extension?
+     *
+     * @param  string $extension
+     * @return bool
+     */
+    public function has($extension);
+
+    /**
+     * Retrieve the extension
+     *
+     * @param  string $extension
+     * @return mixed
+     */
+    public function get($extension);
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/ExtensionPluginManager.php b/core/vendor/zendframework/zend-feed/src/Reader/ExtensionPluginManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e3308c29acbec52731bdd2d1d9973ed1da7752f
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/ExtensionPluginManager.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+use Zend\ServiceManager\AbstractPluginManager;
+
+/**
+ * Plugin manager implementation for feed reader extensions based on the
+ * AbstractPluginManager.
+ *
+ * Validation checks that we have an Extension\AbstractEntry or
+ * Extension\AbstractFeed.
+ */
+class ExtensionPluginManager extends AbstractPluginManager
+{
+    /**
+     * Default set of extension classes
+     *
+     * @var array
+     */
+    protected $invokableClasses = array(
+        'atomentry'            => 'Zend\Feed\Reader\Extension\Atom\Entry',
+        'atomfeed'             => 'Zend\Feed\Reader\Extension\Atom\Feed',
+        'contententry'         => 'Zend\Feed\Reader\Extension\Content\Entry',
+        'creativecommonsentry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry',
+        'creativecommonsfeed'  => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed',
+        'dublincoreentry'      => 'Zend\Feed\Reader\Extension\DublinCore\Entry',
+        'dublincorefeed'       => 'Zend\Feed\Reader\Extension\DublinCore\Feed',
+        'podcastentry'         => 'Zend\Feed\Reader\Extension\Podcast\Entry',
+        'podcastfeed'          => 'Zend\Feed\Reader\Extension\Podcast\Feed',
+        'slashentry'           => 'Zend\Feed\Reader\Extension\Slash\Entry',
+        'syndicationfeed'      => 'Zend\Feed\Reader\Extension\Syndication\Feed',
+        'threadentry'          => 'Zend\Feed\Reader\Extension\Thread\Entry',
+        'wellformedwebentry'   => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry',
+    );
+
+    /**
+     * Do not share instances
+     *
+     * @var bool
+     */
+    protected $shareByDefault = false;
+
+    /**
+     * Validate the plugin
+     *
+     * Checks that the extension loaded is of a valid type.
+     *
+     * @param  mixed $plugin
+     * @return void
+     * @throws Exception\InvalidArgumentException if invalid
+     */
+    public function validatePlugin($plugin)
+    {
+        if ($plugin instanceof Extension\AbstractEntry
+            || $plugin instanceof Extension\AbstractFeed
+        ) {
+            // we're okay
+            return;
+        }
+
+        throw new Exception\InvalidArgumentException(sprintf(
+            'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
+            . 'or %s\Extension\AbstractEntry',
+            (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
+            __NAMESPACE__,
+            __NAMESPACE__
+        ));
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Feed/AbstractFeed.php b/core/vendor/zendframework/zend-feed/src/Reader/Feed/AbstractFeed.php
new file mode 100644
index 0000000000000000000000000000000000000000..9814967a62e955765f6ec1990d89811fe12bd625
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Feed/AbstractFeed.php
@@ -0,0 +1,307 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Feed;
+
+use DOMDocument;
+use DOMElement;
+use DOMXPath;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Exception;
+
+/**
+*/
+abstract class AbstractFeed implements FeedInterface
+{
+    /**
+     * Parsed feed data
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Parsed feed data in the shape of a DOMDocument
+     *
+     * @var DOMDocument
+     */
+    protected $domDocument = null;
+
+    /**
+     * An array of parsed feed entries
+     *
+     * @var array
+     */
+    protected $entries = array();
+
+    /**
+     * A pointer for the iterator to keep track of the entries array
+     *
+     * @var int
+     */
+    protected $entriesKey = 0;
+
+    /**
+     * The base XPath query used to retrieve feed data
+     *
+     * @var DOMXPath
+     */
+    protected $xpath = null;
+
+    /**
+     * Array of loaded extensions
+     *
+     * @var array
+     */
+    protected $extensions = array();
+
+    /**
+     * Original Source URI (set if imported from a URI)
+     *
+     * @var string
+     */
+    protected $originalSourceUri = null;
+
+    /**
+     * Constructor
+     *
+     * @param DOMDocument $domDocument The DOM object for the feed's XML
+     * @param string $type Feed type
+     */
+    public function __construct(DOMDocument $domDocument, $type = null)
+    {
+        $this->domDocument = $domDocument;
+        $this->xpath = new DOMXPath($this->domDocument);
+
+        if ($type !== null) {
+            $this->data['type'] = $type;
+        } else {
+            $this->data['type'] = Reader\Reader::detectType($this->domDocument);
+        }
+        $this->registerNamespaces();
+        $this->indexEntries();
+        $this->loadExtensions();
+    }
+
+    /**
+     * Set an original source URI for the feed being parsed. This value
+     * is returned from getFeedLink() method if the feed does not carry
+     * a self-referencing URI.
+     *
+     * @param string $uri
+     */
+    public function setOriginalSourceUri($uri)
+    {
+        $this->originalSourceUri = $uri;
+    }
+
+    /**
+     * Get an original source URI for the feed being parsed. Returns null if
+     * unset or the feed was not imported from a URI.
+     *
+     * @return string|null
+     */
+    public function getOriginalSourceUri()
+    {
+        return $this->originalSourceUri;
+    }
+
+    /**
+     * Get the number of feed entries.
+     * Required by the Iterator interface.
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->entries);
+    }
+
+    /**
+     * Return the current entry
+     *
+     * @return \Zend\Feed\Reader\Entry\EntryInterface
+     */
+    public function current()
+    {
+        if (substr($this->getType(), 0, 3) == 'rss') {
+            $reader = new Reader\Entry\Rss($this->entries[$this->key()], $this->key(), $this->getType());
+        } else {
+            $reader = new Reader\Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType());
+        }
+
+        $reader->setXpath($this->xpath);
+
+        return $reader;
+    }
+
+    /**
+     * Get the DOM
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument()
+    {
+        return $this->domDocument;
+    }
+
+    /**
+     * Get the Feed's encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        $assumed = $this->getDomDocument()->encoding;
+        if (empty($assumed)) {
+            $assumed = 'UTF-8';
+        }
+        return $assumed;
+    }
+
+    /**
+     * Get feed as xml
+     *
+     * @return string
+     */
+    public function saveXml()
+    {
+        return $this->getDomDocument()->saveXml();
+    }
+
+    /**
+     * Get the DOMElement representing the items/feed element
+     *
+     * @return DOMElement
+     */
+    public function getElement()
+    {
+        return $this->getDomDocument()->documentElement;
+    }
+
+    /**
+     * Get the DOMXPath object for this feed
+     *
+     * @return DOMXPath
+     */
+    public function getXpath()
+    {
+        return $this->xpath;
+    }
+
+    /**
+     * Get the feed type
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->data['type'];
+    }
+
+    /**
+     * Return the current feed key
+     *
+     * @return int
+     */
+    public function key()
+    {
+        return $this->entriesKey;
+    }
+
+    /**
+     * Move the feed pointer forward
+     *
+     */
+    public function next()
+    {
+        ++$this->entriesKey;
+    }
+
+    /**
+     * Reset the pointer in the feed object
+     *
+     */
+    public function rewind()
+    {
+        $this->entriesKey = 0;
+    }
+
+    /**
+     * Check to see if the iterator is still valid
+     *
+     * @return bool
+     */
+    public function valid()
+    {
+        return 0 <= $this->entriesKey && $this->entriesKey < $this->count();
+    }
+
+    public function getExtensions()
+    {
+        return $this->extensions;
+    }
+
+    public function __call($method, $args)
+    {
+        foreach ($this->extensions as $extension) {
+            if (method_exists($extension, $method)) {
+                return call_user_func_array(array($extension, $method), $args);
+            }
+        }
+        throw new Exception\BadMethodCallException('Method: ' . $method
+        . 'does not exist and could not be located on a registered Extension');
+    }
+
+    /**
+     * Return an Extension object with the matching name (postfixed with _Feed)
+     *
+     * @param string $name
+     * @return \Zend\Feed\Reader\Extension\AbstractFeed
+     */
+    public function getExtension($name)
+    {
+        if (array_key_exists($name . '\\Feed', $this->extensions)) {
+            return $this->extensions[$name . '\\Feed'];
+        }
+        return;
+    }
+
+    protected function loadExtensions()
+    {
+        $all     = Reader\Reader::getExtensions();
+        $manager = Reader\Reader::getExtensionManager();
+        $feed    = $all['feed'];
+        foreach ($feed as $extension) {
+            if (in_array($extension, $all['core'])) {
+                continue;
+            }
+            if (!$manager->has($extension)) {
+                throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; cannot find class', $extension));
+            }
+            $plugin = $manager->get($extension);
+            $plugin->setDomDocument($this->getDomDocument());
+            $plugin->setType($this->data['type']);
+            $plugin->setXpath($this->xpath);
+            $this->extensions[$extension] = $plugin;
+        }
+    }
+
+    /**
+     * Read all entries to the internal entries array
+     *
+     */
+    abstract protected function indexEntries();
+
+    /**
+     * Register the default namespaces for the current feed format
+     *
+     */
+    abstract protected function registerNamespaces();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Feed/Atom.php b/core/vendor/zendframework/zend-feed/src/Reader/Feed/Atom.php
new file mode 100644
index 0000000000000000000000000000000000000000..37064701c7cc18f9fe71e514607cec8c7dd9eb33
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Feed/Atom.php
@@ -0,0 +1,408 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Feed;
+
+use DOMDocument;
+use Zend\Feed\Reader;
+
+/**
+*/
+class Atom extends AbstractFeed
+{
+    /**
+     * Constructor
+     *
+     * @param  DOMDocument $dom
+     * @param  string $type
+     */
+    public function __construct(DOMDocument $dom, $type = null)
+    {
+        parent::__construct($dom, $type);
+        $manager = Reader\Reader::getExtensionManager();
+
+        $atomFeed = $manager->get('Atom\Feed');
+        $atomFeed->setDomDocument($dom);
+        $atomFeed->setType($this->data['type']);
+        $atomFeed->setXpath($this->xpath);
+        $this->extensions['Atom\\Feed'] = $atomFeed;
+
+        $atomFeed = $manager->get('DublinCore\Feed');
+        $atomFeed->setDomDocument($dom);
+        $atomFeed->setType($this->data['type']);
+        $atomFeed->setXpath($this->xpath);
+        $this->extensions['DublinCore\\Feed'] = $atomFeed;
+
+        foreach ($this->extensions as $extension) {
+            $extension->setXpathPrefix('/atom:feed');
+        }
+    }
+
+    /**
+     * Get a single author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $authors = $this->getExtension('Atom')->getAuthors();
+
+        $this->data['authors'] = $authors;
+
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the copyright entry
+     *
+     * @return string|null
+     */
+    public function getCopyright()
+    {
+        if (array_key_exists('copyright', $this->data)) {
+            return $this->data['copyright'];
+        }
+
+        $copyright = $this->getExtension('Atom')->getCopyright();
+
+        if (!$copyright) {
+            $copyright = null;
+        }
+
+        $this->data['copyright'] = $copyright;
+
+        return $this->data['copyright'];
+    }
+
+    /**
+     * Get the feed creation date
+     *
+     * @return string|null
+     */
+    public function getDateCreated()
+    {
+        if (array_key_exists('datecreated', $this->data)) {
+            return $this->data['datecreated'];
+        }
+
+        $dateCreated = $this->getExtension('Atom')->getDateCreated();
+
+        if (!$dateCreated) {
+            $dateCreated = null;
+        }
+
+        $this->data['datecreated'] = $dateCreated;
+
+        return $this->data['datecreated'];
+    }
+
+    /**
+     * Get the feed modification date
+     *
+     * @return string|null
+     */
+    public function getDateModified()
+    {
+        if (array_key_exists('datemodified', $this->data)) {
+            return $this->data['datemodified'];
+        }
+
+        $dateModified = $this->getExtension('Atom')->getDateModified();
+
+        if (!$dateModified) {
+            $dateModified = null;
+        }
+
+        $this->data['datemodified'] = $dateModified;
+
+        return $this->data['datemodified'];
+    }
+
+    /**
+     * Get the feed lastBuild date. This is not implemented in Atom.
+     *
+     * @return string|null
+     */
+    public function getLastBuildDate()
+    {
+        return;
+    }
+
+    /**
+     * Get the feed description
+     *
+     * @return string|null
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        $description = $this->getExtension('Atom')->getDescription();
+
+        if (!$description) {
+            $description = null;
+        }
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the feed generator entry
+     *
+     * @return string|null
+     */
+    public function getGenerator()
+    {
+        if (array_key_exists('generator', $this->data)) {
+            return $this->data['generator'];
+        }
+
+        $generator = $this->getExtension('Atom')->getGenerator();
+
+        $this->data['generator'] = $generator;
+
+        return $this->data['generator'];
+    }
+
+    /**
+     * Get the feed ID
+     *
+     * @return string|null
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = $this->getExtension('Atom')->getId();
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get the feed language
+     *
+     * @return string|null
+     */
+    public function getLanguage()
+    {
+        if (array_key_exists('language', $this->data)) {
+            return $this->data['language'];
+        }
+
+        $language = $this->getExtension('Atom')->getLanguage();
+
+        if (!$language) {
+            $language = $this->xpath->evaluate('string(//@xml:lang[1])');
+        }
+
+        if (!$language) {
+            $language = null;
+        }
+
+        $this->data['language'] = $language;
+
+        return $this->data['language'];
+    }
+
+    /**
+     * Get a link to the source website
+     *
+     * @return string|null
+     */
+    public function getBaseUrl()
+    {
+        if (array_key_exists('baseUrl', $this->data)) {
+            return $this->data['baseUrl'];
+        }
+
+        $baseUrl = $this->getExtension('Atom')->getBaseUrl();
+
+        $this->data['baseUrl'] = $baseUrl;
+
+        return $this->data['baseUrl'];
+    }
+
+    /**
+     * Get a link to the source website
+     *
+     * @return string|null
+     */
+    public function getLink()
+    {
+        if (array_key_exists('link', $this->data)) {
+            return $this->data['link'];
+        }
+
+        $link = $this->getExtension('Atom')->getLink();
+
+        $this->data['link'] = $link;
+
+        return $this->data['link'];
+    }
+
+    /**
+     * Get feed image data
+     *
+     * @return array|null
+     */
+    public function getImage()
+    {
+        if (array_key_exists('image', $this->data)) {
+            return $this->data['image'];
+        }
+
+        $link = $this->getExtension('Atom')->getImage();
+
+        $this->data['image'] = $link;
+
+        return $this->data['image'];
+    }
+
+    /**
+     * Get a link to the feed's XML Url
+     *
+     * @return string|null
+     */
+    public function getFeedLink()
+    {
+        if (array_key_exists('feedlink', $this->data)) {
+            return $this->data['feedlink'];
+        }
+
+        $link = $this->getExtension('Atom')->getFeedLink();
+
+        if ($link === null || empty($link)) {
+            $link = $this->getOriginalSourceUri();
+        }
+
+        $this->data['feedlink'] = $link;
+
+        return $this->data['feedlink'];
+    }
+
+    /**
+     * Get the feed title
+     *
+     * @return string|null
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        $title = $this->getExtension('Atom')->getTitle();
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     * Get an array of any supported Pusubhubbub endpoints
+     *
+     * @return array|null
+     */
+    public function getHubs()
+    {
+        if (array_key_exists('hubs', $this->data)) {
+            return $this->data['hubs'];
+        }
+
+        $hubs = $this->getExtension('Atom')->getHubs();
+
+        $this->data['hubs'] = $hubs;
+
+        return $this->data['hubs'];
+    }
+
+    /**
+     * Get all categories
+     *
+     * @return Reader\Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        $categoryCollection = $this->getExtension('Atom')->getCategories();
+
+        if (count($categoryCollection) == 0) {
+            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
+        }
+
+        $this->data['categories'] = $categoryCollection;
+
+        return $this->data['categories'];
+    }
+
+    /**
+     * Read all entries to the internal entries array
+     *
+     * @return void
+     */
+    protected function indexEntries()
+    {
+        if ($this->getType() == Reader\Reader::TYPE_ATOM_10 ||
+            $this->getType() == Reader\Reader::TYPE_ATOM_03) {
+            $entries = $this->xpath->evaluate('//atom:entry');
+
+            foreach ($entries as $index => $entry) {
+                $this->entries[$index] = $entry;
+            }
+        }
+    }
+
+    /**
+     * Register the default namespaces for the current feed format
+     *
+     */
+    protected function registerNamespaces()
+    {
+        switch ($this->data['type']) {
+            case Reader\Reader::TYPE_ATOM_03:
+                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03);
+                break;
+            case Reader\Reader::TYPE_ATOM_10:
+            default:
+                $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Feed/Atom/Source.php b/core/vendor/zendframework/zend-feed/src/Reader/Feed/Atom/Source.php
new file mode 100644
index 0000000000000000000000000000000000000000..2590de655571f488ee9a3ad07f462d581eedc59f
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Feed/Atom/Source.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Feed\Atom;
+
+use DOMElement;
+use DOMXPath;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Feed;
+
+/**
+*/
+class Source extends Feed\Atom
+{
+    /**
+     * Constructor: Create a Source object which is largely just a normal
+     * Zend\Feed\Reader\AbstractFeed object only designed to retrieve feed level
+     * metadata from an Atom entry's source element.
+     *
+     * @param DOMElement $source
+     * @param string $xpathPrefix Passed from parent Entry object
+     * @param string $type Nearly always Atom 1.0
+     */
+    public function __construct(DOMElement $source, $xpathPrefix, $type = Reader\Reader::TYPE_ATOM_10)
+    {
+        $this->domDocument = $source->ownerDocument;
+        $this->xpath = new DOMXPath($this->domDocument);
+        $this->data['type'] = $type;
+        $this->registerNamespaces();
+        $this->loadExtensions();
+
+        $manager = Reader\Reader::getExtensionManager();
+        $extensions = array('Atom\Feed', 'DublinCore\Feed');
+
+        foreach ($extensions as $name) {
+            $extension = $manager->get($name);
+            $extension->setDomDocument($this->domDocument);
+            $extension->setType($this->data['type']);
+            $extension->setXpath($this->xpath);
+            $this->extensions[$name] = $extension;
+        }
+
+        foreach ($this->extensions as $extension) {
+            $extension->setXpathPrefix(rtrim($xpathPrefix, '/') . '/atom:source');
+        }
+    }
+
+    /**
+     * Since this is not an Entry carrier but a vehicle for Feed metadata, any
+     * applicable Entry methods are stubbed out and do nothing.
+     */
+
+    /**
+     * @return void
+     */
+    public function count()
+    {
+    }
+
+    /**
+     * @return void
+     */
+    public function current()
+    {
+    }
+
+    /**
+     * @return void
+     */
+    public function key()
+    {
+    }
+
+    /**
+     * @return void
+     */
+    public function next()
+    {
+    }
+
+    /**
+     * @return void
+     */
+    public function rewind()
+    {
+    }
+
+    /**
+     * @return void
+     */
+    public function valid()
+    {
+    }
+
+    /**
+     * @return void
+     */
+    protected function indexEntries()
+    {
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Feed/FeedInterface.php b/core/vendor/zendframework/zend-feed/src/Reader/Feed/FeedInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..441ba9269c553f19019a87ab47ec5767ab94a2a9
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Feed/FeedInterface.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Feed;
+
+use Countable;
+use Iterator;
+
+/**
+*/
+interface FeedInterface extends Iterator, Countable
+{
+    /**
+     * Get a single author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0);
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors();
+
+    /**
+     * Get the copyright entry
+     *
+     * @return string|null
+     */
+    public function getCopyright();
+
+    /**
+     * Get the feed creation date
+     *
+     * @return string|null
+     */
+    public function getDateCreated();
+
+    /**
+     * Get the feed modification date
+     *
+     * @return string|null
+     */
+    public function getDateModified();
+
+    /**
+     * Get the feed description
+     *
+     * @return string|null
+     */
+    public function getDescription();
+
+    /**
+     * Get the feed generator entry
+     *
+     * @return string|null
+     */
+    public function getGenerator();
+
+    /**
+     * Get the feed ID
+     *
+     * @return string|null
+     */
+    public function getId();
+
+    /**
+     * Get the feed language
+     *
+     * @return string|null
+     */
+    public function getLanguage();
+
+    /**
+     * Get a link to the HTML source
+     *
+     * @return string|null
+     */
+    public function getLink();
+
+    /**
+     * Get a link to the XML feed
+     *
+     * @return string|null
+     */
+    public function getFeedLink();
+
+    /**
+     * Get the feed title
+     *
+     * @return string|null
+     */
+    public function getTitle();
+
+    /**
+     * Get all categories
+     *
+     * @return \Zend\Feed\Reader\Collection\Category
+     */
+    public function getCategories();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Feed/Rss.php b/core/vendor/zendframework/zend-feed/src/Reader/Feed/Rss.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb9f038bccaa369751b9360c9a11ad2454f111f3
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Feed/Rss.php
@@ -0,0 +1,694 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Feed;
+
+use DateTime;
+use DOMDocument;
+use Zend\Feed\Reader;
+use Zend\Feed\Reader\Collection;
+use Zend\Feed\Reader\Exception;
+
+/**
+*/
+class Rss extends AbstractFeed
+{
+    /**
+     * Constructor
+     *
+     * @param  DOMDocument $dom
+     * @param  string $type
+     */
+    public function __construct(DOMDocument $dom, $type = null)
+    {
+        parent::__construct($dom, $type);
+
+        $manager = Reader\Reader::getExtensionManager();
+
+        $feed = $manager->get('DublinCore\Feed');
+        $feed->setDomDocument($dom);
+        $feed->setType($this->data['type']);
+        $feed->setXpath($this->xpath);
+        $this->extensions['DublinCore\Feed'] = $feed;
+
+        $feed = $manager->get('Atom\Feed');
+        $feed->setDomDocument($dom);
+        $feed->setType($this->data['type']);
+        $feed->setXpath($this->xpath);
+        $this->extensions['Atom\Feed'] = $feed;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+            && $this->getType() !== Reader\Reader::TYPE_RSS_090
+        ) {
+            $xpathPrefix = '/rss/channel';
+        } else {
+            $xpathPrefix = '/rdf:RDF/rss:channel';
+        }
+        foreach ($this->extensions as $extension) {
+            $extension->setXpathPrefix($xpathPrefix);
+        }
+    }
+
+    /**
+     * Get a single author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0)
+    {
+        $authors = $this->getAuthors();
+
+        if (isset($authors[$index])) {
+            return $authors[$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (array_key_exists('authors', $this->data)) {
+            return $this->data['authors'];
+        }
+
+        $authors = array();
+        $authorsDc = $this->getExtension('DublinCore')->getAuthors();
+        if (!empty($authorsDc)) {
+            foreach ($authorsDc as $author) {
+                $authors[] = array(
+                    'name' => $author['name']
+                );
+            }
+        }
+
+        /**
+         * Technically RSS doesn't specific author element use at the feed level
+         * but it's supported on a "just in case" basis.
+         */
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10
+        && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $list = $this->xpath->query('//author');
+        } else {
+            $list = $this->xpath->query('//rss:author');
+        }
+        if ($list->length) {
+            foreach ($list as $author) {
+                $string = trim($author->nodeValue);
+                $data = array();
+                // Pretty rough parsing - but it's a catchall
+                if (preg_match("/^.*@[^ ]*/", $string, $matches)) {
+                    $data['email'] = trim($matches[0]);
+                    if (preg_match("/\((.*)\)$/", $string, $matches)) {
+                        $data['name'] = $matches[1];
+                    }
+                    $authors[] = $data;
+                }
+            }
+        }
+
+        if (count($authors) == 0) {
+            $authors = $this->getExtension('Atom')->getAuthors();
+        } else {
+            $authors = new Reader\Collection\Author(
+                Reader\Reader::arrayUnique($authors)
+            );
+        }
+
+        if (count($authors) == 0) {
+            $authors = null;
+        }
+
+        $this->data['authors'] = $authors;
+
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the copyright entry
+     *
+     * @return string|null
+     */
+    public function getCopyright()
+    {
+        if (array_key_exists('copyright', $this->data)) {
+            return $this->data['copyright'];
+        }
+
+        $copyright = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $copyright = $this->xpath->evaluate('string(/rss/channel/copyright)');
+        }
+
+        if (!$copyright && $this->getExtension('DublinCore') !== null) {
+            $copyright = $this->getExtension('DublinCore')->getCopyright();
+        }
+
+        if (empty($copyright)) {
+            $copyright = $this->getExtension('Atom')->getCopyright();
+        }
+
+        if (!$copyright) {
+            $copyright = null;
+        }
+
+        $this->data['copyright'] = $copyright;
+
+        return $this->data['copyright'];
+    }
+
+    /**
+     * Get the feed creation date
+     *
+     * @return string|null
+     */
+    public function getDateCreated()
+    {
+        return $this->getDateModified();
+    }
+
+    /**
+     * Get the feed modification date
+     *
+     * @return DateTime
+     * @throws Exception\RuntimeException
+     */
+    public function getDateModified()
+    {
+        if (array_key_exists('datemodified', $this->data)) {
+            return $this->data['datemodified'];
+        }
+
+        $date = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $dateModified = $this->xpath->evaluate('string(/rss/channel/pubDate)');
+            if (!$dateModified) {
+                $dateModified = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)');
+            }
+            if ($dateModified) {
+                $dateModifiedParsed = strtotime($dateModified);
+                if ($dateModifiedParsed) {
+                    $date = new DateTime('@' . $dateModifiedParsed);
+                } else {
+                    $dateStandards = array(DateTime::RSS, DateTime::RFC822,
+                                           DateTime::RFC2822, null);
+                    foreach ($dateStandards as $standard) {
+                        try {
+                            $date = DateTime::createFromFormat($standard, $dateModified);
+                            break;
+                        } catch (\Exception $e) {
+                            if ($standard == null) {
+                                throw new Exception\RuntimeException(
+                                    'Could not load date due to unrecognised'
+                                    .' format (should follow RFC 822 or 2822):'
+                                    . $e->getMessage(),
+                                    0, $e
+                                );
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if (!$date) {
+            $date = $this->getExtension('DublinCore')->getDate();
+        }
+
+        if (!$date) {
+            $date = $this->getExtension('Atom')->getDateModified();
+        }
+
+        if (!$date) {
+            $date = null;
+        }
+
+        $this->data['datemodified'] = $date;
+
+        return $this->data['datemodified'];
+    }
+
+    /**
+     * Get the feed lastBuild date
+     *
+     * @throws Exception\RuntimeException
+     * @return DateTime
+     */
+    public function getLastBuildDate()
+    {
+        if (array_key_exists('lastBuildDate', $this->data)) {
+            return $this->data['lastBuildDate'];
+        }
+
+        $date = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $lastBuildDate = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)');
+            if ($lastBuildDate) {
+                $lastBuildDateParsed = strtotime($lastBuildDate);
+                if ($lastBuildDateParsed) {
+                    $date = new DateTime('@' . $lastBuildDateParsed);
+                } else {
+                    $dateStandards = array(DateTime::RSS, DateTime::RFC822,
+                                           DateTime::RFC2822, null);
+                    foreach ($dateStandards as $standard) {
+                        try {
+                            $date = DateTime::createFromFormat($standard, $lastBuildDateParsed);
+                            break;
+                        } catch (\Exception $e) {
+                            if ($standard == null) {
+                                throw new Exception\RuntimeException(
+                                    'Could not load date due to unrecognised'
+                                    .' format (should follow RFC 822 or 2822):'
+                                    . $e->getMessage(),
+                                    0, $e
+                                );
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if (!$date) {
+            $date = null;
+        }
+
+        $this->data['lastBuildDate'] = $date;
+
+        return $this->data['lastBuildDate'];
+    }
+
+    /**
+     * Get the feed description
+     *
+     * @return string|null
+     */
+    public function getDescription()
+    {
+        if (array_key_exists('description', $this->data)) {
+            return $this->data['description'];
+        }
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $description = $this->xpath->evaluate('string(/rss/channel/description)');
+        } else {
+            $description = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:description)');
+        }
+
+        if (!$description && $this->getExtension('DublinCore') !== null) {
+            $description = $this->getExtension('DublinCore')->getDescription();
+        }
+
+        if (empty($description)) {
+            $description = $this->getExtension('Atom')->getDescription();
+        }
+
+        if (!$description) {
+            $description = null;
+        }
+
+        $this->data['description'] = $description;
+
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the feed ID
+     *
+     * @return string|null
+     */
+    public function getId()
+    {
+        if (array_key_exists('id', $this->data)) {
+            return $this->data['id'];
+        }
+
+        $id = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $id = $this->xpath->evaluate('string(/rss/channel/guid)');
+        }
+
+        if (!$id && $this->getExtension('DublinCore') !== null) {
+            $id = $this->getExtension('DublinCore')->getId();
+        }
+
+        if (empty($id)) {
+            $id = $this->getExtension('Atom')->getId();
+        }
+
+        if (!$id) {
+            if ($this->getLink()) {
+                $id = $this->getLink();
+            } elseif ($this->getTitle()) {
+                $id = $this->getTitle();
+            } else {
+                $id = null;
+            }
+        }
+
+        $this->data['id'] = $id;
+
+        return $this->data['id'];
+    }
+
+    /**
+     * Get the feed image data
+     *
+     * @return array|null
+     */
+    public function getImage()
+    {
+        if (array_key_exists('image', $this->data)) {
+            return $this->data['image'];
+        }
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $list = $this->xpath->query('/rss/channel/image');
+            $prefix = '/rss/channel/image[1]';
+        } else {
+            $list = $this->xpath->query('/rdf:RDF/rss:channel/rss:image');
+            $prefix = '/rdf:RDF/rss:channel/rss:image[1]';
+        }
+        if ($list->length > 0) {
+            $image = array();
+            $value = $this->xpath->evaluate('string(' . $prefix . '/url)');
+            if ($value) {
+                $image['uri'] = $value;
+            }
+            $value = $this->xpath->evaluate('string(' . $prefix . '/link)');
+            if ($value) {
+                $image['link'] = $value;
+            }
+            $value = $this->xpath->evaluate('string(' . $prefix . '/title)');
+            if ($value) {
+                $image['title'] = $value;
+            }
+            $value = $this->xpath->evaluate('string(' . $prefix . '/height)');
+            if ($value) {
+                $image['height'] = $value;
+            }
+            $value = $this->xpath->evaluate('string(' . $prefix . '/width)');
+            if ($value) {
+                $image['width'] = $value;
+            }
+            $value = $this->xpath->evaluate('string(' . $prefix . '/description)');
+            if ($value) {
+                $image['description'] = $value;
+            }
+        } else {
+            $image = null;
+        }
+
+        $this->data['image'] = $image;
+
+        return $this->data['image'];
+    }
+
+    /**
+     * Get the feed language
+     *
+     * @return string|null
+     */
+    public function getLanguage()
+    {
+        if (array_key_exists('language', $this->data)) {
+            return $this->data['language'];
+        }
+
+        $language = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $language = $this->xpath->evaluate('string(/rss/channel/language)');
+        }
+
+        if (!$language && $this->getExtension('DublinCore') !== null) {
+            $language = $this->getExtension('DublinCore')->getLanguage();
+        }
+
+        if (empty($language)) {
+            $language = $this->getExtension('Atom')->getLanguage();
+        }
+
+        if (!$language) {
+            $language = $this->xpath->evaluate('string(//@xml:lang[1])');
+        }
+
+        if (!$language) {
+            $language = null;
+        }
+
+        $this->data['language'] = $language;
+
+        return $this->data['language'];
+    }
+
+    /**
+     * Get a link to the feed
+     *
+     * @return string|null
+     */
+    public function getLink()
+    {
+        if (array_key_exists('link', $this->data)) {
+            return $this->data['link'];
+        }
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $link = $this->xpath->evaluate('string(/rss/channel/link)');
+        } else {
+            $link = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:link)');
+        }
+
+        if (empty($link)) {
+            $link = $this->getExtension('Atom')->getLink();
+        }
+
+        if (!$link) {
+            $link = null;
+        }
+
+        $this->data['link'] = $link;
+
+        return $this->data['link'];
+    }
+
+    /**
+     * Get a link to the feed XML
+     *
+     * @return string|null
+     */
+    public function getFeedLink()
+    {
+        if (array_key_exists('feedlink', $this->data)) {
+            return $this->data['feedlink'];
+        }
+
+        $link = $this->getExtension('Atom')->getFeedLink();
+
+        if ($link === null || empty($link)) {
+            $link = $this->getOriginalSourceUri();
+        }
+
+        $this->data['feedlink'] = $link;
+
+        return $this->data['feedlink'];
+    }
+
+    /**
+     * Get the feed generator entry
+     *
+     * @return string|null
+     */
+    public function getGenerator()
+    {
+        if (array_key_exists('generator', $this->data)) {
+            return $this->data['generator'];
+        }
+
+        $generator = null;
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $generator = $this->xpath->evaluate('string(/rss/channel/generator)');
+        }
+
+        if (!$generator) {
+            if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+                $generator = $this->xpath->evaluate('string(/rss/channel/atom:generator)');
+            } else {
+                $generator = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/atom:generator)');
+            }
+        }
+
+        if (empty($generator)) {
+            $generator = $this->getExtension('Atom')->getGenerator();
+        }
+
+        if (!$generator) {
+            $generator = null;
+        }
+
+        $this->data['generator'] = $generator;
+
+        return $this->data['generator'];
+    }
+
+    /**
+     * Get the feed title
+     *
+     * @return string|null
+     */
+    public function getTitle()
+    {
+        if (array_key_exists('title', $this->data)) {
+            return $this->data['title'];
+        }
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $title = $this->xpath->evaluate('string(/rss/channel/title)');
+        } else {
+            $title = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:title)');
+        }
+
+        if (!$title && $this->getExtension('DublinCore') !== null) {
+            $title = $this->getExtension('DublinCore')->getTitle();
+        }
+
+        if (!$title) {
+            $title = $this->getExtension('Atom')->getTitle();
+        }
+
+        if (!$title) {
+            $title = null;
+        }
+
+        $this->data['title'] = $title;
+
+        return $this->data['title'];
+    }
+
+    /**
+     * Get an array of any supported Pusubhubbub endpoints
+     *
+     * @return array|null
+     */
+    public function getHubs()
+    {
+        if (array_key_exists('hubs', $this->data)) {
+            return $this->data['hubs'];
+        }
+
+        $hubs = $this->getExtension('Atom')->getHubs();
+
+        if (empty($hubs)) {
+            $hubs = null;
+        } else {
+            $hubs = array_unique($hubs);
+        }
+
+        $this->data['hubs'] = $hubs;
+
+        return $this->data['hubs'];
+    }
+
+    /**
+     * Get all categories
+     *
+     * @return Reader\Collection\Category
+     */
+    public function getCategories()
+    {
+        if (array_key_exists('categories', $this->data)) {
+            return $this->data['categories'];
+        }
+
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
+            $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $list = $this->xpath->query('/rss/channel//category');
+        } else {
+            $list = $this->xpath->query('/rdf:RDF/rss:channel//rss:category');
+        }
+
+        if ($list->length) {
+            $categoryCollection = new Collection\Category;
+            foreach ($list as $category) {
+                $categoryCollection[] = array(
+                    'term' => $category->nodeValue,
+                    'scheme' => $category->getAttribute('domain'),
+                    'label' => $category->nodeValue,
+                );
+            }
+        } else {
+            $categoryCollection = $this->getExtension('DublinCore')->getCategories();
+        }
+
+        if (count($categoryCollection) == 0) {
+            $categoryCollection = $this->getExtension('Atom')->getCategories();
+        }
+
+        $this->data['categories'] = $categoryCollection;
+
+        return $this->data['categories'];
+    }
+
+    /**
+     * Read all entries to the internal entries array
+     *
+     */
+    protected function indexEntries()
+    {
+        if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
+            $entries = $this->xpath->evaluate('//item');
+        } else {
+            $entries = $this->xpath->evaluate('//rss:item');
+        }
+
+        foreach ($entries as $index => $entry) {
+            $this->entries[$index] = $entry;
+        }
+    }
+
+    /**
+     * Register the default namespaces for the current feed format
+     *
+     */
+    protected function registerNamespaces()
+    {
+        switch ($this->data['type']) {
+            case Reader\Reader::TYPE_RSS_10:
+                $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF);
+                $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_10);
+                break;
+
+            case Reader\Reader::TYPE_RSS_090:
+                $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF);
+                $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_090);
+                break;
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/FeedSet.php b/core/vendor/zendframework/zend-feed/src/Reader/FeedSet.php
new file mode 100644
index 0000000000000000000000000000000000000000..8fab2cbae8e0fdb611aded67d9ba181670739d3f
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/FeedSet.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+use ArrayObject;
+use DOMNodeList;
+use Zend\Feed\Uri;
+
+/**
+*/
+class FeedSet extends ArrayObject
+{
+    public $rss = null;
+
+    public $rdf = null;
+
+    public $atom = null;
+
+    /**
+     * Import a DOMNodeList from any document containing a set of links
+     * for alternate versions of a document, which will normally refer to
+     * RSS/RDF/Atom feeds for the current document.
+     *
+     * All such links are stored internally, however the first instance of
+     * each RSS, RDF or Atom type has its URI stored as a public property
+     * as a shortcut where the use case is simply to get a quick feed ref.
+     *
+     * Note that feeds are not loaded at this point, but will be lazy
+     * loaded automatically when each links 'feed' array key is accessed.
+     *
+     * @param DOMNodeList $links
+     * @param string $uri
+     * @return void
+     */
+    public function addLinks(DOMNodeList $links, $uri)
+    {
+        foreach ($links as $link) {
+            if (strtolower($link->getAttribute('rel')) !== 'alternate'
+                || !$link->getAttribute('type') || !$link->getAttribute('href')) {
+                continue;
+            }
+            if (!isset($this->rss) && $link->getAttribute('type') == 'application/rss+xml') {
+                $this->rss = $this->absolutiseUri(trim($link->getAttribute('href')), $uri);
+            } elseif (!isset($this->atom) && $link->getAttribute('type') == 'application/atom+xml') {
+                $this->atom = $this->absolutiseUri(trim($link->getAttribute('href')), $uri);
+            } elseif (!isset($this->rdf) && $link->getAttribute('type') == 'application/rdf+xml') {
+                $this->rdf = $this->absolutiseUri(trim($link->getAttribute('href')), $uri);
+            }
+            $this[] = new static(array(
+                'rel' => 'alternate',
+                'type' => $link->getAttribute('type'),
+                'href' => $this->absolutiseUri(trim($link->getAttribute('href')), $uri),
+            ));
+        }
+    }
+
+    /**
+     *  Attempt to turn a relative URI into an absolute URI
+     */
+    protected function absolutiseUri($link, $uri = null)
+    {
+        $linkUri = Uri::factory($link);
+        if (!$linkUri->isAbsolute() or !$linkUri->isValid()) {
+            if ($uri !== null) {
+                $uri = Uri::factory($uri);
+
+                if ($link[0] !== '/') {
+                    $link = $uri->getPath() . '/' . $link;
+                }
+
+                $link = $uri->getScheme() . '://' . $uri->getHost() . '/' . $this->canonicalizePath($link);
+                if (!Uri::factory($link)->isValid()) {
+                    $link = null;
+                }
+            }
+        }
+        return $link;
+    }
+
+    /**
+     *  Canonicalize relative path
+     */
+    protected function canonicalizePath($path)
+    {
+        $parts = array_filter(explode('/', $path));
+        $absolutes = array();
+        foreach ($parts as $part) {
+            if ('.' == $part) {
+                continue;
+            }
+            if ('..' == $part) {
+                array_pop($absolutes);
+            } else {
+                $absolutes[] = $part;
+            }
+        }
+        return implode('/', $absolutes);
+    }
+
+    /**
+     * Supports lazy loading of feeds using Reader::import() but
+     * delegates any other operations to the parent class.
+     *
+     * @param string $offset
+     * @return mixed
+     */
+    public function offsetGet($offset)
+    {
+        if ($offset == 'feed' && !$this->offsetExists('feed')) {
+            if (!$this->offsetExists('href')) {
+                return;
+            }
+            $feed = Reader::import($this->offsetGet('href'));
+            $this->offsetSet('feed', $feed);
+            return $feed;
+        }
+        return parent::offsetGet($offset);
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Http/ClientInterface.php b/core/vendor/zendframework/zend-feed/src/Reader/Http/ClientInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..138798185908bf2145a1e8b3f14abc43ffefcf52
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Http/ClientInterface.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Http;
+
+interface ClientInterface
+{
+    /**
+     * Make a GET request to a given URI
+     *
+     * @param  string $uri
+     * @return ResponseInterface
+     */
+    public function get($uri);
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Http/ResponseInterface.php b/core/vendor/zendframework/zend-feed/src/Reader/Http/ResponseInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..96b422e16dedce220738d3642437bb08be8b09af
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Http/ResponseInterface.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader\Http;
+
+interface ResponseInterface
+{
+    /**
+     * Retrieve the response body
+     *
+     * @return string
+     */
+    public function getBody();
+
+    /**
+     * Retrieve the HTTP response status code
+     *
+     * @return int
+     */
+    public function getStatusCode();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/Reader.php b/core/vendor/zendframework/zend-feed/src/Reader/Reader.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5eb3d454f43bc59c05072ba0844d2dec4ba1198
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/Reader.php
@@ -0,0 +1,676 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+use DOMDocument;
+use DOMXPath;
+use Zend\Cache\Storage\StorageInterface as CacheStorage;
+use Zend\Http as ZendHttp;
+use Zend\Stdlib\ErrorHandler;
+
+/**
+*/
+class Reader implements ReaderImportInterface
+{
+    /**
+     * Namespace constants
+     */
+    const NAMESPACE_ATOM_03  = 'http://purl.org/atom/ns#';
+    const NAMESPACE_ATOM_10  = 'http://www.w3.org/2005/Atom';
+    const NAMESPACE_RDF      = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
+    const NAMESPACE_RSS_090  = 'http://my.netscape.com/rdf/simple/0.9/';
+    const NAMESPACE_RSS_10   = 'http://purl.org/rss/1.0/';
+
+    /**
+     * Feed type constants
+     */
+    const TYPE_ANY              = 'any';
+    const TYPE_ATOM_03          = 'atom-03';
+    const TYPE_ATOM_10          = 'atom-10';
+    const TYPE_ATOM_10_ENTRY    = 'atom-10-entry';
+    const TYPE_ATOM_ANY         = 'atom';
+    const TYPE_RSS_090          = 'rss-090';
+    const TYPE_RSS_091          = 'rss-091';
+    const TYPE_RSS_091_NETSCAPE = 'rss-091n';
+    const TYPE_RSS_091_USERLAND = 'rss-091u';
+    const TYPE_RSS_092          = 'rss-092';
+    const TYPE_RSS_093          = 'rss-093';
+    const TYPE_RSS_094          = 'rss-094';
+    const TYPE_RSS_10           = 'rss-10';
+    const TYPE_RSS_20           = 'rss-20';
+    const TYPE_RSS_ANY          = 'rss';
+
+    /**
+     * Cache instance
+     *
+     * @var CacheStorage
+     */
+    protected static $cache = null;
+
+    /**
+     * HTTP client object to use for retrieving feeds
+     *
+     * @var ZendHttp\Client
+     */
+    protected static $httpClient = null;
+
+    /**
+     * Override HTTP PUT and DELETE request methods?
+     *
+     * @var bool
+     */
+    protected static $httpMethodOverride = false;
+
+    protected static $httpConditionalGet = false;
+
+    protected static $extensionManager = null;
+
+    protected static $extensions = array(
+        'feed' => array(
+            'DublinCore\Feed',
+            'Atom\Feed'
+        ),
+        'entry' => array(
+            'Content\Entry',
+            'DublinCore\Entry',
+            'Atom\Entry'
+        ),
+        'core' => array(
+            'DublinCore\Feed',
+            'Atom\Feed',
+            'Content\Entry',
+            'DublinCore\Entry',
+            'Atom\Entry'
+        )
+    );
+
+    /**
+     * Get the Feed cache
+     *
+     * @return CacheStorage
+     */
+    public static function getCache()
+    {
+        return static::$cache;
+    }
+
+    /**
+     * Set the feed cache
+     *
+     * @param  CacheStorage $cache
+     * @return void
+     */
+    public static function setCache(CacheStorage $cache)
+    {
+        static::$cache = $cache;
+    }
+
+    /**
+     * Set the HTTP client instance
+     *
+     * Sets the HTTP client object to use for retrieving the feeds.
+     *
+     * @param  ZendHttp\Client $httpClient
+     * @return void
+     */
+    public static function setHttpClient(ZendHttp\Client $httpClient)
+    {
+        static::$httpClient = $httpClient;
+    }
+
+    /**
+     * Gets the HTTP client object. If none is set, a new ZendHttp\Client will be used.
+     *
+     * @return ZendHttp\Client
+     */
+    public static function getHttpClient()
+    {
+        if (!static::$httpClient instanceof ZendHttp\Client) {
+            static::$httpClient = new ZendHttp\Client();
+        }
+
+        return static::$httpClient;
+    }
+
+    /**
+     * Toggle using POST instead of PUT and DELETE HTTP methods
+     *
+     * Some feed implementations do not accept PUT and DELETE HTTP
+     * methods, or they can't be used because of proxies or other
+     * measures. This allows turning on using POST where PUT and
+     * DELETE would normally be used; in addition, an
+     * X-Method-Override header will be sent with a value of PUT or
+     * DELETE as appropriate.
+     *
+     * @param  bool $override Whether to override PUT and DELETE.
+     * @return void
+     */
+    public static function setHttpMethodOverride($override = true)
+    {
+        static::$httpMethodOverride = $override;
+    }
+
+    /**
+     * Get the HTTP override state
+     *
+     * @return bool
+     */
+    public static function getHttpMethodOverride()
+    {
+        return static::$httpMethodOverride;
+    }
+
+    /**
+     * Set the flag indicating whether or not to use HTTP conditional GET
+     *
+     * @param  bool $bool
+     * @return void
+     */
+    public static function useHttpConditionalGet($bool = true)
+    {
+        static::$httpConditionalGet = $bool;
+    }
+
+    /**
+     * Import a feed by providing a URI
+     *
+     * @param  string $uri The URI to the feed
+     * @param  string $etag OPTIONAL Last received ETag for this resource
+     * @param  string $lastModified OPTIONAL Last-Modified value for this resource
+     * @return Feed\FeedInterface
+     * @throws Exception\RuntimeException
+     */
+    public static function import($uri, $etag = null, $lastModified = null)
+    {
+        $cache       = self::getCache();
+        $client      = self::getHttpClient();
+        $client->resetParameters();
+        $headers = new ZendHttp\Headers();
+        $client->setHeaders($headers);
+        $client->setUri($uri);
+        $cacheId = 'Zend_Feed_Reader_' . md5($uri);
+
+        if (static::$httpConditionalGet && $cache) {
+            $data = $cache->getItem($cacheId);
+            if ($data) {
+                if ($etag === null) {
+                    $etag = $cache->getItem($cacheId . '_etag');
+                }
+                if ($lastModified === null) {
+                    $lastModified = $cache->getItem($cacheId . '_lastmodified');
+                }
+                if ($etag) {
+                    $headers->addHeaderLine('If-None-Match', $etag);
+                }
+                if ($lastModified) {
+                    $headers->addHeaderLine('If-Modified-Since', $lastModified);
+                }
+            }
+            $response = $client->send();
+            if ($response->getStatusCode() !== 200 && $response->getStatusCode() !== 304) {
+                throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
+            }
+            if ($response->getStatusCode() == 304) {
+                $responseXml = $data;
+            } else {
+                $responseXml = $response->getBody();
+                $cache->setItem($cacheId, $responseXml);
+                if ($response->getHeaders()->get('ETag')) {
+                    $cache->setItem($cacheId . '_etag', $response->getHeaders()->get('ETag')->getFieldValue());
+                }
+                if ($response->getHeaders()->get('Last-Modified')) {
+                    $cache->setItem($cacheId . '_lastmodified', $response->getHeaders()->get('Last-Modified')->getFieldValue());
+                }
+            }
+            return static::importString($responseXml);
+        } elseif ($cache) {
+            $data = $cache->getItem($cacheId);
+            if ($data) {
+                return static::importString($data);
+            }
+            $response = $client->send();
+            if ((int) $response->getStatusCode() !== 200) {
+                throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
+            }
+            $responseXml = $response->getBody();
+            $cache->setItem($cacheId, $responseXml);
+            return static::importString($responseXml);
+        } else {
+            $response = $client->send();
+            if ((int) $response->getStatusCode() !== 200) {
+                throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
+            }
+            $reader = static::importString($response->getBody());
+            $reader->setOriginalSourceUri($uri);
+            return $reader;
+        }
+    }
+
+    /**
+     * Import a feed from a remote URI
+     *
+     * Performs similarly to import(), except it uses the HTTP client passed to
+     * the method, and does not take into account cached data.
+     *
+     * Primary purpose is to make it possible to use the Reader with alternate
+     * HTTP client implementations.
+     *
+     * @param  string $uri
+     * @param  Http\ClientInterface $client
+     * @return self
+     * @throws Exception\RuntimeException if response is not an Http\ResponseInterface
+     */
+    public static function importRemoteFeed($uri, Http\ClientInterface $client)
+    {
+        $response = $client->get($uri);
+        if (!$response instanceof Http\ResponseInterface) {
+            throw new Exception\RuntimeException(sprintf(
+                'Did not receive a %s\Http\ResponseInterface from the provided HTTP client; received "%s"',
+                __NAMESPACE__,
+                (is_object($response) ? get_class($response) : gettype($response))
+            ));
+        }
+
+        if ((int) $response->getStatusCode() !== 200) {
+            throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode());
+        }
+        $reader = static::importString($response->getBody());
+        $reader->setOriginalSourceUri($uri);
+        return $reader;
+    }
+
+    /**
+     * Import a feed from a string
+     *
+     * @param  string $string
+     * @return Feed\FeedInterface
+     * @throws Exception\InvalidArgumentException
+     * @throws Exception\RuntimeException
+     */
+    public static function importString($string)
+    {
+        $trimmed = trim($string);
+        if (!is_string($string) || empty($trimmed)) {
+            throw new Exception\InvalidArgumentException('Only non empty strings are allowed as input');
+        }
+
+        $libxmlErrflag = libxml_use_internal_errors(true);
+        $oldValue = libxml_disable_entity_loader(true);
+        $dom = new DOMDocument;
+        $status = $dom->loadXML(trim($string));
+        foreach ($dom->childNodes as $child) {
+            if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
+                throw new Exception\InvalidArgumentException(
+                    'Invalid XML: Detected use of illegal DOCTYPE'
+                );
+            }
+        }
+        libxml_disable_entity_loader($oldValue);
+        libxml_use_internal_errors($libxmlErrflag);
+
+        if (!$status) {
+            // Build error message
+            $error = libxml_get_last_error();
+            if ($error && $error->message) {
+                $error->message = trim($error->message);
+                $errormsg = "DOMDocument cannot parse XML: {$error->message}";
+            } else {
+                $errormsg = "DOMDocument cannot parse XML: Please check the XML document's validity";
+            }
+            throw new Exception\RuntimeException($errormsg);
+        }
+
+        $type = static::detectType($dom);
+
+        static::registerCoreExtensions();
+
+        if (substr($type, 0, 3) == 'rss') {
+            $reader = new Feed\Rss($dom, $type);
+        } elseif (substr($type, 8, 5) == 'entry') {
+            $reader = new Entry\Atom($dom->documentElement, 0, self::TYPE_ATOM_10);
+        } elseif (substr($type, 0, 4) == 'atom') {
+            $reader = new Feed\Atom($dom, $type);
+        } else {
+            throw new Exception\RuntimeException('The URI used does not point to a '
+            . 'valid Atom, RSS or RDF feed that Zend\Feed\Reader can parse.');
+        }
+        return $reader;
+    }
+
+    /**
+     * Imports a feed from a file located at $filename.
+     *
+     * @param  string $filename
+     * @throws Exception\RuntimeException
+     * @return Feed\FeedInterface
+     */
+    public static function importFile($filename)
+    {
+        ErrorHandler::start();
+        $feed = file_get_contents($filename);
+        $err  = ErrorHandler::stop();
+        if ($feed === false) {
+            throw new Exception\RuntimeException("File '{$filename}' could not be loaded", 0, $err);
+        }
+        return static::importString($feed);
+    }
+
+    /**
+     * Find feed links
+     *
+     * @param $uri
+     * @return FeedSet
+     * @throws Exception\RuntimeException
+     */
+    public static function findFeedLinks($uri)
+    {
+        $client = static::getHttpClient();
+        $client->setUri($uri);
+        $response = $client->send();
+        if ($response->getStatusCode() !== 200) {
+            throw new Exception\RuntimeException("Failed to access $uri, got response code " . $response->getStatusCode());
+        }
+        $responseHtml = $response->getBody();
+        $libxmlErrflag = libxml_use_internal_errors(true);
+        $oldValue = libxml_disable_entity_loader(true);
+        $dom = new DOMDocument;
+        $status = $dom->loadHTML(trim($responseHtml));
+        libxml_disable_entity_loader($oldValue);
+        libxml_use_internal_errors($libxmlErrflag);
+        if (!$status) {
+            // Build error message
+            $error = libxml_get_last_error();
+            if ($error && $error->message) {
+                $error->message = trim($error->message);
+                $errormsg = "DOMDocument cannot parse HTML: {$error->message}";
+            } else {
+                $errormsg = "DOMDocument cannot parse HTML: Please check the XML document's validity";
+            }
+            throw new Exception\RuntimeException($errormsg);
+        }
+        $feedSet = new FeedSet;
+        $links = $dom->getElementsByTagName('link');
+        $feedSet->addLinks($links, $uri);
+        return $feedSet;
+    }
+
+    /**
+     * Detect the feed type of the provided feed
+     *
+     * @param  Feed\AbstractFeed|DOMDocument|string $feed
+     * @param  bool $specOnly
+     * @return string
+     * @throws Exception\InvalidArgumentException
+     * @throws Exception\RuntimeException
+     */
+    public static function detectType($feed, $specOnly = false)
+    {
+        if ($feed instanceof Feed\AbstractFeed) {
+            $dom = $feed->getDomDocument();
+        } elseif ($feed instanceof DOMDocument) {
+            $dom = $feed;
+        } elseif (is_string($feed) && !empty($feed)) {
+            ErrorHandler::start(E_NOTICE|E_WARNING);
+            ini_set('track_errors', 1);
+            $oldValue = libxml_disable_entity_loader(true);
+            $dom = new DOMDocument;
+            $status = $dom->loadXML($feed);
+            foreach ($dom->childNodes as $child) {
+                if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
+                    throw new Exception\InvalidArgumentException(
+                        'Invalid XML: Detected use of illegal DOCTYPE'
+                    );
+                }
+            }
+            libxml_disable_entity_loader($oldValue);
+            ini_restore('track_errors');
+            ErrorHandler::stop();
+            if (!$status) {
+                if (!isset($phpErrormsg)) {
+                    if (function_exists('xdebug_is_enabled')) {
+                        $phpErrormsg = '(error message not available, when XDebug is running)';
+                    } else {
+                        $phpErrormsg = '(error message not available)';
+                    }
+                }
+                throw new Exception\RuntimeException("DOMDocument cannot parse XML: $phpErrormsg");
+            }
+        } else {
+            throw new Exception\InvalidArgumentException('Invalid object/scalar provided: must'
+            . ' be of type Zend\Feed\Reader\Feed, DomDocument or string');
+        }
+        $xpath = new DOMXPath($dom);
+
+        if ($xpath->query('/rss')->length) {
+            $type = self::TYPE_RSS_ANY;
+            $version = $xpath->evaluate('string(/rss/@version)');
+
+            if (strlen($version) > 0) {
+                switch ($version) {
+                    case '2.0':
+                        $type = self::TYPE_RSS_20;
+                        break;
+
+                    case '0.94':
+                        $type = self::TYPE_RSS_094;
+                        break;
+
+                    case '0.93':
+                        $type = self::TYPE_RSS_093;
+                        break;
+
+                    case '0.92':
+                        $type = self::TYPE_RSS_092;
+                        break;
+
+                    case '0.91':
+                        $type = self::TYPE_RSS_091;
+                        break;
+                }
+            }
+
+            return $type;
+        }
+
+        $xpath->registerNamespace('rdf', self::NAMESPACE_RDF);
+
+        if ($xpath->query('/rdf:RDF')->length) {
+            $xpath->registerNamespace('rss', self::NAMESPACE_RSS_10);
+
+            if ($xpath->query('/rdf:RDF/rss:channel')->length
+                || $xpath->query('/rdf:RDF/rss:image')->length
+                || $xpath->query('/rdf:RDF/rss:item')->length
+                || $xpath->query('/rdf:RDF/rss:textinput')->length
+            ) {
+                return self::TYPE_RSS_10;
+            }
+
+            $xpath->registerNamespace('rss', self::NAMESPACE_RSS_090);
+
+            if ($xpath->query('/rdf:RDF/rss:channel')->length
+                || $xpath->query('/rdf:RDF/rss:image')->length
+                || $xpath->query('/rdf:RDF/rss:item')->length
+                || $xpath->query('/rdf:RDF/rss:textinput')->length
+            ) {
+                return self::TYPE_RSS_090;
+            }
+        }
+
+        $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_10);
+
+        if ($xpath->query('//atom:feed')->length) {
+            return self::TYPE_ATOM_10;
+        }
+
+        if ($xpath->query('//atom:entry')->length) {
+            if ($specOnly == true) {
+                return self::TYPE_ATOM_10;
+            } else {
+                return self::TYPE_ATOM_10_ENTRY;
+            }
+        }
+
+        $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_03);
+
+        if ($xpath->query('//atom:feed')->length) {
+            return self::TYPE_ATOM_03;
+        }
+
+        return self::TYPE_ANY;
+    }
+
+    /**
+     * Set plugin manager for use with Extensions
+     *
+     * @param ExtensionManagerInterface $extensionManager
+     */
+    public static function setExtensionManager(ExtensionManagerInterface $extensionManager)
+    {
+        static::$extensionManager = $extensionManager;
+    }
+
+    /**
+     * Get plugin manager for use with Extensions
+     *
+     * @return ExtensionManagerInterface
+     */
+    public static function getExtensionManager()
+    {
+        if (!isset(static::$extensionManager)) {
+            static::setExtensionManager(new StandaloneExtensionManager());
+        }
+        return static::$extensionManager;
+    }
+
+    /**
+     * Register an Extension by name
+     *
+     * @param  string $name
+     * @return void
+     * @throws Exception\RuntimeException if unable to resolve Extension class
+     */
+    public static function registerExtension($name)
+    {
+        $feedName  = $name . '\Feed';
+        $entryName = $name . '\Entry';
+        $manager   = static::getExtensionManager();
+        if (static::isRegistered($name)) {
+            if ($manager->has($feedName) || $manager->has($entryName)) {
+                return;
+            }
+        }
+
+        if (!$manager->has($feedName) && !$manager->has($entryName)) {
+            throw new Exception\RuntimeException('Could not load extension: ' . $name
+                . ' using Plugin Loader. Check prefix paths are configured and extension exists.');
+        }
+        if ($manager->has($feedName)) {
+            static::$extensions['feed'][] = $feedName;
+        }
+        if ($manager->has($entryName)) {
+            static::$extensions['entry'][] = $entryName;
+        }
+    }
+
+    /**
+     * Is a given named Extension registered?
+     *
+     * @param  string $extensionName
+     * @return bool
+     */
+    public static function isRegistered($extensionName)
+    {
+        $feedName  = $extensionName . '\Feed';
+        $entryName = $extensionName . '\Entry';
+        if (in_array($feedName, static::$extensions['feed'])
+            || in_array($entryName, static::$extensions['entry'])
+        ) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Get a list of extensions
+     *
+     * @return array
+     */
+    public static function getExtensions()
+    {
+        return static::$extensions;
+    }
+
+    /**
+     * Reset class state to defaults
+     *
+     * @return void
+     */
+    public static function reset()
+    {
+        static::$cache              = null;
+        static::$httpClient         = null;
+        static::$httpMethodOverride = false;
+        static::$httpConditionalGet = false;
+        static::$extensionManager   = null;
+        static::$extensions         = array(
+            'feed' => array(
+                'DublinCore\Feed',
+                'Atom\Feed'
+            ),
+            'entry' => array(
+                'Content\Entry',
+                'DublinCore\Entry',
+                'Atom\Entry'
+            ),
+            'core' => array(
+                'DublinCore\Feed',
+                'Atom\Feed',
+                'Content\Entry',
+                'DublinCore\Entry',
+                'Atom\Entry'
+            )
+        );
+    }
+
+    /**
+     * Register core (default) extensions
+     *
+     * @return void
+     */
+    protected static function registerCoreExtensions()
+    {
+        static::registerExtension('DublinCore');
+        static::registerExtension('Content');
+        static::registerExtension('Atom');
+        static::registerExtension('Slash');
+        static::registerExtension('WellFormedWeb');
+        static::registerExtension('Thread');
+        static::registerExtension('Podcast');
+    }
+
+    /**
+     * Utility method to apply array_unique operation to a multidimensional
+     * array.
+     *
+     * @param array
+     * @return array
+     */
+    public static function arrayUnique(array $array)
+    {
+        foreach ($array as &$value) {
+            $value = serialize($value);
+        }
+        $array = array_unique($array);
+        foreach ($array as &$value) {
+            $value = unserialize($value);
+        }
+        return $array;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/ReaderImportInterface.php b/core/vendor/zendframework/zend-feed/src/Reader/ReaderImportInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..0a2edd14ccc6dc897d99cd35cbb9d2e4f3ca158e
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/ReaderImportInterface.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+interface ReaderImportInterface
+{
+    /**
+     * Import a feed by providing a URI
+     *
+     * @param  string $uri The URI to the feed
+     * @param  string $etag OPTIONAL Last received ETag for this resource
+     * @param  string $lastModified OPTIONAL Last-Modified value for this resource
+     * @return Feed\FeedInterface
+     * @throws Exception\RuntimeException
+     */
+    public static function import($uri, $etag = null, $lastModified = null);
+
+    /**
+     * Import a feed from a remote URI
+     *
+     * Performs similarly to import(), except it uses the HTTP client passed to
+     * the method, and does not take into account cached data.
+     *
+     * Primary purpose is to make it possible to use the Reader with alternate
+     * HTTP client implementations.
+     *
+     * @param  string $uri
+     * @param  Http\ClientInterface $client
+     * @return self
+     * @throws Exception\RuntimeException if response is not an Http\ResponseInterface
+     */
+    public static function importRemoteFeed($uri, Http\ClientInterface $client);
+
+
+    /**
+     * Import a feed from a string
+     *
+     * @param  string $string
+     * @return Feed\FeedInterface
+     * @throws Exception\InvalidArgumentException
+     * @throws Exception\RuntimeException
+     */
+    public static function importString($string);
+
+
+    /**
+     * Imports a feed from a file located at $filename.
+     *
+     * @param  string $filename
+     * @throws Exception\RuntimeException
+     * @return Feed\FeedInterface
+     */
+    public static function importFile($filename);
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Reader/StandaloneExtensionManager.php b/core/vendor/zendframework/zend-feed/src/Reader/StandaloneExtensionManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac85e8a74be88d3521d1578101350e634ef4499c
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Reader/StandaloneExtensionManager.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Reader;
+
+class StandaloneExtensionManager implements ExtensionManagerInterface
+{
+    private $extensions = array(
+        'Atom\Entry'            => 'Zend\Feed\Reader\Extension\Atom\Entry',
+        'Atom\Feed'             => 'Zend\Feed\Reader\Extension\Atom\Feed',
+        'Content\Entry'         => 'Zend\Feed\Reader\Extension\Content\Entry',
+        'CreativeCommons\Entry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry',
+        'CreativeCommons\Feed'  => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed',
+        'DublinCore\Entry'      => 'Zend\Feed\Reader\Extension\DublinCore\Entry',
+        'DublinCore\Feed'       => 'Zend\Feed\Reader\Extension\DublinCore\Feed',
+        'Podcast\Entry'         => 'Zend\Feed\Reader\Extension\Podcast\Entry',
+        'Podcast\Feed'          => 'Zend\Feed\Reader\Extension\Podcast\Feed',
+        'Slash\Entry'           => 'Zend\Feed\Reader\Extension\Slash\Entry',
+        'Syndication\Feed'      => 'Zend\Feed\Reader\Extension\Syndication\Feed',
+        'Thread\Entry'          => 'Zend\Feed\Reader\Extension\Thread\Entry',
+        'WellFormedWeb\Entry'   => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry',
+    );
+
+    /**
+     * Do we have the extension?
+     *
+     * @param  string $extension
+     * @return bool
+     */
+    public function has($extension)
+    {
+        return array_key_exists($extension, $this->extensions);
+    }
+
+    /**
+     * Retrieve the extension
+     *
+     * @param  string $extension
+     * @return Extension\AbstractEntry|Extension\AbstractFeed
+     */
+    public function get($extension)
+    {
+        $class = $this->extensions[$extension];
+        return new $class();
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Uri.php b/core/vendor/zendframework/zend-feed/src/Uri.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a4565e3584e0adc8b3951ed7c309e6f3dda86c7
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Uri.php
@@ -0,0 +1,184 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed;
+
+class Uri
+{
+    /**
+     * @var string
+     */
+    protected $fragment;
+
+    /**
+     * @var string
+     */
+    protected $host;
+
+    /**
+     * @var string
+     */
+    protected $pass;
+
+    /**
+     * @var string
+     */
+    protected $path;
+
+    /**
+     * @var int
+     */
+    protected $port;
+
+    /**
+     * @var string
+     */
+    protected $query;
+
+    /**
+     * @var string
+     */
+    protected $scheme;
+
+    /**
+     * @var string
+     */
+    protected $user;
+
+    /**
+     * @var bool
+     */
+    protected $valid;
+
+    /**
+     * Valid schemes
+     */
+    protected $validSchemes = array(
+        'http',
+        'https',
+        'file',
+    );
+
+    /**
+     * @param  string $uri
+     */
+    public function __construct($uri)
+    {
+        $parsed = parse_url($uri);
+        if (false === $parsed) {
+            $this->valid = false;
+            return;
+        }
+
+        $this->scheme   = isset($parsed['scheme'])   ? $parsed['scheme']   : null;
+        $this->host     = isset($parsed['host'])     ? $parsed['host']     : null;
+        $this->port     = isset($parsed['port'])     ? $parsed['port']     : null;
+        $this->user     = isset($parsed['user'])     ? $parsed['user']     : null;
+        $this->pass     = isset($parsed['pass'])     ? $parsed['pass']     : null;
+        $this->path     = isset($parsed['path'])     ? $parsed['path']     : null;
+        $this->query    = isset($parsed['query'])    ? $parsed['query']    : null;
+        $this->fragment = isset($parsed['fragment']) ? $parsed['fragment'] : null;
+    }
+
+    /**
+     * Create an instance
+     *
+     * Useful for chained validations
+     *
+     * @param  string $uri
+     * @return self
+     */
+    public static function factory($uri)
+    {
+        return new static($uri);
+    }
+
+    /**
+     * Retrieve the host
+     *
+     * @return string
+     */
+    public function getHost()
+    {
+        return $this->host;
+    }
+
+    /**
+     * Retrieve the URI path
+     *
+     * @return string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * Retrieve the scheme
+     *
+     * @return string
+     */
+    public function getScheme()
+    {
+        return $this->scheme;
+    }
+
+    /**
+     * Is the URI valid?
+     *
+     * @return bool
+     */
+    public function isValid()
+    {
+        if (false === $this->valid) {
+            return false;
+        }
+
+        if ($this->scheme && !in_array($this->scheme, $this->validSchemes)) {
+            return false;
+        }
+
+        if ($this->host) {
+            if ($this->path && substr($this->path, 0, 1) != '/') {
+                return false;
+            }
+            return true;
+        }
+
+        // no host, but user and/or port... what?
+        if ($this->user || $this->port) {
+            return false;
+        }
+
+        if ($this->path) {
+            // Check path-only (no host) URI
+            if (substr($this->path, 0, 2) == '//') {
+                return false;
+            }
+            return true;
+        }
+
+        if (! ($this->query || $this->fragment)) {
+            // No host, path, query or fragment - this is not a valid URI
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Is the URI absolute?
+     *
+     * @return bool
+     */
+    public function isAbsolute()
+    {
+        return ($this->scheme !== null);
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/AbstractFeed.php b/core/vendor/zendframework/zend-feed/src/Writer/AbstractFeed.php
new file mode 100644
index 0000000000000000000000000000000000000000..26616b06d7b69834c465b2295911e4de4002aa00
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/AbstractFeed.php
@@ -0,0 +1,846 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+use DateTime;
+use Zend\Feed\Uri;
+use Zend\Validator;
+
+class AbstractFeed
+{
+    /**
+     * Contains all Feed level date to append in feed output
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Holds the value "atom" or "rss" depending on the feed type set when
+     * when last exported.
+     *
+     * @var string
+     */
+    protected $type = null;
+
+    /**
+     * @var $extensions
+     */
+    protected $extensions;
+
+    /**
+     * Constructor: Primarily triggers the registration of core extensions and
+     * loads those appropriate to this data container.
+     *
+     */
+    public function __construct()
+    {
+        Writer::registerCoreExtensions();
+        $this->_loadExtensions();
+    }
+
+    /**
+     * Set a single author
+     *
+     * The following option keys are supported:
+     * 'name'  => (string) The name
+     * 'email' => (string) An optional email
+     * 'uri'   => (string) An optional and valid URI
+     *
+     * @param array $author
+     * @throws Exception\InvalidArgumentException If any value of $author not follow the format.
+     * @return AbstractFeed
+     */
+    public function addAuthor(array $author)
+    {
+        // Check array values
+        if (!array_key_exists('name', $author)
+            || empty($author['name'])
+            || !is_string($author['name'])
+        ) {
+            throw new Exception\InvalidArgumentException(
+                'Invalid parameter: author array must include a "name" key with a non-empty string value');
+        }
+
+        if (isset($author['email'])) {
+            if (empty($author['email']) || !is_string($author['email'])) {
+                throw new Exception\InvalidArgumentException(
+                    'Invalid parameter: "email" array value must be a non-empty string');
+            }
+        }
+        if (isset($author['uri'])) {
+            if (empty($author['uri']) || !is_string($author['uri']) ||
+                !Uri::factory($author['uri'])->isValid()
+            ) {
+                throw new Exception\InvalidArgumentException(
+                    'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI');
+            }
+        }
+
+        $this->data['authors'][] = $author;
+
+        return $this;
+    }
+
+    /**
+     * Set an array with feed authors
+     *
+     * @see addAuthor
+     * @param array $authors
+     * @return AbstractFeed
+     */
+    public function addAuthors(array $authors)
+    {
+        foreach ($authors as $author) {
+            $this->addAuthor($author);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set the copyright entry
+     *
+     * @param  string      $copyright
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setCopyright($copyright)
+    {
+        if (empty($copyright) || !is_string($copyright)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['copyright'] = $copyright;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed creation date
+     *
+     * @param null|int|DateTime
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setDateCreated($date = null)
+    {
+        if ($date === null) {
+            $date = new DateTime();
+        } elseif (is_int($date)) {
+            $date = new DateTime('@' . $date);
+        } elseif (!$date instanceof DateTime) {
+            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
+                                                         . ' passed as parameter');
+        }
+        $this->data['dateCreated'] = $date;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed modification date
+     *
+     * @param null|int|DateTime
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setDateModified($date = null)
+    {
+        if ($date === null) {
+            $date = new DateTime();
+        } elseif (is_int($date)) {
+            $date = new DateTime('@' . $date);
+        } elseif (!$date instanceof DateTime) {
+            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
+                                                         . ' passed as parameter');
+        }
+        $this->data['dateModified'] = $date;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed last-build date. Ignored for Atom 1.0.
+     *
+     * @param null|int|DateTime
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setLastBuildDate($date = null)
+    {
+        if ($date === null) {
+            $date = new DateTime();
+        } elseif (is_int($date)) {
+            $date = new DateTime('@' . $date);
+        } elseif (!$date instanceof DateTime) {
+            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
+                                                         . ' passed as parameter');
+        }
+        $this->data['lastBuildDate'] = $date;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed description
+     *
+     * @param string $description
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setDescription($description)
+    {
+        if (empty($description) || !is_string($description)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['description'] = $description;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed generator entry
+     *
+     * @param array|string $name
+     * @param null|string $version
+     * @param null|string $uri
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setGenerator($name, $version = null, $uri = null)
+    {
+        if (is_array($name)) {
+            $data = $name;
+            if (empty($data['name']) || !is_string($data['name'])) {
+                throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string');
+            }
+            $generator = array('name' => $data['name']);
+            if (isset($data['version'])) {
+                if (empty($data['version']) || !is_string($data['version'])) {
+                    throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string');
+                }
+                $generator['version'] = $data['version'];
+            }
+            if (isset($data['uri'])) {
+                if (empty($data['uri']) || !is_string($data['uri']) || !Uri::factory($data['uri'])->isValid()) {
+                    throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI');
+                }
+                $generator['uri'] = $data['uri'];
+            }
+        } else {
+            if (empty($name) || !is_string($name)) {
+                throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string');
+            }
+            $generator = array('name' => $name);
+            if (isset($version)) {
+                if (empty($version) || !is_string($version)) {
+                    throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string');
+                }
+                $generator['version'] = $version;
+            }
+            if (isset($uri)) {
+                if (empty($uri) || !is_string($uri) || !Uri::factory($uri)->isValid()) {
+                    throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI');
+                }
+                $generator['uri'] = $uri;
+            }
+        }
+        $this->data['generator'] = $generator;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed ID - URI or URN (via PCRE pattern) supported
+     *
+     * @param string $id
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setId($id)
+    {
+        if ((empty($id) || !is_string($id) || !Uri::factory($id)->isValid())
+            && !preg_match("#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#", $id)
+            && !$this->_validateTagUri($id)
+        ) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI');
+        }
+        $this->data['id'] = $id;
+
+        return $this;
+    }
+
+    /**
+     * Validate a URI using the tag scheme (RFC 4151)
+     *
+     * @param string $id
+     * @return bool
+     */
+    protected function _validateTagUri($id)
+    {
+        if (preg_match('/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/', $id, $matches)) {
+            $dvalid = false;
+            $date = $matches['date'];
+            $d6 = strtotime($date);
+            if ((strlen($date) == 4) && $date <= date('Y')) {
+                $dvalid = true;
+            } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) {
+                $dvalid = true;
+            } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) {
+                $dvalid = true;
+            }
+            $validator = new Validator\EmailAddress;
+            if ($validator->isValid($matches['name'])) {
+                $nvalid = true;
+            } else {
+                $nvalid = $validator->isValid('info@' . $matches['name']);
+            }
+            return $dvalid && $nvalid;
+        }
+        return false;
+    }
+
+    /**
+     * Set a feed image (URI at minimum). Parameter is a single array with the
+     * required key 'uri'. When rendering as RSS, the required keys are 'uri',
+     * 'title' and 'link'. RSS also specifies three optional parameters 'width',
+     * 'height' and 'description'. Only 'uri' is required and used for Atom rendering.
+     *
+     * @param array $data
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setImage(array $data)
+    {
+        if (empty($data['uri']) || !is_string($data['uri'])
+            || !Uri::factory($data['uri'])->isValid()
+        ) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter \'uri\''
+            . ' must be a non-empty string and valid URI/IRI');
+        }
+        $this->data['image'] = $data;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed language
+     *
+     * @param string $language
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setLanguage($language)
+    {
+        if (empty($language) || !is_string($language)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['language'] = $language;
+
+        return $this;
+    }
+
+    /**
+     * Set a link to the HTML source
+     *
+     * @param string $link
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setLink($link)
+    {
+        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI');
+        }
+        $this->data['link'] = $link;
+
+        return $this;
+    }
+
+    /**
+     * Set a link to an XML feed for any feed type/version
+     *
+     * @param string $link
+     * @param string $type
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setFeedLink($link, $type)
+    {
+        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "link"" must be a non-empty string and valid URI/IRI');
+        }
+        if (!in_array(strtolower($type), array('rss', 'rdf', 'atom'))) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "type"; You must declare the type of feed the link points to, i.e. RSS, RDF or Atom');
+        }
+        $this->data['feedLinks'][strtolower($type)] = $link;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed title
+     *
+     * @param string $title
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setTitle($title)
+    {
+        if (empty($title) || !is_string($title)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['title'] = $title;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed character encoding
+     *
+     * @param string $encoding
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setEncoding($encoding)
+    {
+        if (empty($encoding) || !is_string($encoding)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['encoding'] = $encoding;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed's base URL
+     *
+     * @param string $url
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function setBaseUrl($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value'
+            . ' must be a non-empty string and valid URI/IRI');
+        }
+        $this->data['baseUrl'] = $url;
+
+        return $this;
+    }
+
+    /**
+     * Add a Pubsubhubbub hub endpoint URL
+     *
+     * @param string $url
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function addHub($url)
+    {
+        if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value'
+            . ' must be a non-empty string and valid URI/IRI');
+        }
+        if (!isset($this->data['hubs'])) {
+            $this->data['hubs'] = array();
+        }
+        $this->data['hubs'][] = $url;
+
+        return $this;
+    }
+
+    /**
+     * Add Pubsubhubbub hub endpoint URLs
+     *
+     * @param array $urls
+     * @return AbstractFeed
+     */
+    public function addHubs(array $urls)
+    {
+        foreach ($urls as $url) {
+            $this->addHub($url);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Add a feed category
+     *
+     * @param array $category
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractFeed
+     */
+    public function addCategory(array $category)
+    {
+        if (!isset($category['term'])) {
+            throw new Exception\InvalidArgumentException('Each category must be an array and '
+            . 'contain at least a "term" element containing the machine '
+            . ' readable category name');
+        }
+        if (isset($category['scheme'])) {
+            if (empty($category['scheme'])
+                || !is_string($category['scheme'])
+                || !Uri::factory($category['scheme'])->isValid()
+            ) {
+                throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of'
+                . ' a category must be a valid URI');
+            }
+        }
+        if (!isset($this->data['categories'])) {
+            $this->data['categories'] = array();
+        }
+        $this->data['categories'][] = $category;
+
+        return $this;
+    }
+
+    /**
+     * Set an array of feed categories
+     *
+     * @param array $categories
+     * @return AbstractFeed
+     */
+    public function addCategories(array $categories)
+    {
+        foreach ($categories as $category) {
+            $this->addCategory($category);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Get a single author
+     *
+     * @param  int $index
+     * @return string|null
+     */
+    public function getAuthor($index = 0)
+    {
+        if (isset($this->data['authors'][$index])) {
+            return $this->data['authors'][$index];
+        }
+
+        return;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (!array_key_exists('authors', $this->data)) {
+            return;
+        }
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the copyright entry
+     *
+     * @return string|null
+     */
+    public function getCopyright()
+    {
+        if (!array_key_exists('copyright', $this->data)) {
+            return;
+        }
+        return $this->data['copyright'];
+    }
+
+    /**
+     * Get the feed creation date
+     *
+     * @return string|null
+     */
+    public function getDateCreated()
+    {
+        if (!array_key_exists('dateCreated', $this->data)) {
+            return;
+        }
+        return $this->data['dateCreated'];
+    }
+
+    /**
+     * Get the feed modification date
+     *
+     * @return string|null
+     */
+    public function getDateModified()
+    {
+        if (!array_key_exists('dateModified', $this->data)) {
+            return;
+        }
+        return $this->data['dateModified'];
+    }
+
+    /**
+     * Get the feed last-build date
+     *
+     * @return string|null
+     */
+    public function getLastBuildDate()
+    {
+        if (!array_key_exists('lastBuildDate', $this->data)) {
+            return;
+        }
+        return $this->data['lastBuildDate'];
+    }
+
+    /**
+     * Get the feed description
+     *
+     * @return string|null
+     */
+    public function getDescription()
+    {
+        if (!array_key_exists('description', $this->data)) {
+            return;
+        }
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the feed generator entry
+     *
+     * @return string|null
+     */
+    public function getGenerator()
+    {
+        if (!array_key_exists('generator', $this->data)) {
+            return;
+        }
+        return $this->data['generator'];
+    }
+
+    /**
+     * Get the feed ID
+     *
+     * @return string|null
+     */
+    public function getId()
+    {
+        if (!array_key_exists('id', $this->data)) {
+            return;
+        }
+        return $this->data['id'];
+    }
+
+    /**
+     * Get the feed image URI
+     *
+     * @return array
+     */
+    public function getImage()
+    {
+        if (!array_key_exists('image', $this->data)) {
+            return;
+        }
+        return $this->data['image'];
+    }
+
+    /**
+     * Get the feed language
+     *
+     * @return string|null
+     */
+    public function getLanguage()
+    {
+        if (!array_key_exists('language', $this->data)) {
+            return;
+        }
+        return $this->data['language'];
+    }
+
+    /**
+     * Get a link to the HTML source
+     *
+     * @return string|null
+     */
+    public function getLink()
+    {
+        if (!array_key_exists('link', $this->data)) {
+            return;
+        }
+        return $this->data['link'];
+    }
+
+    /**
+     * Get a link to the XML feed
+     *
+     * @return string|null
+     */
+    public function getFeedLinks()
+    {
+        if (!array_key_exists('feedLinks', $this->data)) {
+            return;
+        }
+        return $this->data['feedLinks'];
+    }
+
+    /**
+     * Get the feed title
+     *
+     * @return string|null
+     */
+    public function getTitle()
+    {
+        if (!array_key_exists('title', $this->data)) {
+            return;
+        }
+        return $this->data['title'];
+    }
+
+    /**
+     * Get the feed character encoding
+     *
+     * @return string|null
+     */
+    public function getEncoding()
+    {
+        if (!array_key_exists('encoding', $this->data)) {
+            return 'UTF-8';
+        }
+        return $this->data['encoding'];
+    }
+
+    /**
+     * Get the feed's base url
+     *
+     * @return string|null
+     */
+    public function getBaseUrl()
+    {
+        if (!array_key_exists('baseUrl', $this->data)) {
+            return;
+        }
+        return $this->data['baseUrl'];
+    }
+
+    /**
+     * Get the URLs used as Pubsubhubbub hubs endpoints
+     *
+     * @return string|null
+     */
+    public function getHubs()
+    {
+        if (!array_key_exists('hubs', $this->data)) {
+            return;
+        }
+        return $this->data['hubs'];
+    }
+
+    /**
+     * Get the feed categories
+     *
+     * @return string|null
+     */
+    public function getCategories()
+    {
+        if (!array_key_exists('categories', $this->data)) {
+            return;
+        }
+        return $this->data['categories'];
+    }
+
+    /**
+     * Resets the instance and deletes all data
+     *
+     * @return void
+     */
+    public function reset()
+    {
+        $this->data = array();
+    }
+
+    /**
+     * Set the current feed type being exported to "rss" or "atom". This allows
+     * other objects to gracefully choose whether to execute or not, depending
+     * on their appropriateness for the current type, e.g. renderers.
+     *
+     * @param string $type
+     * @return AbstractFeed
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+        return $this;
+    }
+
+    /**
+     * Retrieve the current or last feed type exported.
+     *
+     * @return string Value will be "rss" or "atom"
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Unset a specific data point
+     *
+     * @param string $name
+     * @return AbstractFeed
+     */
+    public function remove($name)
+    {
+        if (isset($this->data[$name])) {
+            unset($this->data[$name]);
+        }
+        return $this;
+    }
+
+    /**
+     * Method overloading: call given method on first extension implementing it
+     *
+     * @param  string $method
+     * @param  array $args
+     * @return mixed
+     * @throws Exception\BadMethodCallException if no extensions implements the method
+     */
+    public function __call($method, $args)
+    {
+        foreach ($this->extensions as $extension) {
+            try {
+                return call_user_func_array(array($extension, $method), $args);
+            } catch (Exception\BadMethodCallException $e) {
+            }
+        }
+        throw new Exception\BadMethodCallException(
+            'Method: ' . $method . ' does not exist and could not be located on a registered Extension'
+        );
+    }
+
+    /**
+     * Load extensions from Zend\Feed\Writer\Writer
+     *
+     * @throws Exception\RuntimeException
+     * @return void
+     */
+    protected function _loadExtensions()
+    {
+        $all     = Writer::getExtensions();
+        $manager = Writer::getExtensionManager();
+        $exts    = $all['feed'];
+        foreach ($exts as $ext) {
+            if (!$manager->has($ext)) {
+                throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; could not resolve to class', $ext));
+            }
+            $this->extensions[$ext] = $manager->get($ext);
+            $this->extensions[$ext]->setEncoding($this->getEncoding());
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Deleted.php b/core/vendor/zendframework/zend-feed/src/Writer/Deleted.php
new file mode 100644
index 0000000000000000000000000000000000000000..1d72fc920db45fc31c2bd3af0ebf44c75fe717e3
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Deleted.php
@@ -0,0 +1,236 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+use DateTime;
+use Zend\Feed\Uri;
+
+/**
+*/
+class Deleted
+{
+    /**
+     * Internal array containing all data associated with this entry or item.
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Holds the value "atom" or "rss" depending on the feed type set when
+     * when last exported.
+     *
+     * @var string
+     */
+    protected $type = null;
+
+    /**
+     * Set the feed character encoding
+     *
+     * @param  $encoding
+     * @throws Exception\InvalidArgumentException
+     * @return string|null
+     * @return Deleted
+     */
+    public function setEncoding($encoding)
+    {
+        if (empty($encoding) || !is_string($encoding)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['encoding'] = $encoding;
+
+        return $this;
+    }
+
+    /**
+     * Get the feed character encoding
+     *
+     * @return string|null
+     */
+    public function getEncoding()
+    {
+        if (!array_key_exists('encoding', $this->data)) {
+            return 'UTF-8';
+        }
+        return $this->data['encoding'];
+    }
+
+    /**
+     * Unset a specific data point
+     *
+     * @param string $name
+     * @return Deleted
+     */
+    public function remove($name)
+    {
+        if (isset($this->data[$name])) {
+            unset($this->data[$name]);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set the current feed type being exported to "rss" or "atom". This allows
+     * other objects to gracefully choose whether to execute or not, depending
+     * on their appropriateness for the current type, e.g. renderers.
+     *
+     * @param string $type
+     * @return Deleted
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+        return $this;
+    }
+
+    /**
+     * Retrieve the current or last feed type exported.
+     *
+     * @return string Value will be "rss" or "atom"
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Set reference
+     *
+     * @param $reference
+     * @throws Exception\InvalidArgumentException
+     * @return Deleted
+     */
+    public function setReference($reference)
+    {
+        if (empty($reference) || !is_string($reference)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: reference must be a non-empty string');
+        }
+        $this->data['reference'] = $reference;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getReference()
+    {
+        if (!array_key_exists('reference', $this->data)) {
+            return;
+        }
+        return $this->data['reference'];
+    }
+
+    /**
+     * Set when
+     *
+     * @param null|string|DateTime $date
+     * @throws Exception\InvalidArgumentException
+     * @return Deleted
+     */
+    public function setWhen($date = null)
+    {
+        if ($date === null) {
+            $date = new DateTime();
+        } elseif (is_int($date)) {
+            $date = new DateTime('@' . $date);
+        } elseif (!$date instanceof DateTime) {
+            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp'
+            . ' passed as parameter');
+        }
+        $this->data['when'] = $date;
+
+        return $this;
+    }
+
+    /**
+     * @return DateTime
+     */
+    public function getWhen()
+    {
+        if (!array_key_exists('when', $this->data)) {
+            return;
+        }
+        return $this->data['when'];
+    }
+
+    /**
+     * Set by
+     *
+     * @param array $by
+     * @throws Exception\InvalidArgumentException
+     * @return Deleted
+     */
+    public function setBy(array $by)
+    {
+        $author = array();
+        if (!array_key_exists('name', $by)
+            || empty($by['name'])
+            || !is_string($by['name'])
+        ) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: author array must include a'
+            . ' "name" key with a non-empty string value');
+        }
+        $author['name'] = $by['name'];
+        if (isset($by['email'])) {
+            if (empty($by['email']) || !is_string($by['email'])) {
+                throw new Exception\InvalidArgumentException('Invalid parameter: "email" array'
+                . ' value must be a non-empty string');
+            }
+            $author['email'] = $by['email'];
+        }
+        if (isset($by['uri'])) {
+            if (empty($by['uri'])
+                || !is_string($by['uri'])
+                || !Uri::factory($by['uri'])->isValid()
+            ) {
+                throw new Exception\InvalidArgumentException('Invalid parameter: "uri" array value must'
+                 . ' be a non-empty string and valid URI/IRI');
+            }
+            $author['uri'] = $by['uri'];
+        }
+        $this->data['by'] = $author;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getBy()
+    {
+        if (!array_key_exists('by', $this->data)) {
+            return;
+        }
+        return $this->data['by'];
+    }
+
+    /**
+     * @param string $comment
+     * @return Deleted
+     */
+    public function setComment($comment)
+    {
+        $this->data['comment'] = $comment;
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getComment()
+    {
+        if (!array_key_exists('comment', $this->data)) {
+            return;
+        }
+        return $this->data['comment'];
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..78b968dcbcd27a5cc487f3d499fc0088df4e0577
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Entry.php
@@ -0,0 +1,765 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+use DateTime;
+use Zend\Feed\Uri;
+
+/**
+*/
+class Entry
+{
+    /**
+     * Internal array containing all data associated with this entry or item.
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Registered extensions
+     *
+     * @var array
+     */
+    protected $extensions = array();
+
+    /**
+     * Holds the value "atom" or "rss" depending on the feed type set when
+     * when last exported.
+     *
+     * @var string
+     */
+    protected $type = null;
+
+    /**
+     * Constructor: Primarily triggers the registration of core extensions and
+     * loads those appropriate to this data container.
+     *
+     */
+    public function __construct()
+    {
+        Writer::registerCoreExtensions();
+        $this->_loadExtensions();
+    }
+
+    /**
+     * Set a single author
+     *
+     * The following option keys are supported:
+     * 'name'  => (string) The name
+     * 'email' => (string) An optional email
+     * 'uri'   => (string) An optional and valid URI
+     *
+     * @param array $author
+     * @throws Exception\InvalidArgumentException If any value of $author not follow the format.
+     * @return Entry
+     */
+    public function addAuthor(array $author)
+    {
+        // Check array values
+        if (!array_key_exists('name', $author)
+            || empty($author['name'])
+            || !is_string($author['name'])
+        ) {
+            throw new Exception\InvalidArgumentException(
+                'Invalid parameter: author array must include a "name" key with a non-empty string value');
+        }
+
+        if (isset($author['email'])) {
+            if (empty($author['email']) || !is_string($author['email'])) {
+                throw new Exception\InvalidArgumentException(
+                    'Invalid parameter: "email" array value must be a non-empty string');
+            }
+        }
+        if (isset($author['uri'])) {
+            if (empty($author['uri']) || !is_string($author['uri']) ||
+                !Uri::factory($author['uri'])->isValid()
+            ) {
+                throw new Exception\InvalidArgumentException(
+                    'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI');
+            }
+        }
+
+        $this->data['authors'][] = $author;
+
+        return $this;
+    }
+
+    /**
+     * Set an array with feed authors
+     *
+     * @see addAuthor
+     * @param array $authors
+     * @return Entry
+     */
+    public function addAuthors(array $authors)
+    {
+        foreach ($authors as $author) {
+            $this->addAuthor($author);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set the feed character encoding
+     *
+     * @param string $encoding
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setEncoding($encoding)
+    {
+        if (empty($encoding) || !is_string($encoding)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['encoding'] = $encoding;
+
+        return $this;
+    }
+
+    /**
+     * Get the feed character encoding
+     *
+     * @return string|null
+     */
+    public function getEncoding()
+    {
+        if (!array_key_exists('encoding', $this->data)) {
+            return 'UTF-8';
+        }
+        return $this->data['encoding'];
+    }
+
+    /**
+     * Set the copyright entry
+     *
+     * @param string $copyright
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setCopyright($copyright)
+    {
+        if (empty($copyright) || !is_string($copyright)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['copyright'] = $copyright;
+
+        return $this;
+    }
+
+    /**
+     * Set the entry's content
+     *
+     * @param string $content
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setContent($content)
+    {
+        if (empty($content) || !is_string($content)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['content'] = $content;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed creation date
+     *
+     * @param null|int|DateTime $date
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setDateCreated($date = null)
+    {
+        if ($date === null) {
+            $date = new DateTime();
+        } elseif (is_int($date)) {
+            $date = new DateTime('@' . $date);
+        } elseif (!$date instanceof DateTime) {
+            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter');
+        }
+        $this->data['dateCreated'] = $date;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed modification date
+     *
+     * @param null|int|DateTime $date
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setDateModified($date = null)
+    {
+        if ($date === null) {
+            $date = new DateTime();
+        } elseif (is_int($date)) {
+            $date = new DateTime('@' . $date);
+        } elseif (!$date instanceof DateTime) {
+            throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter');
+        }
+        $this->data['dateModified'] = $date;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed description
+     *
+     * @param string $description
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setDescription($description)
+    {
+        if (empty($description) || !is_string($description)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['description'] = $description;
+
+        return $this;
+    }
+
+    /**
+     * Set the feed ID
+     *
+     * @param string $id
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setId($id)
+    {
+        if (empty($id) || !is_string($id)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['id'] = $id;
+
+        return $this;
+    }
+
+    /**
+     * Set a link to the HTML source of this entry
+     *
+     * @param string $link
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setLink($link)
+    {
+        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI');
+        }
+        $this->data['link'] = $link;
+
+        return $this;
+    }
+
+    /**
+     * Set the number of comments associated with this entry
+     *
+     * @param int $count
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setCommentCount($count)
+    {
+        if (!is_numeric($count) || (int) $count != $count || (int) $count < 0) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "count" must be a positive integer number or zero');
+        }
+        $this->data['commentCount'] = (int) $count;
+
+        return $this;
+    }
+
+    /**
+     * Set a link to a HTML page containing comments associated with this entry
+     *
+     * @param string $link
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setCommentLink($link)
+    {
+        if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI');
+        }
+        $this->data['commentLink'] = $link;
+
+        return $this;
+    }
+
+    /**
+     * Set a link to an XML feed for any comments associated with this entry
+     *
+     * @param array $link
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setCommentFeedLink(array $link)
+    {
+        if (!isset($link['uri']) || !is_string($link['uri']) || !Uri::factory($link['uri'])->isValid()) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI');
+        }
+        if (!isset($link['type']) || !in_array($link['type'], array('atom', 'rss', 'rdf'))) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: "type" must be one'
+            . ' of "atom", "rss" or "rdf"');
+        }
+        if (!isset($this->data['commentFeedLinks'])) {
+            $this->data['commentFeedLinks'] = array();
+        }
+        $this->data['commentFeedLinks'][] = $link;
+
+        return $this;
+    }
+
+    /**
+     * Set a links to an XML feed for any comments associated with this entry.
+     * Each link is an array with keys "uri" and "type", where type is one of:
+     * "atom", "rss" or "rdf".
+     *
+     * @param array $links
+     * @return Entry
+     */
+    public function setCommentFeedLinks(array $links)
+    {
+        foreach ($links as $link) {
+            $this->setCommentFeedLink($link);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set the feed title
+     *
+     * @param string $title
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setTitle($title)
+    {
+        if (empty($title) || !is_string($title)) {
+            throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string');
+        }
+        $this->data['title'] = $title;
+
+        return $this;
+    }
+
+    /**
+     * Get an array with feed authors
+     *
+     * @return array
+     */
+    public function getAuthors()
+    {
+        if (!array_key_exists('authors', $this->data)) {
+            return;
+        }
+        return $this->data['authors'];
+    }
+
+    /**
+     * Get the entry content
+     *
+     * @return string
+     */
+    public function getContent()
+    {
+        if (!array_key_exists('content', $this->data)) {
+            return;
+        }
+        return $this->data['content'];
+    }
+
+    /**
+     * Get the entry copyright information
+     *
+     * @return string
+     */
+    public function getCopyright()
+    {
+        if (!array_key_exists('copyright', $this->data)) {
+            return;
+        }
+        return $this->data['copyright'];
+    }
+
+    /**
+     * Get the entry creation date
+     *
+     * @return string
+     */
+    public function getDateCreated()
+    {
+        if (!array_key_exists('dateCreated', $this->data)) {
+            return;
+        }
+        return $this->data['dateCreated'];
+    }
+
+    /**
+     * Get the entry modification date
+     *
+     * @return string
+     */
+    public function getDateModified()
+    {
+        if (!array_key_exists('dateModified', $this->data)) {
+            return;
+        }
+        return $this->data['dateModified'];
+    }
+
+    /**
+     * Get the entry description
+     *
+     * @return string
+     */
+    public function getDescription()
+    {
+        if (!array_key_exists('description', $this->data)) {
+            return;
+        }
+        return $this->data['description'];
+    }
+
+    /**
+     * Get the entry ID
+     *
+     * @return string
+     */
+    public function getId()
+    {
+        if (!array_key_exists('id', $this->data)) {
+            return;
+        }
+        return $this->data['id'];
+    }
+
+    /**
+     * Get a link to the HTML source
+     *
+     * @return string|null
+     */
+    public function getLink()
+    {
+        if (!array_key_exists('link', $this->data)) {
+            return;
+        }
+        return $this->data['link'];
+    }
+
+
+    /**
+     * Get all links
+     *
+     * @return array
+     */
+    public function getLinks()
+    {
+        if (!array_key_exists('links', $this->data)) {
+            return;
+        }
+        return $this->data['links'];
+    }
+
+    /**
+     * Get the entry title
+     *
+     * @return string
+     */
+    public function getTitle()
+    {
+        if (!array_key_exists('title', $this->data)) {
+            return;
+        }
+        return $this->data['title'];
+    }
+
+    /**
+     * Get the number of comments/replies for current entry
+     *
+     * @return int
+     */
+    public function getCommentCount()
+    {
+        if (!array_key_exists('commentCount', $this->data)) {
+            return;
+        }
+        return $this->data['commentCount'];
+    }
+
+    /**
+     * Returns a URI pointing to the HTML page where comments can be made on this entry
+     *
+     * @return string
+     */
+    public function getCommentLink()
+    {
+        if (!array_key_exists('commentLink', $this->data)) {
+            return;
+        }
+        return $this->data['commentLink'];
+    }
+
+    /**
+     * Returns an array of URIs pointing to a feed of all comments for this entry
+     * where the array keys indicate the feed type (atom, rss or rdf).
+     *
+     * @return string
+     */
+    public function getCommentFeedLinks()
+    {
+        if (!array_key_exists('commentFeedLinks', $this->data)) {
+            return;
+        }
+        return $this->data['commentFeedLinks'];
+    }
+
+    /**
+     * Add an entry category
+     *
+     * @param array $category
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function addCategory(array $category)
+    {
+        if (!isset($category['term'])) {
+            throw new Exception\InvalidArgumentException('Each category must be an array and '
+            . 'contain at least a "term" element containing the machine '
+            . ' readable category name');
+        }
+        if (isset($category['scheme'])) {
+            if (empty($category['scheme'])
+                || !is_string($category['scheme'])
+                || !Uri::factory($category['scheme'])->isValid()
+            ) {
+                throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of'
+                . ' a category must be a valid URI');
+            }
+        }
+        if (!isset($this->data['categories'])) {
+            $this->data['categories'] = array();
+        }
+        $this->data['categories'][] = $category;
+
+        return $this;
+    }
+
+    /**
+     * Set an array of entry categories
+     *
+     * @param array $categories
+     * @return Entry
+     */
+    public function addCategories(array $categories)
+    {
+        foreach ($categories as $category) {
+            $this->addCategory($category);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Get the entry categories
+     *
+     * @return string|null
+     */
+    public function getCategories()
+    {
+        if (!array_key_exists('categories', $this->data)) {
+            return;
+        }
+        return $this->data['categories'];
+    }
+
+    /**
+     * Adds an enclosure to the entry. The array parameter may contain the
+     * keys 'uri', 'type' and 'length'. Only 'uri' is required for Atom, though the
+     * others must also be provided or RSS rendering (where they are required)
+     * will throw an Exception.
+     *
+     * @param array $enclosure
+     * @throws Exception\InvalidArgumentException
+     * @return Entry
+     */
+    public function setEnclosure(array $enclosure)
+    {
+        if (!isset($enclosure['uri'])) {
+            throw new Exception\InvalidArgumentException('Enclosure "uri" is not set');
+        }
+        if (!Uri::factory($enclosure['uri'])->isValid()) {
+            throw new Exception\InvalidArgumentException('Enclosure "uri" is not a valid URI/IRI');
+        }
+        $this->data['enclosure'] = $enclosure;
+
+        return $this;
+    }
+
+    /**
+     * Retrieve an array of all enclosures to be added to entry.
+     *
+     * @return array
+     */
+    public function getEnclosure()
+    {
+        if (!array_key_exists('enclosure', $this->data)) {
+            return;
+        }
+        return $this->data['enclosure'];
+    }
+
+    /**
+     * Unset a specific data point
+     *
+     * @param string $name
+     * @return Entry
+     */
+    public function remove($name)
+    {
+        if (isset($this->data[$name])) {
+            unset($this->data[$name]);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Get registered extensions
+     *
+     * @return array
+     */
+    public function getExtensions()
+    {
+        return $this->extensions;
+    }
+
+    /**
+     * Return an Extension object with the matching name (postfixed with _Entry)
+     *
+     * @param string $name
+     * @return object
+     */
+    public function getExtension($name)
+    {
+        if (array_key_exists($name . '\\Entry', $this->extensions)) {
+            return $this->extensions[$name . '\\Entry'];
+        }
+        return;
+    }
+
+    /**
+     * Set the current feed type being exported to "rss" or "atom". This allows
+     * other objects to gracefully choose whether to execute or not, depending
+     * on their appropriateness for the current type, e.g. renderers.
+     *
+     * @param string $type
+     * @return Entry
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+        return $this;
+    }
+
+    /**
+     * Retrieve the current or last feed type exported.
+     *
+     * @return string Value will be "rss" or "atom"
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Method overloading: call given method on first extension implementing it
+     *
+     * @param  string $method
+     * @param  array $args
+     * @return mixed
+     * @throws Exception\BadMethodCallException if no extensions implements the method
+     */
+    public function __call($method, $args)
+    {
+        foreach ($this->extensions as $extension) {
+            try {
+                return call_user_func_array(array($extension, $method), $args);
+            } catch (\BadMethodCallException $e) {
+            }
+        }
+        throw new Exception\BadMethodCallException('Method: ' . $method
+            . ' does not exist and could not be located on a registered Extension');
+    }
+
+    /**
+     * Creates a new Zend\Feed\Writer\Source data container for use. This is NOT
+     * added to the current feed automatically, but is necessary to create a
+     * container with some initial values preset based on the current feed data.
+     *
+     * @return Source
+     */
+    public function createSource()
+    {
+        $source = new Source;
+        if ($this->getEncoding()) {
+            $source->setEncoding($this->getEncoding());
+        }
+        $source->setType($this->getType());
+        return $source;
+    }
+
+    /**
+     * Appends a Zend\Feed\Writer\Entry object representing a new entry/item
+     * the feed data container's internal group of entries.
+     *
+     * @param Source $source
+     * @return Entry
+     */
+    public function setSource(Source $source)
+    {
+        $this->data['source'] = $source;
+        return $this;
+    }
+
+    /**
+     * @return Source
+     */
+    public function getSource()
+    {
+        if (isset($this->data['source'])) {
+            return $this->data['source'];
+        }
+        return;
+    }
+
+    /**
+     * Load extensions from Zend\Feed\Writer\Writer
+     *
+     * @return void
+     */
+    protected function _loadExtensions()
+    {
+        $all     = Writer::getExtensions();
+        $manager = Writer::getExtensionManager();
+        $exts    = $all['entry'];
+        foreach ($exts as $ext) {
+            $this->extensions[$ext] = $manager->get($ext);
+            $this->extensions[$ext]->setEncoding($this->getEncoding());
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-feed/src/Writer/Exception/BadMethodCallException.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2ea2bef008cb55f5cbab61369b35b06ea0c6c45
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Exception/BadMethodCallException.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Exception;
+
+use Zend\Feed\Exception;
+
+/**
+ * Feed exceptions
+ *
+ * Class to represent exceptions that occur during Feed operations.
+ */
+class BadMethodCallException extends Exception\BadMethodCallException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-feed/src/Writer/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..ee8bdaf62bd348caf31ec32404b4cd5ce5dc62ae
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Exception/ExceptionInterface.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Exception;
+
+/**
+ * Feed exceptions
+ *
+ * Interface to represent exceptions that occur during Feed operations.
+ */
+interface ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-feed/src/Writer/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8c4a8b82cb721a69b1d5f84d9416bb592ba4577
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Exception/InvalidArgumentException.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Exception;
+
+use Zend\Feed\Exception;
+
+/**
+ * Feed exceptions
+ *
+ * Class to represent exceptions that occur during Feed operations.
+ */
+class InvalidArgumentException extends Exception\InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Exception/RuntimeException.php b/core/vendor/zendframework/zend-feed/src/Writer/Exception/RuntimeException.php
new file mode 100644
index 0000000000000000000000000000000000000000..ae8ee361f7c7528418f0a90457b4f08fdaffd785
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Exception/RuntimeException.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Exception;
+
+use Zend\Feed\Exception;
+
+class RuntimeException extends Exception\RuntimeException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/AbstractRenderer.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/AbstractRenderer.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a32b4756293e56d0eda7732df350313ec3db284
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/AbstractRenderer.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension;
+
+use DOMDocument;
+use DOMElement;
+
+/**
+*/
+abstract class AbstractRenderer implements RendererInterface
+{
+    /**
+     * @var DOMDocument
+     */
+    protected $dom = null;
+
+    /**
+     * @var mixed
+     */
+    protected $entry = null;
+
+    /**
+     * @var DOMElement
+     */
+    protected $base = null;
+
+    /**
+     * @var mixed
+     */
+    protected $container = null;
+
+    /**
+     * @var string
+     */
+    protected $type = null;
+
+    /**
+     * @var DOMElement
+     */
+    protected $rootElement = null;
+
+    /**
+     * Encoding of all text values
+     *
+     * @var string
+     */
+    protected $encoding = 'UTF-8';
+
+    /**
+     * Set the data container
+     *
+     * @param  mixed $container
+     * @return AbstractRenderer
+     */
+    public function setDataContainer($container)
+    {
+        $this->container = $container;
+        return $this;
+    }
+
+    /**
+     * Set feed encoding
+     *
+     * @param  string $enc
+     * @return AbstractRenderer
+     */
+    public function setEncoding($enc)
+    {
+        $this->encoding = $enc;
+        return $this;
+    }
+
+    /**
+     * Get feed encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        return $this->encoding;
+    }
+
+    /**
+     * Set DOMDocument and DOMElement on which to operate
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $base
+     * @return AbstractRenderer
+     */
+    public function setDomDocument(DOMDocument $dom, DOMElement $base)
+    {
+        $this->dom  = $dom;
+        $this->base = $base;
+        return $this;
+    }
+
+    /**
+     * Get data container being rendered
+     *
+     * @return mixed
+     */
+    public function getDataContainer()
+    {
+        return $this->container;
+    }
+
+    /**
+     * Set feed type
+     *
+     * @param  string $type
+     * @return AbstractRenderer
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+        return $this;
+    }
+
+    /**
+     * Get feedtype
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Set root element of document
+     *
+     * @param  DOMElement $root
+     * @return AbstractRenderer
+     */
+    public function setRootElement(DOMElement $root)
+    {
+        $this->rootElement = $root;
+        return $this;
+    }
+
+    /**
+     * Get root element
+     *
+     * @return DOMElement
+     */
+    public function getRootElement()
+    {
+        return $this->rootElement;
+    }
+
+    /**
+     * Append namespaces to feed
+     *
+     * @return void
+     */
+    abstract protected function _appendNamespaces();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/Atom/Renderer/Feed.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Atom/Renderer/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..25571c0e0d63185a1e8e844700c60b070c09fcbe
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Atom/Renderer/Feed.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\Atom\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Feed extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render feed
+     *
+     * @return void
+     */
+    public function render()
+    {
+        /**
+         * RSS 2.0 only. Used mainly to include Atom links and
+         * Pubsubhubbub Hub endpoint URIs under the Atom namespace
+         */
+        if (strtolower($this->getType()) == 'atom') {
+            return;
+        }
+        $this->_setFeedLinks($this->dom, $this->base);
+        $this->_setHubs($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append namespaces to root element of feed
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:atom',
+            'http://www.w3.org/2005/Atom');
+    }
+
+    /**
+     * Set feed link elements
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setFeedLinks(DOMDocument $dom, DOMElement $root)
+    {
+        $flinks = $this->getDataContainer()->getFeedLinks();
+        if (!$flinks || empty($flinks)) {
+            return;
+        }
+        foreach ($flinks as $type => $href) {
+            if (strtolower($type) == $this->getType()) { // issue 2605
+                $mime  = 'application/' . strtolower($type) . '+xml';
+                $flink = $dom->createElement('atom:link');
+                $root->appendChild($flink);
+                $flink->setAttribute('rel', 'self');
+                $flink->setAttribute('type', $mime);
+                $flink->setAttribute('href', $href);
+            }
+        }
+        $this->called = true;
+    }
+
+    /**
+     * Set PuSH hubs
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setHubs(DOMDocument $dom, DOMElement $root)
+    {
+        $hubs = $this->getDataContainer()->getHubs();
+        if (!$hubs || empty($hubs)) {
+            return;
+        }
+        foreach ($hubs as $hubUrl) {
+            $hub = $dom->createElement('atom:link');
+            $hub->setAttribute('rel', 'hub');
+            $hub->setAttribute('href', $hubUrl);
+            $root->appendChild($hub);
+        }
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/Content/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Content/Renderer/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..939b2492bc921533b9e9fe801f2090da5a9b1828
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Content/Renderer/Entry.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\Content\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render entry
+     *
+     * @return void
+     */
+    public function render()
+    {
+        if (strtolower($this->getType()) == 'atom') {
+            return;
+        }
+        $this->_setContent($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append namespaces to root element
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:content',
+            'http://purl.org/rss/1.0/modules/content/');
+    }
+
+    /**
+     * Set entry content
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setContent(DOMDocument $dom, DOMElement $root)
+    {
+        $content = $this->getDataContainer()->getContent();
+        if (!$content) {
+            return;
+        }
+        $element = $dom->createElement('content:encoded');
+        $root->appendChild($element);
+        $cdata = $dom->createCDATASection($content);
+        $element->appendChild($cdata);
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/DublinCore/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/DublinCore/Renderer/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..5cc86cd6b8bdb6b174cfc2a6e78f2b675d5db8f5
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/DublinCore/Renderer/Entry.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\DublinCore\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render entry
+     *
+     * @return void
+     */
+    public function render()
+    {
+        if (strtolower($this->getType()) == 'atom') {
+            return;
+        }
+        $this->_setAuthors($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append namespaces to entry
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:dc',
+            'http://purl.org/dc/elements/1.1/');
+    }
+
+    /**
+     * Set entry author elements
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->getDataContainer()->getAuthors();
+        if (!$authors || empty($authors)) {
+            return;
+        }
+        foreach ($authors as $data) {
+            $author = $this->dom->createElement('dc:creator');
+            if (array_key_exists('name', $data)) {
+                $text = $dom->createTextNode($data['name']);
+                $author->appendChild($text);
+                $root->appendChild($author);
+            }
+        }
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/DublinCore/Renderer/Feed.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/DublinCore/Renderer/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..160b5a48481fecd03e5d13a9bbe89479ec1eba74
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/DublinCore/Renderer/Feed.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\DublinCore\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Feed extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render feed
+     *
+     * @return void
+     */
+    public function render()
+    {
+        if (strtolower($this->getType()) == 'atom') {
+            return;
+        }
+        $this->_setAuthors($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append namespaces to feed element
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:dc',
+            'http://purl.org/dc/elements/1.1/');
+    }
+
+    /**
+     * Set feed authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->getDataContainer()->getAuthors();
+        if (!$authors || empty($authors)) {
+            return;
+        }
+        foreach ($authors as $data) {
+            $author = $this->dom->createElement('dc:creator');
+            if (array_key_exists('name', $data)) {
+                $text = $dom->createTextNode($data['name']);
+                $author->appendChild($text);
+                $root->appendChild($author);
+            }
+        }
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..c06e8a97021894f9d92caa4270fd1bc42e81365e
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Entry.php
@@ -0,0 +1,246 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\ITunes;
+
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Extension;
+use Zend\Stdlib\StringUtils;
+use Zend\Stdlib\StringWrapper\StringWrapperInterface;
+
+/**
+*/
+class Entry
+{
+    /**
+     * Array of Feed data for rendering by Extension's renderers
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Encoding of all text values
+     *
+     * @var string
+     */
+    protected $encoding = 'UTF-8';
+
+    /**
+     * The used string wrapper supporting encoding
+     *
+     * @var StringWrapperInterface
+     */
+    protected $stringWrapper;
+
+    public function __construct()
+    {
+        $this->stringWrapper = StringUtils::getWrapper($this->encoding);
+    }
+
+    /**
+     * Set feed encoding
+     *
+     * @param  string $enc
+     * @return Entry
+     */
+    public function setEncoding($enc)
+    {
+        $this->stringWrapper = StringUtils::getWrapper($enc);
+        $this->encoding      = $enc;
+        return $this;
+    }
+
+    /**
+     * Get feed encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        return $this->encoding;
+    }
+
+    /**
+     * Set a block value of "yes" or "no". You may also set an empty string.
+     *
+     * @param  string
+     * @return Entry
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesBlock($value)
+    {
+        if (!ctype_alpha($value) && strlen($value) > 0) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
+            . ' contain alphabetic characters');
+        }
+
+        if ($this->stringWrapper->strlen($value) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
+            . ' contain a maximum of 255 characters');
+        }
+        $this->data['block'] = $value;
+    }
+
+    /**
+     * Add authors to itunes entry
+     *
+     * @param  array $values
+     * @return Entry
+     */
+    public function addItunesAuthors(array $values)
+    {
+        foreach ($values as $value) {
+            $this->addItunesAuthor($value);
+        }
+        return $this;
+    }
+
+    /**
+     * Add author to itunes entry
+     *
+     * @param  string $value
+     * @return Entry
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function addItunesAuthor($value)
+    {
+        if ($this->stringWrapper->strlen($value) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only'
+            . ' contain a maximum of 255 characters each');
+        }
+        if (!isset($this->data['authors'])) {
+            $this->data['authors'] = array();
+        }
+        $this->data['authors'][] = $value;
+        return $this;
+    }
+
+    /**
+     * Set duration
+     *
+     * @param  int $value
+     * @return Entry
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesDuration($value)
+    {
+        $value = (string) $value;
+        if (!ctype_digit($value)
+            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value)
+            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value)
+        ) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only'
+            . ' be of a specified [[HH:]MM:]SS format');
+        }
+        $this->data['duration'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set "explicit" flag
+     *
+     * @param  bool $value
+     * @return Entry
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesExplicit($value)
+    {
+        if (!in_array($value, array('yes', 'no', 'clean'))) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only'
+            . ' be one of "yes", "no" or "clean"');
+        }
+        $this->data['explicit'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set keywords
+     *
+     * @param  array $value
+     * @return Entry
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesKeywords(array $value)
+    {
+        if (count($value) > 12) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
+            . ' contain a maximum of 12 terms');
+        }
+
+        $concat = implode(',', $value);
+        if ($this->stringWrapper->strlen($concat) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
+            . ' have a concatenated length of 255 chars where terms are delimited'
+            . ' by a comma');
+        }
+        $this->data['keywords'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set subtitle
+     *
+     * @param  string $value
+     * @return Entry
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesSubtitle($value)
+    {
+        if ($this->stringWrapper->strlen($value) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only'
+            . ' contain a maximum of 255 characters');
+        }
+        $this->data['subtitle'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set summary
+     *
+     * @param  string $value
+     * @return Entry
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesSummary($value)
+    {
+        if ($this->stringWrapper->strlen($value) > 4000) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only'
+            . ' contain a maximum of 4000 characters');
+        }
+        $this->data['summary'] = $value;
+        return $this;
+    }
+
+    /**
+     * Overloading to itunes specific setters
+     *
+     * @param  string $method
+     * @param  array $params
+     * @throws Writer\Exception\BadMethodCallException
+     * @return mixed
+     */
+    public function __call($method, array $params)
+    {
+        $point = lcfirst(substr($method, 9));
+        if (!method_exists($this, 'setItunes' . ucfirst($point))
+            && !method_exists($this, 'addItunes' . ucfirst($point))
+        ) {
+            throw new Writer\Exception\BadMethodCallException(
+                'invalid method: ' . $method
+            );
+        }
+        if (!array_key_exists($point, $this->data)
+            || empty($this->data[$point])
+        ) {
+            return;
+        }
+        return $this->data[$point];
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Feed.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..08a6b13fe6a429f93b11ef39dfc3725c985541d4
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Feed.php
@@ -0,0 +1,362 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\ITunes;
+
+use Zend\Feed\Uri;
+use Zend\Feed\Writer;
+use Zend\Stdlib\StringUtils;
+use Zend\Stdlib\StringWrapper\StringWrapperInterface;
+
+/**
+*/
+class Feed
+{
+    /**
+     * Array of Feed data for rendering by Extension's renderers
+     *
+     * @var array
+     */
+    protected $data = array();
+
+    /**
+     * Encoding of all text values
+     *
+     * @var string
+     */
+    protected $encoding = 'UTF-8';
+
+    /**
+     * The used string wrapper supporting encoding
+     *
+     * @var StringWrapperInterface
+     */
+    protected $stringWrapper;
+
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->stringWrapper = StringUtils::getWrapper($this->encoding);
+    }
+
+    /**
+     * Set feed encoding
+     *
+     * @param  string $enc
+     * @return Feed
+     */
+    public function setEncoding($enc)
+    {
+        $this->stringWrapper = StringUtils::getWrapper($enc);
+        $this->encoding      = $enc;
+        return $this;
+    }
+
+    /**
+     * Get feed encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        return $this->encoding;
+    }
+
+    /**
+     * Set a block value of "yes" or "no". You may also set an empty string.
+     *
+     * @param  string
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesBlock($value)
+    {
+        if (!ctype_alpha($value) && strlen($value) > 0) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
+            . ' contain alphabetic characters');
+        }
+        if ($this->stringWrapper->strlen($value) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only'
+            . ' contain a maximum of 255 characters');
+        }
+        $this->data['block'] = $value;
+        return $this;
+    }
+
+    /**
+     * Add feed authors
+     *
+     * @param  array $values
+     * @return Feed
+     */
+    public function addItunesAuthors(array $values)
+    {
+        foreach ($values as $value) {
+            $this->addItunesAuthor($value);
+        }
+        return $this;
+    }
+
+    /**
+     * Add feed author
+     *
+     * @param  string $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function addItunesAuthor($value)
+    {
+        if ($this->stringWrapper->strlen($value) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only'
+            . ' contain a maximum of 255 characters each');
+        }
+        if (!isset($this->data['authors'])) {
+            $this->data['authors'] = array();
+        }
+        $this->data['authors'][] = $value;
+        return $this;
+    }
+
+    /**
+     * Set feed categories
+     *
+     * @param  array $values
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesCategories(array $values)
+    {
+        if (!isset($this->data['categories'])) {
+            $this->data['categories'] = array();
+        }
+        foreach ($values as $key => $value) {
+            if (!is_array($value)) {
+                if ($this->stringWrapper->strlen($value) > 255) {
+                    throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only'
+                    . ' contain a maximum of 255 characters each');
+                }
+                $this->data['categories'][] = $value;
+            } else {
+                if ($this->stringWrapper->strlen($key) > 255) {
+                    throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only'
+                    . ' contain a maximum of 255 characters each');
+                }
+                $this->data['categories'][$key] = array();
+                foreach ($value as $val) {
+                    if ($this->stringWrapper->strlen($val) > 255) {
+                        throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only'
+                        . ' contain a maximum of 255 characters each');
+                    }
+                    $this->data['categories'][$key][] = $val;
+                }
+            }
+        }
+        return $this;
+    }
+
+    /**
+     * Set feed image (icon)
+     *
+     * @param  string $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesImage($value)
+    {
+        if (!Uri::factory($value)->isValid()) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only'
+            . ' be a valid URI/IRI');
+        }
+        if (!in_array(substr($value, -3), array('jpg', 'png'))) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only'
+            . ' use file extension "jpg" or "png" which must be the last three'
+            . ' characters of the URI (i.e. no query string or fragment)');
+        }
+        $this->data['image'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set feed cumulative duration
+     *
+     * @param  string $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesDuration($value)
+    {
+        $value = (string) $value;
+        if (!ctype_digit($value)
+            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value)
+            && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value)
+        ) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only'
+            . ' be of a specified [[HH:]MM:]SS format');
+        }
+        $this->data['duration'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set "explicit" flag
+     *
+     * @param  bool $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesExplicit($value)
+    {
+        if (!in_array($value, array('yes', 'no', 'clean'))) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only'
+            . ' be one of "yes", "no" or "clean"');
+        }
+        $this->data['explicit'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set feed keywords
+     *
+     * @param  array $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesKeywords(array $value)
+    {
+        if (count($value) > 12) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
+            . ' contain a maximum of 12 terms');
+        }
+        $concat = implode(',', $value);
+        if ($this->stringWrapper->strlen($concat) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only'
+            . ' have a concatenated length of 255 chars where terms are delimited'
+            . ' by a comma');
+        }
+        $this->data['keywords'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set new feed URL
+     *
+     * @param  string $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesNewFeedUrl($value)
+    {
+        if (!Uri::factory($value)->isValid()) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "newFeedUrl" may only'
+            . ' be a valid URI/IRI');
+        }
+        $this->data['newFeedUrl'] = $value;
+        return $this;
+    }
+
+    /**
+     * Add feed owners
+     *
+     * @param  array $values
+     * @return Feed
+     */
+    public function addItunesOwners(array $values)
+    {
+        foreach ($values as $value) {
+            $this->addItunesOwner($value);
+        }
+        return $this;
+    }
+
+    /**
+     * Add feed owner
+     *
+     * @param  array $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function addItunesOwner(array $value)
+    {
+        if (!isset($value['name']) || !isset($value['email'])) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" must'
+            . ' be an array containing keys "name" and "email"');
+        }
+        if ($this->stringWrapper->strlen($value['name']) > 255
+            || $this->stringWrapper->strlen($value['email']) > 255
+        ) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" may only'
+            . ' contain a maximum of 255 characters each for "name" and "email"');
+        }
+        if (!isset($this->data['owners'])) {
+            $this->data['owners'] = array();
+        }
+        $this->data['owners'][] = $value;
+        return $this;
+    }
+
+    /**
+     * Set feed subtitle
+     *
+     * @param  string $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesSubtitle($value)
+    {
+        if ($this->stringWrapper->strlen($value) > 255) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only'
+            . ' contain a maximum of 255 characters');
+        }
+        $this->data['subtitle'] = $value;
+        return $this;
+    }
+
+    /**
+     * Set feed summary
+     *
+     * @param  string $value
+     * @return Feed
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function setItunesSummary($value)
+    {
+        if ($this->stringWrapper->strlen($value) > 4000) {
+            throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only'
+            . ' contain a maximum of 4000 characters');
+        }
+        $this->data['summary'] = $value;
+        return $this;
+    }
+
+    /**
+     * Overloading: proxy to internal setters
+     *
+     * @param  string $method
+     * @param  array $params
+     * @return mixed
+     * @throws Writer\Exception\BadMethodCallException
+     */
+    public function __call($method, array $params)
+    {
+        $point = lcfirst(substr($method, 9));
+        if (!method_exists($this, 'setItunes' . ucfirst($point))
+            && !method_exists($this, 'addItunes' . ucfirst($point))
+        ) {
+            throw new Writer\Exception\BadMethodCallException(
+                'invalid method: ' . $method
+            );
+        }
+        if (!array_key_exists($point, $this->data) || empty($this->data[$point])) {
+            return;
+        }
+        return $this->data[$point];
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Renderer/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..ed8f732ed7c3b872d77b0c872cfedd3fd8133a69
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Renderer/Entry.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\ITunes\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render entry
+     *
+     * @return void
+     */
+    public function render()
+    {
+        $this->_setAuthors($this->dom, $this->base);
+        $this->_setBlock($this->dom, $this->base);
+        $this->_setDuration($this->dom, $this->base);
+        $this->_setExplicit($this->dom, $this->base);
+        $this->_setKeywords($this->dom, $this->base);
+        $this->_setSubtitle($this->dom, $this->base);
+        $this->_setSummary($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append namespaces to entry root
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:itunes',
+            'http://www.itunes.com/dtds/podcast-1.0.dtd');
+    }
+
+    /**
+     * Set entry authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->getDataContainer()->getItunesAuthors();
+        if (!$authors || empty($authors)) {
+            return;
+        }
+        foreach ($authors as $author) {
+            $el = $dom->createElement('itunes:author');
+            $text = $dom->createTextNode($author);
+            $el->appendChild($text);
+            $root->appendChild($el);
+            $this->called = true;
+        }
+    }
+
+    /**
+     * Set itunes block
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setBlock(DOMDocument $dom, DOMElement $root)
+    {
+        $block = $this->getDataContainer()->getItunesBlock();
+        if ($block === null) {
+            return;
+        }
+        $el = $dom->createElement('itunes:block');
+        $text = $dom->createTextNode($block);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set entry duration
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDuration(DOMDocument $dom, DOMElement $root)
+    {
+        $duration = $this->getDataContainer()->getItunesDuration();
+        if (!$duration) {
+            return;
+        }
+        $el = $dom->createElement('itunes:duration');
+        $text = $dom->createTextNode($duration);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set explicit flag
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setExplicit(DOMDocument $dom, DOMElement $root)
+    {
+        $explicit = $this->getDataContainer()->getItunesExplicit();
+        if ($explicit === null) {
+            return;
+        }
+        $el = $dom->createElement('itunes:explicit');
+        $text = $dom->createTextNode($explicit);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set entry keywords
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setKeywords(DOMDocument $dom, DOMElement $root)
+    {
+        $keywords = $this->getDataContainer()->getItunesKeywords();
+        if (!$keywords || empty($keywords)) {
+            return;
+        }
+        $el = $dom->createElement('itunes:keywords');
+        $text = $dom->createTextNode(implode(',', $keywords));
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set entry subtitle
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setSubtitle(DOMDocument $dom, DOMElement $root)
+    {
+        $subtitle = $this->getDataContainer()->getItunesSubtitle();
+        if (!$subtitle) {
+            return;
+        }
+        $el = $dom->createElement('itunes:subtitle');
+        $text = $dom->createTextNode($subtitle);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set entry summary
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setSummary(DOMDocument $dom, DOMElement $root)
+    {
+        $summary = $this->getDataContainer()->getItunesSummary();
+        if (!$summary) {
+            return;
+        }
+        $el = $dom->createElement('itunes:summary');
+        $text = $dom->createTextNode($summary);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Renderer/Feed.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Renderer/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..d978f03201e4bc2b78ef705d1b7c7672d9f6b9f2
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/ITunes/Renderer/Feed.php
@@ -0,0 +1,303 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\ITunes\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Feed extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render feed
+     *
+     * @return void
+     */
+    public function render()
+    {
+        $this->_setAuthors($this->dom, $this->base);
+        $this->_setBlock($this->dom, $this->base);
+        $this->_setCategories($this->dom, $this->base);
+        $this->_setImage($this->dom, $this->base);
+        $this->_setDuration($this->dom, $this->base);
+        $this->_setExplicit($this->dom, $this->base);
+        $this->_setKeywords($this->dom, $this->base);
+        $this->_setNewFeedUrl($this->dom, $this->base);
+        $this->_setOwners($this->dom, $this->base);
+        $this->_setSubtitle($this->dom, $this->base);
+        $this->_setSummary($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append feed namespaces
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:itunes',
+            'http://www.itunes.com/dtds/podcast-1.0.dtd');
+    }
+
+    /**
+     * Set feed authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->getDataContainer()->getItunesAuthors();
+        if (!$authors || empty($authors)) {
+            return;
+        }
+        foreach ($authors as $author) {
+            $el = $dom->createElement('itunes:author');
+            $text = $dom->createTextNode($author);
+            $el->appendChild($text);
+            $root->appendChild($el);
+        }
+        $this->called = true;
+    }
+
+    /**
+     * Set feed itunes block
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setBlock(DOMDocument $dom, DOMElement $root)
+    {
+        $block = $this->getDataContainer()->getItunesBlock();
+        if ($block === null) {
+            return;
+        }
+        $el = $dom->createElement('itunes:block');
+        $text = $dom->createTextNode($block);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set feed categories
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCategories(DOMDocument $dom, DOMElement $root)
+    {
+        $cats = $this->getDataContainer()->getItunesCategories();
+        if (!$cats || empty($cats)) {
+            return;
+        }
+        foreach ($cats as $key => $cat) {
+            if (!is_array($cat)) {
+                $el = $dom->createElement('itunes:category');
+                $el->setAttribute('text', $cat);
+                $root->appendChild($el);
+            } else {
+                $el = $dom->createElement('itunes:category');
+                $el->setAttribute('text', $key);
+                $root->appendChild($el);
+                foreach ($cat as $subcat) {
+                    $el2 = $dom->createElement('itunes:category');
+                    $el2->setAttribute('text', $subcat);
+                    $el->appendChild($el2);
+                }
+            }
+        }
+        $this->called = true;
+    }
+
+    /**
+     * Set feed image (icon)
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setImage(DOMDocument $dom, DOMElement $root)
+    {
+        $image = $this->getDataContainer()->getItunesImage();
+        if (!$image) {
+            return;
+        }
+        $el = $dom->createElement('itunes:image');
+        $el->setAttribute('href', $image);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set feed cumulative duration
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDuration(DOMDocument $dom, DOMElement $root)
+    {
+        $duration = $this->getDataContainer()->getItunesDuration();
+        if (!$duration) {
+            return;
+        }
+        $el = $dom->createElement('itunes:duration');
+        $text = $dom->createTextNode($duration);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set explicit flag
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setExplicit(DOMDocument $dom, DOMElement $root)
+    {
+        $explicit = $this->getDataContainer()->getItunesExplicit();
+        if ($explicit === null) {
+            return;
+        }
+        $el = $dom->createElement('itunes:explicit');
+        $text = $dom->createTextNode($explicit);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set feed keywords
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setKeywords(DOMDocument $dom, DOMElement $root)
+    {
+        $keywords = $this->getDataContainer()->getItunesKeywords();
+        if (!$keywords || empty($keywords)) {
+            return;
+        }
+        $el = $dom->createElement('itunes:keywords');
+        $text = $dom->createTextNode(implode(',', $keywords));
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set feed's new URL
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setNewFeedUrl(DOMDocument $dom, DOMElement $root)
+    {
+        $url = $this->getDataContainer()->getItunesNewFeedUrl();
+        if (!$url) {
+            return;
+        }
+        $el = $dom->createElement('itunes:new-feed-url');
+        $text = $dom->createTextNode($url);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set feed owners
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setOwners(DOMDocument $dom, DOMElement $root)
+    {
+        $owners = $this->getDataContainer()->getItunesOwners();
+        if (!$owners || empty($owners)) {
+            return;
+        }
+        foreach ($owners as $owner) {
+            $el = $dom->createElement('itunes:owner');
+            $name = $dom->createElement('itunes:name');
+            $text = $dom->createTextNode($owner['name']);
+            $name->appendChild($text);
+            $email = $dom->createElement('itunes:email');
+            $text = $dom->createTextNode($owner['email']);
+            $email->appendChild($text);
+            $root->appendChild($el);
+            $el->appendChild($name);
+            $el->appendChild($email);
+        }
+        $this->called = true;
+    }
+
+    /**
+     * Set feed subtitle
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setSubtitle(DOMDocument $dom, DOMElement $root)
+    {
+        $subtitle = $this->getDataContainer()->getItunesSubtitle();
+        if (!$subtitle) {
+            return;
+        }
+        $el = $dom->createElement('itunes:subtitle');
+        $text = $dom->createTextNode($subtitle);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+
+    /**
+     * Set feed summary
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setSummary(DOMDocument $dom, DOMElement $root)
+    {
+        $summary = $this->getDataContainer()->getItunesSummary();
+        if (!$summary) {
+            return;
+        }
+        $el = $dom->createElement('itunes:summary');
+        $text = $dom->createTextNode($summary);
+        $el->appendChild($text);
+        $root->appendChild($el);
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/RendererInterface.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/RendererInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9afe88b2a2dc6b03025752203d6a4440aa911230
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/RendererInterface.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension;
+
+use DOMDocument;
+use DOMElement;
+
+/**
+*/
+interface RendererInterface
+{
+    /**
+     * Set the data container
+     *
+     * @param  mixed $container
+     * @return void
+     */
+    public function setDataContainer($container);
+
+    /**
+     * Retrieve container
+     *
+     * @return mixed
+     */
+    public function getDataContainer();
+
+    /**
+     * Set DOMDocument and DOMElement on which to operate
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $base
+     * @return void
+     */
+    public function setDomDocument(DOMDocument $dom, DOMElement $base);
+
+    /**
+     * Render
+     *
+     * @return void
+     */
+    public function render();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/Slash/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Slash/Renderer/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..c74cb02023f443eaa99454c0af42489b4ec89fa2
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Slash/Renderer/Entry.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\Slash\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render entry
+     *
+     * @return void
+     */
+    public function render()
+    {
+        if (strtolower($this->getType()) == 'atom') {
+            return; // RSS 2.0 only
+        }
+        $this->_setCommentCount($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append entry namespaces
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:slash',
+            'http://purl.org/rss/1.0/modules/slash/');
+    }
+
+    /**
+     * Set entry comment count
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCommentCount(DOMDocument $dom, DOMElement $root)
+    {
+        $count = $this->getDataContainer()->getCommentCount();
+        if (!$count) {
+            $count = 0;
+        }
+        $tcount = $this->dom->createElement('slash:comments');
+        $tcount->nodeValue = $count;
+        $root->appendChild($tcount);
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/Threading/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Threading/Renderer/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f19641b89572795ba1a6a42ad9ca448ae076a6a
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/Threading/Renderer/Entry.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\Threading\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render entry
+     *
+     * @return void
+     */
+    public function render()
+    {
+        if (strtolower($this->getType()) == 'rss') {
+            return; // Atom 1.0 only
+        }
+        $this->_setCommentLink($this->dom, $this->base);
+        $this->_setCommentFeedLinks($this->dom, $this->base);
+        $this->_setCommentCount($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append entry namespaces
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:thr',
+            'http://purl.org/syndication/thread/1.0');
+    }
+
+    /**
+     * Set comment link
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCommentLink(DOMDocument $dom, DOMElement $root)
+    {
+        $link = $this->getDataContainer()->getCommentLink();
+        if (!$link) {
+            return;
+        }
+        $clink = $this->dom->createElement('link');
+        $clink->setAttribute('rel', 'replies');
+        $clink->setAttribute('type', 'text/html');
+        $clink->setAttribute('href', $link);
+        $count = $this->getDataContainer()->getCommentCount();
+        if ($count !== null) {
+            $clink->setAttribute('thr:count', $count);
+        }
+        $root->appendChild($clink);
+        $this->called = true;
+    }
+
+    /**
+     * Set comment feed links
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root)
+    {
+        $links = $this->getDataContainer()->getCommentFeedLinks();
+        if (!$links || empty($links)) {
+            return;
+        }
+        foreach ($links as $link) {
+            $flink = $this->dom->createElement('link');
+            $flink->setAttribute('rel', 'replies');
+            $flink->setAttribute('type', 'application/' . $link['type'] . '+xml');
+            $flink->setAttribute('href', $link['uri']);
+            $count = $this->getDataContainer()->getCommentCount();
+            if ($count !== null) {
+                $flink->setAttribute('thr:count', $count);
+            }
+            $root->appendChild($flink);
+            $this->called = true;
+        }
+    }
+
+    /**
+     * Set entry comment count
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCommentCount(DOMDocument $dom, DOMElement $root)
+    {
+        $count = $this->getDataContainer()->getCommentCount();
+        if ($count === null) {
+            return;
+        }
+        $tcount = $this->dom->createElement('thr:total');
+        $tcount->nodeValue = $count;
+        $root->appendChild($tcount);
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Extension/WellFormedWeb/Renderer/Entry.php b/core/vendor/zendframework/zend-feed/src/Writer/Extension/WellFormedWeb/Renderer/Entry.php
new file mode 100644
index 0000000000000000000000000000000000000000..48c0d8f2e3248803cb8f543452ea0afcfd03313d
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Extension/WellFormedWeb/Renderer/Entry.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Extension\WellFormedWeb\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer\Extension;
+
+/**
+*/
+class Entry extends Extension\AbstractRenderer
+{
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $called = false;
+
+    /**
+     * Render entry
+     *
+     * @return void
+     */
+    public function render()
+    {
+        if (strtolower($this->getType()) == 'atom') {
+            return; // RSS 2.0 only
+        }
+        $this->_setCommentFeedLinks($this->dom, $this->base);
+        if ($this->called) {
+            $this->_appendNamespaces();
+        }
+    }
+
+    /**
+     * Append entry namespaces
+     *
+     * @return void
+     */
+    protected function _appendNamespaces()
+    {
+        $this->getRootElement()->setAttribute('xmlns:wfw',
+            'http://wellformedweb.org/CommentAPI/');
+    }
+
+    /**
+     * Set entry comment feed links
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root)
+    {
+        $links = $this->getDataContainer()->getCommentFeedLinks();
+        if (!$links || empty($links)) {
+            return;
+        }
+        foreach ($links as $link) {
+            if ($link['type'] == 'rss') {
+                $flink = $this->dom->createElement('wfw:commentRss');
+                $text = $dom->createTextNode($link['uri']);
+                $flink->appendChild($text);
+                $root->appendChild($flink);
+            }
+        }
+        $this->called = true;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/ExtensionManager.php b/core/vendor/zendframework/zend-feed/src/Writer/ExtensionManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..89be41d88240f735f50b7e01f7abfbcff5067fd2
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/ExtensionManager.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+/**
+ * Default implementation of ExtensionManagerInterface
+ *
+ * Decorator of ExtensionPluginManager.
+ */
+class ExtensionManager implements ExtensionManagerInterface
+{
+    protected $pluginManager;
+
+    /**
+     * Constructor
+     *
+     * Seeds the extension manager with a plugin manager; if none provided,
+     * creates an instance.
+     *
+     * @param  null|ExtensionPluginManager $pluginManager
+     */
+    public function __construct(ExtensionPluginManager $pluginManager = null)
+    {
+        if (null === $pluginManager) {
+            $pluginManager = new ExtensionPluginManager();
+        }
+        $this->pluginManager = $pluginManager;
+    }
+
+    /**
+     * Method overloading
+     *
+     * Proxy to composed ExtensionPluginManager instance.
+     *
+     * @param  string $method
+     * @param  array $args
+     * @return mixed
+     * @throws Exception\BadMethodCallException
+     */
+    public function __call($method, $args)
+    {
+        if (!method_exists($this->pluginManager, $method)) {
+            throw new Exception\BadMethodCallException(sprintf(
+                'Method by name of %s does not exist in %s',
+                $method,
+                __CLASS__
+            ));
+        }
+        return call_user_func_array(array($this->pluginManager, $method), $args);
+    }
+
+    /**
+     * Get the named extension
+     *
+     * @param  string $name
+     * @return Extension\AbstractRenderer
+     */
+    public function get($name)
+    {
+        return $this->pluginManager->get($name);
+    }
+
+    /**
+     * Do we have the named extension?
+     *
+     * @param  string $name
+     * @return bool
+     */
+    public function has($name)
+    {
+        return $this->pluginManager->has($name);
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/ExtensionManagerInterface.php b/core/vendor/zendframework/zend-feed/src/Writer/ExtensionManagerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..b0e28a08c4b3f5e7a7f0481f4c20bc2470f2be2f
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/ExtensionManagerInterface.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+interface ExtensionManagerInterface
+{
+    /**
+     * Do we have the extension?
+     *
+     * @param  string $extension
+     * @return bool
+     */
+    public function has($extension);
+
+    /**
+     * Retrieve the extension
+     *
+     * @param  string $extension
+     * @return mixed
+     */
+    public function get($extension);
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/ExtensionPluginManager.php b/core/vendor/zendframework/zend-feed/src/Writer/ExtensionPluginManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..6763374cabb27c65ac3eb179363714a3db692392
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/ExtensionPluginManager.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+use Zend\ServiceManager\AbstractPluginManager;
+
+/**
+ * Plugin manager implementation for feed writer extensions
+ *
+ * Validation checks that we have an Entry, Feed, or Extension\AbstractRenderer.
+ */
+class ExtensionPluginManager extends AbstractPluginManager
+{
+    /**
+     * Default set of extension classes
+     *
+     * @var array
+     */
+    protected $invokableClasses = array(
+        'atomrendererfeed'           => 'Zend\Feed\Writer\Extension\Atom\Renderer\Feed',
+        'contentrendererentry'       => 'Zend\Feed\Writer\Extension\Content\Renderer\Entry',
+        'dublincorerendererentry'    => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry',
+        'dublincorerendererfeed'     => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed',
+        'itunesentry'                => 'Zend\Feed\Writer\Extension\ITunes\Entry',
+        'itunesfeed'                 => 'Zend\Feed\Writer\Extension\ITunes\Feed',
+        'itunesrendererentry'        => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Entry',
+        'itunesrendererfeed'         => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Feed',
+        'slashrendererentry'         => 'Zend\Feed\Writer\Extension\Slash\Renderer\Entry',
+        'threadingrendererentry'     => 'Zend\Feed\Writer\Extension\Threading\Renderer\Entry',
+        'wellformedwebrendererentry' => 'Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry',
+    );
+
+    /**
+     * Do not share instances
+     *
+     * @var bool
+     */
+    protected $shareByDefault = false;
+
+    /**
+     * Validate the plugin
+     *
+     * Checks that the extension loaded is of a valid type.
+     *
+     * @param  mixed $plugin
+     * @return void
+     * @throws Exception\InvalidArgumentException if invalid
+     */
+    public function validatePlugin($plugin)
+    {
+        if ($plugin instanceof Extension\AbstractRenderer) {
+            // we're okay
+            return;
+        }
+
+        if ('Feed' == substr(get_class($plugin), -4)) {
+            // we're okay
+            return;
+        }
+
+        if ('Entry' == substr(get_class($plugin), -5)) {
+            // we're okay
+            return;
+        }
+
+        throw new Exception\InvalidArgumentException(sprintf(
+            'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface '
+            . 'or the classname must end in "Feed" or "Entry"',
+            (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
+            __NAMESPACE__
+        ));
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Feed.php b/core/vendor/zendframework/zend-feed/src/Writer/Feed.php
new file mode 100644
index 0000000000000000000000000000000000000000..d402bb8f6344cfedfe2a4358742bd210a308a4b7
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Feed.php
@@ -0,0 +1,239 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+use Countable;
+use Iterator;
+
+/**
+*/
+class Feed extends AbstractFeed implements Iterator, Countable
+{
+    /**
+     * Contains all entry objects
+     *
+     * @var array
+     */
+    protected $entries = array();
+
+    /**
+     * A pointer for the iterator to keep track of the entries array
+     *
+     * @var int
+     */
+    protected $entriesKey = 0;
+
+    /**
+     * Creates a new Zend\Feed\Writer\Entry data container for use. This is NOT
+     * added to the current feed automatically, but is necessary to create a
+     * container with some initial values preset based on the current feed data.
+     *
+     * @return \Zend\Feed\Writer\Entry
+     */
+    public function createEntry()
+    {
+        $entry = new Entry;
+        if ($this->getEncoding()) {
+            $entry->setEncoding($this->getEncoding());
+        }
+        $entry->setType($this->getType());
+        return $entry;
+    }
+
+    /**
+     * Appends a Zend\Feed\Writer\Deleted object representing a new entry tombstone
+     * to the feed data container's internal group of entries.
+     *
+     * @param Deleted $deleted
+     * @return void
+     */
+    public function addTombstone(Deleted $deleted)
+    {
+        $this->entries[] = $deleted;
+    }
+
+    /**
+     * Creates a new Zend\Feed\Writer\Deleted data container for use. This is NOT
+     * added to the current feed automatically, but is necessary to create a
+     * container with some initial values preset based on the current feed data.
+     *
+     * @return Deleted
+     */
+    public function createTombstone()
+    {
+        $deleted = new Deleted;
+        if ($this->getEncoding()) {
+            $deleted->setEncoding($this->getEncoding());
+        }
+        $deleted->setType($this->getType());
+        return $deleted;
+    }
+
+    /**
+     * Appends a Zend\Feed\Writer\Entry object representing a new entry/item
+     * the feed data container's internal group of entries.
+     *
+     * @param Entry $entry
+     * @return Feed
+     */
+    public function addEntry(Entry $entry)
+    {
+        $this->entries[] = $entry;
+        return $this;
+    }
+
+    /**
+     * Removes a specific indexed entry from the internal queue. Entries must be
+     * added to a feed container in order to be indexed.
+     *
+     * @param int $index
+     * @throws Exception\InvalidArgumentException
+     * @return Feed
+     */
+    public function removeEntry($index)
+    {
+        if (!isset($this->entries[$index])) {
+            throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.');
+        }
+        unset($this->entries[$index]);
+
+        return $this;
+    }
+
+    /**
+     * Retrieve a specific indexed entry from the internal queue. Entries must be
+     * added to a feed container in order to be indexed.
+     *
+     * @param int $index
+     * @throws Exception\InvalidArgumentException
+     */
+    public function getEntry($index = 0)
+    {
+        if (isset($this->entries[$index])) {
+            return $this->entries[$index];
+        }
+        throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.');
+    }
+
+    /**
+     * Orders all indexed entries by date, thus offering date ordered readable
+     * content where a parser (or Homo Sapien) ignores the generic rule that
+     * XML element order is irrelevant and has no intrinsic meaning.
+     *
+     * Using this method will alter the original indexation.
+     *
+     * @return Feed
+     */
+    public function orderByDate()
+    {
+        /**
+         * Could do with some improvement for performance perhaps
+         */
+        $timestamp = time();
+        $entries = array();
+        foreach ($this->entries as $entry) {
+            if ($entry->getDateModified()) {
+                $timestamp = (int) $entry->getDateModified()->getTimestamp();
+            } elseif ($entry->getDateCreated()) {
+                $timestamp = (int) $entry->getDateCreated()->getTimestamp();
+            }
+            $entries[$timestamp] = $entry;
+        }
+        krsort($entries, SORT_NUMERIC);
+        $this->entries = array_values($entries);
+
+        return $this;
+    }
+
+    /**
+     * Get the number of feed entries.
+     * Required by the Iterator interface.
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->entries);
+    }
+
+    /**
+     * Return the current entry
+     *
+     * @return Entry
+     */
+    public function current()
+    {
+        return $this->entries[$this->key()];
+    }
+
+    /**
+     * Return the current feed key
+     *
+     * @return mixed
+     */
+    public function key()
+    {
+        return $this->entriesKey;
+    }
+
+    /**
+     * Move the feed pointer forward
+     *
+     * @return void
+     */
+    public function next()
+    {
+        ++$this->entriesKey;
+    }
+
+    /**
+     * Reset the pointer in the feed object
+     *
+     * @return void
+     */
+    public function rewind()
+    {
+        $this->entriesKey = 0;
+    }
+
+    /**
+     * Check to see if the iterator is still valid
+     *
+     * @return bool
+     */
+    public function valid()
+    {
+        return 0 <= $this->entriesKey && $this->entriesKey < $this->count();
+    }
+
+    /**
+     * Attempt to build and return the feed resulting from the data set
+     *
+     * @param  string  $type The feed type "rss" or "atom" to export as
+     * @param  bool    $ignoreExceptions
+     * @throws Exception\InvalidArgumentException
+     * @return string
+     */
+    public function export($type, $ignoreExceptions = false)
+    {
+        $this->setType(strtolower($type));
+        $type = ucfirst($this->getType());
+        if ($type !== 'Rss' && $type !== 'Atom') {
+            throw new Exception\InvalidArgumentException('Invalid feed type specified: ' . $type . '.'
+            . ' Should be one of "rss" or "atom".');
+        }
+        $renderClass = 'Zend\\Feed\\Writer\\Renderer\\Feed\\' . $type;
+        $renderer = new $renderClass($this);
+        if ($ignoreExceptions) {
+            $renderer->ignoreExceptions();
+        }
+        return $renderer->render()->saveXml();
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/FeedFactory.php b/core/vendor/zendframework/zend-feed/src/Writer/FeedFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..99b528c73aebda2b703e48b95ef67a430efab630
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/FeedFactory.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+use Traversable;
+
+abstract class FeedFactory
+{
+    /**
+     * Create and return a Feed based on data provided.
+     *
+     * @param  array|Traversable $data
+     * @throws Exception\InvalidArgumentException
+     * @return Feed
+     */
+    public static function factory($data)
+    {
+        if (!is_array($data) && !$data instanceof Traversable) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                '%s expects an array or Traversable argument; received "%s"',
+                __METHOD__,
+                (is_object($data) ? get_class($data) : gettype($data))
+            ));
+        }
+
+        $feed = new Feed();
+
+        foreach ($data as $key => $value) {
+            // Setters
+            $key    = static::convertKey($key);
+            $method = 'set' . $key;
+            if (method_exists($feed, $method)) {
+                switch ($method) {
+                    case 'setfeedlink':
+                        if (!is_array($value)) {
+                            // Need an array
+                            break;
+                        }
+                        if (!array_key_exists('link', $value) || !array_key_exists('type', $value)) {
+                            // Need both keys to set this correctly
+                            break;
+                        }
+                        $feed->setFeedLink($value['link'], $value['type']);
+                        break;
+                    default:
+                        $feed->$method($value);
+                        break;
+                }
+                continue;
+            }
+
+            // Entries
+            if ('entries' == $key) {
+                static::createEntries($value, $feed);
+                continue;
+            }
+        }
+
+        return $feed;
+    }
+
+    /**
+     * Normalize a key
+     *
+     * @param  string $key
+     * @return string
+     */
+    protected static function convertKey($key)
+    {
+        $key = str_replace('_', '', strtolower($key));
+        return $key;
+    }
+
+    /**
+     * Create and attach entries to a feed
+     *
+     * @param  array|Traversable $entries
+     * @param  Feed $feed
+     * @throws Exception\InvalidArgumentException
+     * @return void
+     */
+    protected static function createEntries($entries, Feed $feed)
+    {
+        if (!is_array($entries) && !$entries instanceof Traversable) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                '%s::factory expects the "entries" value to be an array or Traversable; received "%s"',
+                get_called_class(),
+                (is_object($entries) ? get_class($entries) : gettype($entries))
+            ));
+        }
+
+        foreach ($entries as $data) {
+            if (!is_array($data) && !$data instanceof Traversable && !$data instanceof Entry) {
+                throw new Exception\InvalidArgumentException(sprintf(
+                    '%s expects an array, Traversable, or Zend\Feed\Writer\Entry argument; received "%s"',
+                    __METHOD__,
+                    (is_object($data) ? get_class($data) : gettype($data))
+                ));
+            }
+
+            // Use case 1: Entry item
+            if ($data instanceof Entry) {
+                $feed->addEntry($data);
+                continue;
+            }
+
+            // Use case 2: iterate item and populate entry
+            $entry = $feed->createEntry();
+            foreach ($data as $key => $value) {
+                $key    = static::convertKey($key);
+                $method = 'set' . $key;
+                if (!method_exists($entry, $method)) {
+                    continue;
+                }
+                $entry->$method($value);
+            }
+            $feed->addEntry($entry);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/AbstractRenderer.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/AbstractRenderer.php
new file mode 100644
index 0000000000000000000000000000000000000000..76b9a685a15aebd1199dfbde3f9bdfe64f0e5340
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/AbstractRenderer.php
@@ -0,0 +1,233 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer;
+
+/**
+*/
+class AbstractRenderer
+{
+    /**
+     * Extensions
+     * @var array
+     */
+    protected $extensions = array();
+
+    /**
+     * @var Writer\AbstractFeed
+     */
+    protected $container = null;
+
+    /**
+     * @var DOMDocument
+     */
+    protected $dom = null;
+
+    /**
+     * @var bool
+     */
+    protected $ignoreExceptions = false;
+
+    /**
+     * @var array
+     */
+    protected $exceptions = array();
+
+    /**
+     * Encoding of all text values
+     *
+     * @var string
+     */
+    protected $encoding = 'UTF-8';
+
+    /**
+     * Holds the value "atom" or "rss" depending on the feed type set when
+     * when last exported.
+     *
+     * @var string
+     */
+    protected $type = null;
+
+    /**
+     * @var DOMElement
+     */
+    protected $rootElement = null;
+
+    /**
+     * Constructor
+     *
+     * @param Writer\AbstractFeed $container
+     */
+    public function __construct($container)
+    {
+        $this->container = $container;
+        $this->setType($container->getType());
+        $this->_loadExtensions();
+    }
+
+    /**
+     * Save XML to string
+     *
+     * @return string
+     */
+    public function saveXml()
+    {
+        return $this->getDomDocument()->saveXml();
+    }
+
+    /**
+     * Get DOM document
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument()
+    {
+        return $this->dom;
+    }
+
+    /**
+     * Get document element from DOM
+     *
+     * @return DOMElement
+     */
+    public function getElement()
+    {
+        return $this->getDomDocument()->documentElement;
+    }
+
+    /**
+     * Get data container of items being rendered
+     *
+     * @return Writer\AbstractFeed
+     */
+    public function getDataContainer()
+    {
+        return $this->container;
+    }
+
+    /**
+     * Set feed encoding
+     *
+     * @param  string $enc
+     * @return AbstractRenderer
+     */
+    public function setEncoding($enc)
+    {
+        $this->encoding = $enc;
+        return $this;
+    }
+
+    /**
+     * Get feed encoding
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        return $this->encoding;
+    }
+
+    /**
+     * Indicate whether or not to ignore exceptions
+     *
+     * @param  bool $bool
+     * @return AbstractRenderer
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    public function ignoreExceptions($bool = true)
+    {
+        if (!is_bool($bool)) {
+            throw new Writer\Exception\InvalidArgumentException('Invalid parameter: $bool. Should be TRUE or FALSE (defaults to TRUE if null)');
+        }
+        $this->ignoreExceptions = $bool;
+        return $this;
+    }
+
+    /**
+     * Get exception list
+     *
+     * @return array
+     */
+    public function getExceptions()
+    {
+        return $this->exceptions;
+    }
+
+    /**
+     * Set the current feed type being exported to "rss" or "atom". This allows
+     * other objects to gracefully choose whether to execute or not, depending
+     * on their appropriateness for the current type, e.g. renderers.
+     *
+     * @param string $type
+     */
+    public function setType($type)
+    {
+        $this->type = $type;
+    }
+
+    /**
+     * Retrieve the current or last feed type exported.
+     *
+     * @return string Value will be "rss" or "atom"
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Sets the absolute root element for the XML feed being generated. This
+     * helps simplify the appending of namespace declarations, but also ensures
+     * namespaces are added to the root element - not scattered across the entire
+     * XML file - may assist namespace unsafe parsers and looks pretty ;).
+     *
+     * @param DOMElement $root
+     */
+    public function setRootElement(DOMElement $root)
+    {
+        $this->rootElement = $root;
+    }
+
+    /**
+     * Retrieve the absolute root element for the XML feed being generated.
+     *
+     * @return DOMElement
+     */
+    public function getRootElement()
+    {
+        return $this->rootElement;
+    }
+
+    /**
+     * Load extensions from Zend\Feed\Writer\Writer
+     *
+     * @return void
+     */
+    protected function _loadExtensions()
+    {
+        Writer\Writer::registerCoreExtensions();
+        $manager = Writer\Writer::getExtensionManager();
+        $all = Writer\Writer::getExtensions();
+        if (stripos(get_class($this), 'entry')) {
+            $exts = $all['entryRenderer'];
+        } else {
+            $exts = $all['feedRenderer'];
+        }
+        foreach ($exts as $extension) {
+            $plugin = $manager->get($extension);
+            $plugin->setDataContainer($this->getDataContainer());
+            $plugin->setEncoding($this->getEncoding());
+            $this->extensions[$extension] = $plugin;
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Atom.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Atom.php
new file mode 100644
index 0000000000000000000000000000000000000000..31b0a9aca47741794079cd004496224396a9dcef
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Atom.php
@@ -0,0 +1,434 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Entry;
+
+use DateTime;
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Uri;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+use Zend\Validator;
+
+class Atom extends Renderer\AbstractRenderer implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Entry $container
+     */
+    public function __construct(Writer\Entry $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render atom entry
+     *
+     * @return Atom
+     */
+    public function render()
+    {
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $entry = $this->dom->createElementNS(Writer\Writer::NAMESPACE_ATOM_10, 'entry');
+        $this->dom->appendChild($entry);
+
+        $this->_setSource($this->dom, $entry);
+        $this->_setTitle($this->dom, $entry);
+        $this->_setDescription($this->dom, $entry);
+        $this->_setDateCreated($this->dom, $entry);
+        $this->_setDateModified($this->dom, $entry);
+        $this->_setLink($this->dom, $entry);
+        $this->_setId($this->dom, $entry);
+        $this->_setAuthors($this->dom, $entry);
+        $this->_setEnclosure($this->dom, $entry);
+        $this->_setContent($this->dom, $entry);
+        $this->_setCategories($this->dom, $entry);
+
+        foreach ($this->extensions as $ext) {
+            $ext->setType($this->getType());
+            $ext->setRootElement($this->getRootElement());
+            $ext->setDOMDocument($this->getDOMDocument(), $entry);
+            $ext->render();
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set entry title
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setTitle(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getTitle()) {
+            $message = 'Atom 1.0 entry elements MUST contain exactly one'
+            . ' atom:title element but a title has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        $title = $dom->createElement('title');
+        $root->appendChild($title);
+        $title->setAttribute('type', 'html');
+        $cdata = $dom->createCDATASection($this->getDataContainer()->getTitle());
+        $title->appendChild($cdata);
+    }
+
+    /**
+     * Set entry description
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDescription(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDescription()) {
+            return; // unless src content or base64
+        }
+        $subtitle = $dom->createElement('summary');
+        $root->appendChild($subtitle);
+        $subtitle->setAttribute('type', 'html');
+        $cdata = $dom->createCDATASection(
+            $this->getDataContainer()->getDescription()
+        );
+        $subtitle->appendChild($cdata);
+    }
+
+    /**
+     * Set date entry was modified
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateModified()) {
+            $message = 'Atom 1.0 entry elements MUST contain exactly one'
+            . ' atom:updated element but a modification date has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        $updated = $dom->createElement('updated');
+        $root->appendChild($updated);
+        $text = $dom->createTextNode(
+            $this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
+        );
+        $updated->appendChild($text);
+    }
+
+    /**
+     * Set date entry was created
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateCreated()) {
+            return;
+        }
+        $el = $dom->createElement('published');
+        $root->appendChild($el);
+        $text = $dom->createTextNode(
+            $this->getDataContainer()->getDateCreated()->format(DateTime::ATOM)
+        );
+        $el->appendChild($text);
+    }
+
+    /**
+     * Set entry authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->container->getAuthors();
+        if ((!$authors || empty($authors))) {
+            /**
+             * This will actually trigger an Exception at the feed level if
+             * a feed level author is not set.
+             */
+            return;
+        }
+        foreach ($authors as $data) {
+            $author = $this->dom->createElement('author');
+            $name = $this->dom->createElement('name');
+            $author->appendChild($name);
+            $root->appendChild($author);
+            $text = $dom->createTextNode($data['name']);
+            $name->appendChild($text);
+            if (array_key_exists('email', $data)) {
+                $email = $this->dom->createElement('email');
+                $author->appendChild($email);
+                $text = $dom->createTextNode($data['email']);
+                $email->appendChild($text);
+            }
+            if (array_key_exists('uri', $data)) {
+                $uri = $this->dom->createElement('uri');
+                $author->appendChild($uri);
+                $text = $dom->createTextNode($data['uri']);
+                $uri->appendChild($text);
+            }
+        }
+    }
+
+    /**
+     * Set entry enclosure
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setEnclosure(DOMDocument $dom, DOMElement $root)
+    {
+        $data = $this->container->getEnclosure();
+        if ((!$data || empty($data))) {
+            return;
+        }
+        $enclosure = $this->dom->createElement('link');
+        $enclosure->setAttribute('rel', 'enclosure');
+        if (isset($data['type'])) {
+            $enclosure->setAttribute('type', $data['type']);
+        }
+        if (isset($data['length'])) {
+            $enclosure->setAttribute('length', $data['length']);
+        }
+        $enclosure->setAttribute('href', $data['uri']);
+        $root->appendChild($enclosure);
+    }
+
+    protected function _setLink(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getLink()) {
+            return;
+        }
+        $link = $dom->createElement('link');
+        $root->appendChild($link);
+        $link->setAttribute('rel', 'alternate');
+        $link->setAttribute('type', 'text/html');
+        $link->setAttribute('href', $this->getDataContainer()->getLink());
+    }
+
+    /**
+     * Set entry identifier
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setId(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getId()
+        && !$this->getDataContainer()->getLink()) {
+            $message = 'Atom 1.0 entry elements MUST contain exactly one '
+            . 'atom:id element, or as an alternative, we can use the same '
+            . 'value as atom:link however neither a suitable link nor an '
+            . 'id have been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        if (!$this->getDataContainer()->getId()) {
+            $this->getDataContainer()->setId(
+                $this->getDataContainer()->getLink()
+            );
+        }
+        if (!Uri::factory($this->getDataContainer()->getId())->isValid()
+            && !preg_match(
+                "#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#",
+                $this->getDataContainer()->getId()
+            )
+            && !$this->_validateTagUri($this->getDataContainer()->getId())
+        ) {
+            throw new Writer\Exception\InvalidArgumentException('Atom 1.0 IDs must be a valid URI/IRI');
+        }
+        $id = $dom->createElement('id');
+        $root->appendChild($id);
+        $text = $dom->createTextNode($this->getDataContainer()->getId());
+        $id->appendChild($text);
+    }
+
+    /**
+     * Validate a URI using the tag scheme (RFC 4151)
+     *
+     * @param string $id
+     * @return bool
+     */
+    protected function _validateTagUri($id)
+    {
+        if (preg_match(
+            '/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/',
+            $id,
+            $matches
+        )) {
+            $dvalid = false;
+            $date = $matches['date'];
+            $d6 = strtotime($date);
+            if ((strlen($date) == 4) && $date <= date('Y')) {
+                $dvalid = true;
+            } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) {
+                $dvalid = true;
+            } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) {
+                $dvalid = true;
+            }
+            $validator = new Validator\EmailAddress;
+            if ($validator->isValid($matches['name'])) {
+                $nvalid = true;
+            } else {
+                $nvalid = $validator->isValid('info@' . $matches['name']);
+            }
+            return $dvalid && $nvalid;
+        }
+        return false;
+    }
+
+    /**
+     * Set entry content
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setContent(DOMDocument $dom, DOMElement $root)
+    {
+        $content = $this->getDataContainer()->getContent();
+        if (!$content && !$this->getDataContainer()->getLink()) {
+            $message = 'Atom 1.0 entry elements MUST contain exactly one '
+            . 'atom:content element, or as an alternative, at least one link '
+            . 'with a rel attribute of "alternate" to indicate an alternate '
+            . 'method to consume the content.';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        if (!$content) {
+            return;
+        }
+        $element = $dom->createElement('content');
+        $element->setAttribute('type', 'xhtml');
+        $xhtmlElement = $this->_loadXhtml($content);
+        $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
+        $xhtml = $dom->importNode($xhtmlElement, $deep);
+        $element->appendChild($xhtml);
+        $root->appendChild($element);
+    }
+
+    /**
+     * Load a HTML string and attempt to normalise to XML
+     */
+    protected function _loadXhtml($content)
+    {
+        if (class_exists('tidy', false)) {
+            $tidy = new \tidy;
+            $config = array(
+                'output-xhtml' => true,
+                'show-body-only' => true,
+                'quote-nbsp' => false
+            );
+            $encoding = str_replace('-', '', $this->getEncoding());
+            $tidy->parseString($content, $config, $encoding);
+            $tidy->cleanRepair();
+            $xhtml = (string) $tidy;
+        } else {
+            $xhtml = $content;
+        }
+        $xhtml = preg_replace(array(
+            "/(<[\/]?)([a-zA-Z]+)/"
+        ), '$1xhtml:$2', $xhtml);
+        $dom = new DOMDocument('1.0', $this->getEncoding());
+        $dom->loadXML(
+            '<xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml">'
+            . $xhtml
+            . '</xhtml:div>'
+        );
+        return $dom->documentElement;
+    }
+
+    /**
+     * Set entry categories
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCategories(DOMDocument $dom, DOMElement $root)
+    {
+        $categories = $this->getDataContainer()->getCategories();
+        if (!$categories) {
+            return;
+        }
+        foreach ($categories as $cat) {
+            $category = $dom->createElement('category');
+            $category->setAttribute('term', $cat['term']);
+            if (isset($cat['label'])) {
+                $category->setAttribute('label', $cat['label']);
+            } else {
+                $category->setAttribute('label', $cat['term']);
+            }
+            if (isset($cat['scheme'])) {
+                $category->setAttribute('scheme', $cat['scheme']);
+            }
+            $root->appendChild($category);
+        }
+    }
+
+    /**
+     * Append Source element (Atom 1.0 Feed Metadata)
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setSource(DOMDocument $dom, DOMElement $root)
+    {
+        $source = $this->getDataContainer()->getSource();
+        if (!$source) {
+            return;
+        }
+        $renderer = new Renderer\Feed\AtomSource($source);
+        $renderer->setType($this->getType());
+        $element = $renderer->render()->getElement();
+        $imported = $dom->importNode($element, true);
+        $root->appendChild($imported);
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Atom/Deleted.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Atom/Deleted.php
new file mode 100644
index 0000000000000000000000000000000000000000..8519bd9d9ea1a4afdfc5201eb915290b64e4f386
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Atom/Deleted.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Entry\Atom;
+
+use DateTime;
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+
+class Deleted extends Renderer\AbstractRenderer implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Deleted $container
+     */
+    public function __construct(Writer\Deleted $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render atom entry
+     *
+     * @return Writer\Renderer\Entry\Atom
+     */
+    public function render()
+    {
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $entry = $this->dom->createElement('at:deleted-entry');
+        $this->dom->appendChild($entry);
+
+        $entry->setAttribute('ref', $this->container->getReference());
+        $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ATOM));
+
+        $this->_setBy($this->dom, $entry);
+        $this->_setComment($this->dom, $entry);
+
+        return $this;
+    }
+
+    /**
+     * Set tombstone comment
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setComment(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getComment()) {
+            return;
+        }
+        $c = $dom->createElement('at:comment');
+        $root->appendChild($c);
+        $c->setAttribute('type', 'html');
+        $cdata = $dom->createCDATASection($this->getDataContainer()->getComment());
+        $c->appendChild($cdata);
+    }
+
+    /**
+     * Set entry authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setBy(DOMDocument $dom, DOMElement $root)
+    {
+        $data = $this->container->getBy();
+        if ((!$data || empty($data))) {
+            return;
+        }
+        $author = $this->dom->createElement('at:by');
+        $name = $this->dom->createElement('name');
+        $author->appendChild($name);
+        $root->appendChild($author);
+        $text = $dom->createTextNode($data['name']);
+        $name->appendChild($text);
+        if (array_key_exists('email', $data)) {
+            $email = $this->dom->createElement('email');
+            $author->appendChild($email);
+            $text = $dom->createTextNode($data['email']);
+            $email->appendChild($text);
+        }
+        if (array_key_exists('uri', $data)) {
+            $uri = $this->dom->createElement('uri');
+            $author->appendChild($uri);
+            $text = $dom->createTextNode($data['uri']);
+            $uri->appendChild($text);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/AtomDeleted.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/AtomDeleted.php
new file mode 100644
index 0000000000000000000000000000000000000000..f0db3e9328ebd38a0e0a7b19a2be953335a745fe
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/AtomDeleted.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Entry;
+
+use DateTime;
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+
+/**
+*/
+class AtomDeleted extends Renderer\AbstractRenderer implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Deleted $container
+     */
+    public function __construct(Writer\Deleted $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render atom entry
+     *
+     * @return \Zend\Feed\Writer\Renderer\Entry\Atom
+     */
+    public function render()
+    {
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $entry = $this->dom->createElement('at:deleted-entry');
+        $this->dom->appendChild($entry);
+
+        $entry->setAttribute('ref', $this->container->getReference());
+        $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ATOM));
+
+        $this->_setBy($this->dom, $entry);
+        $this->_setComment($this->dom, $entry);
+
+        return $this;
+    }
+
+    /**
+     * Set tombstone comment
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setComment(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getComment()) {
+            return;
+        }
+        $c = $dom->createElement('at:comment');
+        $root->appendChild($c);
+        $c->setAttribute('type', 'html');
+        $cdata = $dom->createCDATASection($this->getDataContainer()->getComment());
+        $c->appendChild($cdata);
+    }
+
+    /**
+     * Set entry authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setBy(DOMDocument $dom, DOMElement $root)
+    {
+        $data = $this->container->getBy();
+        if ((!$data || empty($data))) {
+            return;
+        }
+        $author = $this->dom->createElement('at:by');
+        $name = $this->dom->createElement('name');
+        $author->appendChild($name);
+        $root->appendChild($author);
+        $text = $dom->createTextNode($data['name']);
+        $name->appendChild($text);
+        if (array_key_exists('email', $data)) {
+            $email = $this->dom->createElement('email');
+            $author->appendChild($email);
+            $text = $dom->createTextNode($data['email']);
+            $email->appendChild($text);
+        }
+        if (array_key_exists('uri', $data)) {
+            $uri = $this->dom->createElement('uri');
+            $author->appendChild($uri);
+            $text = $dom->createTextNode($data['uri']);
+            $uri->appendChild($text);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Rss.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Rss.php
new file mode 100644
index 0000000000000000000000000000000000000000..aae2f46e2839987688d83b39af5db232b741bc6d
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Entry/Rss.php
@@ -0,0 +1,329 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Entry;
+
+use DateTime;
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Uri;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+
+/**
+*/
+class Rss extends Renderer\AbstractRenderer implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Entry $container
+     */
+    public function __construct(Writer\Entry $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render RSS entry
+     *
+     * @return Rss
+     */
+    public function render()
+    {
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $this->dom->substituteEntities = false;
+        $entry = $this->dom->createElement('item');
+        $this->dom->appendChild($entry);
+
+        $this->_setTitle($this->dom, $entry);
+        $this->_setDescription($this->dom, $entry);
+        $this->_setDateCreated($this->dom, $entry);
+        $this->_setDateModified($this->dom, $entry);
+        $this->_setLink($this->dom, $entry);
+        $this->_setId($this->dom, $entry);
+        $this->_setAuthors($this->dom, $entry);
+        $this->_setEnclosure($this->dom, $entry);
+        $this->_setCommentLink($this->dom, $entry);
+        $this->_setCategories($this->dom, $entry);
+        foreach ($this->extensions as $ext) {
+            $ext->setType($this->getType());
+            $ext->setRootElement($this->getRootElement());
+            $ext->setDOMDocument($this->getDOMDocument(), $entry);
+            $ext->render();
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set entry title
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setTitle(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDescription()
+        && !$this->getDataContainer()->getTitle()) {
+            $message = 'RSS 2.0 entry elements SHOULD contain exactly one'
+            . ' title element but a title has not been set. In addition, there'
+            . ' is no description as required in the absence of a title.';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        $title = $dom->createElement('title');
+        $root->appendChild($title);
+        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
+        $title->appendChild($text);
+    }
+
+    /**
+     * Set entry description
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setDescription(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDescription()
+        && !$this->getDataContainer()->getTitle()) {
+            $message = 'RSS 2.0 entry elements SHOULD contain exactly one'
+            . ' description element but a description has not been set. In'
+            . ' addition, there is no title element as required in the absence'
+            . ' of a description.';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        if (!$this->getDataContainer()->getDescription()) {
+            return;
+        }
+        $subtitle = $dom->createElement('description');
+        $root->appendChild($subtitle);
+        $text = $dom->createCDATASection($this->getDataContainer()->getDescription());
+        $subtitle->appendChild($text);
+    }
+
+    /**
+     * Set date entry was last modified
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateModified()) {
+            return;
+        }
+
+        $updated = $dom->createElement('pubDate');
+        $root->appendChild($updated);
+        $text = $dom->createTextNode(
+            $this->getDataContainer()->getDateModified()->format(DateTime::RSS)
+        );
+        $updated->appendChild($text);
+    }
+
+    /**
+     * Set date entry was created
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateCreated()) {
+            return;
+        }
+        if (!$this->getDataContainer()->getDateModified()) {
+            $this->getDataContainer()->setDateModified(
+                $this->getDataContainer()->getDateCreated()
+            );
+        }
+    }
+
+    /**
+     * Set entry authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->container->getAuthors();
+        if ((!$authors || empty($authors))) {
+            return;
+        }
+        foreach ($authors as $data) {
+            $author = $this->dom->createElement('author');
+            $name = $data['name'];
+            if (array_key_exists('email', $data)) {
+                $name = $data['email'] . ' (' . $data['name'] . ')';
+            }
+            $text = $dom->createTextNode($name);
+            $author->appendChild($text);
+            $root->appendChild($author);
+        }
+    }
+
+    /**
+     * Set entry enclosure
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setEnclosure(DOMDocument $dom, DOMElement $root)
+    {
+        $data = $this->container->getEnclosure();
+        if ((!$data || empty($data))) {
+            return;
+        }
+        if (!isset($data['type'])) {
+            $exception = new Writer\Exception\InvalidArgumentException('Enclosure "type" is not set');
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        if (!isset($data['length'])) {
+            $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" is not set');
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        if (isset($data['length']) && (int) $data['length'] <= 0) {
+            $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" must be an integer'
+            . ' indicating the content\'s length in bytes');
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        $enclosure = $this->dom->createElement('enclosure');
+        $enclosure->setAttribute('type', $data['type']);
+        $enclosure->setAttribute('length', $data['length']);
+        $enclosure->setAttribute('url', $data['uri']);
+        $root->appendChild($enclosure);
+    }
+
+    /**
+     * Set link to entry
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setLink(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getLink()) {
+            return;
+        }
+        $link = $dom->createElement('link');
+        $root->appendChild($link);
+        $text = $dom->createTextNode($this->getDataContainer()->getLink());
+        $link->appendChild($text);
+    }
+
+    /**
+     * Set entry identifier
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setId(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getId()
+        && !$this->getDataContainer()->getLink()) {
+            return;
+        }
+
+        $id = $dom->createElement('guid');
+        $root->appendChild($id);
+        if (!$this->getDataContainer()->getId()) {
+            $this->getDataContainer()->setId(
+                $this->getDataContainer()->getLink());
+        }
+        $text = $dom->createTextNode($this->getDataContainer()->getId());
+        $id->appendChild($text);
+        if (!Uri::factory($this->getDataContainer()->getId())->isValid()) {
+            $id->setAttribute('isPermaLink', 'false');
+        }
+    }
+
+    /**
+     * Set link to entry comments
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCommentLink(DOMDocument $dom, DOMElement $root)
+    {
+        $link = $this->getDataContainer()->getCommentLink();
+        if (!$link) {
+            return;
+        }
+        $clink = $this->dom->createElement('comments');
+        $text = $dom->createTextNode($link);
+        $clink->appendChild($text);
+        $root->appendChild($clink);
+    }
+
+    /**
+     * Set entry categories
+     *
+     * @param DOMDocument $dom
+     * @param DOMElement $root
+     * @return void
+     */
+    protected function _setCategories(DOMDocument $dom, DOMElement $root)
+    {
+        $categories = $this->getDataContainer()->getCategories();
+        if (!$categories) {
+            return;
+        }
+        foreach ($categories as $cat) {
+            $category = $dom->createElement('category');
+            if (isset($cat['scheme'])) {
+                $category->setAttribute('domain', $cat['scheme']);
+            }
+            $text = $dom->createCDATASection($cat['term']);
+            $category->appendChild($text);
+            $root->appendChild($category);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/AbstractAtom.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/AbstractAtom.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5400a6050290a25597bae601cd85af6e821c517
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/AbstractAtom.php
@@ -0,0 +1,403 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Feed;
+
+use DateTime;
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+use Zend\Feed\Writer\Version;
+
+/**
+*/
+class AbstractAtom extends Renderer\AbstractRenderer
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\AbstractFeed $container
+     */
+    public function __construct($container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Set feed language
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setLanguage(DOMDocument $dom, DOMElement $root)
+    {
+        if ($this->getDataContainer()->getLanguage()) {
+            $root->setAttribute('xml:lang', $this->getDataContainer()
+                ->getLanguage());
+        }
+    }
+
+    /**
+     * Set feed title
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setTitle(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getTitle()) {
+            $message = 'Atom 1.0 feed elements MUST contain exactly one'
+            . ' atom:title element but a title has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        $title = $dom->createElement('title');
+        $root->appendChild($title);
+        $title->setAttribute('type', 'text');
+        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
+        $title->appendChild($text);
+    }
+
+    /**
+     * Set feed description
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDescription(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDescription()) {
+            return;
+        }
+        $subtitle = $dom->createElement('subtitle');
+        $root->appendChild($subtitle);
+        $subtitle->setAttribute('type', 'text');
+        $text = $dom->createTextNode($this->getDataContainer()->getDescription());
+        $subtitle->appendChild($text);
+    }
+
+    /**
+     * Set date feed was last modified
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateModified()) {
+            $message = 'Atom 1.0 feed elements MUST contain exactly one'
+            . ' atom:updated element but a modification date has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        $updated = $dom->createElement('updated');
+        $root->appendChild($updated);
+        $text = $dom->createTextNode(
+            $this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
+        );
+        $updated->appendChild($text);
+    }
+
+    /**
+     * Set feed generator string
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getGenerator()) {
+            $this->getDataContainer()->setGenerator('Zend_Feed_Writer',
+                Version::VERSION, 'http://framework.zend.com');
+        }
+
+        $gdata = $this->getDataContainer()->getGenerator();
+        $generator = $dom->createElement('generator');
+        $root->appendChild($generator);
+        $text = $dom->createTextNode($gdata['name']);
+        $generator->appendChild($text);
+        if (array_key_exists('uri', $gdata)) {
+            $generator->setAttribute('uri', $gdata['uri']);
+        }
+        if (array_key_exists('version', $gdata)) {
+            $generator->setAttribute('version', $gdata['version']);
+        }
+    }
+
+    /**
+     * Set link to feed
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setLink(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getLink()) {
+            return;
+        }
+        $link = $dom->createElement('link');
+        $root->appendChild($link);
+        $link->setAttribute('rel', 'alternate');
+        $link->setAttribute('type', 'text/html');
+        $link->setAttribute('href', $this->getDataContainer()->getLink());
+    }
+
+    /**
+     * Set feed links
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setFeedLinks(DOMDocument $dom, DOMElement $root)
+    {
+        $flinks = $this->getDataContainer()->getFeedLinks();
+        if (!$flinks || !array_key_exists('atom', $flinks)) {
+            $message = 'Atom 1.0 feed elements SHOULD contain one atom:link '
+            . 'element with a rel attribute value of "self".  This is the '
+            . 'preferred URI for retrieving Atom Feed Documents representing '
+            . 'this Atom feed but a feed link has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        foreach ($flinks as $type => $href) {
+            $mime = 'application/' . strtolower($type) . '+xml';
+            $flink = $dom->createElement('link');
+            $root->appendChild($flink);
+            $flink->setAttribute('rel', 'self');
+            $flink->setAttribute('type', $mime);
+            $flink->setAttribute('href', $href);
+        }
+    }
+
+    /**
+     * Set feed authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->container->getAuthors();
+        if (!$authors || empty($authors)) {
+            /**
+             * Technically we should defer an exception until we can check
+             * that all entries contain an author. If any entry is missing
+             * an author, then a missing feed author element is invalid
+             */
+            return;
+        }
+        foreach ($authors as $data) {
+            $author = $this->dom->createElement('author');
+            $name = $this->dom->createElement('name');
+            $author->appendChild($name);
+            $root->appendChild($author);
+            $text = $dom->createTextNode($data['name']);
+            $name->appendChild($text);
+            if (array_key_exists('email', $data)) {
+                $email = $this->dom->createElement('email');
+                $author->appendChild($email);
+                $text = $dom->createTextNode($data['email']);
+                $email->appendChild($text);
+            }
+            if (array_key_exists('uri', $data)) {
+                $uri = $this->dom->createElement('uri');
+                $author->appendChild($uri);
+                $text = $dom->createTextNode($data['uri']);
+                $uri->appendChild($text);
+            }
+        }
+    }
+
+    /**
+     * Set feed identifier
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setId(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getId()
+        && !$this->getDataContainer()->getLink()) {
+            $message = 'Atom 1.0 feed elements MUST contain exactly one '
+            . 'atom:id element, or as an alternative, we can use the same '
+            . 'value as atom:link however neither a suitable link nor an '
+            . 'id have been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        if (!$this->getDataContainer()->getId()) {
+            $this->getDataContainer()->setId(
+                $this->getDataContainer()->getLink());
+        }
+        $id = $dom->createElement('id');
+        $root->appendChild($id);
+        $text = $dom->createTextNode($this->getDataContainer()->getId());
+        $id->appendChild($text);
+    }
+
+    /**
+     * Set feed copyright
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCopyright(DOMDocument $dom, DOMElement $root)
+    {
+        $copyright = $this->getDataContainer()->getCopyright();
+        if (!$copyright) {
+            return;
+        }
+        $copy = $dom->createElement('rights');
+        $root->appendChild($copy);
+        $text = $dom->createTextNode($copyright);
+        $copy->appendChild($text);
+    }
+
+    /**
+     * Set feed level logo (image)
+     *
+     * @param DOMDocument $dom
+     * @param DOMElement $root
+     * @return void
+     */
+    protected function _setImage(DOMDocument $dom, DOMElement $root)
+    {
+        $image = $this->getDataContainer()->getImage();
+        if (!$image) {
+            return;
+        }
+        $img = $dom->createElement('logo');
+        $root->appendChild($img);
+        $text = $dom->createTextNode($image['uri']);
+        $img->appendChild($text);
+    }
+
+    /**
+     * Set date feed was created
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateCreated()) {
+            return;
+        }
+        if (!$this->getDataContainer()->getDateModified()) {
+            $this->getDataContainer()->setDateModified(
+                $this->getDataContainer()->getDateCreated()
+            );
+        }
+    }
+
+    /**
+     * Set base URL to feed links
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setBaseUrl(DOMDocument $dom, DOMElement $root)
+    {
+        $baseUrl = $this->getDataContainer()->getBaseUrl();
+        if (!$baseUrl) {
+            return;
+        }
+        $root->setAttribute('xml:base', $baseUrl);
+    }
+
+    /**
+     * Set hubs to which this feed pushes
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setHubs(DOMDocument $dom, DOMElement $root)
+    {
+        $hubs = $this->getDataContainer()->getHubs();
+        if (!$hubs) {
+            return;
+        }
+        foreach ($hubs as $hubUrl) {
+            $hub = $dom->createElement('link');
+            $hub->setAttribute('rel', 'hub');
+            $hub->setAttribute('href', $hubUrl);
+            $root->appendChild($hub);
+        }
+    }
+
+    /**
+     * Set feed categories
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCategories(DOMDocument $dom, DOMElement $root)
+    {
+        $categories = $this->getDataContainer()->getCategories();
+        if (!$categories) {
+            return;
+        }
+        foreach ($categories as $cat) {
+            $category = $dom->createElement('category');
+            $category->setAttribute('term', $cat['term']);
+            if (isset($cat['label'])) {
+                $category->setAttribute('label', $cat['label']);
+            } else {
+                $category->setAttribute('label', $cat['term']);
+            }
+            if (isset($cat['scheme'])) {
+                $category->setAttribute('scheme', $cat['scheme']);
+            }
+            $root->appendChild($category);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom.php
new file mode 100644
index 0000000000000000000000000000000000000000..939babc0b6e4af7811bd1f68977d014a94f12d00
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Feed;
+
+use DOMDocument;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+
+/**
+*/
+class Atom extends AbstractAtom implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Feed $container
+     */
+    public function __construct(Writer\Feed $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render Atom feed
+     *
+     * @return Atom
+     */
+    public function render()
+    {
+        if (!$this->container->getEncoding()) {
+            $this->container->setEncoding('UTF-8');
+        }
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $root = $this->dom->createElementNS(
+            Writer\Writer::NAMESPACE_ATOM_10,
+            'feed'
+        );
+        $this->setRootElement($root);
+        $this->dom->appendChild($root);
+        $this->_setLanguage($this->dom, $root);
+        $this->_setBaseUrl($this->dom, $root);
+        $this->_setTitle($this->dom, $root);
+        $this->_setDescription($this->dom, $root);
+        $this->_setImage($this->dom, $root);
+        $this->_setDateCreated($this->dom, $root);
+        $this->_setDateModified($this->dom, $root);
+        $this->_setGenerator($this->dom, $root);
+        $this->_setLink($this->dom, $root);
+        $this->_setFeedLinks($this->dom, $root);
+        $this->_setId($this->dom, $root);
+        $this->_setAuthors($this->dom, $root);
+        $this->_setCopyright($this->dom, $root);
+        $this->_setCategories($this->dom, $root);
+        $this->_setHubs($this->dom, $root);
+
+        foreach ($this->extensions as $ext) {
+            $ext->setType($this->getType());
+            $ext->setRootElement($this->getRootElement());
+            $ext->setDOMDocument($this->getDOMDocument(), $root);
+            $ext->render();
+        }
+
+        foreach ($this->container as $entry) {
+            if ($this->getDataContainer()->getEncoding()) {
+                $entry->setEncoding($this->getDataContainer()->getEncoding());
+            }
+            if ($entry instanceof Writer\Entry) {
+                $renderer = new Renderer\Entry\Atom($entry);
+            } else {
+                if (!$this->dom->documentElement->hasAttribute('xmlns:at')) {
+                    $this->dom->documentElement->setAttribute(
+                        'xmlns:at',
+                        'http://purl.org/atompub/tombstones/1.0'
+                    );
+                }
+                $renderer = new Renderer\Entry\AtomDeleted($entry);
+            }
+            if ($this->ignoreExceptions === true) {
+                $renderer->ignoreExceptions();
+            }
+            $renderer->setType($this->getType());
+            $renderer->setRootElement($this->dom->documentElement);
+            $renderer->render();
+            $element = $renderer->getElement();
+            $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
+            $imported = $this->dom->importNode($element, $deep);
+            $root->appendChild($imported);
+        }
+        return $this;
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom/AbstractAtom.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom/AbstractAtom.php
new file mode 100644
index 0000000000000000000000000000000000000000..20fc8df81e79144cabcf9d52a76d4ee4f59a5cc7
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom/AbstractAtom.php
@@ -0,0 +1,399 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Feed\Atom;
+
+use Datetime;
+use DOMDocument;
+use DOMElement;
+use Zend\Feed;
+use Zend\Feed\Writer\Version;
+
+class AbstractAtom extends Feed\Writer\Renderer\AbstractRenderer
+{
+    /**
+     * Constructor
+     *
+     * @param  \Zend\Feed\Writer\Feed $container
+     */
+    public function __construct($container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Set feed language
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setLanguage(DOMDocument $dom, DOMElement $root)
+    {
+        if ($this->getDataContainer()->getLanguage()) {
+            $root->setAttribute('xml:lang', $this->getDataContainer()
+                ->getLanguage());
+        }
+    }
+
+    /**
+     * Set feed title
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Feed\Exception\InvalidArgumentException
+     */
+    protected function _setTitle(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getTitle()) {
+            $message = 'Atom 1.0 feed elements MUST contain exactly one'
+                . ' atom:title element but a title has not been set';
+            $exception = new Feed\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        $title = $dom->createElement('title');
+        $root->appendChild($title);
+        $title->setAttribute('type', 'text');
+        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
+        $title->appendChild($text);
+    }
+
+    /**
+     * Set feed description
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDescription(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDescription()) {
+            return;
+        }
+        $subtitle = $dom->createElement('subtitle');
+        $root->appendChild($subtitle);
+        $subtitle->setAttribute('type', 'text');
+        $text = $dom->createTextNode($this->getDataContainer()->getDescription());
+        $subtitle->appendChild($text);
+    }
+
+    /**
+     * Set date feed was last modified
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Feed\Exception\InvalidArgumentException
+     */
+    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateModified()) {
+            $message = 'Atom 1.0 feed elements MUST contain exactly one'
+                . ' atom:updated element but a modification date has not been set';
+            $exception = new Feed\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        $updated = $dom->createElement('updated');
+        $root->appendChild($updated);
+        $text = $dom->createTextNode(
+            $this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
+        );
+        $updated->appendChild($text);
+    }
+
+    /**
+     * Set feed generator string
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getGenerator()) {
+            $this->getDataContainer()->setGenerator('Zend_Feed_Writer',
+                Version::VERSION, 'http://framework.zend.com');
+        }
+
+        $gdata = $this->getDataContainer()->getGenerator();
+        $generator = $dom->createElement('generator');
+        $root->appendChild($generator);
+        $text = $dom->createTextNode($gdata['name']);
+        $generator->appendChild($text);
+        if (array_key_exists('uri', $gdata)) {
+            $generator->setAttribute('uri', $gdata['uri']);
+        }
+        if (array_key_exists('version', $gdata)) {
+            $generator->setAttribute('version', $gdata['version']);
+        }
+    }
+
+    /**
+     * Set link to feed
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setLink(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getLink()) {
+            return;
+        }
+        $link = $dom->createElement('link');
+        $root->appendChild($link);
+        $link->setAttribute('rel', 'alternate');
+        $link->setAttribute('type', 'text/html');
+        $link->setAttribute('href', $this->getDataContainer()->getLink());
+    }
+
+    /**
+     * Set feed links
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Feed\Exception\InvalidArgumentException
+     */
+    protected function _setFeedLinks(DOMDocument $dom, DOMElement $root)
+    {
+        $flinks = $this->getDataContainer()->getFeedLinks();
+        if (!$flinks || !array_key_exists('atom', $flinks)) {
+            $message = 'Atom 1.0 feed elements SHOULD contain one atom:link '
+                . 'element with a rel attribute value of "self".  This is the '
+                . 'preferred URI for retrieving Atom Feed Documents representing '
+                . 'this Atom feed but a feed link has not been set';
+            $exception = new Feed\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        foreach ($flinks as $type => $href) {
+            $mime = 'application/' . strtolower($type) . '+xml';
+            $flink = $dom->createElement('link');
+            $root->appendChild($flink);
+            $flink->setAttribute('rel', 'self');
+            $flink->setAttribute('type', $mime);
+            $flink->setAttribute('href', $href);
+        }
+    }
+
+    /**
+     * Set feed authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->container->getAuthors();
+        if (!$authors || empty($authors)) {
+            /**
+             * Technically we should defer an exception until we can check
+             * that all entries contain an author. If any entry is missing
+             * an author, then a missing feed author element is invalid
+             */
+            return;
+        }
+        foreach ($authors as $data) {
+            $author = $this->dom->createElement('author');
+            $name = $this->dom->createElement('name');
+            $author->appendChild($name);
+            $root->appendChild($author);
+            $text = $dom->createTextNode($data['name']);
+            $name->appendChild($text);
+            if (array_key_exists('email', $data)) {
+                $email = $this->dom->createElement('email');
+                $author->appendChild($email);
+                $text = $dom->createTextNode($data['email']);
+                $email->appendChild($text);
+            }
+            if (array_key_exists('uri', $data)) {
+                $uri = $this->dom->createElement('uri');
+                $author->appendChild($uri);
+                $text = $dom->createTextNode($data['uri']);
+                $uri->appendChild($text);
+            }
+        }
+    }
+
+    /**
+     * Set feed identifier
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Feed\Exception\InvalidArgumentException
+     */
+    protected function _setId(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getId()
+        && !$this->getDataContainer()->getLink()) {
+            $message = 'Atom 1.0 feed elements MUST contain exactly one '
+                . 'atom:id element, or as an alternative, we can use the same '
+                . 'value as atom:link however neither a suitable link nor an '
+                . 'id have been set';
+            $exception = new Feed\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        if (!$this->getDataContainer()->getId()) {
+            $this->getDataContainer()->setId(
+                $this->getDataContainer()->getLink());
+        }
+        $id = $dom->createElement('id');
+        $root->appendChild($id);
+        $text = $dom->createTextNode($this->getDataContainer()->getId());
+        $id->appendChild($text);
+    }
+
+    /**
+     * Set feed copyright
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCopyright(DOMDocument $dom, DOMElement $root)
+    {
+        $copyright = $this->getDataContainer()->getCopyright();
+        if (!$copyright) {
+            return;
+        }
+        $copy = $dom->createElement('rights');
+        $root->appendChild($copy);
+        $text = $dom->createTextNode($copyright);
+        $copy->appendChild($text);
+    }
+    /**
+     * Set feed level logo (image)
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setImage(DOMDocument $dom, DOMElement $root)
+    {
+        $image = $this->getDataContainer()->getImage();
+        if (!$image) {
+            return;
+        }
+        $img = $dom->createElement('logo');
+        $root->appendChild($img);
+        $text = $dom->createTextNode($image['uri']);
+        $img->appendChild($text);
+    }
+
+    /**
+     * Set date feed was created
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateCreated()) {
+            return;
+        }
+        if (!$this->getDataContainer()->getDateModified()) {
+            $this->getDataContainer()->setDateModified(
+                $this->getDataContainer()->getDateCreated()
+            );
+        }
+    }
+
+    /**
+     * Set base URL to feed links
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setBaseUrl(DOMDocument $dom, DOMElement $root)
+    {
+        $baseUrl = $this->getDataContainer()->getBaseUrl();
+        if (!$baseUrl) {
+            return;
+        }
+        $root->setAttribute('xml:base', $baseUrl);
+    }
+
+    /**
+     * Set hubs to which this feed pushes
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setHubs(DOMDocument $dom, DOMElement $root)
+    {
+        $hubs = $this->getDataContainer()->getHubs();
+        if (!$hubs) {
+            return;
+        }
+        foreach ($hubs as $hubUrl) {
+            $hub = $dom->createElement('link');
+            $hub->setAttribute('rel', 'hub');
+            $hub->setAttribute('href', $hubUrl);
+            $root->appendChild($hub);
+        }
+    }
+
+    /**
+     * Set feed categories
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCategories(DOMDocument $dom, DOMElement $root)
+    {
+        $categories = $this->getDataContainer()->getCategories();
+        if (!$categories) {
+            return;
+        }
+        foreach ($categories as $cat) {
+            $category = $dom->createElement('category');
+            $category->setAttribute('term', $cat['term']);
+            if (isset($cat['label'])) {
+                $category->setAttribute('label', $cat['label']);
+            } else {
+                $category->setAttribute('label', $cat['term']);
+            }
+            if (isset($cat['scheme'])) {
+                $category->setAttribute('scheme', $cat['scheme']);
+            }
+            $root->appendChild($category);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom/Source.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom/Source.php
new file mode 100644
index 0000000000000000000000000000000000000000..3793db0cbca2771f591933f59323fcfa3351f63d
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Atom/Source.php
@@ -0,0 +1,92 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Feed\Atom;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+
+class Source extends AbstractAtom implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Source $container
+     */
+    public function __construct(Writer\Source $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render Atom Feed Metadata (Source element)
+     *
+     * @return Writer\Renderer\Feed\Atom
+     */
+    public function render()
+    {
+        if (!$this->container->getEncoding()) {
+            $this->container->setEncoding('UTF-8');
+        }
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $root = $this->dom->createElement('source');
+        $this->setRootElement($root);
+        $this->dom->appendChild($root);
+        $this->_setLanguage($this->dom, $root);
+        $this->_setBaseUrl($this->dom, $root);
+        $this->_setTitle($this->dom, $root);
+        $this->_setDescription($this->dom, $root);
+        $this->_setDateCreated($this->dom, $root);
+        $this->_setDateModified($this->dom, $root);
+        $this->_setGenerator($this->dom, $root);
+        $this->_setLink($this->dom, $root);
+        $this->_setFeedLinks($this->dom, $root);
+        $this->_setId($this->dom, $root);
+        $this->_setAuthors($this->dom, $root);
+        $this->_setCopyright($this->dom, $root);
+        $this->_setCategories($this->dom, $root);
+
+        foreach ($this->extensions as $ext) {
+            $ext->setType($this->getType());
+            $ext->setRootElement($this->getRootElement());
+            $ext->setDomDocument($this->getDomDocument(), $root);
+            $ext->render();
+        }
+        return $this;
+    }
+
+    /**
+     * Set feed generator string
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getGenerator()) {
+            return;
+        }
+
+        $gdata = $this->getDataContainer()->getGenerator();
+        $generator = $dom->createElement('generator');
+        $root->appendChild($generator);
+        $text = $dom->createTextNode($gdata['name']);
+        $generator->appendChild($text);
+        if (array_key_exists('uri', $gdata)) {
+            $generator->setAttribute('uri', $gdata['uri']);
+        }
+        if (array_key_exists('version', $gdata)) {
+            $generator->setAttribute('version', $gdata['version']);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/AtomSource.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/AtomSource.php
new file mode 100644
index 0000000000000000000000000000000000000000..d552b8089229ae9b6fe3704046fe036765295a85
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/AtomSource.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Feed;
+
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+
+/**
+*/
+class AtomSource extends AbstractAtom implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Source $container
+     */
+    public function __construct(Writer\Source $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render Atom Feed Metadata (Source element)
+     *
+     * @return \Zend\Feed\Writer\Renderer\Feed\Atom
+     */
+    public function render()
+    {
+        if (!$this->container->getEncoding()) {
+            $this->container->setEncoding('UTF-8');
+        }
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $root = $this->dom->createElement('source');
+        $this->setRootElement($root);
+        $this->dom->appendChild($root);
+        $this->_setLanguage($this->dom, $root);
+        $this->_setBaseUrl($this->dom, $root);
+        $this->_setTitle($this->dom, $root);
+        $this->_setDescription($this->dom, $root);
+        $this->_setDateCreated($this->dom, $root);
+        $this->_setDateModified($this->dom, $root);
+        $this->_setGenerator($this->dom, $root);
+        $this->_setLink($this->dom, $root);
+        $this->_setFeedLinks($this->dom, $root);
+        $this->_setId($this->dom, $root);
+        $this->_setAuthors($this->dom, $root);
+        $this->_setCopyright($this->dom, $root);
+        $this->_setCategories($this->dom, $root);
+
+        foreach ($this->extensions as $ext) {
+            $ext->setType($this->getType());
+            $ext->setRootElement($this->getRootElement());
+            $ext->setDOMDocument($this->getDOMDocument(), $root);
+            $ext->render();
+        }
+        return $this;
+    }
+
+    /**
+     * Set feed generator string
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getGenerator()) {
+            return;
+        }
+
+        $gdata = $this->getDataContainer()->getGenerator();
+        $generator = $dom->createElement('generator');
+        $root->appendChild($generator);
+        $text = $dom->createTextNode($gdata['name']);
+        $generator->appendChild($text);
+        if (array_key_exists('uri', $gdata)) {
+            $generator->setAttribute('uri', $gdata['uri']);
+        }
+        if (array_key_exists('version', $gdata)) {
+            $generator->setAttribute('version', $gdata['version']);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Rss.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Rss.php
new file mode 100644
index 0000000000000000000000000000000000000000..be902b8a901770f68e2816e424c44159477de500
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/Feed/Rss.php
@@ -0,0 +1,488 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer\Feed;
+
+use DateTime;
+use DOMDocument;
+use DOMElement;
+use Zend\Feed\Uri;
+use Zend\Feed\Writer;
+use Zend\Feed\Writer\Renderer;
+use Zend\Feed\Writer\Version;
+
+/**
+*/
+class Rss extends Renderer\AbstractRenderer implements Renderer\RendererInterface
+{
+    /**
+     * Constructor
+     *
+     * @param  Writer\Feed $container
+     */
+    public function __construct(Writer\Feed $container)
+    {
+        parent::__construct($container);
+    }
+
+    /**
+     * Render RSS feed
+     *
+     * @return self
+     */
+    public function render()
+    {
+        $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
+        $this->dom->formatOutput = true;
+        $this->dom->substituteEntities = false;
+        $rss = $this->dom->createElement('rss');
+        $this->setRootElement($rss);
+        $rss->setAttribute('version', '2.0');
+
+        $channel = $this->dom->createElement('channel');
+        $rss->appendChild($channel);
+        $this->dom->appendChild($rss);
+        $this->_setLanguage($this->dom, $channel);
+        $this->_setBaseUrl($this->dom, $channel);
+        $this->_setTitle($this->dom, $channel);
+        $this->_setDescription($this->dom, $channel);
+        $this->_setImage($this->dom, $channel);
+        $this->_setDateCreated($this->dom, $channel);
+        $this->_setDateModified($this->dom, $channel);
+        $this->_setLastBuildDate($this->dom, $channel);
+        $this->_setGenerator($this->dom, $channel);
+        $this->_setLink($this->dom, $channel);
+        $this->_setAuthors($this->dom, $channel);
+        $this->_setCopyright($this->dom, $channel);
+        $this->_setCategories($this->dom, $channel);
+
+        foreach ($this->extensions as $ext) {
+            $ext->setType($this->getType());
+            $ext->setRootElement($this->getRootElement());
+            $ext->setDOMDocument($this->getDOMDocument(), $channel);
+            $ext->render();
+        }
+
+        foreach ($this->container as $entry) {
+            if ($this->getDataContainer()->getEncoding()) {
+                $entry->setEncoding($this->getDataContainer()->getEncoding());
+            }
+            if ($entry instanceof Writer\Entry) {
+                $renderer = new Renderer\Entry\Rss($entry);
+            } else {
+                continue;
+            }
+            if ($this->ignoreExceptions === true) {
+                $renderer->ignoreExceptions();
+            }
+            $renderer->setType($this->getType());
+            $renderer->setRootElement($this->dom->documentElement);
+            $renderer->render();
+            $element = $renderer->getElement();
+            $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
+            $imported = $this->dom->importNode($element, $deep);
+            $channel->appendChild($imported);
+        }
+        return $this;
+    }
+
+    /**
+     * Set feed language
+     *
+     * @param DOMDocument $dom
+     * @param DOMElement $root
+     * @return void
+     */
+    protected function _setLanguage(DOMDocument $dom, DOMElement $root)
+    {
+        $lang = $this->getDataContainer()->getLanguage();
+        if (!$lang) {
+            return;
+        }
+        $language = $dom->createElement('language');
+        $root->appendChild($language);
+        $language->nodeValue = $lang;
+    }
+
+    /**
+     * Set feed title
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setTitle(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getTitle()) {
+            $message = 'RSS 2.0 feed elements MUST contain exactly one'
+            . ' title element but a title has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        $title = $dom->createElement('title');
+        $root->appendChild($title);
+        $text = $dom->createTextNode($this->getDataContainer()->getTitle());
+        $title->appendChild($text);
+    }
+
+    /**
+     * Set feed description
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setDescription(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDescription()) {
+            $message = 'RSS 2.0 feed elements MUST contain exactly one'
+            . ' description element but one has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        $subtitle = $dom->createElement('description');
+        $root->appendChild($subtitle);
+        $text = $dom->createTextNode($this->getDataContainer()->getDescription());
+        $subtitle->appendChild($text);
+    }
+
+    /**
+     * Set date feed was last modified
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDateModified(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateModified()) {
+            return;
+        }
+
+        $updated = $dom->createElement('pubDate');
+        $root->appendChild($updated);
+        $text = $dom->createTextNode(
+            $this->getDataContainer()->getDateModified()->format(DateTime::RSS)
+        );
+        $updated->appendChild($text);
+    }
+
+    /**
+     * Set feed generator string
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getGenerator()) {
+            $this->getDataContainer()->setGenerator(
+                'Zend_Feed_Writer',
+                Version::VERSION,
+                'http://framework.zend.com'
+            );
+        }
+
+        $gdata = $this->getDataContainer()->getGenerator();
+        $generator = $dom->createElement('generator');
+        $root->appendChild($generator);
+        $name = $gdata['name'];
+        if (array_key_exists('version', $gdata)) {
+            $name .= ' ' . $gdata['version'];
+        }
+        if (array_key_exists('uri', $gdata)) {
+            $name .= ' (' . $gdata['uri'] . ')';
+        }
+        $text = $dom->createTextNode($name);
+        $generator->appendChild($text);
+    }
+
+    /**
+     * Set link to feed
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setLink(DOMDocument $dom, DOMElement $root)
+    {
+        $value = $this->getDataContainer()->getLink();
+        if (!$value) {
+            $message = 'RSS 2.0 feed elements MUST contain exactly one'
+            . ' link element but one has not been set';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+        $link = $dom->createElement('link');
+        $root->appendChild($link);
+        $text = $dom->createTextNode($value);
+        $link->appendChild($text);
+        if (!Uri::factory($value)->isValid()) {
+            $link->setAttribute('isPermaLink', 'false');
+        }
+    }
+
+    /**
+     * Set feed authors
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setAuthors(DOMDocument $dom, DOMElement $root)
+    {
+        $authors = $this->getDataContainer()->getAuthors();
+        if (!$authors || empty($authors)) {
+            return;
+        }
+        foreach ($authors as $data) {
+            $author = $this->dom->createElement('author');
+            $name = $data['name'];
+            if (array_key_exists('email', $data)) {
+                $name = $data['email'] . ' (' . $data['name'] . ')';
+            }
+            $text = $dom->createTextNode($name);
+            $author->appendChild($text);
+            $root->appendChild($author);
+        }
+    }
+
+    /**
+     * Set feed copyright
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCopyright(DOMDocument $dom, DOMElement $root)
+    {
+        $copyright = $this->getDataContainer()->getCopyright();
+        if (!$copyright) {
+            return;
+        }
+        $copy = $dom->createElement('copyright');
+        $root->appendChild($copy);
+        $text = $dom->createTextNode($copyright);
+        $copy->appendChild($text);
+    }
+
+    /**
+     * Set feed channel image
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     * @throws Writer\Exception\InvalidArgumentException
+     */
+    protected function _setImage(DOMDocument $dom, DOMElement $root)
+    {
+        $image = $this->getDataContainer()->getImage();
+        if (!$image) {
+            return;
+        }
+
+        if (!isset($image['title']) || empty($image['title'])
+            || !is_string($image['title'])
+        ) {
+            $message = 'RSS 2.0 feed images must include a title';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        if (empty($image['link']) || !is_string($image['link'])
+            || !Uri::factory($image['link'])->isValid()
+        ) {
+            $message = 'Invalid parameter: parameter \'link\''
+            . ' must be a non-empty string and valid URI/IRI';
+            $exception = new Writer\Exception\InvalidArgumentException($message);
+            if (!$this->ignoreExceptions) {
+                throw $exception;
+            } else {
+                $this->exceptions[] = $exception;
+                return;
+            }
+        }
+
+        $img   = $dom->createElement('image');
+        $root->appendChild($img);
+
+        $url   = $dom->createElement('url');
+        $text  = $dom->createTextNode($image['uri']);
+        $url->appendChild($text);
+
+        $title = $dom->createElement('title');
+        $text  = $dom->createTextNode($image['title']);
+        $title->appendChild($text);
+
+        $link  = $dom->createElement('link');
+        $text  = $dom->createTextNode($image['link']);
+        $link->appendChild($text);
+
+        $img->appendChild($url);
+        $img->appendChild($title);
+        $img->appendChild($link);
+
+        if (isset($image['height'])) {
+            if (!ctype_digit((string) $image['height']) || $image['height'] > 400) {
+                $message = 'Invalid parameter: parameter \'height\''
+                         . ' must be an integer not exceeding 400';
+                $exception = new Writer\Exception\InvalidArgumentException($message);
+                if (!$this->ignoreExceptions) {
+                    throw $exception;
+                } else {
+                    $this->exceptions[] = $exception;
+                    return;
+                }
+            }
+            $height = $dom->createElement('height');
+            $text   = $dom->createTextNode($image['height']);
+            $height->appendChild($text);
+            $img->appendChild($height);
+        }
+        if (isset($image['width'])) {
+            if (!ctype_digit((string) $image['width']) || $image['width'] > 144) {
+                $message = 'Invalid parameter: parameter \'width\''
+                         . ' must be an integer not exceeding 144';
+                $exception = new Writer\Exception\InvalidArgumentException($message);
+                if (!$this->ignoreExceptions) {
+                    throw $exception;
+                } else {
+                    $this->exceptions[] = $exception;
+                    return;
+                }
+            }
+            $width = $dom->createElement('width');
+            $text  = $dom->createTextNode($image['width']);
+            $width->appendChild($text);
+            $img->appendChild($width);
+        }
+        if (isset($image['description'])) {
+            if (empty($image['description']) || !is_string($image['description'])) {
+                $message = 'Invalid parameter: parameter \'description\''
+                         . ' must be a non-empty string';
+                $exception = new Writer\Exception\InvalidArgumentException($message);
+                if (!$this->ignoreExceptions) {
+                    throw $exception;
+                } else {
+                    $this->exceptions[] = $exception;
+                    return;
+                }
+            }
+            $desc = $dom->createElement('description');
+            $text = $dom->createTextNode($image['description']);
+            $desc->appendChild($text);
+            $img->appendChild($desc);
+        }
+    }
+
+    /**
+     * Set date feed was created
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setDateCreated(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getDateCreated()) {
+            return;
+        }
+        if (!$this->getDataContainer()->getDateModified()) {
+            $this->getDataContainer()->setDateModified(
+                $this->getDataContainer()->getDateCreated()
+            );
+        }
+    }
+
+    /**
+     * Set date feed last build date
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setLastBuildDate(DOMDocument $dom, DOMElement $root)
+    {
+        if (!$this->getDataContainer()->getLastBuildDate()) {
+            return;
+        }
+
+        $lastBuildDate = $dom->createElement('lastBuildDate');
+        $root->appendChild($lastBuildDate);
+        $text = $dom->createTextNode(
+            $this->getDataContainer()->getLastBuildDate()->format(DateTime::RSS)
+        );
+        $lastBuildDate->appendChild($text);
+    }
+
+    /**
+     * Set base URL to feed links
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setBaseUrl(DOMDocument $dom, DOMElement $root)
+    {
+        $baseUrl = $this->getDataContainer()->getBaseUrl();
+        if (!$baseUrl) {
+            return;
+        }
+        $root->setAttribute('xml:base', $baseUrl);
+    }
+
+    /**
+     * Set feed categories
+     *
+     * @param  DOMDocument $dom
+     * @param  DOMElement $root
+     * @return void
+     */
+    protected function _setCategories(DOMDocument $dom, DOMElement $root)
+    {
+        $categories = $this->getDataContainer()->getCategories();
+        if (!$categories) {
+            return;
+        }
+        foreach ($categories as $cat) {
+            $category = $dom->createElement('category');
+            if (isset($cat['scheme'])) {
+                $category->setAttribute('domain', $cat['scheme']);
+            }
+            $text = $dom->createTextNode($cat['term']);
+            $category->appendChild($text);
+            $root->appendChild($category);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Renderer/RendererInterface.php b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/RendererInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..24738efcab11f09916fd0a42d598383eccc8f163
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Renderer/RendererInterface.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer\Renderer;
+
+use DOMDocument;
+use DOMElement;
+
+/**
+*/
+interface RendererInterface
+{
+    /**
+     * Render feed/entry
+     *
+     * @return void
+     */
+    public function render();
+
+    /**
+     * Save feed and/or entry to XML and return string
+     *
+     * @return string
+     */
+    public function saveXml();
+
+    /**
+     * Get DOM document
+     *
+     * @return DOMDocument
+     */
+    public function getDomDocument();
+
+    /**
+     * Get document element from DOM
+     *
+     * @return DOMElement
+     */
+    public function getElement();
+
+    /**
+     * Get data container containing feed items
+     *
+     * @return mixed
+     */
+    public function getDataContainer();
+
+    /**
+     * Should exceptions be ignored?
+     *
+     * @return mixed
+     */
+    public function ignoreExceptions();
+
+    /**
+     * Get list of thrown exceptions
+     *
+     * @return array
+     */
+    public function getExceptions();
+
+    /**
+     * Set the current feed type being exported to "rss" or "atom". This allows
+     * other objects to gracefully choose whether to execute or not, depending
+     * on their appropriateness for the current type, e.g. renderers.
+     *
+     * @param string $type
+     */
+    public function setType($type);
+
+    /**
+     * Retrieve the current or last feed type exported.
+     *
+     * @return string Value will be "rss" or "atom"
+     */
+    public function getType();
+
+    /**
+     * Sets the absolute root element for the XML feed being generated. This
+     * helps simplify the appending of namespace declarations, but also ensures
+     * namespaces are added to the root element - not scattered across the entire
+     * XML file - may assist namespace unsafe parsers and looks pretty ;).
+     *
+     * @param DOMElement $root
+     */
+    public function setRootElement(DOMElement $root);
+
+    /**
+     * Retrieve the absolute root element for the XML feed being generated.
+     *
+     * @return DOMElement
+     */
+    public function getRootElement();
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Source.php b/core/vendor/zendframework/zend-feed/src/Writer/Source.php
new file mode 100644
index 0000000000000000000000000000000000000000..23affa7a6fadff87680e8ff7117eaf420a9202e5
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Source.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+/**
+*/
+class Source extends AbstractFeed
+{
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Version.php b/core/vendor/zendframework/zend-feed/src/Writer/Version.php
new file mode 100644
index 0000000000000000000000000000000000000000..08351ca3f15dec2934585e1522c1f0e630635051
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Version.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+abstract class Version
+{
+    const VERSION = '2';
+}
diff --git a/core/vendor/zendframework/zend-feed/src/Writer/Writer.php b/core/vendor/zendframework/zend-feed/src/Writer/Writer.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c5397892bfa8ec5230a6bd12003a09388b9faee
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/src/Writer/Writer.php
@@ -0,0 +1,199 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Feed\Writer;
+
+/**
+*/
+class Writer
+{
+    /**
+     * Namespace constants
+     */
+    const NAMESPACE_ATOM_03  = 'http://purl.org/atom/ns#';
+    const NAMESPACE_ATOM_10  = 'http://www.w3.org/2005/Atom';
+    const NAMESPACE_RDF      = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
+    const NAMESPACE_RSS_090  = 'http://my.netscape.com/rdf/simple/0.9/';
+    const NAMESPACE_RSS_10   = 'http://purl.org/rss/1.0/';
+
+    /**
+     * Feed type constants
+     */
+    const TYPE_ANY              = 'any';
+    const TYPE_ATOM_03          = 'atom-03';
+    const TYPE_ATOM_10          = 'atom-10';
+    const TYPE_ATOM_ANY         = 'atom';
+    const TYPE_RSS_090          = 'rss-090';
+    const TYPE_RSS_091          = 'rss-091';
+    const TYPE_RSS_091_NETSCAPE = 'rss-091n';
+    const TYPE_RSS_091_USERLAND = 'rss-091u';
+    const TYPE_RSS_092          = 'rss-092';
+    const TYPE_RSS_093          = 'rss-093';
+    const TYPE_RSS_094          = 'rss-094';
+    const TYPE_RSS_10           = 'rss-10';
+    const TYPE_RSS_20           = 'rss-20';
+    const TYPE_RSS_ANY          = 'rss';
+
+    /**
+     * @var ExtensionManagerInterface
+     */
+    protected static $extensionManager = null;
+
+    /**
+     * Array of registered extensions by class postfix (after the base class
+     * name) across four categories - data containers and renderers for entry
+     * and feed levels.
+     *
+     * @var array
+     */
+    protected static $extensions = array(
+        'entry'         => array(),
+        'feed'          => array(),
+        'entryRenderer' => array(),
+        'feedRenderer'  => array(),
+    );
+
+    /**
+     * Set plugin loader for use with Extensions
+     *
+     * @param ExtensionManagerInterface
+     */
+    public static function setExtensionManager(ExtensionManagerInterface $extensionManager)
+    {
+        static::$extensionManager = $extensionManager;
+    }
+
+    /**
+     * Get plugin manager for use with Extensions
+     *
+     * @return ExtensionManagerInterface
+     */
+    public static function getExtensionManager()
+    {
+        if (!isset(static::$extensionManager)) {
+            static::setExtensionManager(new ExtensionManager());
+        }
+        return static::$extensionManager;
+    }
+
+    /**
+     * Register an Extension by name
+     *
+     * @param  string $name
+     * @return void
+     * @throws Exception\RuntimeException if unable to resolve Extension class
+     */
+    public static function registerExtension($name)
+    {
+        $feedName          = $name . '\Feed';
+        $entryName         = $name . '\Entry';
+        $feedRendererName  = $name . '\Renderer\Feed';
+        $entryRendererName = $name . '\Renderer\Entry';
+        $manager           = static::getExtensionManager();
+        if (static::isRegistered($name)) {
+            if ($manager->has($feedName)
+                || $manager->has($entryName)
+                || $manager->has($feedRendererName)
+                || $manager->has($entryRendererName)
+            ) {
+                return;
+            }
+        }
+        if (!$manager->has($feedName)
+            && !$manager->has($entryName)
+            && !$manager->has($feedRendererName)
+            && !$manager->has($entryRendererName)
+        ) {
+            throw new Exception\RuntimeException('Could not load extension: ' . $name
+                . 'using Plugin Loader. Check prefix paths are configured and extension exists.');
+        }
+        if ($manager->has($feedName)) {
+            static::$extensions['feed'][] = $feedName;
+        }
+        if ($manager->has($entryName)) {
+            static::$extensions['entry'][] = $entryName;
+        }
+        if ($manager->has($feedRendererName)) {
+            static::$extensions['feedRenderer'][] = $feedRendererName;
+        }
+        if ($manager->has($entryRendererName)) {
+            static::$extensions['entryRenderer'][] = $entryRendererName;
+        }
+    }
+
+    /**
+     * Is a given named Extension registered?
+     *
+     * @param  string $extensionName
+     * @return bool
+     */
+    public static function isRegistered($extensionName)
+    {
+        $feedName          = $extensionName . '\Feed';
+        $entryName         = $extensionName . '\Entry';
+        $feedRendererName  = $extensionName . '\Renderer\Feed';
+        $entryRendererName = $extensionName . '\Renderer\Entry';
+        if (in_array($feedName, static::$extensions['feed'])
+            || in_array($entryName, static::$extensions['entry'])
+            || in_array($feedRendererName, static::$extensions['feedRenderer'])
+            || in_array($entryRendererName, static::$extensions['entryRenderer'])
+        ) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Get a list of extensions
+     *
+     * @return array
+     */
+    public static function getExtensions()
+    {
+        return static::$extensions;
+    }
+
+    /**
+     * Reset class state to defaults
+     *
+     * @return void
+     */
+    public static function reset()
+    {
+        static::$extensionManager = null;
+        static::$extensions   = array(
+            'entry'         => array(),
+            'feed'          => array(),
+            'entryRenderer' => array(),
+            'feedRenderer'  => array(),
+        );
+    }
+
+    /**
+     * Register core (default) extensions
+     *
+     * @return void
+     */
+    public static function registerCoreExtensions()
+    {
+        static::registerExtension('DublinCore');
+        static::registerExtension('Content');
+        static::registerExtension('Atom');
+        static::registerExtension('Slash');
+        static::registerExtension('WellFormedWeb');
+        static::registerExtension('Threading');
+        static::registerExtension('ITunes');
+    }
+
+    public static function lcfirst($str)
+    {
+        $str[0] = strtolower($str[0]);
+        return $str;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/.coveralls.yml b/core/vendor/zendframework/zend-stdlib/.coveralls.yml
new file mode 100644
index 0000000000000000000000000000000000000000..53bda829c8127d2fc8263e6fb6a54fb66f4916b1
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/.coveralls.yml
@@ -0,0 +1,3 @@
+coverage_clover: clover.xml
+json_path: coveralls-upload.json
+src_dir: src
diff --git a/core/vendor/zendframework/zend-stdlib/AbstractOptions.php b/core/vendor/zendframework/zend-stdlib/AbstractOptions.php
deleted file mode 100644
index aaa1dd299509fe5e102bcb4e9e6e0da61172766d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/AbstractOptions.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Traversable;
-
-abstract class AbstractOptions implements ParameterObjectInterface
-{
-    /**
-     * We use the __ prefix to avoid collisions with properties in
-     * user-implementations.
-     *
-     * @var bool
-     */
-    protected $__strictMode__ = true;
-
-    /**
-     * Constructor
-     *
-     * @param  array|Traversable|null $options
-     */
-    public function __construct($options = null)
-    {
-        if (null !== $options) {
-            $this->setFromArray($options);
-        }
-    }
-
-    /**
-     * Set one or more configuration properties
-     *
-     * @param  array|Traversable|AbstractOptions $options
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractOptions Provides fluent interface
-     */
-    public function setFromArray($options)
-    {
-        if ($options instanceof self) {
-            $options = $options->toArray();
-        }
-
-        if (!is_array($options) && !$options instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(
-                sprintf(
-                    'Parameter provided to %s must be an %s, %s or %s',
-                    __METHOD__,
-                    'array',
-                    'Traversable',
-                    'Zend\Stdlib\AbstractOptions'
-                )
-            );
-        }
-
-        foreach ($options as $key => $value) {
-            $this->__set($key, $value);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Cast to array
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        $transform = function ($letters) {
-            $letter = array_shift($letters);
-            return '_' . strtolower($letter);
-        };
-        foreach ($this as $key => $value) {
-            if ($key === '__strictMode__') {
-                continue;
-            }
-            $normalizedKey = preg_replace_callback('/([A-Z])/', $transform, $key);
-            $array[$normalizedKey] = $value;
-        }
-        return $array;
-    }
-
-    /**
-     * Set a configuration property
-     *
-     * @see ParameterObject::__set()
-     * @param string $key
-     * @param mixed $value
-     * @throws Exception\BadMethodCallException
-     * @return void
-     */
-    public function __set($key, $value)
-    {
-        $setter = 'set' . str_replace('_', '', $key);
-
-        if (is_callable(array($this, $setter))) {
-            $this->{$setter}($value);
-
-            return;
-        }
-
-        if ($this->__strictMode__) {
-            throw new Exception\BadMethodCallException(sprintf(
-                'The option "%s" does not have a callable "%s" ("%s") setter method which must be defined',
-                $key,
-                'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key))),
-                $setter
-            ));
-        }
-    }
-
-    /**
-     * Get a configuration property
-     *
-     * @see ParameterObject::__get()
-     * @param string $key
-     * @throws Exception\BadMethodCallException
-     * @return mixed
-     */
-    public function __get($key)
-    {
-        $getter = 'get' . str_replace('_', '', $key);
-
-        if (is_callable(array($this, $getter))) {
-            return $this->{$getter}();
-        }
-
-        throw new Exception\BadMethodCallException(sprintf(
-            'The option "%s" does not have a callable "%s" getter method which must be defined',
-            $key,
-            'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key)))
-        ));
-    }
-
-    /**
-     * Test if a configuration property is null
-     * @see ParameterObject::__isset()
-     * @param string $key
-     * @return bool
-     */
-    public function __isset($key)
-    {
-        $getter = 'get' . str_replace('_', '', $key);
-
-        return method_exists($this, $getter) && null !== $this->__get($key);
-    }
-
-    /**
-     * Set a configuration property to NULL
-     *
-     * @see ParameterObject::__unset()
-     * @param string $key
-     * @throws Exception\InvalidArgumentException
-     * @return void
-     */
-    public function __unset($key)
-    {
-        try {
-            $this->__set($key, null);
-        } catch (Exception\BadMethodCallException $e) {
-            throw new Exception\InvalidArgumentException(
-                'The class property $' . $key . ' cannot be unset as'
-                . ' NULL is an invalid value for it',
-                0,
-                $e
-            );
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ArrayObject.php b/core/vendor/zendframework/zend-stdlib/ArrayObject.php
deleted file mode 100644
index 44145c8554ebe04a1fb6b19004f7a1084854f245..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ArrayObject.php
+++ /dev/null
@@ -1,432 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayAccess;
-use Countable;
-use IteratorAggregate;
-use Serializable;
-
-/**
- * Custom framework ArrayObject implementation
- *
- * Extends version-specific "abstract" implementation.
- */
-class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
-{
-    /**
-     * Properties of the object have their normal functionality
-     * when accessed as list (var_dump, foreach, etc.).
-     */
-    const STD_PROP_LIST = 1;
-
-    /**
-     * Entries can be accessed as properties (read and write).
-     */
-    const ARRAY_AS_PROPS = 2;
-
-    /**
-     * @var array
-     */
-    protected $storage;
-
-    /**
-     * @var int
-     */
-    protected $flag;
-
-    /**
-     * @var string
-     */
-    protected $iteratorClass;
-
-    /**
-     * @var array
-     */
-    protected $protectedProperties;
-
-    /**
-     * Constructor
-     *
-     * @param array  $input
-     * @param int    $flags
-     * @param string $iteratorClass
-     */
-    public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
-    {
-        $this->setFlags($flags);
-        $this->storage = $input;
-        $this->setIteratorClass($iteratorClass);
-        $this->protectedProperties = array_keys(get_object_vars($this));
-    }
-
-    /**
-     * Returns whether the requested key exists
-     *
-     * @param  mixed $key
-     * @return bool
-     */
-    public function __isset($key)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetExists($key);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-
-        return isset($this->$key);
-    }
-
-    /**
-     * Sets the value at the specified key to value
-     *
-     * @param  mixed $key
-     * @param  mixed $value
-     * @return void
-     */
-    public function __set($key, $value)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetSet($key, $value);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-        $this->$key = $value;
-    }
-
-    /**
-     * Unsets the value at the specified key
-     *
-     * @param  mixed $key
-     * @return void
-     */
-    public function __unset($key)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetUnset($key);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-        unset($this->$key);
-    }
-
-    /**
-     * Returns the value at the specified key by reference
-     *
-     * @param  mixed $key
-     * @return mixed
-     */
-    public function &__get($key)
-    {
-        $ret = null;
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            $ret =& $this->offsetGet($key);
-
-            return $ret;
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-
-        return $this->$key;
-    }
-
-    /**
-     * Appends the value
-     *
-     * @param  mixed $value
-     * @return void
-     */
-    public function append($value)
-    {
-        $this->storage[] = $value;
-    }
-
-    /**
-     * Sort the entries by value
-     *
-     * @return void
-     */
-    public function asort()
-    {
-        asort($this->storage);
-    }
-
-    /**
-     * Get the number of public properties in the ArrayObject
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->storage);
-    }
-
-    /**
-     * Exchange the array for another one.
-     *
-     * @param  array|ArrayObject $data
-     * @return array
-     */
-    public function exchangeArray($data)
-    {
-        if (!is_array($data) && !is_object($data)) {
-            throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
-        }
-
-        if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) {
-            $data = $data->getArrayCopy();
-        }
-        if (!is_array($data)) {
-            $data = (array) $data;
-        }
-
-        $storage = $this->storage;
-
-        $this->storage = $data;
-
-        return $storage;
-    }
-
-    /**
-     * Creates a copy of the ArrayObject.
-     *
-     * @return array
-     */
-    public function getArrayCopy()
-    {
-        return $this->storage;
-    }
-
-    /**
-     * Gets the behavior flags.
-     *
-     * @return int
-     */
-    public function getFlags()
-    {
-        return $this->flag;
-    }
-
-    /**
-     * Create a new iterator from an ArrayObject instance
-     *
-     * @return \Iterator
-     */
-    public function getIterator()
-    {
-        $class = $this->iteratorClass;
-
-        return new $class($this->storage);
-    }
-
-    /**
-     * Gets the iterator classname for the ArrayObject.
-     *
-     * @return string
-     */
-    public function getIteratorClass()
-    {
-        return $this->iteratorClass;
-    }
-
-    /**
-     * Sort the entries by key
-     *
-     * @return void
-     */
-    public function ksort()
-    {
-        ksort($this->storage);
-    }
-
-    /**
-     * Sort an array using a case insensitive "natural order" algorithm
-     *
-     * @return void
-     */
-    public function natcasesort()
-    {
-        natcasesort($this->storage);
-    }
-
-    /**
-     * Sort entries using a "natural order" algorithm
-     *
-     * @return void
-     */
-    public function natsort()
-    {
-        natsort($this->storage);
-    }
-
-    /**
-     * Returns whether the requested key exists
-     *
-     * @param  mixed $key
-     * @return bool
-     */
-    public function offsetExists($key)
-    {
-        return isset($this->storage[$key]);
-    }
-
-    /**
-     * Returns the value at the specified key
-     *
-     * @param  mixed $key
-     * @return mixed
-     */
-    public function &offsetGet($key)
-    {
-        $ret = null;
-        if (!$this->offsetExists($key)) {
-            return $ret;
-        }
-        $ret =& $this->storage[$key];
-
-        return $ret;
-    }
-
-    /**
-     * Sets the value at the specified key to value
-     *
-     * @param  mixed $key
-     * @param  mixed $value
-     * @return void
-     */
-    public function offsetSet($key, $value)
-    {
-        $this->storage[$key] = $value;
-    }
-
-    /**
-     * Unsets the value at the specified key
-     *
-     * @param  mixed $key
-     * @return void
-     */
-    public function offsetUnset($key)
-    {
-        if ($this->offsetExists($key)) {
-            unset($this->storage[$key]);
-        }
-    }
-
-    /**
-     * Serialize an ArrayObject
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize(get_object_vars($this));
-    }
-
-    /**
-     * Sets the behavior flags
-     *
-     * @param  int  $flags
-     * @return void
-     */
-    public function setFlags($flags)
-    {
-        $this->flag = $flags;
-    }
-
-    /**
-     * Sets the iterator classname for the ArrayObject
-     *
-     * @param  string $class
-     * @return void
-     */
-    public function setIteratorClass($class)
-    {
-        if (class_exists($class)) {
-            $this->iteratorClass = $class;
-
-            return ;
-        }
-
-        if (strpos($class, '\\') === 0) {
-            $class = '\\' . $class;
-            if (class_exists($class)) {
-                $this->iteratorClass = $class;
-
-                return ;
-            }
-        }
-
-        throw new Exception\InvalidArgumentException('The iterator class does not exist');
-    }
-
-    /**
-     * Sort the entries with a user-defined comparison function and maintain key association
-     *
-     * @param  callable $function
-     * @return void
-     */
-    public function uasort($function)
-    {
-        if (is_callable($function)) {
-            uasort($this->storage, $function);
-        }
-    }
-
-    /**
-     * Sort the entries by keys using a user-defined comparison function
-     *
-     * @param  callable $function
-     * @return void
-     */
-    public function uksort($function)
-    {
-        if (is_callable($function)) {
-            uksort($this->storage, $function);
-        }
-    }
-
-    /**
-     * Unserialize an ArrayObject
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        $ar                        = unserialize($data);
-        $this->protectedProperties = array_keys(get_object_vars($this));
-
-        $this->setFlags($ar['flag']);
-        $this->exchangeArray($ar['storage']);
-        $this->setIteratorClass($ar['iteratorClass']);
-
-        foreach ($ar as $k => $v) {
-            switch ($k) {
-                case 'flag':
-                    $this->setFlags($v);
-                    break;
-                case 'storage':
-                    $this->exchangeArray($v);
-                    break;
-                case 'iteratorClass':
-                    $this->setIteratorClass($v);
-                    break;
-                case 'protectedProperties':
-                    continue;
-                default:
-                    $this->__set($k, $v);
-            }
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ArraySerializableInterface.php b/core/vendor/zendframework/zend-stdlib/ArraySerializableInterface.php
deleted file mode 100644
index dcf84719521a1de77ac0c9130222d5e7c3ae424e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ArraySerializableInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface ArraySerializableInterface
-{
-    /**
-     * Exchange internal values from provided array
-     *
-     * @param  array $array
-     * @return void
-     */
-    public function exchangeArray(array $array);
-
-    /**
-     * Return an array representation of the object
-     *
-     * @return array
-     */
-    public function getArrayCopy();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ArrayStack.php b/core/vendor/zendframework/zend-stdlib/ArrayStack.php
deleted file mode 100644
index 39d02aacac19c9654cc89fab28d7a8fca0de8f53..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ArrayStack.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayIterator;
-use ArrayObject as PhpArrayObject;
-
-/**
- * ArrayObject that acts as a stack with regards to iteration
- */
-class ArrayStack extends PhpArrayObject
-{
-    /**
-     * Retrieve iterator
-     *
-     * Retrieve an array copy of the object, reverse its order, and return an
-     * ArrayIterator with that reversed array.
-     *
-     * @return ArrayIterator
-     */
-    public function getIterator()
-    {
-        $array = $this->getArrayCopy();
-        return new ArrayIterator(array_reverse($array));
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ArrayUtils.php b/core/vendor/zendframework/zend-stdlib/ArrayUtils.php
deleted file mode 100644
index 3545054ed84832a1dbed8868de6cf0c90430fd7c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ArrayUtils.php
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils\MergeRemoveKey;
-use Zend\Stdlib\ArrayUtils\MergeReplaceKeyInterface;
-
-/**
- * Utility class for testing and manipulation of PHP arrays.
- *
- * Declared abstract, as we have no need for instantiation.
- */
-abstract class ArrayUtils
-{
-    /**
-     * Compatibility Flag for ArrayUtils::filter
-     */
-    const ARRAY_FILTER_USE_BOTH = 1;
-
-    /**
-     * Compatibility Flag for ArrayUtils::filter
-     */
-    const ARRAY_FILTER_USE_KEY  = 2;
-
-    /**
-     * Test whether an array contains one or more string keys
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Should an empty array() return true
-     * @return bool
-     */
-    public static function hasStringKeys($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return count(array_filter(array_keys($value), 'is_string')) > 0;
-    }
-
-    /**
-     * Test whether an array contains one or more integer keys
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Should an empty array() return true
-     * @return bool
-     */
-    public static function hasIntegerKeys($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return count(array_filter(array_keys($value), 'is_int')) > 0;
-    }
-
-    /**
-     * Test whether an array contains one or more numeric keys.
-     *
-     * A numeric key can be one of the following:
-     * - an integer 1,
-     * - a string with a number '20'
-     * - a string with negative number: '-1000'
-     * - a float: 2.2120, -78.150999
-     * - a string with float:  '4000.99999', '-10.10'
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Should an empty array() return true
-     * @return bool
-     */
-    public static function hasNumericKeys($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return count(array_filter(array_keys($value), 'is_numeric')) > 0;
-    }
-
-    /**
-     * Test whether an array is a list
-     *
-     * A list is a collection of values assigned to continuous integer keys
-     * starting at 0 and ending at count() - 1.
-     *
-     * For example:
-     * <code>
-     * $list = array('a', 'b', 'c', 'd');
-     * $list = array(
-     *     0 => 'foo',
-     *     1 => 'bar',
-     *     2 => array('foo' => 'baz'),
-     * );
-     * </code>
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Is an empty list a valid list?
-     * @return bool
-     */
-    public static function isList($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return (array_values($value) === $value);
-    }
-
-    /**
-     * Test whether an array is a hash table.
-     *
-     * An array is a hash table if:
-     *
-     * 1. Contains one or more non-integer keys, or
-     * 2. Integer keys are non-continuous or misaligned (not starting with 0)
-     *
-     * For example:
-     * <code>
-     * $hash = array(
-     *     'foo' => 15,
-     *     'bar' => false,
-     * );
-     * $hash = array(
-     *     1995  => 'Birth of PHP',
-     *     2009  => 'PHP 5.3.0',
-     *     2012  => 'PHP 5.4.0',
-     * );
-     * $hash = array(
-     *     'formElement,
-     *     'options' => array( 'debug' => true ),
-     * );
-     * </code>
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Is an empty array() a valid hash table?
-     * @return bool
-     */
-    public static function isHashTable($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return (array_values($value) !== $value);
-    }
-
-    /**
-     * Checks if a value exists in an array.
-     *
-     * Due to "foo" == 0 === TRUE with in_array when strict = false, an option
-     * has been added to prevent this. When $strict = 0/false, the most secure
-     * non-strict check is implemented. if $strict = -1, the default in_array
-     * non-strict behaviour is used.
-     *
-     * @param mixed $needle
-     * @param array $haystack
-     * @param int|bool $strict
-     * @return bool
-     */
-    public static function inArray($needle, array $haystack, $strict = false)
-    {
-        if (!$strict) {
-            if (is_int($needle) || is_float($needle)) {
-                $needle = (string) $needle;
-            }
-            if (is_string($needle)) {
-                foreach ($haystack as &$h) {
-                    if (is_int($h) || is_float($h)) {
-                        $h = (string) $h;
-                    }
-                }
-            }
-        }
-        return in_array($needle, $haystack, $strict);
-    }
-
-    /**
-     * Convert an iterator to an array.
-     *
-     * Converts an iterator to an array. The $recursive flag, on by default,
-     * hints whether or not you want to do so recursively.
-     *
-     * @param  array|Traversable  $iterator     The array or Traversable object to convert
-     * @param  bool               $recursive    Recursively check all nested structures
-     * @throws Exception\InvalidArgumentException if $iterator is not an array or a Traversable object
-     * @return array
-     */
-    public static function iteratorToArray($iterator, $recursive = true)
-    {
-        if (!is_array($iterator) && !$iterator instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable object');
-        }
-
-        if (!$recursive) {
-            if (is_array($iterator)) {
-                return $iterator;
-            }
-
-            return iterator_to_array($iterator);
-        }
-
-        if (method_exists($iterator, 'toArray')) {
-            return $iterator->toArray();
-        }
-
-        $array = array();
-        foreach ($iterator as $key => $value) {
-            if (is_scalar($value)) {
-                $array[$key] = $value;
-                continue;
-            }
-
-            if ($value instanceof Traversable) {
-                $array[$key] = static::iteratorToArray($value, $recursive);
-                continue;
-            }
-
-            if (is_array($value)) {
-                $array[$key] = static::iteratorToArray($value, $recursive);
-                continue;
-            }
-
-            $array[$key] = $value;
-        }
-
-        return $array;
-    }
-
-    /**
-     * Merge two arrays together.
-     *
-     * If an integer key exists in both arrays and preserveNumericKeys is false, the value
-     * from the second array will be appended to the first array. If both values are arrays, they
-     * are merged together, else the value of the second array overwrites the one of the first array.
-     *
-     * @param  array $a
-     * @param  array $b
-     * @param  bool  $preserveNumericKeys
-     * @return array
-     */
-    public static function merge(array $a, array $b, $preserveNumericKeys = false)
-    {
-        foreach ($b as $key => $value) {
-            if ($value instanceof MergeReplaceKeyInterface) {
-                $a[$key] = $value->getData();
-            } elseif (isset($a[$key]) || array_key_exists($key, $a)) {
-                if ($value instanceof MergeRemoveKey) {
-                    unset($a[$key]);
-                } elseif (!$preserveNumericKeys && is_int($key)) {
-                    $a[] = $value;
-                } elseif (is_array($value) && is_array($a[$key])) {
-                    $a[$key] = static::merge($a[$key], $value, $preserveNumericKeys);
-                } else {
-                    $a[$key] = $value;
-                }
-            } else {
-                if (!$value instanceof MergeRemoveKey) {
-                    $a[$key] = $value;
-                }
-            }
-        }
-
-        return $a;
-    }
-
-    /**
-     * Compatibility Method for array_filter on <5.6 systems
-     *
-     * @param array $data
-     * @param callable $callback
-     * @param null|int $flag
-     * @return array
-     */
-    public static function filter(array $data, $callback, $flag = null)
-    {
-        if (! is_callable($callback)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                'Second parameter of %s must be callable',
-                __METHOD__
-            ));
-        }
-
-        if (version_compare(PHP_VERSION, '5.6.0') >= 0) {
-            return array_filter($data, $callback, $flag);
-        }
-
-        $output = array();
-        foreach ($data as $key => $value) {
-            $params = array($value);
-
-            if ($flag === static::ARRAY_FILTER_USE_BOTH) {
-                $params[] = $key;
-            }
-
-            if ($flag === static::ARRAY_FILTER_USE_KEY) {
-                $params = array($key);
-            }
-
-            $response = call_user_func_array($callback, $params);
-            if ($response) {
-                $output[$key] = $value;
-            }
-        }
-
-        return $output;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeRemoveKey.php b/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeRemoveKey.php
deleted file mode 100644
index 7c4d097d92cb03c92c6ffa8567af543f87f43ddf..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeRemoveKey.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayUtils;
-
-final class MergeRemoveKey
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeReplaceKey.php b/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeReplaceKey.php
deleted file mode 100644
index 24c1df4d7a247736b6e67b9fecfd33fee344e84c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeReplaceKey.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayUtils;
-
-final class MergeReplaceKey implements MergeReplaceKeyInterface
-{
-    /**
-     * @var mixed
-     */
-    protected $data;
-
-    /**
-     * @param mixed $data
-     */
-    public function __construct($data)
-    {
-        $this->data = $data;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getData()
-    {
-        return $this->data;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeReplaceKeyInterface.php b/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeReplaceKeyInterface.php
deleted file mode 100644
index 725cf11bc7da9b1fcc9bed063b06be686514336c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ArrayUtils/MergeReplaceKeyInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayUtils;
-
-/**
- * Marker interface: can be used to replace keys completely in {@see ArrayUtils::merge()} operations
- */
-interface MergeReplaceKeyInterface
-{
-    /**
-     * @return mixed
-     */
-    public function getData();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/CONTRIBUTING.md b/core/vendor/zendframework/zend-stdlib/CONTRIBUTING.md
index e77f5d2d5b37809160135bc2c6b6a51b6637d794..b87ecf03935f246d3991ba3e88ab2776d2c23acc 100644
--- a/core/vendor/zendframework/zend-stdlib/CONTRIBUTING.md
+++ b/core/vendor/zendframework/zend-stdlib/CONTRIBUTING.md
@@ -1,3 +1,229 @@
 # CONTRIBUTING
 
-Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
\ No newline at end of file
+## RESOURCES
+
+If you wish to contribute to Zend Framework, please be sure to
+read/subscribe to the following resources:
+
+ -  [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
+ -  [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
+ -  ZF Contributor's mailing list:
+    Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
+    Subscribe: zf-contributors-subscribe@lists.zend.com
+ -  ZF Contributor's IRC channel:
+    #zftalk.dev on Freenode.net
+
+If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-stdlib/issues/new).
+
+## Reporting Potential Security Issues
+
+If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
+issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
+We will work with you to verify the vulnerability and patch it as soon as possible.
+
+When reporting issues, please provide the following information:
+
+- Component(s) affected
+- A description indicating how to reproduce the issue
+- A summary of the security vulnerability and impact
+
+We request that you contact us via the email address above and give the project
+contributors a chance to resolve the vulnerability and issue a new release prior
+to any public exposure; this helps protect users and provides them with a chance
+to upgrade and/or update in order to protect their applications.
+
+For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
+
+## RUNNING TESTS
+
+> ### Note: testing versions prior to 2.4
+>
+> This component originates with Zend Framework 2. During the lifetime of ZF2,
+> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
+> changes were necessary. However, due to the migration, tests may not run on
+> versions < 2.4. As such, you may need to change the PHPUnit dependency if
+> attempting a fix on such a version.
+
+To run tests:
+
+- Clone the repository:
+
+  ```console
+  $ git clone git@github.com:zendframework/zend-stdlib.git
+  $ cd
+  ```
+
+- Install dependencies via composer:
+
+  ```console
+  $ curl -sS https://getcomposer.org/installer | php --
+  $ ./composer.phar install
+  ```
+
+  If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
+
+- Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
+
+  ```console
+  $ ./vendor/bin/phpunit
+  ```
+
+You can turn on conditional tests with the phpunit.xml file.
+To do so:
+
+ -  Copy `phpunit.xml.dist` file to `phpunit.xml`
+ -  Edit `phpunit.xml` to enable any specific functionality you
+    want to test, as well as to provide test values to utilize.
+
+## Running Coding Standards Checks
+
+This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
+standards checks, and provides configuration for our selected checks.
+`php-cs-fixer` is installed by default via Composer.
+
+To run checks only:
+
+```console
+$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
+```
+
+To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
+flag:
+
+```console
+$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
+```
+
+If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
+they pass, and make sure you add and commit the changes after verification.
+
+## Recommended Workflow for Contributions
+
+Your first step is to establish a public repository from which we can
+pull your work into the master repository. We recommend using
+[GitHub](https://github.com), as that is where the component is already hosted.
+
+1. Setup a [GitHub account](http://github.com/), if you haven't yet
+2. Fork the repository (http://github.com/zendframework/zend-stdlib)
+3. Clone the canonical repository locally and enter it.
+
+   ```console
+   $ git clone git://github.com:zendframework/zend-stdlib.git
+   $ cd zend-stdlib
+   ```
+
+4. Add a remote to your fork; substitute your GitHub username in the command
+   below.
+
+   ```console
+   $ git remote add {username} git@github.com:{username}/zend-stdlib.git
+   $ git fetch {username}
+   ```
+
+### Keeping Up-to-Date
+
+Periodically, you should update your fork or personal repository to
+match the canonical ZF repository. Assuming you have setup your local repository
+per the instructions above, you can do the following:
+
+
+```console
+$ git checkout master
+$ git fetch origin
+$ git rebase origin/master
+# OPTIONALLY, to keep your remote up-to-date -
+$ git push {username} master:master
+```
+
+If you're tracking other branches -- for example, the "develop" branch, where
+new feature development occurs -- you'll want to do the same operations for that
+branch; simply substitute  "develop" for "master".
+
+### Working on a patch
+
+We recommend you do each new feature or bugfix in a new branch. This simplifies
+the task of code review as well as the task of merging your changes into the
+canonical repository.
+
+A typical workflow will then consist of the following:
+
+1. Create a new local branch based off either your master or develop branch.
+2. Switch to your new local branch. (This step can be combined with the
+   previous step with the use of `git checkout -b`.)
+3. Do some work, commit, repeat as necessary.
+4. Push the local branch to your remote repository.
+5. Send a pull request.
+
+The mechanics of this process are actually quite trivial. Below, we will
+create a branch for fixing an issue in the tracker.
+
+```console
+$ git checkout -b hotfix/9295
+Switched to a new branch 'hotfix/9295'
+```
+
+... do some work ...
+
+
+```console
+$ git commit
+```
+
+... write your log message ...
+
+
+```console
+$ git push {username} hotfix/9295:hotfix/9295
+Counting objects: 38, done.
+Delta compression using up to 2 threads.
+Compression objects: 100% (18/18), done.
+Writing objects: 100% (20/20), 8.19KiB, done.
+Total 20 (delta 12), reused 0 (delta 0)
+To ssh://git@github.com/{username}/zend-stdlib.git
+   b5583aa..4f51698  HEAD -> master
+```
+
+To send a pull request, you have two options.
+
+If using GitHub, you can do the pull request from there. Navigate to
+your repository, select the branch you just created, and then select the
+"Pull Request" button in the upper right. Select the user/organization
+"zendframework" as the recipient.
+
+If using your own repository - or even if using GitHub - you can use `git
+format-patch` to create a patchset for us to apply; in fact, this is
+**recommended** for security-related patches. If you use `format-patch`, please
+send the patches as attachments to:
+
+-  zf-devteam@zend.com for patches without security implications
+-  zf-security@zend.com for security patches
+
+#### What branch to issue the pull request against?
+
+Which branch should you issue a pull request against?
+
+- For fixes against the stable release, issue the pull request against the
+  "master" branch.
+- For new features, or fixes that introduce new elements to the public API (such
+  as new public methods or properties), issue the pull request against the
+  "develop" branch.
+
+### Branch Cleanup
+
+As you might imagine, if you are a frequent contributor, you'll start to
+get a ton of branches both locally and on your remote.
+
+Once you know that your changes have been accepted to the master
+repository, we suggest doing some cleanup of these branches.
+
+-  Local branch cleanup
+
+   ```console
+   $ git branch -d <branchname>
+   ```
+
+-  Remote branch removal
+
+   ```console
+   $ git push {username} :<branchname>
+   ```
diff --git a/core/vendor/zendframework/zend-stdlib/CallbackHandler.php b/core/vendor/zendframework/zend-stdlib/CallbackHandler.php
deleted file mode 100644
index 158b0c7d64743972d73dfb12081c02c9bc536663..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/CallbackHandler.php
+++ /dev/null
@@ -1,217 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ReflectionClass;
-
-/**
- * CallbackHandler
- *
- * A handler for an event, event, filterchain, etc. Abstracts PHP callbacks,
- * primarily to allow for lazy-loading and ensuring availability of default
- * arguments (currying).
- */
-class CallbackHandler
-{
-    /**
-     * @var string|array|callable PHP callback to invoke
-     */
-    protected $callback;
-
-    /**
-     * Callback metadata, if any
-     * @var array
-     */
-    protected $metadata;
-
-    /**
-     * PHP version is greater as 5.4rc1?
-     * @var bool
-     */
-    protected static $isPhp54;
-
-    /**
-     * Constructor
-     *
-     * @param  string|array|object|callable $callback PHP callback
-     * @param  array                        $metadata  Callback metadata
-     */
-    public function __construct($callback, array $metadata = array())
-    {
-        $this->metadata  = $metadata;
-        $this->registerCallback($callback);
-    }
-
-    /**
-     * Registers the callback provided in the constructor
-     *
-     * @param  callable $callback
-     * @throws Exception\InvalidCallbackException
-     * @return void
-     */
-    protected function registerCallback($callback)
-    {
-        if (!is_callable($callback)) {
-            throw new Exception\InvalidCallbackException('Invalid callback provided; not callable');
-        }
-
-        $this->callback = $callback;
-    }
-
-    /**
-     * Retrieve registered callback
-     *
-     * @return callable
-     */
-    public function getCallback()
-    {
-        return $this->callback;
-    }
-
-    /**
-     * Invoke handler
-     *
-     * @param  array $args Arguments to pass to callback
-     * @return mixed
-     */
-    public function call(array $args = array())
-    {
-        $callback = $this->getCallback();
-
-        // Minor performance tweak, if the callback gets called more than once
-        if (!isset(static::$isPhp54)) {
-            static::$isPhp54 = version_compare(PHP_VERSION, '5.4.0rc1', '>=');
-        }
-
-        $argCount = count($args);
-
-        if (static::$isPhp54 && is_string($callback)) {
-            $result = $this->validateStringCallbackFor54($callback);
-
-            if ($result !== true && $argCount <= 3) {
-                $callback       = $result;
-                // Minor performance tweak, if the callback gets called more
-                // than once
-                $this->callback = $result;
-            }
-        }
-
-        // Minor performance tweak; use call_user_func() until > 3 arguments
-        // reached
-        switch ($argCount) {
-            case 0:
-                if (static::$isPhp54) {
-                    return $callback();
-                }
-                return call_user_func($callback);
-            case 1:
-                if (static::$isPhp54) {
-                    return $callback(array_shift($args));
-                }
-                return call_user_func($callback, array_shift($args));
-            case 2:
-                $arg1 = array_shift($args);
-                $arg2 = array_shift($args);
-                if (static::$isPhp54) {
-                    return $callback($arg1, $arg2);
-                }
-                return call_user_func($callback, $arg1, $arg2);
-            case 3:
-                $arg1 = array_shift($args);
-                $arg2 = array_shift($args);
-                $arg3 = array_shift($args);
-                if (static::$isPhp54) {
-                    return $callback($arg1, $arg2, $arg3);
-                }
-                return call_user_func($callback, $arg1, $arg2, $arg3);
-            default:
-                return call_user_func_array($callback, $args);
-        }
-    }
-
-    /**
-     * Invoke as functor
-     *
-     * @return mixed
-     */
-    public function __invoke()
-    {
-        return $this->call(func_get_args());
-    }
-
-    /**
-     * Get all callback metadata
-     *
-     * @return array
-     */
-    public function getMetadata()
-    {
-        return $this->metadata;
-    }
-
-    /**
-     * Retrieve a single metadatum
-     *
-     * @param  string $name
-     * @return mixed
-     */
-    public function getMetadatum($name)
-    {
-        if (array_key_exists($name, $this->metadata)) {
-            return $this->metadata[$name];
-        }
-        return;
-    }
-
-    /**
-     * Validate a static method call
-     *
-     * Validates that a static method call in PHP 5.4 will actually work
-     *
-     * @param  string $callback
-     * @return true|array
-     * @throws Exception\InvalidCallbackException if invalid
-     */
-    protected function validateStringCallbackFor54($callback)
-    {
-        if (!strstr($callback, '::')) {
-            return true;
-        }
-
-        list($class, $method) = explode('::', $callback, 2);
-
-        if (!class_exists($class)) {
-            throw new Exception\InvalidCallbackException(sprintf(
-                'Static method call "%s" refers to a class that does not exist',
-                $callback
-            ));
-        }
-
-        $r = new ReflectionClass($class);
-        if (!$r->hasMethod($method)) {
-            throw new Exception\InvalidCallbackException(sprintf(
-                'Static method call "%s" refers to a method that does not exist',
-                $callback
-            ));
-        }
-        $m = $r->getMethod($method);
-        if (!$m->isStatic()) {
-            throw new Exception\InvalidCallbackException(sprintf(
-                'Static method call "%s" refers to a method that is not static',
-                $callback
-            ));
-        }
-
-        // returning a non boolean value may not be nice for a validate method,
-        // but that allows the usage of a static string callback without using
-        // the call_user_func function.
-        return array($class, $method);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/DateTime.php b/core/vendor/zendframework/zend-stdlib/DateTime.php
deleted file mode 100644
index cdab67d6e83f515d200c727673d3dd5f2a488077..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/DateTime.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use DateTimeZone;
-
-trigger_error('DateTime extension deprecated as of ZF 2.1.4; use the \DateTime constructor to parse extended ISO8601 dates instead', E_USER_DEPRECATED);
-
-/**
- * DateTime
- *
- * An extension of the \DateTime object.
- *
- * @deprecated
- */
-class DateTime extends \DateTime
-{
-    /**
-     * The DateTime::ISO8601 constant used by php's native DateTime object does
-     * not allow for fractions of a second. This function better handles ISO8601
-     * formatted date strings.
-     *
-     * @param  string       $time
-     * @param  DateTimeZone $timezone
-     * @return mixed
-     */
-    public static function createFromISO8601($time, DateTimeZone $timezone = null)
-    {
-        $format = self::ISO8601;
-        if (isset($time[19]) && $time[19] === '.') {
-            $format = 'Y-m-d\TH:i:s.uO';
-        }
-
-        if ($timezone !== null) {
-            return self::createFromFormat($format, $time, $timezone);
-        }
-
-        return self::createFromFormat($format, $time);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/DispatchableInterface.php b/core/vendor/zendframework/zend-stdlib/DispatchableInterface.php
deleted file mode 100644
index 4f74d1e8af4ae09e7eb2ca52c3305a172b00da80..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/DispatchableInterface.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface DispatchableInterface
-{
-    /**
-     * Dispatch a request
-     *
-     * @param RequestInterface $request
-     * @param null|ResponseInterface $response
-     * @return Response|mixed
-     */
-    public function dispatch(RequestInterface $request, ResponseInterface $response = null);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ErrorHandler.php b/core/vendor/zendframework/zend-stdlib/ErrorHandler.php
deleted file mode 100644
index 01949d1efee14f92397cd144dcb7afa2b629442f..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ErrorHandler.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ErrorException;
-
-/**
- * ErrorHandler that can be used to catch internal PHP errors
- * and convert to an ErrorException instance.
- */
-abstract class ErrorHandler
-{
-    /**
-     * Active stack
-     *
-     * @var array
-     */
-    protected static $stack = array();
-
-    /**
-     * Check if this error handler is active
-     *
-     * @return bool
-     */
-    public static function started()
-    {
-        return (bool) static::getNestedLevel();
-    }
-
-    /**
-     * Get the current nested level
-     *
-     * @return int
-     */
-    public static function getNestedLevel()
-    {
-        return count(static::$stack);
-    }
-
-    /**
-     * Starting the error handler
-     *
-     * @param int $errorLevel
-     */
-    public static function start($errorLevel = \E_WARNING)
-    {
-        if (!static::$stack) {
-            set_error_handler(array(get_called_class(), 'addError'), $errorLevel);
-        }
-
-        static::$stack[] = null;
-    }
-
-    /**
-     * Stopping the error handler
-     *
-     * @param  bool $throw Throw the ErrorException if any
-     * @return null|ErrorException
-     * @throws ErrorException If an error has been catched and $throw is true
-     */
-    public static function stop($throw = false)
-    {
-        $errorException = null;
-
-        if (static::$stack) {
-            $errorException = array_pop(static::$stack);
-
-            if (!static::$stack) {
-                restore_error_handler();
-            }
-
-            if ($errorException && $throw) {
-                throw $errorException;
-            }
-        }
-
-        return $errorException;
-    }
-
-    /**
-     * Stop all active handler
-     *
-     * @return void
-     */
-    public static function clean()
-    {
-        if (static::$stack) {
-            restore_error_handler();
-        }
-
-        static::$stack = array();
-    }
-
-    /**
-     * Add an error to the stack
-     *
-     * @param int    $errno
-     * @param string $errstr
-     * @param string $errfile
-     * @param int    $errline
-     * @return void
-     */
-    public static function addError($errno, $errstr = '', $errfile = '', $errline = 0)
-    {
-        $stack = & static::$stack[count(static::$stack) - 1];
-        $stack = new ErrorException($errstr, 0, $errno, $errfile, $errline, $stack);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-stdlib/Exception/BadMethodCallException.php
deleted file mode 100644
index 0254e45bffbd397d736734ca2f80ff29c15b8c0b..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/BadMethodCallException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Bad method call exception
- */
-class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/DomainException.php b/core/vendor/zendframework/zend-stdlib/Exception/DomainException.php
deleted file mode 100644
index 6d2ac714a1f3aa0d3b3f530cd8c4d2bec0af6ac3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/DomainException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Domain exception
- */
-class DomainException extends \DomainException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-stdlib/Exception/ExceptionInterface.php
deleted file mode 100644
index 60b795f8ddef76344633a0ad5071ac97c829c394..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Exception marker interface
- */
-interface ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/ExtensionNotLoadedException.php b/core/vendor/zendframework/zend-stdlib/Exception/ExtensionNotLoadedException.php
deleted file mode 100644
index 4b51475f246e676bf3f2356e4495c27708b32ac5..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/ExtensionNotLoadedException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Extension not loaded exception
- */
-class ExtensionNotLoadedException extends RuntimeException
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-stdlib/Exception/InvalidArgumentException.php
deleted file mode 100644
index 8028c4717562886729c03a3c140192710fc85077..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Invalid Argument Exception
- */
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/InvalidCallbackException.php b/core/vendor/zendframework/zend-stdlib/Exception/InvalidCallbackException.php
deleted file mode 100644
index aa36f98632db1a08e3ba275b44efa729db9e08b1..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/InvalidCallbackException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Invalid callback exception
- */
-class InvalidCallbackException extends DomainException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/LogicException.php b/core/vendor/zendframework/zend-stdlib/Exception/LogicException.php
deleted file mode 100644
index 087ac0e83fd9cd7742232bcbe4574d4b632c869a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/LogicException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Logic exception
- */
-class LogicException extends \LogicException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Exception/RuntimeException.php b/core/vendor/zendframework/zend-stdlib/Exception/RuntimeException.php
deleted file mode 100644
index f3891d64b6a5392ef82ef0d4d83bd23bac831331..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Exception/RuntimeException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Runtime exception
- */
-class RuntimeException extends \RuntimeException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Extractor/ExtractionInterface.php b/core/vendor/zendframework/zend-stdlib/Extractor/ExtractionInterface.php
deleted file mode 100644
index 297d557746cc20c46a9b0f285213249f82176484..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Extractor/ExtractionInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Extractor;
-
-interface ExtractionInterface
-{
-    /**
-     * Extract values from an object
-     *
-     * @param  object $object
-     * @return array
-     */
-    public function extract($object);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Glob.php b/core/vendor/zendframework/zend-stdlib/Glob.php
deleted file mode 100644
index a4d0068a09152255939bbcd32282a2e5bc8ddf05..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Glob.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-/**
- * Wrapper for glob with fallback if GLOB_BRACE is not available.
- */
-abstract class Glob
-{
-    /**#@+
-     * Glob constants.
-     */
-    const GLOB_MARK     = 0x01;
-    const GLOB_NOSORT   = 0x02;
-    const GLOB_NOCHECK  = 0x04;
-    const GLOB_NOESCAPE = 0x08;
-    const GLOB_BRACE    = 0x10;
-    const GLOB_ONLYDIR  = 0x20;
-    const GLOB_ERR      = 0x40;
-    /**#@-*/
-
-    /**
-     * Find pathnames matching a pattern.
-     *
-     * @see    http://docs.php.net/glob
-     * @param  string  $pattern
-     * @param  int $flags
-     * @param  bool $forceFallback
-     * @return array
-     * @throws Exception\RuntimeException
-     */
-    public static function glob($pattern, $flags = 0, $forceFallback = false)
-    {
-        if (!defined('GLOB_BRACE') || $forceFallback) {
-            return static::fallbackGlob($pattern, $flags);
-        }
-
-        return static::systemGlob($pattern, $flags);
-    }
-
-    /**
-     * Use the glob function provided by the system.
-     *
-     * @param  string  $pattern
-     * @param  int     $flags
-     * @return array
-     * @throws Exception\RuntimeException
-     */
-    protected static function systemGlob($pattern, $flags)
-    {
-        if ($flags) {
-            $flagMap = array(
-                self::GLOB_MARK     => GLOB_MARK,
-                self::GLOB_NOSORT   => GLOB_NOSORT,
-                self::GLOB_NOCHECK  => GLOB_NOCHECK,
-                self::GLOB_NOESCAPE => GLOB_NOESCAPE,
-                self::GLOB_BRACE    => GLOB_BRACE,
-                self::GLOB_ONLYDIR  => GLOB_ONLYDIR,
-                self::GLOB_ERR      => GLOB_ERR,
-            );
-
-            $globFlags = 0;
-
-            foreach ($flagMap as $internalFlag => $globFlag) {
-                if ($flags & $internalFlag) {
-                    $globFlags |= $globFlag;
-                }
-            }
-        } else {
-            $globFlags = 0;
-        }
-
-        ErrorHandler::start();
-        $res = glob($pattern, $globFlags);
-        $err = ErrorHandler::stop();
-        if ($res === false) {
-            throw new Exception\RuntimeException("glob('{$pattern}', {$globFlags}) failed", 0, $err);
-        }
-        return $res;
-    }
-
-    /**
-     * Expand braces manually, then use the system glob.
-     *
-     * @param  string  $pattern
-     * @param  int     $flags
-     * @return array
-     * @throws Exception\RuntimeException
-     */
-    protected static function fallbackGlob($pattern, $flags)
-    {
-        if (!$flags & self::GLOB_BRACE) {
-            return static::systemGlob($pattern, $flags);
-        }
-
-        $flags &= ~self::GLOB_BRACE;
-        $length = strlen($pattern);
-        $paths  = array();
-
-        if ($flags & self::GLOB_NOESCAPE) {
-            $begin = strpos($pattern, '{');
-        } else {
-            $begin = 0;
-
-            while (true) {
-                if ($begin === $length) {
-                    $begin = false;
-                    break;
-                } elseif ($pattern[$begin] === '\\' && ($begin + 1) < $length) {
-                    $begin++;
-                } elseif ($pattern[$begin] === '{') {
-                    break;
-                }
-
-                $begin++;
-            }
-        }
-
-        if ($begin === false) {
-            return static::systemGlob($pattern, $flags);
-        }
-
-        $next = static::nextBraceSub($pattern, $begin + 1, $flags);
-
-        if ($next === null) {
-            return static::systemGlob($pattern, $flags);
-        }
-
-        $rest = $next;
-
-        while ($pattern[$rest] !== '}') {
-            $rest = static::nextBraceSub($pattern, $rest + 1, $flags);
-
-            if ($rest === null) {
-                return static::systemGlob($pattern, $flags);
-            }
-        }
-
-        $p = $begin + 1;
-
-        while (true) {
-            $subPattern = substr($pattern, 0, $begin)
-                        . substr($pattern, $p, $next - $p)
-                        . substr($pattern, $rest + 1);
-
-            $result = static::fallbackGlob($subPattern, $flags | self::GLOB_BRACE);
-
-            if ($result) {
-                $paths = array_merge($paths, $result);
-            }
-
-            if ($pattern[$next] === '}') {
-                break;
-            }
-
-            $p    = $next + 1;
-            $next = static::nextBraceSub($pattern, $p, $flags);
-        }
-
-        return array_unique($paths);
-    }
-
-    /**
-     * Find the end of the sub-pattern in a brace expression.
-     *
-     * @param  string  $pattern
-     * @param  int $begin
-     * @param  int $flags
-     * @return int|null
-     */
-    protected static function nextBraceSub($pattern, $begin, $flags)
-    {
-        $length  = strlen($pattern);
-        $depth   = 0;
-        $current = $begin;
-
-        while ($current < $length) {
-            if (!$flags & self::GLOB_NOESCAPE && $pattern[$current] === '\\') {
-                if (++$current === $length) {
-                    break;
-                }
-
-                $current++;
-            } else {
-                if (($pattern[$current] === '}' && $depth-- === 0) || ($pattern[$current] === ',' && $depth === 0)) {
-                    break;
-                } elseif ($pattern[$current++] === '{') {
-                    $depth++;
-                }
-            }
-        }
-
-        return ($current < $length ? $current : null);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Guard/AllGuardsTrait.php b/core/vendor/zendframework/zend-stdlib/Guard/AllGuardsTrait.php
deleted file mode 100644
index 95bc5162d38407e1d2dc19cfe0ff104f26db2b72..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Guard/AllGuardsTrait.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-/**
- * An aggregate for all guard traits
- */
-trait AllGuardsTrait
-{
-    use ArrayOrTraversableGuardTrait;
-    use EmptyGuardTrait;
-    use NullGuardTrait;
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Guard/ArrayOrTraversableGuardTrait.php b/core/vendor/zendframework/zend-stdlib/Guard/ArrayOrTraversableGuardTrait.php
deleted file mode 100644
index e6959a5ef42ec4192a3a031b88186e2ccbd8dfb8..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Guard/ArrayOrTraversableGuardTrait.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-use Traversable;
-
-/**
- * Provide a guard method for array or Traversable data
- */
-trait ArrayOrTraversableGuardTrait
-{
-    /**
-     * Verifies that the data is an array or Traversable
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    protected function guardForArrayOrTraversable(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
-    ) {
-        if (!is_array($data) && !($data instanceof Traversable)) {
-            $message = sprintf(
-                "%s must be an array or Traversable, [%s] given",
-                $dataName,
-                is_object($data) ? get_class($data) : gettype($data)
-            );
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Guard/EmptyGuardTrait.php b/core/vendor/zendframework/zend-stdlib/Guard/EmptyGuardTrait.php
deleted file mode 100644
index c6751cc35a216ecf89b80ad400d83680c6018d0e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Guard/EmptyGuardTrait.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-/**
- * Provide a guard method against empty data
- */
-trait EmptyGuardTrait
-{
-    /**
-     * Verify that the data is not empty
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    protected function guardAgainstEmpty(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
-    ) {
-        if (empty($data)) {
-            $message = sprintf('%s cannot be empty', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Guard/GuardUtils.php b/core/vendor/zendframework/zend-stdlib/Guard/GuardUtils.php
deleted file mode 100644
index 4fe4ccacb913c71bbe30e8e2f3c34084ff9f7256..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Guard/GuardUtils.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-use Traversable;
-
-/**
- * Static guard helper class
- *
- * Bridges the gap for allowing refactoring until traits can be used by default.
- *
- * @deprecated
- */
-abstract class GuardUtils
-{
-    const DEFAULT_EXCEPTION_CLASS = 'Zend\Stdlib\Exception\InvalidArgumentException';
-
-    /**
-     * Verifies that the data is an array or Traversable
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    public static function guardForArrayOrTraversable(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
-    ) {
-        if (!is_array($data) && !($data instanceof Traversable)) {
-            $message = sprintf(
-                '%s must be an array or Traversable, [%s] given',
-                $dataName,
-                is_object($data) ? get_class($data) : gettype($data)
-            );
-            throw new $exceptionClass($message);
-        }
-    }
-
-    /**
-     * Verify that the data is not empty
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    public static function guardAgainstEmpty(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
-    ) {
-        if (empty($data)) {
-            $message = sprintf('%s cannot be empty', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-
-    /**
-     * Verify that the data is not null
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    public static function guardAgainstNull(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
-    ) {
-        if (null === $data) {
-            $message = sprintf('%s cannot be null', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Guard/NullGuardTrait.php b/core/vendor/zendframework/zend-stdlib/Guard/NullGuardTrait.php
deleted file mode 100644
index eac716281cd6767114d9501377f15e3542862252..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Guard/NullGuardTrait.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-/**
- * Provide a guard method against null data
- */
-trait NullGuardTrait
-{
-    /**
-     * Verify that the data is not null
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    protected function guardAgainstNull(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
-    ) {
-        if (null === $data) {
-            $message = sprintf('%s cannot be null', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/AbstractHydrator.php b/core/vendor/zendframework/zend-stdlib/Hydrator/AbstractHydrator.php
deleted file mode 100644
index 338ed804422f19e6e3e3897cee4e934afee6d97b..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/AbstractHydrator.php
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use ArrayObject;
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\Hydrator\Filter\FilterComposite;
-use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
-use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
-
-abstract class AbstractHydrator implements
-    HydratorInterface,
-    StrategyEnabledInterface,
-    FilterEnabledInterface,
-    NamingStrategyEnabledInterface
-{
-    /**
-     * The list with strategies that this hydrator has.
-     *
-     * @var ArrayObject
-     */
-    protected $strategies;
-
-    /**
-     * An instance of NamingStrategyInterface
-     *
-     * @var NamingStrategyInterface
-     */
-    protected $namingStrategy;
-
-    /**
-     * Composite to filter the methods, that need to be hydrated
-     *
-     * @var Filter\FilterComposite
-     */
-    protected $filterComposite;
-
-    /**
-     * Initializes a new instance of this class.
-     */
-    public function __construct()
-    {
-        $this->strategies = new ArrayObject();
-        $this->filterComposite = new FilterComposite();
-    }
-
-    /**
-     * Gets the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to get.
-     *
-     * @throws \Zend\Stdlib\Exception\InvalidArgumentException
-     * @return StrategyInterface
-     */
-    public function getStrategy($name)
-    {
-        if (isset($this->strategies[$name])) {
-            return $this->strategies[$name];
-        }
-
-        if (!isset($this->strategies['*'])) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s: no strategy by name of "%s", and no wildcard strategy present',
-                __METHOD__,
-                $name
-            ));
-        }
-
-        return $this->strategies['*'];
-    }
-
-    /**
-     * Checks if the strategy with the given name exists.
-     *
-     * @param string $name The name of the strategy to check for.
-     * @return bool
-     */
-    public function hasStrategy($name)
-    {
-        return array_key_exists($name, $this->strategies)
-               || array_key_exists('*', $this->strategies);
-    }
-
-    /**
-     * Adds the given strategy under the given name.
-     *
-     * @param string $name The name of the strategy to register.
-     * @param StrategyInterface $strategy The strategy to register.
-     * @return HydratorInterface
-     */
-    public function addStrategy($name, StrategyInterface $strategy)
-    {
-        $this->strategies[$name] = $strategy;
-        return $this;
-    }
-
-    /**
-     * Removes the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to remove.
-     * @return HydratorInterface
-     */
-    public function removeStrategy($name)
-    {
-        unset($this->strategies[$name]);
-        return $this;
-    }
-
-    /**
-     * Converts a value for extraction. If no strategy exists the plain value is returned.
-     *
-     * @param  string $name  The name of the strategy to use.
-     * @param  mixed  $value  The value that should be converted.
-     * @param  mixed  $object The object is optionally provided as context.
-     * @return mixed
-     */
-    public function extractValue($name, $value, $object = null)
-    {
-        if ($this->hasStrategy($name)) {
-            $strategy = $this->getStrategy($name);
-            $value = $strategy->extract($value, $object);
-        }
-        return $value;
-    }
-
-    /**
-     * Converts a value for hydration. If no strategy exists the plain value is returned.
-     *
-     * @param string $name The name of the strategy to use.
-     * @param mixed $value The value that should be converted.
-     * @param array $data The whole data is optionally provided as context.
-     * @return mixed
-     */
-    public function hydrateValue($name, $value, $data = null)
-    {
-        if ($this->hasStrategy($name)) {
-            $strategy = $this->getStrategy($name);
-            $value = $strategy->hydrate($value, $data);
-        }
-        return $value;
-    }
-
-    /**
-     * Convert a name for extraction. If no naming strategy exists, the plain value is returned.
-     *
-     * @param string $name    The name to convert.
-     * @param null   $object  The object is optionally provided as context.
-     * @return mixed
-     */
-    public function extractName($name, $object = null)
-    {
-        if ($this->hasNamingStrategy()) {
-            $name = $this->getNamingStrategy()->extract($name, $object);
-        }
-        return $name;
-    }
-
-    /**
-     * Converts a value for hydration. If no naming strategy exists, the plain value is returned.
-     *
-     * @param string $name  The name to convert.
-     * @param array  $data  The whole data is optionally provided as context.
-     * @return mixed
-     */
-    public function hydrateName($name, $data = null)
-    {
-        if ($this->hasNamingStrategy()) {
-            $name = $this->getNamingStrategy()->hydrate($name, $data);
-        }
-        return $name;
-    }
-
-    /**
-     * Get the filter instance
-     *
-     * @return Filter\FilterComposite
-     */
-    public function getFilter()
-    {
-        return $this->filterComposite;
-    }
-
-    /**
-     * Add a new filter to take care of what needs to be hydrated.
-     * To exclude e.g. the method getServiceLocator:
-     *
-     * <code>
-     * $composite->addFilter("servicelocator",
-     *     function ($property) {
-     *         list($class, $method) = explode('::', $property);
-     *         if ($method === 'getServiceLocator') {
-     *             return false;
-     *         }
-     *         return true;
-     *     }, FilterComposite::CONDITION_AND
-     * );
-     * </code>
-     *
-     * @param string $name Index in the composite
-     * @param callable|Filter\FilterInterface $filter
-     * @param int $condition
-     * @return Filter\FilterComposite
-     */
-    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
-    {
-        return $this->filterComposite->addFilter($name, $filter, $condition);
-    }
-
-    /**
-     * Check whether a specific filter exists at key $name or not
-     *
-     * @param string $name Index in the composite
-     * @return bool
-     */
-    public function hasFilter($name)
-    {
-        return $this->filterComposite->hasFilter($name);
-    }
-
-    /**
-     * Remove a filter from the composition.
-     * To not extract "has" methods, you simply need to unregister it
-     *
-     * <code>
-     * $filterComposite->removeFilter('has');
-     * </code>
-     *
-     * @param $name
-     * @return Filter\FilterComposite
-     */
-    public function removeFilter($name)
-    {
-        return $this->filterComposite->removeFilter($name);
-    }
-
-    /**
-     * Adds the given naming strategy
-     *
-     * @param NamingStrategyInterface $strategy The naming to register.
-     * @return self
-     */
-    public function setNamingStrategy(NamingStrategyInterface $strategy)
-    {
-        $this->namingStrategy = $strategy;
-
-        return $this;
-    }
-
-    /**
-     * Gets the naming strategy.
-     *
-     * @return NamingStrategyInterface
-     */
-    public function getNamingStrategy()
-    {
-        return $this->namingStrategy;
-    }
-
-    /**
-     * Checks if a naming strategy exists.
-     *
-     * @return bool
-     */
-    public function hasNamingStrategy()
-    {
-        return isset($this->namingStrategy);
-    }
-
-    /**
-     * Removes the naming strategy
-     *
-     * @return self
-     */
-    public function removeNamingStrategy()
-    {
-        $this->namingStrategy = null;
-
-        return $this;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/AggregateHydrator.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/AggregateHydrator.php
deleted file mode 100644
index 38a868e022e3ce330070d65c2d735d2119efba51..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/AggregateHydrator.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\EventManager;
-use Zend\EventManager\EventManagerAwareInterface;
-use Zend\EventManager\EventManagerInterface;
-use Zend\Stdlib\Hydrator\HydratorInterface;
-
-/**
- * Aggregate hydrator that composes multiple hydrators via events
- */
-class AggregateHydrator implements HydratorInterface, EventManagerAwareInterface
-{
-    const DEFAULT_PRIORITY = 1;
-
-    /**
-     * @var \Zend\EventManager\EventManagerInterface|null
-     */
-    protected $eventManager;
-
-    /**
-     * Attaches the provided hydrator to the list of hydrators to be used while hydrating/extracting data
-     *
-     * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator
-     * @param int                                     $priority
-     */
-    public function add(HydratorInterface $hydrator, $priority = self::DEFAULT_PRIORITY)
-    {
-        $this->getEventManager()->attachAggregate(new HydratorListener($hydrator), $priority);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($object)
-    {
-        $event = new ExtractEvent($this, $object);
-
-        $this->getEventManager()->trigger($event);
-
-        return $event->getExtractedData();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate(array $data, $object)
-    {
-        $event = new HydrateEvent($this, $object, $data);
-
-        $this->getEventManager()->trigger($event);
-
-        return $event->getHydratedObject();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function setEventManager(EventManagerInterface $eventManager)
-    {
-        $eventManager->setIdentifiers(array(__CLASS__, get_class($this)));
-
-        $this->eventManager = $eventManager;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getEventManager()
-    {
-        if (null === $this->eventManager) {
-            $this->setEventManager(new EventManager());
-        }
-
-        return $this->eventManager;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/ExtractEvent.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/ExtractEvent.php
deleted file mode 100644
index b13bc5c70b2cdf3399fd11562564c971b3bdb599..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/ExtractEvent.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\Event;
-
-/**
- * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} extracts
- * data from an object
- */
-class ExtractEvent extends Event
-{
-    const EVENT_EXTRACT = 'extract';
-
-    /**
-     * {@inheritDoc}
-     */
-    protected $name = self::EVENT_EXTRACT;
-
-    /**
-     * @var object
-     */
-    protected $extractionObject;
-
-    /**
-     * @var array
-     */
-    protected $extractedData = array();
-
-    /**
-     * @param object $target
-     * @param object $extractionObject
-     */
-    public function __construct($target, $extractionObject)
-    {
-        $this->target           = $target;
-        $this->extractionObject = $extractionObject;
-    }
-
-    /**
-     * Retrieves the object from which data is extracted
-     *
-     * @return object
-     */
-    public function getExtractionObject()
-    {
-        return $this->extractionObject;
-    }
-
-    /**
-     * @param object $extractionObject
-     *
-     * @return void
-     */
-    public function setExtractionObject($extractionObject)
-    {
-        $this->extractionObject = $extractionObject;
-    }
-
-    /**
-     * Retrieves the data that has been extracted
-     *
-     * @return array
-     */
-    public function getExtractedData()
-    {
-        return $this->extractedData;
-    }
-
-    /**
-     * @param array $extractedData
-     *
-     * @return void
-     */
-    public function setExtractedData(array $extractedData)
-    {
-        $this->extractedData = $extractedData;
-    }
-
-    /**
-     * Merge provided data with the extracted data
-     *
-     * @param array $additionalData
-     *
-     * @return void
-     */
-    public function mergeExtractedData(array $additionalData)
-    {
-        $this->extractedData = array_merge($this->extractedData, $additionalData);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/HydrateEvent.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/HydrateEvent.php
deleted file mode 100644
index a7c91eec261194793a1a1fc001db658d72ac017d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/HydrateEvent.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\Event;
-
-/**
- * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} hydrates
- * data into an object
- */
-class HydrateEvent extends Event
-{
-    const EVENT_HYDRATE = 'hydrate';
-
-    /**
-     * {@inheritDoc}
-     */
-    protected $name = self::EVENT_HYDRATE;
-
-    /**
-     * @var object
-     */
-    protected $hydratedObject;
-
-    /**
-     * @var array
-     */
-    protected $hydrationData;
-
-    /**
-     * @param object $target
-     * @param object $hydratedObject
-     * @param array  $hydrationData
-     */
-    public function __construct($target, $hydratedObject, array $hydrationData)
-    {
-        $this->target         = $target;
-        $this->hydratedObject = $hydratedObject;
-        $this->hydrationData  = $hydrationData;
-    }
-
-    /**
-     * Retrieves the object that is being hydrated
-     *
-     * @return object
-     */
-    public function getHydratedObject()
-    {
-        return $this->hydratedObject;
-    }
-
-    /**
-     * @param object $hydratedObject
-     */
-    public function setHydratedObject($hydratedObject)
-    {
-        $this->hydratedObject = $hydratedObject;
-    }
-
-    /**
-     * Retrieves the data that is being used for hydration
-     *
-     * @return array
-     */
-    public function getHydrationData()
-    {
-        return $this->hydrationData;
-    }
-
-    /**
-     * @param array $hydrationData
-     */
-    public function setHydrationData(array $hydrationData)
-    {
-        $this->hydrationData = $hydrationData;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/HydratorListener.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/HydratorListener.php
deleted file mode 100644
index 1c25ff3c4611d0cc6f500e3b80c0ce163d80e71e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Aggregate/HydratorListener.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\AbstractListenerAggregate;
-use Zend\EventManager\EventManagerInterface;
-use Zend\Stdlib\Hydrator\HydratorInterface;
-
-/**
- * Aggregate listener wrapping around a hydrator. Listens
- * to {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_HYDRATE} and
- * {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_EXTRACT}
- */
-class HydratorListener extends AbstractListenerAggregate
-{
-    /**
-     * @var \Zend\Stdlib\Hydrator\HydratorInterface
-     */
-    protected $hydrator;
-
-    /**
-     * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator
-     */
-    public function __construct(HydratorInterface $hydrator)
-    {
-        $this->hydrator = $hydrator;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function attach(EventManagerInterface $events, $priority = 1)
-    {
-        $this->listeners[] = $events->attach(HydrateEvent::EVENT_HYDRATE, array($this, 'onHydrate'), $priority);
-        $this->listeners[] = $events->attach(ExtractEvent::EVENT_EXTRACT, array($this, 'onExtract'), $priority);
-    }
-
-    /**
-     * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent::EVENT_HYDRATE} is triggered
-     *
-     * @param \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent $event
-     *
-     * @return object
-     *
-     * @internal
-     */
-    public function onHydrate(HydrateEvent $event)
-    {
-        $object = $this->hydrator->hydrate($event->getHydrationData(), $event->getHydratedObject());
-
-        $event->setHydratedObject($object);
-
-        return $object;
-    }
-
-    /**
-     * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent::EVENT_EXTRACT} is triggered
-     *
-     * @param \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent $event
-     *
-     * @return array
-     *
-     * @internal
-     */
-    public function onExtract(ExtractEvent $event)
-    {
-        $data = $this->hydrator->extract($event->getExtractionObject());
-
-        $event->mergeExtractedData($data);
-
-        return $data;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/ArraySerializable.php b/core/vendor/zendframework/zend-stdlib/Hydrator/ArraySerializable.php
deleted file mode 100644
index 4f4ab2a1333ddba8d28eb8a2e86c7c5568ac2e46..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/ArraySerializable.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Exception;
-
-class ArraySerializable extends AbstractHydrator
-{
-    /**
-     * Extract values from the provided object
-     *
-     * Extracts values via the object's getArrayCopy() method.
-     *
-     * @param  object $object
-     * @return array
-     * @throws Exception\BadMethodCallException for an $object not implementing getArrayCopy()
-     */
-    public function extract($object)
-    {
-        if (!is_callable(array($object, 'getArrayCopy'))) {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided object to implement getArrayCopy()', __METHOD__)
-            );
-        }
-
-        $data = $object->getArrayCopy();
-        $filter = $this->getFilter();
-
-        foreach ($data as $name => $value) {
-            if (!$filter->filter($name)) {
-                unset($data[$name]);
-                continue;
-            }
-            $extractedName = $this->extractName($name, $object);
-            // replace the original key with extracted, if differ
-            if ($extractedName !== $name) {
-                unset($data[$name]);
-                $name = $extractedName;
-            }
-            $data[$name] = $this->extractValue($name, $value, $object);
-        }
-
-        return $data;
-    }
-
-    /**
-     * Hydrate an object
-     *
-     * Hydrates an object by passing $data to either its exchangeArray() or
-     * populate() method.
-     *
-     * @param  array $data
-     * @param  object $object
-     * @return object
-     * @throws Exception\BadMethodCallException for an $object not implementing exchangeArray() or populate()
-     */
-    public function hydrate(array $data, $object)
-    {
-        $replacement = array();
-        foreach ($data as $key => $value) {
-            $name = $this->hydrateName($key, $data);
-            $replacement[$name] = $this->hydrateValue($name, $value, $data);
-        }
-
-        if (is_callable(array($object, 'exchangeArray'))) {
-            $object->exchangeArray($replacement);
-        } elseif (is_callable(array($object, 'populate'))) {
-            $object->populate($replacement);
-        } else {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided object to implement exchangeArray() or populate()', __METHOD__)
-            );
-        }
-        return $object;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/ClassMethods.php b/core/vendor/zendframework/zend-stdlib/Hydrator/ClassMethods.php
deleted file mode 100644
index 4edb1f4dcd61c9488330f54d674de6e105428fc5..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/ClassMethods.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Traversable;
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\ArrayUtils;
-use Zend\Stdlib\Hydrator\Filter\FilterComposite;
-use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
-use Zend\Stdlib\Hydrator\Filter\GetFilter;
-use Zend\Stdlib\Hydrator\Filter\HasFilter;
-use Zend\Stdlib\Hydrator\Filter\IsFilter;
-use Zend\Stdlib\Hydrator\Filter\MethodMatchFilter;
-use Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter;
-use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
-use Zend\Stdlib\Hydrator\NamingStrategy\UnderscoreNamingStrategy;
-
-class ClassMethods extends AbstractHydrator implements HydratorOptionsInterface
-{
-    /**
-     * Holds the names of the methods used for hydration, indexed by class::property name,
-     * false if the hydration method is not callable/usable for hydration purposes
-     *
-     * @var string[]|bool[]
-     */
-    private $hydrationMethodsCache = array();
-
-    /**
-     * A map of extraction methods to property name to be used during extraction, indexed
-     * by class name and method name
-     *
-     * @var string[][]
-     */
-    private $extractionMethodsCache = array();
-
-    /**
-     * Flag defining whether array keys are underscore-separated (true) or camel case (false)
-     *
-     * @var bool
-     */
-    protected $underscoreSeparatedKeys = true;
-
-    /**
-     * @var \Zend\Stdlib\Hydrator\Filter\FilterInterface
-     */
-    private $callableMethodFilter;
-
-    /**
-     * Define if extract values will use camel case or name with underscore
-     * @param bool|array $underscoreSeparatedKeys
-     */
-    public function __construct($underscoreSeparatedKeys = true)
-    {
-        parent::__construct();
-        $this->setUnderscoreSeparatedKeys($underscoreSeparatedKeys);
-
-        $this->callableMethodFilter = new OptionalParametersFilter();
-
-        $this->filterComposite->addFilter('is', new IsFilter());
-        $this->filterComposite->addFilter('has', new HasFilter());
-        $this->filterComposite->addFilter('get', new GetFilter());
-        $this->filterComposite->addFilter('parameter', new OptionalParametersFilter(), FilterComposite::CONDITION_AND);
-    }
-
-    /**
-     * @param  array|Traversable                 $options
-     * @return ClassMethods
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setOptions($options)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        } elseif (!is_array($options)) {
-            throw new Exception\InvalidArgumentException(
-                'The options parameter must be an array or a Traversable'
-            );
-        }
-        if (isset($options['underscoreSeparatedKeys'])) {
-            $this->setUnderscoreSeparatedKeys($options['underscoreSeparatedKeys']);
-        }
-
-        return $this;
-    }
-
-    /**
-     * @param  bool      $underscoreSeparatedKeys
-     * @return ClassMethods
-     */
-    public function setUnderscoreSeparatedKeys($underscoreSeparatedKeys)
-    {
-        $this->underscoreSeparatedKeys = (bool) $underscoreSeparatedKeys;
-
-        if ($this->underscoreSeparatedKeys) {
-            $this->setNamingStrategy(new UnderscoreNamingStrategy);
-        } elseif ($this->getNamingStrategy() instanceof UnderscoreNamingStrategy) {
-            $this->removeNamingStrategy();
-        }
-
-        return $this;
-    }
-
-    /**
-     * @return bool
-     */
-    public function getUnderscoreSeparatedKeys()
-    {
-        return $this->underscoreSeparatedKeys;
-    }
-
-    /**
-     * Extract values from an object with class methods
-     *
-     * Extracts the getter/setter of the given $object.
-     *
-     * @param  object                           $object
-     * @return array
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function extract($object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(sprintf(
-                '%s expects the provided $object to be a PHP object)',
-                __METHOD__
-            ));
-        }
-
-        $objectClass = get_class($object);
-
-        // reset the hydrator's hydrator's cache for this object, as the filter may be per-instance
-        if ($object instanceof FilterProviderInterface) {
-            $this->extractionMethodsCache[$objectClass] = null;
-        }
-
-        // pass 1 - finding out which properties can be extracted, with which methods (populate hydration cache)
-        if (! isset($this->extractionMethodsCache[$objectClass])) {
-            $this->extractionMethodsCache[$objectClass] = array();
-            $filter                                     = $this->filterComposite;
-            $methods                                    = get_class_methods($object);
-
-            if ($object instanceof FilterProviderInterface) {
-                $filter = new FilterComposite(
-                    array($object->getFilter()),
-                    array(new MethodMatchFilter('getFilter'))
-                );
-            }
-
-            foreach ($methods as $method) {
-                $methodFqn = $objectClass . '::' . $method;
-
-                if (! ($filter->filter($methodFqn) && $this->callableMethodFilter->filter($methodFqn))) {
-                    continue;
-                }
-
-                $attribute = $method;
-
-                if (strpos($method, 'get') === 0) {
-                    $attribute = substr($method, 3);
-                    if (!property_exists($object, $attribute)) {
-                        $attribute = lcfirst($attribute);
-                    }
-                }
-
-                $this->extractionMethodsCache[$objectClass][$method] = $attribute;
-            }
-        }
-
-        $values = array();
-
-        // pass 2 - actually extract data
-        foreach ($this->extractionMethodsCache[$objectClass] as $methodName => $attributeName) {
-            $realAttributeName          = $this->extractName($attributeName, $object);
-            $values[$realAttributeName] = $this->extractValue($realAttributeName, $object->$methodName(), $object);
-        }
-
-        return $values;
-    }
-
-    /**
-     * Hydrate an object by populating getter/setter methods
-     *
-     * Hydrates an object by getter/setter methods of the object.
-     *
-     * @param  array                            $data
-     * @param  object                           $object
-     * @return object
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function hydrate(array $data, $object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(sprintf(
-                '%s expects the provided $object to be a PHP object)',
-                __METHOD__
-            ));
-        }
-
-        $objectClass = get_class($object);
-
-        foreach ($data as $property => $value) {
-            $propertyFqn = $objectClass . '::$' . $property;
-
-            if (! isset($this->hydrationMethodsCache[$propertyFqn])) {
-                $setterName = 'set' . ucfirst($this->hydrateName($property, $data));
-
-                $this->hydrationMethodsCache[$propertyFqn] = is_callable(array($object, $setterName))
-                    ? $setterName
-                    : false;
-            }
-
-            if ($this->hydrationMethodsCache[$propertyFqn]) {
-                $object->{$this->hydrationMethodsCache[$propertyFqn]}($this->hydrateValue($property, $value, $data));
-            }
-        }
-
-        return $object;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
-    {
-        $this->resetCaches();
-
-        return parent::addFilter($name, $filter, $condition);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function removeFilter($name)
-    {
-        $this->resetCaches();
-
-        return parent::removeFilter($name);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function setNamingStrategy(NamingStrategyInterface $strategy)
-    {
-        $this->resetCaches();
-
-        return parent::setNamingStrategy($strategy);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function removeNamingStrategy()
-    {
-        $this->resetCaches();
-
-        return parent::removeNamingStrategy();
-    }
-
-    /**
-     * Reset all local hydration/extraction caches
-     */
-    private function resetCaches()
-    {
-        $this->hydrationMethodsCache = $this->extractionMethodsCache = array();
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/DelegatingHydrator.php b/core/vendor/zendframework/zend-stdlib/Hydrator/DelegatingHydrator.php
deleted file mode 100644
index db234d38ada5aa4064875a7a98833397815b7f61..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/DelegatingHydrator.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\ServiceManager\ServiceLocatorInterface;
-
-class DelegatingHydrator implements HydratorInterface
-{
-    /**
-     * @var ServiceLocatorInterface
-     */
-    protected $hydrators;
-
-    /**
-     * Constructor
-     *
-     * @param ServiceLocatorInterface $hydrators
-     */
-    public function __construct(ServiceLocatorInterface $hydrators)
-    {
-        $this->hydrators = $hydrators;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function hydrate(array $data, $object)
-    {
-        return $this->getHydrator($object)->hydrate($data, $object);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function extract($object)
-    {
-        return $this->getHydrator($object)->extract($object);
-    }
-
-    /**
-     * Gets hydrator of an object
-     *
-     * @param  object $object
-     * @return HydratorInterface
-     */
-    protected function getHydrator($object)
-    {
-        return $this->hydrators->get(get_class($object));
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/DelegatingHydratorFactory.php b/core/vendor/zendframework/zend-stdlib/Hydrator/DelegatingHydratorFactory.php
deleted file mode 100644
index c3a0da25e7f7eefc3f6f91f5a3bbc4f4ad256d57..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/DelegatingHydratorFactory.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\ServiceManager\FactoryInterface;
-use Zend\ServiceManager\ServiceLocatorInterface;
-
-class DelegatingHydratorFactory implements FactoryInterface
-{
-    /**
-     * Creates DelegatingHydrator
-     *
-     * @param  ServiceLocatorInterface $serviceLocator
-     * @return DelegatingHydrator
-     */
-    public function createService(ServiceLocatorInterface $serviceLocator)
-    {
-        // Assume that this factory is registered with the HydratorManager,
-        // and just pass it directly on.
-        return new DelegatingHydrator($serviceLocator);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterComposite.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterComposite.php
deleted file mode 100644
index 000fc701e23b9dcc15ceaef64a72ac9efe59a755..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterComposite.php
+++ /dev/null
@@ -1,194 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-use ArrayObject;
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-class FilterComposite implements FilterInterface
-{
-    /**
-     * @var ArrayObject
-     */
-    protected $orFilter;
-
-    /**
-     * @var ArrayObject
-     */
-    protected $andFilter;
-
-    /**
-     * Constant to add with "or" conditition
-     */
-    const CONDITION_OR = 1;
-
-    /**
-     * Constant to add with "and" conditition
-     */
-    const CONDITION_AND = 2;
-
-    /**
-     * Define default Filter
-     *
-     * @throws InvalidArgumentException
-     */
-    public function __construct($orFilter = array(), $andFilter = array())
-    {
-        array_walk(
-            $orFilter,
-            function ($value, $key) {
-                if (!is_callable($value) && !$value instanceof FilterInterface) {
-                    throw new InvalidArgumentException(
-                        'The value of ' . $key . ' should be either a callable or ' .
-                        'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
-                    );
-                }
-            }
-        );
-
-        array_walk(
-            $andFilter,
-            function ($value, $key) {
-                if (!is_callable($value) && !$value instanceof FilterInterface) {
-                    throw new InvalidArgumentException(
-                        'The value of ' . $key . '  should be either a callable or ' .
-                        'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
-                    );
-                }
-            }
-        );
-
-        $this->orFilter = new ArrayObject($orFilter);
-        $this->andFilter = new ArrayObject($andFilter);
-    }
-
-    /**
-     * Add a filter to the composite. Has to be indexed with $name in
-     * order to identify a specific filter.
-     *
-     * This example will exclude all methods from the hydration, that starts with 'getService'
-     * <code>
-     * $composite->addFilter('exclude',
-     *     function ($method) {
-     *         if (preg_match('/^getService/', $method) {
-     *             return false;
-     *         }
-     *         return true;
-     *     }, FilterComposite::CONDITION_AND
-     * );
-     * </code>
-     *
-     * @param  string                   $name
-     * @param  callable|FilterInterface $filter
-     * @param  int                      $condition Can be either FilterComposite::CONDITION_OR or FilterComposite::CONDITION_AND
-     * @throws InvalidArgumentException
-     * @return FilterComposite
-     */
-    public function addFilter($name, $filter, $condition = self::CONDITION_OR)
-    {
-        if (!is_callable($filter) && !($filter instanceof FilterInterface)) {
-            throw new InvalidArgumentException(
-                'The value of ' . $name . ' should be either a callable or ' .
-                'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
-            );
-        }
-
-        if ($condition === self::CONDITION_OR) {
-            $this->orFilter[$name] = $filter;
-        } elseif ($condition === self::CONDITION_AND) {
-            $this->andFilter[$name] = $filter;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Remove a filter from the composition
-     *
-     * @param $name string Identifier for the filter
-     * @return FilterComposite
-     */
-    public function removeFilter($name)
-    {
-        if (isset($this->orFilter[$name])) {
-            unset($this->orFilter[$name]);
-        }
-
-        if (isset($this->andFilter[$name])) {
-            unset($this->andFilter[$name]);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Check if $name has a filter registered
-     *
-     * @param $name string Identifier for the filter
-     * @return bool
-     */
-    public function hasFilter($name)
-    {
-        return isset($this->orFilter[$name]) || isset($this->andFilter[$name]);
-    }
-
-    /**
-     * Filter the composite based on the AND and OR condition
-     * Will return true if one from the "or conditions" and all from
-     * the "and condition" returns true. Otherwise false
-     *
-     * @param $property string Parameter will be e.g. Parent\Namespace\Class::method
-     * @return bool
-     */
-    public function filter($property)
-    {
-        $andCount = count($this->andFilter);
-        $orCount = count($this->orFilter);
-        // return true if no filters are registered
-        if ($orCount === 0 && $andCount === 0) {
-            return true;
-        } elseif ($orCount === 0 && $andCount !== 0) {
-            $returnValue = true;
-        } else {
-            $returnValue = false;
-        }
-
-        // Check if 1 from the or filters return true
-        foreach ($this->orFilter as $filter) {
-            if (is_callable($filter)) {
-                if ($filter($property) === true) {
-                    $returnValue = true;
-                    break;
-                }
-                continue;
-            } else {
-                if ($filter->filter($property) === true) {
-                    $returnValue = true;
-                    break;
-                }
-            }
-        }
-
-        // Check if all of the and condition return true
-        foreach ($this->andFilter as $filter) {
-            if (is_callable($filter)) {
-                if ($filter($property) === false) {
-                    return false;
-                }
-                continue;
-            } else {
-                if ($filter->filter($property) === false) {
-                    return false;
-                }
-            }
-        }
-
-        return $returnValue;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterInterface.php
deleted file mode 100644
index 16df098f56032e11cd6e99798a35fe3837b27734..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-interface FilterInterface
-{
-    /**
-     * Should return true, if the given filter
-     * does not match
-     *
-     * @param string $property The name of the property
-     * @return bool
-     */
-    public function filter($property);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterProviderInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterProviderInterface.php
deleted file mode 100644
index c2e978877a544375fd894b3897f9e0b002a4f9bb..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/FilterProviderInterface.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-interface FilterProviderInterface
-{
-    /**
-     * Provides a filter for hydration
-     *
-     * @return FilterInterface
-     */
-    public function getFilter();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/GetFilter.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/GetFilter.php
deleted file mode 100644
index b4d898dc22fca3eacbcaf33b85f638056b5740f8..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/GetFilter.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class GetFilter implements FilterInterface
-{
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-
-        if (substr($property, $pos, 3) === 'get') {
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/HasFilter.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/HasFilter.php
deleted file mode 100644
index 0cf57f95e173cf034cf48f718f35f2b534cdf993..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/HasFilter.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class HasFilter implements FilterInterface
-{
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-
-        if (substr($property, $pos, 3) === 'has') {
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/IsFilter.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/IsFilter.php
deleted file mode 100644
index 3b6e3763742ae3fa5d04cf19c3bdd875afba3915..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/IsFilter.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class IsFilter implements FilterInterface
-{
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-
-        if (substr($property, $pos, 2) === 'is') {
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/MethodMatchFilter.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/MethodMatchFilter.php
deleted file mode 100644
index 2601a6fb31fdbba15b374ff4b506685b38f62591..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/MethodMatchFilter.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class MethodMatchFilter implements FilterInterface
-{
-    /**
-     * The method to exclude
-     * @var string
-     */
-    protected $method = null;
-
-    /**
-     * Either an exclude or an include
-     * @var bool
-     */
-    protected $exclude = null;
-
-    /**
-     * @param string $method The method to exclude or include
-     * @param bool $exclude If the method should be excluded
-     */
-    public function __construct($method, $exclude = true)
-    {
-        $this->method = $method;
-        $this->exclude = $exclude;
-    }
-
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-        if (substr($property, $pos) === $this->method) {
-            return !$this->exclude;
-        }
-        return $this->exclude;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/NumberOfParameterFilter.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/NumberOfParameterFilter.php
deleted file mode 100644
index 1254b63b35c29848a7e1efb059bcba79f07bcf17..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/NumberOfParameterFilter.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Filter;
-
-use ReflectionException;
-use ReflectionMethod;
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-class NumberOfParameterFilter implements FilterInterface
-{
-    /**
-     * The number of parameters beeing accepted
-     * @var int
-     */
-    protected $numberOfParameters = null;
-
-    /**
-     * @param int $numberOfParameters Number of accepted parameters
-     */
-    public function __construct($numberOfParameters = 0)
-    {
-        $this->numberOfParameters = (int) $numberOfParameters;
-    }
-
-    /**
-     * @param string $property the name of the property
-     * @return bool
-     * @throws InvalidArgumentException
-     */
-    public function filter($property)
-    {
-        try {
-            $reflectionMethod = new ReflectionMethod($property);
-        } catch (ReflectionException $exception) {
-            throw new InvalidArgumentException(
-                "Method $property doesn't exist"
-            );
-        }
-
-        return $reflectionMethod->getNumberOfParameters() === $this->numberOfParameters;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/OptionalParametersFilter.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/OptionalParametersFilter.php
deleted file mode 100644
index ccd67ca54a4beb28486b0b344feeb9efa4643ab3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Filter/OptionalParametersFilter.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-use InvalidArgumentException;
-use ReflectionException;
-use ReflectionMethod;
-use ReflectionParameter;
-
-/**
- * Filter that includes methods which have no parameters or only optional parameters
- */
-class OptionalParametersFilter implements FilterInterface
-{
-    /**
-     * Map of methods already analyzed
-     * by {@see \Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter::filter()},
-     * cached for performance reasons
-     *
-     * @var bool[]
-     */
-    protected static $propertiesCache = array();
-
-    /**
-     * {@inheritDoc}
-     */
-    public function filter($property)
-    {
-        if (isset(static::$propertiesCache[$property])) {
-            return static::$propertiesCache[$property];
-        }
-
-        try {
-            $reflectionMethod = new ReflectionMethod($property);
-        } catch (ReflectionException $exception) {
-            throw new InvalidArgumentException(sprintf('Method %s doesn\'t exist', $property));
-        }
-
-        $mandatoryParameters = array_filter(
-            $reflectionMethod->getParameters(),
-            function (ReflectionParameter $parameter) {
-                return ! $parameter->isOptional();
-            }
-        );
-
-        return static::$propertiesCache[$property] = empty($mandatoryParameters);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/FilterEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/FilterEnabledInterface.php
deleted file mode 100644
index 380aade050ad7fd18f684f916d7876af81643a77..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/FilterEnabledInterface.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Hydrator\Filter\FilterInterface;
-use Zend\Stdlib\Hydrator\Filter\FilterComposite;
-use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
-
-interface FilterEnabledInterface extends FilterProviderInterface
-{
-    /**
-     * Add a new filter to take care of what needs to be hydrated.
-     * To exclude e.g. the method getServiceLocator:
-     *
-     * <code>
-     * $composite->addFilter(
-     *     "servicelocator",
-     *     function ($property) {
-     *         list($class, $method) = explode('::', $property);
-     *         if ($method === 'getServiceLocator') {
-     *             return false;
-     *         }
-     *         return true;
-     *     },
-     *     FilterComposite::CONDITION_AND
-     * );
-     * </code>
-     *
-     * @param string $name Index in the composite
-     * @param callable|FilterInterface $filter
-     * @param int $condition
-     * @return FilterComposite
-     */
-    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR);
-
-    /**
-     * Check whether a specific filter exists at key $name or not
-     *
-     * @param string $name Index in the composite
-     * @return bool
-     */
-    public function hasFilter($name);
-
-    /**
-     * Remove a filter from the composition.
-     * To not extract "has" methods, you simply need to unregister it
-     *
-     * <code>
-     * $filterComposite->removeFilter('has');
-     * </code>
-     *
-     * @param $name
-     * @return FilterComposite
-     */
-    public function removeFilter($name);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/HydrationInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/HydrationInterface.php
deleted file mode 100644
index e7deff491ae575b2bdf728d94c37f94e40fac656..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/HydrationInterface.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-interface HydrationInterface
-{
-    /**
-     * Hydrate $object with the provided $data.
-     *
-     * @param  array $data
-     * @param  object $object
-     * @return object
-     */
-    public function hydrate(array $data, $object);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorAwareInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorAwareInterface.php
deleted file mode 100644
index d64782ea41ee2ed55cb2be38035a296883533acf..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorAwareInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-interface HydratorAwareInterface
-{
-    /**
-     * Set hydrator
-     *
-     * @param  HydratorInterface $hydrator
-     * @return HydratorAwareInterface
-     */
-    public function setHydrator(HydratorInterface $hydrator);
-
-    /**
-     * Retrieve hydrator
-     *
-     * @return HydratorInterface
-     */
-    public function getHydrator();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorAwareTrait.php b/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorAwareTrait.php
deleted file mode 100644
index 9c772c277a3d451a5a29814ffa5a2c124fbaf1d1..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorAwareTrait.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-trait HydratorAwareTrait
-{
-    /**
-     * Hydrator instance
-     *
-     * @var HydratorInterface
-     * @access protected
-     */
-    protected $hydrator = null;
-
-    /**
-     * Set hydrator
-     *
-     * @param  HydratorInterface $hydrator
-     * @return self
-     * @access public
-     */
-    public function setHydrator(HydratorInterface $hydrator)
-    {
-        $this->hydrator = $hydrator;
-
-        return $this;
-    }
-
-    /**
-     * Retrieve hydrator
-     *
-     * @param void
-     * @return null|HydratorInterface
-     * @access public
-     */
-    public function getHydrator()
-    {
-        return $this->hydrator;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorInterface.php
deleted file mode 100644
index bc9983d9a5a6cc1d8c0d859cc548f4fd02a940b2..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorInterface.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Extractor\ExtractionInterface;
-
-interface HydratorInterface extends HydrationInterface, ExtractionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorOptionsInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorOptionsInterface.php
deleted file mode 100644
index 44610f7c1e2c7ce7126f5675e88a17269c4eaec3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorOptionsInterface.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-interface HydratorOptionsInterface
-{
-    /**
-     * @param  array|\Traversable $options
-     * @return HydratorOptionsInterface
-     */
-    public function setOptions($options);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorPluginManager.php b/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorPluginManager.php
deleted file mode 100644
index 1b238e7ccb5b2fd46534f442b16ea7593d6a8ddd..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/HydratorPluginManager.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\ServiceManager\AbstractPluginManager;
-use Zend\Stdlib\Exception;
-
-/**
- * Plugin manager implementation for hydrators.
- *
- * Enforces that adapters retrieved are instances of HydratorInterface
- */
-class HydratorPluginManager extends AbstractPluginManager
-{
-    /**
-     * Whether or not to share by default
-     *
-     * @var bool
-     */
-    protected $shareByDefault = false;
-
-    /**
-     * Default aliases
-     *
-     * @var array
-     */
-    protected $aliases = array(
-        'delegatinghydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydrator',
-    );
-
-    /**
-     * Default set of adapters
-     *
-     * @var array
-     */
-    protected $invokableClasses = array(
-        'arrayserializable' => 'Zend\Stdlib\Hydrator\ArraySerializable',
-        'classmethods'      => 'Zend\Stdlib\Hydrator\ClassMethods',
-        'objectproperty'    => 'Zend\Stdlib\Hydrator\ObjectProperty',
-        'reflection'        => 'Zend\Stdlib\Hydrator\Reflection'
-    );
-
-    /**
-     * Default factory-based adapters
-     *
-     * @var array
-     */
-    protected $factories = array(
-        'Zend\Stdlib\Hydrator\DelegatingHydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydratorFactory',
-    );
-
-    /**
-     * {@inheritDoc}
-     */
-    public function validatePlugin($plugin)
-    {
-        if ($plugin instanceof HydratorInterface) {
-            // we're okay
-            return;
-        }
-
-        throw new Exception\RuntimeException(sprintf(
-            'Plugin of type %s is invalid; must implement Zend\Stdlib\Hydrator\HydratorInterface',
-            (is_object($plugin) ? get_class($plugin) : gettype($plugin))
-        ));
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php
deleted file mode 100644
index 962303ae151dd49bb38e2347de2777ef7659f1d7..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-final class ArrayMapNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * @var string[]
-     */
-    private $extractionMap = array();
-
-    /**
-     * @var string[]
-     */
-    private $hydrationMap = array();
-
-    /**
-     * Constructor
-     *
-     * @param array $extractionMap A map of string keys and values for symmetric translation of hydrated
-     *                             and extracted field names
-     */
-    public function __construct(array $extractionMap)
-    {
-        $this->extractionMap = $extractionMap;
-        $this->hydrationMap  = array_flip($extractionMap);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($name)
-    {
-        return isset($this->hydrationMap[$name]) ? $this->hydrationMap[$name] : $name;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($name)
-    {
-        return isset($this->extractionMap[$name]) ? $this->extractionMap[$name] : $name;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/CompositeNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/CompositeNamingStrategy.php
deleted file mode 100644
index 0887e9288b85b723be62aa8f829bbd1cc1687d1c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/CompositeNamingStrategy.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-final class CompositeNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * @var array
-     */
-    private $namingStrategies = array();
-
-    /**
-     * @var NamingStrategyInterface
-     */
-    private $defaultNamingStrategy;
-
-    /**
-     * @param NamingStrategyInterface[]    $strategies            indexed by the name they translate
-     * @param NamingStrategyInterface|null $defaultNamingStrategy
-     */
-    public function __construct(array $strategies, NamingStrategyInterface $defaultNamingStrategy = null)
-    {
-        $this->namingStrategies = array_map(
-            function (NamingStrategyInterface $strategy) {
-                // this callback is here only to ensure type-safety
-                return $strategy;
-            },
-            $strategies
-        );
-
-        $this->defaultNamingStrategy = $defaultNamingStrategy ?: new IdentityNamingStrategy();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($name)
-    {
-        $strategy = isset($this->namingStrategies[$name])
-            ? $this->namingStrategies[$name]
-            : $this->defaultNamingStrategy;
-
-        return $strategy->extract($name);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($name)
-    {
-        $strategy = isset($this->namingStrategies[$name])
-            ? $this->namingStrategies[$name]
-            : $this->defaultNamingStrategy;
-
-        return $strategy->hydrate($name);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/IdentityNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/IdentityNamingStrategy.php
deleted file mode 100644
index ee4b328d34d638e787ec9eca9d10e0c8a034269c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/IdentityNamingStrategy.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-final class IdentityNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($name)
-    {
-        return $name;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($name)
-    {
-        return $name;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/MapNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/MapNamingStrategy.php
deleted file mode 100644
index 27fbf321874e9f79040994fa79c3a452414fa50d..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/MapNamingStrategy.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-class MapNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * Map for hydrate name conversion.
-     *
-     * @var array
-     */
-    protected $mapping = array();
-
-    /**
-     * Reversed map for extract name conversion.
-     *
-     * @var array
-     */
-    protected $reverse = array();
-
-    /**
-     * Initialize.
-     *
-     * @param array $mapping Map for name conversion on hydration
-     * @param array $reverse Reverse map for name conversion on extraction
-     */
-    public function __construct(array $mapping, array $reverse = null)
-    {
-        $this->mapping = $mapping;
-        $this->reverse = $reverse ?: $this->flipMapping($mapping);
-    }
-
-    /**
-     * Safelly flip mapping array.
-     *
-     * @param  array                    $array Array to flip
-     * @return array                    Flipped array
-     * @throws InvalidArgumentException
-     */
-    protected function flipMapping(array $array)
-    {
-        array_walk($array, function ($value) {
-            if (!is_string($value) && !is_int($value)) {
-                throw new InvalidArgumentException('Mapping array can\'t be flipped because of invalid value');
-            }
-        });
-
-        return array_flip($array);
-    }
-
-    /**
-     * Converts the given name so that it can be extracted by the hydrator.
-     *
-     * @param  string $name The original name
-     * @return mixed  The hydrated name
-     */
-    public function hydrate($name)
-    {
-        if (array_key_exists($name, $this->mapping)) {
-            return $this->mapping[$name];
-        }
-
-        return $name;
-    }
-
-    /**
-     * Converts the given name so that it can be hydrated by the hydrator.
-     *
-     * @param  string $name The original name
-     * @return mixed  The extracted name
-     */
-    public function extract($name)
-    {
-        if (array_key_exists($name, $this->reverse)) {
-            return $this->reverse[$name];
-        }
-
-        return $name;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/NamingStrategyInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/NamingStrategyInterface.php
deleted file mode 100644
index ff99385c19f98dbdbe641a003e5f7b02be787d6a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/NamingStrategyInterface.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-/**
- * Allow property extraction / hydration for hydrator
- *
- * Interface PropertyStrategyInterface
- * @package Zend\Stdlib\Hydrator\NamingStrategy
- */
-interface NamingStrategyInterface
-{
-    /**
-     * Converts the given name so that it can be extracted by the hydrator.
-     *
-     * @param string $name   The original name
-     * @param object $object (optional) The original object for context.
-     * @return mixed         The hydrated name
-     */
-    public function hydrate($name);
-
-    /**
-     * Converts the given name so that it can be hydrated by the hydrator.
-     *
-     * @param string $name The original name
-     * @param array  $data (optional) The original data for context.
-     * @return mixed The extracted name
-     */
-    public function extract($name);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
deleted file mode 100644
index 023b4eec76a6b89616acfe35554e6fe6b45af5fa..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-use Zend\Filter\FilterChain;
-
-class UnderscoreNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * @var FilterChain|null
-     */
-    protected static $camelCaseToUnderscoreFilter;
-
-    /**
-     * @var FilterChain|null
-     */
-    protected static $underscoreToStudlyCaseFilter;
-
-    /**
-     * Remove underscores and capitalize letters
-     *
-     * @param  string $name
-     * @return string
-     */
-    public function hydrate($name)
-    {
-        return $this->getUnderscoreToStudlyCaseFilter()->filter($name);
-    }
-
-    /**
-     * Remove capitalized letters and prepend underscores.
-     *
-     * @param  string $name
-     * @return string
-     */
-    public function extract($name)
-    {
-        return $this->getCamelCaseToUnderscoreFilter()->filter($name);
-    }
-
-    /**
-     * @return FilterChain
-     */
-    protected function getUnderscoreToStudlyCaseFilter()
-    {
-        if (static::$underscoreToStudlyCaseFilter instanceof FilterChain) {
-            return static::$underscoreToStudlyCaseFilter;
-        }
-
-        $filter = new FilterChain();
-
-        $filter->attachByName('WordUnderscoreToStudlyCase');
-
-        return static::$underscoreToStudlyCaseFilter = $filter;
-    }
-
-    /**
-     * @return FilterChain
-     */
-    protected function getCamelCaseToUnderscoreFilter()
-    {
-        if (static::$camelCaseToUnderscoreFilter instanceof FilterChain) {
-            return static::$camelCaseToUnderscoreFilter;
-        }
-
-        $filter = new FilterChain();
-
-        $filter->attachByName('WordCamelCaseToUnderscore');
-        $filter->attachByName('StringToLower');
-
-        return static::$camelCaseToUnderscoreFilter = $filter;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategyEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategyEnabledInterface.php
deleted file mode 100644
index f9c6288a760b0948d3f52d27df6239608adfcce7..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/NamingStrategyEnabledInterface.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
-
-interface NamingStrategyEnabledInterface
-{
-    /**
-     * Adds the given naming strategy
-     *
-     * @param NamingStrategyInterface $strategy The naming to register.
-     * @return NamingStrategyEnabledInterface
-     */
-    public function setNamingStrategy(NamingStrategyInterface $strategy);
-
-    /**
-     * Gets the naming strategy.
-     *
-     * @return NamingStrategyInterface
-     */
-    public function getNamingStrategy();
-
-    /**
-     * Checks if a naming strategy exists.
-     *
-     * @return bool
-     */
-    public function hasNamingStrategy();
-
-    /**
-     * Removes the naming with the given name.
-     *
-     * @return NamingStrategyEnabledInterface
-     */
-    public function removeNamingStrategy();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/ObjectProperty.php b/core/vendor/zendframework/zend-stdlib/Hydrator/ObjectProperty.php
deleted file mode 100644
index c9f5260a5e8e0d8c4c4bc4f56a4c0ff92621296b..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/ObjectProperty.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Exception;
-use ReflectionClass;
-use ReflectionProperty;
-
-class ObjectProperty extends AbstractHydrator
-{
-    /**
-     * @var array[] indexed by class name and then property name
-     */
-    private static $skippedPropertiesCache = array();
-
-    /**
-     * {@inheritDoc}
-     *
-     * Extracts the accessible non-static properties of the given $object.
-     *
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function extract($object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
-            );
-        }
-
-        $data   = get_object_vars($object);
-        $filter = $this->getFilter();
-
-        foreach ($data as $name => $value) {
-            // Filter keys, removing any we don't want
-            if (! $filter->filter($name)) {
-                unset($data[$name]);
-                continue;
-            }
-
-            // Replace name if extracted differ
-            $extracted = $this->extractName($name, $object);
-
-            if ($extracted !== $name) {
-                unset($data[$name]);
-                $name = $extracted;
-            }
-
-            $data[$name] = $this->extractValue($name, $value, $object);
-        }
-
-        return $data;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Hydrate an object by populating public properties
-     *
-     * Hydrates an object by setting public properties of the object.
-     *
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function hydrate(array $data, $object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
-            );
-        }
-
-        $properties = & self::$skippedPropertiesCache[get_class($object)];
-
-        if (! isset($properties)) {
-            $reflection = new ReflectionClass($object);
-            $properties = array_fill_keys(
-                array_map(
-                    function (ReflectionProperty $property) {
-                        return $property->getName();
-                    },
-                    $reflection->getProperties(
-                        ReflectionProperty::IS_PRIVATE
-                        + ReflectionProperty::IS_PROTECTED
-                        + ReflectionProperty::IS_STATIC
-                    )
-                ),
-                true
-            );
-        }
-
-        foreach ($data as $name => $value) {
-            $property = $this->hydrateName($name, $data);
-
-            if (isset($properties[$property])) {
-                continue;
-            }
-
-            $object->$property = $this->hydrateValue($property, $value, $data);
-        }
-
-        return $object;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Reflection.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Reflection.php
deleted file mode 100644
index ea8e2d215309c3d3cf56d43c74b56bbd22d9f157..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Reflection.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use ReflectionClass;
-use Zend\Stdlib\Exception;
-
-class Reflection extends AbstractHydrator
-{
-    /**
-     * Simple in-memory array cache of ReflectionProperties used.
-     * @var \ReflectionProperty[]
-     */
-    protected static $reflProperties = array();
-
-    /**
-     * Extract values from an object
-     *
-     * @param  object $object
-     * @return array
-     */
-    public function extract($object)
-    {
-        $result = array();
-        foreach (self::getReflProperties($object) as $property) {
-            $propertyName = $this->extractName($property->getName(), $object);
-            if (!$this->filterComposite->filter($propertyName)) {
-                continue;
-            }
-
-            $value = $property->getValue($object);
-            $result[$propertyName] = $this->extractValue($propertyName, $value, $object);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Hydrate $object with the provided $data.
-     *
-     * @param  array $data
-     * @param  object $object
-     * @return object
-     */
-    public function hydrate(array $data, $object)
-    {
-        $reflProperties = self::getReflProperties($object);
-        foreach ($data as $key => $value) {
-            $name = $this->hydrateName($key, $data);
-            if (isset($reflProperties[$name])) {
-                $reflProperties[$name]->setValue($object, $this->hydrateValue($name, $value, $data));
-            }
-        }
-        return $object;
-    }
-
-    /**
-     * Get a reflection properties from in-memory cache and lazy-load if
-     * class has not been loaded.
-     *
-     * @param  string|object $input
-     * @throws Exception\InvalidArgumentException
-     * @return \ReflectionProperty[]
-     */
-    protected static function getReflProperties($input)
-    {
-        if (is_object($input)) {
-            $input = get_class($input);
-        } elseif (!is_string($input)) {
-            throw new Exception\InvalidArgumentException('Input must be a string or an object.');
-        }
-
-        if (isset(static::$reflProperties[$input])) {
-            return static::$reflProperties[$input];
-        }
-
-        static::$reflProperties[$input] = array();
-        $reflClass                      = new ReflectionClass($input);
-        $reflProperties                 = $reflClass->getProperties();
-
-        foreach ($reflProperties as $property) {
-            $property->setAccessible(true);
-            static::$reflProperties[$input][$property->getName()] = $property;
-        }
-
-        return static::$reflProperties[$input];
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/BooleanStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/BooleanStrategy.php
deleted file mode 100644
index 3c29231f34c5c551ee84b61fd124bcd0ce3a19f1..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/BooleanStrategy.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-/**
- * This Strategy extracts and hydrates int and string values to Boolean values
- *
- * @package Zend\Stdlib\Hydrator\Strategy
- */
-final class BooleanStrategy implements StrategyInterface
-{
-    /**
-     * @var int|string
-     */
-    private $trueValue;
-
-    /**
-     * @var int|string
-     */
-    private $falseValue;
-
-    /**
-     * @param int|string $trueValue
-     * @param int|string $falseValue
-     * @throws InvalidArgumentException
-     */
-    public function __construct($trueValue, $falseValue)
-    {
-        if (!is_int($trueValue) && !is_string($trueValue)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to instantiate BooleanStrategy. Expected int or string as $trueValue. %s was given',
-                is_object($trueValue) ? get_class($trueValue) : gettype($trueValue)
-            ));
-        }
-
-        if (!is_int($falseValue) && !is_string($falseValue)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to instantiate BooleanStrategy. Expected int or string as $falseValue. %s was given',
-                is_object($falseValue) ? get_class($falseValue) : gettype($falseValue)
-            ));
-        }
-
-        $this->trueValue  = $trueValue;
-        $this->falseValue = $falseValue;
-    }
-
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param  bool $value The original value.
-     * @throws InvalidArgumentException
-     * @return int|string Returns the value that should be extracted.
-     */
-    public function extract($value)
-    {
-        if (!is_bool($value)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to extract. Expected bool. %s was given.',
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        return $value === true ? $this->trueValue : $this->falseValue;
-    }
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param  int|string $value The original value.
-     * @throws InvalidArgumentException
-     * @return bool Returns the value that should be hydrated.
-     */
-    public function hydrate($value)
-    {
-        if (!is_string($value) && !is_int($value)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to hydrate. Expected string or int. %s was given.',
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        if ($value === $this->trueValue) {
-            return true;
-        }
-
-        if ($value === $this->falseValue) {
-            return false;
-        }
-
-        throw new InvalidArgumentException(sprintf(
-            'Unexpected value %s can\'t be hydrated. Expect %s or %s as Value.',
-            $value,
-            $this->trueValue,
-            $this->falseValue
-        ));
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/ClosureStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/ClosureStrategy.php
deleted file mode 100644
index bf456a7fc434991ba4ae49654cf05f8800de0da3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/ClosureStrategy.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-class ClosureStrategy implements StrategyInterface
-{
-    /**
-     * Function, used in extract method, default:
-     * function ($value) {
-     *     return $value;
-     * };
-     * @var callable
-     */
-    protected $extractFunc = null;
-
-    /**
-     * Function, used in hydrate method, default:
-     * function ($value) {
-     *     return $value;
-     * };
-     * @var callable
-     */
-    protected $hydrateFunc = null;
-
-    /**
-     * You can describe how your values will extract and hydrate, like this:
-     * $hydrator->addStrategy('category', new ClosureStrategy(
-     *     function (Category $value) {
-     *         return (int) $value->id;
-     *     },
-     *     function ($value) {
-     *         return new Category((int) $value);
-     *     }
-     * ));
-     *
-     * @param callable $extractFunc - anonymous function, that extract values
-     * from object
-     * @param callable $hydrateFunc - anonymous function, that hydrate values
-     * into object
-     */
-    public function __construct($extractFunc = null, $hydrateFunc = null)
-    {
-        if (isset($extractFunc)) {
-            if (!is_callable($extractFunc)) {
-                throw new \Exception('$extractFunc must be callable');
-            }
-
-            $this->extractFunc = $extractFunc;
-        } else {
-            $this->extractFunc = function ($value) {
-                return $value;
-            };
-        }
-
-        if (isset($hydrateFunc)) {
-            if (!is_callable($hydrateFunc)) {
-                throw new \Exception('$hydrateFunc must be callable');
-            }
-
-            $this->hydrateFunc = $hydrateFunc;
-        } else {
-            $this->hydrateFunc = function ($value) {
-                return $value;
-            };
-        }
-    }
-
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param  mixed $value  The original value.
-     * @param  array $object The object is optionally provided as context.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value, $object = null)
-    {
-        $func = $this->extractFunc;
-
-        return $func($value, $object);
-    }
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param  mixed $value The original value.
-     * @param  array $data  The whole data is optionally provided as context.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value, $data = null)
-    {
-        $func = $this->hydrateFunc;
-
-        return $func($value, $data);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/DateTimeFormatterStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/DateTimeFormatterStrategy.php
deleted file mode 100644
index 62d92c588bc4d042e4e010152ef0485b53efb137..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/DateTimeFormatterStrategy.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use DateTime;
-use DateTimeZone;
-
-final class DateTimeFormatterStrategy implements StrategyInterface
-{
-    /**
-     * @var string
-     */
-    private $format;
-
-    /**
-     * @var DateTimeZone|null
-     */
-    private $timezone;
-
-    /**
-     * Constructor
-     *
-     * @param string            $format
-     * @param DateTimeZone|null $timezone
-     */
-    public function __construct($format = DateTime::RFC3339, DateTimeZone $timezone = null)
-    {
-        $this->format   = (string) $format;
-        $this->timezone = $timezone;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Converts to date time string
-     *
-     * @param mixed|DateTime $value
-     *
-     * @return mixed|string
-     */
-    public function extract($value)
-    {
-        if ($value instanceof DateTime) {
-            return $value->format($this->format);
-        }
-
-        return $value;
-    }
-
-    /**
-     * Converts date time string to DateTime instance for injecting to object
-     *
-     * {@inheritDoc}
-     *
-     * @param mixed|string $value
-     *
-     * @return mixed|DateTime
-     */
-    public function hydrate($value)
-    {
-        if ($value === '' || $value === null) {
-            return;
-        }
-
-        if ($this->timezone) {
-            $hydrated = DateTime::createFromFormat($this->format, $value, $this->timezone);
-        } else {
-            $hydrated = DateTime::createFromFormat($this->format, $value);
-        }
-
-        return $hydrated ?: $value;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/DefaultStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/DefaultStrategy.php
deleted file mode 100644
index b2c5c29b433a319a11e27f0b92f9fe0fe72a02ba..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/DefaultStrategy.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-class DefaultStrategy implements StrategyInterface
-{
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value)
-    {
-        return $value;
-    }
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value)
-    {
-        return $value;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/Exception/ExceptionInterface.php
deleted file mode 100644
index c7b576ce3c0324a87729597ba2c3b099d548ba5c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy\Exception;
-
-interface ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/Exception/InvalidArgumentException.php
deleted file mode 100644
index 2e6510df45e0bfe39c0c53c9a9ca863caff894f4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy\Exception;
-
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/ExplodeStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/ExplodeStrategy.php
deleted file mode 100644
index 49ec9c24b550d4ef7925abe0b18b998539bd34e1..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/ExplodeStrategy.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-final class ExplodeStrategy implements StrategyInterface
-{
-    /**
-     * @var string
-     */
-    private $valueDelimiter;
-
-    /**
-     * @var int|null
-     */
-    private $explodeLimit;
-
-    /**
-     * Constructor
-     *
-     * @param string   $delimiter    String that the values will be split upon
-     * @param int|null $explodeLimit Explode limit
-     */
-    public function __construct($delimiter = ',', $explodeLimit = null)
-    {
-        $this->setValueDelimiter($delimiter);
-
-        $this->explodeLimit = ($explodeLimit === null) ? null : (int) $explodeLimit;
-    }
-
-    /**
-     * Sets the delimiter string that the values will be split upon
-     *
-     * @param  string $delimiter
-     * @return self
-     */
-    private function setValueDelimiter($delimiter)
-    {
-        if (!is_string($delimiter)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s expects Delimiter to be string, %s provided instead',
-                __METHOD__,
-                is_object($delimiter) ? get_class($delimiter) : gettype($delimiter)
-            ));
-        }
-
-        if (empty($delimiter)) {
-            throw new Exception\InvalidArgumentException('Delimiter cannot be empty.');
-        }
-
-        $this->valueDelimiter = $delimiter;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Split a string by delimiter
-     *
-     * @param string|null $value
-     *
-     * @return string[]
-     *
-     * @throws Exception\InvalidArgumentException
-     */
-    public function hydrate($value)
-    {
-        if (null === $value) {
-            return array();
-        }
-
-        if (!(is_string($value) || is_numeric($value))) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s expects argument 1 to be string, %s provided instead',
-                __METHOD__,
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        if ($this->explodeLimit !== null) {
-            return explode($this->valueDelimiter, $value, $this->explodeLimit);
-        }
-
-        return explode($this->valueDelimiter, $value);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Join array elements with delimiter
-     *
-     * @param string[] $value The original value.
-     *
-     * @return string|null
-     */
-    public function extract($value)
-    {
-        if (!is_array($value)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s expects argument 1 to be array, %s provided instead',
-                __METHOD__,
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        return empty($value) ? null : implode($this->valueDelimiter, $value);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/SerializableStrategy.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/SerializableStrategy.php
deleted file mode 100644
index 260efa3087b8e516d16d54a7ef28d2faa99d0966..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/SerializableStrategy.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use Zend\Stdlib\Exception\InvalidArgumentException;
-use Zend\Serializer\Adapter\AdapterInterface as SerializerAdapter;
-use Zend\Serializer\Serializer as SerializerFactory;
-
-class SerializableStrategy implements StrategyInterface
-{
-    /**
-     * @var string|SerializerAdapter
-     */
-    protected $serializer;
-
-    /**
-     * @var array
-     */
-    protected $serializerOptions = array();
-
-    /**
-     *
-     * @param mixed $serializer string or SerializerAdapter
-     * @param mixed $serializerOptions
-     */
-    public function __construct($serializer, $serializerOptions = null)
-    {
-        $this->setSerializer($serializer);
-        if ($serializerOptions) {
-            $this->setSerializerOptions($serializerOptions);
-        }
-    }
-
-    /**
-     * Serialize the given value so that it can be extracted by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value)
-    {
-        $serializer = $this->getSerializer();
-        return $serializer->serialize($value);
-    }
-
-    /**
-     * Unserialize the given value so that it can be hydrated by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value)
-    {
-        $serializer = $this->getSerializer();
-        return $serializer->unserialize($value);
-    }
-
-    /**
-     * Set serializer
-     *
-     * @param  string|SerializerAdapter $serializer
-     * @return SerializableStrategy
-     */
-    public function setSerializer($serializer)
-    {
-        if (!is_string($serializer) && !$serializer instanceof SerializerAdapter) {
-            throw new InvalidArgumentException(sprintf(
-                '%s expects either a string serializer name or Zend\Serializer\Adapter\AdapterInterface instance; '
-                . 'received "%s"',
-                __METHOD__,
-                (is_object($serializer) ? get_class($serializer) : gettype($serializer))
-            ));
-        }
-        $this->serializer = $serializer;
-        return $this;
-    }
-
-    /**
-     * Get serializer
-     *
-     * @return SerializerAdapter
-     */
-    public function getSerializer()
-    {
-        if (is_string($this->serializer)) {
-            $options = $this->getSerializerOptions();
-            $this->setSerializer(SerializerFactory::factory($this->serializer, $options));
-        } elseif (null === $this->serializer) {
-            $this->setSerializer(SerializerFactory::getDefaultAdapter());
-        }
-
-        return $this->serializer;
-    }
-
-    /**
-     * Set configuration options for instantiating a serializer adapter
-     *
-     * @param  mixed $serializerOptions
-     * @return SerializableStrategy
-     */
-    public function setSerializerOptions($serializerOptions)
-    {
-        $this->serializerOptions = $serializerOptions;
-        return $this;
-    }
-
-    /**
-     * Get configuration options for instantiating a serializer adapter
-     *
-     * @return mixed
-     */
-    public function getSerializerOptions()
-    {
-        return $this->serializerOptions;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/StrategyChain.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/StrategyChain.php
deleted file mode 100644
index a9316bbd7c0c1581881a97f6a09b94c543de0ac9..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/StrategyChain.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-final class StrategyChain implements StrategyInterface
-{
-    /**
-     * Strategy chain for extraction
-     *
-     * @var StrategyInterface[]
-     */
-    private $extractionStrategies;
-
-    /**
-     * Strategy chain for hydration
-     *
-     * @var StrategyInterface[]
-     */
-    private $hydrationStrategies;
-
-    /**
-     * Constructor
-     *
-     * @param array|Traversable $extractionStrategies
-     */
-    public function __construct($extractionStrategies)
-    {
-        $extractionStrategies = ArrayUtils::iteratorToArray($extractionStrategies);
-        $this->extractionStrategies = array_map(
-            function (StrategyInterface $strategy) {
-                // this callback is here only to ensure type-safety
-                return $strategy;
-            },
-            $extractionStrategies
-        );
-
-        $this->hydrationStrategies = array_reverse($extractionStrategies);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($value)
-    {
-        foreach ($this->extractionStrategies as $strategy) {
-            $value = $strategy->extract($value);
-        }
-
-        return $value;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($value)
-    {
-        foreach ($this->hydrationStrategies as $strategy) {
-            $value = $strategy->hydrate($value);
-        }
-
-        return $value;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/StrategyInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/StrategyInterface.php
deleted file mode 100644
index 562ec4bd6c12ef761eb3d7e6d5088b0c177dbf0e..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/Strategy/StrategyInterface.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-/**
- * @todo v3.0, add optional object/data to extract/hydrate.
- */
-interface StrategyInterface
-{
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param mixed   $value The original value.
-     * @param object $object (optional) The original object for context.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value);
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @param array  $data (optional) The original data for context.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Hydrator/StrategyEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/Hydrator/StrategyEnabledInterface.php
deleted file mode 100644
index 6f29b16a6dda73f76481b4dee5b20f7f11f7cace..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Hydrator/StrategyEnabledInterface.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
-
-interface StrategyEnabledInterface
-{
-    /**
-     * Adds the given strategy under the given name.
-     *
-     * @param string $name The name of the strategy to register.
-     * @param StrategyInterface $strategy The strategy to register.
-     * @return StrategyEnabledInterface
-     */
-    public function addStrategy($name, StrategyInterface $strategy);
-
-    /**
-     * Gets the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to get.
-     * @return StrategyInterface
-     */
-    public function getStrategy($name);
-
-    /**
-     * Checks if the strategy with the given name exists.
-     *
-     * @param string $name The name of the strategy to check for.
-     * @return bool
-     */
-    public function hasStrategy($name);
-
-    /**
-     * Removes the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to remove.
-     * @return StrategyEnabledInterface
-     */
-    public function removeStrategy($name);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/InitializableInterface.php b/core/vendor/zendframework/zend-stdlib/InitializableInterface.php
deleted file mode 100644
index f78bedef30168b8cfe8c76310f2b0349d1a56314..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/InitializableInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-/**
- * Interface to allow objects to have initialization logic
- */
-interface InitializableInterface
-{
-    /**
-     * Init an object
-     *
-     * @return void
-     */
-    public function init();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/JsonSerializable.php b/core/vendor/zendframework/zend-stdlib/JsonSerializable.php
deleted file mode 100644
index 6d6c2abe873a7ea45990109b6367747c0cfa1cc6..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/JsonSerializable.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-if (PHP_VERSION_ID < 50400) {
-    class_alias(
-        'Zend\Stdlib\JsonSerializable\PhpLegacyCompatibility',
-        'JsonSerializable'
-    );
-}
-
-/**
- * Polyfill for JsonSerializable
- *
- * JsonSerializable was introduced in PHP 5.4.0.
- *
- * @see http://php.net/manual/class.jsonserializable.php
- */
-interface JsonSerializable extends \JsonSerializable
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/JsonSerializable/PhpLegacyCompatibility.php b/core/vendor/zendframework/zend-stdlib/JsonSerializable/PhpLegacyCompatibility.php
deleted file mode 100644
index ecc7525d4cd59cf1fafe43aea5b056ef0c3bb5ce..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/JsonSerializable/PhpLegacyCompatibility.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\JsonSerializable;
-
-/**
- * Interface compatible with the built-in JsonSerializable interface
- *
- * JsonSerializable was introduced in PHP 5.4.0.
- *
- * @see http://php.net/manual/class.jsonserializable.php
- */
-interface PhpLegacyCompatibility
-{
-    /**
-     * Returns data which can be serialized by json_encode().
-     *
-     * @return mixed
-     * @see    http://php.net/manual/jsonserializable.jsonserialize.php
-     */
-    public function jsonSerialize();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/LICENSE.txt b/core/vendor/zendframework/zend-stdlib/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6eab5aa14fd421059dfecada369abb8dd79c8a48
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/LICENSE.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2005-2015, Zend Technologies USA, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+    * Neither the name of Zend Technologies USA, Inc. nor the names of its
+      contributors may be used to endorse or promote products derived from this
+      software without specific prior written permission.
+
+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.
diff --git a/core/vendor/zendframework/zend-stdlib/Message.php b/core/vendor/zendframework/zend-stdlib/Message.php
deleted file mode 100644
index 63ba7c7303c71bf660d6a64899bf2bf9813b2213..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Message.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Traversable;
-
-class Message implements MessageInterface
-{
-    /**
-     * @var array
-     */
-    protected $metadata = array();
-
-    /**
-     * @var string
-     */
-    protected $content = '';
-
-    /**
-     * Set message metadata
-     *
-     * Non-destructive setting of message metadata; always adds to the metadata, never overwrites
-     * the entire metadata container.
-     *
-     * @param  string|int|array|Traversable $spec
-     * @param  mixed $value
-     * @throws Exception\InvalidArgumentException
-     * @return Message
-     */
-    public function setMetadata($spec, $value = null)
-    {
-        if (is_scalar($spec)) {
-            $this->metadata[$spec] = $value;
-            return $this;
-        }
-        if (!is_array($spec) && !$spec instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                'Expected a string, array, or Traversable argument in first position; received "%s"',
-                (is_object($spec) ? get_class($spec) : gettype($spec))
-            ));
-        }
-        foreach ($spec as $key => $value) {
-            $this->metadata[$key] = $value;
-        }
-        return $this;
-    }
-
-    /**
-     * Retrieve all metadata or a single metadatum as specified by key
-     *
-     * @param  null|string|int $key
-     * @param  null|mixed $default
-     * @throws Exception\InvalidArgumentException
-     * @return mixed
-     */
-    public function getMetadata($key = null, $default = null)
-    {
-        if (null === $key) {
-            return $this->metadata;
-        }
-
-        if (!is_scalar($key)) {
-            throw new Exception\InvalidArgumentException('Non-scalar argument provided for key');
-        }
-
-        if (array_key_exists($key, $this->metadata)) {
-            return $this->metadata[$key];
-        }
-
-        return $default;
-    }
-
-    /**
-     * Set message content
-     *
-     * @param  mixed $value
-     * @return Message
-     */
-    public function setContent($value)
-    {
-        $this->content = $value;
-        return $this;
-    }
-
-    /**
-     * Get message content
-     *
-     * @return mixed
-     */
-    public function getContent()
-    {
-        return $this->content;
-    }
-
-    /**
-     * @return string
-     */
-    public function toString()
-    {
-        $request = '';
-        foreach ($this->getMetadata() as $key => $value) {
-            $request .= sprintf(
-                "%s: %s\r\n",
-                (string) $key,
-                (string) $value
-            );
-        }
-        $request .= "\r\n" . $this->getContent();
-        return $request;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/MessageInterface.php b/core/vendor/zendframework/zend-stdlib/MessageInterface.php
deleted file mode 100644
index 28d8857fcddd31b4d1d14c489ed75c79e13c2e1a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/MessageInterface.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface MessageInterface
-{
-    /**
-     * Set metadata
-     *
-     * @param  string|int|array|\Traversable $spec
-     * @param  mixed $value
-     */
-    public function setMetadata($spec, $value = null);
-
-    /**
-     * Get metadata
-     *
-     * @param  null|string|int $key
-     * @return mixed
-     */
-    public function getMetadata($key = null);
-
-    /**
-     * Set content
-     *
-     * @param  mixed $content
-     * @return mixed
-     */
-    public function setContent($content);
-
-    /**
-     * Get content
-     *
-     * @return mixed
-     */
-    public function getContent();
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ParameterObjectInterface.php b/core/vendor/zendframework/zend-stdlib/ParameterObjectInterface.php
deleted file mode 100644
index 676a6e2b99169f3354535abeb6d24fe96aea2da2..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ParameterObjectInterface.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface ParameterObjectInterface
-{
-    /**
-     * @param string $key
-     * @param mixed $value
-     * @return void
-     */
-    public function __set($key, $value);
-
-    /**
-     * @param string $key
-     * @return mixed
-     */
-    public function __get($key);
-
-    /**
-     * @param string $key
-     * @return bool
-     */
-    public function __isset($key);
-
-    /**
-     * @param string $key
-     * @return void
-     */
-    public function __unset($key);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Parameters.php b/core/vendor/zendframework/zend-stdlib/Parameters.php
deleted file mode 100644
index bef834a8a03ade6a62e21b78d9efeb1be79e35e4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Parameters.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayObject as PhpArrayObject;
-
-class Parameters extends PhpArrayObject implements ParametersInterface
-{
-    /**
-     * Constructor
-     *
-     * Enforces that we have an array, and enforces parameter access to array
-     * elements.
-     *
-     * @param  array $values
-     */
-    public function __construct(array $values = null)
-    {
-        if (null === $values) {
-            $values = array();
-        }
-        parent::__construct($values, ArrayObject::ARRAY_AS_PROPS);
-    }
-
-    /**
-     * Populate from native PHP array
-     *
-     * @param  array $values
-     * @return void
-     */
-    public function fromArray(array $values)
-    {
-        $this->exchangeArray($values);
-    }
-
-    /**
-     * Populate from query string
-     *
-     * @param  string $string
-     * @return void
-     */
-    public function fromString($string)
-    {
-        $array = array();
-        parse_str($string, $array);
-        $this->fromArray($array);
-    }
-
-    /**
-     * Serialize to native PHP array
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        return $this->getArrayCopy();
-    }
-
-    /**
-     * Serialize to query string
-     *
-     * @return string
-     */
-    public function toString()
-    {
-        return http_build_query($this);
-    }
-
-    /**
-     * Retrieve by key
-     *
-     * Returns null if the key does not exist.
-     *
-     * @param  string $name
-     * @return mixed
-     */
-    public function offsetGet($name)
-    {
-        if ($this->offsetExists($name)) {
-            return parent::offsetGet($name);
-        }
-        return;
-    }
-
-    /**
-     * @param string $name
-     * @param mixed $default optional default value
-     * @return mixed
-     */
-    public function get($name, $default = null)
-    {
-        if ($this->offsetExists($name)) {
-            return parent::offsetGet($name);
-        }
-        return $default;
-    }
-
-    /**
-     * @param string $name
-     * @param mixed $value
-     * @return Parameters
-     */
-    public function set($name, $value)
-    {
-        $this[$name] = $value;
-        return $this;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ParametersInterface.php b/core/vendor/zendframework/zend-stdlib/ParametersInterface.php
deleted file mode 100644
index feeda580735f9607bec0fcc2ada8b47b7eb3a93a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ParametersInterface.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayAccess;
-use Countable;
-use Serializable;
-use Traversable;
-
-/*
- * Basically, an ArrayObject. You could simply define something like:
- *     class QueryParams extends ArrayObject implements Parameters {}
- * and have 90% of the functionality
- */
-interface ParametersInterface extends ArrayAccess, Countable, Serializable, Traversable
-{
-    /**
-     * Constructor
-     *
-     * @param array $values
-     */
-    public function __construct(array $values = null);
-
-    /**
-     * From array
-     *
-     * Allow deserialization from standard array
-     *
-     * @param array $values
-     * @return mixed
-     */
-    public function fromArray(array $values);
-
-    /**
-     * From string
-     *
-     * Allow deserialization from raw body; e.g., for PUT requests
-     *
-     * @param $string
-     * @return mixed
-     */
-    public function fromString($string);
-
-    /**
-     * To array
-     *
-     * Allow serialization back to standard array
-     *
-     * @return mixed
-     */
-    public function toArray();
-
-    /**
-     * To string
-     *
-     * Allow serialization to query format; e.g., for PUT or POST requests
-     *
-     * @return mixed
-     */
-    public function toString();
-
-    /**
-     * Get
-     *
-     * @param string $name
-     * @param mixed|null $default
-     * @return mixed
-     */
-    public function get($name, $default = null);
-
-    /**
-     * Set
-     *
-     * @param string $name
-     * @param mixed $value
-     * @return ParametersInterface
-     */
-    public function set($name, $value);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/PriorityList.php b/core/vendor/zendframework/zend-stdlib/PriorityList.php
deleted file mode 100644
index 172af68d81396686d1b5c9678f86d61d9fa5bce3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/PriorityList.php
+++ /dev/null
@@ -1,271 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Countable;
-use Iterator;
-
-class PriorityList implements Iterator, Countable
-{
-    const EXTR_DATA     = 0x00000001;
-    const EXTR_PRIORITY = 0x00000002;
-    const EXTR_BOTH     = 0x00000003;
-    /**
-     * Internal list of all items.
-     *
-     * @var array[]
-     */
-    protected $items = array();
-
-    /**
-     * Serial assigned to items to preserve LIFO.
-     *
-     * @var int
-     */
-    protected $serial = 0;
-
-    /**
-     * Serial order mode
-     * @var integer
-     */
-    protected $isLIFO = 1;
-
-    /**
-     * Internal counter to avoid usage of count().
-     *
-     * @var int
-     */
-    protected $count = 0;
-
-    /**
-     * Whether the list was already sorted.
-     *
-     * @var bool
-     */
-    protected $sorted = false;
-
-    /**
-     * Insert a new item.
-     *
-     * @param  string  $name
-     * @param  mixed   $value
-     * @param  int     $priority
-     *
-     * @return void
-     */
-    public function insert($name, $value, $priority = 0)
-    {
-        $this->sorted = false;
-        $this->count++;
-
-        $this->items[$name] = array(
-            'data'     => $value,
-            'priority' => (int) $priority,
-            'serial'   => $this->serial++,
-        );
-    }
-
-    /**
-     * @param string $name
-     * @param int    $priority
-     *
-     * @return $this
-     *
-     * @throws \Exception
-     */
-    public function setPriority($name, $priority)
-    {
-        if (!isset($this->items[$name])) {
-            throw new \Exception("item $name not found");
-        }
-
-        $this->items[$name]['priority'] = (int) $priority;
-        $this->sorted                   = false;
-
-        return $this;
-    }
-
-    /**
-     * Remove a item.
-     *
-     * @param  string $name
-     * @return void
-     */
-    public function remove($name)
-    {
-        if (isset($this->items[$name])) {
-            $this->count--;
-        }
-
-        unset($this->items[$name]);
-    }
-
-    /**
-     * Remove all items.
-     *
-     * @return void
-     */
-    public function clear()
-    {
-        $this->items  = array();
-        $this->serial = 0;
-        $this->count  = 0;
-        $this->sorted = false;
-    }
-
-    /**
-     * Get a item.
-     *
-     * @param  string $name
-     * @return mixed
-     */
-    public function get($name)
-    {
-        if (!isset($this->items[$name])) {
-            return;
-        }
-
-        return $this->items[$name]['data'];
-    }
-
-    /**
-     * Sort all items.
-     *
-     * @return void
-     */
-    protected function sort()
-    {
-        if (!$this->sorted) {
-            uasort($this->items, array($this, 'compare'));
-            $this->sorted = true;
-        }
-    }
-
-    /**
-     * Compare the priority of two items.
-     *
-     * @param  array $item1,
-     * @param  array $item2
-     * @return int
-     */
-    protected function compare(array $item1, array $item2)
-    {
-        return ($item1['priority'] === $item2['priority'])
-            ? ($item1['serial']   > $item2['serial']   ? -1 : 1) * $this->isLIFO
-            : ($item1['priority'] > $item2['priority'] ? -1 : 1);
-    }
-
-    /**
-     * Get/Set serial order mode
-     *
-     * @param bool|null $flag
-     *
-     * @return bool
-     */
-    public function isLIFO($flag = null)
-    {
-        if ($flag !== null) {
-            $isLifo = $flag === true ? 1 : -1;
-
-            if ($isLifo !== $this->isLIFO) {
-                $this->isLIFO = $isLifo;
-                $this->sorted = false;
-            }
-        }
-
-        return 1 === $this->isLIFO;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function rewind()
-    {
-        $this->sort();
-        reset($this->items);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function current()
-    {
-        $this->sorted || $this->sort();
-        $node = current($this->items);
-
-        return $node ? $node['data'] : false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function key()
-    {
-        $this->sorted || $this->sort();
-        return key($this->items);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function next()
-    {
-        $node = next($this->items);
-
-        return $node ? $node['data'] : false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function valid()
-    {
-        return current($this->items) !== false;
-    }
-
-    /**
-     * @return self
-     */
-    public function getIterator()
-    {
-        return clone $this;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function count()
-    {
-        return $this->count;
-    }
-
-    /**
-     * Return list as array
-     *
-     * @param int $flag
-     *
-     * @return array
-     */
-    public function toArray($flag = self::EXTR_DATA)
-    {
-        $this->sort();
-
-        if ($flag == self::EXTR_BOTH) {
-            return $this->items;
-        }
-
-        return array_map(
-            function ($item) use ($flag) {
-                return ($flag == PriorityList::EXTR_PRIORITY) ? $item['priority'] : $item['data'];
-            },
-            $this->items
-        );
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/PriorityQueue.php b/core/vendor/zendframework/zend-stdlib/PriorityQueue.php
deleted file mode 100644
index 1baf44e895b6278a6b50684e4743fce8ab340dd9..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/PriorityQueue.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Countable;
-use IteratorAggregate;
-use Serializable;
-
-/**
- * Re-usable, serializable priority queue implementation
- *
- * SplPriorityQueue acts as a heap; on iteration, each item is removed from the
- * queue. If you wish to re-use such a queue, you need to clone it first. This
- * makes for some interesting issues if you wish to delete items from the queue,
- * or, as already stated, iterate over it multiple times.
- *
- * This class aggregates items for the queue itself, but also composes an
- * "inner" iterator in the form of an SplPriorityQueue object for performing
- * the actual iteration.
- */
-class PriorityQueue implements Countable, IteratorAggregate, Serializable
-{
-    const EXTR_DATA     = 0x00000001;
-    const EXTR_PRIORITY = 0x00000002;
-    const EXTR_BOTH     = 0x00000003;
-
-    /**
-     * Inner queue class to use for iteration
-     * @var string
-     */
-    protected $queueClass = 'Zend\Stdlib\SplPriorityQueue';
-
-    /**
-     * Actual items aggregated in the priority queue. Each item is an array
-     * with keys "data" and "priority".
-     * @var array
-     */
-    protected $items      = array();
-
-    /**
-     * Inner queue object
-     * @var SplPriorityQueue
-     */
-    protected $queue;
-
-    /**
-     * Insert an item into the queue
-     *
-     * Priority defaults to 1 (low priority) if none provided.
-     *
-     * @param  mixed $data
-     * @param  int $priority
-     * @return PriorityQueue
-     */
-    public function insert($data, $priority = 1)
-    {
-        $priority = (int) $priority;
-        $this->items[] = array(
-            'data'     => $data,
-            'priority' => $priority,
-        );
-        $this->getQueue()->insert($data, $priority);
-        return $this;
-    }
-
-    /**
-     * Remove an item from the queue
-     *
-     * This is different than {@link extract()}; its purpose is to dequeue an
-     * item.
-     *
-     * This operation is potentially expensive, as it requires
-     * re-initialization and re-population of the inner queue.
-     *
-     * Note: this removes the first item matching the provided item found. If
-     * the same item has been added multiple times, it will not remove other
-     * instances.
-     *
-     * @param  mixed $datum
-     * @return bool False if the item was not found, true otherwise.
-     */
-    public function remove($datum)
-    {
-        $found = false;
-        foreach ($this->items as $key => $item) {
-            if ($item['data'] === $datum) {
-                $found = true;
-                break;
-            }
-        }
-        if ($found) {
-            unset($this->items[$key]);
-            $this->queue = null;
-
-            if (!$this->isEmpty()) {
-                $queue = $this->getQueue();
-                foreach ($this->items as $item) {
-                    $queue->insert($item['data'], $item['priority']);
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Is the queue empty?
-     *
-     * @return bool
-     */
-    public function isEmpty()
-    {
-        return (0 === $this->count());
-    }
-
-    /**
-     * How many items are in the queue?
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->items);
-    }
-
-    /**
-     * Peek at the top node in the queue, based on priority.
-     *
-     * @return mixed
-     */
-    public function top()
-    {
-        return $this->getIterator()->top();
-    }
-
-    /**
-     * Extract a node from the inner queue and sift up
-     *
-     * @return mixed
-     */
-    public function extract()
-    {
-        return $this->getQueue()->extract();
-    }
-
-    /**
-     * Retrieve the inner iterator
-     *
-     * SplPriorityQueue acts as a heap, which typically implies that as items
-     * are iterated, they are also removed. This does not work for situations
-     * where the queue may be iterated multiple times. As such, this class
-     * aggregates the values, and also injects an SplPriorityQueue. This method
-     * retrieves the inner queue object, and clones it for purposes of
-     * iteration.
-     *
-     * @return SplPriorityQueue
-     */
-    public function getIterator()
-    {
-        $queue = $this->getQueue();
-        return clone $queue;
-    }
-
-    /**
-     * Serialize the data structure
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize($this->items);
-    }
-
-    /**
-     * Unserialize a string into a PriorityQueue object
-     *
-     * Serialization format is compatible with {@link Zend\Stdlib\SplPriorityQueue}
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->insert($item['data'], $item['priority']);
-        }
-    }
-
-    /**
-     * Serialize to an array
-     *
-     * By default, returns only the item data, and in the order registered (not
-     * sorted). You may provide one of the EXTR_* flags as an argument, allowing
-     * the ability to return priorities or both data and priority.
-     *
-     * @param  int $flag
-     * @return array
-     */
-    public function toArray($flag = self::EXTR_DATA)
-    {
-        switch ($flag) {
-            case self::EXTR_BOTH:
-                return $this->items;
-            case self::EXTR_PRIORITY:
-                return array_map(function ($item) {
-                    return $item['priority'];
-                }, $this->items);
-            case self::EXTR_DATA:
-            default:
-                return array_map(function ($item) {
-                    return $item['data'];
-                }, $this->items);
-        }
-    }
-
-    /**
-     * Specify the internal queue class
-     *
-     * Please see {@link getIterator()} for details on the necessity of an
-     * internal queue class. The class provided should extend SplPriorityQueue.
-     *
-     * @param  string $class
-     * @return PriorityQueue
-     */
-    public function setInternalQueueClass($class)
-    {
-        $this->queueClass = (string) $class;
-        return $this;
-    }
-
-    /**
-     * Does the queue contain the given datum?
-     *
-     * @param  mixed $datum
-     * @return bool
-     */
-    public function contains($datum)
-    {
-        foreach ($this->items as $item) {
-            if ($item['data'] === $datum) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Does the queue have an item with the given priority?
-     *
-     * @param  int $priority
-     * @return bool
-     */
-    public function hasPriority($priority)
-    {
-        foreach ($this->items as $item) {
-            if ($item['priority'] === $priority) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Get the inner priority queue instance
-     *
-     * @throws Exception\DomainException
-     * @return SplPriorityQueue
-     */
-    protected function getQueue()
-    {
-        if (null === $this->queue) {
-            $this->queue = new $this->queueClass();
-            if (!$this->queue instanceof \SplPriorityQueue) {
-                throw new Exception\DomainException(sprintf(
-                    'PriorityQueue expects an internal queue of type SplPriorityQueue; received "%s"',
-                    get_class($this->queue)
-                ));
-            }
-        }
-        return $this->queue;
-    }
-
-    /**
-     * Add support for deep cloning
-     *
-     * @return void
-     */
-    public function __clone()
-    {
-        if (null !== $this->queue) {
-            $this->queue = clone $this->queue;
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/README.md b/core/vendor/zendframework/zend-stdlib/README.md
index a2dcb84191c2f6c83f97e6b83707c447326b62f8..c065e86e323b099efeb697d67b0b1cf62cca38eb 100644
--- a/core/vendor/zendframework/zend-stdlib/README.md
+++ b/core/vendor/zendframework/zend-stdlib/README.md
@@ -1,15 +1,15 @@
-Stdlib Component from ZF2
-=========================
+# zend-stdlib
 
-This is the Stdlib component for ZF2.
+`Zend\Stdlib` is a set of components that implements general purpose utility
+class for different scopes like:
 
-- File issues at https://github.com/zendframework/zf2/issues
-- Create pull requests against https://github.com/zendframework/zf2
-- Documentation is at http://framework.zend.com/docs
+- array utilities functions;
+- hydrators;
+- json serialazible interfaces;
+- general messaging systems;
+- strin wrappers;
+- etc
 
-LICENSE
--------
-
-The files in this archive are released under the [Zend Framework
-license](http://framework.zend.com/license), which is a 3-clause BSD license.
 
+- File issues at https://github.com/zendframework/zend-stdlib/issues
+- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-stdlib
diff --git a/core/vendor/zendframework/zend-stdlib/Request.php b/core/vendor/zendframework/zend-stdlib/Request.php
deleted file mode 100644
index 7c0840395e31505772bee163189c1689af895aa9..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Request.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-class Request extends Message implements RequestInterface
-{
-    // generic request implementation
-}
diff --git a/core/vendor/zendframework/zend-stdlib/RequestInterface.php b/core/vendor/zendframework/zend-stdlib/RequestInterface.php
deleted file mode 100644
index c2bac316d4ce4cae2f05280b278d4b6457904d0a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/RequestInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface RequestInterface extends MessageInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Response.php b/core/vendor/zendframework/zend-stdlib/Response.php
deleted file mode 100644
index f3074bad5e9f3263610441a9761f1deae6061f4a..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Response.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-class Response extends Message implements ResponseInterface
-{
-    // generic response implementation
-}
diff --git a/core/vendor/zendframework/zend-stdlib/ResponseInterface.php b/core/vendor/zendframework/zend-stdlib/ResponseInterface.php
deleted file mode 100644
index fe94d3043a2874239cd36cf376fc9ca92e2b7b06..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/ResponseInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface ResponseInterface extends MessageInterface
-{
-}
diff --git a/core/vendor/zendframework/zend-stdlib/SplPriorityQueue.php b/core/vendor/zendframework/zend-stdlib/SplPriorityQueue.php
deleted file mode 100644
index 029d8e9f059a3ab049f67dbc5f534bac718bed97..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/SplPriorityQueue.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Serializable;
-
-/**
- * Serializable version of SplPriorityQueue
- *
- * Also, provides predictable heap order for datums added with the same priority
- * (i.e., they will be emitted in the same order they are enqueued).
- */
-class SplPriorityQueue extends \SplPriorityQueue implements Serializable
-{
-    /**
-     * @var int Seed used to ensure queue order for items of the same priority
-     */
-    protected $serial = PHP_INT_MAX;
-
-    /**
-     * Insert a value with a given priority
-     *
-     * Utilizes {@var $serial} to ensure that values of equal priority are
-     * emitted in the same order in which they are inserted.
-     *
-     * @param  mixed $datum
-     * @param  mixed $priority
-     * @return void
-     */
-    public function insert($datum, $priority)
-    {
-        if (!is_array($priority)) {
-            $priority = array($priority, $this->serial--);
-        }
-        parent::insert($datum, $priority);
-    }
-
-    /**
-     * Serialize to an array
-     *
-     * Array will be priority => data pairs
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        foreach (clone $this as $item) {
-            $array[] = $item;
-        }
-        return $array;
-    }
-
-    /**
-     * Serialize
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        $clone = clone $this;
-        $clone->setExtractFlags(self::EXTR_BOTH);
-
-        $data = array();
-        foreach ($clone as $item) {
-            $data[] = $item;
-        }
-
-        return serialize($data);
-    }
-
-    /**
-     * Deserialize
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->insert($item['data'], $item['priority']);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/SplQueue.php b/core/vendor/zendframework/zend-stdlib/SplQueue.php
deleted file mode 100644
index 029bc9f127310037589f03297a80ea15815f2bd3..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/SplQueue.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Serializable;
-
-/**
- * Serializable version of SplQueue
- */
-class SplQueue extends \SplQueue implements Serializable
-{
-    /**
-     * Return an array representing the queue
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        foreach ($this as $item) {
-            $array[] = $item;
-        }
-        return $array;
-    }
-
-    /**
-     * Serialize
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize($this->toArray());
-    }
-
-    /**
-     * Unserialize
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->push($item);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/SplStack.php b/core/vendor/zendframework/zend-stdlib/SplStack.php
deleted file mode 100644
index fac77a5d0475c38c0325121a7879b4fd954fc9f4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/SplStack.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Serializable;
-
-/**
- * Serializable version of SplStack
- */
-class SplStack extends \SplStack implements Serializable
-{
-    /**
-     * Serialize to an array representing the stack
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        foreach ($this as $item) {
-            $array[] = $item;
-        }
-        return $array;
-    }
-
-    /**
-     * Serialize
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize($this->toArray());
-    }
-
-    /**
-     * Unserialize
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->unshift($item);
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/StringUtils.php b/core/vendor/zendframework/zend-stdlib/StringUtils.php
deleted file mode 100644
index 9bbb4a46e31fd20fe9f6968a5b076850a37f4e08..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/StringUtils.php
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Zend\Stdlib\StringWrapper\StringWrapperInterface;
-
-/**
- * Utility class for handling strings of different character encodings
- * using available PHP extensions.
- *
- * Declared abstract, as we have no need for instantiation.
- */
-abstract class StringUtils
-{
-    /**
-     * Ordered list of registered string wrapper instances
-     *
-     * @var StringWrapperInterface[]
-     */
-    protected static $wrapperRegistry = null;
-
-    /**
-     * A list of known single-byte character encodings (upper-case)
-     *
-     * @var string[]
-     */
-    protected static $singleByteEncodings = array(
-        'ASCII', '7BIT', '8BIT',
-        'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5',
-        'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10',
-        'ISO-8859-11', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
-        'CP-1251', 'CP-1252',
-        // TODO
-    );
-
-    /**
-     * Is PCRE compiled with Unicode support?
-     *
-     * @var bool
-     **/
-    protected static $hasPcreUnicodeSupport = null;
-
-    /**
-     * Get registered wrapper classes
-     *
-     * @return string[]
-     */
-    public static function getRegisteredWrappers()
-    {
-        if (static::$wrapperRegistry === null) {
-            static::$wrapperRegistry = array();
-
-            if (extension_loaded('intl')) {
-                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Intl';
-            }
-
-            if (extension_loaded('mbstring')) {
-                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\MbString';
-            }
-
-            if (extension_loaded('iconv')) {
-                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Iconv';
-            }
-
-            static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Native';
-        }
-
-        return static::$wrapperRegistry;
-    }
-
-    /**
-     * Register a string wrapper class
-     *
-     * @param string $wrapper
-     * @return void
-     */
-    public static function registerWrapper($wrapper)
-    {
-        $wrapper = (string) $wrapper;
-        if (!in_array($wrapper, static::$wrapperRegistry, true)) {
-            static::$wrapperRegistry[] = $wrapper;
-        }
-    }
-
-    /**
-     * Unregister a string wrapper class
-     *
-     * @param string $wrapper
-     * @return void
-     */
-    public static function unregisterWrapper($wrapper)
-    {
-        $index = array_search((string) $wrapper, static::$wrapperRegistry, true);
-        if ($index !== false) {
-            unset(static::$wrapperRegistry[$index]);
-        }
-    }
-
-    /**
-     * Reset all registered wrappers so the default wrappers will be used
-     *
-     * @return void
-     */
-    public static function resetRegisteredWrappers()
-    {
-        static::$wrapperRegistry = null;
-    }
-
-    /**
-     * Get the first string wrapper supporting the given character encoding
-     * and supports to convert into the given convert encoding.
-     *
-     * @param string      $encoding        Character encoding to support
-     * @param string|null $convertEncoding OPTIONAL character encoding to convert in
-     * @return StringWrapperInterface
-     * @throws Exception\RuntimeException If no wrapper supports given character encodings
-     */
-    public static function getWrapper($encoding = 'UTF-8', $convertEncoding = null)
-    {
-        foreach (static::getRegisteredWrappers() as $wrapperClass) {
-            if ($wrapperClass::isSupported($encoding, $convertEncoding)) {
-                $wrapper = new $wrapperClass($encoding, $convertEncoding);
-                $wrapper->setEncoding($encoding, $convertEncoding);
-                return $wrapper;
-            }
-        }
-
-        throw new Exception\RuntimeException(
-            'No wrapper found supporting "' . $encoding . '"'
-            . (($convertEncoding !== null) ? ' and "' . $convertEncoding . '"' : '')
-        );
-    }
-
-    /**
-     * Get a list of all known single-byte character encodings
-     *
-     * @return string[]
-     */
-    public static function getSingleByteEncodings()
-    {
-        return static::$singleByteEncodings;
-    }
-
-    /**
-     * Check if a given encoding is a known single-byte character encoding
-     *
-     * @param string $encoding
-     * @return bool
-     */
-    public static function isSingleByteEncoding($encoding)
-    {
-        return in_array(strtoupper($encoding), static::$singleByteEncodings);
-    }
-
-    /**
-     * Check if a given string is valid UTF-8 encoded
-     *
-     * @param string $str
-     * @return bool
-     */
-    public static function isValidUtf8($str)
-    {
-        return is_string($str) && ($str === '' || preg_match('/^./su', $str) == 1);
-    }
-
-    /**
-     * Is PCRE compiled with Unicode support?
-     *
-     * @return bool
-     */
-    public static function hasPcreUnicodeSupport()
-    {
-        if (static::$hasPcreUnicodeSupport === null) {
-            ErrorHandler::start();
-            static::$hasPcreUnicodeSupport = defined('PREG_BAD_UTF8_OFFSET_ERROR') && preg_match('/\pL/u', 'a') == 1;
-            ErrorHandler::stop();
-        }
-        return static::$hasPcreUnicodeSupport;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/StringWrapper/AbstractStringWrapper.php b/core/vendor/zendframework/zend-stdlib/StringWrapper/AbstractStringWrapper.php
deleted file mode 100644
index 3e395ccc5ae6784175ded8f07f5bd6f16e654ae7..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/StringWrapper/AbstractStringWrapper.php
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\StringUtils;
-
-abstract class AbstractStringWrapper implements StringWrapperInterface
-{
-    /**
-     * The character encoding working on
-     * @var string|null
-     */
-    protected $encoding = 'UTF-8';
-
-    /**
-     * An optionally character encoding to convert to
-     * @var string|null
-     */
-    protected $convertEncoding;
-
-    /**
-     * Check if the given character encoding is supported by this wrapper
-     * and the character encoding to convert to is also supported.
-     *
-     * @param  string      $encoding
-     * @param  string|null $convertEncoding
-     * @return bool
-     */
-    public static function isSupported($encoding, $convertEncoding = null)
-    {
-        $supportedEncodings = static::getSupportedEncodings();
-
-        if (!in_array(strtoupper($encoding), $supportedEncodings)) {
-            return false;
-        }
-
-        if ($convertEncoding !== null && !in_array(strtoupper($convertEncoding), $supportedEncodings)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Set character encoding working with and convert to
-     *
-     * @param string      $encoding         The character encoding to work with
-     * @param string|null $convertEncoding  The character encoding to convert to
-     * @return StringWrapperInterface
-     */
-    public function setEncoding($encoding, $convertEncoding = null)
-    {
-        $supportedEncodings = static::getSupportedEncodings();
-
-        $encodingUpper = strtoupper($encoding);
-        if (!in_array($encodingUpper, $supportedEncodings)) {
-            throw new Exception\InvalidArgumentException(
-                'Wrapper doesn\'t support character encoding "' . $encoding . '"'
-            );
-        }
-
-        if ($convertEncoding !== null) {
-            $convertEncodingUpper = strtoupper($convertEncoding);
-            if (!in_array($convertEncodingUpper, $supportedEncodings)) {
-                throw new Exception\InvalidArgumentException(
-                    'Wrapper doesn\'t support character encoding "' . $convertEncoding . '"'
-                );
-            }
-
-            $this->convertEncoding = $convertEncodingUpper;
-        } else {
-            $this->convertEncoding = null;
-        }
-        $this->encoding = $encodingUpper;
-
-        return $this;
-    }
-
-    /**
-     * Get the defined character encoding to work with
-     *
-     * @return string
-     * @throws Exception\LogicException If no encoding was defined
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Get the defined character encoding to convert to
-     *
-     * @return string|null
-    */
-    public function getConvertEncoding()
-    {
-        return $this->convertEncoding;
-    }
-
-    /**
-     * Convert a string from defined character encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false)
-    {
-        $encoding        = $this->getEncoding();
-        $convertEncoding = $this->getConvertEncoding();
-        if ($convertEncoding === null) {
-            throw new Exception\LogicException(
-                'No convert encoding defined'
-            );
-        }
-
-        if ($encoding === $convertEncoding) {
-            return $str;
-        }
-
-        $from = $reverse ? $convertEncoding : $encoding;
-        $to   = $reverse ? $encoding : $convertEncoding;
-        throw new Exception\RuntimeException(sprintf(
-            'Converting from "%s" to "%s" isn\'t supported by this string wrapper',
-            $from,
-            $to
-        ));
-    }
-
-    /**
-     * Wraps a string to a given number of characters
-     *
-     * @param  string  $string
-     * @param  int $width
-     * @param  string  $break
-     * @param  bool $cut
-     * @return string|false
-     */
-    public function wordWrap($string, $width = 75, $break = "\n", $cut = false)
-    {
-        $string = (string) $string;
-        if ($string === '') {
-            return '';
-        }
-
-        $break = (string) $break;
-        if ($break === '') {
-            throw new Exception\InvalidArgumentException('Break string cannot be empty');
-        }
-
-        $width = (int) $width;
-        if ($width === 0 && $cut) {
-            throw new Exception\InvalidArgumentException('Cannot force cut when width is zero');
-        }
-
-        if (StringUtils::isSingleByteEncoding($this->getEncoding())) {
-            return wordwrap($string, $width, $break, $cut);
-        }
-
-        $stringWidth = $this->strlen($string);
-        $breakWidth  = $this->strlen($break);
-
-        $result    = '';
-        $lastStart = $lastSpace = 0;
-
-        for ($current = 0; $current < $stringWidth; $current++) {
-            $char = $this->substr($string, $current, 1);
-
-            $possibleBreak = $char;
-            if ($breakWidth !== 1) {
-                $possibleBreak = $this->substr($string, $current, $breakWidth);
-            }
-
-            if ($possibleBreak === $break) {
-                $result    .= $this->substr($string, $lastStart, $current - $lastStart + $breakWidth);
-                $current   += $breakWidth - 1;
-                $lastStart  = $lastSpace = $current + 1;
-                continue;
-            }
-
-            if ($char === ' ') {
-                if ($current - $lastStart >= $width) {
-                    $result    .= $this->substr($string, $lastStart, $current - $lastStart) . $break;
-                    $lastStart  = $current + 1;
-                }
-
-                $lastSpace = $current;
-                continue;
-            }
-
-            if ($current - $lastStart >= $width && $cut && $lastStart >= $lastSpace) {
-                $result    .= $this->substr($string, $lastStart, $current - $lastStart) . $break;
-                $lastStart  = $lastSpace = $current;
-                continue;
-            }
-
-            if ($current - $lastStart >= $width && $lastStart < $lastSpace) {
-                $result    .= $this->substr($string, $lastStart, $lastSpace - $lastStart) . $break;
-                $lastStart  = $lastSpace = $lastSpace + 1;
-                continue;
-            }
-        }
-
-        if ($lastStart !== $current) {
-            $result .= $this->substr($string, $lastStart, $current - $lastStart);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Pad a string to a certain length with another string
-     *
-     * @param  string  $input
-     * @param  int $padLength
-     * @param  string  $padString
-     * @param  int $padType
-     * @return string
-     */
-    public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT)
-    {
-        if (StringUtils::isSingleByteEncoding($this->getEncoding())) {
-            return str_pad($input, $padLength, $padString, $padType);
-        }
-
-        $lengthOfPadding = $padLength - $this->strlen($input);
-        if ($lengthOfPadding <= 0) {
-            return $input;
-        }
-
-        $padStringLength = $this->strlen($padString);
-        if ($padStringLength === 0) {
-            return $input;
-        }
-
-        $repeatCount = floor($lengthOfPadding / $padStringLength);
-
-        if ($padType === STR_PAD_BOTH) {
-            $repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2;
-
-            $lastStringLength       = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength;
-            $lastStringLeftLength   = $lastStringRightLength = floor($lastStringLength / 2);
-            $lastStringRightLength += $lastStringLength % 2;
-
-            $lastStringLeft  = $this->substr($padString, 0, $lastStringLeftLength);
-            $lastStringRight = $this->substr($padString, 0, $lastStringRightLength);
-
-            return str_repeat($padString, $repeatCountLeft) . $lastStringLeft
-                . $input
-                . str_repeat($padString, $repeatCountRight) . $lastStringRight;
-        }
-
-        $lastString = $this->substr($padString, 0, $lengthOfPadding % $padStringLength);
-
-        if ($padType === STR_PAD_LEFT) {
-            return str_repeat($padString, $repeatCount) . $lastString . $input;
-        }
-
-        return $input . str_repeat($padString, $repeatCount) . $lastString;
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/StringWrapper/Iconv.php b/core/vendor/zendframework/zend-stdlib/StringWrapper/Iconv.php
deleted file mode 100644
index 04930ff453d06fd79dbf9ad4d696b17d97af4863..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/StringWrapper/Iconv.php
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-
-class Iconv extends AbstractStringWrapper
-{
-    /**
-     * List of supported character sets (upper case)
-     *
-     * @var string[]
-     * @link http://www.gnu.org/software/libiconv/
-     */
-    protected static $encodings = array(
-        // European languages
-        'ASCII',
-        'ISO-8859-1',
-        'ISO-8859-2',
-        'ISO-8859-3',
-        'ISO-8859-4',
-        'ISO-8859-5',
-        'ISO-8859-7',
-        'ISO-8859-9',
-        'ISO-8859-10',
-        'ISO-8859-13',
-        'ISO-8859-14',
-        'ISO-8859-15',
-        'ISO-8859-16',
-        'KOI8-R',
-        'KOI8-U',
-        'KOI8-RU',
-        'CP1250',
-        'CP1251',
-        'CP1252',
-        'CP1253',
-        'CP1254',
-        'CP1257',
-        'CP850',
-        'CP866',
-        'CP1131',
-        'MACROMAN',
-        'MACCENTRALEUROPE',
-        'MACICELAND',
-        'MACCROATIAN',
-        'MACROMANIA',
-        'MACCYRILLIC',
-        'MACUKRAINE',
-        'MACGREEK',
-        'MACTURKISH',
-        'MACINTOSH',
-
-        // Semitic languages
-        'ISO-8859-6',
-        'ISO-8859-8',
-        'CP1255',
-        'CP1256',
-        'CP862',
-        'MACHEBREW',
-        'MACARABIC',
-
-        // Japanese
-        'EUC-JP',
-        'SHIFT_JIS',
-        'CP932',
-        'ISO-2022-JP',
-        'ISO-2022-JP-2',
-        'ISO-2022-JP-1',
-
-        // Chinese
-        'EUC-CN',
-        'HZ',
-        'GBK',
-        'CP936',
-        'GB18030',
-        'EUC-TW',
-        'BIG5',
-        'CP950',
-        'BIG5-HKSCS',
-        'BIG5-HKSCS:2004',
-        'BIG5-HKSCS:2001',
-        'BIG5-HKSCS:1999',
-        'ISO-2022-CN',
-        'ISO-2022-CN-EXT',
-
-        // Korean
-        'EUC-KR',
-        'CP949',
-        'ISO-2022-KR',
-        'JOHAB',
-
-        // Armenian
-        'ARMSCII-8',
-
-        // Georgian
-        'GEORGIAN-ACADEMY',
-        'GEORGIAN-PS',
-
-        // Tajik
-        'KOI8-T',
-
-        // Kazakh
-        'PT154',
-        'RK1048',
-
-        // Thai
-        'ISO-8859-11',
-        'TIS-620',
-        'CP874',
-        'MACTHAI',
-
-        // Laotian
-        'MULELAO-1',
-        'CP1133',
-
-        // Vietnamese
-        'VISCII',
-        'TCVN',
-        'CP1258',
-
-        // Platform specifics
-        'HP-ROMAN8',
-        'NEXTSTEP',
-
-        // Full Unicode
-        'UTF-8',
-        'UCS-2',
-        'UCS-2BE',
-        'UCS-2LE',
-        'UCS-4',
-        'UCS-4BE',
-        'UCS-4LE',
-        'UTF-16',
-        'UTF-16BE',
-        'UTF-16LE',
-        'UTF-32',
-        'UTF-32BE',
-        'UTF-32LE',
-        'UTF-7',
-        'C99',
-        'JAVA',
-
-        /* Commented out because that's internal encodings not existing in real world
-        // Full Unicode, in terms of uint16_t or uint32_t (with machine dependent endianness and alignment)
-        'UCS-2-INTERNAL',
-        'UCS-4-INTERNAL',
-
-        // Locale dependent, in terms of `char' or `wchar_t' (with machine dependent endianness and alignment,
-        // and with OS and locale dependent semantics)
-        'char',
-        'wchar_t',
-        '', // The empty encoding name is equivalent to "char": it denotes the locale dependent character encoding.
-        */
-
-        // When configured with the option --enable-extra-encodings,
-        // it also provides support for a few extra encodings:
-
-        // European languages
-        'CP437',
-        'CP737',
-        'CP775',
-        'CP852',
-        'CP853',
-        'CP855',
-        'CP857',
-        'CP858',
-        'CP860',
-        'CP861',
-        'CP863',
-        'CP865',
-        'CP869',
-        'CP1125',
-
-        // Semitic languages
-        'CP864',
-
-        // Japanese
-        'EUC-JISX0213',
-        'Shift_JISX0213',
-        'ISO-2022-JP-3',
-
-        // Chinese
-        'BIG5-2003', // (experimental)
-
-        // Turkmen
-        'TDS565',
-
-        // Platform specifics
-        'ATARIST',
-        'RISCOS-LATIN1',
-    );
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        return static::$encodings;
-    }
-
-    /**
-     * Constructor
-     *
-     * @throws Exception\ExtensionNotLoadedException
-     */
-    public function __construct()
-    {
-        if (!extension_loaded('iconv')) {
-            throw new Exception\ExtensionNotLoadedException(
-                'PHP extension "iconv" is required for this wrapper'
-            );
-        }
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return iconv_strlen($str, $this->getEncoding());
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        return iconv_substr($str, $offset, $length, $this->getEncoding());
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return iconv_strpos($haystack, $needle, $offset, $this->getEncoding());
-    }
-
-    /**
-     * Convert a string from defined encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false)
-    {
-        $encoding        = $this->getEncoding();
-        $convertEncoding = $this->getConvertEncoding();
-        if ($convertEncoding === null) {
-            throw new Exception\LogicException(
-                'No convert encoding defined'
-            );
-        }
-
-        if ($encoding === $convertEncoding) {
-            return $str;
-        }
-
-        $fromEncoding = $reverse ? $convertEncoding : $encoding;
-        $toEncoding   = $reverse ? $encoding : $convertEncoding;
-
-        // automatically add "//IGNORE" to not stop converting on invalid characters
-        // invalid characters triggers a notice anyway
-        return iconv($fromEncoding, $toEncoding . '//IGNORE', $str);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/StringWrapper/Intl.php b/core/vendor/zendframework/zend-stdlib/StringWrapper/Intl.php
deleted file mode 100644
index 1b01277367832995f8c3aecd290f31d16cc9f73c..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/StringWrapper/Intl.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-
-class Intl extends AbstractStringWrapper
-{
-    /**
-     * List of supported character sets (upper case)
-     *
-     * @var string[]
-     */
-    protected static $encodings = array('UTF-8');
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        return static::$encodings;
-    }
-
-    /**
-     * Constructor
-     *
-     * @throws Exception\ExtensionNotLoadedException
-     */
-    public function __construct()
-    {
-        if (!extension_loaded('intl')) {
-            throw new Exception\ExtensionNotLoadedException(
-                'PHP extension "intl" is required for this wrapper'
-            );
-        }
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return grapheme_strlen($str);
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        // Due fix of PHP #62759 The third argument returns an empty string if is 0 or null.
-        if ($length !== null) {
-            return grapheme_substr($str, $offset, $length);
-        }
-
-        return grapheme_substr($str, $offset);
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return grapheme_strpos($haystack, $needle, $offset);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/StringWrapper/MbString.php b/core/vendor/zendframework/zend-stdlib/StringWrapper/MbString.php
deleted file mode 100644
index d6db18566d247dbbcab313b09ecd14902919c220..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/StringWrapper/MbString.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-
-class MbString extends AbstractStringWrapper
-{
-    /**
-     * List of supported character sets (upper case)
-     *
-     * @var null|string[]
-     * @link http://php.net/manual/mbstring.supported-encodings.php
-     */
-    protected static $encodings = null;
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        if (static::$encodings === null) {
-            static::$encodings = array_map('strtoupper', mb_list_encodings());
-
-            // FIXME: Converting â‚¬ (UTF-8) to ISO-8859-16 gives a wrong result
-            $indexIso885916 = array_search('ISO-8859-16', static::$encodings, true);
-            if ($indexIso885916 !== false) {
-                unset(static::$encodings[$indexIso885916]);
-            }
-        }
-
-        return static::$encodings;
-    }
-
-    /**
-     * Constructor
-     *
-     * @throws Exception\ExtensionNotLoadedException
-     */
-    public function __construct()
-    {
-        if (!extension_loaded('mbstring')) {
-            throw new Exception\ExtensionNotLoadedException(
-                'PHP extension "mbstring" is required for this wrapper'
-            );
-        }
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return mb_strlen($str, $this->getEncoding());
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        return mb_substr($str, $offset, $length, $this->getEncoding());
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return mb_strpos($haystack, $needle, $offset, $this->getEncoding());
-    }
-
-    /**
-     * Convert a string from defined encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false)
-    {
-        $encoding        = $this->getEncoding();
-        $convertEncoding = $this->getConvertEncoding();
-
-        if ($convertEncoding === null) {
-            throw new Exception\LogicException(
-                'No convert encoding defined'
-            );
-        }
-
-        if ($encoding === $convertEncoding) {
-            return $str;
-        }
-
-        $fromEncoding = $reverse ? $convertEncoding : $encoding;
-        $toEncoding   = $reverse ? $encoding : $convertEncoding;
-        return mb_convert_encoding($str, $toEncoding, $fromEncoding);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/StringWrapper/Native.php b/core/vendor/zendframework/zend-stdlib/StringWrapper/Native.php
deleted file mode 100644
index 38b3c10a41c515f0358a32cd712677be54311f80..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/StringWrapper/Native.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\StringUtils;
-
-class Native extends AbstractStringWrapper
-{
-    /**
-     * The character encoding working on
-     * (overwritten to change defaut encoding)
-     *
-     * @var string
-     */
-    protected $encoding = 'ASCII';
-
-    /**
-     * Check if the given character encoding is supported by this wrapper
-     * and the character encoding to convert to is also supported.
-     *
-     * @param  string      $encoding
-     * @param  string|null $convertEncoding
-     * @return bool
-     */
-    public static function isSupported($encoding, $convertEncoding = null)
-    {
-        $encodingUpper      = strtoupper($encoding);
-        $supportedEncodings = static::getSupportedEncodings();
-
-        if (!in_array($encodingUpper, $supportedEncodings)) {
-            return false;
-        }
-
-        // This adapter doesn't support to convert between encodings
-        if ($convertEncoding !== null && $encodingUpper !== strtoupper($convertEncoding)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        return StringUtils::getSingleByteEncodings();
-    }
-
-    /**
-     * Set character encoding working with and convert to
-     *
-     * @param string      $encoding         The character encoding to work with
-     * @param string|null $convertEncoding  The character encoding to convert to
-     * @return StringWrapperInterface
-     */
-    public function setEncoding($encoding, $convertEncoding = null)
-    {
-        $supportedEncodings = static::getSupportedEncodings();
-
-        $encodingUpper = strtoupper($encoding);
-        if (!in_array($encodingUpper, $supportedEncodings)) {
-            throw new Exception\InvalidArgumentException(
-                'Wrapper doesn\'t support character encoding "' . $encoding . '"'
-            );
-        }
-
-        if ($encodingUpper !== strtoupper($convertEncoding)) {
-            $this->convertEncoding = $encodingUpper;
-        }
-
-        if ($convertEncoding !== null) {
-            if ($encodingUpper !== strtoupper($convertEncoding)) {
-                throw new Exception\InvalidArgumentException(
-                    'Wrapper doesn\'t support to convert between character encodings'
-                );
-            }
-
-            $this->convertEncoding = $encodingUpper;
-        } else {
-            $this->convertEncoding = null;
-        }
-        $this->encoding = $encodingUpper;
-
-        return $this;
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return strlen($str);
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        return substr($str, $offset, $length);
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return strpos($haystack, $needle, $offset);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/StringWrapper/StringWrapperInterface.php b/core/vendor/zendframework/zend-stdlib/StringWrapper/StringWrapperInterface.php
deleted file mode 100644
index f25b3253fc3fd535435103e33338436a73195c24..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/StringWrapper/StringWrapperInterface.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-interface StringWrapperInterface
-{
-    /**
-     * Check if the given character encoding is supported by this wrapper
-     * and the character encoding to convert to is also supported.
-     *
-     * @param string      $encoding
-     * @param string|null $convertEncoding
-     */
-    public static function isSupported($encoding, $convertEncoding = null);
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings();
-
-    /**
-     * Set character encoding working with and convert to
-     *
-     * @param string      $encoding         The character encoding to work with
-     * @param string|null $convertEncoding  The character encoding to convert to
-     * @return StringWrapperInterface
-     */
-    public function setEncoding($encoding, $convertEncoding = null);
-
-    /**
-     * Get the defined character encoding to work with (upper case)
-     *
-     * @return string
-     */
-    public function getEncoding();
-
-    /**
-     * Get the defined character encoding to convert to (upper case)
-     *
-     * @return string|null
-     */
-    public function getConvertEncoding();
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str);
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null);
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0);
-
-    /**
-     * Convert a string from defined encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false);
-
-    /**
-     * Wraps a string to a given number of characters
-     *
-     * @param  string  $str
-     * @param  int $width
-     * @param  string  $break
-     * @param  bool $cut
-     * @return string
-     */
-    public function wordWrap($str, $width = 75, $break = "\n", $cut = false);
-
-    /**
-     * Pad a string to a certain length with another string
-     *
-     * @param  string  $input
-     * @param  int $padLength
-     * @param  string  $padString
-     * @param  int $padType
-     * @return string
-     */
-    public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT);
-}
diff --git a/core/vendor/zendframework/zend-stdlib/compatibility/autoload.php b/core/vendor/zendframework/zend-stdlib/compatibility/autoload.php
deleted file mode 100644
index f8670cc16b6c352d38369449e6a83f835312da92..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/compatibility/autoload.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @deprecated
- */
-
-/**
- * Legacy purposes only, to prevent code that references it from breaking.
- */
-trigger_error('Polyfill autoload support (file library/Zend/Stdlib/compatibility/autoload.php) is no longer necessary; please remove your require statement referencing this file', E_USER_DEPRECATED);
diff --git a/core/vendor/zendframework/zend-stdlib/composer.json b/core/vendor/zendframework/zend-stdlib/composer.json
index dfe178bf9a33c4ab4cf58584eb3d75f6dbb8f161..45e3b05afb2e54e75e3ad2f9eb1a6353411b2469 100644
--- a/core/vendor/zendframework/zend-stdlib/composer.json
+++ b/core/vendor/zendframework/zend-stdlib/composer.json
@@ -6,10 +6,10 @@
         "zf2",
         "stdlib"
     ],
-    "homepage": "https://github.com/zendframework/zf2",
+    "homepage": "https://github.com/zendframework/zend-stdlib",
     "autoload": {
         "psr-4": {
-            "Zend\\Stdlib\\": ""
+            "Zend\\Stdlib\\": "src/"
         }
     },
     "require": {
@@ -19,7 +19,10 @@
         "zendframework/zend-eventmanager": "self.version",
         "zendframework/zend-serializer": "self.version",
         "zendframework/zend-servicemanager": "self.version",
-        "zendframework/zend-filter": "self.version"
+        "zendframework/zend-filter": "self.version",
+        "fabpot/php-cs-fixer": "1.7.*",
+        "satooshi/php-coveralls": "dev-master",
+        "phpunit/PHPUnit": "~4.0"
     },
     "suggest": {
         "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
@@ -32,5 +35,10 @@
             "dev-master": "2.3-dev",
             "dev-develop": "2.4-dev"
         }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "ZendTest\\Stdlib\\": "test/"
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/core/vendor/zendframework/zend-stdlib/phpunit.xml.dist b/core/vendor/zendframework/zend-stdlib/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..2d77d4b7826e3156e48169b2926b50151667dab6
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/phpunit.xml.dist
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
+         bootstrap="./test/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite name="zend-stdlib Test Suite">
+            <directory>./test/</directory>
+        </testsuite>
+    </testsuites>
+
+    <groups>
+        <exclude>
+            <group>disable</group>
+        </exclude>
+    </groups>
+
+    <filter>
+        <whitelist addUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+
+    <php>
+        <ini name="date.timezone" value="UTC"/>
+
+        <!-- OB_ENABLED should be enabled for some tests to check if all
+             functionality works as expected. Such tests include those for
+             Zend\Soap and Zend\Session, which require that headers not be sent
+             in order to work. -->
+        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
+
+    </php>
+</phpunit>
diff --git a/core/vendor/zendframework/zend-stdlib/phpunit.xml.travis b/core/vendor/zendframework/zend-stdlib/phpunit.xml.travis
new file mode 100644
index 0000000000000000000000000000000000000000..2d77d4b7826e3156e48169b2926b50151667dab6
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/phpunit.xml.travis
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
+         bootstrap="./test/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite name="zend-stdlib Test Suite">
+            <directory>./test/</directory>
+        </testsuite>
+    </testsuites>
+
+    <groups>
+        <exclude>
+            <group>disable</group>
+        </exclude>
+    </groups>
+
+    <filter>
+        <whitelist addUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+
+    <php>
+        <ini name="date.timezone" value="UTC"/>
+
+        <!-- OB_ENABLED should be enabled for some tests to check if all
+             functionality works as expected. Such tests include those for
+             Zend\Soap and Zend\Session, which require that headers not be sent
+             in order to work. -->
+        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
+
+    </php>
+</phpunit>
diff --git a/core/vendor/zendframework/zend-stdlib/src/AbstractOptions.php b/core/vendor/zendframework/zend-stdlib/src/AbstractOptions.php
new file mode 100644
index 0000000000000000000000000000000000000000..aaa1dd299509fe5e102bcb4e9e6e0da61172766d
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/AbstractOptions.php
@@ -0,0 +1,176 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Traversable;
+
+abstract class AbstractOptions implements ParameterObjectInterface
+{
+    /**
+     * We use the __ prefix to avoid collisions with properties in
+     * user-implementations.
+     *
+     * @var bool
+     */
+    protected $__strictMode__ = true;
+
+    /**
+     * Constructor
+     *
+     * @param  array|Traversable|null $options
+     */
+    public function __construct($options = null)
+    {
+        if (null !== $options) {
+            $this->setFromArray($options);
+        }
+    }
+
+    /**
+     * Set one or more configuration properties
+     *
+     * @param  array|Traversable|AbstractOptions $options
+     * @throws Exception\InvalidArgumentException
+     * @return AbstractOptions Provides fluent interface
+     */
+    public function setFromArray($options)
+    {
+        if ($options instanceof self) {
+            $options = $options->toArray();
+        }
+
+        if (!is_array($options) && !$options instanceof Traversable) {
+            throw new Exception\InvalidArgumentException(
+                sprintf(
+                    'Parameter provided to %s must be an %s, %s or %s',
+                    __METHOD__,
+                    'array',
+                    'Traversable',
+                    'Zend\Stdlib\AbstractOptions'
+                )
+            );
+        }
+
+        foreach ($options as $key => $value) {
+            $this->__set($key, $value);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Cast to array
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        $array = array();
+        $transform = function ($letters) {
+            $letter = array_shift($letters);
+            return '_' . strtolower($letter);
+        };
+        foreach ($this as $key => $value) {
+            if ($key === '__strictMode__') {
+                continue;
+            }
+            $normalizedKey = preg_replace_callback('/([A-Z])/', $transform, $key);
+            $array[$normalizedKey] = $value;
+        }
+        return $array;
+    }
+
+    /**
+     * Set a configuration property
+     *
+     * @see ParameterObject::__set()
+     * @param string $key
+     * @param mixed $value
+     * @throws Exception\BadMethodCallException
+     * @return void
+     */
+    public function __set($key, $value)
+    {
+        $setter = 'set' . str_replace('_', '', $key);
+
+        if (is_callable(array($this, $setter))) {
+            $this->{$setter}($value);
+
+            return;
+        }
+
+        if ($this->__strictMode__) {
+            throw new Exception\BadMethodCallException(sprintf(
+                'The option "%s" does not have a callable "%s" ("%s") setter method which must be defined',
+                $key,
+                'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key))),
+                $setter
+            ));
+        }
+    }
+
+    /**
+     * Get a configuration property
+     *
+     * @see ParameterObject::__get()
+     * @param string $key
+     * @throws Exception\BadMethodCallException
+     * @return mixed
+     */
+    public function __get($key)
+    {
+        $getter = 'get' . str_replace('_', '', $key);
+
+        if (is_callable(array($this, $getter))) {
+            return $this->{$getter}();
+        }
+
+        throw new Exception\BadMethodCallException(sprintf(
+            'The option "%s" does not have a callable "%s" getter method which must be defined',
+            $key,
+            'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key)))
+        ));
+    }
+
+    /**
+     * Test if a configuration property is null
+     * @see ParameterObject::__isset()
+     * @param string $key
+     * @return bool
+     */
+    public function __isset($key)
+    {
+        $getter = 'get' . str_replace('_', '', $key);
+
+        return method_exists($this, $getter) && null !== $this->__get($key);
+    }
+
+    /**
+     * Set a configuration property to NULL
+     *
+     * @see ParameterObject::__unset()
+     * @param string $key
+     * @throws Exception\InvalidArgumentException
+     * @return void
+     */
+    public function __unset($key)
+    {
+        try {
+            $this->__set($key, null);
+        } catch (Exception\BadMethodCallException $e) {
+            throw new Exception\InvalidArgumentException(
+                'The class property $' . $key . ' cannot be unset as'
+                . ' NULL is an invalid value for it',
+                0,
+                $e
+            );
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ArrayObject.php b/core/vendor/zendframework/zend-stdlib/src/ArrayObject.php
new file mode 100644
index 0000000000000000000000000000000000000000..44145c8554ebe04a1fb6b19004f7a1084854f245
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ArrayObject.php
@@ -0,0 +1,432 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use ArrayAccess;
+use Countable;
+use IteratorAggregate;
+use Serializable;
+
+/**
+ * Custom framework ArrayObject implementation
+ *
+ * Extends version-specific "abstract" implementation.
+ */
+class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
+{
+    /**
+     * Properties of the object have their normal functionality
+     * when accessed as list (var_dump, foreach, etc.).
+     */
+    const STD_PROP_LIST = 1;
+
+    /**
+     * Entries can be accessed as properties (read and write).
+     */
+    const ARRAY_AS_PROPS = 2;
+
+    /**
+     * @var array
+     */
+    protected $storage;
+
+    /**
+     * @var int
+     */
+    protected $flag;
+
+    /**
+     * @var string
+     */
+    protected $iteratorClass;
+
+    /**
+     * @var array
+     */
+    protected $protectedProperties;
+
+    /**
+     * Constructor
+     *
+     * @param array  $input
+     * @param int    $flags
+     * @param string $iteratorClass
+     */
+    public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
+    {
+        $this->setFlags($flags);
+        $this->storage = $input;
+        $this->setIteratorClass($iteratorClass);
+        $this->protectedProperties = array_keys(get_object_vars($this));
+    }
+
+    /**
+     * Returns whether the requested key exists
+     *
+     * @param  mixed $key
+     * @return bool
+     */
+    public function __isset($key)
+    {
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            return $this->offsetExists($key);
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+
+        return isset($this->$key);
+    }
+
+    /**
+     * Sets the value at the specified key to value
+     *
+     * @param  mixed $key
+     * @param  mixed $value
+     * @return void
+     */
+    public function __set($key, $value)
+    {
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            return $this->offsetSet($key, $value);
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+        $this->$key = $value;
+    }
+
+    /**
+     * Unsets the value at the specified key
+     *
+     * @param  mixed $key
+     * @return void
+     */
+    public function __unset($key)
+    {
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            return $this->offsetUnset($key);
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+        unset($this->$key);
+    }
+
+    /**
+     * Returns the value at the specified key by reference
+     *
+     * @param  mixed $key
+     * @return mixed
+     */
+    public function &__get($key)
+    {
+        $ret = null;
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            $ret =& $this->offsetGet($key);
+
+            return $ret;
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+
+        return $this->$key;
+    }
+
+    /**
+     * Appends the value
+     *
+     * @param  mixed $value
+     * @return void
+     */
+    public function append($value)
+    {
+        $this->storage[] = $value;
+    }
+
+    /**
+     * Sort the entries by value
+     *
+     * @return void
+     */
+    public function asort()
+    {
+        asort($this->storage);
+    }
+
+    /**
+     * Get the number of public properties in the ArrayObject
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->storage);
+    }
+
+    /**
+     * Exchange the array for another one.
+     *
+     * @param  array|ArrayObject $data
+     * @return array
+     */
+    public function exchangeArray($data)
+    {
+        if (!is_array($data) && !is_object($data)) {
+            throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
+        }
+
+        if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) {
+            $data = $data->getArrayCopy();
+        }
+        if (!is_array($data)) {
+            $data = (array) $data;
+        }
+
+        $storage = $this->storage;
+
+        $this->storage = $data;
+
+        return $storage;
+    }
+
+    /**
+     * Creates a copy of the ArrayObject.
+     *
+     * @return array
+     */
+    public function getArrayCopy()
+    {
+        return $this->storage;
+    }
+
+    /**
+     * Gets the behavior flags.
+     *
+     * @return int
+     */
+    public function getFlags()
+    {
+        return $this->flag;
+    }
+
+    /**
+     * Create a new iterator from an ArrayObject instance
+     *
+     * @return \Iterator
+     */
+    public function getIterator()
+    {
+        $class = $this->iteratorClass;
+
+        return new $class($this->storage);
+    }
+
+    /**
+     * Gets the iterator classname for the ArrayObject.
+     *
+     * @return string
+     */
+    public function getIteratorClass()
+    {
+        return $this->iteratorClass;
+    }
+
+    /**
+     * Sort the entries by key
+     *
+     * @return void
+     */
+    public function ksort()
+    {
+        ksort($this->storage);
+    }
+
+    /**
+     * Sort an array using a case insensitive "natural order" algorithm
+     *
+     * @return void
+     */
+    public function natcasesort()
+    {
+        natcasesort($this->storage);
+    }
+
+    /**
+     * Sort entries using a "natural order" algorithm
+     *
+     * @return void
+     */
+    public function natsort()
+    {
+        natsort($this->storage);
+    }
+
+    /**
+     * Returns whether the requested key exists
+     *
+     * @param  mixed $key
+     * @return bool
+     */
+    public function offsetExists($key)
+    {
+        return isset($this->storage[$key]);
+    }
+
+    /**
+     * Returns the value at the specified key
+     *
+     * @param  mixed $key
+     * @return mixed
+     */
+    public function &offsetGet($key)
+    {
+        $ret = null;
+        if (!$this->offsetExists($key)) {
+            return $ret;
+        }
+        $ret =& $this->storage[$key];
+
+        return $ret;
+    }
+
+    /**
+     * Sets the value at the specified key to value
+     *
+     * @param  mixed $key
+     * @param  mixed $value
+     * @return void
+     */
+    public function offsetSet($key, $value)
+    {
+        $this->storage[$key] = $value;
+    }
+
+    /**
+     * Unsets the value at the specified key
+     *
+     * @param  mixed $key
+     * @return void
+     */
+    public function offsetUnset($key)
+    {
+        if ($this->offsetExists($key)) {
+            unset($this->storage[$key]);
+        }
+    }
+
+    /**
+     * Serialize an ArrayObject
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        return serialize(get_object_vars($this));
+    }
+
+    /**
+     * Sets the behavior flags
+     *
+     * @param  int  $flags
+     * @return void
+     */
+    public function setFlags($flags)
+    {
+        $this->flag = $flags;
+    }
+
+    /**
+     * Sets the iterator classname for the ArrayObject
+     *
+     * @param  string $class
+     * @return void
+     */
+    public function setIteratorClass($class)
+    {
+        if (class_exists($class)) {
+            $this->iteratorClass = $class;
+
+            return ;
+        }
+
+        if (strpos($class, '\\') === 0) {
+            $class = '\\' . $class;
+            if (class_exists($class)) {
+                $this->iteratorClass = $class;
+
+                return ;
+            }
+        }
+
+        throw new Exception\InvalidArgumentException('The iterator class does not exist');
+    }
+
+    /**
+     * Sort the entries with a user-defined comparison function and maintain key association
+     *
+     * @param  callable $function
+     * @return void
+     */
+    public function uasort($function)
+    {
+        if (is_callable($function)) {
+            uasort($this->storage, $function);
+        }
+    }
+
+    /**
+     * Sort the entries by keys using a user-defined comparison function
+     *
+     * @param  callable $function
+     * @return void
+     */
+    public function uksort($function)
+    {
+        if (is_callable($function)) {
+            uksort($this->storage, $function);
+        }
+    }
+
+    /**
+     * Unserialize an ArrayObject
+     *
+     * @param  string $data
+     * @return void
+     */
+    public function unserialize($data)
+    {
+        $ar                        = unserialize($data);
+        $this->protectedProperties = array_keys(get_object_vars($this));
+
+        $this->setFlags($ar['flag']);
+        $this->exchangeArray($ar['storage']);
+        $this->setIteratorClass($ar['iteratorClass']);
+
+        foreach ($ar as $k => $v) {
+            switch ($k) {
+                case 'flag':
+                    $this->setFlags($v);
+                    break;
+                case 'storage':
+                    $this->exchangeArray($v);
+                    break;
+                case 'iteratorClass':
+                    $this->setIteratorClass($v);
+                    break;
+                case 'protectedProperties':
+                    continue;
+                default:
+                    $this->__set($k, $v);
+            }
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php b/core/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..dcf84719521a1de77ac0c9130222d5e7c3ae424e
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+interface ArraySerializableInterface
+{
+    /**
+     * Exchange internal values from provided array
+     *
+     * @param  array $array
+     * @return void
+     */
+    public function exchangeArray(array $array);
+
+    /**
+     * Return an array representation of the object
+     *
+     * @return array
+     */
+    public function getArrayCopy();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ArrayStack.php b/core/vendor/zendframework/zend-stdlib/src/ArrayStack.php
new file mode 100644
index 0000000000000000000000000000000000000000..39d02aacac19c9654cc89fab28d7a8fca0de8f53
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ArrayStack.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use ArrayIterator;
+use ArrayObject as PhpArrayObject;
+
+/**
+ * ArrayObject that acts as a stack with regards to iteration
+ */
+class ArrayStack extends PhpArrayObject
+{
+    /**
+     * Retrieve iterator
+     *
+     * Retrieve an array copy of the object, reverse its order, and return an
+     * ArrayIterator with that reversed array.
+     *
+     * @return ArrayIterator
+     */
+    public function getIterator()
+    {
+        $array = $this->getArrayCopy();
+        return new ArrayIterator(array_reverse($array));
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ArrayUtils.php b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils.php
new file mode 100644
index 0000000000000000000000000000000000000000..3545054ed84832a1dbed8868de6cf0c90430fd7c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils.php
@@ -0,0 +1,335 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Traversable;
+use Zend\Stdlib\ArrayUtils\MergeRemoveKey;
+use Zend\Stdlib\ArrayUtils\MergeReplaceKeyInterface;
+
+/**
+ * Utility class for testing and manipulation of PHP arrays.
+ *
+ * Declared abstract, as we have no need for instantiation.
+ */
+abstract class ArrayUtils
+{
+    /**
+     * Compatibility Flag for ArrayUtils::filter
+     */
+    const ARRAY_FILTER_USE_BOTH = 1;
+
+    /**
+     * Compatibility Flag for ArrayUtils::filter
+     */
+    const ARRAY_FILTER_USE_KEY  = 2;
+
+    /**
+     * Test whether an array contains one or more string keys
+     *
+     * @param  mixed $value
+     * @param  bool  $allowEmpty    Should an empty array() return true
+     * @return bool
+     */
+    public static function hasStringKeys($value, $allowEmpty = false)
+    {
+        if (!is_array($value)) {
+            return false;
+        }
+
+        if (!$value) {
+            return $allowEmpty;
+        }
+
+        return count(array_filter(array_keys($value), 'is_string')) > 0;
+    }
+
+    /**
+     * Test whether an array contains one or more integer keys
+     *
+     * @param  mixed $value
+     * @param  bool  $allowEmpty    Should an empty array() return true
+     * @return bool
+     */
+    public static function hasIntegerKeys($value, $allowEmpty = false)
+    {
+        if (!is_array($value)) {
+            return false;
+        }
+
+        if (!$value) {
+            return $allowEmpty;
+        }
+
+        return count(array_filter(array_keys($value), 'is_int')) > 0;
+    }
+
+    /**
+     * Test whether an array contains one or more numeric keys.
+     *
+     * A numeric key can be one of the following:
+     * - an integer 1,
+     * - a string with a number '20'
+     * - a string with negative number: '-1000'
+     * - a float: 2.2120, -78.150999
+     * - a string with float:  '4000.99999', '-10.10'
+     *
+     * @param  mixed $value
+     * @param  bool  $allowEmpty    Should an empty array() return true
+     * @return bool
+     */
+    public static function hasNumericKeys($value, $allowEmpty = false)
+    {
+        if (!is_array($value)) {
+            return false;
+        }
+
+        if (!$value) {
+            return $allowEmpty;
+        }
+
+        return count(array_filter(array_keys($value), 'is_numeric')) > 0;
+    }
+
+    /**
+     * Test whether an array is a list
+     *
+     * A list is a collection of values assigned to continuous integer keys
+     * starting at 0 and ending at count() - 1.
+     *
+     * For example:
+     * <code>
+     * $list = array('a', 'b', 'c', 'd');
+     * $list = array(
+     *     0 => 'foo',
+     *     1 => 'bar',
+     *     2 => array('foo' => 'baz'),
+     * );
+     * </code>
+     *
+     * @param  mixed $value
+     * @param  bool  $allowEmpty    Is an empty list a valid list?
+     * @return bool
+     */
+    public static function isList($value, $allowEmpty = false)
+    {
+        if (!is_array($value)) {
+            return false;
+        }
+
+        if (!$value) {
+            return $allowEmpty;
+        }
+
+        return (array_values($value) === $value);
+    }
+
+    /**
+     * Test whether an array is a hash table.
+     *
+     * An array is a hash table if:
+     *
+     * 1. Contains one or more non-integer keys, or
+     * 2. Integer keys are non-continuous or misaligned (not starting with 0)
+     *
+     * For example:
+     * <code>
+     * $hash = array(
+     *     'foo' => 15,
+     *     'bar' => false,
+     * );
+     * $hash = array(
+     *     1995  => 'Birth of PHP',
+     *     2009  => 'PHP 5.3.0',
+     *     2012  => 'PHP 5.4.0',
+     * );
+     * $hash = array(
+     *     'formElement,
+     *     'options' => array( 'debug' => true ),
+     * );
+     * </code>
+     *
+     * @param  mixed $value
+     * @param  bool  $allowEmpty    Is an empty array() a valid hash table?
+     * @return bool
+     */
+    public static function isHashTable($value, $allowEmpty = false)
+    {
+        if (!is_array($value)) {
+            return false;
+        }
+
+        if (!$value) {
+            return $allowEmpty;
+        }
+
+        return (array_values($value) !== $value);
+    }
+
+    /**
+     * Checks if a value exists in an array.
+     *
+     * Due to "foo" == 0 === TRUE with in_array when strict = false, an option
+     * has been added to prevent this. When $strict = 0/false, the most secure
+     * non-strict check is implemented. if $strict = -1, the default in_array
+     * non-strict behaviour is used.
+     *
+     * @param mixed $needle
+     * @param array $haystack
+     * @param int|bool $strict
+     * @return bool
+     */
+    public static function inArray($needle, array $haystack, $strict = false)
+    {
+        if (!$strict) {
+            if (is_int($needle) || is_float($needle)) {
+                $needle = (string) $needle;
+            }
+            if (is_string($needle)) {
+                foreach ($haystack as &$h) {
+                    if (is_int($h) || is_float($h)) {
+                        $h = (string) $h;
+                    }
+                }
+            }
+        }
+        return in_array($needle, $haystack, $strict);
+    }
+
+    /**
+     * Convert an iterator to an array.
+     *
+     * Converts an iterator to an array. The $recursive flag, on by default,
+     * hints whether or not you want to do so recursively.
+     *
+     * @param  array|Traversable  $iterator     The array or Traversable object to convert
+     * @param  bool               $recursive    Recursively check all nested structures
+     * @throws Exception\InvalidArgumentException if $iterator is not an array or a Traversable object
+     * @return array
+     */
+    public static function iteratorToArray($iterator, $recursive = true)
+    {
+        if (!is_array($iterator) && !$iterator instanceof Traversable) {
+            throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable object');
+        }
+
+        if (!$recursive) {
+            if (is_array($iterator)) {
+                return $iterator;
+            }
+
+            return iterator_to_array($iterator);
+        }
+
+        if (method_exists($iterator, 'toArray')) {
+            return $iterator->toArray();
+        }
+
+        $array = array();
+        foreach ($iterator as $key => $value) {
+            if (is_scalar($value)) {
+                $array[$key] = $value;
+                continue;
+            }
+
+            if ($value instanceof Traversable) {
+                $array[$key] = static::iteratorToArray($value, $recursive);
+                continue;
+            }
+
+            if (is_array($value)) {
+                $array[$key] = static::iteratorToArray($value, $recursive);
+                continue;
+            }
+
+            $array[$key] = $value;
+        }
+
+        return $array;
+    }
+
+    /**
+     * Merge two arrays together.
+     *
+     * If an integer key exists in both arrays and preserveNumericKeys is false, the value
+     * from the second array will be appended to the first array. If both values are arrays, they
+     * are merged together, else the value of the second array overwrites the one of the first array.
+     *
+     * @param  array $a
+     * @param  array $b
+     * @param  bool  $preserveNumericKeys
+     * @return array
+     */
+    public static function merge(array $a, array $b, $preserveNumericKeys = false)
+    {
+        foreach ($b as $key => $value) {
+            if ($value instanceof MergeReplaceKeyInterface) {
+                $a[$key] = $value->getData();
+            } elseif (isset($a[$key]) || array_key_exists($key, $a)) {
+                if ($value instanceof MergeRemoveKey) {
+                    unset($a[$key]);
+                } elseif (!$preserveNumericKeys && is_int($key)) {
+                    $a[] = $value;
+                } elseif (is_array($value) && is_array($a[$key])) {
+                    $a[$key] = static::merge($a[$key], $value, $preserveNumericKeys);
+                } else {
+                    $a[$key] = $value;
+                }
+            } else {
+                if (!$value instanceof MergeRemoveKey) {
+                    $a[$key] = $value;
+                }
+            }
+        }
+
+        return $a;
+    }
+
+    /**
+     * Compatibility Method for array_filter on <5.6 systems
+     *
+     * @param array $data
+     * @param callable $callback
+     * @param null|int $flag
+     * @return array
+     */
+    public static function filter(array $data, $callback, $flag = null)
+    {
+        if (! is_callable($callback)) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                'Second parameter of %s must be callable',
+                __METHOD__
+            ));
+        }
+
+        if (version_compare(PHP_VERSION, '5.6.0') >= 0) {
+            return array_filter($data, $callback, $flag);
+        }
+
+        $output = array();
+        foreach ($data as $key => $value) {
+            $params = array($value);
+
+            if ($flag === static::ARRAY_FILTER_USE_BOTH) {
+                $params[] = $key;
+            }
+
+            if ($flag === static::ARRAY_FILTER_USE_KEY) {
+                $params = array($key);
+            }
+
+            $response = call_user_func_array($callback, $params);
+            if ($response) {
+                $output[$key] = $value;
+            }
+        }
+
+        return $output;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php
new file mode 100644
index 0000000000000000000000000000000000000000..7c4d097d92cb03c92c6ffa8567af543f87f43ddf
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\ArrayUtils;
+
+final class MergeRemoveKey
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php
new file mode 100644
index 0000000000000000000000000000000000000000..24c1df4d7a247736b6e67b9fecfd33fee344e84c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\ArrayUtils;
+
+final class MergeReplaceKey implements MergeReplaceKeyInterface
+{
+    /**
+     * @var mixed
+     */
+    protected $data;
+
+    /**
+     * @param mixed $data
+     */
+    public function __construct($data)
+    {
+        $this->data = $data;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getData()
+    {
+        return $this->data;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..725cf11bc7da9b1fcc9bed063b06be686514336c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\ArrayUtils;
+
+/**
+ * Marker interface: can be used to replace keys completely in {@see ArrayUtils::merge()} operations
+ */
+interface MergeReplaceKeyInterface
+{
+    /**
+     * @return mixed
+     */
+    public function getData();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/CallbackHandler.php b/core/vendor/zendframework/zend-stdlib/src/CallbackHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..158b0c7d64743972d73dfb12081c02c9bc536663
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/CallbackHandler.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use ReflectionClass;
+
+/**
+ * CallbackHandler
+ *
+ * A handler for an event, event, filterchain, etc. Abstracts PHP callbacks,
+ * primarily to allow for lazy-loading and ensuring availability of default
+ * arguments (currying).
+ */
+class CallbackHandler
+{
+    /**
+     * @var string|array|callable PHP callback to invoke
+     */
+    protected $callback;
+
+    /**
+     * Callback metadata, if any
+     * @var array
+     */
+    protected $metadata;
+
+    /**
+     * PHP version is greater as 5.4rc1?
+     * @var bool
+     */
+    protected static $isPhp54;
+
+    /**
+     * Constructor
+     *
+     * @param  string|array|object|callable $callback PHP callback
+     * @param  array                        $metadata  Callback metadata
+     */
+    public function __construct($callback, array $metadata = array())
+    {
+        $this->metadata  = $metadata;
+        $this->registerCallback($callback);
+    }
+
+    /**
+     * Registers the callback provided in the constructor
+     *
+     * @param  callable $callback
+     * @throws Exception\InvalidCallbackException
+     * @return void
+     */
+    protected function registerCallback($callback)
+    {
+        if (!is_callable($callback)) {
+            throw new Exception\InvalidCallbackException('Invalid callback provided; not callable');
+        }
+
+        $this->callback = $callback;
+    }
+
+    /**
+     * Retrieve registered callback
+     *
+     * @return callable
+     */
+    public function getCallback()
+    {
+        return $this->callback;
+    }
+
+    /**
+     * Invoke handler
+     *
+     * @param  array $args Arguments to pass to callback
+     * @return mixed
+     */
+    public function call(array $args = array())
+    {
+        $callback = $this->getCallback();
+
+        // Minor performance tweak, if the callback gets called more than once
+        if (!isset(static::$isPhp54)) {
+            static::$isPhp54 = version_compare(PHP_VERSION, '5.4.0rc1', '>=');
+        }
+
+        $argCount = count($args);
+
+        if (static::$isPhp54 && is_string($callback)) {
+            $result = $this->validateStringCallbackFor54($callback);
+
+            if ($result !== true && $argCount <= 3) {
+                $callback       = $result;
+                // Minor performance tweak, if the callback gets called more
+                // than once
+                $this->callback = $result;
+            }
+        }
+
+        // Minor performance tweak; use call_user_func() until > 3 arguments
+        // reached
+        switch ($argCount) {
+            case 0:
+                if (static::$isPhp54) {
+                    return $callback();
+                }
+                return call_user_func($callback);
+            case 1:
+                if (static::$isPhp54) {
+                    return $callback(array_shift($args));
+                }
+                return call_user_func($callback, array_shift($args));
+            case 2:
+                $arg1 = array_shift($args);
+                $arg2 = array_shift($args);
+                if (static::$isPhp54) {
+                    return $callback($arg1, $arg2);
+                }
+                return call_user_func($callback, $arg1, $arg2);
+            case 3:
+                $arg1 = array_shift($args);
+                $arg2 = array_shift($args);
+                $arg3 = array_shift($args);
+                if (static::$isPhp54) {
+                    return $callback($arg1, $arg2, $arg3);
+                }
+                return call_user_func($callback, $arg1, $arg2, $arg3);
+            default:
+                return call_user_func_array($callback, $args);
+        }
+    }
+
+    /**
+     * Invoke as functor
+     *
+     * @return mixed
+     */
+    public function __invoke()
+    {
+        return $this->call(func_get_args());
+    }
+
+    /**
+     * Get all callback metadata
+     *
+     * @return array
+     */
+    public function getMetadata()
+    {
+        return $this->metadata;
+    }
+
+    /**
+     * Retrieve a single metadatum
+     *
+     * @param  string $name
+     * @return mixed
+     */
+    public function getMetadatum($name)
+    {
+        if (array_key_exists($name, $this->metadata)) {
+            return $this->metadata[$name];
+        }
+        return;
+    }
+
+    /**
+     * Validate a static method call
+     *
+     * Validates that a static method call in PHP 5.4 will actually work
+     *
+     * @param  string $callback
+     * @return true|array
+     * @throws Exception\InvalidCallbackException if invalid
+     */
+    protected function validateStringCallbackFor54($callback)
+    {
+        if (!strstr($callback, '::')) {
+            return true;
+        }
+
+        list($class, $method) = explode('::', $callback, 2);
+
+        if (!class_exists($class)) {
+            throw new Exception\InvalidCallbackException(sprintf(
+                'Static method call "%s" refers to a class that does not exist',
+                $callback
+            ));
+        }
+
+        $r = new ReflectionClass($class);
+        if (!$r->hasMethod($method)) {
+            throw new Exception\InvalidCallbackException(sprintf(
+                'Static method call "%s" refers to a method that does not exist',
+                $callback
+            ));
+        }
+        $m = $r->getMethod($method);
+        if (!$m->isStatic()) {
+            throw new Exception\InvalidCallbackException(sprintf(
+                'Static method call "%s" refers to a method that is not static',
+                $callback
+            ));
+        }
+
+        // returning a non boolean value may not be nice for a validate method,
+        // but that allows the usage of a static string callback without using
+        // the call_user_func function.
+        return array($class, $method);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/DateTime.php b/core/vendor/zendframework/zend-stdlib/src/DateTime.php
new file mode 100644
index 0000000000000000000000000000000000000000..cdab67d6e83f515d200c727673d3dd5f2a488077
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/DateTime.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use DateTimeZone;
+
+trigger_error('DateTime extension deprecated as of ZF 2.1.4; use the \DateTime constructor to parse extended ISO8601 dates instead', E_USER_DEPRECATED);
+
+/**
+ * DateTime
+ *
+ * An extension of the \DateTime object.
+ *
+ * @deprecated
+ */
+class DateTime extends \DateTime
+{
+    /**
+     * The DateTime::ISO8601 constant used by php's native DateTime object does
+     * not allow for fractions of a second. This function better handles ISO8601
+     * formatted date strings.
+     *
+     * @param  string       $time
+     * @param  DateTimeZone $timezone
+     * @return mixed
+     */
+    public static function createFromISO8601($time, DateTimeZone $timezone = null)
+    {
+        $format = self::ISO8601;
+        if (isset($time[19]) && $time[19] === '.') {
+            $format = 'Y-m-d\TH:i:s.uO';
+        }
+
+        if ($timezone !== null) {
+            return self::createFromFormat($format, $time, $timezone);
+        }
+
+        return self::createFromFormat($format, $time);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php b/core/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f74d1e8af4ae09e7eb2ca52c3305a172b00da80
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+interface DispatchableInterface
+{
+    /**
+     * Dispatch a request
+     *
+     * @param RequestInterface $request
+     * @param null|ResponseInterface $response
+     * @return Response|mixed
+     */
+    public function dispatch(RequestInterface $request, ResponseInterface $response = null);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ErrorHandler.php b/core/vendor/zendframework/zend-stdlib/src/ErrorHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..01949d1efee14f92397cd144dcb7afa2b629442f
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ErrorHandler.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use ErrorException;
+
+/**
+ * ErrorHandler that can be used to catch internal PHP errors
+ * and convert to an ErrorException instance.
+ */
+abstract class ErrorHandler
+{
+    /**
+     * Active stack
+     *
+     * @var array
+     */
+    protected static $stack = array();
+
+    /**
+     * Check if this error handler is active
+     *
+     * @return bool
+     */
+    public static function started()
+    {
+        return (bool) static::getNestedLevel();
+    }
+
+    /**
+     * Get the current nested level
+     *
+     * @return int
+     */
+    public static function getNestedLevel()
+    {
+        return count(static::$stack);
+    }
+
+    /**
+     * Starting the error handler
+     *
+     * @param int $errorLevel
+     */
+    public static function start($errorLevel = \E_WARNING)
+    {
+        if (!static::$stack) {
+            set_error_handler(array(get_called_class(), 'addError'), $errorLevel);
+        }
+
+        static::$stack[] = null;
+    }
+
+    /**
+     * Stopping the error handler
+     *
+     * @param  bool $throw Throw the ErrorException if any
+     * @return null|ErrorException
+     * @throws ErrorException If an error has been catched and $throw is true
+     */
+    public static function stop($throw = false)
+    {
+        $errorException = null;
+
+        if (static::$stack) {
+            $errorException = array_pop(static::$stack);
+
+            if (!static::$stack) {
+                restore_error_handler();
+            }
+
+            if ($errorException && $throw) {
+                throw $errorException;
+            }
+        }
+
+        return $errorException;
+    }
+
+    /**
+     * Stop all active handler
+     *
+     * @return void
+     */
+    public static function clean()
+    {
+        if (static::$stack) {
+            restore_error_handler();
+        }
+
+        static::$stack = array();
+    }
+
+    /**
+     * Add an error to the stack
+     *
+     * @param int    $errno
+     * @param string $errstr
+     * @param string $errfile
+     * @param int    $errline
+     * @return void
+     */
+    public static function addError($errno, $errstr = '', $errfile = '', $errline = 0)
+    {
+        $stack = & static::$stack[count(static::$stack) - 1];
+        $stack = new ErrorException($errstr, 0, $errno, $errfile, $errline, $stack);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php b/core/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php
new file mode 100644
index 0000000000000000000000000000000000000000..0254e45bffbd397d736734ca2f80ff29c15b8c0b
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Bad method call exception
+ */
+class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php b/core/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d2ac714a1f3aa0d3b3f530cd8c4d2bec0af6ac3
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Domain exception
+ */
+class DomainException extends \DomainException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..60b795f8ddef76344633a0ad5071ac97c829c394
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Exception marker interface
+ */
+interface ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php b/core/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b51475f246e676bf3f2356e4495c27708b32ac5
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Extension not loaded exception
+ */
+class ExtensionNotLoadedException extends RuntimeException
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..8028c4717562886729c03a3c140192710fc85077
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Invalid Argument Exception
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php b/core/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php
new file mode 100644
index 0000000000000000000000000000000000000000..aa36f98632db1a08e3ba275b44efa729db9e08b1
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Invalid callback exception
+ */
+class InvalidCallbackException extends DomainException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php b/core/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php
new file mode 100644
index 0000000000000000000000000000000000000000..087ac0e83fd9cd7742232bcbe4574d4b632c869a
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Logic exception
+ */
+class LogicException extends \LogicException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php b/core/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php
new file mode 100644
index 0000000000000000000000000000000000000000..f3891d64b6a5392ef82ef0d4d83bd23bac831331
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Exception;
+
+/**
+ * Runtime exception
+ */
+class RuntimeException extends \RuntimeException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php b/core/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..297d557746cc20c46a9b0f285213249f82176484
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Extractor;
+
+interface ExtractionInterface
+{
+    /**
+     * Extract values from an object
+     *
+     * @param  object $object
+     * @return array
+     */
+    public function extract($object);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Glob.php b/core/vendor/zendframework/zend-stdlib/src/Glob.php
new file mode 100644
index 0000000000000000000000000000000000000000..a4d0068a09152255939bbcd32282a2e5bc8ddf05
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Glob.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+/**
+ * Wrapper for glob with fallback if GLOB_BRACE is not available.
+ */
+abstract class Glob
+{
+    /**#@+
+     * Glob constants.
+     */
+    const GLOB_MARK     = 0x01;
+    const GLOB_NOSORT   = 0x02;
+    const GLOB_NOCHECK  = 0x04;
+    const GLOB_NOESCAPE = 0x08;
+    const GLOB_BRACE    = 0x10;
+    const GLOB_ONLYDIR  = 0x20;
+    const GLOB_ERR      = 0x40;
+    /**#@-*/
+
+    /**
+     * Find pathnames matching a pattern.
+     *
+     * @see    http://docs.php.net/glob
+     * @param  string  $pattern
+     * @param  int $flags
+     * @param  bool $forceFallback
+     * @return array
+     * @throws Exception\RuntimeException
+     */
+    public static function glob($pattern, $flags = 0, $forceFallback = false)
+    {
+        if (!defined('GLOB_BRACE') || $forceFallback) {
+            return static::fallbackGlob($pattern, $flags);
+        }
+
+        return static::systemGlob($pattern, $flags);
+    }
+
+    /**
+     * Use the glob function provided by the system.
+     *
+     * @param  string  $pattern
+     * @param  int     $flags
+     * @return array
+     * @throws Exception\RuntimeException
+     */
+    protected static function systemGlob($pattern, $flags)
+    {
+        if ($flags) {
+            $flagMap = array(
+                self::GLOB_MARK     => GLOB_MARK,
+                self::GLOB_NOSORT   => GLOB_NOSORT,
+                self::GLOB_NOCHECK  => GLOB_NOCHECK,
+                self::GLOB_NOESCAPE => GLOB_NOESCAPE,
+                self::GLOB_BRACE    => GLOB_BRACE,
+                self::GLOB_ONLYDIR  => GLOB_ONLYDIR,
+                self::GLOB_ERR      => GLOB_ERR,
+            );
+
+            $globFlags = 0;
+
+            foreach ($flagMap as $internalFlag => $globFlag) {
+                if ($flags & $internalFlag) {
+                    $globFlags |= $globFlag;
+                }
+            }
+        } else {
+            $globFlags = 0;
+        }
+
+        ErrorHandler::start();
+        $res = glob($pattern, $globFlags);
+        $err = ErrorHandler::stop();
+        if ($res === false) {
+            throw new Exception\RuntimeException("glob('{$pattern}', {$globFlags}) failed", 0, $err);
+        }
+        return $res;
+    }
+
+    /**
+     * Expand braces manually, then use the system glob.
+     *
+     * @param  string  $pattern
+     * @param  int     $flags
+     * @return array
+     * @throws Exception\RuntimeException
+     */
+    protected static function fallbackGlob($pattern, $flags)
+    {
+        if (!$flags & self::GLOB_BRACE) {
+            return static::systemGlob($pattern, $flags);
+        }
+
+        $flags &= ~self::GLOB_BRACE;
+        $length = strlen($pattern);
+        $paths  = array();
+
+        if ($flags & self::GLOB_NOESCAPE) {
+            $begin = strpos($pattern, '{');
+        } else {
+            $begin = 0;
+
+            while (true) {
+                if ($begin === $length) {
+                    $begin = false;
+                    break;
+                } elseif ($pattern[$begin] === '\\' && ($begin + 1) < $length) {
+                    $begin++;
+                } elseif ($pattern[$begin] === '{') {
+                    break;
+                }
+
+                $begin++;
+            }
+        }
+
+        if ($begin === false) {
+            return static::systemGlob($pattern, $flags);
+        }
+
+        $next = static::nextBraceSub($pattern, $begin + 1, $flags);
+
+        if ($next === null) {
+            return static::systemGlob($pattern, $flags);
+        }
+
+        $rest = $next;
+
+        while ($pattern[$rest] !== '}') {
+            $rest = static::nextBraceSub($pattern, $rest + 1, $flags);
+
+            if ($rest === null) {
+                return static::systemGlob($pattern, $flags);
+            }
+        }
+
+        $p = $begin + 1;
+
+        while (true) {
+            $subPattern = substr($pattern, 0, $begin)
+                        . substr($pattern, $p, $next - $p)
+                        . substr($pattern, $rest + 1);
+
+            $result = static::fallbackGlob($subPattern, $flags | self::GLOB_BRACE);
+
+            if ($result) {
+                $paths = array_merge($paths, $result);
+            }
+
+            if ($pattern[$next] === '}') {
+                break;
+            }
+
+            $p    = $next + 1;
+            $next = static::nextBraceSub($pattern, $p, $flags);
+        }
+
+        return array_unique($paths);
+    }
+
+    /**
+     * Find the end of the sub-pattern in a brace expression.
+     *
+     * @param  string  $pattern
+     * @param  int $begin
+     * @param  int $flags
+     * @return int|null
+     */
+    protected static function nextBraceSub($pattern, $begin, $flags)
+    {
+        $length  = strlen($pattern);
+        $depth   = 0;
+        $current = $begin;
+
+        while ($current < $length) {
+            if (!$flags & self::GLOB_NOESCAPE && $pattern[$current] === '\\') {
+                if (++$current === $length) {
+                    break;
+                }
+
+                $current++;
+            } else {
+                if (($pattern[$current] === '}' && $depth-- === 0) || ($pattern[$current] === ',' && $depth === 0)) {
+                    break;
+                } elseif ($pattern[$current++] === '{') {
+                    $depth++;
+                }
+            }
+        }
+
+        return ($current < $length ? $current : null);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php b/core/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..95bc5162d38407e1d2dc19cfe0ff104f26db2b72
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+/**
+ * An aggregate for all guard traits
+ */
+trait AllGuardsTrait
+{
+    use ArrayOrTraversableGuardTrait;
+    use EmptyGuardTrait;
+    use NullGuardTrait;
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php b/core/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6959a5ef42ec4192a3a031b88186e2ccbd8dfb8
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+use Traversable;
+
+/**
+ * Provide a guard method for array or Traversable data
+ */
+trait ArrayOrTraversableGuardTrait
+{
+    /**
+     * Verifies that the data is an array or Traversable
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    protected function guardForArrayOrTraversable(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
+    ) {
+        if (!is_array($data) && !($data instanceof Traversable)) {
+            $message = sprintf(
+                "%s must be an array or Traversable, [%s] given",
+                $dataName,
+                is_object($data) ? get_class($data) : gettype($data)
+            );
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php b/core/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6751cc35a216ecf89b80ad400d83680c6018d0e
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+/**
+ * Provide a guard method against empty data
+ */
+trait EmptyGuardTrait
+{
+    /**
+     * Verify that the data is not empty
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    protected function guardAgainstEmpty(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
+    ) {
+        if (empty($data)) {
+            $message = sprintf('%s cannot be empty', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php b/core/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php
new file mode 100644
index 0000000000000000000000000000000000000000..4fe4ccacb913c71bbe30e8e2f3c34084ff9f7256
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+use Traversable;
+
+/**
+ * Static guard helper class
+ *
+ * Bridges the gap for allowing refactoring until traits can be used by default.
+ *
+ * @deprecated
+ */
+abstract class GuardUtils
+{
+    const DEFAULT_EXCEPTION_CLASS = 'Zend\Stdlib\Exception\InvalidArgumentException';
+
+    /**
+     * Verifies that the data is an array or Traversable
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    public static function guardForArrayOrTraversable(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
+    ) {
+        if (!is_array($data) && !($data instanceof Traversable)) {
+            $message = sprintf(
+                '%s must be an array or Traversable, [%s] given',
+                $dataName,
+                is_object($data) ? get_class($data) : gettype($data)
+            );
+            throw new $exceptionClass($message);
+        }
+    }
+
+    /**
+     * Verify that the data is not empty
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    public static function guardAgainstEmpty(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
+    ) {
+        if (empty($data)) {
+            $message = sprintf('%s cannot be empty', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+
+    /**
+     * Verify that the data is not null
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    public static function guardAgainstNull(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
+    ) {
+        if (null === $data) {
+            $message = sprintf('%s cannot be null', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php b/core/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..eac716281cd6767114d9501377f15e3542862252
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+/**
+ * Provide a guard method against null data
+ */
+trait NullGuardTrait
+{
+    /**
+     * Verify that the data is not null
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    protected function guardAgainstNull(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
+    ) {
+        if (null === $data) {
+            $message = sprintf('%s cannot be null', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php
new file mode 100644
index 0000000000000000000000000000000000000000..338ed804422f19e6e3e3897cee4e934afee6d97b
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php
@@ -0,0 +1,287 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use ArrayObject;
+use Zend\Stdlib\Exception;
+use Zend\Stdlib\Hydrator\Filter\FilterComposite;
+use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
+use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
+
+abstract class AbstractHydrator implements
+    HydratorInterface,
+    StrategyEnabledInterface,
+    FilterEnabledInterface,
+    NamingStrategyEnabledInterface
+{
+    /**
+     * The list with strategies that this hydrator has.
+     *
+     * @var ArrayObject
+     */
+    protected $strategies;
+
+    /**
+     * An instance of NamingStrategyInterface
+     *
+     * @var NamingStrategyInterface
+     */
+    protected $namingStrategy;
+
+    /**
+     * Composite to filter the methods, that need to be hydrated
+     *
+     * @var Filter\FilterComposite
+     */
+    protected $filterComposite;
+
+    /**
+     * Initializes a new instance of this class.
+     */
+    public function __construct()
+    {
+        $this->strategies = new ArrayObject();
+        $this->filterComposite = new FilterComposite();
+    }
+
+    /**
+     * Gets the strategy with the given name.
+     *
+     * @param string $name The name of the strategy to get.
+     *
+     * @throws \Zend\Stdlib\Exception\InvalidArgumentException
+     * @return StrategyInterface
+     */
+    public function getStrategy($name)
+    {
+        if (isset($this->strategies[$name])) {
+            return $this->strategies[$name];
+        }
+
+        if (!isset($this->strategies['*'])) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                '%s: no strategy by name of "%s", and no wildcard strategy present',
+                __METHOD__,
+                $name
+            ));
+        }
+
+        return $this->strategies['*'];
+    }
+
+    /**
+     * Checks if the strategy with the given name exists.
+     *
+     * @param string $name The name of the strategy to check for.
+     * @return bool
+     */
+    public function hasStrategy($name)
+    {
+        return array_key_exists($name, $this->strategies)
+               || array_key_exists('*', $this->strategies);
+    }
+
+    /**
+     * Adds the given strategy under the given name.
+     *
+     * @param string $name The name of the strategy to register.
+     * @param StrategyInterface $strategy The strategy to register.
+     * @return HydratorInterface
+     */
+    public function addStrategy($name, StrategyInterface $strategy)
+    {
+        $this->strategies[$name] = $strategy;
+        return $this;
+    }
+
+    /**
+     * Removes the strategy with the given name.
+     *
+     * @param string $name The name of the strategy to remove.
+     * @return HydratorInterface
+     */
+    public function removeStrategy($name)
+    {
+        unset($this->strategies[$name]);
+        return $this;
+    }
+
+    /**
+     * Converts a value for extraction. If no strategy exists the plain value is returned.
+     *
+     * @param  string $name  The name of the strategy to use.
+     * @param  mixed  $value  The value that should be converted.
+     * @param  mixed  $object The object is optionally provided as context.
+     * @return mixed
+     */
+    public function extractValue($name, $value, $object = null)
+    {
+        if ($this->hasStrategy($name)) {
+            $strategy = $this->getStrategy($name);
+            $value = $strategy->extract($value, $object);
+        }
+        return $value;
+    }
+
+    /**
+     * Converts a value for hydration. If no strategy exists the plain value is returned.
+     *
+     * @param string $name The name of the strategy to use.
+     * @param mixed $value The value that should be converted.
+     * @param array $data The whole data is optionally provided as context.
+     * @return mixed
+     */
+    public function hydrateValue($name, $value, $data = null)
+    {
+        if ($this->hasStrategy($name)) {
+            $strategy = $this->getStrategy($name);
+            $value = $strategy->hydrate($value, $data);
+        }
+        return $value;
+    }
+
+    /**
+     * Convert a name for extraction. If no naming strategy exists, the plain value is returned.
+     *
+     * @param string $name    The name to convert.
+     * @param null   $object  The object is optionally provided as context.
+     * @return mixed
+     */
+    public function extractName($name, $object = null)
+    {
+        if ($this->hasNamingStrategy()) {
+            $name = $this->getNamingStrategy()->extract($name, $object);
+        }
+        return $name;
+    }
+
+    /**
+     * Converts a value for hydration. If no naming strategy exists, the plain value is returned.
+     *
+     * @param string $name  The name to convert.
+     * @param array  $data  The whole data is optionally provided as context.
+     * @return mixed
+     */
+    public function hydrateName($name, $data = null)
+    {
+        if ($this->hasNamingStrategy()) {
+            $name = $this->getNamingStrategy()->hydrate($name, $data);
+        }
+        return $name;
+    }
+
+    /**
+     * Get the filter instance
+     *
+     * @return Filter\FilterComposite
+     */
+    public function getFilter()
+    {
+        return $this->filterComposite;
+    }
+
+    /**
+     * Add a new filter to take care of what needs to be hydrated.
+     * To exclude e.g. the method getServiceLocator:
+     *
+     * <code>
+     * $composite->addFilter("servicelocator",
+     *     function ($property) {
+     *         list($class, $method) = explode('::', $property);
+     *         if ($method === 'getServiceLocator') {
+     *             return false;
+     *         }
+     *         return true;
+     *     }, FilterComposite::CONDITION_AND
+     * );
+     * </code>
+     *
+     * @param string $name Index in the composite
+     * @param callable|Filter\FilterInterface $filter
+     * @param int $condition
+     * @return Filter\FilterComposite
+     */
+    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
+    {
+        return $this->filterComposite->addFilter($name, $filter, $condition);
+    }
+
+    /**
+     * Check whether a specific filter exists at key $name or not
+     *
+     * @param string $name Index in the composite
+     * @return bool
+     */
+    public function hasFilter($name)
+    {
+        return $this->filterComposite->hasFilter($name);
+    }
+
+    /**
+     * Remove a filter from the composition.
+     * To not extract "has" methods, you simply need to unregister it
+     *
+     * <code>
+     * $filterComposite->removeFilter('has');
+     * </code>
+     *
+     * @param $name
+     * @return Filter\FilterComposite
+     */
+    public function removeFilter($name)
+    {
+        return $this->filterComposite->removeFilter($name);
+    }
+
+    /**
+     * Adds the given naming strategy
+     *
+     * @param NamingStrategyInterface $strategy The naming to register.
+     * @return self
+     */
+    public function setNamingStrategy(NamingStrategyInterface $strategy)
+    {
+        $this->namingStrategy = $strategy;
+
+        return $this;
+    }
+
+    /**
+     * Gets the naming strategy.
+     *
+     * @return NamingStrategyInterface
+     */
+    public function getNamingStrategy()
+    {
+        return $this->namingStrategy;
+    }
+
+    /**
+     * Checks if a naming strategy exists.
+     *
+     * @return bool
+     */
+    public function hasNamingStrategy()
+    {
+        return isset($this->namingStrategy);
+    }
+
+    /**
+     * Removes the naming strategy
+     *
+     * @return self
+     */
+    public function removeNamingStrategy()
+    {
+        $this->namingStrategy = null;
+
+        return $this;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php
new file mode 100644
index 0000000000000000000000000000000000000000..38a868e022e3ce330070d65c2d735d2119efba51
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Aggregate;
+
+use Zend\EventManager\EventManager;
+use Zend\EventManager\EventManagerAwareInterface;
+use Zend\EventManager\EventManagerInterface;
+use Zend\Stdlib\Hydrator\HydratorInterface;
+
+/**
+ * Aggregate hydrator that composes multiple hydrators via events
+ */
+class AggregateHydrator implements HydratorInterface, EventManagerAwareInterface
+{
+    const DEFAULT_PRIORITY = 1;
+
+    /**
+     * @var \Zend\EventManager\EventManagerInterface|null
+     */
+    protected $eventManager;
+
+    /**
+     * Attaches the provided hydrator to the list of hydrators to be used while hydrating/extracting data
+     *
+     * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator
+     * @param int                                     $priority
+     */
+    public function add(HydratorInterface $hydrator, $priority = self::DEFAULT_PRIORITY)
+    {
+        $this->getEventManager()->attachAggregate(new HydratorListener($hydrator), $priority);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function extract($object)
+    {
+        $event = new ExtractEvent($this, $object);
+
+        $this->getEventManager()->trigger($event);
+
+        return $event->getExtractedData();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function hydrate(array $data, $object)
+    {
+        $event = new HydrateEvent($this, $object, $data);
+
+        $this->getEventManager()->trigger($event);
+
+        return $event->getHydratedObject();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function setEventManager(EventManagerInterface $eventManager)
+    {
+        $eventManager->setIdentifiers(array(__CLASS__, get_class($this)));
+
+        $this->eventManager = $eventManager;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getEventManager()
+    {
+        if (null === $this->eventManager) {
+            $this->setEventManager(new EventManager());
+        }
+
+        return $this->eventManager;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php
new file mode 100644
index 0000000000000000000000000000000000000000..b13bc5c70b2cdf3399fd11562564c971b3bdb599
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Aggregate;
+
+use Zend\EventManager\Event;
+
+/**
+ * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} extracts
+ * data from an object
+ */
+class ExtractEvent extends Event
+{
+    const EVENT_EXTRACT = 'extract';
+
+    /**
+     * {@inheritDoc}
+     */
+    protected $name = self::EVENT_EXTRACT;
+
+    /**
+     * @var object
+     */
+    protected $extractionObject;
+
+    /**
+     * @var array
+     */
+    protected $extractedData = array();
+
+    /**
+     * @param object $target
+     * @param object $extractionObject
+     */
+    public function __construct($target, $extractionObject)
+    {
+        $this->target           = $target;
+        $this->extractionObject = $extractionObject;
+    }
+
+    /**
+     * Retrieves the object from which data is extracted
+     *
+     * @return object
+     */
+    public function getExtractionObject()
+    {
+        return $this->extractionObject;
+    }
+
+    /**
+     * @param object $extractionObject
+     *
+     * @return void
+     */
+    public function setExtractionObject($extractionObject)
+    {
+        $this->extractionObject = $extractionObject;
+    }
+
+    /**
+     * Retrieves the data that has been extracted
+     *
+     * @return array
+     */
+    public function getExtractedData()
+    {
+        return $this->extractedData;
+    }
+
+    /**
+     * @param array $extractedData
+     *
+     * @return void
+     */
+    public function setExtractedData(array $extractedData)
+    {
+        $this->extractedData = $extractedData;
+    }
+
+    /**
+     * Merge provided data with the extracted data
+     *
+     * @param array $additionalData
+     *
+     * @return void
+     */
+    public function mergeExtractedData(array $additionalData)
+    {
+        $this->extractedData = array_merge($this->extractedData, $additionalData);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7c91eec261194793a1a1fc001db658d72ac017d
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Aggregate;
+
+use Zend\EventManager\Event;
+
+/**
+ * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} hydrates
+ * data into an object
+ */
+class HydrateEvent extends Event
+{
+    const EVENT_HYDRATE = 'hydrate';
+
+    /**
+     * {@inheritDoc}
+     */
+    protected $name = self::EVENT_HYDRATE;
+
+    /**
+     * @var object
+     */
+    protected $hydratedObject;
+
+    /**
+     * @var array
+     */
+    protected $hydrationData;
+
+    /**
+     * @param object $target
+     * @param object $hydratedObject
+     * @param array  $hydrationData
+     */
+    public function __construct($target, $hydratedObject, array $hydrationData)
+    {
+        $this->target         = $target;
+        $this->hydratedObject = $hydratedObject;
+        $this->hydrationData  = $hydrationData;
+    }
+
+    /**
+     * Retrieves the object that is being hydrated
+     *
+     * @return object
+     */
+    public function getHydratedObject()
+    {
+        return $this->hydratedObject;
+    }
+
+    /**
+     * @param object $hydratedObject
+     */
+    public function setHydratedObject($hydratedObject)
+    {
+        $this->hydratedObject = $hydratedObject;
+    }
+
+    /**
+     * Retrieves the data that is being used for hydration
+     *
+     * @return array
+     */
+    public function getHydrationData()
+    {
+        return $this->hydrationData;
+    }
+
+    /**
+     * @param array $hydrationData
+     */
+    public function setHydrationData(array $hydrationData)
+    {
+        $this->hydrationData = $hydrationData;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c25ff3c4611d0cc6f500e3b80c0ce163d80e71e
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Aggregate;
+
+use Zend\EventManager\AbstractListenerAggregate;
+use Zend\EventManager\EventManagerInterface;
+use Zend\Stdlib\Hydrator\HydratorInterface;
+
+/**
+ * Aggregate listener wrapping around a hydrator. Listens
+ * to {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_HYDRATE} and
+ * {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_EXTRACT}
+ */
+class HydratorListener extends AbstractListenerAggregate
+{
+    /**
+     * @var \Zend\Stdlib\Hydrator\HydratorInterface
+     */
+    protected $hydrator;
+
+    /**
+     * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator
+     */
+    public function __construct(HydratorInterface $hydrator)
+    {
+        $this->hydrator = $hydrator;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function attach(EventManagerInterface $events, $priority = 1)
+    {
+        $this->listeners[] = $events->attach(HydrateEvent::EVENT_HYDRATE, array($this, 'onHydrate'), $priority);
+        $this->listeners[] = $events->attach(ExtractEvent::EVENT_EXTRACT, array($this, 'onExtract'), $priority);
+    }
+
+    /**
+     * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent::EVENT_HYDRATE} is triggered
+     *
+     * @param \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent $event
+     *
+     * @return object
+     *
+     * @internal
+     */
+    public function onHydrate(HydrateEvent $event)
+    {
+        $object = $this->hydrator->hydrate($event->getHydrationData(), $event->getHydratedObject());
+
+        $event->setHydratedObject($object);
+
+        return $object;
+    }
+
+    /**
+     * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent::EVENT_EXTRACT} is triggered
+     *
+     * @param \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent $event
+     *
+     * @return array
+     *
+     * @internal
+     */
+    public function onExtract(ExtractEvent $event)
+    {
+        $data = $this->hydrator->extract($event->getExtractionObject());
+
+        $event->mergeExtractedData($data);
+
+        return $data;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f4ab2a1333ddba8d28eb8a2e86c7c5568ac2e46
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Exception;
+
+class ArraySerializable extends AbstractHydrator
+{
+    /**
+     * Extract values from the provided object
+     *
+     * Extracts values via the object's getArrayCopy() method.
+     *
+     * @param  object $object
+     * @return array
+     * @throws Exception\BadMethodCallException for an $object not implementing getArrayCopy()
+     */
+    public function extract($object)
+    {
+        if (!is_callable(array($object, 'getArrayCopy'))) {
+            throw new Exception\BadMethodCallException(
+                sprintf('%s expects the provided object to implement getArrayCopy()', __METHOD__)
+            );
+        }
+
+        $data = $object->getArrayCopy();
+        $filter = $this->getFilter();
+
+        foreach ($data as $name => $value) {
+            if (!$filter->filter($name)) {
+                unset($data[$name]);
+                continue;
+            }
+            $extractedName = $this->extractName($name, $object);
+            // replace the original key with extracted, if differ
+            if ($extractedName !== $name) {
+                unset($data[$name]);
+                $name = $extractedName;
+            }
+            $data[$name] = $this->extractValue($name, $value, $object);
+        }
+
+        return $data;
+    }
+
+    /**
+     * Hydrate an object
+     *
+     * Hydrates an object by passing $data to either its exchangeArray() or
+     * populate() method.
+     *
+     * @param  array $data
+     * @param  object $object
+     * @return object
+     * @throws Exception\BadMethodCallException for an $object not implementing exchangeArray() or populate()
+     */
+    public function hydrate(array $data, $object)
+    {
+        $replacement = array();
+        foreach ($data as $key => $value) {
+            $name = $this->hydrateName($key, $data);
+            $replacement[$name] = $this->hydrateValue($name, $value, $data);
+        }
+
+        if (is_callable(array($object, 'exchangeArray'))) {
+            $object->exchangeArray($replacement);
+        } elseif (is_callable(array($object, 'populate'))) {
+            $object->populate($replacement);
+        } else {
+            throw new Exception\BadMethodCallException(
+                sprintf('%s expects the provided object to implement exchangeArray() or populate()', __METHOD__)
+            );
+        }
+        return $object;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php
new file mode 100644
index 0000000000000000000000000000000000000000..4edb1f4dcd61c9488330f54d674de6e105428fc5
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php
@@ -0,0 +1,274 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Traversable;
+use Zend\Stdlib\Exception;
+use Zend\Stdlib\ArrayUtils;
+use Zend\Stdlib\Hydrator\Filter\FilterComposite;
+use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
+use Zend\Stdlib\Hydrator\Filter\GetFilter;
+use Zend\Stdlib\Hydrator\Filter\HasFilter;
+use Zend\Stdlib\Hydrator\Filter\IsFilter;
+use Zend\Stdlib\Hydrator\Filter\MethodMatchFilter;
+use Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter;
+use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
+use Zend\Stdlib\Hydrator\NamingStrategy\UnderscoreNamingStrategy;
+
+class ClassMethods extends AbstractHydrator implements HydratorOptionsInterface
+{
+    /**
+     * Holds the names of the methods used for hydration, indexed by class::property name,
+     * false if the hydration method is not callable/usable for hydration purposes
+     *
+     * @var string[]|bool[]
+     */
+    private $hydrationMethodsCache = array();
+
+    /**
+     * A map of extraction methods to property name to be used during extraction, indexed
+     * by class name and method name
+     *
+     * @var string[][]
+     */
+    private $extractionMethodsCache = array();
+
+    /**
+     * Flag defining whether array keys are underscore-separated (true) or camel case (false)
+     *
+     * @var bool
+     */
+    protected $underscoreSeparatedKeys = true;
+
+    /**
+     * @var \Zend\Stdlib\Hydrator\Filter\FilterInterface
+     */
+    private $callableMethodFilter;
+
+    /**
+     * Define if extract values will use camel case or name with underscore
+     * @param bool|array $underscoreSeparatedKeys
+     */
+    public function __construct($underscoreSeparatedKeys = true)
+    {
+        parent::__construct();
+        $this->setUnderscoreSeparatedKeys($underscoreSeparatedKeys);
+
+        $this->callableMethodFilter = new OptionalParametersFilter();
+
+        $this->filterComposite->addFilter('is', new IsFilter());
+        $this->filterComposite->addFilter('has', new HasFilter());
+        $this->filterComposite->addFilter('get', new GetFilter());
+        $this->filterComposite->addFilter('parameter', new OptionalParametersFilter(), FilterComposite::CONDITION_AND);
+    }
+
+    /**
+     * @param  array|Traversable                 $options
+     * @return ClassMethods
+     * @throws Exception\InvalidArgumentException
+     */
+    public function setOptions($options)
+    {
+        if ($options instanceof Traversable) {
+            $options = ArrayUtils::iteratorToArray($options);
+        } elseif (!is_array($options)) {
+            throw new Exception\InvalidArgumentException(
+                'The options parameter must be an array or a Traversable'
+            );
+        }
+        if (isset($options['underscoreSeparatedKeys'])) {
+            $this->setUnderscoreSeparatedKeys($options['underscoreSeparatedKeys']);
+        }
+
+        return $this;
+    }
+
+    /**
+     * @param  bool      $underscoreSeparatedKeys
+     * @return ClassMethods
+     */
+    public function setUnderscoreSeparatedKeys($underscoreSeparatedKeys)
+    {
+        $this->underscoreSeparatedKeys = (bool) $underscoreSeparatedKeys;
+
+        if ($this->underscoreSeparatedKeys) {
+            $this->setNamingStrategy(new UnderscoreNamingStrategy);
+        } elseif ($this->getNamingStrategy() instanceof UnderscoreNamingStrategy) {
+            $this->removeNamingStrategy();
+        }
+
+        return $this;
+    }
+
+    /**
+     * @return bool
+     */
+    public function getUnderscoreSeparatedKeys()
+    {
+        return $this->underscoreSeparatedKeys;
+    }
+
+    /**
+     * Extract values from an object with class methods
+     *
+     * Extracts the getter/setter of the given $object.
+     *
+     * @param  object                           $object
+     * @return array
+     * @throws Exception\BadMethodCallException for a non-object $object
+     */
+    public function extract($object)
+    {
+        if (!is_object($object)) {
+            throw new Exception\BadMethodCallException(sprintf(
+                '%s expects the provided $object to be a PHP object)',
+                __METHOD__
+            ));
+        }
+
+        $objectClass = get_class($object);
+
+        // reset the hydrator's hydrator's cache for this object, as the filter may be per-instance
+        if ($object instanceof FilterProviderInterface) {
+            $this->extractionMethodsCache[$objectClass] = null;
+        }
+
+        // pass 1 - finding out which properties can be extracted, with which methods (populate hydration cache)
+        if (! isset($this->extractionMethodsCache[$objectClass])) {
+            $this->extractionMethodsCache[$objectClass] = array();
+            $filter                                     = $this->filterComposite;
+            $methods                                    = get_class_methods($object);
+
+            if ($object instanceof FilterProviderInterface) {
+                $filter = new FilterComposite(
+                    array($object->getFilter()),
+                    array(new MethodMatchFilter('getFilter'))
+                );
+            }
+
+            foreach ($methods as $method) {
+                $methodFqn = $objectClass . '::' . $method;
+
+                if (! ($filter->filter($methodFqn) && $this->callableMethodFilter->filter($methodFqn))) {
+                    continue;
+                }
+
+                $attribute = $method;
+
+                if (strpos($method, 'get') === 0) {
+                    $attribute = substr($method, 3);
+                    if (!property_exists($object, $attribute)) {
+                        $attribute = lcfirst($attribute);
+                    }
+                }
+
+                $this->extractionMethodsCache[$objectClass][$method] = $attribute;
+            }
+        }
+
+        $values = array();
+
+        // pass 2 - actually extract data
+        foreach ($this->extractionMethodsCache[$objectClass] as $methodName => $attributeName) {
+            $realAttributeName          = $this->extractName($attributeName, $object);
+            $values[$realAttributeName] = $this->extractValue($realAttributeName, $object->$methodName(), $object);
+        }
+
+        return $values;
+    }
+
+    /**
+     * Hydrate an object by populating getter/setter methods
+     *
+     * Hydrates an object by getter/setter methods of the object.
+     *
+     * @param  array                            $data
+     * @param  object                           $object
+     * @return object
+     * @throws Exception\BadMethodCallException for a non-object $object
+     */
+    public function hydrate(array $data, $object)
+    {
+        if (!is_object($object)) {
+            throw new Exception\BadMethodCallException(sprintf(
+                '%s expects the provided $object to be a PHP object)',
+                __METHOD__
+            ));
+        }
+
+        $objectClass = get_class($object);
+
+        foreach ($data as $property => $value) {
+            $propertyFqn = $objectClass . '::$' . $property;
+
+            if (! isset($this->hydrationMethodsCache[$propertyFqn])) {
+                $setterName = 'set' . ucfirst($this->hydrateName($property, $data));
+
+                $this->hydrationMethodsCache[$propertyFqn] = is_callable(array($object, $setterName))
+                    ? $setterName
+                    : false;
+            }
+
+            if ($this->hydrationMethodsCache[$propertyFqn]) {
+                $object->{$this->hydrationMethodsCache[$propertyFqn]}($this->hydrateValue($property, $value, $data));
+            }
+        }
+
+        return $object;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
+    {
+        $this->resetCaches();
+
+        return parent::addFilter($name, $filter, $condition);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function removeFilter($name)
+    {
+        $this->resetCaches();
+
+        return parent::removeFilter($name);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function setNamingStrategy(NamingStrategyInterface $strategy)
+    {
+        $this->resetCaches();
+
+        return parent::setNamingStrategy($strategy);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function removeNamingStrategy()
+    {
+        $this->resetCaches();
+
+        return parent::removeNamingStrategy();
+    }
+
+    /**
+     * Reset all local hydration/extraction caches
+     */
+    private function resetCaches()
+    {
+        $this->hydrationMethodsCache = $this->extractionMethodsCache = array();
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php
new file mode 100644
index 0000000000000000000000000000000000000000..db234d38ada5aa4064875a7a98833397815b7f61
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\ServiceManager\ServiceLocatorInterface;
+
+class DelegatingHydrator implements HydratorInterface
+{
+    /**
+     * @var ServiceLocatorInterface
+     */
+    protected $hydrators;
+
+    /**
+     * Constructor
+     *
+     * @param ServiceLocatorInterface $hydrators
+     */
+    public function __construct(ServiceLocatorInterface $hydrators)
+    {
+        $this->hydrators = $hydrators;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function hydrate(array $data, $object)
+    {
+        return $this->getHydrator($object)->hydrate($data, $object);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function extract($object)
+    {
+        return $this->getHydrator($object)->extract($object);
+    }
+
+    /**
+     * Gets hydrator of an object
+     *
+     * @param  object $object
+     * @return HydratorInterface
+     */
+    protected function getHydrator($object)
+    {
+        return $this->hydrators->get(get_class($object));
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..c3a0da25e7f7eefc3f6f91f5a3bbc4f4ad256d57
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\ServiceManager\FactoryInterface;
+use Zend\ServiceManager\ServiceLocatorInterface;
+
+class DelegatingHydratorFactory implements FactoryInterface
+{
+    /**
+     * Creates DelegatingHydrator
+     *
+     * @param  ServiceLocatorInterface $serviceLocator
+     * @return DelegatingHydrator
+     */
+    public function createService(ServiceLocatorInterface $serviceLocator)
+    {
+        // Assume that this factory is registered with the HydratorManager,
+        // and just pass it directly on.
+        return new DelegatingHydrator($serviceLocator);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php
new file mode 100644
index 0000000000000000000000000000000000000000..000fc701e23b9dcc15ceaef64a72ac9efe59a755
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php
@@ -0,0 +1,194 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+use ArrayObject;
+use Zend\Stdlib\Exception\InvalidArgumentException;
+
+class FilterComposite implements FilterInterface
+{
+    /**
+     * @var ArrayObject
+     */
+    protected $orFilter;
+
+    /**
+     * @var ArrayObject
+     */
+    protected $andFilter;
+
+    /**
+     * Constant to add with "or" conditition
+     */
+    const CONDITION_OR = 1;
+
+    /**
+     * Constant to add with "and" conditition
+     */
+    const CONDITION_AND = 2;
+
+    /**
+     * Define default Filter
+     *
+     * @throws InvalidArgumentException
+     */
+    public function __construct($orFilter = array(), $andFilter = array())
+    {
+        array_walk(
+            $orFilter,
+            function ($value, $key) {
+                if (!is_callable($value) && !$value instanceof FilterInterface) {
+                    throw new InvalidArgumentException(
+                        'The value of ' . $key . ' should be either a callable or ' .
+                        'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
+                    );
+                }
+            }
+        );
+
+        array_walk(
+            $andFilter,
+            function ($value, $key) {
+                if (!is_callable($value) && !$value instanceof FilterInterface) {
+                    throw new InvalidArgumentException(
+                        'The value of ' . $key . '  should be either a callable or ' .
+                        'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
+                    );
+                }
+            }
+        );
+
+        $this->orFilter = new ArrayObject($orFilter);
+        $this->andFilter = new ArrayObject($andFilter);
+    }
+
+    /**
+     * Add a filter to the composite. Has to be indexed with $name in
+     * order to identify a specific filter.
+     *
+     * This example will exclude all methods from the hydration, that starts with 'getService'
+     * <code>
+     * $composite->addFilter('exclude',
+     *     function ($method) {
+     *         if (preg_match('/^getService/', $method) {
+     *             return false;
+     *         }
+     *         return true;
+     *     }, FilterComposite::CONDITION_AND
+     * );
+     * </code>
+     *
+     * @param  string                   $name
+     * @param  callable|FilterInterface $filter
+     * @param  int                      $condition Can be either FilterComposite::CONDITION_OR or FilterComposite::CONDITION_AND
+     * @throws InvalidArgumentException
+     * @return FilterComposite
+     */
+    public function addFilter($name, $filter, $condition = self::CONDITION_OR)
+    {
+        if (!is_callable($filter) && !($filter instanceof FilterInterface)) {
+            throw new InvalidArgumentException(
+                'The value of ' . $name . ' should be either a callable or ' .
+                'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
+            );
+        }
+
+        if ($condition === self::CONDITION_OR) {
+            $this->orFilter[$name] = $filter;
+        } elseif ($condition === self::CONDITION_AND) {
+            $this->andFilter[$name] = $filter;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Remove a filter from the composition
+     *
+     * @param $name string Identifier for the filter
+     * @return FilterComposite
+     */
+    public function removeFilter($name)
+    {
+        if (isset($this->orFilter[$name])) {
+            unset($this->orFilter[$name]);
+        }
+
+        if (isset($this->andFilter[$name])) {
+            unset($this->andFilter[$name]);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Check if $name has a filter registered
+     *
+     * @param $name string Identifier for the filter
+     * @return bool
+     */
+    public function hasFilter($name)
+    {
+        return isset($this->orFilter[$name]) || isset($this->andFilter[$name]);
+    }
+
+    /**
+     * Filter the composite based on the AND and OR condition
+     * Will return true if one from the "or conditions" and all from
+     * the "and condition" returns true. Otherwise false
+     *
+     * @param $property string Parameter will be e.g. Parent\Namespace\Class::method
+     * @return bool
+     */
+    public function filter($property)
+    {
+        $andCount = count($this->andFilter);
+        $orCount = count($this->orFilter);
+        // return true if no filters are registered
+        if ($orCount === 0 && $andCount === 0) {
+            return true;
+        } elseif ($orCount === 0 && $andCount !== 0) {
+            $returnValue = true;
+        } else {
+            $returnValue = false;
+        }
+
+        // Check if 1 from the or filters return true
+        foreach ($this->orFilter as $filter) {
+            if (is_callable($filter)) {
+                if ($filter($property) === true) {
+                    $returnValue = true;
+                    break;
+                }
+                continue;
+            } else {
+                if ($filter->filter($property) === true) {
+                    $returnValue = true;
+                    break;
+                }
+            }
+        }
+
+        // Check if all of the and condition return true
+        foreach ($this->andFilter as $filter) {
+            if (is_callable($filter)) {
+                if ($filter($property) === false) {
+                    return false;
+                }
+                continue;
+            } else {
+                if ($filter->filter($property) === false) {
+                    return false;
+                }
+            }
+        }
+
+        return $returnValue;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..16df098f56032e11cd6e99798a35fe3837b27734
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+interface FilterInterface
+{
+    /**
+     * Should return true, if the given filter
+     * does not match
+     *
+     * @param string $property The name of the property
+     * @return bool
+     */
+    public function filter($property);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2e978877a544375fd894b3897f9e0b002a4f9bb
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+interface FilterProviderInterface
+{
+    /**
+     * Provides a filter for hydration
+     *
+     * @return FilterInterface
+     */
+    public function getFilter();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..b4d898dc22fca3eacbcaf33b85f638056b5740f8
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+class GetFilter implements FilterInterface
+{
+    public function filter($property)
+    {
+        $pos = strpos($property, '::');
+        if ($pos !== false) {
+            $pos += 2;
+        } else {
+            $pos = 0;
+        }
+
+        if (substr($property, $pos, 3) === 'get') {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..0cf57f95e173cf034cf48f718f35f2b534cdf993
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+class HasFilter implements FilterInterface
+{
+    public function filter($property)
+    {
+        $pos = strpos($property, '::');
+        if ($pos !== false) {
+            $pos += 2;
+        } else {
+            $pos = 0;
+        }
+
+        if (substr($property, $pos, 3) === 'has') {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..3b6e3763742ae3fa5d04cf19c3bdd875afba3915
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+class IsFilter implements FilterInterface
+{
+    public function filter($property)
+    {
+        $pos = strpos($property, '::');
+        if ($pos !== false) {
+            $pos += 2;
+        } else {
+            $pos = 0;
+        }
+
+        if (substr($property, $pos, 2) === 'is') {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..2601a6fb31fdbba15b374ff4b506685b38f62591
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+class MethodMatchFilter implements FilterInterface
+{
+    /**
+     * The method to exclude
+     * @var string
+     */
+    protected $method = null;
+
+    /**
+     * Either an exclude or an include
+     * @var bool
+     */
+    protected $exclude = null;
+
+    /**
+     * @param string $method The method to exclude or include
+     * @param bool $exclude If the method should be excluded
+     */
+    public function __construct($method, $exclude = true)
+    {
+        $this->method = $method;
+        $this->exclude = $exclude;
+    }
+
+    public function filter($property)
+    {
+        $pos = strpos($property, '::');
+        if ($pos !== false) {
+            $pos += 2;
+        } else {
+            $pos = 0;
+        }
+        if (substr($property, $pos) === $this->method) {
+            return !$this->exclude;
+        }
+        return $this->exclude;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..1254b63b35c29848a7e1efb059bcba79f07bcf17
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Filter;
+
+use ReflectionException;
+use ReflectionMethod;
+use Zend\Stdlib\Exception\InvalidArgumentException;
+
+class NumberOfParameterFilter implements FilterInterface
+{
+    /**
+     * The number of parameters beeing accepted
+     * @var int
+     */
+    protected $numberOfParameters = null;
+
+    /**
+     * @param int $numberOfParameters Number of accepted parameters
+     */
+    public function __construct($numberOfParameters = 0)
+    {
+        $this->numberOfParameters = (int) $numberOfParameters;
+    }
+
+    /**
+     * @param string $property the name of the property
+     * @return bool
+     * @throws InvalidArgumentException
+     */
+    public function filter($property)
+    {
+        try {
+            $reflectionMethod = new ReflectionMethod($property);
+        } catch (ReflectionException $exception) {
+            throw new InvalidArgumentException(
+                "Method $property doesn't exist"
+            );
+        }
+
+        return $reflectionMethod->getNumberOfParameters() === $this->numberOfParameters;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..ccd67ca54a4beb28486b0b344feeb9efa4643ab3
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link           http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license        http://framework.zend.com/license/new-bsd New BSD License
+ */
+namespace Zend\Stdlib\Hydrator\Filter;
+
+use InvalidArgumentException;
+use ReflectionException;
+use ReflectionMethod;
+use ReflectionParameter;
+
+/**
+ * Filter that includes methods which have no parameters or only optional parameters
+ */
+class OptionalParametersFilter implements FilterInterface
+{
+    /**
+     * Map of methods already analyzed
+     * by {@see \Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter::filter()},
+     * cached for performance reasons
+     *
+     * @var bool[]
+     */
+    protected static $propertiesCache = array();
+
+    /**
+     * {@inheritDoc}
+     */
+    public function filter($property)
+    {
+        if (isset(static::$propertiesCache[$property])) {
+            return static::$propertiesCache[$property];
+        }
+
+        try {
+            $reflectionMethod = new ReflectionMethod($property);
+        } catch (ReflectionException $exception) {
+            throw new InvalidArgumentException(sprintf('Method %s doesn\'t exist', $property));
+        }
+
+        $mandatoryParameters = array_filter(
+            $reflectionMethod->getParameters(),
+            function (ReflectionParameter $parameter) {
+                return ! $parameter->isOptional();
+            }
+        );
+
+        return static::$propertiesCache[$property] = empty($mandatoryParameters);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..380aade050ad7fd18f684f916d7876af81643a77
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Hydrator\Filter\FilterInterface;
+use Zend\Stdlib\Hydrator\Filter\FilterComposite;
+use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
+
+interface FilterEnabledInterface extends FilterProviderInterface
+{
+    /**
+     * Add a new filter to take care of what needs to be hydrated.
+     * To exclude e.g. the method getServiceLocator:
+     *
+     * <code>
+     * $composite->addFilter(
+     *     "servicelocator",
+     *     function ($property) {
+     *         list($class, $method) = explode('::', $property);
+     *         if ($method === 'getServiceLocator') {
+     *             return false;
+     *         }
+     *         return true;
+     *     },
+     *     FilterComposite::CONDITION_AND
+     * );
+     * </code>
+     *
+     * @param string $name Index in the composite
+     * @param callable|FilterInterface $filter
+     * @param int $condition
+     * @return FilterComposite
+     */
+    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR);
+
+    /**
+     * Check whether a specific filter exists at key $name or not
+     *
+     * @param string $name Index in the composite
+     * @return bool
+     */
+    public function hasFilter($name);
+
+    /**
+     * Remove a filter from the composition.
+     * To not extract "has" methods, you simply need to unregister it
+     *
+     * <code>
+     * $filterComposite->removeFilter('has');
+     * </code>
+     *
+     * @param $name
+     * @return FilterComposite
+     */
+    public function removeFilter($name);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7deff491ae575b2bdf728d94c37f94e40fac656
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+interface HydrationInterface
+{
+    /**
+     * Hydrate $object with the provided $data.
+     *
+     * @param  array $data
+     * @param  object $object
+     * @return object
+     */
+    public function hydrate(array $data, $object);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..d64782ea41ee2ed55cb2be38035a296883533acf
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+interface HydratorAwareInterface
+{
+    /**
+     * Set hydrator
+     *
+     * @param  HydratorInterface $hydrator
+     * @return HydratorAwareInterface
+     */
+    public function setHydrator(HydratorInterface $hydrator);
+
+    /**
+     * Retrieve hydrator
+     *
+     * @return HydratorInterface
+     */
+    public function getHydrator();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..9c772c277a3d451a5a29814ffa5a2c124fbaf1d1
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+trait HydratorAwareTrait
+{
+    /**
+     * Hydrator instance
+     *
+     * @var HydratorInterface
+     * @access protected
+     */
+    protected $hydrator = null;
+
+    /**
+     * Set hydrator
+     *
+     * @param  HydratorInterface $hydrator
+     * @return self
+     * @access public
+     */
+    public function setHydrator(HydratorInterface $hydrator)
+    {
+        $this->hydrator = $hydrator;
+
+        return $this;
+    }
+
+    /**
+     * Retrieve hydrator
+     *
+     * @param void
+     * @return null|HydratorInterface
+     * @access public
+     */
+    public function getHydrator()
+    {
+        return $this->hydrator;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc9983d9a5a6cc1d8c0d859cc548f4fd02a940b2
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Extractor\ExtractionInterface;
+
+interface HydratorInterface extends HydrationInterface, ExtractionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..44610f7c1e2c7ce7126f5675e88a17269c4eaec3
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+interface HydratorOptionsInterface
+{
+    /**
+     * @param  array|\Traversable $options
+     * @return HydratorOptionsInterface
+     */
+    public function setOptions($options);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b238e7ccb5b2fd46534f442b16ea7593d6a8ddd
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\ServiceManager\AbstractPluginManager;
+use Zend\Stdlib\Exception;
+
+/**
+ * Plugin manager implementation for hydrators.
+ *
+ * Enforces that adapters retrieved are instances of HydratorInterface
+ */
+class HydratorPluginManager extends AbstractPluginManager
+{
+    /**
+     * Whether or not to share by default
+     *
+     * @var bool
+     */
+    protected $shareByDefault = false;
+
+    /**
+     * Default aliases
+     *
+     * @var array
+     */
+    protected $aliases = array(
+        'delegatinghydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydrator',
+    );
+
+    /**
+     * Default set of adapters
+     *
+     * @var array
+     */
+    protected $invokableClasses = array(
+        'arrayserializable' => 'Zend\Stdlib\Hydrator\ArraySerializable',
+        'classmethods'      => 'Zend\Stdlib\Hydrator\ClassMethods',
+        'objectproperty'    => 'Zend\Stdlib\Hydrator\ObjectProperty',
+        'reflection'        => 'Zend\Stdlib\Hydrator\Reflection'
+    );
+
+    /**
+     * Default factory-based adapters
+     *
+     * @var array
+     */
+    protected $factories = array(
+        'Zend\Stdlib\Hydrator\DelegatingHydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydratorFactory',
+    );
+
+    /**
+     * {@inheritDoc}
+     */
+    public function validatePlugin($plugin)
+    {
+        if ($plugin instanceof HydratorInterface) {
+            // we're okay
+            return;
+        }
+
+        throw new Exception\RuntimeException(sprintf(
+            'Plugin of type %s is invalid; must implement Zend\Stdlib\Hydrator\HydratorInterface',
+            (is_object($plugin) ? get_class($plugin) : gettype($plugin))
+        ));
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..962303ae151dd49bb38e2347de2777ef7659f1d7
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+final class ArrayMapNamingStrategy implements NamingStrategyInterface
+{
+    /**
+     * @var string[]
+     */
+    private $extractionMap = array();
+
+    /**
+     * @var string[]
+     */
+    private $hydrationMap = array();
+
+    /**
+     * Constructor
+     *
+     * @param array $extractionMap A map of string keys and values for symmetric translation of hydrated
+     *                             and extracted field names
+     */
+    public function __construct(array $extractionMap)
+    {
+        $this->extractionMap = $extractionMap;
+        $this->hydrationMap  = array_flip($extractionMap);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function hydrate($name)
+    {
+        return isset($this->hydrationMap[$name]) ? $this->hydrationMap[$name] : $name;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function extract($name)
+    {
+        return isset($this->extractionMap[$name]) ? $this->extractionMap[$name] : $name;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..0887e9288b85b723be62aa8f829bbd1cc1687d1c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+final class CompositeNamingStrategy implements NamingStrategyInterface
+{
+    /**
+     * @var array
+     */
+    private $namingStrategies = array();
+
+    /**
+     * @var NamingStrategyInterface
+     */
+    private $defaultNamingStrategy;
+
+    /**
+     * @param NamingStrategyInterface[]    $strategies            indexed by the name they translate
+     * @param NamingStrategyInterface|null $defaultNamingStrategy
+     */
+    public function __construct(array $strategies, NamingStrategyInterface $defaultNamingStrategy = null)
+    {
+        $this->namingStrategies = array_map(
+            function (NamingStrategyInterface $strategy) {
+                // this callback is here only to ensure type-safety
+                return $strategy;
+            },
+            $strategies
+        );
+
+        $this->defaultNamingStrategy = $defaultNamingStrategy ?: new IdentityNamingStrategy();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function extract($name)
+    {
+        $strategy = isset($this->namingStrategies[$name])
+            ? $this->namingStrategies[$name]
+            : $this->defaultNamingStrategy;
+
+        return $strategy->extract($name);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function hydrate($name)
+    {
+        $strategy = isset($this->namingStrategies[$name])
+            ? $this->namingStrategies[$name]
+            : $this->defaultNamingStrategy;
+
+        return $strategy->hydrate($name);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..ee4b328d34d638e787ec9eca9d10e0c8a034269c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+final class IdentityNamingStrategy implements NamingStrategyInterface
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function hydrate($name)
+    {
+        return $name;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function extract($name)
+    {
+        return $name;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..27fbf321874e9f79040994fa79c3a452414fa50d
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+use Zend\Stdlib\Exception\InvalidArgumentException;
+
+class MapNamingStrategy implements NamingStrategyInterface
+{
+    /**
+     * Map for hydrate name conversion.
+     *
+     * @var array
+     */
+    protected $mapping = array();
+
+    /**
+     * Reversed map for extract name conversion.
+     *
+     * @var array
+     */
+    protected $reverse = array();
+
+    /**
+     * Initialize.
+     *
+     * @param array $mapping Map for name conversion on hydration
+     * @param array $reverse Reverse map for name conversion on extraction
+     */
+    public function __construct(array $mapping, array $reverse = null)
+    {
+        $this->mapping = $mapping;
+        $this->reverse = $reverse ?: $this->flipMapping($mapping);
+    }
+
+    /**
+     * Safelly flip mapping array.
+     *
+     * @param  array                    $array Array to flip
+     * @return array                    Flipped array
+     * @throws InvalidArgumentException
+     */
+    protected function flipMapping(array $array)
+    {
+        array_walk($array, function ($value) {
+            if (!is_string($value) && !is_int($value)) {
+                throw new InvalidArgumentException('Mapping array can\'t be flipped because of invalid value');
+            }
+        });
+
+        return array_flip($array);
+    }
+
+    /**
+     * Converts the given name so that it can be extracted by the hydrator.
+     *
+     * @param  string $name The original name
+     * @return mixed  The hydrated name
+     */
+    public function hydrate($name)
+    {
+        if (array_key_exists($name, $this->mapping)) {
+            return $this->mapping[$name];
+        }
+
+        return $name;
+    }
+
+    /**
+     * Converts the given name so that it can be hydrated by the hydrator.
+     *
+     * @param  string $name The original name
+     * @return mixed  The extracted name
+     */
+    public function extract($name)
+    {
+        if (array_key_exists($name, $this->reverse)) {
+            return $this->reverse[$name];
+        }
+
+        return $name;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff99385c19f98dbdbe641a003e5f7b02be787d6a
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+/**
+ * Allow property extraction / hydration for hydrator
+ *
+ * Interface PropertyStrategyInterface
+ * @package Zend\Stdlib\Hydrator\NamingStrategy
+ */
+interface NamingStrategyInterface
+{
+    /**
+     * Converts the given name so that it can be extracted by the hydrator.
+     *
+     * @param string $name   The original name
+     * @param object $object (optional) The original object for context.
+     * @return mixed         The hydrated name
+     */
+    public function hydrate($name);
+
+    /**
+     * Converts the given name so that it can be hydrated by the hydrator.
+     *
+     * @param string $name The original name
+     * @param array  $data (optional) The original data for context.
+     * @return mixed The extracted name
+     */
+    public function extract($name);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..023b4eec76a6b89616acfe35554e6fe6b45af5fa
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+use Zend\Filter\FilterChain;
+
+class UnderscoreNamingStrategy implements NamingStrategyInterface
+{
+    /**
+     * @var FilterChain|null
+     */
+    protected static $camelCaseToUnderscoreFilter;
+
+    /**
+     * @var FilterChain|null
+     */
+    protected static $underscoreToStudlyCaseFilter;
+
+    /**
+     * Remove underscores and capitalize letters
+     *
+     * @param  string $name
+     * @return string
+     */
+    public function hydrate($name)
+    {
+        return $this->getUnderscoreToStudlyCaseFilter()->filter($name);
+    }
+
+    /**
+     * Remove capitalized letters and prepend underscores.
+     *
+     * @param  string $name
+     * @return string
+     */
+    public function extract($name)
+    {
+        return $this->getCamelCaseToUnderscoreFilter()->filter($name);
+    }
+
+    /**
+     * @return FilterChain
+     */
+    protected function getUnderscoreToStudlyCaseFilter()
+    {
+        if (static::$underscoreToStudlyCaseFilter instanceof FilterChain) {
+            return static::$underscoreToStudlyCaseFilter;
+        }
+
+        $filter = new FilterChain();
+
+        $filter->attachByName('WordUnderscoreToStudlyCase');
+
+        return static::$underscoreToStudlyCaseFilter = $filter;
+    }
+
+    /**
+     * @return FilterChain
+     */
+    protected function getCamelCaseToUnderscoreFilter()
+    {
+        if (static::$camelCaseToUnderscoreFilter instanceof FilterChain) {
+            return static::$camelCaseToUnderscoreFilter;
+        }
+
+        $filter = new FilterChain();
+
+        $filter->attachByName('WordCamelCaseToUnderscore');
+        $filter->attachByName('StringToLower');
+
+        return static::$camelCaseToUnderscoreFilter = $filter;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..f9c6288a760b0948d3f52d27df6239608adfcce7
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
+
+interface NamingStrategyEnabledInterface
+{
+    /**
+     * Adds the given naming strategy
+     *
+     * @param NamingStrategyInterface $strategy The naming to register.
+     * @return NamingStrategyEnabledInterface
+     */
+    public function setNamingStrategy(NamingStrategyInterface $strategy);
+
+    /**
+     * Gets the naming strategy.
+     *
+     * @return NamingStrategyInterface
+     */
+    public function getNamingStrategy();
+
+    /**
+     * Checks if a naming strategy exists.
+     *
+     * @return bool
+     */
+    public function hasNamingStrategy();
+
+    /**
+     * Removes the naming with the given name.
+     *
+     * @return NamingStrategyEnabledInterface
+     */
+    public function removeNamingStrategy();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php
new file mode 100644
index 0000000000000000000000000000000000000000..c9f5260a5e8e0d8c4c4bc4f56a4c0ff92621296b
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Exception;
+use ReflectionClass;
+use ReflectionProperty;
+
+class ObjectProperty extends AbstractHydrator
+{
+    /**
+     * @var array[] indexed by class name and then property name
+     */
+    private static $skippedPropertiesCache = array();
+
+    /**
+     * {@inheritDoc}
+     *
+     * Extracts the accessible non-static properties of the given $object.
+     *
+     * @throws Exception\BadMethodCallException for a non-object $object
+     */
+    public function extract($object)
+    {
+        if (!is_object($object)) {
+            throw new Exception\BadMethodCallException(
+                sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
+            );
+        }
+
+        $data   = get_object_vars($object);
+        $filter = $this->getFilter();
+
+        foreach ($data as $name => $value) {
+            // Filter keys, removing any we don't want
+            if (! $filter->filter($name)) {
+                unset($data[$name]);
+                continue;
+            }
+
+            // Replace name if extracted differ
+            $extracted = $this->extractName($name, $object);
+
+            if ($extracted !== $name) {
+                unset($data[$name]);
+                $name = $extracted;
+            }
+
+            $data[$name] = $this->extractValue($name, $value, $object);
+        }
+
+        return $data;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Hydrate an object by populating public properties
+     *
+     * Hydrates an object by setting public properties of the object.
+     *
+     * @throws Exception\BadMethodCallException for a non-object $object
+     */
+    public function hydrate(array $data, $object)
+    {
+        if (!is_object($object)) {
+            throw new Exception\BadMethodCallException(
+                sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
+            );
+        }
+
+        $properties = & self::$skippedPropertiesCache[get_class($object)];
+
+        if (! isset($properties)) {
+            $reflection = new ReflectionClass($object);
+            $properties = array_fill_keys(
+                array_map(
+                    function (ReflectionProperty $property) {
+                        return $property->getName();
+                    },
+                    $reflection->getProperties(
+                        ReflectionProperty::IS_PRIVATE
+                        + ReflectionProperty::IS_PROTECTED
+                        + ReflectionProperty::IS_STATIC
+                    )
+                ),
+                true
+            );
+        }
+
+        foreach ($data as $name => $value) {
+            $property = $this->hydrateName($name, $data);
+
+            if (isset($properties[$property])) {
+                continue;
+            }
+
+            $object->$property = $this->hydrateValue($property, $value, $data);
+        }
+
+        return $object;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea8e2d215309c3d3cf56d43c74b56bbd22d9f157
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use ReflectionClass;
+use Zend\Stdlib\Exception;
+
+class Reflection extends AbstractHydrator
+{
+    /**
+     * Simple in-memory array cache of ReflectionProperties used.
+     * @var \ReflectionProperty[]
+     */
+    protected static $reflProperties = array();
+
+    /**
+     * Extract values from an object
+     *
+     * @param  object $object
+     * @return array
+     */
+    public function extract($object)
+    {
+        $result = array();
+        foreach (self::getReflProperties($object) as $property) {
+            $propertyName = $this->extractName($property->getName(), $object);
+            if (!$this->filterComposite->filter($propertyName)) {
+                continue;
+            }
+
+            $value = $property->getValue($object);
+            $result[$propertyName] = $this->extractValue($propertyName, $value, $object);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Hydrate $object with the provided $data.
+     *
+     * @param  array $data
+     * @param  object $object
+     * @return object
+     */
+    public function hydrate(array $data, $object)
+    {
+        $reflProperties = self::getReflProperties($object);
+        foreach ($data as $key => $value) {
+            $name = $this->hydrateName($key, $data);
+            if (isset($reflProperties[$name])) {
+                $reflProperties[$name]->setValue($object, $this->hydrateValue($name, $value, $data));
+            }
+        }
+        return $object;
+    }
+
+    /**
+     * Get a reflection properties from in-memory cache and lazy-load if
+     * class has not been loaded.
+     *
+     * @param  string|object $input
+     * @throws Exception\InvalidArgumentException
+     * @return \ReflectionProperty[]
+     */
+    protected static function getReflProperties($input)
+    {
+        if (is_object($input)) {
+            $input = get_class($input);
+        } elseif (!is_string($input)) {
+            throw new Exception\InvalidArgumentException('Input must be a string or an object.');
+        }
+
+        if (isset(static::$reflProperties[$input])) {
+            return static::$reflProperties[$input];
+        }
+
+        static::$reflProperties[$input] = array();
+        $reflClass                      = new ReflectionClass($input);
+        $reflProperties                 = $reflClass->getProperties();
+
+        foreach ($reflProperties as $property) {
+            $property->setAccessible(true);
+            static::$reflProperties[$input][$property->getName()] = $property;
+        }
+
+        return static::$reflProperties[$input];
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c29231f34c5c551ee84b61fd124bcd0ce3a19f1
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+use Zend\Stdlib\Exception\InvalidArgumentException;
+
+/**
+ * This Strategy extracts and hydrates int and string values to Boolean values
+ *
+ * @package Zend\Stdlib\Hydrator\Strategy
+ */
+final class BooleanStrategy implements StrategyInterface
+{
+    /**
+     * @var int|string
+     */
+    private $trueValue;
+
+    /**
+     * @var int|string
+     */
+    private $falseValue;
+
+    /**
+     * @param int|string $trueValue
+     * @param int|string $falseValue
+     * @throws InvalidArgumentException
+     */
+    public function __construct($trueValue, $falseValue)
+    {
+        if (!is_int($trueValue) && !is_string($trueValue)) {
+            throw new InvalidArgumentException(sprintf(
+                'Unable to instantiate BooleanStrategy. Expected int or string as $trueValue. %s was given',
+                is_object($trueValue) ? get_class($trueValue) : gettype($trueValue)
+            ));
+        }
+
+        if (!is_int($falseValue) && !is_string($falseValue)) {
+            throw new InvalidArgumentException(sprintf(
+                'Unable to instantiate BooleanStrategy. Expected int or string as $falseValue. %s was given',
+                is_object($falseValue) ? get_class($falseValue) : gettype($falseValue)
+            ));
+        }
+
+        $this->trueValue  = $trueValue;
+        $this->falseValue = $falseValue;
+    }
+
+    /**
+     * Converts the given value so that it can be extracted by the hydrator.
+     *
+     * @param  bool $value The original value.
+     * @throws InvalidArgumentException
+     * @return int|string Returns the value that should be extracted.
+     */
+    public function extract($value)
+    {
+        if (!is_bool($value)) {
+            throw new InvalidArgumentException(sprintf(
+                'Unable to extract. Expected bool. %s was given.',
+                is_object($value) ? get_class($value) : gettype($value)
+            ));
+        }
+
+        return $value === true ? $this->trueValue : $this->falseValue;
+    }
+
+    /**
+     * Converts the given value so that it can be hydrated by the hydrator.
+     *
+     * @param  int|string $value The original value.
+     * @throws InvalidArgumentException
+     * @return bool Returns the value that should be hydrated.
+     */
+    public function hydrate($value)
+    {
+        if (!is_string($value) && !is_int($value)) {
+            throw new InvalidArgumentException(sprintf(
+                'Unable to hydrate. Expected string or int. %s was given.',
+                is_object($value) ? get_class($value) : gettype($value)
+            ));
+        }
+
+        if ($value === $this->trueValue) {
+            return true;
+        }
+
+        if ($value === $this->falseValue) {
+            return false;
+        }
+
+        throw new InvalidArgumentException(sprintf(
+            'Unexpected value %s can\'t be hydrated. Expect %s or %s as Value.',
+            $value,
+            $this->trueValue,
+            $this->falseValue
+        ));
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf456a7fc434991ba4ae49654cf05f8800de0da3
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+class ClosureStrategy implements StrategyInterface
+{
+    /**
+     * Function, used in extract method, default:
+     * function ($value) {
+     *     return $value;
+     * };
+     * @var callable
+     */
+    protected $extractFunc = null;
+
+    /**
+     * Function, used in hydrate method, default:
+     * function ($value) {
+     *     return $value;
+     * };
+     * @var callable
+     */
+    protected $hydrateFunc = null;
+
+    /**
+     * You can describe how your values will extract and hydrate, like this:
+     * $hydrator->addStrategy('category', new ClosureStrategy(
+     *     function (Category $value) {
+     *         return (int) $value->id;
+     *     },
+     *     function ($value) {
+     *         return new Category((int) $value);
+     *     }
+     * ));
+     *
+     * @param callable $extractFunc - anonymous function, that extract values
+     * from object
+     * @param callable $hydrateFunc - anonymous function, that hydrate values
+     * into object
+     */
+    public function __construct($extractFunc = null, $hydrateFunc = null)
+    {
+        if (isset($extractFunc)) {
+            if (!is_callable($extractFunc)) {
+                throw new \Exception('$extractFunc must be callable');
+            }
+
+            $this->extractFunc = $extractFunc;
+        } else {
+            $this->extractFunc = function ($value) {
+                return $value;
+            };
+        }
+
+        if (isset($hydrateFunc)) {
+            if (!is_callable($hydrateFunc)) {
+                throw new \Exception('$hydrateFunc must be callable');
+            }
+
+            $this->hydrateFunc = $hydrateFunc;
+        } else {
+            $this->hydrateFunc = function ($value) {
+                return $value;
+            };
+        }
+    }
+
+    /**
+     * Converts the given value so that it can be extracted by the hydrator.
+     *
+     * @param  mixed $value  The original value.
+     * @param  array $object The object is optionally provided as context.
+     * @return mixed Returns the value that should be extracted.
+     */
+    public function extract($value, $object = null)
+    {
+        $func = $this->extractFunc;
+
+        return $func($value, $object);
+    }
+
+    /**
+     * Converts the given value so that it can be hydrated by the hydrator.
+     *
+     * @param  mixed $value The original value.
+     * @param  array $data  The whole data is optionally provided as context.
+     * @return mixed Returns the value that should be hydrated.
+     */
+    public function hydrate($value, $data = null)
+    {
+        $func = $this->hydrateFunc;
+
+        return $func($value, $data);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..62d92c588bc4d042e4e010152ef0485b53efb137
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+use DateTime;
+use DateTimeZone;
+
+final class DateTimeFormatterStrategy implements StrategyInterface
+{
+    /**
+     * @var string
+     */
+    private $format;
+
+    /**
+     * @var DateTimeZone|null
+     */
+    private $timezone;
+
+    /**
+     * Constructor
+     *
+     * @param string            $format
+     * @param DateTimeZone|null $timezone
+     */
+    public function __construct($format = DateTime::RFC3339, DateTimeZone $timezone = null)
+    {
+        $this->format   = (string) $format;
+        $this->timezone = $timezone;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Converts to date time string
+     *
+     * @param mixed|DateTime $value
+     *
+     * @return mixed|string
+     */
+    public function extract($value)
+    {
+        if ($value instanceof DateTime) {
+            return $value->format($this->format);
+        }
+
+        return $value;
+    }
+
+    /**
+     * Converts date time string to DateTime instance for injecting to object
+     *
+     * {@inheritDoc}
+     *
+     * @param mixed|string $value
+     *
+     * @return mixed|DateTime
+     */
+    public function hydrate($value)
+    {
+        if ($value === '' || $value === null) {
+            return;
+        }
+
+        if ($this->timezone) {
+            $hydrated = DateTime::createFromFormat($this->format, $value, $this->timezone);
+        } else {
+            $hydrated = DateTime::createFromFormat($this->format, $value);
+        }
+
+        return $hydrated ?: $value;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2c5c29b433a319a11e27f0b92f9fe0fe72a02ba
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+class DefaultStrategy implements StrategyInterface
+{
+    /**
+     * Converts the given value so that it can be extracted by the hydrator.
+     *
+     * @param mixed $value The original value.
+     * @return mixed Returns the value that should be extracted.
+     */
+    public function extract($value)
+    {
+        return $value;
+    }
+
+    /**
+     * Converts the given value so that it can be hydrated by the hydrator.
+     *
+     * @param mixed $value The original value.
+     * @return mixed Returns the value that should be hydrated.
+     */
+    public function hydrate($value)
+    {
+        return $value;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7b576ce3c0324a87729597ba2c3b099d548ba5c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy\Exception;
+
+interface ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e6510df45e0bfe39c0c53c9a9ca863caff894f4
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy\Exception;
+
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..49ec9c24b550d4ef7925abe0b18b998539bd34e1
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+final class ExplodeStrategy implements StrategyInterface
+{
+    /**
+     * @var string
+     */
+    private $valueDelimiter;
+
+    /**
+     * @var int|null
+     */
+    private $explodeLimit;
+
+    /**
+     * Constructor
+     *
+     * @param string   $delimiter    String that the values will be split upon
+     * @param int|null $explodeLimit Explode limit
+     */
+    public function __construct($delimiter = ',', $explodeLimit = null)
+    {
+        $this->setValueDelimiter($delimiter);
+
+        $this->explodeLimit = ($explodeLimit === null) ? null : (int) $explodeLimit;
+    }
+
+    /**
+     * Sets the delimiter string that the values will be split upon
+     *
+     * @param  string $delimiter
+     * @return self
+     */
+    private function setValueDelimiter($delimiter)
+    {
+        if (!is_string($delimiter)) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                '%s expects Delimiter to be string, %s provided instead',
+                __METHOD__,
+                is_object($delimiter) ? get_class($delimiter) : gettype($delimiter)
+            ));
+        }
+
+        if (empty($delimiter)) {
+            throw new Exception\InvalidArgumentException('Delimiter cannot be empty.');
+        }
+
+        $this->valueDelimiter = $delimiter;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Split a string by delimiter
+     *
+     * @param string|null $value
+     *
+     * @return string[]
+     *
+     * @throws Exception\InvalidArgumentException
+     */
+    public function hydrate($value)
+    {
+        if (null === $value) {
+            return array();
+        }
+
+        if (!(is_string($value) || is_numeric($value))) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                '%s expects argument 1 to be string, %s provided instead',
+                __METHOD__,
+                is_object($value) ? get_class($value) : gettype($value)
+            ));
+        }
+
+        if ($this->explodeLimit !== null) {
+            return explode($this->valueDelimiter, $value, $this->explodeLimit);
+        }
+
+        return explode($this->valueDelimiter, $value);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Join array elements with delimiter
+     *
+     * @param string[] $value The original value.
+     *
+     * @return string|null
+     */
+    public function extract($value)
+    {
+        if (!is_array($value)) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                '%s expects argument 1 to be array, %s provided instead',
+                __METHOD__,
+                is_object($value) ? get_class($value) : gettype($value)
+            ));
+        }
+
+        return empty($value) ? null : implode($this->valueDelimiter, $value);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..260efa3087b8e516d16d54a7ef28d2faa99d0966
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+use Zend\Stdlib\Exception\InvalidArgumentException;
+use Zend\Serializer\Adapter\AdapterInterface as SerializerAdapter;
+use Zend\Serializer\Serializer as SerializerFactory;
+
+class SerializableStrategy implements StrategyInterface
+{
+    /**
+     * @var string|SerializerAdapter
+     */
+    protected $serializer;
+
+    /**
+     * @var array
+     */
+    protected $serializerOptions = array();
+
+    /**
+     *
+     * @param mixed $serializer string or SerializerAdapter
+     * @param mixed $serializerOptions
+     */
+    public function __construct($serializer, $serializerOptions = null)
+    {
+        $this->setSerializer($serializer);
+        if ($serializerOptions) {
+            $this->setSerializerOptions($serializerOptions);
+        }
+    }
+
+    /**
+     * Serialize the given value so that it can be extracted by the hydrator.
+     *
+     * @param mixed $value The original value.
+     * @return mixed Returns the value that should be extracted.
+     */
+    public function extract($value)
+    {
+        $serializer = $this->getSerializer();
+        return $serializer->serialize($value);
+    }
+
+    /**
+     * Unserialize the given value so that it can be hydrated by the hydrator.
+     *
+     * @param mixed $value The original value.
+     * @return mixed Returns the value that should be hydrated.
+     */
+    public function hydrate($value)
+    {
+        $serializer = $this->getSerializer();
+        return $serializer->unserialize($value);
+    }
+
+    /**
+     * Set serializer
+     *
+     * @param  string|SerializerAdapter $serializer
+     * @return SerializableStrategy
+     */
+    public function setSerializer($serializer)
+    {
+        if (!is_string($serializer) && !$serializer instanceof SerializerAdapter) {
+            throw new InvalidArgumentException(sprintf(
+                '%s expects either a string serializer name or Zend\Serializer\Adapter\AdapterInterface instance; '
+                . 'received "%s"',
+                __METHOD__,
+                (is_object($serializer) ? get_class($serializer) : gettype($serializer))
+            ));
+        }
+        $this->serializer = $serializer;
+        return $this;
+    }
+
+    /**
+     * Get serializer
+     *
+     * @return SerializerAdapter
+     */
+    public function getSerializer()
+    {
+        if (is_string($this->serializer)) {
+            $options = $this->getSerializerOptions();
+            $this->setSerializer(SerializerFactory::factory($this->serializer, $options));
+        } elseif (null === $this->serializer) {
+            $this->setSerializer(SerializerFactory::getDefaultAdapter());
+        }
+
+        return $this->serializer;
+    }
+
+    /**
+     * Set configuration options for instantiating a serializer adapter
+     *
+     * @param  mixed $serializerOptions
+     * @return SerializableStrategy
+     */
+    public function setSerializerOptions($serializerOptions)
+    {
+        $this->serializerOptions = $serializerOptions;
+        return $this;
+    }
+
+    /**
+     * Get configuration options for instantiating a serializer adapter
+     *
+     * @return mixed
+     */
+    public function getSerializerOptions()
+    {
+        return $this->serializerOptions;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php
new file mode 100644
index 0000000000000000000000000000000000000000..a9316bbd7c0c1581881a97f6a09b94c543de0ac9
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+use Traversable;
+use Zend\Stdlib\ArrayUtils;
+
+final class StrategyChain implements StrategyInterface
+{
+    /**
+     * Strategy chain for extraction
+     *
+     * @var StrategyInterface[]
+     */
+    private $extractionStrategies;
+
+    /**
+     * Strategy chain for hydration
+     *
+     * @var StrategyInterface[]
+     */
+    private $hydrationStrategies;
+
+    /**
+     * Constructor
+     *
+     * @param array|Traversable $extractionStrategies
+     */
+    public function __construct($extractionStrategies)
+    {
+        $extractionStrategies = ArrayUtils::iteratorToArray($extractionStrategies);
+        $this->extractionStrategies = array_map(
+            function (StrategyInterface $strategy) {
+                // this callback is here only to ensure type-safety
+                return $strategy;
+            },
+            $extractionStrategies
+        );
+
+        $this->hydrationStrategies = array_reverse($extractionStrategies);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function extract($value)
+    {
+        foreach ($this->extractionStrategies as $strategy) {
+            $value = $strategy->extract($value);
+        }
+
+        return $value;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function hydrate($value)
+    {
+        foreach ($this->hydrationStrategies as $strategy) {
+            $value = $strategy->hydrate($value);
+        }
+
+        return $value;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..562ec4bd6c12ef761eb3d7e6d5088b0c177dbf0e
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\Strategy;
+
+/**
+ * @todo v3.0, add optional object/data to extract/hydrate.
+ */
+interface StrategyInterface
+{
+    /**
+     * Converts the given value so that it can be extracted by the hydrator.
+     *
+     * @param mixed   $value The original value.
+     * @param object $object (optional) The original object for context.
+     * @return mixed Returns the value that should be extracted.
+     */
+    public function extract($value);
+
+    /**
+     * Converts the given value so that it can be hydrated by the hydrator.
+     *
+     * @param mixed $value The original value.
+     * @param array  $data (optional) The original data for context.
+     * @return mixed Returns the value that should be hydrated.
+     */
+    public function hydrate($value);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f29b16a6dda73f76481b4dee5b20f7f11f7cace
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
+
+interface StrategyEnabledInterface
+{
+    /**
+     * Adds the given strategy under the given name.
+     *
+     * @param string $name The name of the strategy to register.
+     * @param StrategyInterface $strategy The strategy to register.
+     * @return StrategyEnabledInterface
+     */
+    public function addStrategy($name, StrategyInterface $strategy);
+
+    /**
+     * Gets the strategy with the given name.
+     *
+     * @param string $name The name of the strategy to get.
+     * @return StrategyInterface
+     */
+    public function getStrategy($name);
+
+    /**
+     * Checks if the strategy with the given name exists.
+     *
+     * @param string $name The name of the strategy to check for.
+     * @return bool
+     */
+    public function hasStrategy($name);
+
+    /**
+     * Removes the strategy with the given name.
+     *
+     * @param string $name The name of the strategy to remove.
+     * @return StrategyEnabledInterface
+     */
+    public function removeStrategy($name);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/InitializableInterface.php b/core/vendor/zendframework/zend-stdlib/src/InitializableInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..f78bedef30168b8cfe8c76310f2b0349d1a56314
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/InitializableInterface.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+/**
+ * Interface to allow objects to have initialization logic
+ */
+interface InitializableInterface
+{
+    /**
+     * Init an object
+     *
+     * @return void
+     */
+    public function init();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/JsonSerializable.php b/core/vendor/zendframework/zend-stdlib/src/JsonSerializable.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d6c2abe873a7ea45990109b6367747c0cfa1cc6
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/JsonSerializable.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+if (PHP_VERSION_ID < 50400) {
+    class_alias(
+        'Zend\Stdlib\JsonSerializable\PhpLegacyCompatibility',
+        'JsonSerializable'
+    );
+}
+
+/**
+ * Polyfill for JsonSerializable
+ *
+ * JsonSerializable was introduced in PHP 5.4.0.
+ *
+ * @see http://php.net/manual/class.jsonserializable.php
+ */
+interface JsonSerializable extends \JsonSerializable
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php b/core/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php
new file mode 100644
index 0000000000000000000000000000000000000000..ecc7525d4cd59cf1fafe43aea5b056ef0c3bb5ce
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\JsonSerializable;
+
+/**
+ * Interface compatible with the built-in JsonSerializable interface
+ *
+ * JsonSerializable was introduced in PHP 5.4.0.
+ *
+ * @see http://php.net/manual/class.jsonserializable.php
+ */
+interface PhpLegacyCompatibility
+{
+    /**
+     * Returns data which can be serialized by json_encode().
+     *
+     * @return mixed
+     * @see    http://php.net/manual/jsonserializable.jsonserialize.php
+     */
+    public function jsonSerialize();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Message.php b/core/vendor/zendframework/zend-stdlib/src/Message.php
new file mode 100644
index 0000000000000000000000000000000000000000..63ba7c7303c71bf660d6a64899bf2bf9813b2213
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Message.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Traversable;
+
+class Message implements MessageInterface
+{
+    /**
+     * @var array
+     */
+    protected $metadata = array();
+
+    /**
+     * @var string
+     */
+    protected $content = '';
+
+    /**
+     * Set message metadata
+     *
+     * Non-destructive setting of message metadata; always adds to the metadata, never overwrites
+     * the entire metadata container.
+     *
+     * @param  string|int|array|Traversable $spec
+     * @param  mixed $value
+     * @throws Exception\InvalidArgumentException
+     * @return Message
+     */
+    public function setMetadata($spec, $value = null)
+    {
+        if (is_scalar($spec)) {
+            $this->metadata[$spec] = $value;
+            return $this;
+        }
+        if (!is_array($spec) && !$spec instanceof Traversable) {
+            throw new Exception\InvalidArgumentException(sprintf(
+                'Expected a string, array, or Traversable argument in first position; received "%s"',
+                (is_object($spec) ? get_class($spec) : gettype($spec))
+            ));
+        }
+        foreach ($spec as $key => $value) {
+            $this->metadata[$key] = $value;
+        }
+        return $this;
+    }
+
+    /**
+     * Retrieve all metadata or a single metadatum as specified by key
+     *
+     * @param  null|string|int $key
+     * @param  null|mixed $default
+     * @throws Exception\InvalidArgumentException
+     * @return mixed
+     */
+    public function getMetadata($key = null, $default = null)
+    {
+        if (null === $key) {
+            return $this->metadata;
+        }
+
+        if (!is_scalar($key)) {
+            throw new Exception\InvalidArgumentException('Non-scalar argument provided for key');
+        }
+
+        if (array_key_exists($key, $this->metadata)) {
+            return $this->metadata[$key];
+        }
+
+        return $default;
+    }
+
+    /**
+     * Set message content
+     *
+     * @param  mixed $value
+     * @return Message
+     */
+    public function setContent($value)
+    {
+        $this->content = $value;
+        return $this;
+    }
+
+    /**
+     * Get message content
+     *
+     * @return mixed
+     */
+    public function getContent()
+    {
+        return $this->content;
+    }
+
+    /**
+     * @return string
+     */
+    public function toString()
+    {
+        $request = '';
+        foreach ($this->getMetadata() as $key => $value) {
+            $request .= sprintf(
+                "%s: %s\r\n",
+                (string) $key,
+                (string) $value
+            );
+        }
+        $request .= "\r\n" . $this->getContent();
+        return $request;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/MessageInterface.php b/core/vendor/zendframework/zend-stdlib/src/MessageInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..28d8857fcddd31b4d1d14c489ed75c79e13c2e1a
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/MessageInterface.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+interface MessageInterface
+{
+    /**
+     * Set metadata
+     *
+     * @param  string|int|array|\Traversable $spec
+     * @param  mixed $value
+     */
+    public function setMetadata($spec, $value = null);
+
+    /**
+     * Get metadata
+     *
+     * @param  null|string|int $key
+     * @return mixed
+     */
+    public function getMetadata($key = null);
+
+    /**
+     * Set content
+     *
+     * @param  mixed $content
+     * @return mixed
+     */
+    public function setContent($content);
+
+    /**
+     * Get content
+     *
+     * @return mixed
+     */
+    public function getContent();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php b/core/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..676a6e2b99169f3354535abeb6d24fe96aea2da2
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+interface ParameterObjectInterface
+{
+    /**
+     * @param string $key
+     * @param mixed $value
+     * @return void
+     */
+    public function __set($key, $value);
+
+    /**
+     * @param string $key
+     * @return mixed
+     */
+    public function __get($key);
+
+    /**
+     * @param string $key
+     * @return bool
+     */
+    public function __isset($key);
+
+    /**
+     * @param string $key
+     * @return void
+     */
+    public function __unset($key);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Parameters.php b/core/vendor/zendframework/zend-stdlib/src/Parameters.php
new file mode 100644
index 0000000000000000000000000000000000000000..bef834a8a03ade6a62e21b78d9efeb1be79e35e4
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Parameters.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use ArrayObject as PhpArrayObject;
+
+class Parameters extends PhpArrayObject implements ParametersInterface
+{
+    /**
+     * Constructor
+     *
+     * Enforces that we have an array, and enforces parameter access to array
+     * elements.
+     *
+     * @param  array $values
+     */
+    public function __construct(array $values = null)
+    {
+        if (null === $values) {
+            $values = array();
+        }
+        parent::__construct($values, ArrayObject::ARRAY_AS_PROPS);
+    }
+
+    /**
+     * Populate from native PHP array
+     *
+     * @param  array $values
+     * @return void
+     */
+    public function fromArray(array $values)
+    {
+        $this->exchangeArray($values);
+    }
+
+    /**
+     * Populate from query string
+     *
+     * @param  string $string
+     * @return void
+     */
+    public function fromString($string)
+    {
+        $array = array();
+        parse_str($string, $array);
+        $this->fromArray($array);
+    }
+
+    /**
+     * Serialize to native PHP array
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        return $this->getArrayCopy();
+    }
+
+    /**
+     * Serialize to query string
+     *
+     * @return string
+     */
+    public function toString()
+    {
+        return http_build_query($this);
+    }
+
+    /**
+     * Retrieve by key
+     *
+     * Returns null if the key does not exist.
+     *
+     * @param  string $name
+     * @return mixed
+     */
+    public function offsetGet($name)
+    {
+        if ($this->offsetExists($name)) {
+            return parent::offsetGet($name);
+        }
+        return;
+    }
+
+    /**
+     * @param string $name
+     * @param mixed $default optional default value
+     * @return mixed
+     */
+    public function get($name, $default = null)
+    {
+        if ($this->offsetExists($name)) {
+            return parent::offsetGet($name);
+        }
+        return $default;
+    }
+
+    /**
+     * @param string $name
+     * @param mixed $value
+     * @return Parameters
+     */
+    public function set($name, $value)
+    {
+        $this[$name] = $value;
+        return $this;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ParametersInterface.php b/core/vendor/zendframework/zend-stdlib/src/ParametersInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..feeda580735f9607bec0fcc2ada8b47b7eb3a93a
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ParametersInterface.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use ArrayAccess;
+use Countable;
+use Serializable;
+use Traversable;
+
+/*
+ * Basically, an ArrayObject. You could simply define something like:
+ *     class QueryParams extends ArrayObject implements Parameters {}
+ * and have 90% of the functionality
+ */
+interface ParametersInterface extends ArrayAccess, Countable, Serializable, Traversable
+{
+    /**
+     * Constructor
+     *
+     * @param array $values
+     */
+    public function __construct(array $values = null);
+
+    /**
+     * From array
+     *
+     * Allow deserialization from standard array
+     *
+     * @param array $values
+     * @return mixed
+     */
+    public function fromArray(array $values);
+
+    /**
+     * From string
+     *
+     * Allow deserialization from raw body; e.g., for PUT requests
+     *
+     * @param $string
+     * @return mixed
+     */
+    public function fromString($string);
+
+    /**
+     * To array
+     *
+     * Allow serialization back to standard array
+     *
+     * @return mixed
+     */
+    public function toArray();
+
+    /**
+     * To string
+     *
+     * Allow serialization to query format; e.g., for PUT or POST requests
+     *
+     * @return mixed
+     */
+    public function toString();
+
+    /**
+     * Get
+     *
+     * @param string $name
+     * @param mixed|null $default
+     * @return mixed
+     */
+    public function get($name, $default = null);
+
+    /**
+     * Set
+     *
+     * @param string $name
+     * @param mixed $value
+     * @return ParametersInterface
+     */
+    public function set($name, $value);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/PriorityList.php b/core/vendor/zendframework/zend-stdlib/src/PriorityList.php
new file mode 100644
index 0000000000000000000000000000000000000000..172af68d81396686d1b5c9678f86d61d9fa5bce3
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/PriorityList.php
@@ -0,0 +1,271 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Countable;
+use Iterator;
+
+class PriorityList implements Iterator, Countable
+{
+    const EXTR_DATA     = 0x00000001;
+    const EXTR_PRIORITY = 0x00000002;
+    const EXTR_BOTH     = 0x00000003;
+    /**
+     * Internal list of all items.
+     *
+     * @var array[]
+     */
+    protected $items = array();
+
+    /**
+     * Serial assigned to items to preserve LIFO.
+     *
+     * @var int
+     */
+    protected $serial = 0;
+
+    /**
+     * Serial order mode
+     * @var integer
+     */
+    protected $isLIFO = 1;
+
+    /**
+     * Internal counter to avoid usage of count().
+     *
+     * @var int
+     */
+    protected $count = 0;
+
+    /**
+     * Whether the list was already sorted.
+     *
+     * @var bool
+     */
+    protected $sorted = false;
+
+    /**
+     * Insert a new item.
+     *
+     * @param  string  $name
+     * @param  mixed   $value
+     * @param  int     $priority
+     *
+     * @return void
+     */
+    public function insert($name, $value, $priority = 0)
+    {
+        $this->sorted = false;
+        $this->count++;
+
+        $this->items[$name] = array(
+            'data'     => $value,
+            'priority' => (int) $priority,
+            'serial'   => $this->serial++,
+        );
+    }
+
+    /**
+     * @param string $name
+     * @param int    $priority
+     *
+     * @return $this
+     *
+     * @throws \Exception
+     */
+    public function setPriority($name, $priority)
+    {
+        if (!isset($this->items[$name])) {
+            throw new \Exception("item $name not found");
+        }
+
+        $this->items[$name]['priority'] = (int) $priority;
+        $this->sorted                   = false;
+
+        return $this;
+    }
+
+    /**
+     * Remove a item.
+     *
+     * @param  string $name
+     * @return void
+     */
+    public function remove($name)
+    {
+        if (isset($this->items[$name])) {
+            $this->count--;
+        }
+
+        unset($this->items[$name]);
+    }
+
+    /**
+     * Remove all items.
+     *
+     * @return void
+     */
+    public function clear()
+    {
+        $this->items  = array();
+        $this->serial = 0;
+        $this->count  = 0;
+        $this->sorted = false;
+    }
+
+    /**
+     * Get a item.
+     *
+     * @param  string $name
+     * @return mixed
+     */
+    public function get($name)
+    {
+        if (!isset($this->items[$name])) {
+            return;
+        }
+
+        return $this->items[$name]['data'];
+    }
+
+    /**
+     * Sort all items.
+     *
+     * @return void
+     */
+    protected function sort()
+    {
+        if (!$this->sorted) {
+            uasort($this->items, array($this, 'compare'));
+            $this->sorted = true;
+        }
+    }
+
+    /**
+     * Compare the priority of two items.
+     *
+     * @param  array $item1,
+     * @param  array $item2
+     * @return int
+     */
+    protected function compare(array $item1, array $item2)
+    {
+        return ($item1['priority'] === $item2['priority'])
+            ? ($item1['serial']   > $item2['serial']   ? -1 : 1) * $this->isLIFO
+            : ($item1['priority'] > $item2['priority'] ? -1 : 1);
+    }
+
+    /**
+     * Get/Set serial order mode
+     *
+     * @param bool|null $flag
+     *
+     * @return bool
+     */
+    public function isLIFO($flag = null)
+    {
+        if ($flag !== null) {
+            $isLifo = $flag === true ? 1 : -1;
+
+            if ($isLifo !== $this->isLIFO) {
+                $this->isLIFO = $isLifo;
+                $this->sorted = false;
+            }
+        }
+
+        return 1 === $this->isLIFO;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function rewind()
+    {
+        $this->sort();
+        reset($this->items);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function current()
+    {
+        $this->sorted || $this->sort();
+        $node = current($this->items);
+
+        return $node ? $node['data'] : false;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function key()
+    {
+        $this->sorted || $this->sort();
+        return key($this->items);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function next()
+    {
+        $node = next($this->items);
+
+        return $node ? $node['data'] : false;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function valid()
+    {
+        return current($this->items) !== false;
+    }
+
+    /**
+     * @return self
+     */
+    public function getIterator()
+    {
+        return clone $this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function count()
+    {
+        return $this->count;
+    }
+
+    /**
+     * Return list as array
+     *
+     * @param int $flag
+     *
+     * @return array
+     */
+    public function toArray($flag = self::EXTR_DATA)
+    {
+        $this->sort();
+
+        if ($flag == self::EXTR_BOTH) {
+            return $this->items;
+        }
+
+        return array_map(
+            function ($item) use ($flag) {
+                return ($flag == PriorityList::EXTR_PRIORITY) ? $item['priority'] : $item['data'];
+            },
+            $this->items
+        );
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/PriorityQueue.php b/core/vendor/zendframework/zend-stdlib/src/PriorityQueue.php
new file mode 100644
index 0000000000000000000000000000000000000000..1baf44e895b6278a6b50684e4743fce8ab340dd9
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/PriorityQueue.php
@@ -0,0 +1,301 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Countable;
+use IteratorAggregate;
+use Serializable;
+
+/**
+ * Re-usable, serializable priority queue implementation
+ *
+ * SplPriorityQueue acts as a heap; on iteration, each item is removed from the
+ * queue. If you wish to re-use such a queue, you need to clone it first. This
+ * makes for some interesting issues if you wish to delete items from the queue,
+ * or, as already stated, iterate over it multiple times.
+ *
+ * This class aggregates items for the queue itself, but also composes an
+ * "inner" iterator in the form of an SplPriorityQueue object for performing
+ * the actual iteration.
+ */
+class PriorityQueue implements Countable, IteratorAggregate, Serializable
+{
+    const EXTR_DATA     = 0x00000001;
+    const EXTR_PRIORITY = 0x00000002;
+    const EXTR_BOTH     = 0x00000003;
+
+    /**
+     * Inner queue class to use for iteration
+     * @var string
+     */
+    protected $queueClass = 'Zend\Stdlib\SplPriorityQueue';
+
+    /**
+     * Actual items aggregated in the priority queue. Each item is an array
+     * with keys "data" and "priority".
+     * @var array
+     */
+    protected $items      = array();
+
+    /**
+     * Inner queue object
+     * @var SplPriorityQueue
+     */
+    protected $queue;
+
+    /**
+     * Insert an item into the queue
+     *
+     * Priority defaults to 1 (low priority) if none provided.
+     *
+     * @param  mixed $data
+     * @param  int $priority
+     * @return PriorityQueue
+     */
+    public function insert($data, $priority = 1)
+    {
+        $priority = (int) $priority;
+        $this->items[] = array(
+            'data'     => $data,
+            'priority' => $priority,
+        );
+        $this->getQueue()->insert($data, $priority);
+        return $this;
+    }
+
+    /**
+     * Remove an item from the queue
+     *
+     * This is different than {@link extract()}; its purpose is to dequeue an
+     * item.
+     *
+     * This operation is potentially expensive, as it requires
+     * re-initialization and re-population of the inner queue.
+     *
+     * Note: this removes the first item matching the provided item found. If
+     * the same item has been added multiple times, it will not remove other
+     * instances.
+     *
+     * @param  mixed $datum
+     * @return bool False if the item was not found, true otherwise.
+     */
+    public function remove($datum)
+    {
+        $found = false;
+        foreach ($this->items as $key => $item) {
+            if ($item['data'] === $datum) {
+                $found = true;
+                break;
+            }
+        }
+        if ($found) {
+            unset($this->items[$key]);
+            $this->queue = null;
+
+            if (!$this->isEmpty()) {
+                $queue = $this->getQueue();
+                foreach ($this->items as $item) {
+                    $queue->insert($item['data'], $item['priority']);
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Is the queue empty?
+     *
+     * @return bool
+     */
+    public function isEmpty()
+    {
+        return (0 === $this->count());
+    }
+
+    /**
+     * How many items are in the queue?
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->items);
+    }
+
+    /**
+     * Peek at the top node in the queue, based on priority.
+     *
+     * @return mixed
+     */
+    public function top()
+    {
+        return $this->getIterator()->top();
+    }
+
+    /**
+     * Extract a node from the inner queue and sift up
+     *
+     * @return mixed
+     */
+    public function extract()
+    {
+        return $this->getQueue()->extract();
+    }
+
+    /**
+     * Retrieve the inner iterator
+     *
+     * SplPriorityQueue acts as a heap, which typically implies that as items
+     * are iterated, they are also removed. This does not work for situations
+     * where the queue may be iterated multiple times. As such, this class
+     * aggregates the values, and also injects an SplPriorityQueue. This method
+     * retrieves the inner queue object, and clones it for purposes of
+     * iteration.
+     *
+     * @return SplPriorityQueue
+     */
+    public function getIterator()
+    {
+        $queue = $this->getQueue();
+        return clone $queue;
+    }
+
+    /**
+     * Serialize the data structure
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        return serialize($this->items);
+    }
+
+    /**
+     * Unserialize a string into a PriorityQueue object
+     *
+     * Serialization format is compatible with {@link Zend\Stdlib\SplPriorityQueue}
+     *
+     * @param  string $data
+     * @return void
+     */
+    public function unserialize($data)
+    {
+        foreach (unserialize($data) as $item) {
+            $this->insert($item['data'], $item['priority']);
+        }
+    }
+
+    /**
+     * Serialize to an array
+     *
+     * By default, returns only the item data, and in the order registered (not
+     * sorted). You may provide one of the EXTR_* flags as an argument, allowing
+     * the ability to return priorities or both data and priority.
+     *
+     * @param  int $flag
+     * @return array
+     */
+    public function toArray($flag = self::EXTR_DATA)
+    {
+        switch ($flag) {
+            case self::EXTR_BOTH:
+                return $this->items;
+            case self::EXTR_PRIORITY:
+                return array_map(function ($item) {
+                    return $item['priority'];
+                }, $this->items);
+            case self::EXTR_DATA:
+            default:
+                return array_map(function ($item) {
+                    return $item['data'];
+                }, $this->items);
+        }
+    }
+
+    /**
+     * Specify the internal queue class
+     *
+     * Please see {@link getIterator()} for details on the necessity of an
+     * internal queue class. The class provided should extend SplPriorityQueue.
+     *
+     * @param  string $class
+     * @return PriorityQueue
+     */
+    public function setInternalQueueClass($class)
+    {
+        $this->queueClass = (string) $class;
+        return $this;
+    }
+
+    /**
+     * Does the queue contain the given datum?
+     *
+     * @param  mixed $datum
+     * @return bool
+     */
+    public function contains($datum)
+    {
+        foreach ($this->items as $item) {
+            if ($item['data'] === $datum) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Does the queue have an item with the given priority?
+     *
+     * @param  int $priority
+     * @return bool
+     */
+    public function hasPriority($priority)
+    {
+        foreach ($this->items as $item) {
+            if ($item['priority'] === $priority) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get the inner priority queue instance
+     *
+     * @throws Exception\DomainException
+     * @return SplPriorityQueue
+     */
+    protected function getQueue()
+    {
+        if (null === $this->queue) {
+            $this->queue = new $this->queueClass();
+            if (!$this->queue instanceof \SplPriorityQueue) {
+                throw new Exception\DomainException(sprintf(
+                    'PriorityQueue expects an internal queue of type SplPriorityQueue; received "%s"',
+                    get_class($this->queue)
+                ));
+            }
+        }
+        return $this->queue;
+    }
+
+    /**
+     * Add support for deep cloning
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        if (null !== $this->queue) {
+            $this->queue = clone $this->queue;
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Request.php b/core/vendor/zendframework/zend-stdlib/src/Request.php
new file mode 100644
index 0000000000000000000000000000000000000000..7c0840395e31505772bee163189c1689af895aa9
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Request.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+class Request extends Message implements RequestInterface
+{
+    // generic request implementation
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/RequestInterface.php b/core/vendor/zendframework/zend-stdlib/src/RequestInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2bac316d4ce4cae2f05280b278d4b6457904d0a
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/RequestInterface.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+interface RequestInterface extends MessageInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/Response.php b/core/vendor/zendframework/zend-stdlib/src/Response.php
new file mode 100644
index 0000000000000000000000000000000000000000..f3074bad5e9f3263610441a9761f1deae6061f4a
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/Response.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+class Response extends Message implements ResponseInterface
+{
+    // generic response implementation
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/ResponseInterface.php b/core/vendor/zendframework/zend-stdlib/src/ResponseInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..fe94d3043a2874239cd36cf376fc9ca92e2b7b06
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/ResponseInterface.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+interface ResponseInterface extends MessageInterface
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php b/core/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php
new file mode 100644
index 0000000000000000000000000000000000000000..029d8e9f059a3ab049f67dbc5f534bac718bed97
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Serializable;
+
+/**
+ * Serializable version of SplPriorityQueue
+ *
+ * Also, provides predictable heap order for datums added with the same priority
+ * (i.e., they will be emitted in the same order they are enqueued).
+ */
+class SplPriorityQueue extends \SplPriorityQueue implements Serializable
+{
+    /**
+     * @var int Seed used to ensure queue order for items of the same priority
+     */
+    protected $serial = PHP_INT_MAX;
+
+    /**
+     * Insert a value with a given priority
+     *
+     * Utilizes {@var $serial} to ensure that values of equal priority are
+     * emitted in the same order in which they are inserted.
+     *
+     * @param  mixed $datum
+     * @param  mixed $priority
+     * @return void
+     */
+    public function insert($datum, $priority)
+    {
+        if (!is_array($priority)) {
+            $priority = array($priority, $this->serial--);
+        }
+        parent::insert($datum, $priority);
+    }
+
+    /**
+     * Serialize to an array
+     *
+     * Array will be priority => data pairs
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        $array = array();
+        foreach (clone $this as $item) {
+            $array[] = $item;
+        }
+        return $array;
+    }
+
+    /**
+     * Serialize
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        $clone = clone $this;
+        $clone->setExtractFlags(self::EXTR_BOTH);
+
+        $data = array();
+        foreach ($clone as $item) {
+            $data[] = $item;
+        }
+
+        return serialize($data);
+    }
+
+    /**
+     * Deserialize
+     *
+     * @param  string $data
+     * @return void
+     */
+    public function unserialize($data)
+    {
+        foreach (unserialize($data) as $item) {
+            $this->insert($item['data'], $item['priority']);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/SplQueue.php b/core/vendor/zendframework/zend-stdlib/src/SplQueue.php
new file mode 100644
index 0000000000000000000000000000000000000000..029bc9f127310037589f03297a80ea15815f2bd3
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/SplQueue.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Serializable;
+
+/**
+ * Serializable version of SplQueue
+ */
+class SplQueue extends \SplQueue implements Serializable
+{
+    /**
+     * Return an array representing the queue
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        $array = array();
+        foreach ($this as $item) {
+            $array[] = $item;
+        }
+        return $array;
+    }
+
+    /**
+     * Serialize
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        return serialize($this->toArray());
+    }
+
+    /**
+     * Unserialize
+     *
+     * @param  string $data
+     * @return void
+     */
+    public function unserialize($data)
+    {
+        foreach (unserialize($data) as $item) {
+            $this->push($item);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/SplStack.php b/core/vendor/zendframework/zend-stdlib/src/SplStack.php
new file mode 100644
index 0000000000000000000000000000000000000000..fac77a5d0475c38c0325121a7879b4fd954fc9f4
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/SplStack.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Serializable;
+
+/**
+ * Serializable version of SplStack
+ */
+class SplStack extends \SplStack implements Serializable
+{
+    /**
+     * Serialize to an array representing the stack
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        $array = array();
+        foreach ($this as $item) {
+            $array[] = $item;
+        }
+        return $array;
+    }
+
+    /**
+     * Serialize
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        return serialize($this->toArray());
+    }
+
+    /**
+     * Unserialize
+     *
+     * @param  string $data
+     * @return void
+     */
+    public function unserialize($data)
+    {
+        foreach (unserialize($data) as $item) {
+            $this->unshift($item);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/StringUtils.php b/core/vendor/zendframework/zend-stdlib/src/StringUtils.php
new file mode 100644
index 0000000000000000000000000000000000000000..9bbb4a46e31fd20fe9f6968a5b076850a37f4e08
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/StringUtils.php
@@ -0,0 +1,187 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Zend\Stdlib\StringWrapper\StringWrapperInterface;
+
+/**
+ * Utility class for handling strings of different character encodings
+ * using available PHP extensions.
+ *
+ * Declared abstract, as we have no need for instantiation.
+ */
+abstract class StringUtils
+{
+    /**
+     * Ordered list of registered string wrapper instances
+     *
+     * @var StringWrapperInterface[]
+     */
+    protected static $wrapperRegistry = null;
+
+    /**
+     * A list of known single-byte character encodings (upper-case)
+     *
+     * @var string[]
+     */
+    protected static $singleByteEncodings = array(
+        'ASCII', '7BIT', '8BIT',
+        'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5',
+        'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10',
+        'ISO-8859-11', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
+        'CP-1251', 'CP-1252',
+        // TODO
+    );
+
+    /**
+     * Is PCRE compiled with Unicode support?
+     *
+     * @var bool
+     **/
+    protected static $hasPcreUnicodeSupport = null;
+
+    /**
+     * Get registered wrapper classes
+     *
+     * @return string[]
+     */
+    public static function getRegisteredWrappers()
+    {
+        if (static::$wrapperRegistry === null) {
+            static::$wrapperRegistry = array();
+
+            if (extension_loaded('intl')) {
+                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Intl';
+            }
+
+            if (extension_loaded('mbstring')) {
+                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\MbString';
+            }
+
+            if (extension_loaded('iconv')) {
+                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Iconv';
+            }
+
+            static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Native';
+        }
+
+        return static::$wrapperRegistry;
+    }
+
+    /**
+     * Register a string wrapper class
+     *
+     * @param string $wrapper
+     * @return void
+     */
+    public static function registerWrapper($wrapper)
+    {
+        $wrapper = (string) $wrapper;
+        if (!in_array($wrapper, static::$wrapperRegistry, true)) {
+            static::$wrapperRegistry[] = $wrapper;
+        }
+    }
+
+    /**
+     * Unregister a string wrapper class
+     *
+     * @param string $wrapper
+     * @return void
+     */
+    public static function unregisterWrapper($wrapper)
+    {
+        $index = array_search((string) $wrapper, static::$wrapperRegistry, true);
+        if ($index !== false) {
+            unset(static::$wrapperRegistry[$index]);
+        }
+    }
+
+    /**
+     * Reset all registered wrappers so the default wrappers will be used
+     *
+     * @return void
+     */
+    public static function resetRegisteredWrappers()
+    {
+        static::$wrapperRegistry = null;
+    }
+
+    /**
+     * Get the first string wrapper supporting the given character encoding
+     * and supports to convert into the given convert encoding.
+     *
+     * @param string      $encoding        Character encoding to support
+     * @param string|null $convertEncoding OPTIONAL character encoding to convert in
+     * @return StringWrapperInterface
+     * @throws Exception\RuntimeException If no wrapper supports given character encodings
+     */
+    public static function getWrapper($encoding = 'UTF-8', $convertEncoding = null)
+    {
+        foreach (static::getRegisteredWrappers() as $wrapperClass) {
+            if ($wrapperClass::isSupported($encoding, $convertEncoding)) {
+                $wrapper = new $wrapperClass($encoding, $convertEncoding);
+                $wrapper->setEncoding($encoding, $convertEncoding);
+                return $wrapper;
+            }
+        }
+
+        throw new Exception\RuntimeException(
+            'No wrapper found supporting "' . $encoding . '"'
+            . (($convertEncoding !== null) ? ' and "' . $convertEncoding . '"' : '')
+        );
+    }
+
+    /**
+     * Get a list of all known single-byte character encodings
+     *
+     * @return string[]
+     */
+    public static function getSingleByteEncodings()
+    {
+        return static::$singleByteEncodings;
+    }
+
+    /**
+     * Check if a given encoding is a known single-byte character encoding
+     *
+     * @param string $encoding
+     * @return bool
+     */
+    public static function isSingleByteEncoding($encoding)
+    {
+        return in_array(strtoupper($encoding), static::$singleByteEncodings);
+    }
+
+    /**
+     * Check if a given string is valid UTF-8 encoded
+     *
+     * @param string $str
+     * @return bool
+     */
+    public static function isValidUtf8($str)
+    {
+        return is_string($str) && ($str === '' || preg_match('/^./su', $str) == 1);
+    }
+
+    /**
+     * Is PCRE compiled with Unicode support?
+     *
+     * @return bool
+     */
+    public static function hasPcreUnicodeSupport()
+    {
+        if (static::$hasPcreUnicodeSupport === null) {
+            ErrorHandler::start();
+            static::$hasPcreUnicodeSupport = defined('PREG_BAD_UTF8_OFFSET_ERROR') && preg_match('/\pL/u', 'a') == 1;
+            ErrorHandler::stop();
+        }
+        return static::$hasPcreUnicodeSupport;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e395ccc5ae6784175ded8f07f5bd6f16e654ae7
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php
@@ -0,0 +1,269 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\StringWrapper;
+
+use Zend\Stdlib\Exception;
+use Zend\Stdlib\StringUtils;
+
+abstract class AbstractStringWrapper implements StringWrapperInterface
+{
+    /**
+     * The character encoding working on
+     * @var string|null
+     */
+    protected $encoding = 'UTF-8';
+
+    /**
+     * An optionally character encoding to convert to
+     * @var string|null
+     */
+    protected $convertEncoding;
+
+    /**
+     * Check if the given character encoding is supported by this wrapper
+     * and the character encoding to convert to is also supported.
+     *
+     * @param  string      $encoding
+     * @param  string|null $convertEncoding
+     * @return bool
+     */
+    public static function isSupported($encoding, $convertEncoding = null)
+    {
+        $supportedEncodings = static::getSupportedEncodings();
+
+        if (!in_array(strtoupper($encoding), $supportedEncodings)) {
+            return false;
+        }
+
+        if ($convertEncoding !== null && !in_array(strtoupper($convertEncoding), $supportedEncodings)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Set character encoding working with and convert to
+     *
+     * @param string      $encoding         The character encoding to work with
+     * @param string|null $convertEncoding  The character encoding to convert to
+     * @return StringWrapperInterface
+     */
+    public function setEncoding($encoding, $convertEncoding = null)
+    {
+        $supportedEncodings = static::getSupportedEncodings();
+
+        $encodingUpper = strtoupper($encoding);
+        if (!in_array($encodingUpper, $supportedEncodings)) {
+            throw new Exception\InvalidArgumentException(
+                'Wrapper doesn\'t support character encoding "' . $encoding . '"'
+            );
+        }
+
+        if ($convertEncoding !== null) {
+            $convertEncodingUpper = strtoupper($convertEncoding);
+            if (!in_array($convertEncodingUpper, $supportedEncodings)) {
+                throw new Exception\InvalidArgumentException(
+                    'Wrapper doesn\'t support character encoding "' . $convertEncoding . '"'
+                );
+            }
+
+            $this->convertEncoding = $convertEncodingUpper;
+        } else {
+            $this->convertEncoding = null;
+        }
+        $this->encoding = $encodingUpper;
+
+        return $this;
+    }
+
+    /**
+     * Get the defined character encoding to work with
+     *
+     * @return string
+     * @throws Exception\LogicException If no encoding was defined
+     */
+    public function getEncoding()
+    {
+        return $this->encoding;
+    }
+
+    /**
+     * Get the defined character encoding to convert to
+     *
+     * @return string|null
+    */
+    public function getConvertEncoding()
+    {
+        return $this->convertEncoding;
+    }
+
+    /**
+     * Convert a string from defined character encoding to the defined convert encoding
+     *
+     * @param string  $str
+     * @param bool $reverse
+     * @return string|false
+     */
+    public function convert($str, $reverse = false)
+    {
+        $encoding        = $this->getEncoding();
+        $convertEncoding = $this->getConvertEncoding();
+        if ($convertEncoding === null) {
+            throw new Exception\LogicException(
+                'No convert encoding defined'
+            );
+        }
+
+        if ($encoding === $convertEncoding) {
+            return $str;
+        }
+
+        $from = $reverse ? $convertEncoding : $encoding;
+        $to   = $reverse ? $encoding : $convertEncoding;
+        throw new Exception\RuntimeException(sprintf(
+            'Converting from "%s" to "%s" isn\'t supported by this string wrapper',
+            $from,
+            $to
+        ));
+    }
+
+    /**
+     * Wraps a string to a given number of characters
+     *
+     * @param  string  $string
+     * @param  int $width
+     * @param  string  $break
+     * @param  bool $cut
+     * @return string|false
+     */
+    public function wordWrap($string, $width = 75, $break = "\n", $cut = false)
+    {
+        $string = (string) $string;
+        if ($string === '') {
+            return '';
+        }
+
+        $break = (string) $break;
+        if ($break === '') {
+            throw new Exception\InvalidArgumentException('Break string cannot be empty');
+        }
+
+        $width = (int) $width;
+        if ($width === 0 && $cut) {
+            throw new Exception\InvalidArgumentException('Cannot force cut when width is zero');
+        }
+
+        if (StringUtils::isSingleByteEncoding($this->getEncoding())) {
+            return wordwrap($string, $width, $break, $cut);
+        }
+
+        $stringWidth = $this->strlen($string);
+        $breakWidth  = $this->strlen($break);
+
+        $result    = '';
+        $lastStart = $lastSpace = 0;
+
+        for ($current = 0; $current < $stringWidth; $current++) {
+            $char = $this->substr($string, $current, 1);
+
+            $possibleBreak = $char;
+            if ($breakWidth !== 1) {
+                $possibleBreak = $this->substr($string, $current, $breakWidth);
+            }
+
+            if ($possibleBreak === $break) {
+                $result    .= $this->substr($string, $lastStart, $current - $lastStart + $breakWidth);
+                $current   += $breakWidth - 1;
+                $lastStart  = $lastSpace = $current + 1;
+                continue;
+            }
+
+            if ($char === ' ') {
+                if ($current - $lastStart >= $width) {
+                    $result    .= $this->substr($string, $lastStart, $current - $lastStart) . $break;
+                    $lastStart  = $current + 1;
+                }
+
+                $lastSpace = $current;
+                continue;
+            }
+
+            if ($current - $lastStart >= $width && $cut && $lastStart >= $lastSpace) {
+                $result    .= $this->substr($string, $lastStart, $current - $lastStart) . $break;
+                $lastStart  = $lastSpace = $current;
+                continue;
+            }
+
+            if ($current - $lastStart >= $width && $lastStart < $lastSpace) {
+                $result    .= $this->substr($string, $lastStart, $lastSpace - $lastStart) . $break;
+                $lastStart  = $lastSpace = $lastSpace + 1;
+                continue;
+            }
+        }
+
+        if ($lastStart !== $current) {
+            $result .= $this->substr($string, $lastStart, $current - $lastStart);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Pad a string to a certain length with another string
+     *
+     * @param  string  $input
+     * @param  int $padLength
+     * @param  string  $padString
+     * @param  int $padType
+     * @return string
+     */
+    public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT)
+    {
+        if (StringUtils::isSingleByteEncoding($this->getEncoding())) {
+            return str_pad($input, $padLength, $padString, $padType);
+        }
+
+        $lengthOfPadding = $padLength - $this->strlen($input);
+        if ($lengthOfPadding <= 0) {
+            return $input;
+        }
+
+        $padStringLength = $this->strlen($padString);
+        if ($padStringLength === 0) {
+            return $input;
+        }
+
+        $repeatCount = floor($lengthOfPadding / $padStringLength);
+
+        if ($padType === STR_PAD_BOTH) {
+            $repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2;
+
+            $lastStringLength       = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength;
+            $lastStringLeftLength   = $lastStringRightLength = floor($lastStringLength / 2);
+            $lastStringRightLength += $lastStringLength % 2;
+
+            $lastStringLeft  = $this->substr($padString, 0, $lastStringLeftLength);
+            $lastStringRight = $this->substr($padString, 0, $lastStringRightLength);
+
+            return str_repeat($padString, $repeatCountLeft) . $lastStringLeft
+                . $input
+                . str_repeat($padString, $repeatCountRight) . $lastStringRight;
+        }
+
+        $lastString = $this->substr($padString, 0, $lengthOfPadding % $padStringLength);
+
+        if ($padType === STR_PAD_LEFT) {
+            return str_repeat($padString, $repeatCount) . $lastString . $input;
+        }
+
+        return $input . str_repeat($padString, $repeatCount) . $lastString;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php
new file mode 100644
index 0000000000000000000000000000000000000000..04930ff453d06fd79dbf9ad4d696b17d97af4863
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php
@@ -0,0 +1,289 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\StringWrapper;
+
+use Zend\Stdlib\Exception;
+
+class Iconv extends AbstractStringWrapper
+{
+    /**
+     * List of supported character sets (upper case)
+     *
+     * @var string[]
+     * @link http://www.gnu.org/software/libiconv/
+     */
+    protected static $encodings = array(
+        // European languages
+        'ASCII',
+        'ISO-8859-1',
+        'ISO-8859-2',
+        'ISO-8859-3',
+        'ISO-8859-4',
+        'ISO-8859-5',
+        'ISO-8859-7',
+        'ISO-8859-9',
+        'ISO-8859-10',
+        'ISO-8859-13',
+        'ISO-8859-14',
+        'ISO-8859-15',
+        'ISO-8859-16',
+        'KOI8-R',
+        'KOI8-U',
+        'KOI8-RU',
+        'CP1250',
+        'CP1251',
+        'CP1252',
+        'CP1253',
+        'CP1254',
+        'CP1257',
+        'CP850',
+        'CP866',
+        'CP1131',
+        'MACROMAN',
+        'MACCENTRALEUROPE',
+        'MACICELAND',
+        'MACCROATIAN',
+        'MACROMANIA',
+        'MACCYRILLIC',
+        'MACUKRAINE',
+        'MACGREEK',
+        'MACTURKISH',
+        'MACINTOSH',
+
+        // Semitic languages
+        'ISO-8859-6',
+        'ISO-8859-8',
+        'CP1255',
+        'CP1256',
+        'CP862',
+        'MACHEBREW',
+        'MACARABIC',
+
+        // Japanese
+        'EUC-JP',
+        'SHIFT_JIS',
+        'CP932',
+        'ISO-2022-JP',
+        'ISO-2022-JP-2',
+        'ISO-2022-JP-1',
+
+        // Chinese
+        'EUC-CN',
+        'HZ',
+        'GBK',
+        'CP936',
+        'GB18030',
+        'EUC-TW',
+        'BIG5',
+        'CP950',
+        'BIG5-HKSCS',
+        'BIG5-HKSCS:2004',
+        'BIG5-HKSCS:2001',
+        'BIG5-HKSCS:1999',
+        'ISO-2022-CN',
+        'ISO-2022-CN-EXT',
+
+        // Korean
+        'EUC-KR',
+        'CP949',
+        'ISO-2022-KR',
+        'JOHAB',
+
+        // Armenian
+        'ARMSCII-8',
+
+        // Georgian
+        'GEORGIAN-ACADEMY',
+        'GEORGIAN-PS',
+
+        // Tajik
+        'KOI8-T',
+
+        // Kazakh
+        'PT154',
+        'RK1048',
+
+        // Thai
+        'ISO-8859-11',
+        'TIS-620',
+        'CP874',
+        'MACTHAI',
+
+        // Laotian
+        'MULELAO-1',
+        'CP1133',
+
+        // Vietnamese
+        'VISCII',
+        'TCVN',
+        'CP1258',
+
+        // Platform specifics
+        'HP-ROMAN8',
+        'NEXTSTEP',
+
+        // Full Unicode
+        'UTF-8',
+        'UCS-2',
+        'UCS-2BE',
+        'UCS-2LE',
+        'UCS-4',
+        'UCS-4BE',
+        'UCS-4LE',
+        'UTF-16',
+        'UTF-16BE',
+        'UTF-16LE',
+        'UTF-32',
+        'UTF-32BE',
+        'UTF-32LE',
+        'UTF-7',
+        'C99',
+        'JAVA',
+
+        /* Commented out because that's internal encodings not existing in real world
+        // Full Unicode, in terms of uint16_t or uint32_t (with machine dependent endianness and alignment)
+        'UCS-2-INTERNAL',
+        'UCS-4-INTERNAL',
+
+        // Locale dependent, in terms of `char' or `wchar_t' (with machine dependent endianness and alignment,
+        // and with OS and locale dependent semantics)
+        'char',
+        'wchar_t',
+        '', // The empty encoding name is equivalent to "char": it denotes the locale dependent character encoding.
+        */
+
+        // When configured with the option --enable-extra-encodings,
+        // it also provides support for a few extra encodings:
+
+        // European languages
+        'CP437',
+        'CP737',
+        'CP775',
+        'CP852',
+        'CP853',
+        'CP855',
+        'CP857',
+        'CP858',
+        'CP860',
+        'CP861',
+        'CP863',
+        'CP865',
+        'CP869',
+        'CP1125',
+
+        // Semitic languages
+        'CP864',
+
+        // Japanese
+        'EUC-JISX0213',
+        'Shift_JISX0213',
+        'ISO-2022-JP-3',
+
+        // Chinese
+        'BIG5-2003', // (experimental)
+
+        // Turkmen
+        'TDS565',
+
+        // Platform specifics
+        'ATARIST',
+        'RISCOS-LATIN1',
+    );
+
+    /**
+     * Get a list of supported character encodings
+     *
+     * @return string[]
+     */
+    public static function getSupportedEncodings()
+    {
+        return static::$encodings;
+    }
+
+    /**
+     * Constructor
+     *
+     * @throws Exception\ExtensionNotLoadedException
+     */
+    public function __construct()
+    {
+        if (!extension_loaded('iconv')) {
+            throw new Exception\ExtensionNotLoadedException(
+                'PHP extension "iconv" is required for this wrapper'
+            );
+        }
+    }
+
+    /**
+     * Returns the length of the given string
+     *
+     * @param string $str
+     * @return int|false
+     */
+    public function strlen($str)
+    {
+        return iconv_strlen($str, $this->getEncoding());
+    }
+
+    /**
+     * Returns the portion of string specified by the start and length parameters
+     *
+     * @param string   $str
+     * @param int      $offset
+     * @param int|null $length
+     * @return string|false
+     */
+    public function substr($str, $offset = 0, $length = null)
+    {
+        return iconv_substr($str, $offset, $length, $this->getEncoding());
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @param int    $offset
+     * @return int|false
+     */
+    public function strpos($haystack, $needle, $offset = 0)
+    {
+        return iconv_strpos($haystack, $needle, $offset, $this->getEncoding());
+    }
+
+    /**
+     * Convert a string from defined encoding to the defined convert encoding
+     *
+     * @param string  $str
+     * @param bool $reverse
+     * @return string|false
+     */
+    public function convert($str, $reverse = false)
+    {
+        $encoding        = $this->getEncoding();
+        $convertEncoding = $this->getConvertEncoding();
+        if ($convertEncoding === null) {
+            throw new Exception\LogicException(
+                'No convert encoding defined'
+            );
+        }
+
+        if ($encoding === $convertEncoding) {
+            return $str;
+        }
+
+        $fromEncoding = $reverse ? $convertEncoding : $encoding;
+        $toEncoding   = $reverse ? $encoding : $convertEncoding;
+
+        // automatically add "//IGNORE" to not stop converting on invalid characters
+        // invalid characters triggers a notice anyway
+        return iconv($fromEncoding, $toEncoding . '//IGNORE', $str);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b01277367832995f8c3aecd290f31d16cc9f73c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\StringWrapper;
+
+use Zend\Stdlib\Exception;
+
+class Intl extends AbstractStringWrapper
+{
+    /**
+     * List of supported character sets (upper case)
+     *
+     * @var string[]
+     */
+    protected static $encodings = array('UTF-8');
+
+    /**
+     * Get a list of supported character encodings
+     *
+     * @return string[]
+     */
+    public static function getSupportedEncodings()
+    {
+        return static::$encodings;
+    }
+
+    /**
+     * Constructor
+     *
+     * @throws Exception\ExtensionNotLoadedException
+     */
+    public function __construct()
+    {
+        if (!extension_loaded('intl')) {
+            throw new Exception\ExtensionNotLoadedException(
+                'PHP extension "intl" is required for this wrapper'
+            );
+        }
+    }
+
+    /**
+     * Returns the length of the given string
+     *
+     * @param string $str
+     * @return int|false
+     */
+    public function strlen($str)
+    {
+        return grapheme_strlen($str);
+    }
+
+    /**
+     * Returns the portion of string specified by the start and length parameters
+     *
+     * @param string   $str
+     * @param int      $offset
+     * @param int|null $length
+     * @return string|false
+     */
+    public function substr($str, $offset = 0, $length = null)
+    {
+        // Due fix of PHP #62759 The third argument returns an empty string if is 0 or null.
+        if ($length !== null) {
+            return grapheme_substr($str, $offset, $length);
+        }
+
+        return grapheme_substr($str, $offset);
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @param int    $offset
+     * @return int|false
+     */
+    public function strpos($haystack, $needle, $offset = 0)
+    {
+        return grapheme_strpos($haystack, $needle, $offset);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php
new file mode 100644
index 0000000000000000000000000000000000000000..d6db18566d247dbbcab313b09ecd14902919c220
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\StringWrapper;
+
+use Zend\Stdlib\Exception;
+
+class MbString extends AbstractStringWrapper
+{
+    /**
+     * List of supported character sets (upper case)
+     *
+     * @var null|string[]
+     * @link http://php.net/manual/mbstring.supported-encodings.php
+     */
+    protected static $encodings = null;
+
+    /**
+     * Get a list of supported character encodings
+     *
+     * @return string[]
+     */
+    public static function getSupportedEncodings()
+    {
+        if (static::$encodings === null) {
+            static::$encodings = array_map('strtoupper', mb_list_encodings());
+
+            // FIXME: Converting â‚¬ (UTF-8) to ISO-8859-16 gives a wrong result
+            $indexIso885916 = array_search('ISO-8859-16', static::$encodings, true);
+            if ($indexIso885916 !== false) {
+                unset(static::$encodings[$indexIso885916]);
+            }
+        }
+
+        return static::$encodings;
+    }
+
+    /**
+     * Constructor
+     *
+     * @throws Exception\ExtensionNotLoadedException
+     */
+    public function __construct()
+    {
+        if (!extension_loaded('mbstring')) {
+            throw new Exception\ExtensionNotLoadedException(
+                'PHP extension "mbstring" is required for this wrapper'
+            );
+        }
+    }
+
+    /**
+     * Returns the length of the given string
+     *
+     * @param string $str
+     * @return int|false
+     */
+    public function strlen($str)
+    {
+        return mb_strlen($str, $this->getEncoding());
+    }
+
+    /**
+     * Returns the portion of string specified by the start and length parameters
+     *
+     * @param string   $str
+     * @param int      $offset
+     * @param int|null $length
+     * @return string|false
+     */
+    public function substr($str, $offset = 0, $length = null)
+    {
+        return mb_substr($str, $offset, $length, $this->getEncoding());
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @param int    $offset
+     * @return int|false
+     */
+    public function strpos($haystack, $needle, $offset = 0)
+    {
+        return mb_strpos($haystack, $needle, $offset, $this->getEncoding());
+    }
+
+    /**
+     * Convert a string from defined encoding to the defined convert encoding
+     *
+     * @param string  $str
+     * @param bool $reverse
+     * @return string|false
+     */
+    public function convert($str, $reverse = false)
+    {
+        $encoding        = $this->getEncoding();
+        $convertEncoding = $this->getConvertEncoding();
+
+        if ($convertEncoding === null) {
+            throw new Exception\LogicException(
+                'No convert encoding defined'
+            );
+        }
+
+        if ($encoding === $convertEncoding) {
+            return $str;
+        }
+
+        $fromEncoding = $reverse ? $convertEncoding : $encoding;
+        $toEncoding   = $reverse ? $encoding : $convertEncoding;
+        return mb_convert_encoding($str, $toEncoding, $fromEncoding);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php
new file mode 100644
index 0000000000000000000000000000000000000000..38b3c10a41c515f0358a32cd712677be54311f80
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\StringWrapper;
+
+use Zend\Stdlib\Exception;
+use Zend\Stdlib\StringUtils;
+
+class Native extends AbstractStringWrapper
+{
+    /**
+     * The character encoding working on
+     * (overwritten to change defaut encoding)
+     *
+     * @var string
+     */
+    protected $encoding = 'ASCII';
+
+    /**
+     * Check if the given character encoding is supported by this wrapper
+     * and the character encoding to convert to is also supported.
+     *
+     * @param  string      $encoding
+     * @param  string|null $convertEncoding
+     * @return bool
+     */
+    public static function isSupported($encoding, $convertEncoding = null)
+    {
+        $encodingUpper      = strtoupper($encoding);
+        $supportedEncodings = static::getSupportedEncodings();
+
+        if (!in_array($encodingUpper, $supportedEncodings)) {
+            return false;
+        }
+
+        // This adapter doesn't support to convert between encodings
+        if ($convertEncoding !== null && $encodingUpper !== strtoupper($convertEncoding)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Get a list of supported character encodings
+     *
+     * @return string[]
+     */
+    public static function getSupportedEncodings()
+    {
+        return StringUtils::getSingleByteEncodings();
+    }
+
+    /**
+     * Set character encoding working with and convert to
+     *
+     * @param string      $encoding         The character encoding to work with
+     * @param string|null $convertEncoding  The character encoding to convert to
+     * @return StringWrapperInterface
+     */
+    public function setEncoding($encoding, $convertEncoding = null)
+    {
+        $supportedEncodings = static::getSupportedEncodings();
+
+        $encodingUpper = strtoupper($encoding);
+        if (!in_array($encodingUpper, $supportedEncodings)) {
+            throw new Exception\InvalidArgumentException(
+                'Wrapper doesn\'t support character encoding "' . $encoding . '"'
+            );
+        }
+
+        if ($encodingUpper !== strtoupper($convertEncoding)) {
+            $this->convertEncoding = $encodingUpper;
+        }
+
+        if ($convertEncoding !== null) {
+            if ($encodingUpper !== strtoupper($convertEncoding)) {
+                throw new Exception\InvalidArgumentException(
+                    'Wrapper doesn\'t support to convert between character encodings'
+                );
+            }
+
+            $this->convertEncoding = $encodingUpper;
+        } else {
+            $this->convertEncoding = null;
+        }
+        $this->encoding = $encodingUpper;
+
+        return $this;
+    }
+
+    /**
+     * Returns the length of the given string
+     *
+     * @param string $str
+     * @return int|false
+     */
+    public function strlen($str)
+    {
+        return strlen($str);
+    }
+
+    /**
+     * Returns the portion of string specified by the start and length parameters
+     *
+     * @param string   $str
+     * @param int      $offset
+     * @param int|null $length
+     * @return string|false
+     */
+    public function substr($str, $offset = 0, $length = null)
+    {
+        return substr($str, $offset, $length);
+    }
+
+    /**
+     * Find the position of the first occurrence of a substring in a string
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @param int    $offset
+     * @return int|false
+     */
+    public function strpos($haystack, $needle, $offset = 0)
+    {
+        return strpos($haystack, $needle, $offset);
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..f25b3253fc3fd535435103e33338436a73195c24
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\StringWrapper;
+
+interface StringWrapperInterface
+{
+    /**
+     * Check if the given character encoding is supported by this wrapper
+     * and the character encoding to convert to is also supported.
+     *
+     * @param string      $encoding
+     * @param string|null $convertEncoding
+     */
+    public static function isSupported($encoding, $convertEncoding = null);
+
+    /**
+     * Get a list of supported character encodings
+     *
+     * @return string[]
+     */
+    public static function getSupportedEncodings();
+
+    /**
+     * Set character encoding working with and convert to
+     *
+     * @param string      $encoding         The character encoding to work with
+     * @param string|null $convertEncoding  The character encoding to convert to
+     * @return StringWrapperInterface
+     */
+    public function setEncoding($encoding, $convertEncoding = null);
+
+    /**
+     * Get the defined character encoding to work with (upper case)
+     *
+     * @return string
+     */
+    public function getEncoding();
+
+    /**
+     * Get the defined character encoding to convert to (upper case)
+     *
+     * @return string|null
+     */
+    public function getConvertEncoding();
+
+    /**
+     * Returns the length of the given string
+     *
+     * @param string $str
+     * @return int|false
+     */
+    public function strlen($str);
+
+    /**
+     * Returns the portion of string specified by the start and length parameters
+     *
+     * @param string   $str
+     * @param int      $offset
+     * @param int|null $length
+     * @return string|false
+     */
+    public function substr($str, $offset = 0, $length = null);
+
+    /**
+     * Find the position of the first occurrence of a substring in a string
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @param int    $offset
+     * @return int|false
+     */
+    public function strpos($haystack, $needle, $offset = 0);
+
+    /**
+     * Convert a string from defined encoding to the defined convert encoding
+     *
+     * @param string  $str
+     * @param bool $reverse
+     * @return string|false
+     */
+    public function convert($str, $reverse = false);
+
+    /**
+     * Wraps a string to a given number of characters
+     *
+     * @param  string  $str
+     * @param  int $width
+     * @param  string  $break
+     * @param  bool $cut
+     * @return string
+     */
+    public function wordWrap($str, $width = 75, $break = "\n", $cut = false);
+
+    /**
+     * Pad a string to a certain length with another string
+     *
+     * @param  string  $input
+     * @param  int $padLength
+     * @param  string  $padString
+     * @param  int $padType
+     * @return string
+     */
+    public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php b/core/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php
new file mode 100644
index 0000000000000000000000000000000000000000..f8670cc16b6c352d38369449e6a83f835312da92
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ * @deprecated
+ */
+
+/**
+ * Legacy purposes only, to prevent code that references it from breaking.
+ */
+trigger_error('Polyfill autoload support (file library/Zend/Stdlib/compatibility/autoload.php) is no longer necessary; please remove your require statement referencing this file', E_USER_DEPRECATED);
