diff --git a/core/composer.json b/core/composer.json
index 22c4062..bc204b4 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -22,7 +22,7 @@
     "twig/twig": "1.18.*",
     "doctrine/common": "~2.4.2",
     "doctrine/annotations": "1.2.*",
-    "guzzlehttp/guzzle": "~5.0",
+    "guzzlehttp/guzzle": "~6.0",
     "symfony-cmf/routing": "1.3.*",
     "easyrdf/easyrdf": "0.9.*",
     "phpunit/phpunit": "4.6.*",
@@ -31,8 +31,8 @@
     "stack/builder": "1.0.*",
     "egulias/email-validator": "1.2.*",
     "behat/mink": "~1.6",
-    "behat/mink-goutte-driver": "~1.1",
-    "fabpot/goutte": "^2.0.3",
+    "behat/mink-goutte-driver": "dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
+    "fabpot/goutte": "~3.1",
     "masterminds/html5": "~2.1"
   },
   "replace": {
diff --git a/core/composer.lock b/core/composer.lock
index 5363898..cde77c6 100644
--- a/core/composer.lock
+++ b/core/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "61a2b6dec8252d78e904d37fbf1637d7",
+    "hash": "b78946f37446c2bb9664a4ca6a4080b2",
     "packages": [
         {
             "name": "behat/mink",
@@ -118,22 +118,22 @@
         },
         {
             "name": "behat/mink-goutte-driver",
-            "version": "v1.1.0",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/minkphp/MinkGoutteDriver.git",
-                "reference": "2bf327b4166694ecaa8ae7f956cb6ae252ecf03e"
+                "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/2bf327b4166694ecaa8ae7f956cb6ae252ecf03e",
-                "reference": "2bf327b4166694ecaa8ae7f956cb6ae252ecf03e",
+                "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
+                "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
                 "shasum": ""
             },
             "require": {
                 "behat/mink": "~1.6@dev",
                 "behat/mink-browserkit-driver": "~1.2@dev",
-                "fabpot/goutte": "~1.0.4|~2.0",
+                "fabpot/goutte": "~1.0.4|~2.0|~3.1",
                 "php": ">=5.3.1"
             },
             "type": "mink-driver",
@@ -143,8 +143,8 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Behat\\Mink\\Driver": "src/"
+                "psr-4": {
+                    "Behat\\Mink\\Driver\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -166,7 +166,7 @@
                 "headless",
                 "testing"
             ],
-            "time": "2014-10-09 09:21:12"
+            "time": "2015-06-27 00:15:11"
         },
         {
             "name": "doctrine/annotations",
@@ -734,21 +734,21 @@
         },
         {
             "name": "fabpot/goutte",
-            "version": "v2.0.3",
+            "version": "v3.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/FriendsOfPHP/Goutte.git",
-                "reference": "65ab61eae03d670b93a9044ad2328eb81aa1bde5"
+                "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/65ab61eae03d670b93a9044ad2328eb81aa1bde5",
-                "reference": "65ab61eae03d670b93a9044ad2328eb81aa1bde5",
+                "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/d9a5a28782d30e9f4e20176caea58a1d459f2c71",
+                "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71",
                 "shasum": ""
             },
             "require": {
-                "guzzlehttp/guzzle": ">=4,<6",
-                "php": ">=5.4.0",
+                "guzzlehttp/guzzle": "^6.0",
+                "php": ">=5.5.0",
                 "symfony/browser-kit": "~2.1",
                 "symfony/css-selector": "~2.1",
                 "symfony/dom-crawler": "~2.1"
@@ -756,7 +756,7 @@
             "type": "application",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-master": "3.1-dev"
                 }
             },
             "autoload": {
@@ -779,38 +779,42 @@
             "keywords": [
                 "scraper"
             ],
-            "time": "2014-11-28 09:48:17"
+            "time": "2015-06-24 16:11:31"
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "5.2.0",
+            "version": "6.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "475b29ccd411f2fa8a408e64576418728c032cfa"
+                "reference": "f992b7b487a816c957d317442bed4966409873e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/475b29ccd411f2fa8a408e64576418728c032cfa",
-                "reference": "475b29ccd411f2fa8a408e64576418728c032cfa",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f992b7b487a816c957d317442bed4966409873e0",
+                "reference": "f992b7b487a816c957d317442bed4966409873e0",
                 "shasum": ""
             },
             "require": {
-                "guzzlehttp/ringphp": "~1.0",
-                "php": ">=5.4.0"
+                "guzzlehttp/promises": "^1.0.0",
+                "guzzlehttp/psr7": "^1.0.0",
+                "php": ">=5.5.0"
             },
             "require-dev": {
                 "ext-curl": "*",
-                "phpunit/phpunit": "~4.0",
-                "psr/log": "~1.0"
+                "phpunit/phpunit": "^4.0",
+                "psr/log": "^1.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-master": "6.0-dev"
                 }
             },
             "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
                 }
@@ -826,7 +830,7 @@
                     "homepage": "https://github.com/mtdowling"
                 }
             ],
-            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "description": "Guzzle is a PHP HTTP client library",
             "homepage": "http://guzzlephp.org/",
             "keywords": [
                 "client",
@@ -837,34 +841,28 @@
                 "rest",
                 "web service"
             ],
-            "time": "2015-01-28 01:03:29"
+            "time": "2015-05-27 16:57:51"
         },
         {
-            "name": "guzzlehttp/ringphp",
-            "version": "1.0.7",
+            "name": "guzzlehttp/promises",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/guzzle/RingPHP.git",
-                "reference": "52d868f13570a9a56e5fce6614e0ec75d0f13ac2"
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/52d868f13570a9a56e5fce6614e0ec75d0f13ac2",
-                "reference": "52d868f13570a9a56e5fce6614e0ec75d0f13ac2",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7",
+                "reference": "2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7",
                 "shasum": ""
             },
             "require": {
-                "guzzlehttp/streams": "~3.0",
-                "php": ">=5.4.0",
-                "react/promise": "~2.0"
+                "php": ">=5.5.0"
             },
             "require-dev": {
-                "ext-curl": "*",
                 "phpunit/phpunit": "~4.0"
             },
-            "suggest": {
-                "ext-curl": "Guzzle will use specific adapters if cURL is present"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -873,8 +871,11 @@
             },
             "autoload": {
                 "psr-4": {
-                    "GuzzleHttp\\Ring\\": "src/"
-                }
+                    "GuzzleHttp\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -887,25 +888,32 @@
                     "homepage": "https://github.com/mtdowling"
                 }
             ],
-            "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
-            "time": "2015-03-30 01:43:20"
+            "description": "Guzzle promises library",
+            "keywords": [
+                "promise"
+            ],
+            "time": "2015-06-24 16:16:25"
         },
         {
-            "name": "guzzlehttp/streams",
-            "version": "3.0.0",
+            "name": "guzzlehttp/psr7",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/guzzle/streams.git",
-                "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
-                "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/af0e1758de355eb113917ad79c3c0e3604bce4bd",
+                "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.0"
+                "php": ">=5.4.0",
+                "psr/http-message": "~1.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
             },
             "require-dev": {
                 "phpunit/phpunit": "~4.0"
@@ -913,13 +921,16 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "GuzzleHttp\\Stream\\": "src/"
-                }
+                    "GuzzleHttp\\Psr7\\": "src/"
+                },
+                "files": [
+                    "src/functions.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -932,13 +943,14 @@
                     "homepage": "https://github.com/mtdowling"
                 }
             ],
-            "description": "Provides a simple abstraction over streams of data",
-            "homepage": "http://guzzlephp.org/",
+            "description": "PSR-7 message implementation",
             "keywords": [
-                "Guzzle",
-                "stream"
+                "http",
+                "message",
+                "stream",
+                "uri"
             ],
-            "time": "2014-10-12 19:18:40"
+            "time": "2015-06-24 19:55:15"
         },
         {
             "name": "masterminds/html5",
@@ -1534,6 +1546,55 @@
             "time": "2015-04-02 05:36:41"
         },
         {
+            "name": "psr/http-message",
+            "version": "1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+                "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2015-05-04 20:22:00"
+        },
+        {
             "name": "psr/log",
             "version": "1.0.0",
             "source": {
@@ -3291,7 +3352,9 @@
     "packages-dev": [],
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": [],
+    "stability-flags": {
+        "behat/mink-goutte-driver": 20
+    },
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
diff --git a/core/vendor/behat/mink-goutte-driver/.travis.yml b/core/vendor/behat/mink-goutte-driver/.travis.yml
index b09e457..d21d960 100644
--- a/core/vendor/behat/mink-goutte-driver/.travis.yml
+++ b/core/vendor/behat/mink-goutte-driver/.travis.yml
@@ -2,6 +2,10 @@ language: php
 
 php: [5.3, 5.4, 5.5, 5.6, hhvm]
 
+before_install:
+  # Force using Goutte 2 on HHVM for now because Guzzle 6 is broken there
+  - if [ "hhvm" = "$TRAVIS_PHP_VERSION" ]; then composer require fabpot/goutte '~2' --no-update; fi
+
 before_script:
   - export WEB_FIXTURES_HOST=http://localhost
 
diff --git a/core/vendor/behat/mink-goutte-driver/README.md b/core/vendor/behat/mink-goutte-driver/README.md
index c7877c5..cba60a0 100755
--- a/core/vendor/behat/mink-goutte-driver/README.md
+++ b/core/vendor/behat/mink-goutte-driver/README.md
@@ -4,9 +4,9 @@ Mink Goutte Driver
 [![Latest Stable Version](https://poser.pugx.org/behat/mink-goutte-driver/v/stable.svg)](https://packagist.org/packages/behat/mink-goutte-driver)
 [![Latest Unstable Version](https://poser.pugx.org/behat/mink-goutte-driver/v/unstable.svg)](https://packagist.org/packages/behat/mink-goutte-driver)
 [![Total Downloads](https://poser.pugx.org/behat/mink-goutte-driver/downloads.svg)](https://packagist.org/packages/behat/mink-goutte-driver)
-[![Build Status](https://travis-ci.org/Behat/MinkGoutteDriver.svg?branch=master)](https://travis-ci.org/Behat/MinkGoutteDriver)
-[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/Behat/MinkGoutteDriver/badges/quality-score.png?s=ca141bb2cad18e74cf3d3b132b1a6aa0f3f004a5)](https://scrutinizer-ci.com/g/Behat/MinkGoutteDriver/)
-[![Code Coverage](https://scrutinizer-ci.com/g/Behat/MinkGoutteDriver/badges/coverage.png?s=ca2d17a948660bfaeb4a95bf1a709644305c54f3)](https://scrutinizer-ci.com/g/Behat/MinkGoutteDriver/)
+[![Build Status](https://travis-ci.org/minkphp/MinkGoutteDriver.svg?branch=master)](https://travis-ci.org/minkphp/MinkGoutteDriver)
+[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/minkphp/MinkGoutteDriver/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/minkphp/MinkGoutteDriver/)
+[![Code Coverage](https://scrutinizer-ci.com/g/minkphp/MinkGoutteDriver/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/minkphp/MinkGoutteDriver/)
 [![License](https://poser.pugx.org/behat/mink-goutte-driver/license.svg)](https://packagist.org/packages/behat/mink-goutte-driver)
 
 Usage Example
@@ -15,23 +15,28 @@ Usage Example
 ``` php
 <?php
 
+require "vendor/autoload.php";
+
 use Behat\Mink\Mink,
     Behat\Mink\Session,
     Behat\Mink\Driver\GoutteDriver,
     Behat\Mink\Driver\Goutte\Client as GoutteClient;
 
-$startUrl = 'http://example.com';
-
 $mink = new Mink(array(
-    'goutte' => new Session(new GoutteDriver(new GoutteClient($startUrl))),
+    'goutte' => new Session(new GoutteDriver(new GoutteClient())),
 ));
 
-$mink->getSession('goutte')->getPage()->findLink('Chat')->click();
+$session = $mink->getSession('goutte');
+$session->visit("http://php.net/");
+$session->getPage()->clickLink('Downloads');
+echo $session->getCurrentUrl() . PHP_EOL;
 ```
 
 Installation
 ------------
 
+Add a file composer.json with content:
+
 ``` json
 {
     "require": {
@@ -41,6 +46,8 @@ Installation
 }
 ```
 
+(or merge the above into your project's existing composer.json file)
+
 ``` bash
 $> curl -sS https://getcomposer.org/installer | php
 $> php composer.phar install
@@ -49,5 +56,5 @@ $> php composer.phar install
 Maintainers
 -----------
 
-* Konstantin Kudryashov [everzet](http://github.com/everzet)
-* Other [awesome developers](https://github.com/Behat/MinkGoutteDriver/graphs/contributors)
+* Christophe Coevoet [stof](https://github.com/stof)
+* Other [awesome developers](https://github.com/minkphp/MinkGoutteDriver/graphs/contributors)
diff --git a/core/vendor/behat/mink-goutte-driver/composer.json b/core/vendor/behat/mink-goutte-driver/composer.json
index 7444a50..f103906 100644
--- a/core/vendor/behat/mink-goutte-driver/composer.json
+++ b/core/vendor/behat/mink-goutte-driver/composer.json
@@ -18,12 +18,12 @@
         "php":                           ">=5.3.1",
         "behat/mink":                    "~1.6@dev",
         "behat/mink-browserkit-driver":  "~1.2@dev",
-        "fabpot/goutte":                 "~1.0.4|~2.0"
+        "fabpot/goutte":                 "~1.0.4|~2.0|~3.1"
     },
 
     "autoload": {
-        "psr-0": {
-            "Behat\\Mink\\Driver": "src/"
+        "psr-4": {
+            "Behat\\Mink\\Driver\\": "src/"
         }
     },
 
diff --git a/core/vendor/behat/mink-goutte-driver/phpunit.xml.dist b/core/vendor/behat/mink-goutte-driver/phpunit.xml.dist
index f374c53..cbe57c4 100644
--- a/core/vendor/behat/mink-goutte-driver/phpunit.xml.dist
+++ b/core/vendor/behat/mink-goutte-driver/phpunit.xml.dist
@@ -17,7 +17,7 @@
 
     <filter>
         <whitelist>
-            <directory>./src/Behat/Mink/Driver</directory>
+            <directory>./src</directory>
         </whitelist>
     </filter>
 </phpunit>
diff --git a/core/vendor/behat/mink-goutte-driver/src/Behat/Mink/Driver/Goutte/Client.php b/core/vendor/behat/mink-goutte-driver/src/Goutte/Client.php
similarity index 100%
rename from core/vendor/behat/mink-goutte-driver/src/Behat/Mink/Driver/Goutte/Client.php
rename to core/vendor/behat/mink-goutte-driver/src/Goutte/Client.php
diff --git a/core/vendor/behat/mink-goutte-driver/src/Behat/Mink/Driver/GoutteDriver.php b/core/vendor/behat/mink-goutte-driver/src/GoutteDriver.php
similarity index 100%
rename from core/vendor/behat/mink-goutte-driver/src/Behat/Mink/Driver/GoutteDriver.php
rename to core/vendor/behat/mink-goutte-driver/src/GoutteDriver.php
diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php
index 853f9a0..02083d4 100644
--- a/core/vendor/composer/autoload_files.php
+++ b/core/vendor/composer/autoload_files.php
@@ -6,6 +6,9 @@
 $baseDir = dirname($vendorDir);
 
 return array(
+    $vendorDir . '/guzzlehttp/psr7/src/functions.php',
+    $vendorDir . '/guzzlehttp/promises/src/functions.php',
+    $vendorDir . '/guzzlehttp/guzzle/src/functions.php',
     $vendorDir . '/react/promise/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 6038288..89ce61c 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -22,5 +22,5 @@
     'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine/cache/lib'),
     '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', $vendorDir . '/behat/mink-goutte-driver/src'),
+    'Behat\\Mink\\Driver' => array($vendorDir . '/behat/mink-browserkit-driver/src'),
 );
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index a026f26..55d8836 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -27,13 +27,15 @@
     'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'),
     'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
     'React\\Promise\\' => array($vendorDir . '/react/promise/src'),
+    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
     'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'),
-    'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
-    'GuzzleHttp\\Ring\\' => array($vendorDir . '/guzzlehttp/ringphp/src'),
+    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
+    'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
     'Goutte\\' => array($vendorDir . '/fabpot/goutte/Goutte'),
     'Drupal\\Driver\\' => array($baseDir . '/../drivers/lib/Drupal/Driver'),
     '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/installed.json b/core/vendor/composer/installed.json
index 457c12e..057db54 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -330,58 +330,6 @@
         ]
     },
     {
-        "name": "guzzlehttp/streams",
-        "version": "3.0.0",
-        "version_normalized": "3.0.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/streams.git",
-            "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
-            "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "~4.0"
-        },
-        "time": "2014-10-12 19:18:40",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "GuzzleHttp\\Stream\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
-            }
-        ],
-        "description": "Provides a simple abstraction over streams of data",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "Guzzle",
-            "stream"
-        ]
-    },
-    {
         "name": "phpunit/php-text-template",
         "version": "1.2.0",
         "version_normalized": "1.2.0.0",
@@ -1094,111 +1042,6 @@
         ]
     },
     {
-        "name": "behat/mink-goutte-driver",
-        "version": "v1.1.0",
-        "version_normalized": "1.1.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/minkphp/MinkGoutteDriver.git",
-            "reference": "2bf327b4166694ecaa8ae7f956cb6ae252ecf03e"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/2bf327b4166694ecaa8ae7f956cb6ae252ecf03e",
-            "reference": "2bf327b4166694ecaa8ae7f956cb6ae252ecf03e",
-            "shasum": ""
-        },
-        "require": {
-            "behat/mink": "~1.6@dev",
-            "behat/mink-browserkit-driver": "~1.2@dev",
-            "fabpot/goutte": "~1.0.4|~2.0",
-            "php": ">=5.3.1"
-        },
-        "time": "2014-10-09 09:21:12",
-        "type": "mink-driver",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.1.x-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Behat\\Mink\\Driver": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
-            }
-        ],
-        "description": "Goutte driver for Mink framework",
-        "homepage": "http://mink.behat.org/",
-        "keywords": [
-            "browser",
-            "goutte",
-            "headless",
-            "testing"
-        ]
-    },
-    {
-        "name": "fabpot/goutte",
-        "version": "v2.0.3",
-        "version_normalized": "2.0.3.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/FriendsOfPHP/Goutte.git",
-            "reference": "65ab61eae03d670b93a9044ad2328eb81aa1bde5"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/65ab61eae03d670b93a9044ad2328eb81aa1bde5",
-            "reference": "65ab61eae03d670b93a9044ad2328eb81aa1bde5",
-            "shasum": ""
-        },
-        "require": {
-            "guzzlehttp/guzzle": ">=4,<6",
-            "php": ">=5.4.0",
-            "symfony/browser-kit": "~2.1",
-            "symfony/css-selector": "~2.1",
-            "symfony/dom-crawler": "~2.1"
-        },
-        "time": "2014-11-28 09:48:17",
-        "type": "application",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "Goutte\\": "Goutte"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            }
-        ],
-        "description": "A simple PHP Web Scraper",
-        "homepage": "https://github.com/FriendsOfPHP/Goutte",
-        "keywords": [
-            "scraper"
-        ]
-    },
-    {
         "name": "react/promise",
         "version": "v2.2.0",
         "version_normalized": "2.2.0.0",
@@ -1312,119 +1155,6 @@
         ]
     },
     {
-        "name": "guzzlehttp/guzzle",
-        "version": "5.2.0",
-        "version_normalized": "5.2.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/guzzle.git",
-            "reference": "475b29ccd411f2fa8a408e64576418728c032cfa"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/475b29ccd411f2fa8a408e64576418728c032cfa",
-            "reference": "475b29ccd411f2fa8a408e64576418728c032cfa",
-            "shasum": ""
-        },
-        "require": {
-            "guzzlehttp/ringphp": "~1.0",
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "ext-curl": "*",
-            "phpunit/phpunit": "~4.0",
-            "psr/log": "~1.0"
-        },
-        "time": "2015-01-28 01:03:29",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "5.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "GuzzleHttp\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
-            }
-        ],
-        "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "client",
-            "curl",
-            "framework",
-            "http",
-            "http client",
-            "rest",
-            "web service"
-        ]
-    },
-    {
-        "name": "guzzlehttp/ringphp",
-        "version": "1.0.7",
-        "version_normalized": "1.0.7.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/RingPHP.git",
-            "reference": "52d868f13570a9a56e5fce6614e0ec75d0f13ac2"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/52d868f13570a9a56e5fce6614e0ec75d0f13ac2",
-            "reference": "52d868f13570a9a56e5fce6614e0ec75d0f13ac2",
-            "shasum": ""
-        },
-        "require": {
-            "guzzlehttp/streams": "~3.0",
-            "php": ">=5.4.0",
-            "react/promise": "~2.0"
-        },
-        "require-dev": {
-            "ext-curl": "*",
-            "phpunit/phpunit": "~4.0"
-        },
-        "suggest": {
-            "ext-curl": "Guzzle will use specific adapters if cURL is present"
-        },
-        "time": "2015-03-30 01:43:20",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "GuzzleHttp\\Ring\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
-            }
-        ],
-        "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function."
-    },
-    {
         "name": "zendframework/zend-stdlib",
         "version": "2.4.0",
         "version_normalized": "2.4.0.0",
@@ -3397,5 +3127,338 @@
         ],
         "description": "Symfony BrowserKit Component",
         "homepage": "https://symfony.com"
+    },
+    {
+        "name": "psr/http-message",
+        "version": "1.0",
+        "version_normalized": "1.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/php-fig/http-message.git",
+            "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+            "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0"
+        },
+        "time": "2015-05-04 20:22:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Psr\\Http\\Message\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "PHP-FIG",
+                "homepage": "http://www.php-fig.org/"
+            }
+        ],
+        "description": "Common interface for HTTP messages",
+        "keywords": [
+            "http",
+            "http-message",
+            "psr",
+            "psr-7",
+            "request",
+            "response"
+        ]
+    },
+    {
+        "name": "guzzlehttp/psr7",
+        "version": "1.1.0",
+        "version_normalized": "1.1.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/psr7.git",
+            "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/psr7/zipball/af0e1758de355eb113917ad79c3c0e3604bce4bd",
+            "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0",
+            "psr/http-message": "~1.0"
+        },
+        "provide": {
+            "psr/http-message-implementation": "1.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
+        },
+        "time": "2015-06-24 19:55:15",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Psr7\\": "src/"
+            },
+            "files": [
+                "src/functions.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "PSR-7 message implementation",
+        "keywords": [
+            "http",
+            "message",
+            "stream",
+            "uri"
+        ]
+    },
+    {
+        "name": "guzzlehttp/promises",
+        "version": "1.0.1",
+        "version_normalized": "1.0.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/promises.git",
+            "reference": "2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/promises/zipball/2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7",
+            "reference": "2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.5.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
+        },
+        "time": "2015-06-24 16:16:25",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Promise\\": "src/"
+            },
+            "files": [
+                "src/functions.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Guzzle promises library",
+        "keywords": [
+            "promise"
+        ]
+    },
+    {
+        "name": "guzzlehttp/guzzle",
+        "version": "6.0.1",
+        "version_normalized": "6.0.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/guzzle.git",
+            "reference": "f992b7b487a816c957d317442bed4966409873e0"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f992b7b487a816c957d317442bed4966409873e0",
+            "reference": "f992b7b487a816c957d317442bed4966409873e0",
+            "shasum": ""
+        },
+        "require": {
+            "guzzlehttp/promises": "^1.0.0",
+            "guzzlehttp/psr7": "^1.0.0",
+            "php": ">=5.5.0"
+        },
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "^4.0",
+            "psr/log": "^1.0"
+        },
+        "time": "2015-05-27 16:57:51",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "6.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "files": [
+                "src/functions.php"
+            ],
+            "psr-4": {
+                "GuzzleHttp\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Guzzle is a PHP HTTP client library",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "client",
+            "curl",
+            "framework",
+            "http",
+            "http client",
+            "rest",
+            "web service"
+        ]
+    },
+    {
+        "name": "fabpot/goutte",
+        "version": "v3.1.0",
+        "version_normalized": "3.1.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/FriendsOfPHP/Goutte.git",
+            "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/d9a5a28782d30e9f4e20176caea58a1d459f2c71",
+            "reference": "d9a5a28782d30e9f4e20176caea58a1d459f2c71",
+            "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"
+        },
+        "time": "2015-06-24 16:11:31",
+        "type": "application",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "3.1-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Goutte\\": "Goutte"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "A simple PHP Web Scraper",
+        "homepage": "https://github.com/FriendsOfPHP/Goutte",
+        "keywords": [
+            "scraper"
+        ]
+    },
+    {
+        "name": "behat/mink-goutte-driver",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/minkphp/MinkGoutteDriver.git",
+            "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
+            "reference": "cc5ce119b5a8e06662f634b35967aff0b0c7dfdd",
+            "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"
+        },
+        "time": "2015-06-27 00:15:11",
+        "type": "mink-driver",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.1.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Behat\\Mink\\Driver\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
+            }
+        ],
+        "description": "Goutte driver for Mink framework",
+        "homepage": "http://mink.behat.org/",
+        "keywords": [
+            "browser",
+            "goutte",
+            "headless",
+            "testing"
+        ]
     }
 ]
diff --git a/core/vendor/fabpot/goutte/.travis.yml b/core/vendor/fabpot/goutte/.travis.yml
index 66cf320..26a4ed1 100644
--- a/core/vendor/fabpot/goutte/.travis.yml
+++ b/core/vendor/fabpot/goutte/.travis.yml
@@ -1,9 +1,9 @@
 language: php
 
 php:
+    - 7.0
     - 5.6
     - 5.5
-    - 5.4
     - hhvm
 
 install:
@@ -15,3 +15,4 @@ script:
 matrix:
     allow_failures:
         - php: hhvm
+        - php: 7.0
diff --git a/core/vendor/fabpot/goutte/Goutte/Client.php b/core/vendor/fabpot/goutte/Goutte/Client.php
index cde3ea3..609595d 100644
--- a/core/vendor/fabpot/goutte/Goutte/Client.php
+++ b/core/vendor/fabpot/goutte/Goutte/Client.php
@@ -13,10 +13,9 @@
 
 use GuzzleHttp\Client as GuzzleClient;
 use GuzzleHttp\ClientInterface as GuzzleClientInterface;
+use GuzzleHttp\Cookie\CookieJar;
 use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\Response as GuzzleResponse;
-use GuzzleHttp\Post\PostFile;
+use Psr\Http\Message\ResponseInterface;
 use Symfony\Component\BrowserKit\Client as BaseClient;
 use Symfony\Component\BrowserKit\Response;
 
@@ -25,6 +24,7 @@
  *
  * @author Fabien Potencier <fabien.potencier@symfony-project.com>
  * @author Michael Dowling <michael@guzzlephp.org>
+ * @author Charles Sarrazin <charles@sarraz.in>
  */
 class Client extends BaseClient
 {
@@ -90,45 +90,46 @@ protected function doRequest($request)
             }
         }
 
-        $body = null;
-        if (!in_array($request->getMethod(), array('GET', 'HEAD'))) {
-            if (null !== $request->getContent()) {
-                $body = $request->getContent();
-            } else {
-                $body = $request->getParameters();
-            }
-        }
-
-        $this->getClient()->setDefaultOption('auth', $this->auth);
+        $cookies = CookieJar::fromArray(
+            $this->getCookieJar()->allRawValues($request->getUri()),
+            $request->getServer()['HTTP_HOST']
+        );
 
         $requestOptions = array(
-            'body' => $body,
-            'cookies' => $this->getCookieJar()->allRawValues($request->getUri()),
+            'cookies' => $cookies,
             'allow_redirects' => false,
-            'timeout' => 30,
+            'auth' => $this->auth,
         );
 
+        if (!in_array($request->getMethod(), array('GET', 'HEAD'))) {
+            if (null !== $content = $request->getContent()) {
+                $requestOptions['body'] = $content;
+            } else {
+                if ($files = $request->getFiles()) {
+                    $requestOptions['multipart'] = [];
+
+                    $this->addPostFields($request->getParameters(), $requestOptions['multipart']);
+                    $this->addPostFiles($files, $requestOptions['multipart']);
+                } else {
+                    $requestOptions['form_params'] = $request->getParameters();
+                }
+            }
+        }
+
         if (!empty($headers)) {
             $requestOptions['headers'] = $headers;
         }
 
-        $guzzleRequest = $this->getClient()->createRequest(
-            $request->getMethod(),
-            $request->getUri(),
-            $requestOptions
-        );
+        $method = $request->getMethod();
+        $uri = $request->getUri();
 
         foreach ($this->headers as $name => $value) {
-            $guzzleRequest->setHeader($name, $value);
-        }
-
-        if ('POST' == $request->getMethod() || 'PUT' == $request->getMethod()) {
-            $this->addPostFiles($guzzleRequest, $request->getFiles());
+            $requestOptions['headers'][$name] = $value;
         }
 
         // Let BrowserKit handle redirects
         try {
-            $response = $this->getClient()->send($guzzleRequest);
+            $response = $this->getClient()->request($method, $uri, $requestOptions);
         } catch (RequestException $e) {
             $response = $e->getResponse();
             if (null === $response) {
@@ -139,33 +140,63 @@ protected function doRequest($request)
         return $this->createResponse($response);
     }
 
-    protected function addPostFiles(RequestInterface $request, array $files, $arrayName = '')
+    protected function addPostFiles(array $files, array &$multipart, $arrayName = '')
     {
+        if (empty($files)) {
+            return;
+        }
+
         foreach ($files as $name => $info) {
             if (!empty($arrayName)) {
                 $name = $arrayName.'['.$name.']';
             }
 
+            $file = [
+                'name' => $name,
+            ];
+
             if (is_array($info)) {
                 if (isset($info['tmp_name'])) {
                     if ('' !== $info['tmp_name']) {
-                        $request->getBody()->addFile(new PostFile($name, fopen($info['tmp_name'], 'r'), isset($info['name']) ? $info['name'] : null));
+                        $file['contents'] = fopen($info['tmp_name'], 'r');
+                        if (isset($info['name'])) {
+                            $file['filename'] = $info['name'];
+                        }
                     } else {
                         continue;
                     }
                 } else {
-                    $this->addPostFiles($request, $info, $name);
+                    $this->addPostFiles($info, $multipart, $name);
+                    continue;
                 }
             } else {
-                $request->getBody()->addFile(new PostFile($name, fopen($info, 'r')));
+                $file['contents'] = fopen($info, 'r');
             }
+
+            $multipart[] = $file;
         }
     }
 
-    protected function createResponse(GuzzleResponse $response)
+    public function addPostFields(array $formParams, array &$multipart, $arrayName = '')
     {
-        $headers = $response->getHeaders();
+        foreach ($formParams as $name => $value) {
+            if (!empty($arrayName)) {
+                $name = $arrayName.'['.$name.']';
+            }
 
-        return new Response($response->getBody(true), $response->getStatusCode(), $headers);
+            if (is_array($value)) {
+                $this->addPostFields($value, $multipart, $name);
+            } else {
+                $multipart[] = [
+                    'name' => $name,
+                    'contents' => $value,
+                ];
+            }
+        }
+    }
+
+    protected function createResponse(ResponseInterface $response)
+    {
+        return new Response((string) $response->getBody(), $response->getStatusCode(), $response->getHeaders());
     }
 }
diff --git a/core/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php b/core/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php
index da2e47c..f10d8fb 100644
--- a/core/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php
+++ b/core/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php
@@ -14,31 +14,34 @@
 use Goutte\Client;
 use GuzzleHttp\Client as GuzzleClient;
 use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Response as GuzzleResponse;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Subscriber\History;
-use GuzzleHttp\Subscriber\Mock;
-use GuzzleHttp\Post\PostFile;
+use GuzzleHttp\Handler\MockHandler;
+use GuzzleHttp\HandlerStack;
+use GuzzleHttp\Psr7\Response as GuzzleResponse;
+use GuzzleHttp\Middleware;
 use Symfony\Component\BrowserKit\Cookie;
 
 /**
- * Goutte Client Test
+ * Goutte Client Test.
  *
  * @author Michael Dowling <michael@guzzlephp.org>
+ * @author Charles Sarrazin <charles@sarraz.in>
  */
 class ClientTest extends \PHPUnit_Framework_TestCase
 {
     protected $history;
+    /** @var MockHandler */
     protected $mock;
 
-    protected function getGuzzle()
+    protected function getGuzzle(array $responses = [])
     {
-        $this->history = new History();
-        $this->mock = new Mock();
-        $this->mock->addResponse(new GuzzleResponse(200, array(), Stream::factory('<html><body><p>Hi</p></body></html>')));
-        $guzzle = new GuzzleClient(array('redirect.disable' => true, 'base_url' => ''));
-        $guzzle->getEmitter()->attach($this->mock);
-        $guzzle->getEmitter()->attach($this->history);
+        if (empty($responses)) {
+            $responses = [new GuzzleResponse(200, [], '<html><body><p>Hi</p></body></html>')];
+        }
+        $this->mock = new MockHandler($responses);
+        $handlerStack = HandlerStack::create($this->mock);
+        $this->history = [];
+        $handlerStack->push(Middleware::history($this->history));
+        $guzzle = new GuzzleClient(array('redirect.disable' => true, 'base_uri' => '', 'handler' => $handlerStack));
 
         return $guzzle;
     }
@@ -63,8 +66,8 @@ public function testUsesCustomHeaders()
         $client = new Client();
         $client->setClient($guzzle);
         $client->setHeader('X-Test', 'test');
-        $crawler = $client->request('GET', 'http://www.example.com/');
-        $this->assertEquals('test', $this->history->getLastRequest()->getHeader('X-Test'));
+        $client->request('GET', 'http://www.example.com/');
+        $this->assertEquals('test', end($this->history)['request']->getHeaderLine('X-Test'));
     }
 
     public function testCustomUserAgent()
@@ -73,8 +76,8 @@ public function testCustomUserAgent()
         $client = new Client();
         $client->setClient($guzzle);
         $client->setHeader('User-Agent', 'foo');
-        $crawler = $client->request('GET', 'http://www.example.com/');
-        $this->assertEquals('foo', $this->history->getLastRequest()->getHeader('User-Agent'));
+        $client->request('GET', 'http://www.example.com/');
+        $this->assertEquals('Symfony2 BrowserKit, foo', end($this->history)['request']->getHeaderLine('User-Agent'));
     }
 
     public function testUsesAuth()
@@ -83,11 +86,9 @@ public function testUsesAuth()
         $client = new Client();
         $client->setClient($guzzle);
         $client->setAuth('me', '**');
-        $crawler = $client->request('GET', 'http://www.example.com/');
-        $request = $this->history->getLastRequest();
-        $this->assertEquals('me', $request->getConfig()->get('auth')[0]);
-        $this->assertEquals('**', $request->getConfig()->get('auth')[1]);
-        $this->assertEquals('basic', $request->getConfig()->get('auth')[2]);
+        $client->request('GET', 'http://www.example.com/');
+        $request = end($this->history)['request'];
+        $this->assertEquals('Basic bWU6Kio=', $request->getHeaderLine('Authorization'));
     }
 
     public function testResetsAuth()
@@ -97,10 +98,9 @@ public function testResetsAuth()
         $client->setClient($guzzle);
         $client->setAuth('me', '**');
         $client->resetAuth();
-        $crawler = $client->request('GET', 'http://www.example.com/');
-        $request = $this->history->getLastRequest();
-        $this->assertNull($request->getConfig()->get('auth')[0]);
-        $this->assertNull($request->getConfig()->get('auth')[1]);
+        $client->request('GET', 'http://www.example.com/');
+        $request = end($this->history)['request'];
+        $this->assertEquals('', $request->getHeaderLine('authorization'));
     }
 
     public function testUsesCookies()
@@ -109,9 +109,9 @@ public function testUsesCookies()
         $client = new Client();
         $client->setClient($guzzle);
         $client->getCookieJar()->set(new Cookie('test', '123'));
-        $crawler = $client->request('GET', 'http://www.example.com/');
-        $request = $this->history->getLastRequest();
-        $this->assertEquals('test=123', $request->getHeader('Cookie'));
+        $client->request('GET', 'http://www.example.com/');
+        $request = end($this->history)['request'];
+        $this->assertEquals('test=123', $request->getHeaderLine('Cookie'));
     }
 
     public function testUsesPostFiles()
@@ -122,18 +122,20 @@ public function testUsesPostFiles()
         $files = array(
             'test' => array(
                 'name' => 'test.txt',
-                'tmp_name' => __FILE__,
+                'tmp_name' => __DIR__.'/fixtures.txt',
             ),
         );
 
-        $crawler = $client->request('POST', 'http://www.example.com/', array(), $files);
-        $request = $this->history->getLastRequest();
+        $client->request('POST', 'http://www.example.com/', array(), $files);
+        $request = end($this->history)['request'];
 
-        $files = $request->getBody()->getFiles();
-        $this->assertFile(reset($files), 'test', 'test.txt', array(
-          'Content-Type' => 'text/plain',
-          'Content-Disposition' => 'form-data; filename="test.txt"; name="test"',
-        ));
+        $stream = $request->getBody();
+        $boundary = $stream->getBoundary();
+        $this->assertEquals(
+            "--$boundary\r\nContent-Disposition: form-data; name=\"test\"; filename=\"test.txt\"\r\nContent-Length: 4\r\n"
+            ."Content-Type: text/plain\r\n\r\nfoo\n\r\n--$boundary--\r\n",
+            $stream->getContents()
+        );
     }
 
     public function testUsesPostNamedFiles()
@@ -142,16 +144,19 @@ public function testUsesPostNamedFiles()
         $client = new Client();
         $client->setClient($guzzle);
         $files = array(
-            'test' => __FILE__,
+            'test' => __DIR__.'/fixtures.txt',
         );
 
-        $crawler = $client->request('POST', 'http://www.example.com/', array(), $files);
-        $request = $this->history->getLastRequest();
-        $files = $request->getBody()->getFiles();
-        $this->assertFile(reset($files), 'test', __FILE__, array(
-          'Content-Type' => 'text/x-php',
-          'Content-Disposition' => 'form-data; filename="ClientTest.php"; name="test"',
-        ));
+        $client->request('POST', 'http://www.example.com/', array(), $files);
+        $request = end($this->history)['request'];
+
+        $stream = $request->getBody();
+        $boundary = $stream->getBoundary();
+        $this->assertEquals(
+            "--$boundary\r\nContent-Disposition: form-data; name=\"test\"; filename=\"fixtures.txt\"\r\nContent-Length: 4\r\n"
+            ."Content-Type: text/plain\r\n\r\nfoo\n\r\n--$boundary--\r\n",
+            $stream->getContents()
+        );
     }
 
     public function testUsesPostFilesNestedFields()
@@ -163,18 +168,73 @@ public function testUsesPostFilesNestedFields()
             'form' => array(
                 'test' => array(
                     'name' => 'test.txt',
-                    'tmp_name' => __FILE__,
+                    'tmp_name' => __DIR__.'/fixtures.txt',
                 ),
             ),
         );
 
-        $crawler = $client->request('POST', 'http://www.example.com/', array(), $files);
-        $request = $this->history->getLastRequest();
-        $files = $request->getBody()->getFiles();
-        $this->assertFile(reset($files), 'form[test]', 'test.txt', array(
-            'Content-Type' => 'text/plain',
-            'Content-Disposition' => 'form-data; filename="test.txt"; name="form[test]"',
-        ));
+        $client->request('POST', 'http://www.example.com/', array(), $files);
+        $request = end($this->history)['request'];
+
+        $stream = $request->getBody();
+        $boundary = $stream->getBoundary();
+        $this->assertEquals(
+            "--$boundary\r\nContent-Disposition: form-data; name=\"form[test]\"; filename=\"test.txt\"\r\nContent-Length: 4\r\n"
+            ."Content-Type: text/plain\r\n\r\nfoo\n\r\n--$boundary--\r\n",
+            $stream->getContents()
+        );
+    }
+
+    public function testPostFormWithFiles()
+    {
+        $guzzle = $this->getGuzzle();
+        $client = new Client();
+        $client->setClient($guzzle);
+        $files = array(
+            'test' => __DIR__.'/fixtures.txt',
+        );
+        $params = array(
+            'foo' => 'bar',
+        );
+
+        $client->request('POST', 'http://www.example.com/', $params, $files);
+        $request = end($this->history)['request'];
+
+        $stream = $request->getBody();
+        $boundary = $stream->getBoundary();
+        $this->assertEquals(
+            "--$boundary\r\nContent-Disposition: form-data; name=\"foo\"\r\nContent-Length: 3\r\n"
+            ."\r\nbar\r\n"
+            ."--$boundary\r\nContent-Disposition: form-data; name=\"test\"; filename=\"fixtures.txt\"\r\nContent-Length: 4\r\n"
+            ."Content-Type: text/plain\r\n\r\nfoo\n\r\n--$boundary--\r\n",
+        $stream->getContents());
+    }
+
+    public function testPostEmbeddedFormWithFiles()
+    {
+        $guzzle = $this->getGuzzle();
+        $client = new Client();
+        $client->setClient($guzzle);
+        $files = array(
+            'test' => __DIR__.'/fixtures.txt',
+        );
+        $params = array(
+            'foo' => array(
+                'bar' => 'baz',
+            ),
+        );
+
+        $client->request('POST', 'http://www.example.com/', $params, $files);
+        $request = end($this->history)['request'];
+
+        $stream = $request->getBody();
+        $boundary = $stream->getBoundary();
+        $this->assertEquals(
+            "--$boundary\r\nContent-Disposition: form-data; name=\"foo[bar]\"\r\nContent-Length: 3\r\n"
+            ."\r\nbaz\r\n"
+            ."--$boundary\r\nContent-Disposition: form-data; name=\"test\"; filename=\"fixtures.txt\"\r\nContent-Length: 4\r\n"
+            ."Content-Type: text/plain\r\n\r\nfoo\n\r\n--$boundary--\r\n",
+        $stream->getContents());
     }
 
     public function testUsesPostFilesOnClientSide()
@@ -183,16 +243,19 @@ public function testUsesPostFilesOnClientSide()
         $client = new Client();
         $client->setClient($guzzle);
         $files = array(
-            'test' => __FILE__,
+            'test' => __DIR__.'/fixtures.txt',
         );
 
-        $crawler = $client->request('POST', 'http://www.example.com/', array(), $files);
-        $request = $this->history->getLastRequest();
-        $files = $request->getBody()->getFiles();
-        $this->assertFile(reset($files), 'test', __FILE__, array(
-          'Content-Type' => 'text/x-php',
-          'Content-Disposition' => 'form-data; filename="ClientTest.php"; name="test"',
-        ));
+        $client->request('POST', 'http://www.example.com/', array(), $files);
+        $request = end($this->history)['request'];
+
+        $stream = $request->getBody();
+        $boundary = $stream->getBoundary();
+        $this->assertEquals(
+            "--$boundary\r\nContent-Disposition: form-data; name=\"test\"; filename=\"fixtures.txt\"\r\nContent-Length: 4\r\n"
+            ."Content-Type: text/plain\r\n\r\nfoo\n\r\n--$boundary--\r\n",
+            $stream->getContents()
+        );
     }
 
     public function testUsesPostFilesUploadError()
@@ -210,10 +273,12 @@ public function testUsesPostFilesUploadError()
             ),
         );
 
-        $crawler = $client->request('POST', 'http://www.example.com/', array(), $files);
-        $request = $this->history->getLastRequest();
+        $client->request('POST', 'http://www.example.com/', array(), $files);
+        $request = end($this->history)['request'];
+        $stream = $request->getBody();
+        $boundary = $stream->getBoundary();
 
-        $this->assertEquals(array(), $request->getBody()->getFiles());
+        $this->assertEquals("--$boundary--\r\n", $stream->getContents());
     }
 
     public function testCreatesResponse()
@@ -227,13 +292,12 @@ public function testCreatesResponse()
 
     public function testHandlesRedirectsCorrectly()
     {
-        $guzzle = $this->getGuzzle();
-
-        $this->mock->clearQueue();
-        $this->mock->addResponse(new GuzzleResponse(301, array(
-            'Location' => 'http://www.example.com/',
-        )));
-        $this->mock->addResponse(new GuzzleResponse(200, [], Stream::factory('<html><body><p>Test</p></body></html>')));
+        $guzzle = $this->getGuzzle([
+            new GuzzleResponse(301, array(
+                'Location' => 'http://www.example.com/',
+            )),
+            new GuzzleResponse(200, [], '<html><body><p>Test</p></body></html>'),
+        ]);
 
         $client = new Client();
         $client->setClient($guzzle);
@@ -247,12 +311,11 @@ public function testHandlesRedirectsCorrectly()
 
     public function testConvertsGuzzleHeadersToArrays()
     {
-        $guzzle = $this->getGuzzle();
-
-        $this->mock->clearQueue();
-        $this->mock->addResponse(new GuzzleResponse(200, array(
-            'Date' => 'Tue, 04 Jun 2013 13:22:41 GMT',
-        )));
+        $guzzle = $this->getGuzzle([
+            new GuzzleResponse(200, array(
+                'Date' => 'Tue, 04 Jun 2013 13:22:41 GMT',
+            )),
+        ]);
 
         $client = new Client();
         $client->setClient($guzzle);
@@ -260,48 +323,30 @@ public function testConvertsGuzzleHeadersToArrays()
         $response = $client->getResponse();
         $headers = $response->getHeaders();
 
-        $this->assertInternalType("array", array_shift($headers), "Header not converted from Guzzle\Http\Message\Header to array");
+        $this->assertInternalType('array', array_shift($headers), 'Header not converted from Guzzle\Http\Message\Header to array');
     }
 
     public function testNullResponseException()
     {
         $this->setExpectedException('GuzzleHttp\Exception\RequestException');
-        $guzzle = $this->getGuzzle();
-        $this->mock->clearQueue();
-        $exception = new RequestException('', $this->getMock('GuzzleHttp\Message\RequestInterface'));
-        $this->mock->addException($exception);
+        $guzzle = $this->getGuzzle([
+            new RequestException('', $this->getMock('Psr\Http\Message\RequestInterface')),
+        ]);
         $client = new Client();
         $client->setClient($guzzle);
         $client->request('GET', 'http://www.example.com/');
-        $response = $client->getResponse();
-    }
-
-    protected function assertFile(PostFile $postFile, $fieldName, $fileName, $headers)
-    {
-        $this->assertEquals($postFile->getName(), $fieldName);
-        $this->assertEquals($postFile->getFilename(), $fileName);
-
-        $postFileHeaders = $postFile->getHeaders();
-
-        // Note: Sort 'Content-Disposition' values before comparing, because the order changed in Guzzle 4.2.2
-        $postFileHeaders['Content-Disposition'] = explode('; ', $postFileHeaders['Content-Disposition']);
-        sort($postFileHeaders['Content-Disposition']);
-        $headers['Content-Disposition'] = explode('; ', $headers['Content-Disposition']);
-        sort($headers['Content-Disposition']);
-
-        $this->assertEquals($postFileHeaders, $headers);
+        $client->getResponse();
     }
 
     public function testHttps()
     {
-        $guzzle = $this->getGuzzle();
+        $guzzle = $this->getGuzzle([
+            new GuzzleResponse(200, [], '<html><body><p>Test</p></body></html>'),
+        ]);
 
-        $this->mock->clearQueue();
-        $this->mock->addResponse(new GuzzleResponse(200, [], Stream::factory('<html><body><p>Test</p></body></html>')));
         $client = new Client();
         $client->setClient($guzzle);
         $crawler = $client->request('GET', 'https://www.example.com/');
-        $this->assertEquals('https', $this->history->getLastRequest()->getScheme());
         $this->assertEquals('Test', $crawler->filter('p')->text());
     }
 
@@ -313,7 +358,7 @@ public function testCustomUserAgentConstructor()
           'HTTP_USER_AGENT' => 'SomeHost',
         ]);
         $client->setClient($guzzle);
-        $crawler = $client->request('GET', 'http://www.example.com/');
-        $this->assertEquals('SomeHost', $this->history->getLastRequest()->getHeader('User-Agent'));
+        $client->request('GET', 'http://www.example.com/');
+        $this->assertEquals('SomeHost', end($this->history)['request']->getHeaderLine('User-Agent'));
     }
 }
diff --git a/core/vendor/fabpot/goutte/Goutte/Tests/fixtures.txt b/core/vendor/fabpot/goutte/Goutte/Tests/fixtures.txt
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/core/vendor/fabpot/goutte/Goutte/Tests/fixtures.txt
@@ -0,0 +1 @@
+foo
diff --git a/core/vendor/fabpot/goutte/README.rst b/core/vendor/fabpot/goutte/README.rst
index 58eecdb..c1ade39 100644
--- a/core/vendor/fabpot/goutte/README.rst
+++ b/core/vendor/fabpot/goutte/README.rst
@@ -9,11 +9,12 @@ responses.
 Requirements
 ------------
 
-Goutte depends on PHP 5.4+ and Guzzle 4+.
+Goutte depends on PHP 5.5+ and Guzzle 6+.
 
 .. tip::
 
-    If you need support for PHP 5.3 or Guzzle 3, use Goutte 1.0.6.
+    If you need support for PHP 5.4 or Guzzle 4-5, use Goutte 2.x.
+    If you need support for PHP 5.3 or Guzzle 3, use Goutte 1.x.
 
 Installation
 ------------
@@ -22,7 +23,7 @@ Add ``fabpot/goutte`` as a require dependency in your ``composer.json`` file:
 
 .. code-block:: bash
 
-    php composer.phar require fabpot/goutte:~2.0
+    composer require fabpot/goutte
 
 .. tip::
 
@@ -32,6 +33,9 @@ Add ``fabpot/goutte`` as a require dependency in your ``composer.json`` file:
 
         require_once '/path/to/goutte.phar';
 
+    The phars for Goutte 1.x are also available for `download
+    <http://get.sensiolabs.org/goutte-v1.0.7.phar>`.
+
 Usage
 -----
 
@@ -73,7 +77,7 @@ Extract data:
 .. code-block:: php
 
     // Get the latest post in this category and display the titles
-    $crawler->filter('h2.post > a')->each(function ($node) {
+    $crawler->filter('h2 > a')->each(function ($node) {
         print $node->text()."\n";
     });
 
@@ -92,8 +96,14 @@ Submit forms:
 More Information
 ----------------
 
-Read the documentation of the BrowserKit and DomCrawler Symfony Components for
-more information about what you can do with Goutte.
+Read the documentation of the BrowserKit and `DomCrawler
+<http://symfony.com/doc/any/components/dom_crawler.html>`_ Symfony Components
+for more information about what you can do with Goutte.
+
+Pronunciation
+-------------
+
+Goutte is pronounced ``goot`` i.e. it rhymes with ``boot`` and not ``out``.
 
 Technical Information
 ---------------------
diff --git a/core/vendor/fabpot/goutte/composer.json b/core/vendor/fabpot/goutte/composer.json
index 63d87e7..1a0ed82 100644
--- a/core/vendor/fabpot/goutte/composer.json
+++ b/core/vendor/fabpot/goutte/composer.json
@@ -12,18 +12,18 @@
         }
     ],
     "require": {
-        "php": ">=5.4.0",
+        "php": ">=5.5.0",
         "symfony/browser-kit": "~2.1",
         "symfony/css-selector": "~2.1",
         "symfony/dom-crawler": "~2.1",
-        "guzzlehttp/guzzle": ">=4,<6"
+        "guzzlehttp/guzzle": "^6.0"
     },
     "autoload": {
         "psr-4": { "Goutte\\": "Goutte" }
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.0-dev"
+            "dev-master": "3.1-dev"
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/.travis.yml b/core/vendor/guzzlehttp/guzzle/.travis.yml
index 77bcf4a..c0689d1 100644
--- a/core/vendor/guzzlehttp/guzzle/.travis.yml
+++ b/core/vendor/guzzlehttp/guzzle/.travis.yml
@@ -1,15 +1,13 @@
 language: php
 
 php:
-  - 5.4
   - 5.5
   - 5.6
+  - 7.0
   - hhvm
 
 before_script:
   - curl --version
-  - pear config-set php_ini ~/.phpenv/versions/`php -r 'echo phpversion();'`/etc/php.ini || echo 'Error modifying PEAR'
-  - pecl install uri_template || echo 'Error installing uri_template'
   - composer self-update
   - composer install --no-interaction --prefer-source --dev
   - ~/.nvm/nvm.sh install v0.6.14
@@ -20,6 +18,7 @@ script: make test
 matrix:
   allow_failures:
     - php: hhvm
+    - php: 7.0
   fast_finish: true
 
 before_deploy:
@@ -36,4 +35,4 @@ deploy:
     repo: guzzle/guzzle
     tags: true
     all_branches: true
-    php: 5.4
+    php: 5.5
diff --git a/core/vendor/guzzlehttp/guzzle/CHANGELOG.md b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
index caafb42..4cd5712 100644
--- a/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
+++ b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
@@ -1,5 +1,99 @@
 # CHANGELOG
 
+## 6.0.1 - 2016-06-27
+
+* Fixed a bug with serializing the `query` request option where the `&`
+  separator was missing.
+* Added a better error message for when `body` is provided as an array. Please
+  use `form_params` or `multipart` instead.
+* Various doc fixes.
+
+## 6.0.0 - 2015-05-26
+
+* See the UPGRADING.md document for more information.
+* Added `multipart` and `form_params` request options.
+* Added `synchronous` request option.
+* Added the `on_headers` request option.
+* Fixed `expect` handling.
+* No longer adding default middlewares in the client ctor. These need to be
+  present on the provided handler in order to work.
+* Requests are no longer initiated when sending async requests with the
+  CurlMultiHandler. This prevents unexpected recursion from requests completing
+  while ticking the cURL loop.
+* Removed the semantics of setting `default` to `true`. This is no longer
+  required now that the cURL loop is not ticked for async requests.
+* Added request and response logging middleware.
+* No longer allowing self signed certificates when using the StreamHandler.
+* Ensuring that `sink` is valid if saving to a file.
+* Request exceptions now include a "handler context" which provides handler
+  specific contextual information.
+* Added `GuzzleHttp\RequestOptions` to allow request options to be applied
+  using constants.
+* `$maxHandles` has been removed from CurlMultiHandler.
+* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
+
+## 5.3.0 - 2015-05-19
+
+* Mock now supports `save_to`
+* Marked `AbstractRequestEvent::getTransaction()` as public.
+* Fixed a bug in which multiple headers using different casing would overwrite
+  previous headers in the associative array.
+* Added `Utils::getDefaultHandler()`
+* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
+* URL scheme is now always lowercased.
+
+## 6.0.0-beta.1
+
+* Requires PHP >= 5.5
+* Updated to use PSR-7
+  * Requires immutable messages, which basically means an event based system
+    owned by a request instance is no longer possible.
+  * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).
+  * Removed the dependency on `guzzlehttp/streams`. These stream abstractions
+    are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7`
+    namespace.
+* Added middleware and handler system
+  * Replaced the Guzzle event and subscriber system with a middleware system.
+  * No longer depends on RingPHP, but rather places the HTTP handlers directly
+    in Guzzle, operating on PSR-7 messages.
+  * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which
+    means the `guzzlehttp/retry-subscriber` is now obsolete.
+  * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`.
+* Asynchronous responses
+  * No longer supports the `future` request option to send an async request.
+    Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,
+    `getAsync`, etc.).
+  * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid
+    recursion required by chaining and forwarding react promises. See
+    https://github.com/guzzle/promises
+  * Added `requestAsync` and `sendAsync` to send request asynchronously.
+  * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests
+    asynchronously.
+* Request options
+  * POST and form updates
+    * Added the `form_fields` and `form_files` request options.
+    * Removed the `GuzzleHttp\Post` namespace.
+    * The `body` request option no longer accepts an array for POST requests.
+  * The `exceptions` request option has been deprecated in favor of the
+    `http_errors` request options.
+  * The `save_to` request option has been deprecated in favor of `sink` request
+    option.
+* Clients no longer accept an array of URI template string and variables for
+  URI variables. You will need to expand URI templates before passing them
+  into a client constructor or request method.
+* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are
+  now magic methods that will send synchronous requests.
+* Replaced `Utils.php` with plain functions in `functions.php`.
+* Removed `GuzzleHttp\Collection`.
+* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as
+  an array.
+* Removed `GuzzleHttp\Query`. Query string handling is now handled using an
+  associative array passed into the `query` request option. The query string
+  is serialized using PHP's `http_build_query`. If you need more control, you
+  can pass the query string in as a string.
+* `GuzzleHttp\QueryParser` has been replaced with the
+  `GuzzleHttp\Psr7\parse_query`.
+
 ## 5.2.0 - 2015-01-27
 
 * Added `AppliesHeadersInterface` to make applying headers to a request based
diff --git a/core/vendor/guzzlehttp/guzzle/LICENSE b/core/vendor/guzzlehttp/guzzle/LICENSE
index 71d3b78..9af9fba 100644
--- a/core/vendor/guzzlehttp/guzzle/LICENSE
+++ b/core/vendor/guzzlehttp/guzzle/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
+Copyright (c) 2011-2015 Michael Dowling, https://github.com/mtdowling <mtdowling@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
diff --git a/core/vendor/guzzlehttp/guzzle/Makefile b/core/vendor/guzzlehttp/guzzle/Makefile
deleted file mode 100644
index 69bf327..0000000
--- a/core/vendor/guzzlehttp/guzzle/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-all: clean coverage docs
-
-start-server:
-	cd vendor/guzzlehttp/ringphp && make start-server
-
-stop-server:
-	cd vendor/guzzlehttp/ringphp && make stop-server
-
-test: start-server
-	vendor/bin/phpunit
-	$(MAKE) stop-server
-
-coverage: start-server
-	vendor/bin/phpunit --coverage-html=artifacts/coverage
-	$(MAKE) stop-server
-
-view-coverage:
-	open artifacts/coverage/index.html
-
-clean:
-	rm -rf artifacts/*
-
-docs:
-	cd docs && make html && cd ..
-
-view-docs:
-	open docs/_build/html/index.html
-
-tag:
-	$(if $(TAG),,$(error TAG is not defined. Pass via "make tag TAG=4.2.1"))
-	@echo Tagging $(TAG)
-	chag update $(TAG)
-	sed -i '' -e "s/VERSION = '.*'/VERSION = '$(TAG)'/" src/ClientInterface.php
-	php -l src/ClientInterface.php
-	git add -A
-	git commit -m '$(TAG) release'
-	chag tag
-
-perf: start-server
-	php tests/perf.php
-	$(MAKE) stop-server
-
-package: burgomaster
-	php build/packager.php
-
-burgomaster:
-	mkdir -p build/artifacts
-	curl -s https://raw.githubusercontent.com/mtdowling/Burgomaster/0.0.2/src/Burgomaster.php > build/artifacts/Burgomaster.php
-
-.PHONY: docs burgomaster
diff --git a/core/vendor/guzzlehttp/guzzle/README.md b/core/vendor/guzzlehttp/guzzle/README.md
index 9df6981..1675a6f 100644
--- a/core/vendor/guzzlehttp/guzzle/README.md
+++ b/core/vendor/guzzlehttp/guzzle/README.md
@@ -1,25 +1,24 @@
-Guzzle, PHP HTTP client and webservice framework
-================================================
+Guzzle, PHP HTTP client
+=======================
 
-[![Build Status](https://secure.travis-ci.org/guzzle/guzzle.png?branch=master)](http://travis-ci.org/guzzle/guzzle)
+[![Build Status](https://secure.travis-ci.org/guzzle/guzzle.svg?branch=master)](http://travis-ci.org/guzzle/guzzle)
 
 Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
 trivial to integrate with web services.
 
-- Manages things like persistent connections, represents query strings as
-  collections, simplifies sending streaming POST requests with fields and
-  files, and abstracts away the underlying HTTP transport layer.
-- Can send both synchronous and asynchronous requests using the same interface
-  without requiring a dependency on a specific event loop.
-- Pluggable HTTP adapters allows Guzzle to integrate with any method you choose
-  for sending HTTP requests over the wire (e.g., cURL, sockets, PHP's stream
-  wrapper, non-blocking event loops like ReactPHP.
-- Guzzle makes it so that you no longer need to fool around with cURL options,
-  stream contexts, or sockets.
+- Simple interface for building query strings, POST requests, streaming large
+  uploads, streaming large downloads, using HTTP cookies, uploading JSON data,
+  etc...
+- Can send both synchronous and asynchronous requests using the same interface.
+- Uses PSR-7 interfaces for requests, responses, and streams. This allows you
+  to utilize other PSR-7 compatible libraries with Guzzle.
+- Abstracts away the underlying HTTP transport, allowing you to write
+  environment and transport agnostic code; i.e., no hard dependency on cURL,
+  PHP streams, sockets, or non-blocking event loops.
+- Middleware system allows you to augment and compose client behavior.
 
 ```php
 $client = new GuzzleHttp\Client();
-$response = $client->get('http://guzzlephp.org');
 $res = $client->get('https://api.github.com/user', ['auth' =>  ['user', 'pass']]);
 echo $res->getStatusCode();
 // "200"
@@ -27,22 +26,23 @@ echo $res->getHeader('content-type');
 // 'application/json; charset=utf8'
 echo $res->getBody();
 // {"type":"User"...'
-var_export($res->json());
-// Outputs the JSON decoded data
 
 // Send an asynchronous request.
-$req = $client->createRequest('GET', 'http://httpbin.org', ['future' => true]);
-$client->send($req)->then(function ($response) {
+$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
+$promise = $client->sendAsync($req)->then(function ($response) {
     echo 'I completed! ' . $response;
 });
+$promise->wait();
 ```
 
-Get more information and answers with the
-[Documentation](http://guzzlephp.org/),
-[Forums](https://groups.google.com/forum/?hl=en#!forum/guzzle),
-and [Gitter](https://gitter.im/guzzle/guzzle).
+## Help and docs
 
-### Installing via Composer
+- [Documentation](http://guzzlephp.org/)
+- [stackoverflow](http://stackoverflow.com/questions/tagged/guzzle)
+- [Gitter](https://gitter.im/guzzle/guzzle)
+
+
+## Installing Guzzle
 
 The recommended way to install Guzzle is through
 [Composer](http://getcomposer.org).
@@ -55,7 +55,7 @@ curl -sS https://getcomposer.org/installer | php
 Next, run the Composer command to install the latest stable version of Guzzle:
 
 ```bash
-composer require guzzlehttp/guzzle
+composer.phar require guzzlehttp/guzzle
 ```
 
 After installing, you need to require Composer's autoloader:
@@ -64,7 +64,25 @@ After installing, you need to require Composer's autoloader:
 require 'vendor/autoload.php';
 ```
 
-### Documentation
+You can then later update Guzzle using composer:
+
+ ```bash
+composer.phar update
+ ```
+
+
+## Version Guidance
+
+| Version | Status      | Packagist           | Namespace    | Repo                | Docs                | PSR-7 |
+|---------|-------------|---------------------|--------------|---------------------|---------------------|-------|
+| 3.x     | EOL         | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    |
+| 4.x     | EOL         | `guzzlehttp/guzzle` | `GuzzleHttp` | N/A                 | N/A                 | No    |
+| 5.x     | Maintained  | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    |
+| 6.x     | Latest      | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   |
 
-More information can be found in the online documentation at
-http://guzzlephp.org/.
+[guzzle-3-repo]: https://github.com/guzzle/guzzle3
+[guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3
+[guzzle-6-repo]: https://github.com/guzzle/guzzle
+[guzzle-3-docs]: http://guzzle3.readthedocs.org/en/latest/
+[guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/
+[guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/
diff --git a/core/vendor/guzzlehttp/guzzle/UPGRADING.md b/core/vendor/guzzlehttp/guzzle/UPGRADING.md
index ee8c39d..a4ea647 100644
--- a/core/vendor/guzzlehttp/guzzle/UPGRADING.md
+++ b/core/vendor/guzzlehttp/guzzle/UPGRADING.md
@@ -1,12 +1,144 @@
 Guzzle Upgrade Guide
 ====================
 
+5.0 to 6.0
+----------
+
+Guzzle now uses [PSR-7](http://www.php-fig.org/psr/psr-7/) for HTTP messages.
+Due to the fact that these messages are immutable, this prompted a refactoring
+of Guzzle to use a middleware based system rather than an event system. Any
+HTTP message interaction (e.g., `GuzzleHttp\Message\Request`) need to be
+updated to work with the new immutable PSR-7 request and response objects. Any
+event listeners or subscribers need to be updated to become middleware
+functions that wrap handlers (or are injected into a
+`GuzzleHttp\HandlerStack`).
+
+- Removed `GuzzleHttp\BatchResults`
+- Removed `GuzzleHttp\Collection`
+- Removed `GuzzleHttp\HasDataTrait`
+- Removed `GuzzleHttp\ToArrayInterface`
+- The `guzzlehttp/streams` dependency has been removed. Stream functionality
+  is now present in the `GuzzleHttp\Psr7` namespace provided by the
+  `guzzlehttp/psr7` package.
+- Guzzle no longer uses ReactPHP promises and now uses the
+  `guzzlehttp/promises` library. We use a custom promise library for three
+  significant reasons:
+  1. React promises (at the time of writing this) are recursive. Promise
+     chaining and promise resolution will eventually blow the stack. Guzzle
+     promises are not recursive as they use a sort of trampolining technique.
+     Note: there has been movement in the React project to modify promises to
+     no longer utilize recursion.
+  2. Guzzle needs to have the ability to synchronously block on a promise to
+     wait for a result. Guzzle promises allows this functionality (and does
+     not require the use of recursion).
+  3. Because we need to be able to wait on a result, doing so using React
+     promises requires wrapping react promises with RingPHP futures. This
+     overhead is no longer needed, reducing stack sizes, reducing complexity,
+     and improving performance.
+- `GuzzleHttp\Mimetypes` has been moved to a function in
+  `GuzzleHttp\Psr7\mimetype_from_extension` and
+  `GuzzleHttp\Psr7\mimetype_from_filename`.
+- `GuzzleHttp\Query` and `GuzzleHttp\QueryParser` have been removed. Query
+  strings must now be passed into request objects as strings, or provided to
+  the `query` request option when creating requests with clients. The `query`
+  option uses PHP's `http_build_query` to convert an array to a string. If you
+  need a different serialization technique, you will need to pass the query
+  string in as a string. There are a couple helper functions that will make
+  working with query strings easier: `GuzzleHttp\Psr7\parse_query` and
+  `GuzzleHttp\Psr7\build_query`.
+- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware
+  system based on PSR-7, using RingPHP and it's middleware system as well adds
+  more complexity than the benefits it provides. All HTTP handlers that were
+  present in RingPHP have been modified to work directly with PSR-7 messages
+  and placed in the `GuzzleHttp\Handler` namespace. This significantly reduces
+  complexity in Guzzle, removes a dependency, and improves performance. RingPHP
+  will be maintained for Guzzle 5 support, but will no longer be a part of
+  Guzzle 6.
+- As Guzzle now uses a middleware based systems the event system and RingPHP
+  integration has been removed. Note: while the event system has been removed,
+  it is possible to add your own type of event system that is powered by the
+  middleware system.
+  - Removed the `Event` namespace.
+  - Removed the `Subscriber` namespace.
+  - Removed `Transaction` class
+  - Removed `RequestFsm`
+  - Removed `RingBridge`
+  - `GuzzleHttp\Subscriber\Cookie` is now provided by
+    `GuzzleHttp\Middleware::cookies`
+  - `GuzzleHttp\Subscriber\HttpError` is now provided by
+    `GuzzleHttp\Middleware::httpError`
+  - `GuzzleHttp\Subscriber\History` is now provided by
+    `GuzzleHttp\Middleware::history`
+  - `GuzzleHttp\Subscriber\Mock` is now provided by
+    `GuzzleHttp\Middleware::mock`
+  - `GuzzleHttp\Subscriber\Prepare` is now provided by
+    `GuzzleHttp\PrepareBodyMiddleware`
+  - `GuzzleHttp\Subscriber\Redirect` is now provided by
+    `GuzzleHttp\RedirectMiddleware`
+- Guzzle now uses `Psr\Http\Message\UriInterface` (implements in
+  `GuzzleHttp\Psr7\Uri`) for URI support. `GuzzleHttp\Url` is now gone.
+- Static functions in `GuzzleHttp\Utils` have been moved to namespaced
+  functions under the `GuzzleHttp` namespace. This requires either a Composer
+  based autoloader or you to include functions.php.
+- `GuzzleHttp\ClientInterface::getDefaultOption` has been renamed to
+  `GuzzleHttp\ClientInterface::getConfig`.
+- `GuzzleHttp\ClientInterface::setDefaultOption` has been removed.
+
+## Migrating to middleware
+
+The change to PSR-7 unfortunately required significant refactoring to Guzzle
+due to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event
+system from plugins. The event system relied on mutability of HTTP messages and
+side effects in order to work. With immutable messages, you have to change your
+workflow to become more about either returning a value (e.g., functional
+middlewares) or setting a value on an object. Guzzle v6 has chosen the
+functional middleware approach.
+
+Instead of using the event system to listen for things like the `before` event,
+you now create a stack based middleware function that intercepts a request on
+the way in and the promise of the response on the way out. This is a much
+simpler and more predictable approach than the event system and works nicely
+with PSR-7 middleware. Due to the use of promises, the middleware system is
+also asynchronous.
+
+v5:
+
+```php
+use GuzzleHttp\Event\BeforeEvent;
+$client = new GuzzleHttp\Client();
+// Get the emitter and listen to the before event.
+$client->getEmitter()->on('before', function (BeforeEvent $e) {
+    // Guzzle v5 events relied on mutation
+    $e->getRequest()->setHeader('X-Foo', 'Bar');
+});
+```
+
+v6:
+
+In v6, you can modify the request before it is sent using the `mapRequest`
+middleware. The idiomatic way in v6 to modify the request/response lifecycle is
+to setup a handler middleware stack up front and inject the handler into a
+client.
+
+```php
+use GuzzleHttp\Middleware;
+// Create a handler stack that has all of the default middlewares attached
+$handler = GuzzleHttp\HandlerStack::create();
+// Push the handler onto the handler stack
+$handler->push(Middleware::mapRequest(function (RequestInterface $request) {
+    // Notice that we have to return a request object
+    return $request->withHeader('X-Foo', 'Bar');
+});
+// Inject the handler into the client
+$client = new GuzzleHttp\Client(['handler' => $handler]);
+```
+
 4.x to 5.0
 ----------
 
 ## Rewritten Adapter Layer
 
-Guzzle now uses `RingPHP <http://ringphp.readthedocs.org/en/latest/>`_ to send
+Guzzle now uses [RingPHP](http://ringphp.readthedocs.org/en/latest) to send
 HTTP requests. The `adapter` option in a `GuzzleHttp\Client` constructor
 is still supported, but it has now been renamed to `handler`. Instead of
 passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP
@@ -14,7 +146,7 @@ passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP
 
 ## Removed Fluent Interfaces
 
-`Fluent interfaces were removed <http://ocramius.github.io/blog/fluent-interfaces-are-evil/>`_
+[Fluent interfaces were removed](http://ocramius.github.io/blog/fluent-interfaces-are-evil)
 from the following classes:
 
 - `GuzzleHttp\Collection`
@@ -35,7 +167,7 @@ functions can be used as replacements.
   deprecated in favor of using `GuzzleHttp\Pool::batch()`.
 
 The "procedural" global client has been removed with no replacement (e.g.,
-`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttl\Client`
+`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttp\Client`
 object as a replacement.
 
 ## `throwImmediately` has been removed
diff --git a/core/vendor/guzzlehttp/guzzle/build/packager.php b/core/vendor/guzzlehttp/guzzle/build/packager.php
deleted file mode 100644
index 724bf63..0000000
--- a/core/vendor/guzzlehttp/guzzle/build/packager.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-require __DIR__ . '/artifacts/Burgomaster.php';
-
-$stageDirectory = __DIR__ . '/artifacts/staging';
-$projectRoot = __DIR__ . '/../';
-$packager = new \Burgomaster($stageDirectory, $projectRoot);
-
-// Copy basic files to the stage directory. Note that we have chdir'd onto
-// the $projectRoot directory, so use relative paths.
-foreach (['README.md', 'LICENSE'] as $file) {
-    $packager->deepCopy($file, $file);
-}
-
-// Copy each dependency to the staging directory. Copy *.php and *.pem files.
-$packager->recursiveCopy('src', 'GuzzleHttp', ['php']);
-$packager->recursiveCopy('vendor/react/promise/src', 'React/Promise');
-$packager->recursiveCopy('vendor/guzzlehttp/ringphp/src', 'GuzzleHttp/Ring');
-$packager->recursiveCopy('vendor/guzzlehttp/streams/src', 'GuzzleHttp/Stream');
-$packager->createAutoloader(['React/Promise/functions.php']);
-$packager->createPhar(__DIR__ . '/artifacts/guzzle.phar');
-$packager->createZip(__DIR__ . '/artifacts/guzzle.zip');
diff --git a/core/vendor/guzzlehttp/guzzle/composer.json b/core/vendor/guzzlehttp/guzzle/composer.json
index e9615a0..8d6b73e 100644
--- a/core/vendor/guzzlehttp/guzzle/composer.json
+++ b/core/vendor/guzzlehttp/guzzle/composer.json
@@ -1,7 +1,7 @@
 {
     "name": "guzzlehttp/guzzle",
     "type": "library",
-    "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+    "description": "Guzzle is a PHP HTTP client library",
     "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],
     "homepage": "http://guzzlephp.org/",
     "license": "MIT",
@@ -13,15 +13,17 @@
         }
     ],
     "require": {
-        "php": ">=5.4.0",
-        "guzzlehttp/ringphp": "~1.0"
+        "php": ">=5.5.0",
+        "guzzlehttp/psr7": "^1.0.0",
+        "guzzlehttp/promises": "^1.0.0"
     },
     "require-dev": {
         "ext-curl": "*",
-        "psr/log": "~1.0",
-        "phpunit/phpunit": "~4.0"
+        "phpunit/phpunit": "^4.0",
+        "psr/log": "^1.0"
     },
     "autoload": {
+        "files": ["src/functions.php"],
         "psr-4": {
             "GuzzleHttp\\": "src/"
         }
@@ -33,7 +35,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "5.0-dev"
+            "dev-master": "6.0-dev"
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/docs/Makefile b/core/vendor/guzzlehttp/guzzle/docs/Makefile
deleted file mode 100644
index d92e03f..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  html       to make standalone HTML files"
-	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
-	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
-	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
-	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-
-clean:
-	-rm -rf $(BUILDDIR)/*
-
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Guzzle.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Guzzle.qhc"
-
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/Guzzle"
-	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Guzzle"
-	@echo "# devhelp"
-
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make' in that directory to run these through (pdf)latex" \
-	      "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through pdflatex..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
-	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-	@echo
-	@echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo
-	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-	@echo "Run \`make' in that directory to run these through makeinfo" \
-	      "(use \`make info' here to do that automatically)."
-
-info:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo "Running Texinfo files through makeinfo..."
-	make -C $(BUILDDIR)/texinfo info
-	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
-	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-	@echo
-	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/core/vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png b/core/vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png
deleted file mode 100644
index f1017f7..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png
+++ /dev/null
@@ -1,4 +0,0 @@
-‰PNG
-
-   IHDR         Ï&‡Ö   bKGD ÿ‡�Ì¿   	pHYs    gŸÒR   tIMEÝ,×B—  ´IDAT8Ë•ÓÝKÝe ðÏïx4íljsÁÍãN¾œ�¡ÑÆŠQDì"ˆ^n¢¨»ÑŸ0‚ê.ˆ#X/x±6ÖÕÖE–Zó¥3_[f:�ÌÙ<GQÛÓÅñ˜ÕU¿Ë‡_¾Ï�ïÃÿø¢I§�’R)¦`T½”2ýþ‹	èTfÞ²œf#´«ŠŽMIõ(Ÿ¸Ú¶Ý‡ïÂÿL½áZ8Iø4œexë<†ŸÙNg8$c|Rôš•ðEGÏè6¼ËÐv¼A�ÖÝb†o¤�j1±…cvmÇIònÙK##Uô·ná%üëÚc’î€ßìpÚZx·„Wí'lÇ­e@›•èKy	ˆ#­2œPê$$,Š;bÉD_‡—CŸ�r%<oÃ{4Ë)˜’W�Ô Ã4o{Q—ÊR�Y	sÆÜVeMƒ5eÑeØ'š‹>²[¾„›,j6/­K…´»Ú,‡Ñp.|zÁ�ªR�H�zG-»ŽqûêpÙ’Jï„|Ô'«µ„7ì”3çŠ^ç½êž	g¢Â�à	kY)q,«5$î1ëŽ•×¤°ùQ‹‚�Ôfç9wt›wBÁ%9“2þˆÀº:<hg©ÆKÎúÕa}Z½.£Yµ©Íä¬räüü÷êë²W•kÎiô¨iùÍÙ>"…àÉR2qZ5ëqK.©@«÷A•9Ü/.%†=rî»èyƒb"	Û]|špUgx¥ˆÏKºçM_é–S.nUZ(3†i;4gÅ�rÑs>‘4¨^^Ü°ƒ²`ÕÝ¢ënªN‰áÇ}¨ÝYI5æ½àŠvP£¶¦µkÜö».	Ãžò¹guÈXW~0ÅÁÆ1®É¤c
-ÊtYP0iÍ8hRz$ŠÉk–$õ+¸ Â„1uö[ßêá´£n1ËfLªö´[6Ôh”ó7DŸùØˆjg¢·¦üeÒôg¯ß(=    IEND®B`‚
\ No newline at end of file
diff --git a/core/vendor/guzzlehttp/guzzle/docs/_static/logo.png b/core/vendor/guzzlehttp/guzzle/docs/_static/logo.png
deleted file mode 100644
index 965a4ef..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/_static/logo.png
+++ /dev/null
@@ -1,936 +0,0 @@
-‰PNG
-
-   IHDR  _  »   d`–   	pHYs    gŸÒR  @ IDATxì½€]Uµ7¾÷>íö2s§Ï$“É¤M
-		„@Ê„ÞÅ’ ¢O,iÖ‡íð=}ŸÑÇC‘'
-úP$**¡’�F™´Éô™;õÎí÷ôýÿ�If˜ðó#$AïÑpï�{Î.ëœ»öÚkýÖoQÎ9Éy	ä%�—@^§Wìôv—ï-/�¼òÈKÀ‘@^ùæŸƒ¼òÈKàH ¯|Ï€Ðó]æ%�—@^yå›òÈK /�3 �¼ò=BÏw™—@^y	ä•oþÈK /�¼Î€òÊ÷=ße^y	ä%�W¾ùg /�¼ò8È+ß3 ô|—y	ä%�—@^ùæŸ�¼òÈKàH ¯|Ï€Ðó]æ%�—@^yå›òÈK /�3 �¼ò=BÏw™—@^y	ä•ïßñlêìtoß¾]ú;.ÉŸš—@^y	œTïJå»*õ`6‚3#G®<òž½Òž¯Šªãhì,¸ï¾ûNÉÜžo"JC¿okiÆt_®UL›½²±Q>©4OÁÄÍM±ÀóMMÊ)hîm5áÈuCthÜöæ¡àÉrÆy²¿ÿ­¿­îíõ:rý[çå¿ÏKàYôÝÆçûLSlzÌÐ¯ñ‰•¥ÁB5IåK$šÛÉu¦š„\dR«¿WãSÊûãkSJÚVbŸìn�ÏªGîSW¬X1ò½£¬í=Pà�² N”9aðrÕÌz¼Š`Sª„ãº6U Bgˆþ4«„dNÖîßó7G‰«ü!ÉY„‹”2�cU–NW¹*Ûçbü=mžìÜ5mñ9œ™½—UE¢øþ¤ÎŸÆ"¶,\ãª	§—ŒÇ†öØt&‰UÜÃ¥ÔÔ8—Çj³‚Ë’·¤jz†û¼�„‘åq¡aAÅr"S.*õ@¸%o:Ê™ÈffM:×6­×¥	‘çê�;ç�³óïòøÇ–€ønšÞÊ¦ž"ŸìZNmºœH…›M‰ôˆ¦ye
-µ™¾‹bj#¥óê¬M6‘ÒAê�(ß•+W
-Õç]]Ô'è‘ˆ›).ÛH-¹ë®¾�‰Bæ&Aža.KÔ·ëœ"ËâqËôwË’Û¥›çÌòˆDh¥¦E¤•Y%uÿ×Ê×±b'ÕÖ*‰èP(K¬ˆÄ¥NÄ¢òpe©@í
-GñRÂ‹‰ÀJ%…Ša]ÔÓ©þþ×IQÑÛV¾
-cS2¦jÝGHÏ{âñàP’Nt�6’Î\�m«ÂãÂ�ç»+j‰ÌÏQ<I¦DRÎs!Êò4nš ‰Å^EžŸ’©¶|ÓÖuN¬B�ìN«š&RÜK S™ ¦[±©ñ«Ý»[?:kÖ°òÝ>D‚¹ljîÏÂYXùM9‹<L§ÃÛb–?à±úP(þVÏâvìvl®²ò‚žS± ½U_ùïò8x×(_ÇJxÊ¯5¹mº™9“âÙþ�Ï7Ä(÷Çs®NB:›]ž²›2“Læ(ÝÈ°~XŽî…Ë“$Ï‘M>ƒÛ¼Å=–’Íx-&Í$&ó1·m+\±ˆÍklÆû)‘s’bs3“ÃY&†¥1s¶¸-«f¡6ÜèßøÏæ�ì\�˜“üeÅƒÑT©ÀÄb‹('0.‹,N"œSè]’´Í‰œxLÎKEê¸TÄI"æ1¶g™3g™˜*%�¾Þþ 2±¨³žuì9#ï+3Î¥Ü¶_ü0±ô–»ºEËãYþætš] ŠôÆÞ¦žÇ<²n‹âí=-ñ‡<±=·��'GÚ \m%T*°lK–DA$—Mjm…õ¦Ô©S]ÂZÝN‰h“¡,3L·%2[ i—(Ž.:ÉŒ3¹ñYB…]ŒñAÝ°Z™(¾¨¦x!•èg\iúëç7=¿Ó=~žT_W”éìkØU81ekµÚþ®udjÅàØïòïóx7Jà]£|Ýî’Ù6%×Ã7ðŒ[ ¶ �é–à=`K-¡lJ!Ö¥M«_•Au1>¿®xz#nÊð�Ù§µÚšê¸¤s‰i·åc‚$)u”ÒrÎ-Í¶…8” (2ò*Ôv\àvŸÎ…@JPE²‚•öZfßºçÕeË–YJ‘6uV¸±ŒËBÀÐ-Ñ¹Šýö€éQ;.ŠDœ>9µíëB?@/‚’ª¶¥{DÖ
-…Ë'@ÃJºÉ_�]ý$7È ,H¬Ç÷Šœ_‚ï§¹	›ù#‡cùy.X²h,vÅ¬f(ò
-»³3wß£•Ñ+†­{ŠÉJu„èŽ¥­(…ïñJÄXøé;6†àXîïíßÞ¼¯¬¬HÒ-ó\ŸÂž=¬EM‘n[°¯rºŸ3i_RèÓ	‰wZ�‰ìI“ãRTJc%;$j*óÁÓ£Jj3µ}ª*¥!—ÛrËªšÍdÌ½ƒƒÃ.‹[æÎU¾9UHRB_2MFj\&qK»ë˜@‚KQ˜+úQiÞ’:[Í�órOrï�;tCuõ¨%ìÌ§*XTÇ¹Œ†¼3v'Ôö¾ÁîØ¥55‰ùä_óx·IàÝ£|_(kµMîqKRÐ´Íj[Š,ÛÜ«HâPÊN¹Üá”˜s¹þ¨Ä­EšI'z|ò¨åX_]íXˆ»^íM�—£ß˜­"uU\ß!r)E¸•Óm#í)+êÞ³9&Ü4ßçl½á­½§tùrúJ45�XÆB�K™+µR°yP‚&ÄÎ;G2 XÊj”ž¼¼¤$c[¶hŠt?lÙ¦Iž3{',u(|r/4}z¸'žÌ<uUmi?:b«[úÚ¿×Í±ŠÄá„pb‹„Â¼,6^¢ô=
-‘¿Î¬->(h×ÞIüÛbu–,h¶a®—™^l×îÍñéši2ÂwI:�Ë
-çû‚¾HLËmQ).ºÄ¤�÷f¨ûA´÷EBÉ�Œ?u×Ö+O§ÏÚZ?pÈyä82–™G?MÅ´Þ8ü¤®¨ˆ@ÎÃAÐ7þNÈÅe®¶Ý½‰Ç,úEÃ¢¥ÜÖZ&ùŠg¤Ó¹e˜Ï*Mi|šnqÕÍxuˆÏmh%�×W¿aÕÛMØ¦!Â}Ñ­êH 2°;aDÓ±�ÁrZÖ‹nOº;Žüû¼Î&	@/œUÇÈx`Oa;>æ ÌÞaQëçT"ë(#‡÷KF¦Ï0…'dEzÆÐDÝg+³
-3ÂI�Ì~�éÁì˜&ˆÓ$³íÙt£Õ²ôW{¬ìº+›.¬ïL
-fW®/ã›ZaŒß’"Ç &ôÄÆhj±Lù=²$}ÕæüƒŒÓ
-N˜
-7…hsrtõrXçóêÂ0:À"Ö>Ø¤ºÍi†ÚÖ�-;ýÀ¥Áß›6]oC.è|{BÄ±pmÝemÐí;°BTG­¿+JK³.ÁµQà›&¼‹�×'ki+›©,.ƒBŸi¢œÒÌ�xúC&µw°w6ïì}éùƒ†m¥Y9·hBqR·Í�D“X¦«æµñ%m‚Èÿ/w©«þM”#rü[H�û2%©ÒÚO4ôgf�…åÍÂb„ÚÎ{H¦îM\5#¢(†ˆm¬ó‘ž€„u>Ÿ!ŒmŽ Šó»z7�"J®ª­ÕˆÁ^sIòzìxvÃm¤Š¢$Ùôùn¿AŸ?wÕŽ¾ø9¯öÄ«´ÈÈXó¯y	œÍ8ãhGÉ:ÄeRKH´©'`‰.ÃOnÓðíµÑ‘ÈûX!¾M\žÐ³á–²CõõG"ê|Éc*µ&‘¨n§Mùp®©¾~ØÚ{)q”hÝŠ4¸»×,”ÂšÌŠÜ¦TB¨Q
-Ÿ$þñJIKtn=^ñÿÃöïnëNM�/ó~�ÒK±‚òû_*’X-ú¡0B”HS(¿Î‚RÅqé³a_ã•]±ó¡`~aš„Šþàùãƒ­_u0)	zŸv.¬½ƒZW,,íÁw#È‹cÆ<òáùX, °ÁS·Ö‚Ø•h‰®ÒÂ–V,ÿ?dµè4õkÕp=*Qò_.Y‰¦ý^%�z$v0–³¾¤FSV~%gõbQæ5¢[ÚwIq°µá`´Àò¸x\Ÿ9¿ÀÝ	sÿ?á ¯ÇÓK,•ÌP¼ü7Sýþ“ú]W5GÇy%Ï£²ÈSÛ_îþ–£ˆ�—:ú&Ê%¶0z®µ¿4ì–§[š«%ggçË2[¨f\$“P}K '²zîÜ‘� •1-2>â‘Ãfö9"©eÛsàÇÉ@ŽÜÈ¬YPY™;aôù?ä%p–IàLZ	ÊK#k;úÜ}Bºœ´æ’RØ§¹Í €•Ó26ilì#uu£ÛàÙ±;^ÚýòËö˜q¶ùø~×‘s¼„T�œMÈ¦Îd�Ï+T¨ºZ|ýg¾2{Sv±»Ö^•‹“""Ø%ŒJ¥Ð}!Û&Îñ³æ|ÿ`Sl]mm�æ,[z“×!¶Ð&\Á9Ï#ðôàEÅáô2¬¨6w't*‰!X¸|À´n%TÈ"ù0¶óˆ¶kñèýç=7g%mêk‡ëa–ÀXÈÖÍªÆF²¯®ŽÀßúæGúÅ3á—õQÆlÕÖ¶J‹ÇKnÑÈ˜z‹Aì!FÜŠ”q›¼6é…{cÀþ£à8ÀM†pÿ­$ÒŒ·¿E½|Ö¬}èÅùG¶%ŸgalíþÎC1^0ëÅÛÐÚê
-{CÓI©†{9QD¯­š/ÀãÃåÇœë´—SËz\R"fú>'ýÕÝ±�†ôÀÁ¥“'òªâÃÎ9ÎquuQ^zœöMË—‰2 
-Â Âum‡¾þâÍõõÃ>ãÇð}D	3Znñ?ä+V8w sdÃÀÀfd­¬Åzƒ²þww?íl6Iå®"ç¼ü‘—ÀÙ(�Ó­|éîÞ^�*x*¸ÆŸå§–B±=/¹¤CÜ¶;‰ndSMø3.õåººcp¢#¬¯¯7ñoäãß|……:ß¶øM‚ ŒÃN?Œ~Bœ’0¶À=¦Í{þêÁ`'Ô„éYÂ¥Ô¢Ss^mxëûÔSO1luÏƒÖ…ë¶óÛÜD@Ç£Ê§°<¸y ;ñ]›[™bwAÛ…Ë`ÅRÿÀO·mû…|š7f”ËêêôW£‰V.1èLî#²P�ç^¼¥òuš@�èø³™°]|	‚‡]fõ 4`6.ñGC´ºªé¶>ò—‡(/<x_UÓðÊf¿Œþgˆ Ð`Æ³Tø aÇ¸iœsJ
-Êª,Ó¾	XÊ©¸M²¬ßXrÀ±zGç>ÚÞýC“e‘U›&B|”Olî+Ä[|p]Wò¥Š¾ÁHÇ—>zõÅ¿ 7ÅÉäiM‹”ä*‡Ûv½wõ\^â×i²2´úæ»®j�¾²ýñ²ƒN�qL[{ð\5ÓÃ�úÜ1�¾ÑNòoò8%p:•¯°®3Y#‹J…ï«*še2wÒ±ïDÀgGÂ�»¥ž¾¬6»:]x?÷ä£°x|2ó†hF?Âm™OŠrB2R='Ûr
-×ÔƒÍa‰ÎB÷AXœ¶m‘'D&oÐ²É>ê÷õg£=¦§ \N(CI‡ˆ–2½È—ƒ1ç(NdÆf&âr˜”g{;¬(j	IÖ–×Œyø�0mqŒFýG¾s^�&;ˆæ
-Í\DmJƒñGBYX‚¡„èŸ‚àY@qÉ3¯„:—-;’ôP¸\ÜŠ7Ãu[tÛTo6ÜB›’º m÷fy÷”ð¾WM…C›MõfÇÜš°ƒØ:öûÃét±­ÑY€”XÙtb@ñùvY&¹Œ2KŒ&Í—/­!'E<½¿«0à÷ÝÁm2[i'5ÙÏÐî4,f•D·‚ôs¤hÿò$÷ˆ×y{àOŽ…«K¯*Ž˜�{ï½—d~.År›‘·¬«¨ ,\ø‰äCnÇ)£nÇ§LJJÆN#ÿ>/�³ZðÓ2@`TYñä‰³-S¨Ö	ï¶tk°P	ï·%šÞ›lý±'nþà¹ê1?¨& lwäR¡¤¦U¶¥µÉÑLvN‡ª/èÿjDñ¯%»ØØ‹M&-‘½€½Ðž0³‡òÀØv¶w¤Ü2yMµøFè¹°xË¡øàe�¤3½YT]ÑYå‘R5ÅáL•ßÕÓ6”ƒß–îgCÚîq�¾lútÍh»JÛå]*ÈDêÌj¬+Îõ=Öh“&M:Á=òV‚íÌ¥Âœ×SN}¦e%Yüs•OÎìSE?×¬eNTu]uO4Ô]/¬JOÇôÁV¡O<º°SÚíBIÁÞz¯«Ûpå€«ºj
-/}‹Œ1‡›bÈbS÷¹åØXùŒçv¤#�ïF‹ÓI„ÚWÁíÎÅºMeŸÎ˜ð‘�‡Ì®†�Ë†ë†WçzhBIËÚ(ùŒá){P0cÿ-	žm·½€Ü]‰uf¥5?¿ÿ»Ø¹Œ^;Òÿô¢"«Ú¯dï=úgwÓÏjX_öîç�xèÅÞänÍ6ƒ[:šÖœSRrÒ…m¤½ük^g³N›òu”ÇÁ¾!Y�HÜ²y4ëjŸñË‡³?½ú²ÔìPÈq#œðcl¶â³`ÞŠ@Øõ#Wáõ(«k¨@çâ‡<^h~˜ho6>Ï`Ú*a(»oSÀ=0ý¨r˜ZésÅÇC±v¦ÕéHÉšä–B,¶“»èÖqÏ1ÛýÍ�Í‡•Ö¦Ý‹çÕ�Â—:4#ŽÄ·Y"£•HÉÃú��íþt 
-ê|eÕãÛ™¢vÝ¤]1%[86­öd@SNFªí2ðÂ0©mdêþ¾º@:�’¹DÕ	†mÇ3:óx˜UX\R7PU gC�S­ß3Xv%jÜn­•ƒ�µE>�¹Ä%fVzõ¹g’Ž¬�ï³Š—ºÃ7"øS,›=PáuõáœcÎs¶ù·}õŸ�¨0IàÂN�ZS›‡uêyîâý¢(ß|¶ÍµmÏ®½ååå£ÊoGìR—Ä¾�ûQnówzÖþþËõ+QÝl†Ûæ½2%56—6åÊ
-ç–—�Z­Ç�uä³“TR9½6ŽVÏéV%z	Æp�f!›™úãÜWç\ç¼ÆÆFv²y�´•ÍKàl“€x:Ti–µBúÁUÀ�näâMŸ¼}FC§6¨¥z2UOjeQQvÅË×"‚Ê®vÔ4Œs
-6èäSÕ¦öO-*¾ÎM3ƒl-Å²Ì9TÞ#r»Š3v‘„áíÍmdî‰ |�°×aýêh‹¨Ô¬eê(˜n�ÁÙÏ¸‡r¹–eð+�•Mû‹Ï¨\xÅýåqÓ²‹²Òa!’2ÛŽ!Y U²iS¯mî_‰¥ºvC¤Æ62æ}ˆ¤zr¼ ð]^-	¤”{¬²BZ»»·ã
-+^4¨+dóìEº-Uô³\ÿší}Úesk’Ð–ŽÂdØ¢‹ÁÂB).®³¡Øc7X™>Ý	ž`…••”&³^fÒ)*
-Ä_™BHªÐ0A´š^ïÀ¢bìL/†¼ìNJ‘M¸
-‘º�^Iš,–”4Òû0Þ$U­÷Ü¹£òy±=V‡¸ÏÃ=Nó·(?¸dr zt¬d05wKa‹&Ajq0ìvÓ†®X¥"ˆå�¥��p“³øaütm{â\÷KÏKgÄr$azAH”Ê�«ns‰Â¯“¹¨¶z·åÕÂyþó/®r„=ÛïfÔÞrUEAÚpä”?ò8k%pÆ fëû†f	&»	¿à~P�²[PUÍ’ ›ýÉ¢Òá„ÒÚJ\]¾l�‘3Ê=Šð˜Hù4àj-™Ð÷ìïo}Ñ	\9’ýó�iÐõ1�ñoÂ‡Fð©Ñ6ø{Tœèú1?ÂõÑÄ¹^I|n‹qNàzìºóàotÚÙÖ›ø™IX‰¡j·,?LBãüyìA×·”š”Öy]Ò"¸t/b”M§h	ðuBmPìÊi”ZæCIQûY}ÑÉÓe�3·D“¿’$áý°Ü]\ ·1=õøÜ²²á ×ƒÏƒbj¨ZålFÆ0ªŠ<®¨.fŸ¹ß¯i�] 9ŽsAXXF?Þ‹’ð×hºï02Ãì1sv&àXµÝÝÜÝ«$.‚Uûä…Ü£}P%â]Ø5”À'¾2¶kËŠfÍû.þüÊ÷QYyF×Ìk(µ¦šý†ekO¤·&ü†Ï÷¥h|<R½Ajò%"9&'�*vêŽ±~Ýµ]C_Ñmòuf¾Ÿ“kÚ+Bë"]ƒõ.&}þàW)3²¦´`ßŠ£oc?ñ5e�„‹ñ}+äúXo†´E\Æ Ü!½},Ò>S‰²>]¹»�÷ª†Ù£ˆt·i)Lñ°—Yß¬*Ú0âûvæŸ?ò8Û$ ãíÌ‰´� ågå¯ÃZí³t{†L…J&F³Òª‘µtQÄÓýòá;)åûa±x•²ÜœP®µÚ¯SH~¨	¬&Ž¦	IÜrÝ‡wÇÏ.Mƒ€‘À…€x)·MsÖÖ¾Ø…ëÚÓ·àú‹aœÍø]H° '“w”r ¿p�f³‡�Rv§NèÇ�®û%ÀÏ~$Ä ÐNìZÊTä¡‰Î–øø1ýÌ›¶ÙÈ2@Ò’?È4¸W‡ÑÎ÷w\U«¹¨©¹dÆ=¢XÿïH"Q‘Îœ4ì™°o[Àec‰Ôøs¢;µÿhJî	Š·5!]™”•‘l.|'ü	ÆçÒ6ûWÆùó^Bò§‹f�»Ä2¬ÿåTxN…k·¾y¯{tn™èüŠÈÁ±Š·J’ØôÊm@ðHQ²(Ê	IBÜ#s^ß•ø€$ŸÂ‚äR�†ƒƒƒ{¥±Ä× QÂ?lèÂµ—'IÈY œëúö6¨À[?>£_:Þc‹’E~—!ŠŠX!Y¢çæj¢·f¤KpêMè¿M–•/å2Æý¸ú^$¾d =ûšÐÖV<2†ük^g£N¦`Þ‘q:™G#?.§ƒæ5kÒðL…6�1²ZÕ�ºûZ×1ÇŠ#.€ƒ6:ÀùÆ"“@a8ª¤�?å2j¡e4£8ÝÎ¸¨&G,)çû‘Ã½¿a¡¨e“Ù4‚ Ò•v{è=0ÜÊ`…†s–=®nYã¨r¹väÕÿ/*õõ/.+ÜçêØßàÑØÏ³ºýƒ™_@6[¬'¬ÆMŒ5*#×ÿ*ŠÖaÆ	ô4¦ÄÉ9š.snRKbŒ)Q k5‹­‰PwñÆ®ÔÍÀò‚ç†ƒ;6,±^n_ÿâ�Ëgãœ�ïbøsÂ>ñZ_â’ÆXzYQ�1-“Ë<ÅÀýÐ‰�{*c¦îçŒ}!ÞHI#ß¤¶ø=@ëCO�Í‰_s†è46Â“<|/Õ�[AôþœM\p¿üÊò7n‘Í’˜ïÞç[ã7¬‹&îA?ßDD5.mdí~×¬‰L�ôsk”z%Ü!‹‘[ÒñÁ_¼M|}]§6ée`¸+"¯@›W ìóÀ"¶e,ûnnÑÿ�}d&2çY.‚ÿ¿>þGÛ{n»ajiëã
-öº²Ú%°óÃ$|®óÌýC;†fìïê*„r>a1vÆ’?ò88-Êw],W¥M˜uóšÎØ-ÃÖfêÔÀŸ8Ñ0õžœa=ÏíªÖRßþWÂñÂ &ß‹mØWœBQS£ÊwK[bä[d�#(Ã4üØŸ´YÙð�üøvØ3%Îc«m ˆ'ãGJðlÝøwY?B"Pp¬ÊŸ |�tÙ­ÈÌÚžÍ–­\y„ÌÝÁ•Î®ÅWÙæÓ°_‚PaÑA3cÂPÎ5:ÎãÇ’3a·!/
-(8>ìa_ÛÖ“úòÖ�ø’FBä÷L™’–í¡­­&]»lra·¡%4"òJ´Xï%¢[oCGi¨Ã‘¥£ÁŸ0á@B½xo2yÞîÝ½È4>øÍ§B‰~Ü§†2Ö‚Ê’ý@<
-—Å<`åÊÿ‰ôyÄ>ómAºÕm«ñƒ›_Z»ç…U›ëÂ®v´2sï‚�Ýþé—£C_]ß™ø¦AÅ;�ê‘öŒ©‘Ç�õ÷X. 7¥)Âw�ÝWÐTÝ"­6c_7ÔÞW«÷Å–L	8vî�Õ[+»DuÏâµ»‡Ûl–}pé­wN_5—Xï«-è<ÔÓ´NWøþ3nšIÏ–U«VÁõÄ�‚ 0´õÃÑ¹s‡g¶¸ù~ˆÂ�-RDŸ6¼tâ·mû�ºüøû¾ÞÐÓS�ÓòJØVþ8£xÇ•¯Ã`©êuH8,3á"ä&LmhN( `i|!˜-…M³2ìæ¢h4üfÒ€É{À²hI[ËjSäámí‰šW{7…þ|~WC‘ÅM(PY±wy	ö�ž¬=p1B–˜Aq#ØÆ~™´§Ò$õ0ü—ŸÓ™±ÑWVv|ˆ˜U“n}®GÌ”q_ÁÌ®Ðñm_ä¸?¨�…Á†[šUJ¸ë„¨>{U›:âŸûWXÚ~ó
-ÒŸèG8ãŸ�Á%©XÉw„×ƒÝkýŽ3Ï7Åü¢àc°Ú-p9ì3Œì_÷lq”Y@¯;ûSŸFÛ—aõ–â�¥qþnHMiìîBƒ•¢‹pÚÒÝvÆmh™Ì¯ ƒ¯à¾û“9c¼*,ÉŸ#(ö¨œH]uÕUš£Ô�Ÿ£,	9°’-wÉôÓ
-£Ua#ü¼ÿçâ	¡ŽT.ºß°Œ/ÂŠ^ƒÅ´dÊù‰œÅ>SûžAæÑ¤ÈŠùE—@ë±SÁÿ¬ˆäý>íÿÄ½õÊT¬·u~E]ã‘gÄIP¹¶,Ü ñ¿öÄs?¸r‚¿ÉÉlÌèÆó	Ó¿ÝUs·G‡]2jî�	gÑû@¦áàºùCÁ‚€¶ý' $ž¸„¥à³ø!ðæµ˜W^sóŸO«N°îNUï[c±*5MæÊ�¶K;""ÙŸ°í•Ó;ÔŠþGïkìõ½ãÆ%Ô´U}T—ì &� Ÿ03Ù¥KþA…³2P4VÛ&ù¡!“B‰!ÂÏY9´ÝëØÆ>¨ZæKõÅÝ¸ºëM�¶˜Šm:»P† [º§/}ù¬‰œ�CÇï\�õÂb®ïy»è«ƒ�ÛÅÞF‰	ø4.¨h³ ë”ÂyÖAn8½8–ç¦þÔ‘ðÅ†‰L8Â“7·»¦DFáj#£¡ �án¨žÆ¼V}+ÒB¹5‹Ê¨ò 8Öðâáp|nñ¥SM›M&L<ˆã9+“ë»¤¦¢ï$ã5A™¥ƒå·+”Óÿ×L	:u‹,“²ñ�ôÍ¦ß†{B¤¿ŽÈOÐûîKwßrËPŒº·Áê¾!‘Õ÷€�íwX_¨¸{VvÖŠ�Ø²;»„‘1;¯ŽÒ{¾©çÙ Ç;”Õ­;�0X¾ÅŠu¼N*êlg×™4½¯	–lÄáTÖtq@ËvvÝt48êr~˜ì›°„ú ¸_0ÑüÍeE®ž?·eý ©6B¥ÌÜ°¬îX¸ÞQäˆs_‡�¶~cWUDü¶f“�*ÅžÊUm	‘¹.²ms*Ð?$‰FoeuÚnîÿîi²Ûô[<�ýÊƒº¥ß°²‘ü}œ°ÀŽ´ŸÍKà�–À;¢|Ÿ‡Ò*$Þ‹‘�ÕÛ9¸y=p¨ÿíñ¸nöÊ–w¼äa±SÊaLå¤¹ñxfp{ˆœ´tNQeå@_w¢8áiP~(«JXj’mó*ìÜMee f¹Á²Yrå¦MY¶`�“}vÒC�v™Ë(Ê"¸jŠÇUxå	cíHÊê:[â¥¾‹áø<ª.lrÇã÷¦»Ã+ÉPêvÄE„û¼¡Ì¯ö˜-âK›¢ÉñÌ´—B!M�%÷5ý%<¿;‘¥7Š…ŒÁåFÆ³ß¦\ŽÝìÓ}4eÅ¥¬´rÕ¡€Z}„Ì‡;Vb]IõlÁ–fÇõ\U¡—íÑ^lùåÇõEP„N{F°t¾(’`¢~=¾+ÜX¢¡=‰D“m^ø“o5laµd¥Ÿ"Ìý}ø8~åÉ¦¿¶çî/w€¼8&Æn›)¯i¶¾îÜâ c/XeñYxŽ¼#®@äŒöÅþ âÑ†*üíõ%øþR)›�R¹»†²ÞªY,nv,å#‹Qña˜•Íhl¸½µ­Ö£™éY3ëfTþ¸jÙ*aB…?høéC½œ¯à«w­vù<²â¬Puñ®µ}™™’eÔpÍƒlï3š‘¨7º‹øÜ‚ÊÜÊÆÎ'�«…[æ"¿$�Kê:ú¤�kYãÙ›ëªà@v'©�{ånnÔd¸y9á’	-ÖÛ/åH?ä%ðÿ.Gáü¿_}Ü•«ágdAe2²rž¶n¼ò·ì¬1]cÖ9ŠNêñÓr†ZY*Z¿òû÷õ‘%KØe“ç|[îŒ
-È”�
-»“|£LeÇ5O^�¦þiª7A±¹Èù®fèÏÀ1×-‹éÍTÃFPˆòdW}G4“¿�mß¬·¢°×óú�MÀ‹‡+[
-Û�-üÈ¹ÃekÿHràpÛ2é�9‹J’õ;·(Lvö¬°B1x{‡³åÜÄ1¥°"+{”ÿ:ô—?7ŸlëîøŽõ’que¥±âM2ÒÖõ''1ƒ�W�qV4k³á*àáì--/Øæ¦�Œó@"óoªnßàò
-ïŸâñŒZ†M¹\¥–ãOÃ¥±_ÌÚwñD6à)ø">ÀÁ%C	~‡XÉ�X82SŽã[ØÐ»%à§ž”®›·‡¥@OgV-žT6€gÆ¡¸ ª�‡È®7‰¾z„oad\c_×w§Þ“´´û¼T.a/�‚ìÌdÍ[<ÖÔ�™¿S5dxJ¹D>…q]†{Š©zÜ@q¸NVÙ’þðñÐ=§'rðŠ#ëk7-#‘è˜ìge¼â¿HœÌ7/ÇíO™–Ow‡_6›föû×ÖTÂ[ó»£±È¿ÏKà�À)³|_<”¨#.D~x·Þ”lPÊÝm$—[xX�Âé_ú·vg‹.œÐáÏ˜‡VV�˜³…Å|ìm½égu=W +žªœeÜ"LJ¬j$ÁõcÌÈ¼õ?„¥£xÜ(ÀàÛ°ùëYÅÜÁˆx;ÈUÔ&Sàmýš-Èæ¦¦ßÏ¯­òéØÃòòìÜ80¢ˆÍñ ²¾¦ìÚö¡n›QÜDAðŸ�€Ü5Üâ.(Ô—¿<Ìs}Íñ|¥sÎwò‰il±([dI“0ƒ5Z–½ÁäÖŽóJç!(¨c{&¿x¥™„]Ë*+“Žûñµ¾ùføpÓý’:ÁÃAe�fz„�r4Î÷–k:NtÚV‚Ø£cA*·3¬¶ÁCúê�*³'¾ûÝîåw~a‡f�¬3ÄÄÞÊÜë}™Gà0_ÏL1›’3ûçË©ÁÁ=ÚÇ—.Õœ65-³�ùü–j›JÆFÝ$TàÂ×²…¤“Î÷Ã};c¯µ¢bô¯vèC îyÃ*u¾{€ìx=ðb+À±q‹HÄz�Û—´µ~ŒâuÎWrbÅ�hý{.�²±»ù5V¸5Œ‰`«ÿ(±å0¸/¾çøÁGÚ?bi»;tä‰£˜¬ëÍÌDá½OÊ1YŒëàGÿ]&—íqËÊ@ÖÒ:ßWSÙ�O�Õ1Üoþ?y	ü}8eÊW�¬b“ãr9«ÇUæþ "y»%ÅU5µ/·{°Ù²:5Ñzâ¶Ææ €dYYLÀo 7ò'˜šèìéí•Æ–¢ž–m7Ã—ˆ<hmJ§™¶¦Ì5!ü¢›fEªûej°1z=TS˜Ë¾ªz‹�'ššþü‘I“R#JÃ	 ¢bp¥EíB¸/ªQ0DÞ?íÊï7l½A;/J§a{L@/É%[`Ý ˆl÷q¹©²RŸÓDÖvzSÛB¢åSs¢S,UŽÁ&)5�¤’�ûö$–××g55ÉK®¯|ðùç;¯š4	õ‰Dúå­[�/,¹:)ÍÞpàÀÆ‹¦Lqüº#Ö¶ðÔ¡hÁÎÖ¸ÁE~�O’ì¾”6PÀY›ê×[­�ƒjº8!46ì§ë¢Q ÎÜ&Ð‰e·}~ÆH@ƒûÑ’�ì¡å·=Û7}z#_¶b…hö§P‡™ukI@š�}˜QìíÅ=XXÃˆ<¹j]C«'ÏÑ¶tuXÓÜœÌZ�¾@Ìà=}{Moq±=¸}¯Å®¼2<…û¸ îÞÔÕÕQdÓ	ðó-$G*Ë�,Ã÷jÌ�ìÃ¢óBG{O\·Õ°•HêàªØ8²3hhì÷e}ôps\ƒÔoð
-ñïfTþÄ¸low›\ê’}²ŒQ•Há„ü±þ8Å=¦;¢gôv›Yßzú<Õ¨:UWí÷÷ ¥|ÍX¹Ná~olÏù÷y	üßKà”¹km°5ö~Ý´[ün6Ð &ùÉÏâì·Î†îd¹ºÇIr®ÍÒYDÕÌŒËç*“-¦¥Ô�M°rFV[ó€Š}×J›°#c_½ Ú í;VÝ>��Ã-ãQp@ÌÄg†ÚhH‡eß×in#XlºVîÝ«^;}Þ{ËºQàìAbnÓ´€xà9‰ÑrÔ@#v0bµ…ÐM¨Ø!cÁ@oPõƒÇoyGæõ"Ø¼XÐW-V.àS*%+»1¡ô$ù.ƒ¦A/SN˜-ì‚½=ä<îi„»¹T2WT[¼–¬±¶½®ÍÙBTåhBúÇ$`ÏÔþ,ûK™;íL&­Ò‚qAÉÌÍ“]Þ¾¬¡�“�d‹÷gÿZ
-&/QÊ|î�ëa¤þÑÿß„$!ž2ÍEÐêw€�ìþp‰÷éjÀßFÆ;öÕÁÂºêÎ»Ñ"fŸÂÝÍÎ"Q®› ÔA‰Z9ÓSx˜%‡®)|§âQKYÃÕC,·Ÿr�‹i»£h07TfÖÔ÷öGÉF'OæuýýŠ• }ºtéÒáÆQÚKÿõŽ
-ì®méåµã}V…±�p5@Ë?ƒ§)È»5ù[óÆ{z0çÞ’—Ûb¨$¬†ké/±d×ÍPúHTóÃq�	!W	@Ôó �»Ò´Ì™’,È\åºª¶`Ÿ³y» ½yKùoòxg$pÊ,ßùÈpZ…r>+Ët]Š¸$nÇ³9��XEo6|ƒ*ƒnj]Â¸<.‹
-·	€	¨¦ýêñ×(ÔŒª„e`9ÁmÈK‰ÂÇÃOØŽ¼ê¸1Ôˆç�Ô—n…À¡1Tà'„oÖþš›+�€&ý¸N©}¿äÅ@Ô�°íHYn1-ÖÍD£Ç¦®þ\:—Þ)#P)×,fÕšövmÁ¼y0�ßÜX*óùAx@/EâGR7‰'©S�¸"D15L\CÌT�çšáe¢¾À% òä–Dç0^ØPD¹pÐ0¦¤Ò¹ò°,µ¡ªðÚñ“üsIÐX×Ÿƒ9MÆÆ h¶ÇÁpéñx¤�UBRÛûÌ‘(2�^‰-öùiÛLcwÀDËþMgnpíâÕŽ—åÈg'¡á²Ù¼’ŽR=èËy�"èE5[2©žá ¬[È%‚€äY\”+-Ó*ÐDS˜2¦Æƒi‹†Ã *ó†LÒO’ç.ÿHFMf™Yí¶6´öº”içe^ëÏ*ª©¶øÑÜ±#ÊfÏ~²yç€ºb¼o4€¾Èk}„Er„ïðÃ«û^/_±bXñ:uC×àTé|˜Wy�«ÌÉK!íí‰ðn)«9)×#óy=štÒŒ
-'½\v‚Óy	œLÅXŒ»pßÜÙYø Š«Þq$¸9rÙ»æˆùŒÊï]3ðü@G%pÊ,ß‘W·N¤,â³Ý®ªõC8~ô¸mßØönÚÔéfC‡%ÛMl3 Åää?lAÊitá¸ ãÛþâUØœ{z~�5NÄAº_y[mèÙ-ó+‹š_íŒ/ÂÖò'àO%`,Gcƒð÷›ýÌ2ã«DÑ=ÛtE¶¤X…á|Bº=ëWƒ�Æ›%xŒÌíÍ^7ÇHÀÎÝhU!‚:)èˆv$x4îXAîá¶ .Óš	¼m#´b§")©žd*›™PÖéúœjƒ¶ù~XàXcì5ruaSýÑ­õ–¾ä(:Ó¶ÄW<ÌŽÁ�îÑsâõŠû1&çH_G€ÍJ™óàÓ­†ÑŸ“¹Ø‹}ßœÒ“Þ\òÆ1’]TTD‹ëë™Ü7Ø/!‹£,jJýH"Q[F}9f»J#…B"§(
-\² ØºŽ£¸Ëòz$�£¡Q6™sUÑÉ‹ä�$1¸^mÑÆB¡etŸÊìÍýñá£>ÿÑA¼Ô5ô87®Löwcí©ÿX4ÃÈ—À8W¢jêãŠÈ— Zö›ö=­·6oz:Wÿ©Ï}ÍäºC(ñÈ�¿ÜÐÿÔS'â’GÚXÙ<,r‹ÒÒ2ÿà½ÂyÕs¾„%~¯·¶ä¹ú·paŒ\6½ÂÝÄ®üÔå±\¬ÿêI“°q{sÃàlw~,ÇJà”+_‡äÆÑ¸Ÿ˜r¤|úØîæ¥¶Ø…‚èjïÝ°ªÛñ÷-_¾\¸ýþ‡? I´Û*¸s·R3øì‚Êa¢òáË�ëÖvÎwQú	Y––Ãjõ›233¯?kY?t‘ì¯MœF˜q¶Úý’Ìàf„5›ú¹WÈ†dÞ÷Ûü`hÉŠ¬þˆÂ:eVCc¿/ÃÃ³Òú Uà+ÐSÉ¡„S†–�3;“%ÞJ+“jgIOd¢ßJµgŒ’Tç¦•Ãˆ…Ÿ§3Ñ?4uUÂçIÜµ=£éüÍ9tFY0Š÷ŽÖ×Õ9VÞIÇÞ
-"¢¬˜ôôùl»?J�Eo7ôwþ¥�ä±¥�°ÞÑ{�Ïo"¨`Dh¿ØIk„JÚ•
-!qCQ,5ªKqûY”ˆé £�}S<ðXv]ñô`(#‹êð¨^êŠÿÐ'
-·jÜºÕÓzÂIávîû¶Ã±@ÎÅ¾Š{~<Y–iØgM¡gHÝÚŽØç�%y7Uû¿Ú¢oš!9vêÿýzÇ¼2·ûKÆmqi¯|º¼<÷nR`[�É¨êôj%Äau÷Úg{Ç>GcçšöJà”+_gU†oÏy–Q —R§™¾L(ò€;F,„ÛíÿƒIºÉÏrO�@ÁPÎý:`�káëKÙT[ÛõrqëHõGtŽeVráe÷£dü{‹÷8‡‹€t"Ó­Vdármß÷:)/‡×]’Ô"�7-ÂšE`h–õNÝ'Õ¸faTqÃï‰„/²å�V@¹`úÇø±(“àß…hNª<ï»�°{WƒŽQLGd@„±2y§ær*ÛužX¸ÔñûROHu«ª:‡»ytaéï¯íÝ�Ùò1øwÖ£€é¿¥Ó=I.–…²>gþiÏ‡UÛøªV¯¸¤âHñÎ5­½PÉõ¬¤ÀïÆ®â[=U�5oµè8p¶TZº›‘×ŠáeÍ.ÖTuý²º²wÂ‘éå·ÜùAÙ8 5-Ñ-;,rýñÅ•Ex¼Ž]ÐFd›=;%pÊ•ïºîXUæÚ-1‹{=~n�ÓMkÒI§"`3	_-Ä¶xM*�¹óÚÉeÃ$:[û3¥2}J©<kð}R€>}| îÕžäU0|
-aùD%�ÒK)›Ë¥rþ`$hÊ½wîÙ)úü¨ÆJ V;•’Ë`1V¤’À[’ºq¾O�.HZf¬o¿WMó?®­yCÉ8¥â3&]¿}¥,
-±*·ÇN¯.JB«®ü±S·î„Eî©ÃKbß�µèRšê+÷û‹Tš]ímÌn¿
-LrcÇt¶½6BæÖ×Øni:\ê€JƒH*3'E«BÏÖ�Ù-�mcÏ�çD	œòJ�	c¡ÎÈÝ‚)/tü(Ëk@Š^ÁAíE2œ¯E€!ì¤Šþ×š@`Ø¯×–B‰MEªê‹ð^UKˆµlÛ8T]]=úãéM)Ý”»÷eË=Íºåžr¯84>äI—ºˆ:© `®uâóyWH :DÌ^3Ó
-‡Êa°MÔl>xŠQî‰´µòs‹š?½z|ÑaLftWÐO\’¥iÅCRÀLòe3(¼ìN
-3d¿rkÕìóº·vµÄ�ÒDcÐ4˜*‘Qa;˜³Í½^ÂÛ(Uü¼Ìo?ùÀÿ‰Ã*mìugò½cí:ãŠ”NuIn bø c\® ëi8bØ`÷’€»çÑÊÊJ¹%N}2ƒ¬ñ/áùêgòÎ½uß§\ùd1cZw ¹`‚ï{Ùsƒ{€ÓÀ:VE9[‰j?f‡;F”ë«í9ê÷ÊuøÑMéM	x!_[8kÊ1¥ÉËýÄpþU¿‰¿ó­§™ÿöÝ �J”FÚÛëî(PÔ=V¾ŠÅú/ eúcRÒ×w?×Õ7o^ÞÁ^ßßï”bÝ�C(çÇ?Ë¯X“Ä‡”î¡”—H”Ý0ø¹AŸwp÷�xçärÿhŠ÷žÞ\Â%yõlªCPE‚Âtï³ìÜîT2Ûy7jži99\«þçÈÈ"°åŸÎ9ïò²Í/<�VNºÁff	è>[Á®š;¸wû+~_é`Kó®¾?=þ¸uý]wUe¨ç_¸,ß\¢¸VT'º}swý#æLÏ/ßÿ8ån‡M›6¹�êéß6þœä³öÛiy>8nAJnÉžT¼®?´¬VÚŽó_ÒÍ�CÀaRPLÂö¡Â`,Ó»5ïJxãFý¾ƒÑ;œ!èÔ©x½EdLr¸ˆk e+!Ó a*Øµ„	+ Ã+EšùÓ@zä`%Ï F»þ_UH«—ÓÕW¯xøáã†øUcç|�Û³øß×Š÷6Õ�‰]]Z: ³÷ŒY¾ uò»ˆg±‡›Ÿúq ˆb7‘`Wªo†.
-nfZ9ÐxVz˜PkºåÇëÜÃ°9çÙØ
-w‘¥;‘‘©Nç•¹„‚¨<ÈŸ\PtbE—Âçé¬›ò)W¾Î_9ÔWƒ$zðSÙ øôÃ í÷˜¦ýˆ`'6ï4ŒXL×yY.Ç£àeñËmH^Ãla1ÀþLSÉ nþäÒšk°�uÌè—Àö¾¾‰CúQÆ¦>XD„+½¸ÂCÅ©nYS}’èEj÷¤+îÒˆ5ôC¿`±“„ (@[¹€r}åÞUh¾å–[†­à'Çª‚"¹¬7kd 1É’;—I>}óì7R—ßñ‰�é ÁY ÉD?—ëÖ3©²pw=‚,@É–¾B05Õ{¥Ìw:„íëÛFçÚé{€[·*ÿAvðw¢yV‘éº~§VQð4Ú:!È9¦ûüÛ3  »NýÑ˜ìè –ð¯(tøéºîo•%¤¸
-æÎt]wy¸ò³Êk–_ü™;g4 ¥Ì 3C„ë;àþ�&©<iŠó`�úæ[|WIÀ*Žºá'
-&PŸëdS£^ÛÃ&ïÅã±Š	ÙÄ|•¨¸~€-÷Ë¦ð«œ¬>p[OðL¶…@?hrùû3¯_~¡³�wæ.L,èFpï9l´ê8gf,uQqÈ€à™9ö&a"šÕ(§µ§¯,Ü›míŸñìÁè…ÅÈ-dÒ%~—ÛæmP&Éèm}}Dñ:£}jï^É0ì«$ÃnÕŠ”Ö¹e€r&z^@�ÂÃêAÕŸ™)å{ýxG”/8PcÒ2²os(¢(L°máJÛ¶P#�Þ qòUp4|S°…Oi��gŒ¶>Ø˜H[rÉCÈÖJ…¤2Eì}ßÚ–t	¾Î+à¿q#ÿ‘¿ž‹ÚsÙtàEø�ï	ÒïAV¿.#¦ÿ˜‘Õ7ZÀlƒ€'×5 t\^âë«Ge'ëmn8œˆDŠ`	Sñ†KP3ïAî½yÍÐPÐ�£m­.ê5èzXÑ¥2•žÚÚºw”°çtÉÓ	¦9zD“ëDQÒÌ!öúUÈº™<Þs�‰s»âld+V0Åš€š/^>kÖ1}5ØEŠ"¾uÑ«Ü]±ÒMX`J¼¥ .‰!›s Œ£�ëÓ5¯|?[§Jù
-N  óˆUá(Jîµô_emý–©}Í²´�éàq<üfA�X�-Q`õ¾P°çS¿¢è^¯û¨ÿu'v”3‰ÀÜŠìÐÄ¡áÒA{*ù3þ�%@ë«‰ºe|Ñ.•è÷ñœñ +Wa”äF°ØO„›�9ÜÌ>Ð2/ƒž¾Ž0\^^¢‘Ajú"%i9üÍÌ>´¸€o‰ù?\³×£VàIù/ŽoóT~¾áö/—QÅ;+ni¥Ì¶÷¬^ùÀð 5÷âŠ½™äªAj�1ø–þŠ‡Jƒ;JÛ!ÒQ”/UX›†ÿ‚õÈÝ¼ßç	}[�/"õðOZªå­çNå\òmý}xÛÜŽÂí—ƒ³/7)ˆÒµEM�ýO××¥ÁÁ�‹ÈÊu:5vØ†R*0},”‰à\È‚<å1"Ù¯ÁŠ97«¦ýÄ/ô¿2dŽ«wÐœÕf—”BµßV÷]QY?“A�¿Oœù³O¥S·l™gNiiHïéé[á$ÌŒ+nFtãáÞ"Õv�z’�Cê8Ã3SruÂ˜¨<fºì+©|üöºiêßF©¥M=ÉÈàî¶x°EäÕ{›÷í_,/Ø~2êŽ¹ð4}°�\P�]u"—vjÚÖ9É)Jé3‹º	õ	kt[ð”Ê�]Ka±;ryÏ]w�KšÒµÌžJMÚ#ØæKH´šÏ2˜íFJá3ºÇ¿þº@ÈÉÞž�ãÂ;tè�<)Ÿ’|šîî[wó¶-ß&EqJ¡-DÚbDî÷¢Kš‘­ö:[ú†ÀÌÛ�ì›ØS¢`}…xCß×ºŸV©ý:8”C9Éa Lcç¡:‚druFÑ´•ß2½õ=ü‡ýö3wßS}NEõ‡lÑýdbU#è@‚	ó�6×¹ù â	+Â(•WÇ5ðèw¸P¤UÙ3ø%:BŠøÂU•á=Nù ¨­NvÙäûsËë>Ü7!ævÚq—ž–�-hSuõUA2ºP}eØò^ŽŒN±�{×„„!¸ÒYne3É—êŠŽÔß¸î¶ÏÕØºt'"�%–nI:å7YDú¬®ªRLþïº¬<d‘ôêóýà5Ñ¼˜Í_´+EK^hÍ”Žðyœ–Iæ;9©Þ¶åû2h—Ÿ»à�`O	›†Y.{Š‡•å%%Ù;†vÂ5°ŸÇPRrƒ‹õìî:˜¸óê«GÈ@†i�¬Ë„d‘±£y‘íËœRAY;»Ž�°Cø=rÊI'‘ÿã?žv÷öz]’ï”—jçº¾+®è@óV]ÞÜÛ»³ísÒÆA¸¿}MTí“§SœuyŽŠãñ�“59º`cë=
-Ø)i}¸¥}ÿ/›ÏÅ¹ð2T3²§X"û†OW¦.úÄgÆuÍøwZŸ5°Òe¶o/ ïþvB"s‡ûþÐÜ¥—|.hùúTT[ÉÅÄu¯ÕUF¯=26¤RóOÙj’leµ‚:y†`îA	ì{(s•œ[îß4<ÿP^Ž=¨3žUå“¸K9ïÊƒèñ0¸µÏˆÅìÈþ9?½íÕ~2ÐÛ$P Öºeb/È¥âÓ`¡ ‚Šø’ÁáëÍ¤þ¬	$î/
-Ï9÷œWìˆ�w|ÄÇ‹\²H�A­Ã¼ ÚÄW5—?{ÄÐ9þÌüçt	Ì*)1 %k·{Ð¤6ŠuÈË\²0Žz½Žå;rØ—"²/dÕŸgþo~¥ÐQž£Š×±fE*Ô^<ß-  @ IDAT€UDð(Â¾Š’ù:
-gÊ•õ—Í‰p·$°�i“Øô.ÁŠáöíG�7#�Ÿ®W‡Dh.ª4;ý�CËÂyŒ[3Qi–l°Ã4w eÅÑy½ÒÞ ºãfk¯nPZà—hJd~ló€Ä-yåqÁé£î0'É¨Í’$·è&í2ˆ6Gk‹Í[	R¨Ó5Ï|?ÇJàm+_§9Ý/yyŽõâÑ]’èóx†ÛM±ô.½wp¥áñÌlö üVÿÎ(»#i±û¦–MœÑp´„üÈ�DoÁO'á‘7JU$%®†ŸB¥‰‘ïó¯ÿ<À¢åk§˜eÍ²,�D
-ÍÌêÏz½ƒ�Â1Öi=8BRƒ]ëçWR'+rôX²ì6Nœ šœá_£ìNŠÂ±1Tö T×HÝ¬0úeÎÍ/â![%xF±°Ž»�O™sŽì–¢i�›°õûÌ\jïusçŽfÞ¤Cå¯
-Dî¾tÒ2âGY%W‘_²�4^WP£‹�#ˆ²—N|±+¾xÕö¨ç’©ƒŠ¤o#‚hJ’¸SAÄT.zq
-|tùãtKà”(6™±N]´öƒ8$2Ã¥'ÝÃ+­÷)®.ÔQÃíÓ0W�ŽÎAÙ ÿdŒ¼†ÅuñêÖcVÝÕ�>ª�0{ºFé¤W‹²{zeg'ŠIä�6	8¾J“˜�†E¸…z–Mv¬»ûÍ¶ÉóXÿ¦#/W�ÁÕ¢rÈø©JéæwÜTü’$By1û!Ë?§¸ƒOöV¾|aY¨—£ÔO·Ìo_|ù8bòs²	£Éí&»mMúÃÅ“+{÷"9p4g·øJîø¢É_mþ0êL}'è-ø¢a±ÛPVë×êÎž¨:¶ «¦õ-À>õtWWá>˜–•\³’H·È`XÊV@»ìùÍ±À™ò{Ÿn9Ÿ-ý�å«75¥]D,�ow „(åS§””Œ8ôSYî§(¾rÛõw\™Ù½qCZU×¢”Ì´2)pŒòu¨(‘$N&;´XÑ-:ØÛ;v›y¶È-?ŽÓ ��--=H5ï¥¦‰ŠÉ–¨¬<æy‚³Uy?òê(’ŒiOEØë–¡ªÉÇ¾"­[Qånšzxq¥wÏü’t0¿¸îŒ*^gÜ FÈƒŒÝô\“‡zv¦¬¦>„
-(Î®šô¡É€•�“ô¤U?…xJ Ð¹ÒˆÿdHÖ_êëß(¹å´çü“ªq žÕTdSÜ†÷Žy7ß>åG·­Íj}MÉ„,ìÌ¨º¦{Í
-óòK?û¥R\–ÿ½9Â;ÇÛV¾(ÓâeU“çq¦O4+µmV4˜€{wÙ²á›èv$QA·We$0mÂ„€Rwát¤Iâa¢�Þtæ˜-’c¹XŒ£¾F´…ŸÍ„Ë&W!0p‚ø4È&ßÅ–€S@ÕcÛÜni<4ãì”-.Þ~\¬ÀQ¼ò”9o!¤®
-¸C)u,Äº}2Öî�ÁrGÐmÊº�~üM“I÷vµ5\PSÓ‡6‡ñ²Î5Îq†§KÒŠÞŽŒéu6Jž�tæudãé%Ô½éÔ‹ l#¨rò°hR_[ºÓÐ´Ÿd4õ>_Pþoó¿x<«3áœEçbWú)àêG©Øÿ6�šŒJ!+>õàâB÷˜»¾@Ë¡œÏ
-……ké"ÈóˆøLãŸ ÿ·ÍíàD¥mæ¹J7ËD»6Õ-QXÙX‹L�û@Þ»°#~=Š÷.C-ˆÒ3a¬­"ÒAžÓ²Ïo¨)ë\1ÆOµ¹)@Õ÷"Í iú¹ GiRlöÊáôÿÜ�ü�“@G–”Zö”’+6o�ò?�SF#ô­ý¥LV~‡gå9CÏüJfË�„EÔ&Ÿ‚.ž”�åûÕ$¿æ†uðÒšpÂé¢á`4’ä’ñHÅ–”KZ áI+fòdõàŽÒ;úÑ©âLÊ%qi8”ØÕ“¨¶á[†aý@GÑ?ŸKü5àe¿ˆ â@»iÉ®ùhIIfì€‹¿ö…K“2{U¢§{mþY©°x3IÇ.08›ß=ðÃ;æÏwPDÈQA•˜® âS­¨^I!±ƒv®ûøvÇö‘j$pÂvíïmöÀºuêôE—ü¼$	Ã0À‘?Q&rwã�rí”)š£X7{C/¥±ŒâRf"ã�‹‚òº%i”�¸kQ4þ_dŒ¿ML ®âöÔ€x?P(¤µõÅ(_gE>†›õïkþüwŸoiˆÍ>oèd,E×b$ä?6(æ%iK³÷‹¹™z|"Üd1Yx‰H‘!fÙ¿€csó%UÝ˜ýðNË±–ý3ÎŸ/Ù¶"Ú&ŠÒû²C(5°ç´àŒâ3s8	JNÏN^Äî^¹DS@c°–"EÓ‘D¬QÂ>v@•ž…i$àÆNà÷#H	çº?ñÙÒtSßø(¥rYV‘K~ØÑõd(º_dîÍY-µŠ7åœëGýäêê^½{„"+MæLWÜÎŽ y4áãÈ©ùÿžb	¼m>_‡¬¹Èçüó¾Ý¹ª‚Âs.ÀZ� pbG¥Ï7ŒÑEa2Í»»:£­ûÇwÙP¡9Ýþ‚ÂÄ«QÂ}ûÞÞŽÖBôUÑƒ$â)e˜Ýh;DÑ–)øB�šöx:”îôôåð)~Îêæª««Í¬KND}rß¼ gØj;àj¯×hI$÷†§‰Û3áw¨å&{ÔÊå~âª.Ú²(à>†mò¶d.é,8b–¦÷9eŠ²¦am¹:¦ŸAå;vn�F:ÍtÚÕb'›f––ŠCí¸äž|n%’š¦€]hê€ßý§‰>ßèNà@J«Nd�ÏË»Ö+Èß³5á÷ ÞìOõŠr£ ÄëÞÛ“%O>ô=§œÓè"ã´±µÙ•HÉÜÀ`:ö¯Ëß3Š°;¦üûS'�·íó=:Û!ÓÑ�]�ëa‚Ž•‘d§vÚèÍu\¾îîx{ŸV�2Í{Á^6ËîŸaÐP·X;êosü|9f–!ñIŸ(]­
-ró�“Hƒ}}ÇøˆO�ò-�Í¨é]ý‘gIp‚HÎVyÌxùÅUÅ‡--ûQ!Ÿµä­È»#\åôâIe�°Î�9wä-Ç–H6ó âÖjJd;‚]¢Ï<x<Tkä‚3ñêiVrÝ²ÊÊÜ®††ŒÌío³Hà±—¶¾¼©ù«ÀìFåÁÁ±² Ålñ*ÒÏàëÝJe;«Z]]Y1»®X¬VBãý_¡Õ=ŠGüÒœ›o;Çq	Ž�×pæß¸â¶kfŽ;íCcÇñÏòþmû|Ç
-jG,]2ç› Ž÷£üïZûÛ_)Çîü`^éŽ]Dláž´m1Éô¹øþ¶!ÔÑŠ­‹"ilµ†•õÚÎøð°†Ðõë¦v@—ìhb°¥Ý‰£ÐóÇ?™˜•ßžkk*’Ô½‰ÁþÁøÕ¥mÃèâîˆÄyÆ°�vÊßtOmG)y&ÄQpÎµN«ÊÊÔcâÎßÏ¶Ã™ãÚ½}ÞPÄóøÀ›=}í¿8¾H,ÈvdÂ
-§0&¯O.<x/ÄòÛ¦Þ/ atyHV~�³´�(,ÆWäØ¾ØÒ¥KÆsGoŒ­pïôéN±×Ñ¿�|Ÿ=58få{»MRÝÌr‚jÂ„f-Óš2¥°n¥€{Èà¯úÎø9
-!¯‰2·RY½Rv³[³Yzþ^þ¢ÁÒùN‰ØÉ&¨W%_*PŸŠwtkõvÇ™¿þÝ%E((Ó¹ý}î’2TíÑP8ðá¦&rþû¨¢øÿÙûøªªký=œéÎ7óBS˜	bA,AÐŠSkûð=ÛjmûŠ¶jµ}¯µƒ­Òñu´ƒm}¶¾ÚZŸµí³*Š¢€2©A‰B27¹Ó™ÏÿÛRÛIßƒ�óSîÍ½çœ»÷Úû¬½öZßúÖIï‰óÁºçP¼	¡Ì„4D%íÓ]ñŠvnÝßÒ¢Ú�.sia�O«®~Ûs!žúGîÙS1)ç€è“xöÂˆá¹ôl'éÝªZÞ>àíÏayRŽY9sÉ¦öxÆmñÍÅ�{W°ôŸÿÐÐž7(ñÛcÇÈJ`D•oP‰ö‚¹ì•y¯¹sgGÇPk1ˆ.gÞVÔzÌR9`šºŠÈÒÊ WI]Ø×M “�¡hÐ5ÔŸ’è³>ä®«Nºôÿ*õs°Mc¯ÿwì hF§`›=€ÝNŠHUÕ_·n[,ïôeË§öƒ°š–¶â«YréœÝ=ýK^EEñýà¹§ûk?è©€HØëó”_ÞŸëï€YzRËTËRÄ³~ å,×Ï¯�ÖþxÊîAòßÕÝºqóSûäxô=€?â¸Å)Ûøœã°š±ÓÜŒQåû`6Ix6ŠZ3è{fMEAÑàÄV‰k±?1Ë[…Zm?Æ~æ§©¸ù3NœÛ°t¯ËÊ%Ce»{·­ïûðý‚-°Â³´ôÁšãÓ&ÿq"»óé&Ç`>ìœAâmM¦¬/«,¸m<õðöFózrÔ:^±b…‚rV_êöø‘-ÖÕû$pçwkLþ¨Ã~8íüåSV�àÿ|ûíN�O¶¤ûúí¦æ©ûO´Ô‡Y©b1ZPÄ³—´Ò÷&]÷`Â´/7-ÒŸN[ßv%¤%»î9¶çå€ïá«Oj[°P·¸î]‡€ÝAÉuÞ¸ê4wÃœ£ò÷µbD•¯˜´©mëpß¶÷H¶È;gÈõ° 4Ü»¨<rÐØ]×õIV4,MÏê$`}¤–]»†Î[¾|¹a;Î™¹‡,ËÜkr¯’Œ¥ÿ}#<
-®’GÍx­}®­µáÍßüxÕ€À³
-e#Ž“uñ`wÿ§kà‚û ¤ã2öÞU&�3jko�Ìä¥ÜkD†Ø=®ëv¢ÂöU‹ßæÆ8Ù}ÿ¯?ÏØ VY6"¡DÈb}	no‹çÖCy¾ÚÒSóò‘Þùßï±¿¿ª¤Å%ºïW2µU™¯Æ†Yç0v·L$êÓT×œkŸLLúÝ��ügÌjüwÔŸþÝ÷Ñöû™mÆHv
-ù¯5‘™ö«¯6½„‹¸s8‘MžyAÊð>“´éxÔ×ê•˜½D�”<p#yê:T,È´ÇóŠlOž—ôì>Í1²9Ty'‹\�dóÇîuJÀ´°Q!ˆì2>}âÄE7Ý€d-[ùiË/;v[[<ˆí@�¡=v·[€Š­Ñü÷‚€fÞ‘þŠfçÆX'¬`Æ” dÓ¸ãø4$îôö´îòeg¿bQùÖ¢`…Xü�Î½ÓP'i�´téâÊãý_øB}¼·o¡�Z]^¾Ö‹$&8ëÜ)³²ÊöãºîÁk¯™P 1�Îu��Ôä7«Üž“füZi[ö^ÿ¢ø·¦9UbÊ'�Ã½_ò“þ={ª‡ï£{»‹ßÛ=pÅäÜ!Œðà}Ç^ÿ>	Œ¨å+š0¿¤ü’V9vwÅH‰ô)Šuœe"VjÛ•>bõX#[N_1È£Ìó–•K=H=š[î“•#–mmqlk=ÞÛaêóãöÇÝëïëòØUgœ¨¤¢
-µ‰óÑ“ßË‰ö›°$ÿ& óû$¼·ßGÓØÏüaå®ÙÙÅ?(Î.¸XØyã%ëèÀ E±ÚÝ|RlofÔ‹sf©©¬0,)öçm�]Es¦ÈÖ.uMÅ³l²(�°qU¯ø4T³ó²¨CKÐmÀ¶Ws§ˆäa%÷vç÷9Ôû9’ùÿ[±IŠqº= …E™¥•ðP<I™ó”k’[núöÒâ%¸æ™�í~`…¿I}l¹x~Ï�îíqËL²fÍjP_‹í3x¬­½óÇº«çÍ0 ¯,Af±P¿GQYZòØG�LÑƒBAœºóÎUP°wxŒvËŒŸ“äŽâÑ67(‹¢�gÔrºþ™Ò>ÃfO¨OÊs€"ËÕã%¬Ò€R!OÂÆ¤ ñ$þÅ.
-]B`À—8¸=·ÕL+¶EÛèLEU©<�
-õKˆ´TôûH†ò¶üê¼3
-Æ(jði7¥ºbûlË-´)ß¤pÉíM
-p5àÃ– îsZï8æ³J÷òOýû²%SÏ9’ÛS¿·º¤zçÃ{íNÔû�ÒpTås’K$=�úµÌ}) 7
-Ÿú‰’i9­²ËcÒf…fáY&àÞ‡p{€»ÛË„ËˆãÿûŸ·|a‡­gmŸR¨žñ‰O4îI$ôÏ-½¬ø¹ƒùh[^Ue�JšNvs²g/À™>T!ø’ÌÈ@ÚHd«—Hp&odzê1äêÿñðÓO�¿ÿ¿‡wt\`S#Œä]Î÷aŸumçŒ¹_G¨à‡@×ü'*R<�ÇÏyîmØr „Û”¸)Ó)òªA9ýÊŸx5co€ÐIÒn OêÊP(Æû�}ðgüç¼²uºK/~èP �Ä^,D,®¿b°ÔöÆ5¥Ë³÷ÍÌí?/÷-ž+ÅÖe~â}?UT±TèüËäÜV‘À‘V8òùaMaÍAUõ|éBÓñB	;ÑAr¾Ï ßD¶à†íØƒàå”/ºðÂ5×|jÂUW�9h‘ÓiLGÜò�ûÞ|“çMVŸùö=yªêLO¤­e‰nÛÒB_PJÒ>ê>gÊô#“´Â×MÃÚLdøá˜üp¢qo))ÉÈçà=÷¤n¸aÃEãŠ„Ÿ×%Ø�g§@WB<ˆH†÷R‡jÕùxÄuqI–-	¤9<n™RÀçcz"%'¹-åû}”=û/¸³ P[ ´R²èCÊ¡&ù*”øG&²åøëß÷ùÏß>ËçœgäŽ*güøXo<þb~N89s˜¿ºö$H([ž>ÔœäZ°¦µªsk·Á…¥‰ªì¤º·û×.£ÿÜýÇ™`»Î/5§ä×z‚KÙéHw˜zìõ“$a`‰™Å\‹Òâ‹þõÛK?¹çÄwcÇ_—Àˆ)_¡tW<*\·žûôáØ²ƒGúª}~°=ÃÞp»gËmI§ûÂ*B5ww¸,ÅÍþ.¯8 LáZIqéÄt#!¯W`"³€“b»„÷½'cgŒZ	 AM?ÊT:>¥ë[D’$+4Ôß2"Â8¢ZæEl‡§^pÉŽguÄôÒLJ:Õ½+ñ%JÆ{?�OˆVzµ’´—×ùÈoñ°™‹Ï ª�²OB¡!ˆæ_jº�Géü¥ó±Æ\Œ¨‰IÎÖŒøwf—V>¿¦¡÷ÉUÙVðÃ{›ÎQÂÓ%b©&'¦,Å>’vÜ|p!YáYT?—½'žUIþÔ{©,õtÇ¹ g:<5•ôHö¹€ý%™ýo|>bn‡GsY1ï¼ªŸ®Y£pâšÄlÃþâj˜m6»AÏ•YžP±
-ºúº�bÄô‡ÏîV•:ÿæpéG»÷w^z?àA¢ókÔ?yëø1'ÿÿÆT8=C,ê„²4(MÛÞ%rèƒHÝ	¼SkÅÖØL§~ÊeõÁåUÄé²&c³ex œ|È?Ã‰ü "+SÌ––3@Þ©MÿÛß	£åØoò©K.š£•UÔ£3xÙrŒÂƒŽcùŽÂ¨öÁAHÚ¿L.k=Bû6æGs7ö%�ó\î^ï—ùïõúF‚'?Ÿ
-|Ñ¶‹À{m{ìP¹ÈMºû¾-[2)Úb¬ÖîêˆÀÞÿvÏÄß Sn{Ä0'f1í¼)Óç$lóUÇöÚÀ�Wh¸éå&g×qƒ-tUVóÔþ†ž²®µÕŠPvCXQf ømÄKùýêŠ
-Ô–o D+Á*Óô¾0¾`bÅªaQÛSnìØÎ(	8éãèó¨Wiºî½é,¡’ß©5¥yæfùšpŽ·úª«„öÆ±#}]]Ì°m02ÚÐ5šEvé¨³Ø„\úÑOV¼y$ž³½£÷Ó“¾Å»)Ú»Á©ýU“ÿƒrÎ/2æ•Ø®{QÉÂ8_WQ¡×d‘¸g[�àšµ€÷uú³ÜsTB/’¨w?³Ì{‘Ù,Š’^©)êÝ›Ÿ}ãÑc~à=ž'›avs|ü¬ï½wñNóS|7bÊ‘å6ÔÆŠTgœæÅû{-³˜V�´ÆÝH¯éH?‘å8ùUU™màŒ‚WÉDž„óa«·é*K¿Fi®¤—´µõ}ÖâÚw�.ãÌ™2@ù¿Ö™±ïGŸBFU¤ûÁÍ{RÎ?Þ�Ÿuª�ÃwyR¥),¾ŒÕí,®¯Ìõ^Põz*¾�ÉûªÁ¤k×ÙÔØøW3åÎ8¡¾ÐÙPÿç’ŠûsÂ”»@ª²Ü¬or¢ÞÞYÝ|n6Üœ6£ Â+¶cÿ6­ô[Â5!”ö±ÎºŸ˜U^o[ä»–­¿èÓx˜Ò:RzòèW
-{žJÉƒ)B·’Êßýë±£¥tÏÁƒ>T¹8aYKIÍ[\-gœ ÿ—<b¬f«Á•'“k*�´§ÿdI¥Â][Šd¥÷õ¶ö­¦Ö¬2‘:Ì<8lcëÀ�Q¡ ŠÈôÏuÇø$i?>’‡du¢ìüÞ”Ev$²áýã£Í�IFqÿ/ÉfìgN	ì'C[7—ó
-ˆçCLá‘P¨ïŽ“Ìd²©z¸¬”QƒÆl×RI´«¦ˆˆ"yÅ#ýþðÇ�i±$TÖqŸv¤à3"¤ï4éæˆ5Clûý“ç^%ËôK äMÄòÓdÛî§­C{Ö/X° “¨$dš6¼òÔ@²'+7�gÆ™dJJGA‘Ö‘ñ%kÍúÆž)qæÝ*{òÝ6k%.NúÝî�ÄÒ‚ ¼@ejK€Ñß"¶s‘ÍÜõ[Þm|ûºmÃ‘Ãn7öö˜FÌò­oÚ™°\Êr<Ñ`R/Ø»l\QƒÛŸ¬¬<úcÞk«WÛ;Û3Ñ±Âº²Ï¹8øq€ýHâlÜ3P½xµÍí¥Mó«Žêþ�ÆŒÇ~õÙqþ±6�½œe�Mr}Y–÷-¢{_O¦Ü+«ëëOêSÔòËÊ=ÉþO›ñßé>M‹Ï�×áÍ›c˜œÙ&ù¶Ï_êë�ÿéPû^áÏâ@-bhžvžö×lâ6"A¥Ía|û âýÜ‚¢·¶'å„²Âßtm~¯ìçwdëç]­ý7oîHä³‚É¾žÆA‡Ü<ts
-.‡>;ùHÈ6fúdéã–ÍvÈœ4éžù™$1¯ñlçç:Ø>¦xÿúl1å{Ü¯°~™»Löh�öUðµÙD:ä‚–
-Á³pñ¹K§ôÚý~h_Àò8’É#‚„Þ»Ýà¨úEÂH}5œþAˆX¼`\îöÚìì–‹f$}J½;cgŒF	8Š¼„2~%&k1çRº²:“öšá5ÁØÁ OÌNêH„kDÛlµ+®â„(NZº|Š
-\™vMÇ1]nVè‹U…eßÝÝžX4xýh’]jÕ©4ûIø¾‚œ”~;éFÑ¿Œ[A¸eÞU9ýbs¿Ë=ú~¸öBà¸xÎ£ä%•K3Ï½í…Cà;>v8Ú•yû¼xËZ¤ûÿ´¿×eçßë“¼W‚ýCk_üå”MÎ¥ÖsI]y&ð
-2¶Ås=v¼£FÌí ~åù–öù2üêim4Ò=Ïq­"”Jw-!œiœñj²-íN€þé¥å‘CPÈŠ&å|V§öÓ%ZÞ¾Y…$5èËkâÁåý¨˜STäµ´´�«ÊJõÁïß±Wc_Ž	¤ÂW—]ò2²ÖýVê#e¶ÒPZêÝÙÑ3_VÔñå†ešñþns+êŸ(èZ*ñà·]N>@-V;-ß·Ü"ÜW9ùÇ
-åÕà?hËÄ8Ùë¹pžnÞ8uXÁQ#<td}WW0Ÿ&v’äþÚ¼£õávtuM´=í~Îé<Ðt‚`ÐÝáXìÆv3Ù^äS.A!ƒ¯SIYÛ¹eí ¦wP&wÕ·d:\š¼hjÏ P">ÿ#-‰ë áËöôöh®â¤Ré\)Áš~µwcÏ˜á4(¹·¿Ž˜å+nmèÁC	Ë´PŽVTTÓ9âjš2¸B“SRáÝÍ½§×gvâtÙn(hÿºy\Þë3Hr¸bu#9óPùŸ«díšœžÄÇ'¨¹ó†®¿½+cŸŒF	|kÎ”f#ªá:{e7gwII¨Q4Ï§ªÁ]z+¢ß’$~}Q~@dÁÙ3
-I2ß	ÿ£é:¦¾
-Ba%%Qæ±âšßBùªÎÛ­ïÅÒúí°øbN@™¾~ºÄ|
-wõÏ¿·sPñŠÏ€2»‚32…8_‡-LÉþtI4¬RI:›5Jk~iiíÛ\2Ÿ©.íýÉrbøýÒ}�û¡´­¯T(Yˆ*?a!¥<i¹? �Ñ5© ÿüGÏ]:òQ#Ú?ZŽL¢*Ø‹mK#+&4îÎŠ¶—(Ô^‡ôÏ…\*‘ÿ¬x¬µ”EJWoÙâB¬­Èk_y’ÔNO“ƒx§Ë5™pYqCÏ×Øq6I »ªJÅâ�L6Òi:"‰êèÒœµ eZ+³é¯víßÙ'”òà÷ø\ç!.Êy9……6”®›öX“Ÿ)÷ƒ[ün•˜Ï/,‰î œíuu;)£vn¦ìÙw :*ÈPó€®¶ÜäouÛýŽÌù\j™ß”	ý8„(Yí3A0(Ï__üÅ�aû˜æÑuaMÚ› �†iÜª›N1¶ÓM2"æ®í]Þ²Exý£?{â]Îî¿GTù"ØQˆ¾K•yÚr%å‰âôë¼nÓp½f—ºy¶â}
-É]&Ïy§ä‰	HûØ·çuD¥ š`€Å4!
-›|žÝCvvõ¾»­ô¶Æ)×ƒ¡�¶º…øG¯�ãëBmëf eŽìn9¼3Ï07ƒ°Ô áuBÀM¥³m))¤õô½÷&Ç{ƒÉtvÊ�vpƒü¢<‰	ß' �>UQš¡�Îš€. v ¢¨Áév5uw÷²ñg”ýú&ˆ‹&ƒçx¹ã’VÅ²6¦«‰'$BÞâY®@…B¿†àhküªú­€«ºp/–ã¶ßw$©®ŒjOâ¾™…ÂDÍ¾éYTY¬R†“±CŒ öú#y<óFwò÷ƒõ�¦ý¯mÎ�<™=ÿÕiË.„s¿X`Lf‡B2yÉ)ïLíãF‘»d<-COE�wÔUC× ß…½þõ¼¼ƒBÁ�d{ÇîuzK ;•*î0ÈfÐz×{î‚8jâÄaš%™ž�ôÖ‰ºG¿°­9¨¤ÌxÚ¡ªòIö�TÉùãüþ6ÑÃ­í±
-îºÎ9ÅÙ9“™ôB™¼Ù«qô`u8,ÊËŸÇ«íýÿÄÀ*¸—°xÝÚÜÛÚZ®(	,‘™w›ç²‡¸|ÀLöNU|òy¶Ž3Û<Ä%å¹Çö½öá–´Øj,x¾º:ÕÊ*û:v¹q‰Hë%™UIÄÞÓ¥3íßekòŸt]²‰%_¾îÆ³BÐ¥“#®|Å*™"ÙµÈ«Ÿ«Èî£[ÖÊy×²•¶GÊ°tnsew( wnn6PèOX&™¡E·÷&SãÀÚúü³³3TxÒé2À‹n0@ƒòÀßìÌ	íS¾eDGÙ×‡u}<ôéF¤IdSâ¤‰G-8lX¶0Ð¼”¯â·ûif/ò0P›z…–ËZmf.ž�±á	e+.†‹¨ÄÓƒÀðÏGóûº>qôþÏK’ôA6Û¿Ô6ôúÊÎ;¶2¹Ë±Û£ªü>Èô:ü_ ¿8·,Åº¼wÌ+íƒ|Ž“£�°þåÔ5.)Z®d˜¿ëBõä€D¿å8.ó1þhš8ïÃs|_º.ox²Îz#jDÝb –TT>ÉLk¨L$–U:í=ê“ž‡ß};ó³˜É–õI† xø}ÈÑfX•T ÕØ„õõ¦”xÂÒL‡lV9ÛÉUÚÅ{Öl…,Ç”aèN£x&ñ9®Ý† Û>Û¥Ië„Ë!�L«XÁÝÐ©>L¤\|?±…*Ë¥9è$±u>ÎMu¢âò}bÕ*çÞº6ÿ1ØÛL£q�>Ü�0ÊÝð›‹X‰ä9_’Ué_ OoKQdâ6—ƒyó3ÄÍÀ÷”ç/m—¬õëB8 oÙ´w/Š]¼ýXQ™Õdéì1Ï±á~-Ÿ{öXŽ]	¢–õÄéFîÒ0“¤EÁ9œ¶pûŒF˜ßÛ%sòON
-V?ù©Û§x¼gÀ�"#¡3 +P6Œõë¤+fÕ"sí5Yæ–œ¥N½d‡ —wÅæDb[¶î-c²2‰–T6­ÝµË+(ÿxÛ²ÔÑ)	žtÌÿ¶†��ufJ@•"ÀîºÔv¿¤3g/‡KŠQ¸�™-Ã
-“ÍóKTVÏ
-Žf¶]ŠêØŸ€CÓ�šê¿Òë?vëø˜ç]ô*6®oê3Õò¬º£¼\•PzÕ+Vô”’ðÃ¼0ç5‰;3<Î_ûã]÷>rC�Üp9½ÿvLç.péqM_¡Äßà„ß¢„.ÜÔMž=/—ÄOïÕÓóEÉòŽM}z9Õ}=Íþ€>—re<÷ømmiq€t"ç¯¼¥ŒiÜúúúíµÕÕ ‚9»ŽS¶|ÅVNˆL¼fQCmDÖ%
-×TWç	¬ _qÚÀäWÚš²Îï�£ÌE†gõ-aŸ
-v}d·myI)Ç•3gÚªÃ_W™Ë%&5ºížœ·muÞºÃØ»Ñ(�€¤öCáÞŸ²ãÏÍÏ�î¬)ÈÚ='?°sznäÕ™ám“#Á�FË�çÃñØ“©®Ôê—ý‘û'Áœ“Êvó2óE°vínjÊZ½¥Åw¢¥å(l:HC(—¤\Æi¥–Hçôh”§èÛù¿©¨ª¸|�ÐÜ‡ê_õú¬GÎ	û·ßyç�NTó@r½*îEÛQ¿»æW?Þ]Sê~OINK2-½¤ÁË×™9pí ÚÉä´çàž6ÇÓÿCuœÿF½½›“¾#{dmowû6‘�%ÚÁmo¡c›‹õ¬ÒóÖ¬YÛìì:NUùÒ]±Xt}ŒD·"%±âü¥SÄ€ôM1¤÷¤]«ÂW8))Æô—<ÊÉžWT¿$
-•@kÓU8Ÿb%_\`(L6]ËšŽ:®)ÜöqÃ*\æ¯ø•ûÙ5Dgwo“zÏ°hýhAiéÉ8<XqnuuµYŠŠç¡¸ãù…Á.æZRËºß* ™Ò@Â¥å	_ÎµEå¡Ëœ‰‡2·„dÍ´nÀE1Î¦Þ{�áUq¸¡IÇû…GÛøee®•vç:^ H”õÙpè£å+JoNéxˆ¼¥Be¿®	E¹¹9UÌUr+b7…�u™s°2�öV×“!F´árYqÿ\Uv [ÑwYž¹Ì iFª™”Ç=ÍýYH¼’�x•Q9ñù|g�ø”•¯kH—*éØå€Ý*sù½•Z‘þ\xß|ÛÓ³VÁá» àì41u¿*…TjåEÚ¹Ïu&óß-XþÂGn+Š5¥xÝ@¾j´û•Ç‘ÂÀ™M‰ëÞµ‹.^*Á£–öð�{?z%0¯¸8Ý–èìE W°§áã�Ì5ùòO}¦ò	 e .æ�ØRÇõDü^OÒbÄJ£Ê›ö¼hˆ„�îÒe†Â€ãnw]úö˜¶±i�Ó#‚À£ö‹ìÊ;-Çìp8�ÔŠ&£³= åë¡:Eþ€î•M!_±Sxº±«PU­/¢Ô×{AÛžÔ�¯JŠ·‰O˜VR–Õ{-\ˆÙÃÇe¸ð®E%5ÙÄ³?g¨ÊÎ« ²þõ÷–pÙóaƒl(qºkImí˜ò.¸¿á=à·ö› »ûá»éhwVeVfr§m£U"\çÄï[¼~}fp£Œ‡$›¼!«ti‹ÓiãFÓ¦síËäà·<óLãŽ­-JÃ‡j�é5u§K’½ƒš,­Õ(?Ðj÷�z«äo�ùYuŠ°�²CùŸ-Í.ü‚•WtË›MÉ" ãêÊ)Ÿ’ƒàÐw¦‡r¯Ùß;oÑ¥—Îúçþ}#¾¼§úÓ!bv�'›ÀÊŠtõ6º‡Ç¢YÍ½Ž‹¯Žª¾eT¦Ø¨±Žˆß?þrR<ê©KŸ(ÒZPÚ`/E�y‡8),X™9%3•¼? hÈ9X9¯¼ú²ð¤YË£šúMHüŸËEv!ýŠ£˜Ogh)õd8}?«ðØ/Ž�—'èŠê¼ÄŠ	E¯­(÷‰ß˜Z29
-üþ$�HA*;Û¾Ü˜ÉZ<ñºÑþ÷©Z¾Ä¶¸ŸqV‰ýCŸÅÈäT§‘+Æ°Ðï{“3;Õ¥§++*2�=ŸÄê1Ñç:®Dßä(Ï‰ü¬Nü(2@À�²Âþácp2š–ÜÒ¤ÅrS–©:š·å‰ŸüämþÑ>@g{ÿÒª·TâÞõ¶ã^O÷SnX.„L2Ê•Ø4ÀÌÎI™æ-MþY�îÞgËä>à|þÁ[o­</ÖÙ‰5ß,Åf¹™ùf¤6»^7E:²‹y¨Ú¦«`ïœ�<�©gƒ¼ï@¿ÛGöÊ�"®µà’O}*²ÈÈÔè5_rLû6 :unæŠü]EbïÚ3fS±Kú‘ª,,bOÖ¦Ï)c’|uÀÏÞWØÞ;ÈO¸/Ä×<eèó“ 
-Z¦ci\~­¾~µ-È×Ï¶L¸SV¾ Röl¯Å‘hÌÓõuí‰#Ý°·· Ø£›îN[òÕÃß[�§·£Pê+Ê××júù”[…i×-6…Ÿ<�94a<.•ã}��ÁÝÃÎ{;
-%@Q—y|)** ÎsØÝ?zn"3¿Dwlx!=ØN„%ÍÆ^¹�¢)Ð-MXî¹ëñ ‹óX°Ì's@ÿQË¢aÿTÓ� e_-ëé5–ëì€õì×]Sdg¬	Æ÷fæª¸n4WM›–4u„ÎTÕ4Òyð{á?gÂoï=²)Ýÿ· ¾´
-´×¶¿ÖïZ#J€	Å«M™{!¾½ç) ­|ÃLX›÷¬^íð_rA¼Ð:�ódSãY.3žÔ$ÖÆ­D‹x®‹/�P-ÉÙ7=ÝÐ<á�y£iLNYùÆ¼”æPfYºYÆ‚j\jj>3OX¯ññ¹>\›Xi…Ð¶¤%† §WØDž7`Áæðœ�&µ÷û ?.X1À²Ìt”~yº·A)K-.Ÿ³áýþoÍ‘TT¶Fé fFémifü :+«}‡®À?žãGŽ&Œ]÷‹ó>á—¤¨ç~›1æ¸6“46fv\	³T–…äõ&^Ý½÷ê—MÊiï²‹4ÂÊŠã6Í†¦�î…2æÙh—¯Øþ§›rlï¹Ÿl[= ¯(=ô@GG $eiH>~?ânS›t!1ðëT‹>xØ€ð«‡ªç\ H5á¼é–K¶x6¹½×Î~mÚ‚÷DJsbÁ¹ƒãë»°@:öÅ~)™ïó‘_¡zÒr^«)ÊT''YHDðÃ\Þ•.¾4“ÎŒ6�æq8åÎ…i¨IEq€´Y:nçvåçgî)³¯®îhI—cJ)H‡Ï9 ö“êPG}O�°+µ'
-…;(ìiÓ¦iàÍñ\?xSÜ(BÔ§ÜÖÁ{�½ž°ª‚˜0ã¡·šV¼~Æ´|(qB–‚A�Ã¤â1¡­Öiß“YþÐ Î´£
-Ja¨t<8råœ°n#¼CÝÔâ¼î²?W¸¡­oa~$vžëXYšGv…|Ò^î¸¾š„éÎ’ã¢ÉemSÀ'hW|ü3QYñÝ9•†¾C³ƒ(=D?Ìµ©óí€yL$f±LXtÑl€¬ïÄ–b&eìeF¬¯îmC¡RãˆgjpŸLæÆ·*\R½jØ3›îï�Âï ù¥HŒ¢¾¸{™Ów·ÌXÜ€eŸ§:Nri2·¬¦†­[y[™ à¢£T	Ÿ²Bó…TXÜu¿ê;oZii&â"`	çO¾âò›nšü2ˆçsqº»ùŸŒ¨Ò¥p¸- {6ª÷™–>^­ªòåååY¦k²æ1[éÂSwœe<x¿±×Ñ+³³ƒf¨ s­­3™Rºƒ=vÝþnÎÜûû²}½Ë—/7J‘±g‚:NÛå )±98"²�êÒ“3V­gZÕ_h¸ÖBƒÈY	—œÊÉó$ÉéCP!cUþÆh|\«à¸sÕª!+ÿå†í)ÔsÛŒ¬íeÐ�ïu™§!³í‡ö@ú‘êR2Ä{ÁdX§œÏ†�šÒ–þ-/k
-'˜ÂÕ B _Â——•|hÁ®]˜©�¡Ïl�É.ÕÀTx‚mxäí}µÇÜ‘ËVÞVêR¾Ò$ÎKfÚþqn(gCÇúõ4e$¯Ï/¯¾õ÷×|jÂ‰–ôh—SV¾ëÖ¬¡†íÐÓö¨mmTÂáTGòÉÅqW&LþåÂÒÈÕ/î.–m 'ÄdH	%‡™í=B,ë·Šfoµ]'’Š)a53!u&£&ñn»T±h¨îX�e4H}¬“ü
-tøtû0IÇÉ Ö?ñ¢`NÎ!Ù¤÷mYµ*“))¾¯®ð©U2Q˜5QàU¤©¾„6ÿX¼[¤–�Þø@½O"¿µ<å!”SyˆyòfÉ³ŸsTõH×êÕ£^ùêó&òŽkÎù×« t€‘‡ÚZ=ì°Gð,ÿÀt¼˜mÓæ´‘~tá„‚®ãäî¹AÆ£Àñ !eoBaFñn8ÒSÊUí6Ð€Â;Œ¼ÔçúgÎÌÒÅõÈ`K&¬ÔS 6kDê¥þŽü|ì
-�àc%XçŠPýIÿ¤œý³£$vxÃ;¢ ÅÉÇœÝR2wyÎqíœ²ò½yùr“yÉ=MåÙ{�ÇÜUNuár°ÓŽnSÖË-÷ql]&Ùœ‘TÎz— 2!NÏÖ”A÷*E6±\Ã­ÐdÀÔ¸yGšê2dfø—T£Î›�¯õÅ`ßÇ^�JàÁÕ«u”7ß�I±0ÈÕYõÀå—M!ú„‚`ç` VXG}†t.6IyÌ#ûvë™Xƒ%³ñ1Ù�Å…ã
-l·çæ…²�X`¹,Ù×¦\ö3eO©¬\qÊÏÄð6žŽï•¬B~ô�)>)|ÑUÐ=þtMƒ:£<Ò§jî£†cß	nÊ¡šPxCÏ¤èÊ9íFŽ…)qÅèÝK…ò|	ð?Wngœ¼¨(^évT{Û,0½bLŽY­Þe•EM]±ôËžÓ»û²š£…MSU³¦‚ÖóCÀÿÉ4s^>†t"‹>úÉr,¼çñµ½ÇŽ¨1lJF×1äc=…nypš§jÄªª±Š¾ÖÖWïùDÏ²¸„R/®öqéOrÆÛGz?¹¡±±½¢PûP¡¬DÂy¤·A7´�Y=¸‹'4=s¦;‰«êœëÊD¤(�)ßS¤3ñÒ;V¬0_ïJ<Æd¶Œ8Þ�´¨ô®m½/6™í:y†ÜP˜/n|Ö%—L1òida�çÛ~9QU•qUÈ”‡)\]HðI!T3ìè\J:V�_`·×!JÊñLßA_=­ù«Œg¢4ßj³•ŒCªl<oç”¼Érš¹ÿ6nJh$óTmVVé{Ì‹»ÍÁ,†ªPÃÃþFb–»„0ïCãòKúÜhq«'yWb'{ƒ]XÞ¾Â-ÿ¾¿½©¯¯Ü¯;ùTÛ›€þŒõ]QS%š;Ô˜l®ÌÒ¤À'+O lrf×,‚my9•ŸˆPpzÎÏŒÎ†úß­¶Éw]7ÞpdµŒh?VÁÄ¸nöÂk8£Ëà˜ŽeÓÂJC íu¨³ÙÛ¯�R‘jLèª“6[%Ic‰åéÃÝ—Uäe¶)v¸`~ãWXÔ›�€ŠaîkÏ<®öM›vt9¢»Ùi-�ŽžöVOñU‚Òð×£}>^YÉÉí7Œì¶x²¸+¥—©¥3x «‹Ý„àï|XLOÊy¡ÿª%$%(N5U-sµˆ×öîéSC¡ˆD V¹pxC” K¤#ŒØçàãWÍåû+*F7{Þî˜Q7Ì¼D:õ˜/ } –g¡gÛÏÞwÃšî+¦yÅ>Ÿ‹h-³T5!²Þ†O�VŸÒàÈ^Çp5T)"Œ]	õ¼‚pÑ/w»©µ‰D»¤Züƒ~.Î¥Ò¿ �r1“‹Ò¡\÷é½»kŠá‘<vîO–¡²òŽã¼ÔÓØ¿_O�NÎÔ:Ôý7x%~4…å¼”öË…S¦NÏÝÚÞ’˜–—7´èÞãL}ËÚˆ·ý¥îîIÌPsLb_êcÒÓýÞ\‹éŽåÅ{_Ý€^áˆ”ÐdBúg@Ïæû©Ufî³Y%Ùu° ­†xzøÞC<)—Èn}„_$Â÷4ò�ñÞ�Ýp¤%°/–œe;Þ]xÐßÒ%@Ò�ú¦Pe»Rø«ˆ§€7$„Éµ™·Y¢ôóS#þh‡»±-�m­5Ë§ùüz"±sQyîkïm.,ú‚¶%™*IkiÕ—–QL’îÞgË²êa_�jêÒÞì^,KÎgóTe-0ºîªK^§€ì*	õ£ÿ™Ã_G�Ã-/Ÿ–˜/©›÷#	ã\ÄlþÝŠ…ÿK
-´¡`yä³œ¸×a1+Âáy(ö�c!�á×Ê”ü¢aCËÃ+VTgðÔ/‰çô÷›Àfƒ“Àþ£*ËIŒï5)ÇnðLå6¿¬—¥¹|›�°>Â�­m‡¯XP:äãÿKm<>?eÿ,ˆ!6³Á/ÊÍÝ¿°$´MÕ´_¤¸9¾ë©'%àó]\>gi@œ'°–YÈK&ÌÝ Z±XA¼±1ã“ë±ÒÈ³÷€°×yËj8Ò<î‘Áæ�½ža˜ì�>ü‚å¸¿ú© Ý|Ïõ&ÀÇ5®\¤©òrø0¹C½?Ë®û•TÃ»ÑÅŒ•ˆóÖëµé½žŸ´"A²ýYïK»Ò‡�]g*�«�§Z™J»ï×¹®^}¼�óÕßÔ\—š¶Â¥<%õKªôp2�”:mëVÕÒ¯8§¥£æþõ�Z†ðJlNrî–s³}-¯?óøAo/c‘ä.K5™õ:¡¡KQ›épý”`{h¯³šü!0Þ�Ýð›.ã·TÍ+.Â�3÷>·4Ü(á·Áü'$`aqõ®ÂÀíPýÞwû·7–&MO[\˜ÖL‹\žSÊd!
-?ò™A;eËwV.¿fæÍ¼½vvTäÓ­š÷·MõÚí(û}{Á:Ñ¹‡ôDÖsøRËÀ¹È¢€Ñ‹ÖŽ»'-goº¬[Eø|áãuöõ…Ì—}¤«¥UT:>É<ûèì‘ ¯ïÓKÃœ¸ÓL¤«•›¦“-�˜‰�~=¨¹»Öí^YC†¶µk›{ÿ�{öÁn§¾'å«‡64÷ÌseT17pLwä°¢0Ó±çs‡o}i|Öë£Ýò½Gc4Tç«¾hýòß‘‡:`#ãà®9¢)ÔT¸ü¤gSBþÐ†ŽMO´^uÕUH<ºEÁt1åƒœ;b±
-�k}yVÛû»ìƒyòÃ Øº0µ�ëD î2Óï�%ì{ó"Ê—ð÷Íºë\ÚúbtãðjÂîöìb�¸>—³öM÷þ¤å‚ÿí|Å–X�ž¸SUù/ÁßºY{›ìH)Â½R ûzjgâcpÊÊ÷¥¦ÎJ&ûÞÇ9ÕídzwÖø¼m~"„ñrÇÀÕ &«&²ú€ëë#>íR¬’%ºß½{ûk‘M£¹Úy¦Ã–¸–™ÀÊø¼iõî‘¥Ü¹º™~ý²IE™ Ü™(Ø±6ÿc$ þ …Åã!¤»ÀS&9aÕõb±dVaa¼è‡u]Sï…ªÆ˜4Ñ‘ê¼â¼Éñ�ýãõ„•-Ûj¢WÖ'ø(IxœN	±Ð/Ü÷Ë‰÷M×ç[|®èÓc�«lJ¨ìWæõ¡hW>,¢Yuº¹-=ž”œî’ÎÃ]H@±ÄóÞ‹,‹×îË;ˆøWfwñZ{"ÏUƒ€évû‰£me‰2Wº´§¯û�/\‰€çU¸ä	x/`’7ÞL­)ËÝN°>åAÅ.Ú"vÒâoa€‘‰³éçÞï“†T€ ßG©f¬0HÐçñ/#Ãk¯£Õ²¹wëºßW¦¸þL:NÙí�’$+a[Y®ã„AžnÁ3ä—u\
-V37‘�:ËóÙ «»5,Ž1³^TP ~…5�­(kR‡ïBEÉ¹QQé{¢QxÕ	0—3I°cmýÇH@,ìSB¡¤7ÍÈ�œ­i�s
-»*N¢xEPþ|ÛºüHãà–ŠW|¦Q)Iã¨_Ÿ`Ê,™+ïÂó~.·âŠwhþŠsGÛ!¶êÂ¥ÐÙ¹þ-¿¶ë<„¬³àpLu[Ç¸È2í5²z±Ã´þÉOéûûK§�ÿÝM›BIOžÊm{ÂâÅoeœÎ‡²È€c¶fƒB
-Ýu5�v]0©´ ¿ŸÃàzˆPF§ÀI¿Á¡ÊÁÅõ]þ÷~êS^hé)Yƒ2öƒrTÄ‚bn¦§@îr±Oõj(s"ÙŠÇ¿€JÖ—ã»ÔYxÂòÈ-‘ùï.¼þLz=eå«$ä489÷Àï¶ŸêÖAÌ†Ü(ÿ2hü”tšÞÉÓôÇ ÔXŒÜûA;)ê·e°RíG*h-gä\ìã²¬ÔY–ó 7ãCœƒçŽ½ŽIà�$�Á”¶´øTið¼K&æÄOt#X,}Ðr¥I(´ÍåÏZÌ]àÒ:—‘�ÁëFëë£WßT´(Rx…;qÞ»«G¸;‹öûMßK©”ôRkŸU*3É€2ÞÑšè9 S	Ìq„Z©¸U�;~¦Áèdaì&µ†ëQÄ ¬úƒ}–m?‰$
-O™X‹EÎÍtÇR©_Âèú’3¶ëiý‡‰¤©ù³µÛ	ñßVÔ_ætô¬E=ï#^±z¶Iž�¯ø!0líDÚòíVŽìGjÀÅ¨yx¹ªB–A�MPX G~ý™ðþ”•oWk³´B dÕÙ‰ãK¬ñ–-[ÚeÂ~ng²^vQæÝewÇvÌ¦ ¹åò{Jy£i�é]6-+Ï~•FEDóL˜§s‡?àÃß‹6‹-êð¶—ƒw \ÉZU•[q™PÀ‚¢PTXyÛâá
-Y0s‰Š^Ò˜ä¡ëÂŒ^��Z-7T¶Ãï8úÞ+ÌŠpªLs]sVøœs2I+Â÷zÙ¤P÷Êš¢nÙâ/ƒÊì‡WŒÏï‹På¼¨ª4wëîœÖî�Fd§Í´LÃ§IY¶y sþòýlÕp²Z<×žÍØÙ³p_|4`°U[Ûû.Be\Ewé¯À§óé#ïåPX½T’èµ–ëåÂ_X¦ê
-Çè¿¾î()þ�Ð—WetÄš_å–ôX«Ûÿ¬Ï´uå°0ÐM¨@ò 0mª$=o[�ÍC�AoNYùžSá·aµÁØç@>ý1WÁöîþÙ…ç/Ï>§0ø¦Gä�ø¼‰úRAhÉæ‚‚¦G�}=M=vÿÀŸ•NgÓ,*REœxpÏ{=;% 0ºWÜrKÙzˆ„òïë[ZP5�Pñ÷a”°‚®Ì¨Ë- Ð]ïìxÏ÷Zž•¿‡M|  @ IDATUé+y××þµìz÷M+Ÿ|å§O¨f8Ö×á z¢Ø½¥ÌÞæS~N÷‘âšÝï¹F
-YÙþJ,ãóÞæ�Î)ìr_}nÖ5ÉW!Ýf¤ýî,(Š‡er^Dó­kJ|$I¥É	b.TÔÜy(\bqœ_j GÜí¨Š÷'øy/ �ç7áf8çõ–½}·l¨�v&“‰UjÀ¾ÚÐÝï{Ôþ5ãüãž§ž·úè`›²÷ìYc¬e £Ë¶ÝŸÁ)|e^@�ës¼WAkù•++ÏÈË)O¶ß46Ú)Óè0=’%‚ÓQ‰Ô/VCÃò>L/B„7Á�‰RK�ÍœƒÊ³Œ¡AáŠHå¥3Êû$@Wn¯[ÙÖ¦æ7÷}€*Y×¯oè-Åy£Ü”ÄØë‰E"ù²§�,Ï]6·¤òBÏ’Þ•Ò¢+žk‰gÏ+ž¸´-M¯-ãbpšº«Ææ¥\ç?¸áÿŸ2¿ô>ÉG?b­
-�{S¨mñƒSUÁ¿…Ä�^˜ÏuÀ
-«à2ÐôhÔ@LTû|•�*qÕTdn«ùýoù}!± 	å'‚WÂ÷º¼*ÿ‹'6‚ã!Ãæ… �èïJÇâŒÏNZúf\B‚
-�Ø™Ò/(°Ž|t&¸"@ŠÎå¼iPýGŒZŸw%úsÕf[‘Xy÷üE—ìhŒE™ã½†Ê!È¸¢-ÍG�ˆq´”¹ ×™@êëÜ49c„ö(ÇÒ“I¦<ã¿ÁÇ¿ÇXWè’ç«-7…8÷L;NYù’@úˆêÝÄére/[òåNÈóû™CPáB&9|óÍ,Lè*l1šÀ@õ{Ìí`T"™â™Ã…•ìM/àL›ÒG´¹&‚ðõ¤å 6cý0güðóÇÞ�~	xq8m}2Hõƒ„JE)¶åæÜ?4àó[ª:ÜÛ›ÙEqM-ÇC”\½M¦ñ©X²?øY³cY·Zº³
-qÞ2êcCU0„•æ—HX�_ŒÙñßÌû¯«ËÐ&ŽfÉêîK%Òõ˜«VÈ¥C\Âçê÷^i¾Þ¹ôú{ïô™»ïAíÅ+'tj¶¾“»K‰Ò	"ô×,.U$P @Þƒà\7²Ýºj[œµ´x&4!]�“sDÍËZçõZ�ªeþn&‡>vº¯'$2ÛcÆ€¢íB¡ÎK'LòU(éæ2ù	\?kóüã²_míYòbC{Þ––tIe{ÿÇ§\téìA¼V°iômôå7Š+�*æÌ=NYù
-¨ˆk[**E‘•F£R$ÑUQ� ¤ûªg;W—f•~¾ÞKánÔuëMÏr:IÀ/ßy‚Eë9žŸi©‹´õÃªâÖÛŽU‘nèš g®˜ÇZþ÷H@Ë‘’
-Q6kÌy£—¸ÏÃZkàÂµ’]2 rO¦Ù™�Q*mµ#û`ÿ7™OýbMZß1Ë²7Ã²:Œ¿iÅI@éfš‚ŠÇ” 	YU3uÇw®¢r}Cmíq–àßÓæÓÿš@Â•xÊÖV=³`¨¿�=S5M»‚©dåå—\’/\;ÇúúÉzÅULûéï·6´WöZvüÏqzTÙ÷h¼Kür ÖÅmw’ëñœUÇj6
-dÊ¹ðÛvâo(Û™ kÌêÿ^^^paObG\jÙÚEVÒjµÙ/æåG4½Ì“Ô/£Á¯kšõ}Œ÷­Žá-�¶bÅ�5\fÄ…EÚáHÐ.ïõõ]ÁDmø‡§ñûSV¾b{z9ø}5}Oœª­+Àk¢æŸ)gû×‡ˆéó’Ì6í¶ûûÀ÷ð3/fµß	8ßp¹HŠ\�*Åó�|x7ªÉîõÚZ]ÇØå*\}p"¿dìý(—€ñf ·?Ý½µáM³þ‰í›[Uªïfy�=vþ¾ Ežödÿ#Ï­¾W g87ŒýxPíR/Ê]Ú�9÷MŸ‚b­M½d…ü+@¨Û�6Þ:„á�6�SGOÚ.£:sÛicòâõoÁ§F«hë«óRžžxŽÉÞÆûV­J\rc/%æ�@�€B¼ü×/¬ÏÄ\Ö5uŽ«äù33òþ›¿^–}pd›>¡ÅN�úÄºGv9ž”§Ãæt">4žE²åì½ó„JÄH˜2\Îõ’ Ü7ùk<¶Õ†4 ÏÜÙ¦’eÎ;dî¤�&`w{<êý*ì]ÿÇ<ýká~xEuÂà×„p™s•¬jÚø¾>mÿ<eå›é™"·"ŸÞ
-ù}¡˜~x=|~¼j�0—}/Åå»×Üó£æ›‘¥æ/ÍyM¬†Bi—J´” =¢Jî3¢¯0\ßTQ®¬NCðmÌú.¬³äý¼ƒ«Ý5m¬ìR=¡~¥ròê¼<ÁžgUT½Z¤¥ØU¿råJkãÁ®JRëý©ûd—Ýâpþ7f>1 ¿ §ðÏ"ú>Wö¤ûÔÎíC�™Òpœà|&`«Îqø~kkG?aÿPž—ûBqö‘Á…HX‹)»Üµl7‚d†Â¸á\K
-¦•ašQG’§E2‡Ioˆ;¥Â¥€ÿ= #RBö–‘Þ
-Ê'Ë±ƒš´e ÃèßŸ0E½TÂz
-ué”¸ûñTGâvU’¯Q¾�ßkÊ+=ª3D�=èÓjPA¹þx•=pk‘âE="!ã/¥‡»¦Í(®˜ ×RmPÖ¦G`ü¥kN‡ÏG„Õ¬#aEQˆ°Ò¶H²r¼v0ŠU
-îRT’%aµg‚_ŽcõËlqŠ1ø¢ãÂ‡ƒRACƒ4)²ZŒR“Ë=ÎªiºWÚå“#7Æ‡Ÿ{:n¬ÿx	Ô·éá)YáË+"J¶aÚ~åPÎÁÚŠ£ó¿Î›Sš_ï=BÒþ˜³èGå<íÁ–œPÃ{r[y®ßhO»&Ê¡P±»NK»ëÍ�:_\³?Íöçú`þvçjJ'•mëSÿÓu6Ì3ñìåÑ|×žWÜµ=n(ZV>}ÀN~<í�kTÎâÀä¶Jž[°£õàö|4&M¹Šštiôé–{¥óNË§gä„Roè½]r?{óƒç–Üy’©QÕôýí={5¿
-Ze2ŸQž7ÑØ4ßûÇø:ók‰ôÔóá÷]…4ç*$Q¬wmövÔÒ®•]:mò+ÑèÛ2ÅOµëN™K”D¬¾c¸Ñýu[;+**†Ü*'iÒÿùG#bùZ`�DÑBíÛÕ1ä›ùK½kÀ™%ïZ\o9’gà]:v ¥%é0Ç…n•Ék²©÷Æýþ®31up°Oc¯¿ê7L›ŒÕÇuÒë×8¼õC7{æpw¾dŸhÒ
-.Çì¥x õ¾®Ë·/NÊ,êMÝ‡“€TUùí v[‚wdèÁ&pÌB`øŸt×…	g�O¦½åW:q¾	ÎYží(äª�²ês‹r#7Ù”¶~ÆŸ1õä×Püà×	×»2ä+šx8ÊÚ]jà¶¹6mºÁqþüq«Pä„ãƒåå}WÎ,è<‰Õ;tfmUIKÌ ¿³¹û[7?­*Êªô›»ö!M™´Çê–s'Æk:è?_�²ÿæ@:õŸ ý/,¬ð¼oûÍÁ¸ñ†­zk‘e»U©Eé¢ÙêŒƒßŸ®¯±Cÿ?ÈZŸl[»àó1‚™l“!…z²û¤;ûKü~ßW�#ý—¾ÜÓS:É,�Ð7ÂÒ¶E1½Kt�-LÔÕ�¹N&Ä³à3#{í‰¥+¬� §lÛn$S;²4Gó<6UV¿*{dh£Y²tŸ1wî³{»‹¤©D))@½À÷§ÒÆ<,ôC×Š[$H@"žîg¿E¥Vl�¥ ÒðŽóvð·Ïü×v#mÛó.½eƒÞgØÎ.ŸM¿¦r÷WWW�ÛpÃ`‰‹�)%»²S²çôx>¥°<®ÒLl[ÿn–ÁÚ¢P÷»r#¯5–E7ÍŒh‡°#¶w´ÇÊÊ¾È9›kyÎ‰Ù_Ó
-ÂÛ—Âu4ÜQãþ§kKK‡\F'Ê¿://Ñ¾nÍ^*³=¨xN¹Ì‹ÓW(pâ'ž{:ý="ÊWìå\I©À/B]%>¤¡‰.ë¦½Ý¡Á(¤ðë˜²kÃù>AVQÕVn¯\r)¢«”NÈÎ0u#b{Ê$íDt;Ë(*Âw:	n¬-ÿx	4�5$aY \2�î´e–-ÌÚF¦Òmˆô~[äN m@KÊIúÔéÏCQåý
-ý"xw ´P"qÏ '€’ì–Ò$©ž)Ò‹€KEm‹5ùP‰åß«ÿû_x¹ª*âò\'‰}o"Íï
-NÉ}I@Ê„åª0ùM®ùokîë{³¶–ØÜ”b	ÓîRo÷èøšY‹Z‹§rx"(?x—ËK$‰Ÿ"|ü¾ò­þ=±—RB|/|û”å¸ãnâ<±;Žtµ4¥ÓÆ+¶c®•={¢/�ƒdÚÓ÷å°¡*-‹k¨’¥75èßÝ>çÂCZžïcáêYÕ›;:òKò
-Ïã&¿«\9b�°GòTÙòƒÛ(Ãfä€0I‘H`@r�ntªæß½Êž¾bkÙß$�ÞNn@ënNXN*íuÃh-‚n‹J¢» ,^‡¯ï˜¬wõ26ÄøÞ…*óV JJ-‚H;Ý¤·á�‹–¯¨FÕnÈ¦†Ÿó�ßçtt½=Pô75óL;	Š0{6ø$öß®*­ÿàÔhÓ0ß¬/ÆêºƒŽw>ÿ¥•»n>·*cmöûÓ‡á‹mpñp‰¤ö{}“W¯>~'q*2 çCòºØ¬/§û›_­­E‘Ýw8D@Mk'žø iNáYLC{Ïåž{Zn#¢Ø�'G©ÀðF’–ðùŽ’KLÅñÎs¹ºXu¤8³éWbÙ¶ëîAÜôÇàëÛÚî¨©ÉX5\µÇãìŠ0Dˆ”ã75%W<4BÐxÎÆŽ³IÓHëM—T}¥RÄ>¬Ö$Oì>Œ_o�
-‡‚Œý¾[±}fŸS€œŸI`éŸ`[¨‰KèúŽ‰9páqógÓÁ¶bKÑÎ<MÔp«T¨´/o=æYí‰?1:ÿ¾bòäøã{»ïõÛý=”æ“ÿ>x0ßHÒÅ9ùY�´Õ´ì¶ï=‡‡®BóDjïCûÚŠ¹&MÐ{§îJe¤þØ¥CÖë©H	ã·Õ4í6.Ññ�HÎ”5k–/ÿ‹üÝ|\VÙ¹¯v% „{DÖÛðßÆéÐd)Ê½¨)m<}�±|y2w«kaŸ‰mE·k²²”{Oc‹S#sv±ëº=ð×ÿœE·¥äðoÎ)	ì¼¬¦F`53Ç–{îI3*=á î¼Êå¹”^ødS cÇÙ&�=w¬°8wë
-ƒ¾ºˆFö×Ô÷°¯Ÿ€�&u}4ùçê¼@Ç»#‘CY=‡êZš»ÿÇñØÏ¼túžHYt¶¸Ç= BŽ,äË‘<©‹ÚéWˆD7 `ÜÖÕ5úËÆŸCWLÎÍ)xððá¨®k·!AâsXˆÞmxîtÙ¯|üw½¡ÁóQómˆÖ÷¨’?¦rZY99gÄžIî&‘âí~ƒ8,n¹ôºüsŠEæÌÛ,[Ñð|„€Ù^… üwJ³‹lêî.	‹¸mÃÚOQžêpŸ›�ÆÛ:¾Žˆò½dâD$A‰z%Ñ´ßÐópÁ9›=	jÉCHÇØ£›Ö×cÜ|pn~V}¶Ùe½|äHv}Ë@¶ VBØÃ‰!«Û`¬�'�Á¨¡’õëÉˆXé§ã Œµéä¨¹÷^IãR¥aP8LÜ3,Ð#¶�Ù¡¾seÍ»5èùß�½ô8D»|bÅøªœœÁäBø0.xøÝEBÌ3#í¸Ê¦HŠ1ˆc–‚ù�]¨é³ð¨o¡3à®Y”•ÇÏ ’ô4 j �ÒAÅ¶ëw÷tƒhg<%Ö<tŽ]Atð»SÙLðzKjôÄH$ì¿ÉIøû„Å}²ûÊ³+NX|‹%Ê¿ïsÕ_K¹PÂrJçÂùKäøŽF´“]:}6"ÊWtÕˆê±ýºgL*miÁŸo¿ýÅ÷»Ûú#¨êZò¢êÁ®ÖÖÔ¦Öî	.~L–Âÿá”oäK��\yÃmã0 8“‘VJÛT]ou)éï ¡Ú·î7öîì�@OÛE€mÒ)*ãAÇ¢y…ÁàÐ¢þB§@å &¬F¥„HY$�ì_S¸iú³qÙ]ÿ²¼é'J*gÖ…ËV~ºTvÀEâ¤w©¶–Î“èÀs{Ü®íÄkGëßaÅVLnuTé!`=wéi{\2�âÙóçgx„Qä3•íT¦Ï�®.[ïX|Ç#¦?ûŸQÜ”·TÀŸÿ—d-µtâGÁ”H¿æ¯¼Ã“ú}nÉ7Ãj~oòXj³PÆ/55e­ÞÒrÚú}GDxpë"…›°wûTj:lû8:H1p É?¦Rçî?=õÔ@eNéœ ¦}0Ÿás[ üE¨@{#QœUïÿì«öýñ�Fš°Wˆê;/áÚç1Ù�›ljÚý¥�û|tI`FÍë¨AOßïÕ°#dôLÃä�ë9ô‡N"õœOÍû ŠB^�|ÕxôŠ8×n±Þh)Ã%C
-[\î¨laüs1J–ë¶:ËH$g"—êÀÁtº_ŸÔÚ×�æ£P–ë�øèîŒÅÆËÄû3`{“lâ=‰Xªzúü™àjÈì:Y€õK¦ìE¨}¨*7¯``os>ärœ|ÿ^9	4Ôeuu|ÞªUÇ¹–ï'PRu ®ô$Çâ÷Ç=qkuÚÖ?‡J8�¡pêù†G®±=÷ùë�Ê,®A;ßå÷e½¯¤"tþà=N·×Q¾™Îr×§0æ®R§UˆÕò¸Ayº$»5�~í½Ë–¡Ì7½QTµ ˜ú”®þ>cî—!®?3Âº–þ‰	ï¾4�Ð>.ÓqaqFäñ¡P¨tý˜ëát›?ÿÐöä/sƒ’L;ûÝ°ŸÛ]¾påÐŽJç¼„y^È¡NŒäi’Dn„§ê�ä™_ VôÛpZÛ�ÀÛ•ub;¯£c#×¼LÞqƒÔÜÈqÃ?´c§ÉÍ…ëF¸|³JÛUI{,Â•‰/Ø /áêpôÍî6ì/WçOËMîêkÈVZÉŸÖŸZT¦¿sð÷u.kzM¥oÂ”i{¯^ù6ïs`\‹ðìÅN€N’BŸOÌ¸|ð[.)Éß•N™?ƒû¡ÆÛÚ¾¶Ô&üº'xPõ8Xe$ÔÒÓ6ÙbÄ”/Šâµ,f™Ž×åzm",�±"2‚À ß�§Aøßâ¶4+×»ñåŽ´™øv”FSñÇíTò'–km1Õ`Á.7ZZLÃ¤íŽã¼ž$vÔÕ]ëlˆü}Óxô\µ{_�s8ž:ŒŒ¨²ˆ/”£HÊ‚«V¯>ª€]·ÕFa/THøÒ+¿�yã!FûÝÞ$©ãLiÉv~H€r9N ªD÷a^=Mˆ±9•4_2mïY¿Ì“Å²¿òñÃqŽ’?„²]»«# Àöä¬øÔ¿çÃÓíJQû =3’}A…�]Ð¶–‡UöIêñ™qbÌÌfYÐj²Pó@|¡®IîÖ?ÜŸ	þc¡#<d"Â ;?Ò¦ ˜Â�^ÚÖÐvû{>)”Û !\ŽŠ7W¢‚Å*+ÀnD…ÚÎõJÕoE]·_\¾	1Leyã'‚qÚ¶O%ô´E<uòTç–êóÝá‘H?Ž�¢wC#|nï®œ2¥¹¹_�ªg,a™ÓBYâ¨æg•×ÏŽ’X) ,sËóÚ@³ñ<¹2æc }ŠTç*ú«Ì²îërr�¥Ÿê(�Y××Ø›BÚ0³�µº_××D™–éÄ@Ko=ªüš¹žO¦¬óê8o_He‘Á³Ò%ÞkfÒ"�ê¹ã,ô‡èEÔ¯ÍV™2Ýóìxx-$qàœŒÁ0tî(|sÙ§ïE
-kyþŠ%¼kâ®Y1KW ´R™ÊzR»M÷œï„dv‘ÆùZJíû—oš¥äf\8¾q½Ñ€º—¦­øÄ®ê¢òéãT™å \}7¼ôMb1¢–9«ïó©\”ŸÿÊÆ.¥»ðe2n’}Ù³ƒƒ›ÁýiËÿcïKà¤¨®õoíU½÷ìû0ì;£ DapÇ-š“¸ç¹FEóW“——§Í¾©1>}jž&5
-ñÅTAd¶†Ùgz¦÷îÚ«þßmèÉ€hL˜Tê÷ƒšî®ºuï­{Ï=÷œï|§Ü¿ƒÞC™e(©C„oHôúýáx™ðuAÉ †"$-eý)>ÂNE
-!3žžN™†ì�8¹¹™úä�bÖ$QÇv²Ïx*,K¦�EW¾Õ@<À®7)è�ÍÌfÁ/ç”–ùšÕUU{NQºy~ E9;òH�þ	=ðÀ•v­Ân¬.Uúvw±Þ¨Ân^4/®³vF½æ!Æ#Àtþ{Ö²oÔ8õyhÀu&ø_9‡LDœÖCzó_YÌòµc0c�™@,§à3x�?ÁÌ2Û"£Ê{ïx¾‡tŽí¢°¡ðMƒ~YÈòB¸··9'Ú2]]!‘#XÈX…ã~¥(â#>�ü¬Â2“S&™…4Lâ[·Ý–â‘ÑR%ÆlÁ6Kèü=¤úàfX*C¶eyy‘iÝÕîÆW¹Eð½ÎNÅ²­K@´³Êr™EfEÁòTÖyÜv¬âŠ PÜÇâZç˜²PvÎV|üùW"TÙ‡&4»×Œ|}t~XCßâÁœ� 0”xÃ«™¢LàlG œ£ïØÑNêëë‰ÌªMQ6!ÿÌ´Ø5Á�ë ¥„À¾~&q90â3k
-Dv×tt&Þ€U�^=r|1{à’åËA~ãNŽ&�RF1²µkví _M¨PNõ-û”ZÅ†ÛËõ­;õ†ŠQÛ8×¾xs¶-Ó¹ò|ðØsÐ®Vh®±œqxìy¼Ír_huc˜}|à½Ÿ‡ÏK[[3§�Åæ’eZ‘�¢WÕµæô¼ú\?]8iRfÙÎØƒH~9J5’-É¨VbÂ¹@•à8}réÄU—.œ·ó[ã»yU�&%÷Ã;‹¿³“¨r»¥?U�É%\¦uþ¸¿BSz àóºõªi¿ f#‰FâµH](Þ!ËÓN²!qÔT”;ò‹ÀYn¨×$7"n»Nª¶–!¾œc¥LNŒ2ª±mù»/ë§ÌŸŸ%½™·ˆDN²m~zÅôÊ=èˆÎÍ`±¯ëéûo†Sn†Ãä{Øý ‚r!†¬Û�÷nIÁÇ²#ííî#ÿž{€�Fuë)—éÈpÕí=`-S'*�%Šbõ^Päs8ä]ÃÂS—ûÎ(¥æÛ=ã»I+;Î¯TãÙÚ×ÒLó~žûîãÚ¶ÒêîôF�a¦ !¼VJ¶ÌÞ§5Òû.±Öb‚µ’'t«®°°ô¬s„ïY¢Ì}»Ô[pYVªŽ«Çz?R¤ÔöþL)
-ŠtÇ ¶É¼í§�íG~Í`ÂÃó'XrÑRd7n¡�ŸÎ×{dîÝ�€óSÏ_àã½º¨"T¹|k]‡ikë7c‹ß^œËI‡Û»ã�·ùugúºûãÑ¥šd¾÷ÿæÏ×(1FÒˆm\.â2DôºÖ´¦HÄÃ–HÑk` ü/`ô°�på´±«`VÇ½9i™kÕDÂ3˜Œ'ÿŒ#ç/N|iê‰^†g�+UXÅ/s‘¬¾pBY=“|‚tX¸7Á6ùdÂt€%É¸b+(ûÎP$ïÍ‰þöƒ"(œ©Y�×v¥Š6&aÏ§GÿÚR¤ýê3KB¦¥1éžv•y¹£)z8Á^›5¬1ƒë‰aÝ©Yñee”Ô“D¥&@¯¡\ÀdÞz_wô£%Þ(o^ö’­55I†pK`“ŸÀÖÏ>ðõ
->p®W‘nƒf»Æ§¹oçëÍýÀÁZŽHÓ©'!bn[Uˆã™qr-5kæ¯;œÎC"|›ÁÏÛ—e‚%E¼mÒˆL¢�œU]­I,ó¶‚çJ<O=ŒûÂ¤R’	&#¯gXëg.Ã]�pÆk�Vþ×Àº!‘¿”wÅ[‚aé*ßøé_Ú°a`kq8uÜ‘ºüs{ -à`¼žž0ë†�8«�ð„‰RšI�ô?äŽ¤å.s IÆ~µ±,Óì#<7³Öë(´¦4ô´|ÂÔ)|PZ€lÆ·[÷Ã£«G|uÈž —>ÿÜV¥Ç5½áÔ[q~!Q�vûªèÚ³Ëå˜{Y‡¼gJb2ã„fû$wŽŸç¶Æ=�.bCÙ’Z„�‡Û(Šš!6 �AQÔâÈÙßÛy?L œlè	®±xÅ8ö�ÇWcùz¬�íÊšY³ 	%‘ÃîvlÕ¹ÑYÝ8“¢òf‰üõ‡Ãù�…ïbØË÷ì‰Ï*‡h)õÚ´!_){ÖHú=ÝRô¤=Ãz¤~Û`Í™*�!h8_G“à…B{–Þó«õEÁí:qN«ÑB‡a/0±Åq8ò-Žu,­9qØ–‡Î:R‡O¯Zwô§ô„ó¢ë¯Y*ûŽé8ï®@n0—å€ryAô%Çã²¬Óœu�ØQq<RÁ;ŽéúE®ò�ÊÒ	=²¨úh‹~ŒÄ®çÁs>»®ÓxNü¾#z¯£«;‡c¸ásüí¡P‚ÕÀ.�ÊëâÄp7@³ëÚsÝY}®ª·‹€b]v›Â‰¿œ#ËBÏ°	“n»mè0•èrl~æ¹ÝéR­ÔóM.(.XÙÚ7…ô¶µr<ÿ3D!~”j#²í×°ÎÿpwíöÞ—{[“ƒÃø›F<ÕÿìVÓNŠ  ”gm«8¶1s.¾þPi0‡|TPÇC*ôÑ-{ÊýÞÀÅ2qw1&i7EâOèzQ˜HÏæã«�t�˜Âìñ@2ŒB¤Ûn?k®«(( �œ1¼)’þ²üÈ†6úçŽoBÔJÙNÏES€]¿³$¼™š,©²GnþÌ÷À«-ÑSA–ý;�sž€ŠƒÔU0;°Î·TÕÐ½²ò=†'Óô¬ó•‡‡ÒÀÓ´èŒ•ú½À¹>ðö.e%®ÝÌjåHÚz2v«“-—ü§»gë"*t>óô7@¹-*gžp¶,‰SaO�;œÙV™)XR÷á�^æþmÝ—øö*POþVä�Uñ®d_8&cº—†È‚sJKJºƒ¾'S‹ß‚¬�ÐpCX!@¸¢£”ôWµ÷—AGwºL3qFù^</}2ØT¯„IPÙK!+$¯È?Õ¯Úe�'';Ä|‡u…M�ñ==Ô¡8tµ=ô’Yó­e×Ü!	¯‰#
-Ö�xzM±$‡�ÈGû†V ÝCôÍºkwÚœXÿ¬Í®7#lP'ö×±¸Œu'#~Ó“ì^7œ‡\‹¹£y^œ;ºçÃqú‡Þü#%|ÖzÀÃg×0 Îólè�Ø—¼tµß#ÿQnç +þBÅðð~°DÞŠM„wf,¸ ~¥)Î£Á¸ò|AEøÑ¬šùOøvúxf¿€Ç_€ƒbå `â{Úl�¥³¥19í§Bì€æ»BÖ|1 ¹wyä—^ß”Í&|ÒéiÃ¹Îºl–Ì¸{Ù²ƒÚÖ(ç42±Óa6ší¸ìC€_<‹w3›Éö×…¶µ•‚lý?4Kœºö�öã}x»­-L	•°ŒÌqÞ!ß³§e;Er”5ƒy%­	î�àÍ`|âÊ|
-²ðeùLŒPÁh¼O --¼¢!D‰ŸˆÕRÔêòp¸Ã¶™³NÊæÆÎ>½Œn˜þ‚z¼@v$ö-¼-¿85DZO><AÓ�¢ÅÐMÜåÄbr|
-ïü3û* fVUÅ\Žü”w™Å6x|1€Ã"ã|M`Ø/!‰ë›Hÿg8{÷Ó`]F©u\ËŽ«ö–™�@”jyÃ	IÌª.ÝŒ··9–)Ó$é�çÂg¥c5ÍyWì6p«„¡7jœãÐdùúS¤	lä>13é­îTzzm­ø£ŒÁ^‰¾Ú¬°îã¦Ã^]=¡¡
-÷Ü—¿ÿ97�›Kç˜ó,Ãy7žI?ÅXÌ"ðâ³œ_))Ã%g!–à¦</—~LŸZbJ_=b=ànV Ýjx8œø|™iYÝQÕhÞ·c�EÿHýþ÷²á<c–vºlLóyÉ™Þí2ñM†-?Y-�’aûUÙnNdÖ�úªm³¢/<lÕªUYR]m:r0‰Ñ0Dixï?§�ËÌ¹x¡èó:E›UždúcÐs‚û•wäÃ«¸;ú+ÖÇI*Òoµ²vœÚK9‘ŽÈÊ +²]Ù¬õÁï×¼Ñ:»vþ~MÓÔ¨¤aÉqŽÃöô+ËiÆ¡PHff‚3v��Ãº~º”šdšš’\*äÊ¢Àc3cÍ cÑüùO ül=c$Éhd?ÉÇÙ#E�{¯¦ªO–E)j1ßpufê
-Bö4þ�?ƒŠþÈ?{·wD¿o¤ÍY»¢ÝF²|L #¡:gé~Md�âXNãˆ½dp”kløp¶ÂÑ‘÷“oCJä2�aFÙšñ¢àd‹RHdïåX«¸}kŒÔ—}äsÿ•?òjß–Xëx$6€•ÆRk,!Þò®¾öv¤mÙOû �üò°’^–ÑÞAFÛ‚S•aSK_jn6Yâ¾'H):qþ©Œ9çªïÔúøèéH5´ ä.!+«êBûm%ÿ•�väÙŸ~¼¶½½Lp˜ŸdÔäÂ
-ŸðU&è-í#Îî”`¼ÊZäÅ¬îšÑÎd‚ãC~A¶×CÃk–eù{�»®ÈS8¯4Trªc1?`y®ApPJ~x¼~ú­üôž¸¸÷ý$x.€
-p+ÓŽ1�2ŠåŸžñx@�àNqö‡ˆ«jô1Óq÷(„M
-®ä¦mñ¨¬iÈ@šŽÚÝæïÿ‡Îa^ãXû™œÑÃ6�íÏ@O›,;¼—ã1‹Âå¡ÕƒËžP1¾fÇî‰¯ÉZÖ:†uw¶¯z­;(‡'‹ŒÝ†4Rëh3¸Œåßû­xÿHEÂŠ‚œY–¦ðL—e2ãD�ä·êA…:Ô—ÀüÐšÒ»°ÝË€*Ð ¯¿îã¦>ÇÇ$dß:Ô¢' øÈá8±’wI1<rÿ‡ÔQo×A"�þ‘wðE¸Ç.î8Æ	À‚ëŒÌ�”UÙrQÜåèî&•sJÔvtåÈ‚u°\ÂAûWsí›]EE½c"ÙŸ›Ä¾ú7à¥9Y{]ËyX‡yJ³�×‡@{û,½l±ª=Ú+ˆB«EÄÐÆT!—'ž¿¤®NfOßsIÍ™’¹;¢1­IôxªIøÞË—2­*ð³,‰FõæªlDaÆ—d¨ÓëPÚÿú½÷fÁ³|»äjÊÓ¥êk»\«ÂM*2ÿMËrw±6óGÈ€]dþ9Y[äÜ(/’5C+ÍdGÓøùÜX­»<$‰JRM­DHFþòÃî|ÈhÚ¢åñÉ>Åf2Ü¥‰ºÂ‡LXÚÕå™‚ÀìAŠ±p/â�AúèZ‚PFD½�„¨¥
-Ø{ºl†{ÆIg7ÔÄ{v=x¤BŸJ¬êÊœgó�ç<n°Â‘—/qÆ BØ<0«;îúŒÿÚÙuuM’!SQW_ *À«ÙSàéÏ@axÃ(ô/‡Ð@F|*�9LÒ”LÖ'Óì<Û5ýº+?||•Ò‰ªå„èm`�›tôÜ™édç{%°�)ë{“ó¼[4R›ëØE ßÍ³]à„%gÖ[ò÷UóÖô¤Däë™6'ü[vÓšÔb)•ãü	<SlØNGoýYL9Ã\†?[’¸.‹Õ?Y2†ª>C]Î�ß—Û¢'ÃÂ=!Õt"¤|~÷ÑÆâbšâ`þcO¼¦ÏôzCfBõ[’ÊìÊ¡�wH«ê'®Ä‘Ë Ž¶å��…!ÛnçÅR”g“¶Ç`ùz"2ßg]FOfÌŸ¼S_´~ßb¾_;h€Å¨ÒaÅ faéé/{:RQ¶¯d˜Ü} 6µß�Ÿó¯îî-é"‘ãv;Yu§¾{óÆÁŽö[>A%}w´µÉEQÁïÊì-¶cÏ“Ë{Å¢Ø6O%7vá¤¡…ž­‰C©S™£³1ã‰Æq—'ˆšõÅ4&ÐŸíOÑ¤ Ï¶D�4îh™%6qÞžSQðòáúù¡¨˜k³F�ËÃ´;ÀT.KŠ?¶d/Vð‰"“^·Î¢Fô…)æ·(o[úV˜26‰>¶Ä#?~n{`<¶;À/V"}+Zœ3çƒiÁM® ¤�ïM>‰¥ùÛ|@é8Ø˜¡ÑX#Æ3ÃµÍ›,Ç�H8™ƒG8çÙl:ýßÄçR¬êgé%œ0¬$òV—öNZUÇ	WuT;ê3îÞ#/xé§}fõ9;:µ/kÎ\û‡Rˆ[žêÐ\o¡pOiPž€Àª×?nÇ»¯ØO|Ê®mö�&;Ç‘˜øœ¹ùU3ÅH0ÉCÈøÄ„yZ}}—IZ0oE×eõÐfÎO*d °>ñÃþ‰ðõðl—åØ>ÞuÁ‹ãrAÊEÿÂ9½%R°xLEM-k0²trm¤¹»»mÝ›ÑÄ|Ð¢i'æ:ò#Š8òõ¬"¬ïkˆ/>ÛêI¯?ªð�—Úz·®XÛ“Jm'íøê½éÑMpF{© ÝoìHõ“Ç"éã/ õú5Dë àf<ÏºWd³Ž»v[×/ö‘pÁº•(¸ou'<¼»>–ý;ÞL’úyÛI=ÍJ‚g§cJ«;4b–ûImR×‡1Û_¼"&�Æº9<?¶À�ù±±‘PÊ 
-Ì:ž/7Ì�H»Iå¶\¢°_lá»xá+)Ù{AJ”£­†¶p~QjñbÒêgŽž@‡\«‡Dø²<|¡¶8Tt}Ï®åã½H-[ ôØþa)ìFã=Ás¢–õ$çÅðŽk8F‚•ïMiý~Ã†k'fQ(36Žüô)õ ÈUŽ�}l:Ã1S‘­âbÇà:…
-q¢"5PøŸ
-)²K÷šÔÖ»Ÿà¥xÕµ×ÜtÀ÷®mX×¿%&'*Ö!Èà�ã.6‡ùŸÄ}[¼÷SjÚ¿ô1T›}eí®1ESÇ�G¦Ï›÷7i5CE5ºz»÷ðÄº¨“½WÓOÆº3lp³u¡1ÀÞ6a'û7Ë9XÃiž¶ È¿7§÷h÷Prœò‚aßtóº¤m–;.ü¥‚‰`bòK”µòØ@Ñ˜Ïœ
-ÚoáóëH†J�![VßCýî ¨„¿·P#êláÜìš®mŒ¥Ó3b|á)O·´ì§ò¿Ú‘*&’u×]ˆ2ó(÷ÃÄªì¼%Ø·ËÕõ³ÿ°b…üQÏ§[Èf�øPûÓG]säûÏW4A£o«Ïeœ¿X¶ý(RÉ4ù$¡ˆcÙF…aæa$¨�§w½‰Dlùò‹/F.Hf&ê’âòÐ»SË|¼Ó·iÍúdÒü@û’bº#0®`V–ñyÿ|bÃð5/,¾í6‹Î/ê˜¤s¬¥¥E¦Ÿlÿi…LŠÕ¬»%™s$Ö­ó	Ü’dVý."5”¬cþØ;knîù‡æ§,+¥¯];vòÚí]E‹aÏÍ?¿¢`Ä8Óµnƒ}ºZ`Ho¿jF“†ä9.g&I«ß�ë½óÝËš‡4ò._‡¡>‰ðM‡-Ì	ù4¯GþRX–F©ŸPT„(Ä½B’†—yÈ¥Ã]¾†R—e¶# æ»~Ùw�¡¸8—ü ÊI û‹…³'Ï™‹\9XKë¦TõtÄgíŒº�|Ù»ìÈwŸŸX©ªHPlÞÊ©æ-ªæþ”Xæ%Ä´.AÿBÃ&¿àxæ�U—,„ 9°Õà`�•WrÛoÄb’sçÎµ9…$@ä”m¥ilÜOc>°œÏûçWb±àIßþÎ0ïø£'pÕ£ŽŽwÇNèñ�;í¨|æâ|PmyÏ”ª�>N½WK[¿$Š¼xt¹¯.Ãp·dM§!šqŽY¼jÕG*Pùrvf=aqÊnÛ°'™~åª:K9yÌ¸ôZ—s¾¬ÙlIJ7î—8r^¡"ÜÁOðrÛéï­Ll=G¸÷);­¶!¢ßîÇ�_')Pª©@¸ü´m¨T5ó©×¶ùâôEÑ0ý%SYF¸¢xL²Çaœ[„HfY�—tO÷ûû‡‡”ç€!¤^ÉÑc}eÒÜùž;Ž
-dV`7ÈÕDìDýÓ»cAºM9ðº#Ÿ?Û=pÀ¢ÊL«1ÁãŠb†Ù¶]7;ßYÞcÖ„ßÌìã^6ð¿êfÿ;'z	PF„è¼Çöü>“ùò»;£Õ ä.Z�V$îR†8éþTªù\Àoƒ‰â³ÝsÿXíé¼
-jÜ%’Ëý/Ï:7#Úï*È»K‘iæ(I7Ï©Û›¹xpéÑ_‚$	®È}Ço[?ÍêÌ/tb:iÃúâ‘¯•GM¸mPLúN©F=¸Œƒý=»´´ÕQ3íŽˆ¬Òˆ:4E§-²xqŽí,®ZSáõk¯Ç¯ÎV²),ð¬È�ÞŽsÂwA}½7Ì•€†Äl@9Xù‡ÛwC2àÎ]”î¶,äsa®7ñkbÃ{Ë¨ÝÍ…³‰cÕÀ"‡ÉàÞísý¯�]”Ôp›ÈBÊ€†’™Ó§öùé–ç­>âÏOŠsÏ=¦ìN“¸ÛtÓS¥�9…ÞŠ‰”h@«Tæ‘?ÿFPÏñß¸äSû™
-J ¿¼3Yˆ‡æ¶­;LF'×šŒó8K”ÛÇNñž_yÜ)ÓìÝ™Â]ª,t¤š­¹s™»uÈ&Î¦BÂA’Mš�WæÄŸ°AñŒà¿Çk‰�Xû-¤˜´ª®¬ë�æ¨ÿ´‹¯.É?÷Skôað ˜u\Â3	l]ƒ¶ÁüÉuÍ;`[�†Ÿ0\{QI¶8zÀ‚˜«uË’v ¼HŒçÈt0žÝë×ì›Qº/ Öà­‰åkáìÚw¼�˜Òác1§?R#¦óÏAÌ1|9yŽÆóZjEBQ%N³-üî�€ì¥ïÛAô[5|§ªj÷õÑÇÐûs…ÆËZ7ö™ØÉ	Î—6~EGübV¼§©GÖô1E/_j?ÊöeÃÛ|
-„ïû}YëÂÆªÀNÜ2ÐA«�<3àå…í÷ärZ3Ó”"Ð;ngÍXº%Ö³3g—ïèxüëéLS\2¤Ø%n•mv},kC¦ãÌšÇ3.\˜£ª¤õú´:P—/_ÎÆKª*íô}.Û3ý<8v�~¦BiêÔ©<òßíÝCûGº�œ^ÕÈõð-ŒWWÊ•t{ÏPž¤Ì�»‡bE§‚eÂ<°Û}ÔµëÒéb-kÂ1³%¶¤±±N{zgOIH’K_ÇÂÁJR7k˜Ï¸[Árõ®i1ëUÁÝìOE÷ˆ4V§#Ê}ýke[©à¥Ï¢äý¾Ú±ºc]“×4,îD;œsÎ"MÜ;³ŠDWw¥Ž•xRÿæ{+ÿ´`Þ¼�¬ãGÕý³þý
-ØV=®ümpÊOAßbwOÆ#—ó/ ù¾eX†Xâa€%e’ÃÂáD~7KÛüôÎØd‹¾XwÈOÏ¨Åé¸ß]4nze¡¤s‰tË‰c«¢ôú5½©™Øõ6Š÷‚·¯³é±ƒÌÑ5ð	•ù§'ËMd9ëhÃb;Å®ÀŸó4Ù¹sý¿RYí¿Š|âï-—ý�a9“‚,?)Éš\‘XÞ¥Ûññ$<ªÂ;™(îïeH4_ÚH°Ì÷!:~'¾°"sqo¶)7ø»¬™p¼«áA4ês+ÔÚ)ƒø7É78—iÀR‰„Ì{aŽË¦MkÂ?¯áeå“Ë«§Ãªî£Âq3Î0é6Ûc½fZaôÈ�Æyþ¹~xÊÉ—~¯üûVXhNCÖ¾ƒ½H*h©p¤ç— ¡ëBäÞVä’1“F5Šk¤N£•[ÃTµòƒþþÊÇÀÒ�òrÚ½ek"\ÓxÊð)óæ�ZÑ’)Ë›ShÏÄSÏá†«�ŠŒ´ž3Ê'Œ`øøÌb;4SÉ�ºÑµ·íÛ"Òß÷i ¹º¬ÍŸô»?"ÁÐDKCãÛZúŽaøî™W>ðÀGn=»»»uÆä�!ýÛ·¿dÓz	žKA¨_B\ójÖ¶n¶m{‰m;qžãgBPÜ ­ë>Awž´B¾_U‰Ü …¼�±øÞ�úucíZµüíH"{µËÁôe™ßæ-æ|?ø-¼´=¬Dd»5N˜7oð¸ü¤MýÌ_7·¤$Ã0öË@+MAÇ��;l�³ÂÏ3§%ñËä5øï¬êŠÕ¢±}nû`«£k¿êˆ4§_îŒVkµõã‚œº›ØÎ×b’rýýÛ¶Ñ]29^ÛbÊÌŒ5'ST4îë—ÝF!åÐk|¢&ôÌ1à1›f;Ð½Yg/Ü@{�¸N–&ØÇŠÂ÷-›} YS§ª¶“í7­v‰ôuÄ7ßà1 [_yçe/î±HÇ5=òe.ç!Ó|_l�ŽçÓ/rr€a‰m›±·‘­‚6´©_]€ì7ƒY~#rC]qTIp7ýö7ÅçždšîÏÐ5£R¼Ì�+ö¯ÚI	Aî‘8ÖçÚd3/º¿í�õ?slMM>u»¬9ê+Iì¶ŒÒºpsF],{d�HÂ±·)v»á¯åÖ÷b¡…Ò*ü=ƒm‰DÜÑ³gË�ÒRÛN§	Õ	”H$ª;Â„Bˆ@>ÈÌe†–øÕÔòòV<Àý 3>ÕUø¯Ãõ ¨D!kÜtäÁ)…Ý’LŽwÓ¥œ@ƒc÷gXÛyªÝÕVÔIÇZ¶q$B™ì¾9V–÷ä+LwíM!	Ñ_o÷ê Úp8Q�~ôÑG›@“èÓu'ÿ~ýÒïä±UWBp©ƒq$"‚¬*»º³¦x]ØZâñPoÔ*1Ã>žÓ6ZwZÖ�Ú8­ŽµÃ ‹G(P:/c›ªk9Ã,GBbDCŽ&ù?�71£&%¥j’Ç
-9.R{çÌOt�JWœ*Á�3Êƒë–u§ƒÄy4¤MÝºÔÃ†â‹K‘4[ìá�ë .ÏC_5A“-“yÎ^�3}¼©ž8³®lúÌ¥û¤RVnÊ›2’=þÖb=U‘‚‚¿0Ý×ž�]_ßG¯ÃvìLœbqÁ’úøòýýy>Ó~êWŠÿŽÉ0œu×~©�mEdRäNb–š5	lE{ë'ó¡î�-ñº¸kÝs£"0ìs`åYÑ�k|ûr¢õé‰¥¥<'O ¼-•TÉ2÷ÒÓ÷¬Ý¹paã€pÝÐ—SÐQÐ¶·À}T”7ž˜WP�Ì?çJØŒÏ,þ�Œe!Îì»^i; 11Íty‰ç¤4XC=¬xÁ×êC+è}TànØ%Sñ‡ekÒaP3dš!¢+†I’÷ëè�“`~˜�I±Fo¿›y
-“ý×!“¢pñöTjôžD¢.è~Ó5™r,‰ÝIØ³»UÞÚ€>©’3réè�‰gI5Rl^ç‘ýÕèSj¢«˜C3e û@ö¥ªÂ®¢Ñ•o¹Qý]x¸÷(®\¯ûÈ©ÈX?K(Ÿ0P:é©0¡/æÀc_™_S½–
-9¨G¦`ÙØ£ÇN8é¤*�äûŠ×¦gMr¶Æ¥¤MNƒÒî¦-çM'%
-#Ù^*T0·á¾PøÑ¶Ez5^ú’¥´bÍ¿Ü*¨¶¬éÌÍDpêÕzDO·c€Gˆ -¬„±&v€hiša&	¶Ó½íÎÕQíËN•*Õ+—ë%53óÚ2ýqìœ“ëÔ`ÑÙõJ`~Q¨èšI„~¿Þöp}ª»ËËÚmˆ…y5£ÆŸìW£ä£’b¶p”'¬Üçs¬ïAë–i™ÃfŸ8–ÆÐûéAû¤	f¢¯_ÿï5k¶vÞ�kÞF4*<÷^�¸íívFµ°2µ‚Íwû¼Üz8KŸm4çBÎÃg”z
-•‹¬rY3ì�ô¾^>pMÞÇB'^®[Éd|HáVÊ±—õâ¬jF›‚\_o?xçNä{Ý�´^äÇ´/´ˆs/²ó 7¬N*L„
-Tº8´yB§:¬ùGÎ4ž(`½i¾>Ùc0¸ç~O¨ø§Ë[âûà�X69ÁŸn‰Œ•|[¾g_‹åÈ«ØiÞä·É�-vú]¬Í³@KØêñú~ÑñÖËÓ6ûLBSG˜âÀN)ß7*á¦áŽvMò»¬m•õe�Ódž†9=¡:ØÀ‚ƒY-)õ¿âv‰“Ù~$�šuÖ5JÏEŒñIŽcÏ„­yk›Ò™|ùôüÀÒ¥vÂî¿LjßÇë]+rlo�"¤$äâyÐî0öFÞµÿ½kÇªUùû>èîö
-–Ï£\deísðý�É»ü3å<d•	H|›Â1ÏkÄú£e1�,EÝí;ª‹Šº5]ÿ!:m9ÒŸošìÃGø¬r?�)bã²½ðHÿÖ–ÝÇÂá$µ!Ód–eÀzÇô@æüÈu¹_ôìv[žÙÖçÝØÑ_EWë|ù© †Æ2ojY_aÂÿ.+¨+ Ò£´Ë£‹4ú’£Q(7µ¦þ„y£¡qMñ^2YH�wTˆP˜R9zÔôy_e´E¦Px#NS Œo ·i]Æ¶gd‰“‚Ý9;¤ä"ÇªŽ½Öå¸·@kw94ø4'”šZÖ¶¹ùhlš,r<Cveu�p\%î�méî2ol;¦¾ ÜÅK!¼«@o<uXap-œ˜ï‚hˆHÒ@ssÍ†ÖGCl��-ô{V7ø„Í�G‹ç. ë—šåü§f�Q	ï^çÇcóêS¼G}±½U{õ”ªÀ®yõ•4>ß�aÎ|�±�Œá¸e"WÅŒ)ª*“xñvÉã™‚ˆ¡Ü¢5þÄ3+5Ñý©éº7� ÷âYþÂQ
-çý­]^;ú¶}ƒ›î4NÜ¨YÆÛmŠþò–=[6®úÝÝù4= ´CÚKó(ÆÅ!™Ì½O�€ú›®šíÓ¨ð4EðA§MŸ“ÖED´QËš»‹¾yE�ÉØÓÀçà‘9&URWð¾‘ÈÜç2înäN\™èïÏõû7ÜPà#ü÷0©ƒÌŒ³›½%žÙkF	 5œË��84Y.GW7m–:_žoC¾O¾gú¾3¹dçëÏoSéïŸa)HL7æPG¼§×æ¦Mãý¬;‚åØº¬›V0ßö;$×Úæ°ÌZ›XRF³8‡!ÿ†ðÑ’í—£ýQ‰Î¿:B4ï—‹-H§µ„jÊ3+Ž™[Š‚0|ñæm'%”G}³EcöKF©‹¾qùHŒ³p:c¼ V‚‹XÆ¹ Þù›4Óþ�Ÿc®äùBC**o³§¾†z0‚l§È¶l�
-hÔ#÷,ú¼Ãá2á›Br¬”eŸiÜ7lPãwõ$r&‡}�tJÃM¦a}O`�û0‹á]uý0
-wCP-c9ûFA°ïÆ¶ ¦]âŽœÑXŽß‘ÀþbÃ¬â3êÓXæž9í˜ÂÔˆ#ëkù
-O¦é`m�ÞKS=oq/o¾]ÿú¦¼×QsOÑÅ«§K¬3Ù”¯‰¯ø…Þ¿¾%ÂKE�ùª"³—‹e5õU’çlzžw  @ IDAT^ag™¦}�·(X¬ZÆÈ„î°%â]‡=»Øh�1�¸§Â&¹Ç´Ü2…á‚F¤ý)ìuÝvúÒ¸9ÿ‚± $ÆN¨)—õË²O·]g]©¿Lˆ¸?�ø†å<]†,½·v-ÄÜžê�‘ˆEèÌáú³iñÖ[o<Öží»1l7£‘ªŠL÷)Þ:ªÙ¯C¢@„Î„ƒÓëºì.C´^l(Çf�P‡÷ôX¤}5QP›|NøÐŸ¨¦8ì®» Ä³IuüÞE¢®wlã�ÑD¢C9~Ö6¾Ê3üŒ´¡ý–¥€¯$‘ŽfS&‘JaR”×Þ³u«¸³të…`•¢ÑJƒM»–/ïu8w5LQ\AÝÞpTŸ[ÔIu^­©ÉmiÂ$	§Úèœ,ÆËw“¦öhÈë¹« èý¬‡¿»=m-ð˜+†l‰ÎO=~ç•¦Å‹s[YØ¦ ZÅÚúÿƒº}4b¶é, +/
-a=\Qr‚o
-	VHL0£ÝhC®�´O¾HGò¢6/Iî%Œƒ4§Èó‹Ï7`ªú…óy(-t.ëî.¤»ºë¡}t<vž×º«æu6Ç��ö0hv¯Jöv®õÛ_õin=%Îš^é§¸'ÅŽcy�.ŠRÃ
-léî6Ü‰$­Žç�3xx@! åë…âÉÈ˜úGÛâ–ýÒw»vwGc¥odø‚'D�ùG×Œ=ÖˆÀÎKöå¡£‚·¾¨º¡²Xj@&ãÝ�5m°çQg6-î°9†LøªÙl7:ö/ DÿsJ×Þg½ÁÂÁ°´ØžRÚÓkª÷öR¢ßd9ç¼x"u­'_2Êï§�‘ÜäMéQø£„î³Ûz;ËÄ±r¢|È?f†Áñ¿ìŒeÏ{¡%R†û„þ&”¤ÎuÞ^Ïµ$ñì•®a&ã:ÿ2g9÷ª>Ñû²ãbñÌÙB€½qê	óFr<)‡&g”cÀ®ÑT÷¸û]Së„Áê!N`¾{tušÂ²BWšMŠŒø>¸F3^Iz$N2É
-¿?‹*nó‹Ò.%°gÑ:Ié´	ª»×Z|ˆº’júøXº¿\ÅÁ@=ÉÇØÇ
-U#§A»ø& 3ï#x`5òÙ•ƒ§vªË°¾ ËÍšwÃa•k+Õ"±8ù!hß§–b”1‹Œ/»2?ÙÉ™Ž�Í €g™Ïâ—Èwú³•BmýÄÊY'MÜ˜ H!“3ß0[[Ã'^yãØ-0% ×#Ãælî‚ª ™zËJ[ÂÁ F¯„m/„År¬ÅØý…¼]ýñ=*'hÄÈ.
-x¹�÷GM6Ã‡{j&/²•lå©´f†š©'x%HRÌ@-¾—Ä||	“™^YÙ?Hø¹zÛ“0Ü„¿í· F !ØÙ@õr"÷#UK´Ñ¶Q$Œi†ÿ²ãÅÀ®¼�×9~d{woÆÞè6ùß…Sö>”s”Gƒ$­åø{Ko¦<·@š<Ã�¸{U$òw1ñáÙŸÛcÆ0o¯™Òã|À±É)�]ÛLÝý•Ï*áü?K‹ä?§zŠ�£Nat‚#™&ØwÊ®û?ØÝKttxü#F¦Mçòî„9¯vÎ
-j–rahY<v)äÍÏ¿ß¹°c]sÀ€­ÎÖ0/³!(ûÉ%ÑaÎ°\{–Èñ˜ƒµKS)÷
-$k˜�9N“iÎÛ‹ÊÉúBjÊÆÉ.kÏP\¡’8lVØQ ±(ƒ<Ú¯\zí¿ò²ÊØ›ÖôªºÎ&4õDÝâ„Åõ#*Ð¸Á‚1ç`©P”ö	UáMõ>ßÖÃJzª°ÍÜ	ÈÙÖ mNÆv;AlaM´”ètâR-QÉÏº;°˜[ëüÊ¹==äCf„|y[;:@øÃŒÇäí‚m™Áv|L¡-œÎH¬Û“Š¢¦bŽ—9÷ØIì6]'iËÝÉ3V¯Ì2ë-F`ZìÌàEßmæŸÓ†ú•Ñž™YH¸vê‘–X÷£Ã}âó,^Üå„Š'3ÛÑ¥FwÀ6`v u©AµeÄþÏæÙŸØ6iŽ=¥.4á™_#éùŸ½
-w,ÌHÃà4g-r³¹gû.Õ4'BË¼Ç~Š•øJCU©�2×ŸTpB .µ‘së¡MÏ@­gñäxÃdÖc²lÇ½JZÓræŸQåÃ§{ýçŽÍ^ðJ7zòæÍÈøº=E
-5%´ÐÏ‘{TÇü%œ¢“‘O�Ìdxƒè€Ká3k»;õ _8a‹3‘5¸6ãØß:æ«%eœ}-§(÷p²oòbh1Tð
-ÃF6p¦xe¿™¾^9éœmHpH5ëª™'Žóár9 ]"¦iPë­«/' éÂšgTƒßH"4,ÌxÜwÌXò{¤Y®u4Ø\[ûV/¶Éû&]î6ºØî‹çÏ}öl
-nYÐ'Lóû×20w-‚¶¼[‹ïÀI7 š•zbSí�·-¯Íû5ŠK;rô€ûÒˆâ]ë¹'ÞÓ·Àc&þCùÉ0«]3a?�ÛA¨u¾‡÷Cß;t]ë‡IÌmvTa°ößRfö ‘æ‡9	f¼a(97v§—[-'üÊ}ß¾¸~1TYt,Ç‘“�’(Œg¬Mƒäi1NÔ.Ö…‹�/<Hv
-ú)¹­ýíW�›1ÙÐCíZÏó/&à|pyW|ëÊ£ŽÚO!hé¿è�!¾Ô».ÊòhÎv¶Ê"ÿ¼�uÞëoIÓíÃÀ¤ÔFú�ƒ•ˆì(¢¿Ó¸l(]“aÓƒ½—mfÒflØ M=nÞhoXú>´Òÿ€¢'á-ÂÈ¬vcG*õWHÊ gäþSY™q‘Ïp¯�¸YÆáQ9FgÅ4ô™¨-ºÍNÆF¿Í 1t�ä;ÚgÙVXîm ,Ú½~eÇš»ïNk%�?3Þ7’[
-Þ›îAáöhxê! ¨GV»ÿŠ+L;Ò¹5ÕÏ()éÅwí¦ÂÂ$!%Íb0YØ•Ð»¬	¸6Ádþ˜íIþ<f:?×™àÝ‰T÷ºº'{Z_
-ðæOx!p›·î¶ššZQîÞmñ|ä$lÐË
- ô|	ZúxE'b‘iˆù:4½@òÁ ÎæúØ¶Ìï#UW
-ìÓ¿6tr/¶ôç¤5r´®§ÎYþl–gŸ@¨æ}(½Ú¶«ò¼®²Æ°û¸ðb7Ò³Üëp€nƒPkæíy¶KïiÍ«Ø’N…7D7uÊˆ1ã-‹û¶üˆÜ5·#¿Ú÷36{Úßýn)š‡å0gÄ®Ç{aè†Ý½T€¸5wÐ%E‚cSÉOŠˆù˜«r�ð>ïµ®ÏÝâ‘ÝWÔTzùoªK·Nž¿wð9ã¸1~ºV¼Úª®.˜QâíEïÅÂ1Pµb�cÛÑ¤YÞð0Äkü¬ÕÓuÅ¦¢Áe}Qÿ^ˆþ�ù'qÂ„a=jOO
-\§;¦»˜÷Ø·‹vðQl·^±ê[…ä—´�´ú²­À9�DŽÆÿ‡Ë…¢Ã¾$)Ì¥;ög-îò»W7û÷õ¥ÝÁ¿ß¿¯¤°êhptÀÄÆ°ë‹„J}” é¯2ÝDu»=eØfJÍ.ñ§¸-TÈÒÅ<§~ì»²^(þÒ¹dý¸hÑ"{FIÖ±~Åv´2bóï›®Õáu™ðýÞ»ïšœ­½PRäÝ,^)°ùeM/=8Ð‘T#Ú'h%œ¯ÂS>mäÈ©•ÞÒéÔæ“ï–ùÇÕ`HG†‚zf­a™Ò°Êów?”£‹ /¡^î‡Á|Y*‘¹Ê•……žùîâvØ¡¨³ŒjÉùòpÖ4×^èàÑ¼ÎÕÂH¬"¥´ßŽ.aùÆªºKá�="J;ÉÞÿÖÚÍÿ¸ùýÝ¿¼&ÚÒòA9!ýt+Ûq¶æ§Æ½4w{à ‡Ð?kjjâ3€ÀÀŸ‚—~ïJ¡	L€»ŽÓ„+Ž»®¸g£Yã%ØÙ¨ÆïRâùéc*û)é4ÅžÒºSÇO–õÔúÖã{g—±$Û™¬,¿º‘ l {¡„¦WÀ9iq<w	¡ÌÏVÃ´ÔÂoœXÎ)¸vÃ
-6ô¶ô	zd±©ýÆª6wŠe[=™xúéÍ=­+!w£XØrG +ôº� ¼+Ø+ðMCXn‡W<‰E/‘"E;(£à	�§Ã5Zžk³f:§Á>‚sÙ"ð©–‚õÊ¶0YLÓQ7jùI•Âü+2/ÂñèÄ˜¾üãrÏ¤¼Ä¶~ˆÂN�‰´Î4›c&³½–¥ªÎ1rÀÿÍ‘�Þéä
-Áëÿoûn×É\e¨î¯±Òqè1}	Ëò�Â ¾.�‰çHÆ,›·ûã†ã·x¯f–/ãÈù¯=°k×.Ž´$ÌlZS©tk{|œn!qøá»š›søm,¾Ø€±ÆHHxEöGJP¹›¬^¾›–B zƒãós“
-NÓ�æ8ºúeÂ
-¦ÃYÏz,ñYHÈývŒ´a‰§LeÄ`Ä‹úD2¯ÁS2kÒ×�{dkKÝÓ;Ó%wmê-�™úb¡?‰^—?Øºâ$L„.”�ã�m¹oðî*Í¿ò<dÂ—&.ì§¤Åkš5>Œð%ß•¤B+ßÙž‘#ëÊüåÇnLfO¨
-—\XVRðÙäîÁ6üôD,6àÊÏ¸êHÄBæ$%æ•a~	uœX#�úe9Ç[W«‚ó£1%þÕN 8ë5ØiÝlö»5aï¯2þ—U‚çŠ1sOŸÏ�/¿2f²ñç=<ù‹…d¦¢"j¬£ÝRcï%,õöd&þ°iùÿß;n‹M†x3iOŸßØÈµ¯XA½£Êø{ÞÏ~B7cw:²Ã4˜·,FÝŒïoá{ÿñ¬òP+~ÿÐõ´Î	ÆWÍ™²`žJò'ÆJ=óŽ–G¯€¯ˆ–I¯)™<¹šH5#2@ø‰-Ðî7að�b;îNMÌX ó*Á¥#78‰PÌ”cè•ÓjjBºRTGy—‘<r7œg8ø‚Èä[:ºrx%à~5PÃ5Í¶ËŽ&T57SÚœÑ`ŒœŒíÕ<R=Ð üp�µ…-ÄB È¥‹†Û‰s'1Í¥øÞÇ k
-Ê+ÛÚ°ºÈ£Š´©ZòÂq UÝÄ˜æåè¢=ˆfZ­òI(šeßooŽVÓn8àÖý>^qEƒ¹½¸x[å{?ä¢ÖèÂè+P~"1î%eÕÕ9{q²*ÐÂ[ÁçCe�›-ö+ìÈ‡½‘—¶»HPøãJYqfY…÷«Ð@.#<³¦’‡…jß±ôµ?o‡òôK#®®9¯&§N<Ñ`ò#"ÆuŒÉÌ™9xßòÞ^XÚ¬£@âŽ€XRÐ®Ñ[.w¢˜ýæÄô+o,ådä02O®KšöÿÀ„ôˆIÌ?ÿ˜K²÷yYç.iÍÄÀlÉ×ƒž¹–Ñ!V‘°K kôþípø{È„/mŒ4·Ï™¹ãƒ­†VþßJ8rŠ§5[AÑ<ŽâcyçjWwO›ácB­A,ùšT"1Ò™´±eÈÙÜ[8ós&âA7ˆ<w£ê:;xm*P--q¿Ì¤®†èùÀ­®a8vË’“Pä5"ëÞéËžfŸTg˜ñ+kådàuÎ'¿½îÕW·–ÃP?µ¨¨‹“Â¢åô¸·.\˜{éž²iÉžÔÉ¾Q“gœrÅµ£WvªÕÐ¦ËÞìN¯@š90é©C‘Ú'é3hû?êh,/ï÷—xß«é—Þiiz¿a�sñÀ{(ÌÎ1B:�TÙ¶(:ªÈ»^žñ†U@z=VpÑ°Å¯#ÐHÉ$å¨/À¹G ö‹‘fà=L€¦iÂ¶:cÂ~N ;#£3—b\‹L±Ï3)w­ådŸž6…d„w«}Vm€íë|¾ðŽ�lwñâŒDquU…¯d2¬íõÐ"ª¸ 7Šâ(5N>ö:Œ#nœ¿¡1DË*À/,^btFev ¿IZ	ˆ1WQ6ÁÖšN$´ËÇ–Õ�‹
-X �ÉSêý�þw8w"‹¯¦X:,ÄAÇ´^XTÁ>@8R@à=¸çÀ>Ì¦šv,ûiRÃ�´Y|ï�» aåF#Èº�Éæ?çï=rþpì‰µ?ƒ¹ö.ÏÊÂ}FýÛ$›ùßFø3òWSóëÕŸkš\Õ…ïr¤8œàLx÷Kø8¢¿›¯¿ƒSM$ÌtÖzÒ6­7°»¡sžc"MM’GL"Y ˆÜñ¬*‚8RþvÇñyx¡Ô'ñãáŒ>1(q_F?)e»óõ ç¤ð£‚©š@¤vðo‡ÃßØ9ädÎ�Ôåµ®^ärSjš­C`øTÛªæº•,÷.¿Ï”¸àÄ„­íÒûh‘ÎÁwQÚeß1ÝL2Ÿ«�Æøóº})aÿÛb?ër�weŒçBÈwA*hEW­jWüc
-¯íz(uXã°ï=ÌrîëŒe�_›¿‚}4Ï’µìiþÓÉAÐNíËÓ§”œkØnV�j/œ<©4ó~_æ—ð†�€——á™4 `1€Ï¨"ž��Èd' 3ýTðN.ƒcI&ŽG ÑÞ(—öKIY^íþ˜ëÖÕ…´:˜<èu:²9—!]0ÄnÞÿqNCsÃf»ªo�¢É>Åïˆ�’lo0JÃ[!,@2ÄÝò?Ž´MÃïõØŽîÝ;=åå®?íÔ²åÁ}��Î[Å)×ÕKõ­RüÃí4—š|+Lf*Q7Ì®/ë{o-2¯T%$Ž™À:|L5õ¨O‘&'ÕìÆ�G§' k¬­¥“ËE¯¯Ëc0™¢òÖà±J¯�è-�±4©›©Çƒ×¤9ò7a™ Ð„-Kàý3Œådx[Ü›¾X‘°ß#T´4¡­?¹=Òöh>eÍ[=©³Àô|oó×f\§\ÜX�NZ¾¡'rüˆ‚9.oß)2Ìi3�œÁÈu©·]O‚dÐ“±¶÷÷Û] ã’>Î÷?5…Ñ �Á&�üoGÎî´DÄðJ<@ú_º3§è¢ü•`�sxü¡©¥L¼�€8«“XÌë¢ aœŒB
-¹-Dð3}a‹g¹•øn?�´dkl¢!8/(¢ó�L¤•	]ª¦[XäåKÁXWÕ›ÔFH"ÌYL‘Gžü:¬˜{:÷fÖŒ¹@u�1¼Í-šVî9¬<ªC*|_Ù;�È¤Ñ4ÝŽg#¦iéP£ø¸ÚóL®lss³/*9ƒuù³¬\„Xý&QŽ†Q°£?Y‰”bƒ”¨‰ÓÃí0Ê|­ÐJ2ø~à¥¬ëKÏ�À½
-çH¬ÄÎ�š£ß(‹¡7ÇøIfgÚšišÆ#˜Q^s¿ñx¹oÛBhLûÞIîDµÕõ])4;ÓtÞd[zþ¸2_ßæþäQºE¾„ÌÉ—!JzØ\p§ƒg�Ä�¯æìÌw&•–öR2 DüíÍ<ƒí~„ß1è‰1dØMÀŽõF<Ýûª¤�š·¦�˜žI¤m—Í$4Ó@¶k³§ÙqÂš™*/w°ê;Å½½Îëp0ä…­ã­Ð„�92XžH¤‡£9-¶t‹RÎ<‚…”jÔ>ËS-b<GÄq„¡¶jÚhjw7êLVÙH\0°U¤×Ã"¦ZZ?˜¯¶VæŠŠŒž¾>1\TäDÆ¤‹}7B8F„ÖDœ‰d;-2nœ:&‘PH`–î¸ÈÐ‰G#âxE‘Ò)ô®ÒŸ¤(�¸¼É#Ù€ëpÁ"Õ6…	X7gÍ]Ý›)…:ÿ4tÞr˜L4²°»ï2ºéEðÈ ¾1Ù¹±ï¢ù'Ïá�ßìI}iäëÁé&ºÐ0u4m’T¹©f;Ë¼vªU7gN*µ^[»Ö	Ãn9ËJëöFOâxÞàzgUûšðq¿1B?r|dÐw;0'éUÔwónS×\GÌ¼-‚xewŒ“êKoDNó¯ jí²±ZAƒu‘j±‰žþ¦‡�ZÈÅ  æVìdñüSŸkíž4ÈÕ’Jîµ¹¾öŒÇÃ›¯ÎH|ÚÈò¶ÄzR|3²Ÿ]J<Ž«ÏÅ
-än§þdû¼f´BDÄ=9µÄûA¾ÜÃá<¤Â÷ÕŽèLØg¨Mg}¦%’®ªØÍQ�½hRioÉ}·W�%sæo(øxÒ‘ç±…vŠâ¼Òß?M*Í	Ù\¿`&@nä¶Œû½`ºÍ/›tÔ½ØKž�-"áØç38>\¹w÷™gGÊ²·ß•–a.�ðóüW ’¾„Ì[¤�l”Nñ?N˜w6ÒËô;DôZçÝ—½½ïŒ…9¡Ñ9\úÇÐ¬/‡-Õ‹
-­Å“nq´èæ]+Ë;¨m�FÉ1‚÷ÇæNçxçt†aeØ`�ã€CÑóÃ>6ð›IÝãÊüœ"lq}Ø7ÅYžéÖ±ÛåI¯¡qh	Ë’Ð:ªžI[Q/5Mýa>Tã¯6\±;46¥ØÄ3öë›\Çý“þ[A#
-±õ?‘F%>üðÃFþ ª{»eß$¦ZhWOH3BœÍøf`˜GÂüD�n	ØŒa„T�8×“m¡¥�{ŸäÍÎÔïžx"«'Ã£�!B{,Æí��¡ÊN+ÒuÃûØ/RÜ6+Ç2Ù„’-»=âJKìÅüy¼=Öõ‡¼öýOêÂÏ}±tŒ´ž_#`jµÏÚLÎŸ1ÜïÂtØ–Å·º³j8¡YGé&IŽ/S.>³º°#øcÇðŠØ™/þÖooK7ûõå²ö¾91Í½@�õëht^þÇM½‰ëž‰�Û68êË�*õ?”ÿíp8©ð}¡35ÖÚsAõ*4Þ]÷¾»"Bqù†nLd E£ÛÊvWbZ-ŽølŽßPTÔCmtùk?êœN§KZ-f´ÍÉ˜Œ€På"0]Õ"¸û&ì\ê ú=Ì»vÇ»,âtíœqeáWÀ'´474®8ÐE�C¸ÏlÛæøJGxîdW··y„wžúµ7í®‹$oG®€¶ëE™?ÊjñßÀvŒ ¸�ƒYÕNäp0Umü3.´dÈ8Ò�ßŒ³ØÍ¸ÛŸÙ³¾ã¬qG=[ô9¨õûg yËb¸9�%@%0¼�P6ˆlŸ�pu8¿��Å†}‹‹»Žõ¾!ˆ÷(ˆ¤Cƒ1#œ%t#²,a
-l*™å3’ž0I‰bE ^¡ä´èŒØ‰~¿½ôïÜ‚´ì€?hÈò«}çDÁËw×ÛÉfj/?à’ÜGjÅ+Fœ¿f1¾/òIÄœžåÄµ�Å^~î?é(tè„o}çxVb‡É:÷~ÌŽšAàÐDÏ l$ün‡n™Ït%º—AHC¬ìJ-B2Ìy†CõÑ*€^9°°2Ð,ø„EÊ&šãP-+Ìwï£›0\7 !
-�¯ xãBgûÚçeaÉ·õ‹|¦;µÅ;ºæès9œh�Ä[È<ƒ¾µÐ+wõ§ôþºÚ+"kM�\°fþ¸¿Ò>Ò{Ÿ}¯SÙ,·|õèÁú÷O@;Ø¬á¿`\Õ€É�^·~8‚/°]³)�VŒ-¾r°ûÿUß©ð¥ÑL©ê1°Å²S@ª²Ýa„+•;ÕlJ
-KW:Ñr¬jÈ£zÝËß>œ†¦~¢-_W<^u…eð×�†¯üa›µn�L´#>&äo „êKg²Ã0e0ìEñ¬+ïøYó}×ÜxØCæÃ.ü¸Ë{ž[üëÛzéJºqãV±g¬Í;'Š¢g‹©E^¦º5½É‡AÂ=3`ˆÌ%ª[D¿?ðEmŠªÕàŠ} €Qø­Ã"ö—{‹‚›çÁ¡ƒ‘ öuÇŸ“a6œM{ Í-†°ÝÊq`f°ø pg#˜D‚ZÛg„D50[`	òC@ Êã¬`yûFCDw¾j‡bš™$¶æÐž9D¹1hˆ$:‹€J.jÚ|Â;
-z™l*e{øÎewÜ;áB¡?J¤°ÅÃ}×ehû$vh°Ç¼^þ:@/á�7ÌÍá—óšg¾?¨­¯<˜8]°ábbý•eííˆ6›3³ÓAéX�ˆ»'¶¿¶tí�ÛjÆq8û/ðî‡6ô6›î¹Ì¬Gv„”Ô�ŽKõåAmM4š½dSÞ¾ç²ot&W _"HÚ6�ÜRÛäª¿Q	´bQÚ2+À†ÉÇ ý’CÐ€ãŒM@g Ñvlpµ“9/W†6|Ò1˜oó‘ó‡{`q±£ÄpQHö«lq…–Žô;uU^«Ôç{°{WÒÈÎ·ÿ®v)r¶±ŠrFo<¯(©~ùdì‚é‚<é‚«Šd×ë¦e°{kø‡M»ÈSjµ%öš‘hÜis `æœÚ¢;ÕˆÙØŸ:±Ÿ >³zT—w¦z+á›ƒ.ªð!ýÉŽ-ˆY6†íÞ; ‡ñÙlùk›zò™HiDÒ¦þä�wYa#<1Eå¾êº3Ö®m"9áK;|Îœ9¬=²!¸²Ò;pB´Â;@+„V=¶¤E¢%xF2\\î¦ÚûÀÈÂe˜X öp©�öÉÎþÎî·Þj›×ÜÐÓÄ �~†4µ_ùÖ·îÄ¤©Ž²°Âo IÁv“ýzs³É<ø »úêÿ‡ð[ly]Ö@ŠÆH{´9âª^àÄ'@tÒ|RŒÙÁ›÷þ‚N‚ñ@0¤uCû¥ÊšKf•–&¡!2òÈðl‡6»³ÿÁÔ—røÙ²Æ<„h_�g—ÀZI¥Q¤0v€Y±i8`7v ŸeË O€µ„ÖlÙàd[¾ îý¬šU¡e«ŒÊÝ5óª«íéJME Oc¹àéÖŠ½íž¢êDÃi¥SŽÕÞ�ªiV�«½ÉPÚ7ì‡'¦Mö	Ð®´A—i!ûAŽ%:ÕaäŸ�¬Ôƒâ’þüe¢šl×<¾gY3‘ì²íÜùóÁT¸ÿS^9¨8ÇÂ$³ÚêS­ëÖióç×Ã.í‡–‹4Žq�À~7a1G SáÛ€Õ½Ê9©•Œ®9
-ïåz‰÷§9®-Ù'y|@=C ªHFeoÆ©,õs†AÆ!ÙâDŒ¡—¶zgû=èÈ‡OÜªxg•íÔŽÙÞ×\³�<Ž–RWwÐ²DÅ{nÒÐna eh™Øå·­øàÅS,ôô§â?ÍØÙ d)ÀÆ"…a±;iôv¥"â9fx.Ž ^â¯�9õ©ÁÃ¿Á;Õ£Fr@îX`:„ÊòÒàß‡¿‡Tø®YÕÇM)ê“ ò¦U£,+’XWCÃ~BËaYS"Ü²Œeö€§a®Éé…AÐÎÑÎ ÞÉã®¸›g«Ä+§�´³ç~2¢´—þF…2ÕTg¤šbé§¡íL˜8O{§'½¶à~l»VGÉ�>.ÓªºL£­:�6ÖÕQ¢wW,¶A'5€1Ì�¦x
-&m‰Åö¬�Åb”I­©2ðþf˜=æ76Únc£ô^o2ŒëXº4à±ª¶G1ËÚZáiÅÈr@p†áÆ²Ä�¨ìË»6ôØUþMË¨”$eÙÑ€w£Ø#Lu‚à*faª°ø°z´@›ÒLZÔ*m[I�Œ‡L>¡ÆÝÁ°ìC¢Bv
-„¾;�ÁFþ4Ü>ªÕ±{¡áT~Ch=KÉõPþx‘eGÁ|QLÍipv@æÂ£Æ9ã�ùõ|DÒÊ¡ÃUÖ¶56äMKŽ�²E_¤˜%ëœ‘ËÁá°¥±.”ØôÚîÚ¢ÞŠ=±Íª`N`Y™Iû×Š¹€¾÷X
-ûw1¯ ìÔ…Ú¹·¿²rÀ,@¯xnWSëicÆ[@^d‘æÕÙ;)÷ÝOO=±dÒïõõÁóù˜ªó+›Æ�øuESÄ—V-çu|‰?èbŽ…ógo/[¦åÙ¬~G!¹IOÇ¸Ÿ›7pYÐƒÃÆ¤Ø§sf1;ï]i("åø/n=òÇ¡÷ÀÁÞñG•
-%ˆùË®H�‰Õ\½</8ÅåþF¦³}§lz‚3�FªÕ±WTÕr�d¢<³ºfX1Øêld·güÏ—OM_Ø•>‰¹òe°û©†ËPèÛauä„ÞPÕhÁ<¤º1œ°Ðwyvm�É—Oßý’†ßÖÖÄú ¡×1¬4:M×ê'Å1J©‘,Ã¾Ì¥_�ÿ ÎòÉÞ»—-“hn¯³¯ý^ùâ½~¸``S%î _6 oIÎM%ãf¶ê¤ÎßÝrï"pÜ4©ÂOv¨£G%â70 jè¬‡6;	á¥¿uþO
-#|ggT­Z|±ò6gÀÝ 'ä<Øþm¶×nàjFÍÙxÒÄ÷cjÍ†žtÉ
-l“ÖÇIˆØFlÏ¹Eä6�˜ÙB	ÐµlÔL=ácCwN*ø«ùe¼¯VZ#D�þpÒ�¶W�Qžº•§Å ³^Žñ¸;M >
-òÄ�ä�‘÷¯¶—®£Î˜(�ÒŽš5™~ˆ×»û&Ãu.Dß ‹]¦_Äv�dô%hù°D¤`Ï€àvkÐ8™a�!83ñdß•%æ!Ä,_û.‹¨öBßíFâ"ÀR´€NÁš�qC'N•è;	
-÷iŠù@2œE§íÃÐÒ{éAcñ±Ø®e^
-dâ`î_ú;-Yk�ÅÓÀÜ)^.ËÎE'Ö÷Ú–®Z@É
-X¿tqñÿgïKÀìªªt÷™Ï�çªº5¥R©¤’ÊLB @B…` A1QDEA@EhÛÖñµÚmÛølÛnÀ¡EÄ�Ø" aHÂ2O¤2Uª*5ßºCÝùžù¼ßÔ-*¤û}äI|çû’sëÞ3ì³Ï9k¯½Ö¿þ¿Ösœéö (2§Þ‰œ0ô&5ÔJx=ú÷‚Fßè«?	w"ìók²‡rÙÞñóä]ßÿë/ÑÔ9Ò8ò[DÚ~�°àO”<·Ä9FØçã�¼vâ	ïE>d{I7Án,§øDVTµ–pL+}~\¬Ö;¹­ª®`¶-uÜ]¤TÎ�üû{ý÷iõ|éÅ€2æ,”˜6 vNpö¨ÉµìÂ×•i89$“�Ê¢#ªi–³È˜¶„§H˜&h_´¨ðZöu”k1¹ Éôå¶ùËŸ`XÃ_T´PíáÂ¯ÖïÛXt/\Xz½ÿÃ™àécT8Á¾R+ãRuÓ÷V…�5ÔË,Ã«¼Í³VÂxÝƒ€·Ø�ù;0yA$Á¾ ì.PCø.¼nèÛ„DËb|VQð"¯î†¡Fø…Á¶ýuN–u`^AŠ¯e5†Í®”içÂ‘8ƒÄÆHfXMØ‚Rêr…}é´Æ/; ³A¸'ÌT{9qb«CÙø¯æz"Ïeu6ãcQˆkšw;ýbÎÝ_ìi¹ìD_î`?ÜZä20½C¼Ä kO½7˜ú)_îÍ<dº¸ËÔ ù�™ô€¶FjJ>°hZ'<Ô)@¿­n?ÀÙü³xàÃˆ[\„:µLÆžŽðÆWÀ–x¾«ë›¤ù¤åÊ%§ÈU+†«Š¼u5[«ÅM¿Åà¬±”¨½�×#ÙÅ¤FÜ@„	sG¼
-<†£Ð±�twwK‡9rÚÀHGœmˆ×3Ÿó˜Å�#xËV©–òmx3åPÛêÕ<Õ…k™ð\½Õ¢·>Q&77¶ëÌì…®.kbò—Âš^âw¸¥?É[+dÞ¼·v|ÿÓ_¼FãÇ÷Í˜6ík==�7âÙ£è©àã%]AÛÖÖr–øŠ×iÊ„g½j^ˆ	×`ÙægNœe‰®áÉ�V
-JFèOºË2˜îÉ¿¿×Ÿvã+3Â›%KÛí¼±&‹‰cýÖÛÚŽ„Ñ^]òí*Ië�\šV2U6çh¤^ª.:Ù^TIý3lQ–ï2™ß@\ÎÒyý~•kç]qE4Y*Õ;I°e­?ä¬ÒF“%×Âä]`¶=‘ÃAPÐ|Yuavûæ¨6ù*2âS{Íà¿_ãŒÇSCi»ª!¼†s,`{u�ë?p~x�ˆZš9?'HN`ˆQBÆÄ`ÜŽ@]N‚Çât)ØVBŠÆáÂ¢ ¼ˆý°±9ÂºÂÅÓÖÔµ|Ðé?½¿÷Àåsé¾lhÊÛ±–×¶y.M²3¨¢Óôñß¯?AÖ“ƒ9°×a Àìá¥ª�kÑ¢–·<4[CèJBxám{ÔÁ‹eÜîZjÄ}ÐÛúdZÙ"s†—†~ì�Ìðš Tu` ðCœÍêNönnk;äK‘�9;èó�hj%ÈMAOøyìGÿ™^éå>+ÖgÌž?Ÿ¢EÊýÛ¼ì2 [ÈÐ4¾àv1Ï.)'±Ç¤…&+÷ôg_�ó	çš³‰�žö±mûÂa�'‡×ˆáþ„>	[‹%h6i>s!’Šš,ðoüq1¯¹ãÞZbiUéá¼wÓ¡¯â>�Ï4&žá$_ØZlô%\ÍÕ­ÙõÉõG’©ÊCÒ@‡H(“rZÜ5ÅLö`dõê7'îûþç¿|Œå…ÒdÎ½ O1»æSÔï¯ò7¼tM]ùÝ¤š‰ltõj¦„jO.çá-¯ˆ²sã[|)Ü÷„Ø2öÖ˜b©ô2QØ¢Óew•zýwÚ�ïp±qÍ*P
-¥|¡~Jä-ƒ�§S„]ñô2Ž•�ë¥ÂSœSžÁg‹[ãm‘¬¯TR486¡òmÔ«åß(9åé°näKdï•­Ä8”eg;qšª§K³«ü�«ÛhnîÐDgµ•O)‰žžø”çÖ=—HhK.»ÌÆ²¿™ò"YFóçÉó»7=Þhûá]óoV4¶U/�	• ¢‚a `ØàV2ä•¸Á|3lš¥‚Vt¹]>düI á‚�ÎT£êíã�Ã[j&ÒJ§‹ms‹¶¾´!êö²¡	Õn8~yqYBXµu'ˆ¨oŽNgãÆwl³ri&ŒœENð•Ž}}bîáÊ‰á”ÃÚÚLéÄØºÊì¹d›_ßä¥å$YÚï—Áô â ÝAÀwfŒ •@�—E‚DïÍ¸S2·!äÇO2Ã~`SÙÔÞ„2Ý
-¼, V»ÜˆÖå«Qq3¹T×¿ðú2tÇ?· W�g2ÓAÊTo³l8�íØ‘›Ûºð®Dj´GrEÉçû*ò=*âú˜�Ü•�Hµzï»/`_~KæjõÎÀ†s¤ªjÎuR|™ž›*H5ÒÝ"qÜªP‡bë%‹ã3@Ú§ €1ä-˜ý�"ÊƒTé³&ÏÜŸîÀ]x§†ÿ¹zÿûÿ§=�÷“©‚"„¸‘ÃÒš/íã{lµ9Ž’ii¡ÏŽºþh|+„ã~jšqÊÓEi�-/äáÜ˜È»`û§þŸ6øÿòà§ÍøÒdÂ|Pöî- ¾1Í€JìØ£ë×Ûk'1È£k'[,õ¡‘ã‡‡ó½ÊÍõó¥�ü…0*7j"ÿ«*êPfYœ¸Q®q§¯„W<€Ø,pœ5 «SœxWxd˜ŠRK@«�rÄµw¾¨bß­åœRA#apÿÎÇ¼aZ,Zä�™nRM$>_®#žý�Áq3‡bÚc—Ìz«À†©c§�Zk( {@Yç ä1l 2Î6Â¾¶µSœÙ\s6ÌãL›µt‘!£3˜;�'�U´‡%bŒ”1çÅŽ—¼©VË°pô;øÏ£"¡îI5 !±Ù$UE¨eü¡ÛM«ÆÀ +Z¶Ú#œ‘ç	Ë»Y;á;¥×<}0žpn	ä‚Nxú•M¾ò¹5Ù{þí§T[à
-ú-Óà‘†ˆV6_SïÞ¬Ÿ~“ ñÞ÷%�«Ãe{|›É ˆ˜ÛËôC*ø<1TÀï4�fßˆJ'ôë¾KÞòb*C$Éâoô	KŠKæ6–±Ù;G�=D-ÌeEn¤6Ð ã>A¸vl4;a Ö½¨¨ë7œ�ÚÆ†Òr‰Ðn³í’™G°Ú*r…¢AG5bsÛ)ßä¦¿ÿ÷{Ð …jãXã6Ë¬úø}í?EÙýÑO"n?±)£ÙÞúÎyL„Š-ŒÿD¥è‡k*äªâ@iŒ-žßø=ú€ëô,-Ë–!>'“†”ag ¥íÍ[úåmó—Ò˜µå…¾(®˜wïüúÐ <2ýÊÖpŽN9¨ñ¶lýjžc_ù_3ªÖ¾¨æ±ƒ*¿¼?˜Ï[]:Q�?|lßdêFêÝÙ^Ì²&IÀ\ˆ—m1nX¹#P¸ýn1ì¡S�²ˆµ!F¼‰žÿñ%³ÂÔ��ß9$Pð�åè$¡Œ$ÊÇ¦ûÒi.-Ím‚'ëktÁß4x—)*WÑY{”nÓt àn‡"4qœ=ÕH�à;ÅoåEAµXöZ©³L~GuÙ¬üN×®jv®˜7?vqW�³jõdû�ðª…E�
-m8+@Ÿhâþ49õ3‘Ð¸'EŠÐßL"yàÊS=3@[í¤QÔèƒ<~Ý_àa“©Áu#4Ž��%Y$ýÆŸx|«núœüðŽûAðó³Ý¿ùÑI/ÅÄm'|¶y•ìBÐ#ç!ü|´m<�FûuÂvå�4I†Ë»ßÍ•þ£e,‰—ìëØñ¶œi,ÈÊÜ‡w;vJß`ð½Iš8£Ù_f4ëfp ¼€! xÌ³Š©oG4©tA1Èëá7ã9<åÜ“Ûòþßù€þZ=Îê3Xæã–ƒýqÄ/^ÿûƒÇ£ù"Ú"j;®^ ñä	–—ÚÑÉ|ÌÐŒù3X(’—ÌìÐ¶¿ü¼óO›ñÍ ¢�ÔÔŒ[l‚„w	{}‚˜©ÆhÂ¸ñ¥Íã8é¥.C¸,@¨-öjLÙW�•ò!‰åwýÀã åý‘Õw@½Úª2°téÒS¼Ezì]Ï<“¬v¸×AžçûØ«�†LY1JýíÔþLXðB«ài8É •¶™:œDH°¤6“”½oé±MØ�Ôy<.4-ýhemLö±Ÿ½ç‘,¡lMýV.ûêîáŽñ�Ý_fIL˜Þ°Câ#©te@?<cøb "@k”d6oÝwÊµb�ª†Á€#i“„<A3ŽdNUKc£3ò¯#rÎ"ˆIÒïx–!9QîN°¦%3ÓÄ å\ Êºi|†P<ôœÅ‚ÅSß.Ö×Ÿb˜¨W.Ü­ˆ‡P4òSoÀÝùv¥Ÿô% 01J~ÃW¾‡Z¼3Ï£ÊÚZ­55U=èŽ·C1ÐöÒåÜj÷Èüêjš<-?/”$IA+K¤7mÃvd„P¿•�M·§8Vf£ÐfCÒo?Y2Ïœµ SE0õoÇuó:Ç^�¿Ÿ�Ç^8œHÑ$kùØå�ßÿïÌé–ipplœ§×‘Žfu}�.:þÝ©»/þé–þà:P¼]cW®tA¯/d²Ö6ø‹CnˆñªZßnÛ÷ò»Óf|=ÃÝ1Ã+~I¼LÈLhm]€ˆ¤Ó‰zR¼\å)öŸ»PL9ù×ûú OÿB‘ ¼6ÿÍd¬9ªaÑ±¿âõä2ùÝ¶©þn èîÂ±N2¤•cÓéyµ›Œˆfþ'€‰Ý|;ÜÙi°qu¢¢©²Ýä55´4QƒL{3¬!³$‘‹W´¾&ï£¥-?àJÀ6 :Ì°ˆÝæ‘Û;ñ"çlž3ü\Þøˆ×iÄ¾ã}­âAÂ>å>X;.@:cò±U;ëƒw†Êkfêì…Ñèºu'=h¸$B4 V`7ÆJç€2¯£ìéò\ŒcòÜ*çñ’Ö‰Ñµ
-ILTxc'Ë¬®‘Ä"œóÕœçzÓÅ|-¿ÍDBŽUa÷_×
-Ò³‹'y…´Ÿ¢S\+€˜øôÕö°Fá·S'¡èùiX¢öîˆãFAt¯†ÜHæ—)—kj¿ÁH‘’ÆN��.^P?»¾â�W®¡²¦M¥O+ß¥e¯fjË Œ‡ÑëaÜË	ÏÊïEËt¡DPŽÄy�zÏ28‹1@¹-—àëxø@âÕÿø^fD/ çL¯öMa­æýõ{Øôy(šÖ]'ëŒlêó@âÜ,±Ükðd—à9zÀW-~sÉÔséìŽ>“›ê€#ÆD–¸”ý{Àëq¥‡°·9>�„wÛúR¥Iþ9¦Pü>gqÿê…}€’qqž]Ó¬­¥ê¥î\óâçý;¼_q²rÒ�»‰ƒ›ö'ñWº±_Ù3A¨b¨Éã9JõºþÜËZ9GÔ!fœLË¸ˆ„dÆ™Ð@éXù}òšB¦"g-Y(šòg c4w£*—�ª©%â™¸õê‰›†ïÜ  ÇævºÈëã^¢dæ@€ŠR?ZˆäÐÞòî´Ý‡ÔÀ®'‹Î°É^+ÝÐd4™Ê<CY0äK®Àcly®£Ã*Íô´`ûÝ+ò	O²iÜ€ÏûègyÎ·nt�Í½Éj 6Ð@ØªŠýÎ—Ê„D†½|ß Ôm-Âkg€zIaà{NW˜¿=oªÜ?Ùðí;žö%ñœL„ûQ¡¶ö$hÙV”"_öÙÛ[˜ÚæsÁ™ð7¨¿[Ë³âwRŠ2å>œ›^Bêàî>�7‡áyÎ´XQÒÔÐ®<èË´µ{¤ú•ã‰(bÞ€‚Ÿ¼Äás†¶è– €+0!š�-ÆŸ/™py°Í]Å8�O#n,± vÇLÁDéßMzqëÙ7±d{K4Û–ôŒŠ�ÑŸ},N>ñûýE{€SÈïÅÞ§VÏŸ1 êÉ™BövLÉþïÏ¡’AÖäuí/¸å‰Cq÷Ä†¥Ty3ÿC^4þw¶hý 5ßÈ2¯MÜæLø<þÀžŽÆP]­­µI�œ‡sz	²Bp¨… 7ô¼­×I_^4?Û€Dã…&Ë+dPT»åÀêÕoq �ô5áÁJ×ƒá~2Xÿm®AÕ{Žî:·¾&‡å-“(OÚ1ÚóÕx í¾‡¶±Qdü Gi“›|®ð§¾}ÞQ˜Ïr‚èäìe+g"ã¾i9Wù[–Ñü’_ª´Éò½–.U«¹?þ—‹Ä+ÆåÂÛns"VŠºK˜N´@g™”oLEwbƒÀ”q@™'È<ûÔ¶––ñ¬~°fª‹1íI0ÇXP·²Ò]]e¶³ò!BnOI½šŒfŸ˜}dÓ¦r²ABÒ‰†Hh º—aã~�˜õÓ(VÙÃü Ã?¹õ—Kšþ¥Þ»7èôÀtà@yâGÀá¾ìg%»¡}’g,: ×$I�ÚÿÄŽ?Ž0Gç�‰êÉ®Di|—3ì½¦%T¡*Z1sôø4Bj^ìKÔ
-^×w²ô“©!échÈxl˜nW[…l¨ä8Ay ìÍWd·œ­nôw¤2wcdƒŠ{©>zpíÇ½ê-èö5%ÆøO§E–YûZ$…ûz	èÆÚE÷}93z€*Xx�ÜµÕÑ©!ÊoÝI‚+Ê&§Ù¯…þ!<Ç»Óžçák¢Hj'¶š>_ÐFŒ-ðûÓ´R2R±•Pcž¸Í™ðùmc&ï¶aH�uë¢þ¢¢	z@ÔBŠU¥-·´Ù˜"ùLkkùE«œC÷ûAýI1MØÅZjÄ`�;dQý¼]Ò^�˜Æ›•í*kj ®¼õËgY¬î	´µmÅßFÅ°U¶¡kšh-• 1½$¡1Ãw\P7ƒÞÓó0KU˜Îû!»îƒ4I4³`q§œÌ.š˜³r¥Ü�¨�\ƒJ›ÀE‘4GÞÌ´ç‰÷Q³¶y+€â[›šˆÒÔ@¬7PFÐ*»ƒÞ&1¢Ó,ÑŽÀùä�uFÕ´T'OZ(pMÕŸÓíLï^(¹öæÜt3(u„-�¡£=`¾lŠÊ„[Êž#õÿÔ“\&s<”>T¥•â4S><Ï€lCµ6Œý§”–}ÌïpÚ0*íà_ò.¯©ªýª~‹ÍGÁC\Þ­òß7ß	:þsHØ•`¨ÿ£¿¾ž¢LNZŸdTëxµQðk~ ƒó‚´á“NÂ:çyïAÁÎO±-Oo;Œ<ù4Ì^ü!¶Š™bèö”K_‚�‹jÈ½@o–½Ê‰Î‡ó{âñÝ¢èHôoU¶®ZåSæMðœtùo¨ûYH;çóÊ•­ÎÂÆ~õ‘û®}¦~AxO&b7ë[u'=�•s¼¿~o{@0ôš]ÿ[7á§q.î°WG‰¾Gž‘S�Ü>š®�‚…†ÒáÊÄË÷°\T#ŠL_&Sæn®_z‰OŒÍ•C]gà {ÒC}:º›†è|’äçU$×êu…|Ôiï`eòÑ&W˜f¦ËSOz.†TÝ¸Q^*ÉZÖ—1�…¬en1˜¹B NÚÜÔtJ¢é:$�P0qnÁpÌõ'Ý—ßzWõ˜&¶� )�ºyg5ÌXòÆ°ÒôâÀ@èg¯%<?‡¤Æ{â¶•Ï#¹‘=®�ãÛ£É�{¡|-í$»V–ö)ØÁ»Gã£‡°mÙˆÁãÌiÐîNLYwÀ�vÀ'‡]b>>ã{¸¾r‚«rlÚž¸£êUzöN`{ÿÒ?õˆT èk³N^\ Ñœº~ÿV¶/O•áú
-ßõ\ Ð5>%§Û”Šf=Ú€�6<gÃÎàH0òÔ¤â?,¦É�Ë^Í‚fG£D¸Xh€t®GØ�¥³lp˜D£iê,™éIRuŽ~’ÞðÓŸªÖ´…S.˜>§yb¨…>Ø¬ ÜéŸ™ð·ÍsúšX¤É2š°£‡§çé<Þ¬ö¬+æßØº5/ph6^<¼s¼Ê‘nwA„ÉsFîéåµ'Ê®µà,	ÕuGAÅgq+p8$3‰}Xë8qmt¿±Å^‰t�¿¶jU9az’‡¾ù‡ßôVùÿT4“Æ_œEb8û:’¯OÃ#Þˆö[#¥Ä#Iå+ýÞ÷ 8!ÆÀ"õ9Þ6¿å¨;Kšu5¼†s ºÀý80à�Á?ÖHùZÌøÝuËrÕŠÙP˜©¹ðâÙ,oM«›¾ðU$“ßû+:µïÚó¥/¤šY*ÿÒ€[øÌùá<ÏC˜á
-`´I@<·™cŒM|ÞŠí¹¨>T6t¿ç�¥êia„­“Ÿrã¦¬¼8Ç4µG\²Þ·öD˜á¤V'3šäqH-!·Õ¦”„KÎšÒÏ:ÙÔ6G¢èõáÌG`Ð¯‚ÐÅ¨‹óš9�@ þÐ”Ï~¥ÿµ¾DÜëJ‡ôˆÓil>AðM�ƒÚ2ƒ†Çf!]Uð¼ÚÃÞñ�@U~Íx¥ß»EÌI‚VˆµòÔS®1@ðPÍ�††ñƒìØ±†Ò¸w%¸< )bÂ ÃðºmÞfëÌòx,÷¯�¥ä†vP&"ID6õÆmK]v�(ØFx†jU‹× !l�W&oÇA`Ãušm¢ÒBT2›ž4àì»¤3¦©»W×ÕÑ“¼
-VL½kÀuKµóLNe2˜”ïý�.ôž¼Ú¯±mzÎæ>1oÅ¾.{ÓÂ-3A7ü)LçJºþóÍü{±5º3BMÓ$FœùÆG_Â¶Ù1*I-fZnÄ´]t¨Åàml<É@Ò{„í)Î·¼d¿¬£í÷‰ÄY­sÌuHæ¿¨V«  @ IDAT]‡nPÖœÈ¡Ø÷vòbæwï&›x^^�ûgOð|ÇfBjú±²P	ô�Jä×£CGž(yœRP«[Z(Òáýåì`8�,ÇXLõ5ÙØðLÇ4 0SÂÔíwÈK< ¨Z�ËÇ–Ú«›îs†êîÍ©æ4¸%xn†,�‘^€Bï…99³–wm|�R�uÓSsÄiÍœ5•óÃCzjj¸!‰’×©!·£^Á+—÷ò�—û|éóI¹ ¢ÜO:À0ÿYŠ �i?©›ö?›ºU857¥¾j?p!ã/f¥Ëh<°NÊ'ÓD‚�l­)Úì¿`Ân{$iv.•zƒƒeI!(Ë§-´<Æéá’V˜™+Áj|¿™`8±7§’®æPý!Í`º.üÌç{¶årC{~ýëìÍ ¬œk»},¦Iýž�ó�MÆGü+ç‚è÷ÔH³õ7Bnž¹dþ|Ô�¼e×(©ùåwÞý€Pbž°ÃË¬×¡àa±ï[Y÷€®ªrSSEMA"s*û
-Ø(q${ËÜ¹Õ"Ý‹DÛ4xÏ‹°™‹ÂÌÀûÓhþò¯?øàæM==�ÔxS¯ò¨mo¾�!Ú}÷­cVÝt“,ñÞYÀ,ž/Ã–t‡Z\M\ã�¤×·c0‚nÚ2ðJ%EòÔ¶ß|¯p%lfÄº}XÁÓµÐ’‡–yÝ—f™ÍfUx7ÚDû¥|LÅbüà8ÿ†ÂÄê©˜Ü;,c¡‘}(ä®Êž‡®Žé;æÄÝi{7f§»Ñ¶ù¦Ûöcðé¢ƒåžfÙíÇPGM½ÛW0çB£mLž©H¢3ŠÛã…Í8gÓ¦ž‡ÛÛ›è¬áýåëI`«!¸ú‰?69»£˜Ï›Ðü8ž¦�i&saÁd÷ùLŸx°C%ÕÕdöìÙú+©ŸÃ¡ù2 ôO"©qá®ïaû‡ñ.R'âŒ[Þµñ-Š¢—”¬ë$��3EàeEÜ)ÅR;• `Ù�J¤][wïÌ]ÞÞ>þ¢Ó^™þ@‰(I°¸€ËüHf†D×YCþMW'ÑZßrZÊ�FÃºõîë‡k?øu ç=.Î^O,©j¥¡T>¬¢D¶¼¬j9«	sú•03; òÝ�ÎŸ‚R�iÈ¼Ô"Ë_{Ð ï2L[D;‘X“bFžl™qéêG [Úùv¤é»»»}IgDúCO�Úg¥©ç^µ6¯[§-¹~­°íÑuT¦¨l`p¾“®•zbˆiŠWU¡„0[öíãÏo˜Çîë«ü|)lWÀÊœMË%�¢ÐV®,Ô $ á	4ˆåcšŠí‚,®‹¥’ñYÈgë(��L`‚}�i×¼á[Ðqz¦À €ºæØÝ‰ÑWA-ceè!Ü–`r"´î;;¶ÙÎeî ‹ªdLmNªèv~÷ÅSëAqâ:bRd9oÛWÃpï)æŠëWTùé€P¦ �itˆ<’Y�ö~þ•¯=pME¾—%ªfŽDêëO
-�`»·[¨¶œ¹3ÆÖ dc¦]‚ëÇ¬æ¤þ¤;ÒÁýð-ÄÙÏ/±dëm?øéMø:áóð7Ä52ïcÜ!»ä‚<(Î­YÙ¸(óâH!ãI¥�¼×u5 çä¢ê¯°ÏûÆ—vè¶ð–ý¬$»^Öã¹C™ÃÕÊÑÕaÛ·§§§%àÚ�¾{á¹­sÙü¹ÅÆ9÷¡éGè³Šw÷ï×À>ùI ÍžÇuœ±¼¿+¡ä2ïÃ™p¹ïÚø¦‰Ñ »v užƒ*c0ÍÑHiÿÞMªçÍ;TUãŸ¢Qõ±hûI^ÏÏàÁÖK:B�ñþ<è­§CRànLÛ5TÚvA„qÜûìL¥¼Œ(Ê]‹M¡I(_[¡ÍBþ~Ä§ò‚y,5bw\Öv‚í‹Æ)ïºà’�ÁøN‡éøR©¨<ã‘˜¾ØT…5 Û¹¤Ÿ!èæ€ âó,i`YÒˆÙb¨ÍßïýÕ‰JôF¥Á™¼f,÷	¾t˜X{õjvZéØÈñ%×ß5ì«—Þx×ÐŸ®¿%¯xÜT Tá¾%D0œ¤Rê,p)¬XÑN�aŠænnö:Õ3µ6äR,Þmô¸r'r‚5Ë.Bóf%Ê'Z�(è#Õ'“¡ÌHO‹§êV^ÓPAÆ»Có9®*oØµèœ±Ñ\–)Û[K�hOG�ÊÈ
-N�dp¥m˜Ñ[è:æoK^yÙùœ÷Çë×“ík:R^ùìWvZ\YWGÉéËÇÙ“N#öFî€öè>õYÓÞ‚–�[ßRŸ5QÍÈX‡]\„ÆÄß2°ˆKsÒ–8
-Êlwæ×Ëúß-e|$KqÐ¨Æ0+j£÷1n{í‰æŒï^e¹Û˜…®CÍl?—w1Ä“Ü¨[ËqoWa�55‰PÂn³À‰Lø¼dÑã²uff/±ð¦Æøþ‡3¦Êj—1^éyí�a:’¯Ç!Öy}*a
-
-kì$~©ž%ÄïŸAÃ�ÐÆS§	³¿§g 9Å¯âíKSX*!“<¹3äJßµñ¥FêõX~'4²‚Ô¸.™Êï¹±½�fÁËÅcos¡ h8Û!
-÷˜–²Ã[yBÏê½œ“ôÈ~¹fj¸»Œ¿Ä%Kú�¥’‹jƒß³bÙï•dùvÑ%|0�‡-ó$é÷Û'(ñ~íì³©ôÁe0äêÒºÄiÕ©¥'B£€,õ*‰ÄNSS‚m}ld� ™»q¥…xKWûEv6$�¾ì÷TQC2xRÓ,d%H®�ÙÖ�Ø–‚nÎCÄuŸ)šWX¬;	¥æ¥F8æ.)ä×$;Ìdí:Kí:ÆŠî§vì|ä'B)7Û©nøîtH)¥³XGY_êHQUx§(øEyÎ<ª®.‡RÆƒÁuH”µsvO�°=Ù$Er¦c^B	A&³ëÙ<™å£	KÞÖ�3&óPåR\¯ß0€?V^ã|Æ0j"«iXv­ùÐCuÏ¸²ucýOg—ñ+WB ò`�ŸÍg‹Ï¯¬Œc™utˆGSœ[vŸ8áµ7.\éªÆ´¿d±çH6dB©ñµ¹X¤­müžRdƒ�ã`]Š1y–ÑzÉ4CWÀ3Ì°‰¤ª–*Á„Ë"Üð‘¬P=ýßaD/ÀumU¢Ñ‘ÇÀxe,]ü£É-÷"Z*Y–ËÏq^„]ZðB‚qžu™‚}8
-Õç‰Ç|ÿó™ÑÒ¼Î”e}»�0ö.ko|íiBQ]XdíŒÈ6¡,Ü’kÕ�AµÒjŠ	÷º½¾BÎ<$ú½¨è<	ÿ[ÙîLYs˜*¿ë¶ì=œÌ{Üâ¹Y‰[ÜÞldv$ò¶^Õü�-3�X ØnÁÈuxÏ˜ÈUà˜?ží–“4\Ò?Òñ6ðzÖ×¯/%;%ƒ¸ø×ÿpÿý‰Õ«Oæ8bI€êoGWÆñÅì‘ÇfÔÖ–=éZ•F§S‹ò˜Çò«qþaCä.ˆúË–ÅþB„@š‘˜ûãV¯4<{Ât÷Ítq1Œô,¤ªRè÷ÃÚ5Ê¶½)­ès è…r�“‡]á<¼ˆÚ²ÍèŽs³˜¼™Ê'ÅžÙÞòËiQe¢ºžG `LË#«’ùÌn¿³àé£œu9ñfçþäâÿ˜Ì«Ÿ^Sâq�§t®cOÁªIÚ™r5ÞÁWø·Ôu—¶+ˆ{�dx)BA´R)Ë`fñF:–Üê®’7Åcé.÷1†ú¬e•>ß×§éí•nþÐ‡Ô¦	ŸÔ:·U Ü?!¹aCâç«+¦†;qoÆÏqäÕM·«æè¡¾éyõõŠR;­1Ø/¨6w-Ìî5€S¼4@V‡£ÈäÄ’æ´€«x›#Ðîtˆ×?·§ Æ]rz…Âkg5@§ø6Òˆi¿écƒ�D\oÉÜWž�ÚÚZ«GÍv8Má9MT·-s¹Š.—KJù0°�ˆDÿVÉ2þ 4ÈAäô‚È1Û‘-? z+J¶ÓˆxôOr^ùàÄë­ûýõ{Û]é¬ª_…m¸ ø+dž\&¼¹ˆçúP_:ªÜð(þÚ/©š½ÞÒúÎáHµGºº‹Ÿ4Yv% ¢…ª:ÿ‘IÄþïí•�|öÓb|cºÁx@ Õ1pNa)mm®©ÙÛ,ÙššZÖÜÑß°xî»ddÀ»®ƒå)¥”8<=<É.hí ÊÝ‹¤ÔÙˆ/ÝòËLF~NÈuÜ›ªœj0YÂlœ¹•Z”×éôfl}G× XKìÁ�¬—åa.ë¸f�§/«	¤‡´Ò°®[Wá¥o0óñê#ÇéN�KWã´Ð¨ˆIBáOjÉ9àä™X¦¬uqøò�ƒX£Å$8‘w1ª¾�°|#µl¾ðÔ‡4Pœkyá"Ø‡Ô>Ûçëi’¤¡ƒ»vIæóR)¶Þ0äD£YËçêûù/^L}ýêåZª¾]l`ôëA(ÝÔ¨fŽLs»õÃ£—É�Û€\è>8 ï—Þ ÁtÇHA˜p”½å¸!PQqëd¦ÊþXwVõgm¤<¤„¥Òh@lÙòCÿ˜ƒS•Fã³½'
-ßs³Ò�à€ø Ô~Rˆ+¿ŸV�Û6¶Ðß›çÎ%sŽÂüúzí>|?dY�Ðx¹	i#p­)¨
-“YÐ*X©»ä-‡÷fü‘ïàþ|‰¸vÑ&C£½Ò®™-jqFêf"$p5üðK0 ‰¨’8˜0‹wôåÌÙ×ø¹+mhr¹´:¯T¢kúÝÒi>ÄË¨17üxÛ¦®¯.]¸:ƒ]Ó¥º}}ji«*È‚À^ÄXüÃ#žè�<`UŽýþú½ë<§�iÃ¼Uæy	<(:ò(Ý·ö{ñ9àGÁ+òpr(öD JÚqim-Mò’¤f¯Fèð\@#ž{l’³Ù�³¥mS¼Ž‘÷îJÞùÌeè;oòßÿ
-/²FyÄmÍà]ZÈC1«°c'/ˆÇÈzA¼ù Ûý¼Ö	H‘s¿rqæ‡¶Ñ:ü“÷ÀA`Î‰É7â`HæX²ªªÉziµ×)†—îÛ_ïÍèŒý$J[ã¸	+Á\ó�&g|©¶Ú÷Ñ¼-_Åz¼7@-áó`cp€jî¨,¡ôËàHI€Ò© wS5uR 0û¤ã6¿Wpp{ìßŸ¸¬Å�pÖ{w_‰‚œ¯{NcÝ«›ÞÙI½›Ó}�ã ¿!.[ˆÆl�Ì³ng–ûä¯[—�Áˆ!¥Âã3“Õ3#Þ,©k%þšbV]òÐwBUˆ¨?¼óƒ5ü?œŽ¡ÉÔsŠ®ž¥äÙèã�1zcÛHašÓ00¸w9ãU®³<Z©ÝÉš—=×Ÿ…ø'pl‰³hØ3M�,JéÓC^÷Gƒ$p¡n
-—å’"Ë] •Ýç¥‡°¤…÷�OÓê^ˆrAI'w¥’H´ŸèB½ÔzÞÕžÎ®ÜÔ\á²7ì.e{xÃ¸WTõ»K½¬TCøÏˆ¥ÿƒÀaèiQ±RJDi+!qÉæ@û¨ LBGŸAˆöŸPXñ¨#h*
-ÆšåâØšÂîUÏ@Nª|òwø¯•ç!ýdk!Ÿ»Õ
-zÿ¬v„œhBqQ”;ýaÞå±#ò8‚=ƒ•Â”w8äû?½=Àð\5èY‹"g?cZì@œz`Jw*öèwLö�Å7^8xÓÒ¶­¨Eóè³‚é•u*TŸÌìã¥¾ä/ð†ÎìÌ÷ ùÿãS"!2>‹üï4yC*Ÿ>�÷*ü"–c/mfc_ºoûä¤Õk‰ÌbŒcWªº‘^o�WÂxCvi&@ïZ®‹g�¬Õ½{m9^LÏ³m8¿ZŒy+¬7t¾š-)I}ŠoÿHg'Ûä÷Õp¸´àŸïø…l(Õk¬öw¼Í\
-D Êp‘§G=BÈÏÔÀ€`‡±º‹¼mçà‘­ˆÿLúB™e~‰}âÎúðÂÿqì3~LZøP•¡jo%'÷CåoÊcqÅ­™©	Å˜êÊv.ƒ’Å£ÝC�LÁ«™ãŠ¯�0p¬ë—ìbï„>ÕNT
-�æœÆ£Œ–TL±*bÚºÛ+1ŒþÓÁ yWPæ~�RKUÁù|©Tú4Ð³À5¼]Ë{DÛÚ�Xk;3ÿQm‰ì‹ô¤=ož¼ˆbZ%1Cµìd^3PÍÙyÍ„~;t›oÊŒ®“ƒ)k½Ž×†+ŒüÈäýÒ	þ©²qÏ³ õ'ûÔí€sP?Î�—¥ïÀc˜n`4`ª`c�ø—�®$¤8'Lí–xQ½"˜¯�ŽÎqêüeÀ’é”òØE3BƒoŒÞ"ÉRcénÔ»À5áCÂ1ˆÊG(.iƒlÑþÌ¢æÀ)u•>§ëçû‹e^ú�¥©Ÿ™~yõXQLe
-CƒŽÜ•Š^8Þu¨°­¬9XùñýõÓ/eÎê-]�òÆGPÅ–PÍ¶„†ÇßÇÉ�Ý<�þ¼b'ŠÊ�¢T´™»†yàü¨çÕÉÛž)ó§£! w,s¼:02
-ð Óæt»;pìñ–žØJÝ6`Ù?°æ	œßÁÝ‹ YXI'Þ_•™3É!2\1|aIß�ˆ_ÊÌ¬Ë”:;WµÀ Â�îv×D Åv¹œP:{òÃo4ßZ¹–gëƒ+É·Q®|Èd¹‹P9Õ(X¬.êˆŽ²àn4ì—Î³‡^Êdæb¹#.(¢NøÉ¡¼U&¯�®'{åK<=Ôìñ{B’39`l^4#U1ª€ÆZ;wvö(î‘h5ªÑñÐ<¬XzÅ‘)=ñM=8Þ›RÈ�…â¤`ýÅqŽ›a^öJž¸Ì*œ"‹ÞŒ¦É�’à¶’eöÛÆ+*ž¦Œj5La¾Æ©«à!ÄÐŸÓ05�Âr¦Ár=¢`osé¨Æ9òRI“5Ï¨bV¥QÌˆ¹ÛV‚HÙœdÜ’;c$PïÛÜµ¥¿°zé¼ò}Ä®DWÂ[¼¾Ñ/’×?ÑðÒß `8á‚9(Ò}õ°šÎQÃK¿[Ÿë_÷À:œÅñÎ“?/8øZ"qèû¢jìm¯ø¥“KóÛ{¡¥�—ƒí48—‡3
-Õ#±ƒJiJµ'/ƒÜ£Iî8/ëcO}dP0I_¹M·w¸TQ×™{MNziî¬èö‰¿�éŸéÀVéç3½­ï¶}ÉQß›EÑìüììÐØ³þo)ðüãÔúšarƒä0�øþñ¬šØK¢­ÿí¾ïÕ§ÅøVŸ+ñÝ>×©hV4$k�=ÏO,ZÀ¤;…dóyÖ^‚tÒF`G xÞ&Â¹ÌáŸ>©åó%;qš�þ�8Å	é�ògwpÂ-¢d¿F‘ž	ËZêYÖ:ú7Åó?õ›ä‰d‘k°%3ä¨ì$R2m”zÍ¤9°tž·ìåU»ñ¢*Ã27ë¬µ>¿ûÅi�ßôK[ýÌºÎ5Éœé+VG˜¥ûbO¬KT›Q&Ûà-™+/VÿmÏPã°m¸±m SI}–NÜ‰B–Ûˆ.½
-u¾£Á€SëÉ‡[˜m°FwFc¦yk&ªH:T›/"ùÒoæ<Uv€¡Í´4l;‚>ˆðzˆ‹:DFhàm9.n7°V‡a€Q˜é1:6mbîko/¡2îèæJlœ2«ad þ·ÁËë`"úÈbæ_3¶½–NÓÇ—ö&¢¬'�Ž5AJƒpR÷‚�»}t!ûÒìææqƒ=¾ó„çßy§§0ZhDø¤cœcã0øÊ±ºÊ¦m*ä'MO|Cgmk	3w9ÖÙÉLžEUö{Sˆ´†DõQ"aÀ´Ï”4élèÜþxó†4§ú"9†Á+¨+t{ªy^8v¹àNÀÀ‡ÇìÊñÞiMC@ÑsÎñ.›òŸ§ô×;í÷n£‰ÓûŠàXS¸»}‚£ñn�}&î¿f60ìÿ aº“¾?Ó`7)tgtñÁ§4Ï¥8i·ch¨DZÏ\ã{ZÂúƒy¾?±r¡žœ
-Ç¼ÜqÅhRïr4›­åß­ÀM“8>©–!æ÷b}VŸ·™ûgÉüC±9¼§}¬ªlÂqOùËç«€„Xã–å]jŸcG¥FŸÂ˜¤–L/e)™‘MI©3Å‚ö‚Qo_Ð„J±}1¾ºÚåîH!¼QNîQÖ¤j/D1¡|Jè#â8åœ•/hÌsÎ'¿ð-„O†.n¯¡X ^Ë>êa|U`U4IÌ9öu“Üç\‚Ðq0åô�K>¨éÅoú¾;@6ÚŸÌiƒAžß‘°Ð…‘?$sú‹²—»»ÊÁ%<†cS¯^¼Û%’Ìçw”2¿dªÆ"r¿,õ)º½Pî<Pq>¾MtH! ŠJz°óò¹sO"²©´ýº¦×¸jÕMR1À8/žY7> žæ¨'òò"%­]~^Kp+Žy’á®œƒBÖ:âžKY6ó“ã	oñæEï:¨ìû?]?×“¼Ê+q÷jT&Š×ˆx gmµ®¼ÐqT;šº™b4·ö|T7âÍÞ™éºôÊó[)Õ'Ûö‰Ûš!YoºSñ|ÊTëú÷+ÏÆÄv¼xh ÄyœK‚¾ý_6oNTÔ�÷�ÛÀiOÉ�2x$³xñbãÀÈˆKŒDt»;ÆŸ5$´þô]¾\ÈhMSÎU<¾{îïíÛÎk‰éÜ££ð³ÚÐ{Ò`–ypÿëéJ&¶ó¯ùs'Â{š\å*É˜Î‚¼oÃÀÀ$fÃS.�¾óúÔù«x‰°ŒU2NEûZÕb~Ç¾¯½ÎÑÊNgÀ§ÕóÅõØA·'Wà–Bî|šÓTo"®„«'ÎðÒE‚è#ÍÿœD¸Àø†XÓÚŸj»j
-£ý×ÑäûI:~	lP,V%›‚¤;Y­7¦{‚ºuàLË#a¿ÂÖ;+`²Fâ ª¢05&� šä¦.œ-HÌy`‹"}„Zvøˆíènâò#ý=ù|M€CÑà\®~æo±K#8¦u„¶ŸLy«ÿÙIC8™ütF5{‹%s[ ê·Q¯w.X€EÎä.=Úÿòè’"ÛÄØU²Ñ#õôç�ë]º,Du/uçÜÜ‰:Š™Ñ8¦ÚËG•SÊcúÔ¨²E ´dªÁ€+ƒéIœ3£–~•dËT-u´ÔÓå‹.m©%ƒ*Ìª×0Æó´˜aÍ¼¹˜Ñ›zjTW�yX>ŸOë²7à•£)Ùôy9>AvŸ«È'‹éŠæ[å‚/þØí®”“›t@Ýƒ;w¾DN°Ã‘AŸ¯ÅaÚ³á„1Ýºüí/=Ž_fêK¬°h‡mN9²¤!TL?—Íî¿Ôç/â¨œïíÖ”��~�Á�’åû>y;ÈÞoGAÍ¿ æ÷a0¼]t	"MlO¬¹H 2àÄAl�Gà	jŠ(9EÎVY8¿µ[rýõ‚Â’Û¨eB‘#u¬ÕWh˜3¸)žíÓ†JCH4–gGÔ@^{×Wý9f›&;ÿ¶ÙíûPÐ§ÆÏœóUËš'8¥¸³®îå}1ÅÃ³j8“È‡ÔüñaÝe6údo,ž0E7:.FŠ‹¡Ïìê/~eJÍ[=ªú18‘xÇ>Z1¬ÇT†¤w�_›å´±ÄH€²Ÿ~ö‹8Ä8Šfrßü5þ]#NM6—‚rª¥–¾ÐRïc¸ŽA˜òÜð°sF©dn/­“fBMM< h_€þu#ß](áÇô‡»Pd¬ZËT^aÖüñAâ›gZœnã‹Ä{WÑŽÎÈ´Âã>ot�lÚDÈÌ…× ;Ÿ±˜y üyQ Û‰Ü_Èw^F ä{bZ; ±çò¶+^ˆbøú²Ò!>—:îª–!öè9öXGÇ>h•_‘Ñƒ¦-Z†¬ °èË±ü¦/ž+;Ø¯¶ï®¯ÇêŒÁ�Êé5¹øÎÀû~•Užœt3Æ½·â…ð?²�ÿT)¤Ý?×á9ÔP´ç[�V‰ùþyK!Ô·Öz¶{ð—ƒ¿µb«€ãåÕŒþ ,r1Ë2[AJ58¦Êe;P‡»¸�Ì3^^€å¡íÁÕ€ë2êã:†µÐ%*�0ÈÍÙþ f.ž?œUÕ—äëåÌÂƒl‰U!e?šá3Ä—5»Ñè¨^²‡ÀqÅ&
-…¸¤«^Rc1Ï¨ HÀW�ÂLé[Rõ­—\R§åmï ŽëÐÌ�Ëç®b¢^ðú�eñrn©ÂõAÑ'lß›È½¶õø‘î10’›<È$ð‚º§Pî:$²Â/EÕ„Ó»‡‡;»ó¤¦†~ý¶‹GP½EáVÑPfÄ�X)®:_èÏnÃÀ�ž†ßŸ£x2”‘ŸŸ6;¤«¿3QLë�3¨©©n+Þ©ìðzCxøÂò'ŽMÒyÒŽ$Ý1�uèÄ�>>�Øïâ˜€da“ÐwÛ–Ó´‡¯ËGPúÁ)‘ðaÍ2>‡WöC(Û~]€ÛT(š9Ñ/?ùó==Ïß�0Z"¾aß¾áÐŒ[­”>Ÿõò?~ö¶ iÆàæ¢”=Âè@¤8^ÐÁÜŠöMœÅW•×§À-2f‹3€š®ù*
-wBS¶lÒƒ£‹¡–r;¨,öª†=xÕÅã<÷³Ë—¯Å±©îót÷p´`Z�‰¥y5F‰@_Ê1¥%Œ,Àÿ_±`�5ZÊ‘TïhÍÒJYé½¦Å71Ûµd8ý&9Lœô{ºlûáÅC™ß#å{ƒÌ²[KÄŒaJ?E5/dm½—¬_ƒwûmÇîx�þ?íÆ—NÙñíØ½þYã’5k¬ÇŒ¸ p{ˆgŸ��5½Ä~ÍÔõËu%y$/ËÃ®{¼w <ûA:LÃ,bAÝÅH‚-E"é{õ^ï�Š7×ª	#fZÈ¥3y
-Ùm·Ü¶5óË˜V.±D³²!d?ñÎÙ^—À8Àl8õÉç¢¦ŸG3~ë]4l|Ê²r=­lYÀ�½€»#žMgy¾1Ô£–‚gMKÆ†óŽ?uîE¹¢Úk;J ó>í×\‚Â™ÿ 9û%&oG-ÕV,Öè±-®Ù(åž.±î¾ ÏÝrqÉ�3ç†æ›`õ"Y¨KB–ŽcþRi€‰K¯¦›5Ö3­‰Ä×wXÍ«ÛÒ£]£Bs ‰‡bž0?U˜jj¼yqÑíw9¡cæ‰cÁéù°`KHí‰U:Ñ~�§ò5….64æzV õA	®Í8€ö€Ä;ˆši�Íy);€`7úåZx/�U×ô}tÈü³†ìü¨Swrµ€ZÕ
-^xÕyÐGòZÛaÜ Ìdn^ýgtô*�úÌýžÑo /hVbŽeé2Ši@iv
-¢¯žw)õÚN*¨Ù5È*-’dq*g¡>8‚sq¶iä¡V±'1˜þS–ã·Ì¯vÇñ°”Ÿ—µt„E|zSÜì%%æÃóëŽ},ßŸä‚µAÑJA#(˜ 6‘µ5e§5#Š�þÄþt°y¹+þä–,�;)†Søg6Wô£8ïsÀ+¯«{ŒM ’hG(Œ"Aðü)‘¥í M8Îjàìòû£šJPnOÌp![t±´›‡6o—û
-·*î æ°%—€ð¤‹Vâü„"hš"u·ƒ·+|ôÏÕÑþ¢?RÛ‰êÇùƒððè@ôF2)é×ßÔ
-½–O6F|>VôFý·á|r‡û4ƒ çúkYhâü�túuYå§b¸Lë‡÷¦H´Ý>¦.IÒÏã 7®�rˆ”�/M|¯Eøpý¨ö›)AIÃ3½dSÛ5Â�ôtk�E«« X2)iq†tÆi7¾ôº¦£Iƒåô¢#4@« 	÷«,ŽÄòã—yfª—un2kBeojb_Ð2è©šk™ú¨€ÚÅæ5FÇëÔ˜$ß³ÛÛ#ŒŽÈððÆ,ÁçG%.¿..y~±n[	<ÈßF¨w;&q1PÃqR£ÂèóQnüp�6‰„Ûï<•XÜÄÓ“‹¯œRgèÆ5¬ÊÄ’‡Hï÷ˆÂ%²^‰õ1Âðaì€¢Wm>ª šL·¹MÖøý6oƒL•[�©ûº“gã ÉŒzÂâÏx®
-$1j’ÍüP×#ùíbQ_Ò•=êévN­g<+ßXëÍ„äyÊˆå%§¶\Ú0‡³¿—óåÌŒÏÍºBE[Gá.’À‚†òà0¨0ˆiº0Ð8#cÆ�úgnPˆ“í†Àô²šµ�áÙ¤Ìª`òP|bî0óG„‡æÆ¡óà­†‡{ÔUx¾ƒ	rG[„ÆýÓÎ¹é‹ª¤:\>TLòb_SÈyÎš¬OpoÂé:%GÇ¦•+kÑñòùwò#íH˜þð™íû§´žM A¤Ü¾2Þ�Ù©lb3HÇûžÆ5%Gðã ž†7Š
-¦ÃZT{�²`Öá&Ç
-TþlÿÈÈ2ÕU#4´R9 *ôÔÙµ3Ì+éoL­K¬­ƒ&!±MÄÃŽv‚)Íja%j~°Å_FŸTö£kÃ!DÁíéÎÆëÝŽ½ÙZ¿ ÄsqLj¸ß nø‰á}û6�yóº-õÖˆemæåEà�¢ñFmÆ9ÕZ±ßÄo¢lùyÜˆFžoæd}¤F¶Œâ,á*À 9F:ºn;ŽñV÷¨f-DIûßçª|É0	„ ¥šâtã™åMMR>–�åìY5l!«5	¸\NÁ–=ª	@â¨0º¶hùÿ«@ü¢ÌåJ¦rN_ß�ä‡Qˆ?�åGP„CfFèeãùcÞÊÍ ÛaßšÙUy�-ý.@Ä<üŠO›š‘ ½íIIÝ3­«N»ñ¥jµ;†óSsVIzq ×ýjSÓh{,÷$kXw!@¥Ëo6tæP"wüØÊš™§<<á`]<ž©xùœ¢nWqN!�e—‚$C<·ë$i
-äÏªah€?±»å`ðÄt˜ç07f¨øzL’ø§ŸmðS<-c~ e§\1Kœ‚ÇÙ‹çþ.¼À‡øÌL«i¤øäÅËÉ�««¼ÀyP*µß#ˆ*¼Žãž§=ëÊ¨NÅÿv¯ÃÃb¦ª ˜Æü„nz3i–i6m_’ãò)=n_ÔÞflßÙ•S‚Tç‚l­¨ó®š/Z.™BÎ‘Õ½#!ËGª†Då*¾gVÚµ�eÄoZ%fÚé�_çFÂU>¶
-ïˆ4âFù,ÎÉô£ÃiÆñáÌNAÃ ò !Íýþ×ò=é]àÆÂ÷_Ç¶>ÄS¶—<•ŒÅò¾…q*/²!OE_‚s"\óÁ¬•ùõFÛ~¢6	IÒÝ$PS|… µØ{Ž…àŠ‚!î7z:=Îz†c�/Ôðb´ü`hMÝz ?¼xÇe—©ÈØïCa]Ìët~.o°OEÇáõN-ïG˜{îY‚¡½_TAáãeù$Î$’``r¨\b˜;Ï�/ñ+<ç)îØ1ô`Š•SUwpO­Ópß+!$«�~n¡F*Zfa{p'¢òcñëÊ¾ºj·�r£d·ŸøÁ§LÔç{ùJ\mXþ*Î?EDûurà€I�o+”4æ*œ�PDÞÓ*×‰f3"Í> û_&£©þŒåz¸¶*\Påë»öé^0ÆùÐ,€v<�I†Û‚Ñ²çk¢‚3BUDk7wt°×„ê›@Ypït<^É¹}<?¯”žs8¥Õëù¥f‹"B×¸x×!ËÃ¤�‹½Ú2­:¾chÈ!)HÂ‚ZúË[žËTbÅ•ëûk[K`Ë2£ �©¨Ñƒ‡Ìôs-ðå¨p¬AÌ7i˜rSQ(Ð|oÄ3;Û£ÑÄ&‚sHòÛ4TvF/§ÕøÒ	[Ý¼\5µO²ŒP�„Úo—Æb¿œR*=ÜéMÈ6¿Ä!Š_e6¼:sæèÊ·éÝÐDhk=Kƒ4À7Ã»¹N"ìšS7ðà[;‡rÇ<nV´YÃ	ÀpzÙ¨Çq,$¦l‘1®ÛžËÄ3kAwK|n9¶†w¯øÆPñ9Å4ÚˆÀ[ÒÖ†òm–Ra/ñ¸SËÖ™
-³=ä7Ä£}ƒÅÈœ6¸�â®Ý¿ÿqŽ\0—Œæº•èhKT`5Eär�ùªÀ6¦R�ùŒ»©”7ý#‰œ·©¶ÚÏ‰¶ô0¼äÃNV‡|»2l.€Øp †Õƒø+òr,«ÛÚ¶ '¸É4Õ&”ÞÎÂ?[#V<Á½�K9†*±óÂ.ÁCˆ÷•ù=¦±�‰¬CÑXeÌÌH8­@˜¥Ú,1|‹Yö&¿º'�ßa ìC´JJšæ[˜å:eÛ@î ¾ý|ÈFøÎÐÎ,îÝ²åOdéRcq0>|À Ocð°oÿü—/Gkc.-ÇÞ+=ˆûÆ½ÂµÉ×Bþ´Ý…ûö:ð¶”äÞK�à%yÔ.ŠƒÑUóÏ­-júíðë ÈqMî›½]£»v.Š*më×3ÚòåÝV2y"|‡
-H~«V+nÀ¹é,dÜûµ²¢9©èNhÓÇGIå´)FéL	ªÌ'õùµSæŒLáeñ¯ü|Pïéñc±y‚Ž”Ïk[=M¿}sˆ	øœW	ç›Ùá6õ*ÉU[[Z,<º5uÈáµ\o½Xî�©+-*mx“ë§A6žÓÒRö¶vÒÂŸ�ûÈ�í‹tîÍ‹¢m¯&b9¾P%éÈQ”ŸÉFŸ/»/‘ßhÛü9×D£S[@àÙÔKëw¦êÐ»=áàfªp�Óæçf4õ¸G/ ‚§<$ktˆõí�Å~Çð®å’_ðÁAzß%Wî„aê#”Çeþ.&�X:‰MaÔ/°˜--„-î3t2]€Èë7Ü ðüù¸EÊÅg ÉMŸÇD;BPí<²í‚E‹ÊÜ™|õ§Õø"ÑÖ¼î•¡<ÊØ¨Q˜�9tqË1ËPºT*±¥¦Â‡ƒCk£´&-ôExñ(J¢Ür‡h¹nYÛ¦�ÊÝ�ðõ"]±(êIvæµÙôÍûÁøR)›™ÑÀhqÒ¢íc%iê‹Ý…Ô°©–ffºKèxâ¶¡~ÿø–ÁÞö+N.®4åŽsZ²ë6‘ÃõÒ–®³†|æêÚÒdÎT4öí÷¸ênýê”-ÉœpåôRÉÒ}¶Ãå½VmÐbŽmìéyÅãŒ¬ABäjÁéÚ–MÙ³d4
-¢èž¡le¨ñàò¬iöbtI òÅS…�õÂ¡�‚4„ÃvIúäàÁëf5ãà~½¢¨LÖã†‡ŠÄ¥eƒÛ‰µFµ;o"ç^¸úhÄ“…œ�èû±¥P´‡ÅÐÚÕ"Ç†XA¢%Äãr™/è¦+‰@lí;¨¸\'¼{œ¬rœcw®õ¤�ì2„`!=RÚÙ>f@*¿s"{®íC¸çb/?n.‹öOÁ‰Ø	ó+ñZmg%ÙTÙäË@´Ú3\•I^Ì'�ï½bQkñ
-º6ÆR@uÚE¼æõ`¸j‡Ùœ.ˆò’�;É±JÅá¦#Ca¿×µ
-Ä+K5Ó¨pÆUãQ-3ÞfcSŸ@às¨CÝŽÙPge zb ˆÁÌí°µóm��.©	ël8¦;Q6ÿK „çâyþ2‚&Š³Úzƒe›Xä-­©é7ëÖ‘#k×Ö¥�Œsfømû4EÏà¹ÔáaÓ¶<yÚ·û“uUÝj©Â;�Ÿ�&°~¤	ì�2#]ãeák³B?Bc= 2A4]Êø\rÀ«sÆP@–áœt—TßãàiÂ½jõ�)£DÿŠfj¿6Y~&¼÷Æë¯¿þ_qì·«Ñöœé›+µ©œDÉ°DQ¡˜éÂŒ…Ø„ÏÈMiÃ÷ïü	–?ŒYgØ@ W W íc<²ÝÆ3ý21;M‚×új×à­�a
-÷0«sÕ±ÿ£×'Ñ2³�µ% ÷ÌXôöp®£IÛ3¢¤?‰é[=øW�ˆOX¦ñóºšà±¦Ñèô”›:'òÈõ`ýòË²MÈsþÖ ÊÖ`êî…×tc;—Û‚zdŠƒíQ-Ç7Åò#ª^RP^ûq�wœ»`õ|ÊË–-ý³Î#§dUŒh€'{4ñ’©œì�f{˜V�ýþ–-{¿„
-¾�Ý¾ÖQ037Â<µI0.6Â"fÄŒeùá™f	kýÖáõn%(0Aœu.^\0zq#ð^Ž‚_â 0N¤Y®�UðƒìÓmîïá½'DÃp›5"YŸ†6´ŒÄKŽal›eyî¬I6,¬q—!qÛb™>„vË×Œ2á:Ô1Ä€ùj¯õ²&³#’IF·ïÌÏ{ñ­b!Å<˜â[ÍIx�ìb ¬xF9Ñ’5Í»»óiÙÃK�'â›•>¢ë˜ž›�Lr3’u¯&seºÍqÃL‡¡™Žé…çºØ2¸ �ák´}û8ÄKé&åe²á¥_¢çbÒ�ªh´’3ß˜­§ŽËZ‚Ù�#¨eØË Gf"k–Ñ	aÍ2gˆÓ=:öKö¤ý®#8„.¥Ìy¸,ðÇ3–·©–k­’<Ñ¸J¦PÃZl‰`Ì³’+ˆÂ–j ö~!öóÞ)¾}æ¨O§2)Že/Ôu’‚hIfQQa»ƒK:»ßë­½�ó¸Q+è÷°ù'õä|Ü±1î�ò%þ~x8bêÌ¹*ù‘u„t¬ó¼Û"Þ®C¹ïÛiÊÎ…,òÓû6l˜sáªÇˆÀµÈrðl�ÛPfþ¦©s—€Ïc�s#x§“:„-v”8£Ïu>€g‹G£H&È'U®ó¯i­ƒŸ¬#¬®ÏîDYQhþ|0K16’¦Ãòðqå_:‚ÓÕqVCKÜ!Ë�P^¹.š„;%�t¦^ûi3¾Aw¸ÐJ™€40áùgÀ•Ü¢Ð¯¦£8úÀ„_à8²
-ÞêÛuÈ ‡Ú„Ô�Þ� z9�¹
-3{9Ö„Âmmà¢•¯+µ¹©áÈ·ºíœd8a!’QPÁÁ‹ÃqQÄËVá† È‚Œr¦Ù*³aÍf—³àñMrCØ?ŠCÀ6¹ÏæDn¶Cw†‰høYƒY2e»¾Ç±öúéwa³RWº“©ñÔDAÊS\+buAhÄ	@
-Ã ýÆÔÅ§…Á£%~êÌAÀ� ªàJðžþI®õn×›K›³y¿.”;lVÉå:bÓj›áòÃéã'L‡�¨‚§ŒgÌz�Õ@Œi”^ò43å†â?‘†0´0&x<í¨¡–pÿ¼åŸ/hô¥1Þ/ß\}Ë«_ÖR“ÙÏQOšºNÄÄ#�’¶Ò¹¸“ød�»V·èHvÐ°Š›v·¸�–ÊIÇÖhÍrðA™BxA5ûarŸ¸püÏ�tþ·%‡Ì9ò,Þ,(×-o«;qÓÉŸY– NñÄ>~–Lp•+ßÓ5Ï1¨,Ã]ÅÅ0‘ú{ÓÒ+&ÚÐø/@•8€)ó¬nêûƒ�9ˆûÒ¥]HZÙ0=]Ø…ú¤4S¾¬uÁU³<Ã¿®;Š <Aw‡j˜âHÂÊ´†‹+ðÐ>´þCÎåWeÁÄÆ¡Ã~!ézÊ`™)hÅÁš™þ&0Ùý-ÃÍ‚iÎåpº™BÉþ�[zhÃÿáîM ì*Ë»ñ³ŸsÏÝ·¹sgËd2I&“dH²‘„‚�ˆ€TD±*"ˆ¢ÛÚÚ�Új¿Z´€X¡*nÔjdQ–°2!�@’ÉžÉ6™Ì¾Ü}¿÷ìßï½3w˜ mýþXIÿ/Lîv–÷œó¾Ïû,¿ç÷\{ÍÇ<PçëÅ¢mu�QoµÓÆí££½4¼äZÐ³ÅKñì2[;M*y´Â¯¿Â«ÙXá˜ÃT¥q‘êlHç©’C´81%”Òu ™“g•ÔR”áÄ#PF^‘)= 1Z3åø_#€pýïh¬àîbé¦uðGwÝUúÒ?ÿ¤òÄ�ùVYÑ¨X²ÄÏ� o]ûZ;˜›…ÕHn™¸¥ï8äyùÅMø²Œ4¼»G±2£H#s;æ²P±aÆ(ý„¥m}Uš	ÀýX:>�z·@¹;6Ì,y§3n•V#ð‘F�`§Å¡!šª«£$N†ïÁp ‹‚üz��q“ýœï‚–“Ð-ýYÀ…òÈñ¯F€¦ÎÔ�j‰çìðÒ_€a¾œ3LÎúÓŽiþJ *Ö@›]NÞ*Li”Bö,ÀÀN@göæ­B9}fjîõÁô¿€·Ð,ã«†û nmjÅ‰?]^e¥ÂíúþhŽ ÂsP»ÆÕzt ÎÓK||ûKÊ·nÕo¨ årHøžh`Æ–�/†W\öM	6.Ë…§{êZ‚�¹}…eÓø1Àb3®(¬Ë Œ‹T�·ñ$\iVePV¾˜|U¡ŽC«Ä:`
-:C-E¢‹ƒ²q1*[|Ø`�|`±Ãº¡þXOSû6bÙ™~’Õ°Å,)%FSwÃŒ~ÇâùÌÒµI¢à£å/Y?Ž ^ÂIaO­ý¿|ÀÙÐo�4×„—Z�íIHTóD=¾J?Š¢ù²õ5¸}@b™2˜�ªÂ„ßÖ4¬• ×®Í›l'›/ýS-f2XÕ,¸z1Óh¦˜Ã/bY»È´SãÝ›)ëÁ›{Äöº¶QâèÃÐ²Û¥†�¨¼²¶¹{¢’[iÞU×‰*c6A�ˆãø‡{óÃ‘yU³ÿ–§Ü‡‹TñÏ�]\�ömÙÁ?'èª¢¥? +øëW_qí>YÑ.ÌRÆm¸ïKq…6“W3E]~òlrŽ_vÿ@ÐŠj(ÄôîÞ¢¶¶N$`ñƒ›MÝ‚Ë ãg3 f7'?NŽG-M�@åŒ”ìt¦àò�p©Â“Œ®Ö3¼(<ÜìÄ†˜hH!—~0Ku4ÝÏNÎùJW—IXeÛóåõ"/•A¶)’&å3>(ñ”QÀÐEAãtªˆRer¹«Ä%(iòwvA­™&y;Q0Ö_xð‰$Ï—ëz{?þhÂ7Ïaj¼ùb^fyi%´“« qÌXé&˜»ðcñ™´ûÔºV÷9�2©PyÔ"f°½ÖÓ£Œe�›œq3¿–1Fäõ£½;w«eßŸÏ�¬£Ô¯®Po·¹Jß¸N„²¡–b–ÍöýhZÛÆä299¤|ÑmŠLLÉ9í¨w´Ÿ¤f–†ˆ6S�àÌÚªSF7O	mKß	¥Ê…Õéû3ZjÛåÿ¨ùR½û,”2zÆhú5Ž·®†¡Žd/+¡äÔå³•‚e½<o{…&OS²1N&¹éºª&QN‡f’Ã®—|•‰E\ð_îÏ¶SVQØ–aê¡-Ä`•IÖ‹˜ÀRy¬O–®SA]äíØ]~k²áý;„à ~XO–£•ó%Ið4@6U¨Ä¨æa<A1êÏWµ„rÓÆpùXqÑßÌtv?K�ž¥Âî)³½r2Ää&¾Û¸QÝ;ž�Û¡*Öò:TÉ�mýÏûˆˆõ›%Ä¸R°]‡Í/_ *ˆ7§¥•Ò³WtÀåa­Äu°ºIÁ÷·ZbùžþÄ51X\ŸÊÎ©:±ž®	ƒ€p1�Ã'ÞÃÉI®Yt„ôuëXµK)îRMv±�£ÒPZ (/†6¼‹àF+×EÊR}zÙå3
-:Ó¨hæñ‘x:~ÛÊöüÆ�†ÝBøî:¬ÁˆýßõP`xÃêlÔ=¨áM�þ5ðxô!Xt
-•O> &¹Ðf^‚Åîb· ŸRöç™‹çg�÷‰w\¸6ö\4æj¤äc|’!jUÆÏ&²P# Úìó‘®Ñ�N*Ý1±�±;—x‘)É|0dðsÜN2^+Ã›¢ª…Óæ°fÌOìÎdŽ]ŒìBýÀ§¿8·µzFi7¨ZWÀ²#=_ZùÚ¡½vrÐëz=ZÁt”dk�ÑoÊg*ý´·-+†23‰œ,"Ô»;Î°>�Cý š°Žá€"²æÉÊöçÛëMøv]P7Z ”�Þ=D�æÙÒ™*^‚eõ“@"¬BÏkãÆ;ƒ ¡W6—¬b10"\B²ªòK»ÃÛJ±Z=Ï‰ Ïï»Â‰Ü8ˆ¤ìæ°'·±›Õ–Ù1YFï­È9Gs}{ƒh"Kn38lZ»©þ&/µ[qæ·Àº� ²Hå-?ÜÉ'a†Ý‡<u$9RÜÃÑ:™H^èV
-@d}‰ÚÚsòÄõ!�ãû!µ A¿·(/YÐÙ&\Gí¬ùõØW\ÛîËV¾w¤³¥`ˆ…à¤(ËØüTw7‹Œ½òµ]t­Ÿ=›t¿à„‹Žö3	F6<ÓATÎo·«™´*{“X9LpœzÅ’ê©ð­ð)R9A9Í¨¨�§ôq¾\â�³Ðâá·è†Ê>œò(0lg!�»2c§×¶7³¾Òå©WS0–#Ÿ EÔ«3ZZ¼£(¸-\Þ�OÈÓ9ú÷÷Ý¯ø�ÉoÐî	³`ÈŒl†  d{+½óEpi„=’Ð©F„k76¤ñUOÃ•ó1,Úõº¡Ý3kUýw¶�–ú93O¦=¬h»÷m6z—7èÏK±�ðC•¾D³ý$­X”ÍáúètÓ|žŸø+=Ì^V²î;Ø½7±zÆz@ð{HVø9òn<È`§gÁ]¶Ê%6¿‰K(_\ýÔàh.©ëÆô8öLõüK®‘ìž8>ÚX5¬¡WxÍŒ¡:Õü±Û3ã­¼¦ÐJsøŒv:z\‚ïÖßÒ´þ”HKž˜™‰ê´óbSÖï@dÒ¦j£½<§î}:Éü�žc©ŒÓŸœ<é¬¢]¢^eÓ¯»ÿþ4³c²�¤/“¥˜Þ!@Ñfé§¾´�þ&ð[ë™¤z7´ÉWÝãã²åæÃÑä”G³¯þT‰÷õÿìgêôgHŽû~·újWñtQõ¸mbêmƒ“�že¤‡-*LÖh˜ªÒ,‰Â?˜÷’äB¸…Ìÿé–NþE(’û,6ûÿ·ð%fé:ðÐ“ÜEë¤ÁÝC±Ç)ü¡!®L¤s7¶zÏÑzÉdc©,Èv³À'YÝh·Xøë˜Î 8=³pkGã”òB÷�wµËf;æ*&6RuSÇêè “%<µ9nYPNÔvÃvŽÂîTîÇ(×.sêOkðý•Í®Nu<êà|cR-(ï+‚%B†ÖA´Êw4›e� }^i_žöŠEø5�åí*áX´[èìÖí;¶ü @5hÕ7Ç²87¡TãÚx&ˆŒ½òD&;Bè	Ç“™•BA÷uE’¿ïíÚ–s/[×,J¶ç*ßèH|;jþØ5+ŽsB	¤dà!Có	æùªw,»toEÁn7úvö¥â�â/¶ñ� ³I˜±}TÔ‹_ÒrZ<.Øt§èQ/·©¼”/bÚ?Dó\°äR5”hÆØ~ ‡ z¹# ÎTòé9,
-m¼ãŽðÕ[÷•³ÆÔB*­di4jÄm$r¬lö&)·ÝÃ_iÙØ£%%5  @ IDATêUrõ!ø:__×Þžß=¿ÞdX[È c/3+äÓÕ= Ö8“�ßm;âˆ+<ƒ‚Ó�t´¶æI7‰åä[¾6Ë ¶½ˆ«Cg“ñF;“�£ú&Ò+”0)nÁÑK$Æ*,\O<uåm…çNSÛ9'µ³PìClÐãµ<›yñQ…Z�Ñƒ¶}ûv6«²7€ðýƒ@<¤¡±Ö1)³eËK[ö¡^¢Y›Œë*if¢Ñwh�TÛí·Ì<ÛŠõq¤Ž‘b« Úyª—m…•Á¸Xú�BÉ³ß £CPóûkÔÔ«qÐì7DA>SÒóëN¼+Ï¦S¿é¶=Ø’ù^.ÔäåýíðHùÁúQxñÏî>øì‘�3W/lH–;ù_üCÆÝ+£©Ÿ�O°9|Ð|>	kmŠeD¿~J|Maõº…67ÝÝ›†p))ŒCÈüó£}õ³/f¾ö/ëÚKÀ!2þp|ÐLg—RÂ·Jr0Yæ XœC(4z6Jwâs˜õ ÝçÔÄ¸;?®èÜ^Lilç~ýÿö©Ÿ÷/ÖXÛúmÃ±Ù›·l©O,"ˆò9£“–Øks‘è»Em¶)9ñy }Z™K›âz†Ò?�ê¼_ƒÞîîžˆhæ1›Û¹Qf¹/Ïà�+`ö•ý�»Žx_„gW:ííCüŒÜì·Ÿ§þ-EÏŽ[Eëô‰à<)‚rx•‘	SÕf,¢?Ø»ùôÄ-òLQÐtR°lJ8’}ˆ&AŽ•Î$HÙÛ¾‚’Lùœ"!¶|«‘>Ìõ×ÖV…�‹®»ýÏd?ò+:FüÁà¿„1j˜µn±nêøXÀHé†Çð! mÝà_´‡0.�½‹”‡¼ôk{5Ž§c&!Y�âJ )ŽŽr«AžÃ°’¬™j}Ø.ÌEúßRU3—ü´¯¯|�0ÿ£ðw–µDH@Ç^³mŸ&Ò“"Ðµw¼¤Ïü¬Uð©.Ã”ì+³Ç‰L˜§@H_Å m,3Ñl:]¾>r�È6r´§¦;…¦Ó‹}ãÉ–—úb-$À•ÐÒK$IøªTlÆ17ëõ-e;z(ì?]dÍMH¨ù¨pŽ Ÿn–c¯€«h=\µðßFtÿ~•Rþþ¹ßTz05¿Ã†Îß„EÓò8Axl ßç·”r�©”îˆeé[DÑú2XÏ‘íF®ç¶H2Åº•¿¶±1uUØ3°«¡¡oºöG’zLÆxJ¡–Ý#¨è‘²‰tsSÓÆòõ&4u$¡h‘Œ¢ÍsRbãÇca¾À_cçØzÄ=¶2‚7zï±nÐHQ‹q=E�R q£T¢5ƒ|x5ÇYí6†ÝšµR/ffÈ‡2÷ ÌÖðò’>Î�;ªÒ"ý-àÞïÂ€i‡í j¾§ÊÒ	¼’üu¢pÀïzÇ>×›\øâH±‹Ù9N�QbÀ”ƒMŸ�ZÙ:]97�;>Â2¥—�f�*)Ô‚#”â=�ä.yDÔÆ{ç£rÓÆrüR^Ó.�»®4�P‡“äèhŸ1ó+.‘Ú„ûÜ“I)÷¡€Õ?Èób#2Kù`çá?·ƒÈQ,ƒ[hÙ«Ë—¯}üÙ#é£W/t—Mö7æÆá'�l´¿ë—’LÁéQä"E§ôõ–õ*k5{ÐIs½ðë•5Ó&�½š×— áÔi†Ñ`³Ûã~*VÀql�v5oŒdR/¤F^Š¦–=ŸŽG
-}ª4[wÍíŽ/²¦r-0P¢Á1§ÂŽ÷ÊÂšîhç¦�s{Ç³£<âaÄ‹ f½:˜®;àDÅô\õ„mÜÕŸþ²3M»·ÞÒtP È4+ Ê,úB2Á3ûú¢¡<È}l´Ì›¥Ò†M›ˆ–_¯E|¡à"Ê€§Å4&Šï)jfc£²/‘µd3/ðÍK{zÆEIŠëœ[a29?&ü°õ�ÈG²QDýÁ„•ÆäÃ�J¶¦M›J+J•ì>‘/fªbØQ&Ç6—n,<‰r!ç ß‚Ñfvh�ì'.þû†zY‹á­¨�6ñKdî•µ­´=ättÜ
-j‚VV®þì�³9ÎvëÕˆLs0çž·n0(nžßÁ¤/kiùªÈÓ<´h€NÊç.1òŽõ-ÛŸïiZ»ö;Z‰zJèUgƒø*77€ÞŸ¤d÷ÀJ?•%f¥!¾$f&ÀÓÎi,†‚‹§	?sø5 zAî!�ü‹u0<ópÕø¤o˜îOÇG‹Œ‹ÊqÉ+Ñn�/¾¦fôïEŽ{�sŠv¶xQ;U&�.Y‰^¯ØðS\æ5ª!Þf³ß1}%‚{‡žýù
-X…noÞ²f"†›Q51+…)3¡Yô2„‹%É&½¼ïø@~SS“ñ»B×ŠîRŒàvÒŽ’Å~ÇÃ½YUJÏÙEf¶®‰�"ÍúƒÕÇ“v)¸@3‹7 ›e“%ÅDÚ7ëI,º{n�äü¥5¦1�j\ÿÎ#V$»z¥bM
-±Qà“Söš™ã¾á3Ê…ý<j¤�{Æ2'¡~�ÒÜ?Óè�Þ½ÌÙ“CTUÝ}m!G÷(�p&jÀ#_	˜ÐCc®åYö4„/
-sãÉž‡í=_¢Þ¼>’Q9Õ‹*0ÍO‰cç®áìkºP9ÖÙY„`{WÁKîïµ/(™Ú•8L­aé¯0¢7"–ÒCL<™dÝS�ÑBŽNc²�É9Bö7Lv×-øU&­jV„£ùþ£õÙÃU§æY
-JÜð«´Ñ†à’�ÇPÞ�f47cŠs8AãÑ	m�6FtbúJJdjQZÝÁÚl^3oúh‘%Zš“á€`y´Äˆh7äƒ»â{½äá�_%RfUÁ(õiŠmhºI M�„¸èïkm(oIÞ“†NYûJ…(%Ø þ=R¢³ÄV5	>YvF&1­ÐÊ#ÐÐ!Àáá¢�'J�ÇN§‹\Ûv.}¤ØÐÞÎôï9á0gÖóC�[Ê�J8+ãñ’
-Å'¢i¿–U‚›´ëû– *wâmÿ�gÛ5žëÀbÁÂÃÝYA‰x–W€át3ÍõŸEÒÀ„Ÿ]g¥¼Z¨Añ<¸=pçp^˜ì‰u²Å‚¹‡ÌGhž¯Ã
-÷rL-“þÙt' FÆuL£¬ÏZ®*ŠÝúf5£J—�Dn0—ÏôëIRh®ßGäSXô§ !½®hŠ‡3d‚ßPfWê¯ùPu~±†zÛ'`f„k¸vÁâÙ‡Ó¥db¸7
-7Æ[n“i÷á¶rÙ¨pY }T÷�¸ˆÊcè« Ú�åô�"ÛN¨¦¹e©æ€Ái0àO„â®#@3šXÈ±!4bœJIY~ÓÒŽSÀÄs9k1Žá<RQhi’ìÞ):ätMF…“£Él€ºz9´Ý£ˆ(?¾¡9EŸ“¬¨?«£Ÿó…«iÕÜ\Òô�ƒ¥~jll^7ê¬¹´Î²a3EÂX7�n¿¼mÿLA(_¹¼­°àrtoÄ5`:Ó:-È8íòß÷·%Sq@‹GÐès,Ì¹sç’gO
-e†a‰Ö�ß£$Ö§€�' oEQ•ïVžÕû~!ïÒ�÷,|ÉÅíÉsÿA¦ycM×Àáw�¥òû?´ð’0�NH™Ì?>qÂÑz¢ŽÉ•È0TL¯ÂUœvæcÅbö`b‹@eõ¢/ðV"íÈ‘3Fã¼Â?Ñ°žafóéNnå¬ ?b¤!ø^¨SdÓ¥"}ÐD²N˜¶©œ­ì%÷ÚÑ¤ù,]9íAkzý�_ÄDA0’�¦W «iBT¨Ø‰Ô	 ï1Y6÷ÃOZºÑŠg‚D6Øbâ{Åå™‡bi`-§0¾Óx}a5•ê(ËVr @F´VHÁp2§É“®bòÔ G£h°TM�bAâKÆ\u½ÎÒXjÕ¬­Ç6ˆé�B’˜Ìi¦ž*Z4DÁÆòqš—¶¨ˆûÐ›6•‹HR‰�~†òy0~‘Çå ÞxùšÏ¥’;Ç¸üêêrp¯,LÊ;Oûç$½PFv"gqSÏè å…#Íè3 BÛ³´•¼í­}Yæàt%D›†T�‹*z)é1µ\Â¢ó|^Q¾öë¥·oÚbê¡"�bO•n9§BåÔ�¤Tñã)’¼ãÈú†CˆÐQÜŒ~Çw»½ÒLã<³žkÖ(Ís/ü?<§Œ¥cIÂYQ´�³F–dÁp,Ò}¸Y7ÃXø,ã ÆÌŒq�*e£¯ªºáùç¢Ñ„¤óH+<°3ñnü¸P8+Þº\ÒßË[jã[††žÎ©™mLRAOiGÏþ\%à¹yädêžæE[ ù~Ä”ø/¢8ëQ¾¦æ/¸<)LjÁ�ç]36Ö÷£ïõs×Ëèr± ½`ˆB#Eœ¬î1fVãÙRÔ5sÙ'Oÿ}º¤~Êõ)hýË0æÿi0_ü9xªKº"àgúÒ•×Á’8†]Tà[.À‚A .‡»††Phò5ÞPcRáfW9jÕ­=c#T]Û¶-Ÿƒœç|iD^ìN%�Ør1¬j“ÔÎ·õÍÂÊm?;'¤)ã3ÜOÄ3%TÝ2m(¸ypžÏ}ømÛŸWß³ð-_ <(+cçôRAÂ¿ÏPñ³pIÞˆÜÍvA¨ufôa;�d°õç“ ðšëìë;NpvÜØ.ÔÐKÏIÀ}@-€UH;(ä²Ô©©`|…dÿF%µõ0B×Ü@±½šÒ³ÝóAvÏz‘÷8BøÏ©å-f&Ls pÔ�„ZScY†(†ƒ>ÆYö÷’>r”×GÓC/2srë¦M4?šCÖY$ š9øÚg,æ,ŒÁˆ@3`Ø¢“�{…‚ƒËKyã‹˜Šw"‘Ê�9[­Á÷
-�]§i¨".çå…n×”°'çtP¨6GAI Uù„s¡b¦–I8íÞ®d6¿R`íÕ‘Ö*d¦Qgý¶xJ€QàE–EHÇ¢ê†åÅ6ÄŸ>]*XÐjËŸ�F"!Óã½ÀWDd“«£n•ú\±FÞìéù!Üï:ñ¬B|ì‰9ð·vE
-–ÝÄ1íÓk ÎTpß‘¿r³J‰—x±î•H†Ò��”WÉ„‹ ¼–‘ xËÛÍ@ƒDÉ EÀ™ü7Íákp#9ñ*ˆ‘´ÂQÐd6ãæ´bžÙ™üÿÛÏ:�\�ns©1À]Eu]óDÅ²¨nøüçËh²¥¦
-ãDÛ'“úÍñdwq@£ÍSª*R>“ÚXPÕœ#èÈÞ½|ÝìwvVÄ5A|¿“Zy¹·ø�Áoäþ–ïñFÄ6ð~
-mÐÑØQÞŽü³åëgÆÿµ(
-=v�­QÔü©C/½V¸üâ+ž%II°*>š±$�/Èøt][ƒ
-0ÏØ9k/Öú,®ÄRQ	ã:�ú�vý¯”„9No¼ðÒu Z‘´õüÙ–Úä'pŸŸE¸UM©êH_³¥¯�[Ô8ÿBÄr¦U:ƒÁØ6škÑuãoQ¤/ø”]²©pú>é‰óó»t´:�ù«R£Xˆz–7¸ˆ+óœ–LäÖÛl¶6æ•ÁHäuI�ªX•ýÕP÷ÞxË¤6O|ãçÛµ‘‹˜ò¹�sEÿÈ@†IU:�2i�¥þñ¾L¾ð�£}Û+³ÛÂË€Õ’3@�L.Ï(¾¢ç Þ¥!IÍàvMé§P<ÿE°´±']}ø½<±�H)&˜¾‚Û]åBÝœX±øm¢YævY|´ØàÛ®v?=–V~èÑé¯Á³ŠR=Æ/ i3'úÓ=çhYÅå,ZKÆU5q#Îe²RýËCxRDÖ©;íûYUÐñôéí[_ïÙñÜÑEAWÏJY�£ÿ,´c�ÏÐËZrÈd¥ÌÒ	�/ñgxbNO	&ÒYCãªn” S#ºk ¦¹“{Êõ ŠÁØÌ8YÀxâ�în©ƒh�““sPd 1ˆ%KN‹¯Ãg^¶Õ^_M6Àõ1u,ò+!¡sŽk�îüh¼ØœGr`?N/C�_‰\¹•œ§ÆN¶}·My5`j6.¶A M¡Kf
-—9a?V¬óvƒIL"ŠìO(?wt) 7yLhuCCÄL,¨w;>©&LþÞí·Êw¹áa¥¨f—D‡ô¢ö8A|dEaoZD3v±žÆ&Z¼ÒáqÝê±‹ŸaRô5¨w†l<š¾þSŸr)ñ˜yàò™Ur\R�uI`ÊSRšf\hñ%'å
-Ž–;ÍˆâYzýÆM›8æø-^ºd]v+ßñ^Àÿ>óµ¯ÕœL§·t%'ö•Îþ'¯+Á<&SÞ'
-ýÑ‡%ªæy¸áT½ÖsL”ø¿ÁsÙ‡¿‹çm“Dþ×PV¿Ýõ«Gðó÷e‚ŒËuxÞý±ð§#MÏÞtgó6Œ 0[Ü.YÃ›&Ç™a³ Cd ÐGªÍuUÍ¸·ì\øÂ‡2Œ—F€¦¯ãis=<Ë/C®? ²'2JoôÚlPšÏ¯Æxà`6pœáZ¥šôÿm=DB*õÄtx/ó‹�ar«àâš×1)x	\³Î;c&q3½mß÷ýã{Ö|1p¬WûS�Úf†Í#ÈÀfÖ×ÔÔÄ½Û–nêõ¦b—µf2‹&ŸÕÁ(.:Š’´;$"�­¨Ó·�ÒéS³‹¦~L["ÒüEÜ=C•å^²Ùà¿3æj&[ësZ‡!„vAPì2å qÌ¶x&‘XRÊ0�œ<©bu‡Vdk­ÝÝõžz´›Å¥|©Qæ)á‹c€M«Õ4ÂÅîÄSMî”µŒ½h€”…ÕÂxh­ÄBË€›²'^È¡ËD'c¨```¢B91êÁ¤]¾—\È€¼™ë}Ëe2¹¥É¶¬¥!Ñ“‚[B­æÆ¨(ÀïDÀ’†ä‰|²ˆºS”¡mn·×Q “ëx¬Îš¥6hFÆ´£4æ#�MèÏEâdÙíÞÞÞ©¦&¢mO4¬Ïß�u‚>Òš=€&�ñ,‡2ôVJÑŒŒì#‡žÜ“l¿µ£²ÇÔ+,É.û.ƒ/…dÙ×»· «™l&¨#LB~n·9;´Y‹aûáªEKZø.`»îö»gºßo'NeGòJfCõÌ*—�»yÒ:pÌOU*ˆÀ|zßˆ?fS87Ãký|®äŠ%_²~S\Ð¨¡ÍAQüõ¼ùžÈÇq_^–B°6á/4ÝX
-ÊFh9p~ìIåK¿C®¿žå=êQö!Ã‹ÏàÔåÉëÑÙZ*]g»…-'âŠÈS§ÁËb5­C>J*ÍÌà[V³O€ØÿW@`<bõkl½�aªlZ}Mñ„Ž"ËŠb&?“V~C pä)ãôº$ÙQ+iÕ5¿¥ã™wžÚ7è÷g6/‘|™b&yí¢ÆôåÐªy¤ëLÓÕMßW5êVÖf¿\'gDJ¯�Ùe¹FP6¢Ô=®kd�å›šœœåºP+¢h¼Ž ·Þév4À$­ë)dÔ”Ÿ�F[¯î´1|ðC  ~Tožš¨Cú|¾´F„ºG$¶\V‘’£oï,êc_º‡P›î CQK¤J¯
-'	¡Ê¶ùŒ5_„Fpn7Ì¡Ê÷çÃkY`¼×Žðl®?GËÍ`™ÿCh;eßþû“'_ÝØ:‚Š.ÚfL¸•®ð<LMàÌ€‡P]­F}ã$ƒTâF¬Ú+ ÷Àz¢Ý[ÞiòŸ¯&‘TÛ
-ºCÕD$�.k!–]ºR4ÌåÃ5ÔÃÐg.kjì�ÇaXæ.B ÂçrAæ*'P›çÇTu�àÉZQ>êé7{Äps(^€DÒ	“ªöPõ±X6n¤¡ÂÍi¹tJvRÔ©Ž·„ãd�àQØ¨ ÆbÃÃ§X§³9tËAh	¦4Ä©�ñ†˜ªøÄç%\=PÄ „€_¦È›—64ÌïÆ5¥(Ù>"¤4QD|•�y:-é`šœlyC_Ã1Â�ˆætÈ4U`8àkM:_IêMù¾Tö!»slì·U÷;ÕÅQø}í”žSl¤ÌHg§yë­Á_Ù­üÊˆŽQn„ßßèSâ›6MPtV6"š¥ds]�Hÿ_!²¯ÝÌ£ºÑí?ß_/7×Ý!hìÇJ¢¸ûL	ß×Q›¯Þ× ‹r-„Çõ`*.ñíAÇûq±Öo~óFõì&/ DÂ¥yu¿_>q´ÝêV[ª±QÇ½-»À.¤»Qgî$¾õç�æ…;d‰@³éX¡`âÄó)æbÐÉ]‡äÿX¯ÀM�eKŒãÖÌÂ8Ë‚BãÑ\:z¦Ú]çr0ùùªÎÇ9§}7_È}Š£mqlƒ“*g	gFW,Bªë6ó÷¢Æ"‹]HýÌ£Iä8Ù‚`yQ®¸¢Î¿àjä0.À‰Ÿ“¸Æ}]£{v‡Pøj|\¯¤�“WÌbJWÌ©ç}Ûm„Š2ú»Ü;­¯ÀúQMUÎÎôæ™Ó‘g$–½Ùð•™-;Q2½(“%ªj<æêã°(|Â`�ãQ[õ•©3È‚¼ðÊÇ,ÙðÜµªžós"ûïùxú¥�ÏÍ<EŸÞ×Fá×ÆµÈŒ:k´7§úÉüšÞàæ³>üÅ¯ŽCÕÿð?¨TeÈÈ)Hç
-ùã”c"6‡(<`âû¶M-|Ó�ñ~¾ÿ£_År_èÕÍ�Isïˆz‡ìÆ;‘ÖÁE0¹k½áPêš‡çÇJjI56B!CJàxJ´4a'Ã*6ø[O	:Gø~^ÕÜL*”¼ç¤&šR2Td2‡~O9ÕMøEQÌÇ3‚	*B)/�ã ˜´g`®ôç)Û 'Ò ºvq©¸pèÐ!“´§Àx.kÎî¢^¬©£¬½;]¤¦Ùá‰äbð#¦eÉºQ¬*ö –\&ãžìÌäËy†J@</j�Q²|�±¾lxáéþA²9É¯¿îÎ{ZC_¨YAÀu€âÔ‡XÎšÅ³Â�OnÜ¡Ò¿á¶ÛÐÄ!F9!Ž¼ˆÊY‘5
-gÈËX’ðÕŽApÅ 	%m¼”Še£J¢	)«+“¸²µººšdËMÜÊ·ÉˆpOmGžÅäÂTÞÖ�Z|9ÿŒïñ—´ïÍRÄòžhd·\±~)(.‚tT349=ž(Özª" ³ña³9ë˜&‚Qx+‘„ìr·õ`|»XÖz(`5ø&ÄJŽõlÝú
-¤ëdôc&Ð@ê�ç×ûû²À3*/le÷ÙÎÍÏbMkUZWiÛ“pO4bß7ª¿Þå2°˜i¯�§¶Â…ôqDQ .¾Ç0´œ¢‚y<
-àmRÓÕ%zü&W<DgIÑ)ù¦¿DœAkÄ)-sE¶l²;ë!ÃŽärF"“‰×û‚ËF¬ÅrêFP÷¨ªšKxYÛIv!ÜÂx‘ÓŽ!øËØ¸‰s„èZO
-¦ð�¡2¾Â¨•¬	±\�½Míò«‡:•[;:Ê1—kØ’`µ×NÅ7Ü**áÕ8¬¡AªøåFJÿ½›ú§04Bà`¤a@xQ÷ð'ÏvA¢A„dÝ˜Qt�µÝdc¢~Ñ¾„UjÂíïhCÛké£p94çxö‹¸N²LŒ¼y¿Û§Oˆß¬†ÖšÉZJ•TroëÓäg${2Ü^ØŸ‡!ÐØ�!C6ZÙ¶�!1TõYÖ¿uUåËóä
-Ø{kÄ™�råkŒz"«¿QÈeîLü ­óó±˜�½Ú^WüâÕ({`ÓãŒ¯êàzhˆ˜(2¡v+fzLy„:WÀE0‰ë9" É¾e¡À°MØn$;1�#ßˆTÌ ¨¾	™Gy�¦ k2ÈsÁg{!ÐŸ„dª}¥…„£ë¯-Žûb"ÐøÁç‡¢³Ø‡FUl„V6�æ�d2á1“`N”!Ö9>% Iˆ{°/…I)6Q†�ë|Á²ê D®qÛüëf.¿d^'ö%ÛVZó,oUÉÐ¾�bž:&äs
-	%G€)î!Ð6Â}Õb<Á#^¶+PúŽ!ÝÕôFhÃ¤×[íy#‘û^¤ïè£Á ûw}ñþ�'îC³ÝâY$Ž_½ªœñôŸMæñ90¢¹l0cÿP¦ùÍ±Dë±d~Qw²T�>—õmm…šZ÷3öqûÎŠÿlêz.½4ÔgARÜ…ˆýª~Tùå*BÔE”mö<‡ˆª¨ðw[\ÐÇÊ•c’ýU	kÕ[0ÕmÈf‰Cs†¬3?~áŒE!œ˜&<*KíËëÆ,$hÔ"¸·•i_+¥Æ=4î}¥äZÍÔ +Q9ý§±ZûQh‚7á(ÛE…[²\;ð�ZEd÷ù •¯Í’›‘ñwµ(Rë|ÇM/]èÖ®doae �M<8¤«‰ûi¦½a�-ˆHŒÕb>žñò¶ÙaoÕ\”²º×$2©9,:À‚\‹¥½‚ØHNea@1J×ÏQiq.8�/f%ö
-e[hù�×5°ó��¿VlZ8/m¥×.Y¸t!’YâCKÞr>Xfw‡ü³ë öëÝEd¥[‚¥rÀðšªªHR‹=Ï¿XöQNà¿)åR-õê–Ð¹ÂªÀ§45ŒS—9³Iµ”• Üø» ½ Žg”_Â|	¨¬•À“·nî<7^@îÝûÙfwàÌÆñ˜‡)ûëIŸŒå‚£Ù¬ò˜Oñ—¢žÿÎðHïo‹Ùü›PþfŠ™ë*}cR
-è+¥&yâ¿%xªìó§z=g0ÿ9éeÀ•bÎÀ-ËöúT!µ@ÐãÐîú-N·3Ð‹ÐòFn&ð²UœÀ5E‹JÍØ‘nâ±´^/.6(½…R<` 3ŸZ££¸åÂ¸+&˜Ä¼(¾X0Qx‡Ös'‹Á	~G Å0)fÎ°Ê—-E»[øoéªö+Ì{²ª4MÕq1¦×ÅøŸ�vòìŒðµ•ÍóæÁ='8Eü.ÔC–4ˆ´Ë2Ø1}±K³-Ø=m†®Œ&tŒœ‹½ ˆ;AIê§¡JÀ=}|°ßÔÛµárÔ¦5”õ+ò,}öëo1à¿C©Ú×(ø’L›w /ýöb<ù—¶þþ³dQ!J0•aD>›C�"I ÖVx§�çæÐøA! t˜ÐÜ)Â.ÛŽ&Šõ})²(L¼R0…ýg’¹ùÑì)\�²qÊlø`Ëƒ°Zr7ÀÃü—6™ù§dûK$,åu~åó‘Œº£§F'ý¹sŽIŽË3öF Ø]šµ Mš)0ìJZ°f#ÃÙÏz©×€6‚ÜCŠu¸×SãÌ«³OÀ·zOVÕÿJä0UÐ_¨¹äuûp=KoÞÄ£BG3ø�‘¢�2B™Â£¥"YüÔ†ï\wÝ9÷U+ Â 1  ¯ÚÖÕZ[}Všgõ¾
-gÈ�}6bg°|Ñ=¤û¸ÉF-þt‰çGA+TÏPz�—øKÙç”ƒd±YÕÐ�cèn,ß¿,,c7‚9G+Ü¯ŠpÔ0*-!èµäü6”E>ÌÃ\“9RÒTgº¤Àíjõ!âW�éº"O¨DYpiè<¶õ€—Í…rQ>ÔÜ«·õZ‘æ.Â½X•vòê¼y"4ú&F/�FFÛlÔ0]VË¸VÌ^qM“Ç]Óº™l@±TµøýŒJåè\îµ�líûà¢¹å
-!ÅÂØIÜŒo¥Ò×‹´ùmœ?N¨ë¾P™±ìœ&ý™Ë!_8h­b2qX_ÉÖèD‚Ðîî!±Ôˆ’Q¾YïÓ?ªäüÝ&4;X±Vs`"hOºã±±—æ5îRÒÇfŸprT²Þ`ÍlÑá¸Y³L$bq‹+Ý6d¬%à‚|õç(D•ßßÏ×÷Ü¡ÙoLÀ{ç•‚ƒÆÛYkm2O¡¬UÙŒÄá‘ßÅZå…æ¦}¬F411Pw£Á0€qeÔdÉÌ¸e{Q1èþŽi>V��©Q¦M-È?à2âNm»­vöõHÅ1d‚ÄúŽÆ¸6ÍåÂMa>ž»Dûm\Ÿ§ðn0ÊCœÎA ¡i±Y’NŸ�l¦f"ßi²ÙšÚæpv¡½K°x@¡H·F]�Š»µˆãô,¸¼îï°i$ìpˆ)�¹€ l]ps$ ¬cÈ¢JÂ›g`×h±O›h¬šÚ·ã¹2·îKfÊkójø\�#]Æ±övÔ¤BDfÌ˜Ú¾(Ê9Ö¥¦IyRæ0Nma©­6˜·²Kœ!ù(„Yn.ÈQp//–i–(2(=a8S<šÏ?³Àn� <�Ïçd??z+ccF1~¨µä®qz‰…fÇ¬¥K]`Cø úü"¢ágXžÍä¹3Lýˆm—Ê²L¯¦ƒÃý~P„™&š¦§ñŒÿ	QJCå¬60 £¨é¨À‹t\Uñó1&/¾Î¨êÞhº�¹ñ‘¬Ówmr½r¶«ˆã$"¸IŽ„òö�¢úÂ¥7QññD¬ðÜžÇ¾iûÄ—^ÑJÙ—œ^±y8M-MÆ1M4QuÞŸB¯½uÒ‡ŒÀèIà¯MJ¦¿´Ö¬}%–Úà2Ð¿¬khÈý
-ëpâç›ÀíÛê#eâÉy‘ý„øI}ÖŠÀ`¥ØŠB�kýHz!Ú7þGîa�“°sE�ü‘f=^c¾ã€|€�ÇäÇ©ÃrQ®(ÅÅaQ³û‰\¦TÃò%qEãTJP‘Ž.ª2­ ýÏÛ!€/ŽçKz<ŸHîd�´´bÀ¶oÄØw�«ÖÏ“)¦†¢¹Zp€d>€
-£0<åã4Ê§ �¯³‡’X¬Žâð—D·ŒkæÎÍbŒÁûnóð8/{RÂË§Íb}ØÁ»MF0hë2Ì�k`½Ø°è>lä†mÜ0:û>	2fßÅ^SI_}ç�Xˆž†¥æOßú³±fdîµÀ½&Ë"}´ØÕeU*ƒ€}T ÉÎÊß}÷Ùî±ÊE‹K€½\­€Í™¿—áó§oÜÂZ¿ÙhØK¹’ŠÕW@@‚ÿôò_œñ=_(jæÎ±Üo±’ßðy”HGâ’qÐ*äv_6gBøÎhðïA€‹Ê9Õ’Íë=ùgá¹E@”l‹
-!¹ây™Ÿ²äàªÙÈz ¯Nk"ÊDL>*r´lÊ\'&ÇÚ¦&y¸`-ªt­ºjÈ²¾9ó ×)û)o8»k8õ3@6j–tá;R)/é¬ýFà}ï¤8EÙŸá4ÄZžXœ�ÿÞÝ P:<ÔIô–$üÃ4[†Ê;�ŠŸ9“7"ÁBhÔ1:ŸI• yUb³ªßÂ”ve//:{L¤©â}šòV¾Ákcûd(rÚw“o#ol-Y™fi¶:d³A¡’øò,3¼ )‘Ûl5)K¸™{GšÕÔJ—@Kø+p\ƒã•ê:þª¢aÜ³óŸQ�æÅ4ªLØ)æ» ÁþMó²e'Œ›³àñYî)ÕÒz¹�+è%²•ïGÛÜ€vv¨;Z‘çÔÎªÂ÷ýø+¥ß?|_)Óo"XDu'óO—Š¥DoØ7FöÅbB¶A­Ú·YCZVÚõgwVG´xK{`ÞqüF¶+g =¶?ä©y™Ÿ�»h©½d]¶aÃ†_ggzŽ]‡JD��kÁ"wµ‹fžqpÖ«ªC[àì	nn­)goå�DìmÁß!ÝüÌWpQù!Ä k™5‚ioÌc1ˆy>„4çŠÅ¢øÌ3ð�¶S™Lv¿ä±/@`nüÏ§w�žÉ-k˜utÿñÃY+´¢Ü7ô±<m%o¦µMd±„å1õUh"ýù hµyü“¤<S�Ò(x0ze$~ôQ}å˜qT;IìyS	¯Xq2_ÊÊu® ˜$�+kŠzZ7¹ÿð×/ç�NÉ¥»Žé’š12@E°‘Ãp™€D•×©Ñ$übiÜGƒA0kN6<r%’ÉœÈ¯j(ÿP"	!œÂwBí®FFh©ßF�ÝÜ¼¨Œó>Óe±®ÔØx~	|?Ñ�ttŒ`¯)+´|„?Ñ?˜Ÿ ‚Õ‡�…:ÛßÛ„qÚd•NÔ]‚bÛw˜TÃ¸4Ïoˆû$FE*²Nçw—ŸcÒÈìzrpò¾çW«YÞS¯¶nííU5 n9aB™)v�Ör±J¦PÙo)6ý$ÄÌ—æ]ô Ã¨îõxQgfaäW’ÅÇ:Zƒ$m°Òè=±ìlžÁŒË5Ô­‡#òEv+¨–€ùä~“5à‹æ°ÊN¯�'Àö{>É�ç>’~uk¼aÍš€ªI�Ã½±ÙùM—¢Ï’²OW,y5¬Þ¹†nÅàÌ(
-y™×4¶˜Í–
-;æ„“ð[
-i!/'¼¬MUÎK^L¡—§Â^§5Ez5U·Â]²'”OÀ�JÌy­e™Ë¥òl¸†*\qcÎ¹78Ý/.59p#hòÉ– �ûÍþÓ�Úªà…ÖŽ¼zêè™»–-'úVPQ<…’2C`nF�ê.Þ¤¿Ð“ÙÖ¨ý%4þ&UÑ6¶U¹ÏâôéLñN˜pÿ #£°w|¼¯:à{Y°¬mp�¤¡aÄ5UÙ6¿ÊC =  ž^ïèF”—È"süàãÿ¾ó¶Ûn#0²s"òŽ œ×ÜšB4ôMº6
-œON‰lƒi(³mŒCËgc]—ÌªÂ¦®w×P|™Áð¿ãXƒI±/&KÅ[¯j�û8Xcã˜–¤’ÞsÒŸ8Y	Þá™ñ¢öìç'Y½ž?;2—ãå 0cÁ
-"íq+7È‡@×„dÌº‡S#=ßC±Ë²öNOÞ¾VÑËpÎ�_þÑ«ÝÝ)âÊ9çâþç?Ð^2ÄÏ½qã&îØ±-åêÈÓNKoÆsÛ„?âuŠJCG�=Á¬AEå1Y
-ª@ÕPõ	‘Žjij�œvŒw}Í˜Å¹©é™|ä™ïÍ|ÒÐ¬zÞÆmÝúÐw#¸ù§¾'åþîKß€28€ŒÑ5pÿühiHêÃ•qÃóóÏ|Aµ« �DÌ‰ ú9Ä T“n=é»ƒ<Ïm�B�½e~¾2ìx×›ñ>}ùžWòÀ\‹«›ÁÎ¿(Ë²Ñ”‘eý†MúÄK:vB¢Aî–o	’Šk	ú¡®£±ìOQ” )À�ðÍÅìÖ­Á)óvòžX…£ÎÞ3/¼p¶cÒÜ¤z½Ð}(ë]8ú£ð¡}6í®]½u ×Š4—YÛúãót�¾	>^·À19#›+g(qƒƒ‰¢iÄÐ(‰úÔ<uÛý9ïËYËùH�žÙòZ&Òy2Àzò¡Àé‹ÂÞÁ0€mš&dAö£NÂ…Þ!x‰àqsæå8ï7‹ij6wá%~¦F¼Ö!W·!¢/0‹W·»Ò”'L×ŠçzÆèÄ”ÆR¹f!9|Pé‘‘l0rÿf4+%“q–àm­ªb|6ð½šÒý9Õ‡Ót|]„«úÅŒ¦Ù³÷²:>b@÷âø˜h4êžáv1¥‚V4ç»"èW€SÆ&f³EYŸgEîoûò:9§i‰'a(FÑ¬nZ»¦û;ÛF,”Ó/YT{ÄÀÌ{°ØçåÐDfºhnPe³{í©Ñ)­·r¤l)y.óà€{ÖZéç„•�3ä÷Áÿ8µÆÙç­{�ÁRÈ³%–Îk,!=/o“ÝWÓƒ¨ýßÀby¸h˜;`±B lJÀ ®`ªu|×ådÿíƒµOA�4Á±ÈÑyP:Võ'LÔw,,•>þ¾–Ç%Ao�1õv”ÎkMŽ;Å
-a	\±¢®xø�J›êÎœNî£«]¢;Ÿ&È:Œé?¬-éëão[qI+4á)?:yæ\ 8VL1Âïû¾¸ˆÏÂT@ À)jwjüqóL¿6squu”è}Ý2ó?Ê¨Ö=ªªÿ ¥xO›ÀDÒ¼D–Ë²íÈ‰$ö“F]¸w¿ØÝúŸÙê=ßß�ˆ:ºÃäèÏ ñ%;ãú+�b?ˆZZë(A¸“N Ÿ8!\ì>ÛpßÞàõV7Å#éKô\>”×˜WT¥ð¨¡«ÏSMáIBö‰‹%uÈïè HÙx¢e–¬Riö?PNæ(ôN¼w˜¬õ€—³þé…÷2wÈ®>‡`Òïè�š‘.ke‘ÚZ�È°U Òòz)j*›f¡HLQ)IRF}}}‰|³àxêÏyè•.¼ë+ñEeÜÁ¿¼Ì]mš ÁÝÏ¸í0}¢0wæ¬ENƒåï@-6wžc ÝÀ	¶L éílF�h‚ÀÐAãà/•Eý4Ü¬[ÑK�QÒ#6ÜˆÒ;ŸG¶Üqø³öòbÕ'-rÀ×û¬†ÞÛeÛº“¹ÖùW]»ÌW« ÇyEèžªü `jæß�Žf¾)ÉÜ×,Ý|¡+
-…l3�’‘s¾6p(oé|T!¤E¬Ao¹/DÀ’çRéÙ–X#Ïu÷Us—×Ê–25ßæ5M€î¾89ðâ÷ý£dÁš¾Ù¯ly€1,Q_»ÊZŸ¢úòdA¢Ö}º™7ŒÒD°?�ÔÛc¸B¡”¹€PÍŠ‹å>¤Jt×ó§3Yíû¢©Ý)èæ]Š®}ZíÝyS½3žSÜæpD°üOM^­¤z-ž>ŒqÊ�w£¼S¿“sŸï�ŒK2F‰vgëî¦“MMð\&ÏoHÎ)áÛN&HS‹?J:%MËézfç´@éŸò~ðÞMT #È¹ò¥9,}g#–.›J©”Or3,ªœ/)Ùâ¿‚¶~Üï/;
-ç8j%LÓÎï˜cï<âŸö›?ø�ýgÝªõòU(ÕF ã!Ì†ÃWÍ �y@Ñ¬¯c€ØShêšÔd€Èê2
-ïì<¬lw±¢pÖ§(Aþ¨(³——b±snÐ‡>ù%Wm ¶¾srÿé} Á ¾�s¿	€Å¤\	Êƒ«ì»jˆ»˜/iúåðáŒ¼"­F£”>Jë¥�K/Å#FÓ<Ÿì‘;ìÃñÇ"9˜:Ñy¢ÅÂ7M°ÁSƒszÞþ¾>X;¥“nÁÃîà(<ÜÌ˜6
-œ±•Ç*®‹²ÝxYk!Õ¹0ÞWÒÁ¼dK´$<WokäÜ>{hÉŽ¾±Fb"úý~V3D]ÔDÉ+Š‹Ct]¶¬;pÏS€’ïŠb6ec>/PÂÌxFP® FÙ<Ü‹hUE&}
-—ò­“[·Æï]³†ÙùÄ/cëf…"…ÞÞd>EÙz$×•}ÔeAD‚-1-w ®=«g¢àT–÷EÒMÌÜ‹.nòVw¼Ü[œš¸ÙµÐå÷\ÞŽvê´AÇ²‚ÿ¥‹ÃÒ °÷ÞK[$Ábçx®mËîÝSÚ¹ìý}é} Ú†¦ƒlãFPÖtâ™ŸÔë¬€,j”þÐóÏ8â«!»øŸe=ûÀúões˜’ÉqRQclpøÄþR)þ²§Ö³‹ï9v´äsî/ÇH`4çÁ­ƒ2÷ÖÐ7þAÏ—œã|lgU[ÛŒye˜Z¥d%cˆ¤o“4i¼ÖÁ³{9’lcf-º1šÓ,s‰HçæwNƒ™é1 w@ù NæÎ>²ÈÿÉ­£$¨uŽ¥f=3ŒDÞaaV:e…4¥~Ãä™�ÖhÄn+Y:‹/ó¦Pö Ë] Õheûóéõ=ß\hWH�`2lARó¨$ØÆÎï<[K¯n¾` …µäHOCJ»ô¼ôôhÃâËŸ§ÝÌF}ÿ=&h©�sàø�R0€4¶)í¶|“d±•×ô9ôP”­Ž€¾¬H2 Âð™ªD5�¿Rï�FÎÂJ”•X¶F?ä&J´ëC¥OI‚ù´wÈÝ³Z3Êìø ô®µ1(,«›�¹¥p”˜Yä<°KÞPæqv9 ˆšÞ®ÛV|±»—Ô0\àÀXêÀæ‡ïú¯Ì0"ŸïO^¡›º÷)Ë¤2°Õ<Ë9g ¯”á�¼ÖV:˜V/+q¡ùÅ@lTQP�†:‚@Ê”_�ä WûÅ°%ùšÕ¾Û);öù"‘ûgîÝ{uéÒQC 6¡1b!žJæý }îÅûQDÊƒ4ÌS³Žé´–F5ãtgw÷c3kk_äyÑ“ «8 aãÇ^x!M¬ˆ³‘|ÈZ¸´áH<›}u.ñÐz¶êÅ´sj°ol
-ar2�årcH¼TÑÍ‘ÐÒV‚yhöÏ~ÚùÆ¿ÜŠÄ ”æˆ�ÁÙDs$mrgŽŸLÝÖî+k,Äï¶c0Ñ dÊ5Àù®u‡çü%nû^ü•Ïóe˜Ò�é_àÞ_'HþO*ý±W?538öð¾‘HÕ�4ƒ��ôì„E�Œ«s4àç^Ð¢˜ìLˆ¶†Geßæ8ˆøSôP¦ Ì^dçLë¶«Ú–ý#¶Bé#'‰z!Ýi?``QÞ	¦@š÷Å¼FŸþ8�æ?¬j¥9�eÚ·^tˆ2¤ú•k]c,çÒŒøøª€Ãe-ºÖAq!`�Ökqõ6(-A©ã-åÂÏzPö%QMÄÉ/ G`ÅÕ÷Çéét»�^X*0'0ŸÁsbïyvÇ�ÈwÝ×¦iZŠ’ê¡T­a,.B²'‰Yº§|2gsã®*ñ�,ÅL¹�Þõ@ïÃ—ïYøV—Rc	ÎsÖØVÖf=•ÈmùÄÒ–âÖ Ëh6_0Í1ÛP³AÜ«Í«×»5Cm†°XeªÊ‚–>“3½{�N1°.Ç±“*OÝÝÒ€­,éCC‰ÜóÛ·o?ikk“K%þZ'ø:ýÁ¦�R±�L2¯ÊÕþmÌPÂ½’ÍÁ=êã•X PØ9`U’ãJ.ê * þôÉ‹B cÄ÷$aBðHA$\0•�gS…{$�†ËãÀ�_¹�¨+-�ßºáö/o9‘¥zâ¹¤}ÿÁ7ÆïšÌÆšê,Þ ¹ã”>È_Ú	÷‚Æ”;¡QŒßƒL”"2–‹‰Rñ¬3�Dº ÈØö¤­ÄË·´5–ýÜDS	W ké£�-vÐUú¡1ß¬¨Ò±}«V=Ù�wb<ÝvaA»yë'Ç–ò#�§ ß�ÛãÚ&f5àºñ»I8j7#8¼¼½½€µÁDGYrüS¶@§Io îHàq
-í0M	O>ùÃÆÚào™ÖLXÖ®áL’J¾…Ì;¿jê'áÒ9ECZ×ø|eó°ïH_hÆŒ\"Qˆ@ÓUWWOPMÍ”nlû /sŸ„9¸©¢(6ÍmÄÂpl:‡n¦8ö¦‹	íÎú:¨õ«€àX½Ý²žè@ÿ§ú‚	ˆÏåFÜŒjÜŠ,ä�"`;¨mB³Q`y„êV*Æ6òØA&Ü6:ÿå«£0¹é âXüdÎMün˜uc¾<yØÿ•/ð]�I4ÿ¹<g †f¤ì” X˜üÀaŒgExK�-OãV1y¨JrÛ5øÂII&”A£†VN‹gÜ»û…ô=«®BzŸQO¥âNØfìO¦ÊŸ¬)*É€ª�wØüñd¦Â ÷®çÏd2*ã‘^€‡íªXŠ’‰!;¥¿„»¢
-o‡7ba‡åxõ¦ˆI÷®Çx¿¾|ÏÂ·Qî¾¾èÃ¬ÃN�mßV¬øf	¦r¾PýD*7Ô¿±ÃSÖ,‰©ãUîÍÌ§$±Ã´Üv…@ŽZ¢g «[y;r3ˆÓ½®Ái¥[�¤™Z>_Âï&j“1¨n|Ãs-ª¡ÄY�ïsòÜ)#W<Ë=}àÊö”Dk«�b»Ýâê�ˆÔÄb?*Àû×ÑêÉWï‘ƒuy!ÌnÌ[Ûf…âä7ä&‡¹²k "°Á¥Ñ”Wò¯AU­^Ø¶ì~t±¼¯<8,(ÖV¸IÇ^;¹·©ÑáÎj¶™™¢úb�¤Ÿ+Ê;U³{Ë–BxÃ†ƒj‰ïv64ðò@Ÿv#•¾‰UóE\	8((Ö¾«›¥è7³"óyJz:áÎè€Üœ<§r8¢ûÇz÷ºP5_wÂáh”ìˆ»ôÒK!»¡Ý—‰�ºøÝC!�mÈþ³ŽÞã±Øí¼Ó×²@Y³ùyMÎ´ûwL4Bí§Zúç$†™ƒ¨ØœÁü-ç¢ûÆ†yÝÀbQW¬(BÐ‡»ºØ­ÃÅÚ\:ôÀj…å¹åÀ“úA(\€”÷Â'þa90ãØþÈ¦É‰O°©ÛGR�AûíÀÅ-�¾¥Ø“ÛN5;¢“×{ÎK¾h}€Å/! 'C{�'\lU–,QcÌ:h?ó!fl2Gƒ.*Ã„êŠ§YèÀ«¡ £ÍG�-a‡P’ ­œçþÕÐûö‚fSDÒÊP9¤!·,öÈô ¶,°ÎYRÜ“c¨h1·Âø?5õ]¸:PÍ¢s‚xä¢ÿéŠ+œÃE­ ŽítÉôÞ;ø§º)¨{½WøËÌ‚–îO î´Hü§éºÛm·´…Êý¬ôeæÌ™J×xÆIñ@*	‚ÓÉ3^àÍ jI9Yˆl‘kœo‚—ôë=_r�ŽÆà80</@¨c€Fø3;�—íÞ¼Å¬”ñÐŽ'NÐMžãÈ"X¦6`ó–"Dÿ“§J•rßä˜µµÎFP]„ê¤§pë%8c_›&'ÚKFAa·†Ú0¬ú‹UÃZ
-�Îq Äå!†Šý%ƒë3„LoN¨=µ+’îud¢Ã+››³UTÈ(Šø�—Ì˜ãD\µ ˜ÔHr d…ß*¥B³ÆkàjY	UáAd£žõ”…ÌxX‰¥‰À˜8ÒÄ¿ë	þså\0+RêI:ù}[z¸oEs;ˆV&¹^'4Jbj—ÍqÊã9G¥@~þÅÈŽ�íðŸ‘¦ýRÎÆ¨T©¾ªrÜmòxúï7ÿÐÝO�“çeføªgiž�>¯q.;wéº‡”¨?còÃ+KÝÉ$\Â’%ÔÌó¦å9œHù
-…x„pk 0IK7 �…ûRº$�†ÂžŽ‹üã òyœaÎ—-2mà(à áz“b³ÇW¸ Ä‘F/idr¬ùèm>ª¦©E¦µëÀÓõ´ÞmdAÝ6”ÿ	öý„Á¥(6÷u(ÌõH½ÝØÞ•9Mµ‡§4[ðct¢üÑnä__%0ô%«vÀçþl�Í&ÐH”Ÿœ«¹Ý`·ÿ(ð*,O°šö[ä6ÇJœeÓ&„Šµ6$ À%³Öb­aÁª+JqCà
-¤¤¦idáÎàà7Pj|†Mžxäàÿ›@£ªÉêÈ:ž¨7Áb6Ì–´(Ê\5Ìrb�¿(ý¾ˆÊŽØsànr)F.Ê3‚_º›§©ëÍê?Äe÷ÂÚ£_¿ýîv E\:€DX¸šÖ`ã·Êxû“Ü�ŽZßHg”zBD‰È„mhúÅÑjÖV†Æ‹òõë  @ IDAT?=½DÖŽçš�¥r‰À3ƒ0 	éª@èóÒÏ;½ïDÉúc4Ëáó¹÷FóóNf,?™ˆä §ººèöO!ü‚Vä3�ÉPý;^7¿BšÍÐ>¾ƒMæ“Ï¶‡ß"£.GÛ9*È‰X ™VZS8¬xK®çi¦^Ñé­ßw�¥ôœ©Û±š÷ÀÊkðýB‹]�àÒ­ð|Ââ!Kg¾!;<“¢™¤•¶"Øì@àÏ­Ö� ]/RRIÔ{ªEGs1Q‘j�|¥Ã ž9C£&ÀsŸô;ý5ÐÜÞõþX�}ðÐ‰
-®tê€o{C]Y@~‚r†ºAi;*�ã”èâ¯�,rÑ‡k�IvÓM_y+U4‡PjÌÅ`6kEþìzøÒ;ÀŠøAŽ1—s~�ž×7 RãÕ–©^…ev9Gs‹�¨qMÜí®GâÒÊ—L,‹^|i0Vã²×¬4YÇ'ö|ò“U¸Vü§_’lAÖT¼7�–!Õ.�ï§·5Ÿ¾£IvÛoq÷}pG|¾ÖO)Í„O+|ÏÞãÊ	×~»Àÿg%iÖˆ¥p7„ë¤Y¤•ã¬mò¢t½ù¢Hn1\(O÷¯e[›-0¯	ÌZA\dÛ¡S§œHÊ˜‹)#Ôw­þ­…zïîñ¤¯ÓÆä~k­‡V½§¨'!Œú²È(ä<ud2_Ž8,˜¾Ø«°v/ñý¥ÐèÛûÎv•¯³Ò�ÿm¯<çˆ )2nhÚ÷sóm#©üÛ0“sÂ ¿ÄYÜ¯ûN]ÝàN=±~Œ6¸})˜ézI1fÁ(gÈb+k4˜Þ¬ŒYb @ÒþÜèè;žõÿÔý!B–¤7C)bO�zHM
-¤@èÎ¡dkç>Œ„™¯¼8>nûù‘<~J¤éŸk%ó!Nb¾…;ê*.xûvçÛg´l”>õG´YÈ_‰J®ž%Ë§~ðÏöÂå+T§ÆI—…4+=ÃãÈÀ§)æ9¡Y`Å°Û@I“Ïè…”¯±~¨†˜“mˆv{í6ž˜�h6Ùå}s¾@¡0LU5Jì|Ùœžßdñú«N)ð¯ä¶c¼d ¤ûÎ%™€ àa‹"p‹že£®ÛÎA>å’Ç'Wò£9Ínx4é,˜£ÁQa “éã»òy7(ª¸õÕ™±’6”‘«‘6Û�þ±"eþ
-ô1¹ -¾Þ!Lim•¾W^áŽùOµ‚s-pM -´ù›V¦"´ÍÜs4%^Á IgÅ®ƒ;¶Å¯X¼X(¨ËQhîP[AÉ�ê‰GÎ6z<:x“é‘ŒµUÄb£Ût~Pá­&É’�k¬–3âÃÈ‚r`;A�B}FÐÌ˜Ã7]-¥H_‰öŸÈ
-Õ†Çß&ÜGUŠú"¤ktA>ý…“G»q3¥fô¼Éw@B5aŽ¢Úˆ¾í^yŒð;a³ëlÊ™„¾QÙ?ù÷,yŠL˜£…×ÞtJýW76��HÿÎ·ò,“yŽYi^�÷„“oÎ©y«”Ðpš)!këÿ’÷àq•gÚðéezÑ¨÷bÙ’{ÁØ,cÀ˜8HLB	%!&K€„”MûXÛ›¾ÉR€4‚½@¨¦,÷Þd[n’¬Þf4½�þßïØ²!ßî•¾ÿ\àI3§¼ç=Ïû”û¹ï8Š(­S¥
-EÍµqÔ”¤¦Çú"C;§ƒRÒdü|XÉÜ"0|DI^ê•S•¸§�*èréõy6µÊi‹tÄ“Nd!öŸ:æ�‡LÎ_pêD8¾Ã#q~™ö¼ÞŠÅß·´}u>õÑÜ¢é]£y;¯èë/®ðöUìj#Æ«Î¿ ¿BëMNêê?º_ïQ"wfãX´-úv¤l Ãü5f;qSÂ.1(Œö©’\ŠBx@Ð2'+Üîäª`h%qLiÍ'|v»×o/,ã)uŸkM†¾ õÙxF}èÜ\á‘ÇŸN<­^¦¶”ž¨¼
-óÐŸ”õËÂ®ñŸû°½?oÆ·GÕçFR*º<ÜŽbÞ„žAUt•@�¶–Ó˜“�?$'òæPðàîP)½m¾3áX-C¨ä4ÕÌ^„–c“µõ`A›š4ôCöŒÕò|ëŽ¡&³¾xb>8J?GÚEQ~ìòo¤X¦”b·-ù9§4L©ò~p)£aƒªƒwü=JÏþÅJ=`¾ªFÃ<b*­è™íÕgŽUí•�hMË|”U"{ûmYA‘<³ŒØä¡ØÚ¾p6N	|ø*¯Ëñ¤³~íDKg½ß}ìÙ"¢	“õ¹¡Cik¶,±ß@ô|Îí*ØÜãa¥c$n¶£�½îïÅHÌä»Ëë¢Ç‚#Ð©µ|‡á” 'ZÎæ?üìÇQ’;Äà1›mäR»Øý¶ƒ(L¤cŒisümüðÀ)¾ ¿SÂk¢80 îŠ¾ld¤£­0/Œü0‡¾è‚éT–7n8ý^ìû
-„š%@jØ¡íÔ|Ž7Êm¶”rõÛšZ)`‹ *¢Uñlˆåä¥v7Wðê‰Cmy@˜i&Õ�uHÑ@5	e÷‘ls¥GÊE8_«-Er”q)5KÐ\hÙ˜·žxà?Bäo$ÏOK:T¸«1p»A�IYG¬åö¥ý/þ5H>·ûäD'r²òö£l<>¨€OãžÝÑÁ…ôýÔCYbm­Hq†ŠföjZmâá‚­éÅçcË/ž›Jyðó.~5Øëƒƒ}]ËÊFséÿÈ-ý_ý¹?7§Vû‡`@s‹>ñ"W|ã;³‘ûžƒ”O�lâtQ©¶·AåíñÜ}cÜ £vÅïG–ºí$¾!6Æ&Óm
-šP@2ðØN<$éUÀ>þøãTùÌ9Ÿ‡Náç’º:´œÓ�Nœ‡¨n“¦hOcþÅA¨vI;ÇŸNHÓ—é4{;.¹‹vB´
-,ªOçÉ|ÏøÏ}ØÞŸ—öbr“¦Þ’UÀÝÅè;=,í(òöù†(IÅŸB.�_vÄ¾È
-œGM%^\6æ¨l¿ièÎ5H;Œy‘{†S—;ìDK×^“=[	ôkGòÓèaÿµ¢S#€ÂÜøÚñ]Ï%þØÚþ:ø=¿ƒ6õ¥$÷3š´€¯¾ßýXAÆGÂŸY2©‚ä�s['¨ÃÚ::DYs™¼S¼uÿÙ„=˜Á—o�—ð3—Ã	ê@½=\à=ÖôNÁëôÎù—Œ…³~–§ È™*ƒÎ&Â˜�~,c+ë£xŠjæð$kÀ’yó1EÉþN½O’øoƒˆk.`i°®Xqeý«lc¯ãæV¬Rw«™Ðß° �•&!§²w/Å£	…’±ãŽ?EE±7“GsF-È`— c)â~�0i0”E5Äl˜ìuˆÄŒ¦ÜJ·ù_lj"œÌƒ§]zí<|¾QI;Š\ .l6"=÷9”D0(j*_kgè¿â˜�HR5åSÑ�wŒbñ{f[_äÛ4ÃÞJ2ð\Ó?ÇŸ“ £dx$wMã·¨”âšjºõ"šdš«Y:ö‡xor%
-§äZv§¦ªºþ0*Ju°Ðo¢¼‹zr#À=FX^Q4Þ‡®¿ozÖÝ¯üÒÛ:.ON‹F+³
-}È„x°0¬}Êï8¾òŒÑ"ûÿek&pšù+–£+@Ï©!ÿ›@»=9ÆfGŒ…]Ÿ®é?MfGÖ,öèu#mÈ]wûWÊSv= E´ŽKjC˜Lï9ŸF¿s¾^·ö%nÕ)í®¬Á<>—A V‚©s5/››³YîS(N¹¢Ä»büsu4˜þ<Í™‹ õÙ~ïæô±B;okz÷óq¾Îó|ìç¼Ü<••Ž´É98Öpi-IÅ{)7°fy´ÄWVûTR$Aˆ3p%Q”Ü³Ét¯Är›LŽßÒQD)³Î\ÉËµN¯ÌH-�šžêX»6‘²8µRà¨MÓ¨Y}áÒêiOìîw‡M.U€L{”ÊzhNž¯…_–ÑŒeEEé­Á]-¢n¡¸ohÜV‰4feuuö`$² ²ó3U‰{R‹Ãj†¾ŽwzÜöÇyÎ7·Çq©‘q»8ë­§qfÔV¯A'ó! �›ñÇÜ¤Þr¨Û+ç{nB}qHÕóQ•þ�F§÷2W…ÖÇïbuËÚŽb†¿®Æ?–\ŽëX“¹ žIä7Ï|j¿¥Ù«)ÞºTï…*8<Ï:ð™H÷ß{ýžÀØúDw¾[·&š·`ÈËAIiuÊ„ÓzžÖÑ%‡„1ò®·¢ðw‘ÈòvÑIÑÍø®Ýé.„WÄ¾ÉCXŽ\!pmô3Ð[kËdÈýÓ ±Ð€	>lÔÆ^ÀßïE¾=ßdùÑšLø"F  Ÿg€ b£4ê¦Ô­ð€ë8ì�� ÐvõÂ'`´_÷ðÆà¶TÊ xß¬‹¤¢^‚µF½ÖšqÓäH¿4<
-',e°*ÀT%t8_ÎÐNr[bÕÊ\›nnXˆG¸?˜œ�ñ†cJ1FŸæùpècÆ'÷ÁÿþÉ:w%¼±ïQƒK¯GDE((2££zö÷™dŸµYÎô
-Z;vÅcý@Pa­ŒRÃ:ø¼WÃáÍ”ÏG0!ïûÆ‹ÔvëC:Ýœ¥�WÛBéû‰¬B•`N^�y²ïÜ“��¶·t=Ù¦2| �š6²�_ÐHo>ÜÛy9Á8íõÊ"› _hï`@/®›!Ån/‰àX¤ŽÀxºÝoIÜ¯xBô«ÐëGÂ?ŠEŸ_( ù^äÌiuç`¦¨…™¯“Ø§Õà¨×Äp¾ÃF6¶ÞÎuÈíÞ,Šà‘¤¬=ð´;t™ÓDÝ…y*á)�RÚ‹ Î/ÿ,k³¡„Èjíqx…þwÝ]æ²À-ÁþŽ)55ÁÃÊð³ºe»MüñfôÝ7½““~×—Çý"kÐóyÎºü›‚½ñÝµ¥®ÜC­ù½¨>]Ò—Iðn[“¦ÒÓTPBÎ52¥xâ¢3îœû—€½t²vy;ÈM~cQÚŸð¸€lÖRÔ([ärÑ¡ ™B1«ÛÀrCŒ;ðßyKBy®„Îÿôú.Á‚²9sB$4@æÀÄ[ÆÎdÆx1RíM’ÝÔdžÎ&ÖJ:wˆó·
-‹-û=Š‡9x`ýò‘IÃÊ?f©‘ýæ l§O€xÉ›‡Í¿ Ké:Ö�å®�Ä#¯¾ÜÑ±ao"¡.†Ö˜N¹§¢`†DªMæ-Dºì\8ž'UÓˆkÙ‘ûÃ™Lª‘r	m`Ÿëqduó…Ù5kÅŠŽ’Îê&ºÇ-°¾Që²�»”åMèPù<t=Ú`SŠÍGá²%éH¬:>ÌRg`Œð˜˜}Ã1pÝÀ¥ŽfÆ|»ý=²ÓWôÑý—ðE4wº_áÝ‘ÝÙ4]#0–a”˜gOv` /m«‰‰åÑB»9§…ßC£Ï¹bUÏ4b=ëÅì(öét%~EÐ¿[ÇÀßÎË–>¼·Ãª�V+ÛÝËîÝ.[ìZ”¡A»É,CG¨å¸çÇ{½ä ñ-A®´îK8½Ûvšm8×ï`O^?÷³çå$ÏÓNÎòÿÑ}B²$wKÒ (Y�L*$ô–%·O%˜ÓéTZ[—[.—ÖÕzÃ¢Õ54+þ'Š ûÐ†|´Âd¶MýÁ†£qËÇi	`Ãá»ª”…™luFæÌv¡�JÐõkø,o yFz OÍmð„VÁkû>€Ÿ�wMØd^D{3èrs^ ˜RÔK°j
-0Øûm–ç]¡úéÝCQgfÚ¼…Óöt+UªÆ6",îÑÌ!”±bàè¹ü½W–W[YoRt};Ë[î]ÇþÕø…¥${5“ù=Ò!¯£ÐÑ`³èO$(ß�³gëTgËF´·`’M@.üä<§±L2sa‰¯/®JŸe.q:å…Áº,8/¨zvÇÒ…æß;‹Ó¿'H
-!À^ä¥ß°XãA\ÿ-àÃQ{ìï�aLrŒ�ñ¦?îÆ¼¾³—x÷/¢%øH°{ç, Èž*‚ÅŒ‚Ca=o÷÷0À5´òEÆ\xRÀÈ÷¶Â}Î¬‚ò^!¼Ì¯ûK'\zQù¬UÎs3°¶·Ô
-F¶û�D}>£«k ¬ô�Ê×þÅUUC@5ævÎpyù¹IUJƒB÷²™aÈÝ†·úÑÕø»Œ]�uÑ÷g±¯9ìÂ] Ž¸“Ñ•ozø[Lš æÂà�~É¨ÍŸ8á�ö¡üß´¶ñ@‡èƒ‘– ºÌ2µ$‰ÇæØÿ}D?œ%ª$­B¢›Ö`ª�<£gÊá MËtÏÉÛ%òJ\	½ |ËöpO8§Ò¢Y7hœþ-ÇŒÅöÑï�W´_§9QÔ@Ù
-ž®Èœ±}ŽÿÜù~�œ¾ØÏD`}¿áøãº¤?ÅF~þÿ@›äËý‘ž³ò½äørIu9ŠÉÀyù"¢ ´{¼"7C@õ9çtþiãKpÝÐœ1Å¶ÌXkoi©š™8zRtæ°®'Ò63¬èY‚”Ïp¦p£MËdÒŠº™r{Ö´lX›¾û�9±1™J.¢x¡œ­MlÍèl¢¡\ž�\ f‹ïj;AÀû5•ùBæ×ñ?4²è^(YöÀ¨´ ¤z„ÊÄ+ò†ÉwÀë;ø¿Å@,„è´ù†·Ú;–[&Ç&>†Þ‹g7ë¦�¯š÷qõnŠ?ƒvÙ7x+CöƒCÿÏ6û�ÿ °Àß…2ÇN­n¢ýôMË	ßHUQ/$îžKkéÿ Êã ò¼ŸíH%/Ý‡YÊH%à?ë˜®ëŠ*Ù7^~ôQtLS§Sü(Ê}
-a|5è×f³ÖÏ/*Ë#ÕÞÿöœ¿+/Çd¼ò:UÈ‘ÆÑýõÓx*ó=¤}~[Û
-òb33S"»dÏÜ÷Jü2-Öº¶\4Bo,*
-ó<},Dý@¥bc)9Œ|8ÒÄÌe•S*q.gà&<»¬i>¡˜Ö1D7"¡$bÑ?“eóW"m®†Ñ‡ä÷d<m¼¢©Ú·i;óïÝ öLŠ©"¹	¿lY“AT‚îßcXÔ¶/=ÓUhf"ÛRõ—;{l(Ý×—²w†ƒ6sQ‘û@\É{]S¬‡àñ¬�dÕþƒÙÚ*¬›%I¾Ò)åOlZµŠ.Ž¯±_OeÞY0·�!�Çu|$7�Í?­¢bR^ÌîŸ�y²Ì9cF.$wOxJ¸ÚHe¾UV=µ©ôB�‘+|Ã‘Æ+ë§](Ò2´–¢=×Í2^|aì>ò<ÑM
-0|…Æ)ø¼ï^ï;ƒo4)³[`„Û$)*C OccÇÌ=ë�"¡w>wú�È!’c©�}´ö6¢²¬³èžÜn÷?mßÎ=ÖùüùŸ^æÌ™Ã÷ÒbuÆÈÚÞ¶^‹µP·!µ¨¢hÅ„<O¶´|:ôUbWò<{
-~–­/¦ye—°(N´�PÞµ'’<À*Ôõ&ƒÎSïa-sP/ô$ð§1#C ZŽ’zŽš¦ËxÃ.øÖ§¢qÐIp�óÁ
-ÊÓÞXbðÚ‰%¤r››,àª­‚®VøÖëº7—›<3‚¤ –Ç[³¦R#ÑÝ¯ûÀÙ.F6’UTõ�@©o[-å3ÖÄ£p44”ÇRTjKU~�©3»{!¡„c•´¹	¹Ôk�:±+I¶�:¼ýÕyè[ug0ýÓÒœ÷nhÖ•@ÖeHËw³¼ù;�vÏóøcÀ\æ®{ 6ÜYeüœrqšÚËô]2ÅM bccBüÆe‚*ÙY¯Ý![œ¬©*�Ln/¼ˆäÛ]Áº%^�îÛ<šf7÷e†ÿkymm�àk/¿+ù"†È	9Ež¾Ù¢^¥ô 	ÕfÕ×C²,ðÂ¡dïþææ‘7¢¹c¥¹zõƒ±E_¼ï¤p&#ê˜ôu Êù9ép¼QK<‡§F~Ž0ñ+Hö—¢€š¸ 'ÖŠ&Ï{©ôs—L,HâPäSM+›ÈKnKÄh¯Z@´Ì©�Ähüæ‹®\J„|€ˆ”úç]ê¿tÅWjÑ\à¦E9b£D'Õú‚•”/¾µ#ò <(Ú©Úø°fÊ~èí%šïº.`Yš‰(â­Œ]îÖkIª¹ùÒÿãèæôY~8þÅ%ÒFbóÂr|½Œ5�nVá.™U7™ëRø¦É|
- y�À+)téòÀ¢`YË8™ª}†Ä!]óÎÆKBÐB§’AiÑ¨¹M8Xt�eÅFÉþÊ0M ÄO
-NwŠ†Ç¸)óßÂŽ¼s–§ßEtz5õ*ŒÅ�IgS[.sìË„ðÜÏ~˜~þ§�ï	¡ à0UV‚¨Äˆaa�¬¶¬«g@¥Ø
-‰|ÅàoT‚Ri/RÝ.¯Üh@£G„Èè`œZß}¢rQþ[¬eGíLÏO
-'��ö×Ã-CvÑëž…bÐ%‚ÏY�®3FQÒ}hª<Tâ­å”­ãX¹#¾¼ÐqÖC”é½-ÔçíO„BTts:9&1äEž¢+yú¼ñ!»ÒŠAÅ°žçÜ\+Ã<êìg®ókÂ�È'ÞësPÇ¯N&ÿ ² R€z×6 $E›Ág@róË3ŸéÇÝå•Ó:a¼.GXÕ™Þ0$çíƒ¡½Ð?ªÃ›}Ü6X ÃÚJ�ŠFÅm²ìR�ãój3Úp›ˆ¡÷žmìÉ9Ü…ù²§Ž³	“y¢@­Y.È<£jÚk[©Må…�­j:¶„HhÃTPJžRýß1¨¿âé[€Q™�6ÿ†ôøeÕžÆÖ×�™„…r¶nOŸÁOÞvµq÷ß[iþ­3ú‚“¥nqrÌt
-|Êð~ŸÃŸŽáÿ±çç«¿,©Ïà?ˆºØ%ðv‘†RVvZñÔ†)µcÄF¹±¥ÐU×PÁ¬Œpòy¯Xj¦HIªO,	cß¹�›·»F&"O|+"�À\ûh¤§DZ‹Jw ­'º¡ÕÐvî®ô’/ÌJ*�ƒJæXK$µ¿/–È«¥ê(�FU
->é
-ÆÔ¹ÊÜž?ºÿˆß�Œy‚Æ ‰Íj)oÙèÕ¨Šf7F‚wˆf*ƒ¹¨ ƒçAKëFÈ Ì,ë”(©	âöŽÞÀhGÈžW•æQÉ‡>¸m”RüË×ßâtýûˆÖêq µjh»�¤Fþtî™Dí*š:÷ÅÞd‚áÝÂsD\Gˆþe1Õ?´øŸvËýpŸ]A€#@ ¡ª@:³Þž”7t±Í6DÈ\~¸ûÍèfvàÆOfLfŽ©[K¡#µ3Qîó*KçAbœ–‚Ö¹^QËny¹¨(—Ÿ%©W‘ŒvSþ‡˜÷Vôq(Ë^¥Š» ]ôSïøþG/©‹FAó>nƒD||¾ÇÓÃKªµ£s‹ò¹óË‘+¾9Ø'�?r&{+çä¾Ë²ü—tÅ¬�kkÏ2âãv"ÿõpæÎàN ã.¥F$ç·¹+T´o$9	è‹²›7Ç)N{(5düj¾�¢9£Bˆ+ÜÓ/,rÀ³U‡?hQa´µ ÞõK-‘y“MðY‡#f×ËÊª¢ "·QòeÎY³<$l‚!Ã¹�-Täòˆ‚D‰»l:îc)ñ,J_ÅCwÆçÞ¢ƒçàÖÂü´ÿB?�D{ò_AÖ¶gõ¼Ò1¦gó›À@SÏ` ¤Í”AÇys:¯"�x¾FRéåü©”n[ŒÙðäM79ÈqÉö‰JO7R!k3#÷¯Þ¤ôO‚.2@h÷€îtøJ�&Þb÷ÆtÊøYgâß4»ïß{Ú½84–Èë�Ý‹ÚâŠI¬ßsÓ†ÎÁ
-ì�&°'½Äs„¥bxÏòtvööúP±ý<¶±ƒ"¨`VÝÅNDñõ&‰âSÛ‡òVbÌRjŠªrÈf¹Mš	”‡|¸'†þSmÅõ}žÎ ¿'B„\ë‡}#÷J1S‡DƒÉ·LåT&ËwgŒä[ðzs÷™æè~È)©­;Eé×#í¯èRür\«€f¹bÚHd²¢r—îÙ»wÌÈnÎfuŠ085jöðÁï¤$Þï1!<RCEHÎW’ù ¢ÃCˆFÿF±Ô'HôyîñÑ*�º…Q(K�‰ÙŒ�¾[ÔM‰ŸÓ
-Ïýì‡éçºÉâhwVEeP3…(È’\.ÜIºŒšN:‹¦+,(…m"w½xpÒ(Pï³BÌÛ‹à…a„ˆ©kX ¥w¶	Aòæ´ŽLoË^9g|³U…à
-ù!`™õÀ¡¶#L:,*°¦&(h¤3éZx‘³’½ýÓwýäT�ï¿/�&ÒsQù/DEá¿Ç.p§3!AÚa2„só�zfK�tº9€œã�¥ &É@K‹î2v
-÷$§Û½ï{w'Ï¼p‚,H·¡÷ÍL()(ëO<½�uIwQZzrk`´¯BÁJa±UyW	µÌË®B_söø¡,[V6Mã´z€2&Ã“c€Ãâ3#éSô½“ö çA¶6ä©A¥w¹J[ÿ†TÂ%°Ð›‘÷Þ�óœ™.Ì‚Œ˜ÎõµW/¬+©ïKD#Û,»¹•ýÜ˜’ý466ZÁh|(iÑWÀh�Æ-„Ql9å–�	ùÎp¦71HóŒ‚²Ul¯
-ØS«Èqo»CÉ!“e¯AêÁ�1,�±×<þ/:¥CÅg@Œj¯¬L*qe*%*û^Í½Ñô—àU”xùP˜j¯uq‘J|ŸÌ£ÜÑÆýs"k.)æNÐBnZâYEÕßdxz?¼·^ñLà“(]LÊ±ö#ƒr
-…²ìàU%¥hªÝ5ùdU^Æo'ÚÂ²èn´©=­èp;k±wÈýÛˆÊ8Pˆ�.Šb�
-”Ïùþœtn±úƒç„¨º<ˆ¦î‡º4«Ù&zw›…b«‘‰ ,Ÿ·€¢h™sV>WìÌ©©�hxh˜¿ 
-M(YŽµEJ�üÿ¨Îp¾«-’òª”9Ý4�gMuê!5ÀöKn=õ<éºœ°ÏÇ©Yõ§¼À^`²à ¡è‹àU.0dá¹|p½Œÿì‡éý?íù.žèw—:Teh—Ô�}{~ii–ÜÑ‹Ì_\$²ÎÏI6áóð\kPèÐy$�Ò�Z"ŸÙ
-þÚëîýz£Ê›v–cÃÛr ^Õ)W{Çrˆélv>>:ÑÒ:Ø¥û¢†~_rdø^…Õ¾„|Ö�tÃØ„î¬|†åo±ž÷w6²Ržë“¿Úö.M3÷ÉV2	æ§Mš¦ü<+šÿ
-2�ß¦Äþ¨&½³ä$�”LyžUcú/M]Cµ¦ÅþªÆ9“EFú:ŽqPùèF»žç7¡D¾ÏÌ'©	Ýü#eŠ
-�50ÓÜ ÑÆBQ46îÈß]�B¦¾½#Pù£¥*ØµtÒHŸÄ8žX[HHEÆŸFî}oOlŠÎrßÄ…Í‰e³- ú&åá¿Žü0´oc¢¾ÇòXáhC°Éšë£â—ÕÇ5$	f÷­c}~â9“�uìÈïr`-ŒnÞ¯:Ó·P�Á¼&xNaG~¹àLÆTŸhäØÞr'€TŠ†�ïrMGV�Èq÷ Ì·P£™‚óèÿ›W²� pW…B‘†"ÞÍy|æžWûBuøZîÂÇÏ%rÕBcˆÕ
-8ïýX�~Ÿ3Ï„"Úm6Ï*à´ï†ú— ƒ1‡»e0s�tŽZZæXBST�cÄ^^æ…Ë€¶q@žƒEVÖûhCÍÔtÂ‡á:jš"Lº ùÞ±çz ëhÑÕ³Šníz³Àº­Ò½¢€J5ßžQU7?£ƒðº,‹
-ñèí"ÞgF³ºAo§Ó�çhlŸ£Ÿy?_b}Ý¨èBíœ*éé~Ì†Räð;#ßuÖ¡÷¯]ú:æ¢áW(CMŒcè­¢"ÝùáÝÎÇ€æäLH¨HˆsÖ€Ý¬|ÁÇ¦7÷D&ïQ‹�çð@šPøa�Màâþ3 º-µ£ä�Mò±Ópão¶ÉÒµlŠ ƒÑË&O £m,¤Y~~°t•ùS_¸÷à²Rß’É5½üñ¼#TâIxÁßÄR¸vjŽ[”ŠPÔ›DéŠú’g[†ªÎU3ÈNZºû¥©°íá7ó
-¼+Žz†P€T—:b§sÒ2ãïœEºðæÖúâ†®ý	�YEŽ]|î·t]mÂ³”ú5¤0¶À[\lªæí F/´˜6‡qÛ#üŸ²j®›áñÄVœiˆ˜ëó% %~Ø0´°’È®×nŸ�n:¬"ÉGÎ�ËdˆJY7Â¡œ‚k/+õ[1ß¾åbùOL¯ŒfŠÜ©”òÝ$Ã­ê~ùé’ö9s9o�·6—íŠª±�äÑÉß¡7÷,Z7<IDlÆÅÐ¸´È‡Û«he0¤mõÈÎãîáƒ�ô¥@0TÂ`F =;ÔÉ+PN]Í±™?\>ßñ÷{?Ð6èÂLpA¸ô� |ì@ÃÅõ‚ôå­ý¡	¢ÙÊÂyñýÜ<Ý°adf" ×›;t½‡,&ËACº'gy©Ø•þ´à{èŽftFM”(ÅÛ�ÑB	Ð•:PFP]ÕàùÒ¤áHFUq:sÜÛñÑ†šÑ¬ÜÇf‡F1§�;²ÛB9î¾ÜâEÈ�$ÉýãÖWÚ[Ifü½p)Y`ßAñ	nfäböEºFçJîc6‘;'Ã�Â—Éñ_}ßß;ôÀ®�¸
-mÙ¤H+½
-üõÒñ¡*b7ÆŸ ŠöÈ8Y[Cic7²ÙøÝ†l ÜÙ³±ñßù0¼WþäŸ=©B°›™–úe@ÐÌµã!¨Ö5ã˜Á¨[˜´˜4r¯ìÖþáaå¥þ~Ü³%�?Œ†‚ËÑžTƒQÕ¤4O/Rz§7äuðpƒ£”Ž·64äBQüÑ¢šH^«H‡wt²ð’%›Ð±³ÌGNŒøØÍÔª^‘ŒúÆŠÆ>–h½ž:Ù÷pÎÀ�rÜî”Â<#NQ3Ú‹¾¤'5züs^Å#ëžÎ¼ú“¿4h¡†1Í�‰‚ðk#™zn0“)r�$m‚\ŒÞ…ó�B_ÚY½uè�Z¿ÈéÔÝrž˜SyšÈ}Ü~­‘a-ÆØ�ÍUå‡¨ª|#§
-ì¢
-JüÈ-·Œ¢	n_¼Ø«Úy½0ô�Ä³�Èï�¥šà±®®	tä´0™çl’Ç%dS©
-S£®P"ùÔóøž“lýŒ¿I<óe<Œž¡n—B¡fLà~üy]tªŒÛ&Èå"«Ñ7Í„¡ñgRÏ[OKtk[ªÍO¶  #<vûÆ}“¢u�vÅÛÑfAÛìbwògHAýµLbÙû±H-·ñ2Z•‰´½m|³í„oèkS_L7h¥¬„e}4½zÄËãŠ¶ªùžÂ1Ì€ŽŽéê«iœÝm·T‘Ê�GÀpÆøE§ðµyHïx�5Žæ@Ìê#¼}ÊÜ«.ûØ,DdpêEÔTb˜ãn‘ÌS²0ÍÂJO6’â#¼¸SÊE¾;UÊDßÏ2Š–FÍ¦}ï¬¢ì²Ü§NÿƒVAU¤‡EK\fÝ:–Zºô]i q?ïoƒ‘�]vÉ_ÏqÌtð³ ŸmH6ñäú£½?ÂÁÆjÄ·FSóPU\*Óæa�jyà•	<Ý~ÞOê<îð¼_–eÓvnWFQžJÐ~jƒLÏ†ói»A‘I��\>µA…„·7kÜ…4T  at“¼¥G!Uÿw6ðú#`78óòÅÃ±tË`vhÚóg,„FäS"4¼°(–AD$¤L¢ïŒá&mæÍwë"Z`�¯w	Éæ§Ol¼qÂ„³BèÑ#1”@þ´Ù(õì…ç}–÷¶3v©*U*rRõô¥×&Y³•ÏÃ®B_lcRæüË«¨à^Ê¿OLþ9èïs<{o²ogÔÔ8ìÜúéRôo,FM]\ëÈM&x£èO‘ò‹ýÂ¬É]m¨Ùò‚Ši÷Â›oYŽ‡	eAò£^‡,†Ëû¼æ¶¾°šæ"ÂÔ#ØÚjâÜ�™ ¨L&cÍF>;f	õ‘î.ÉY²Aí¤MQóÖï�„.kjŠmë‹>ƒ|9ÐÕ4ËÎO(ÜåP›~©cãÙ›àñ�žìÆµ¿I_¶â¾gA·‘�Ü®´Ók"F?©
-eî+w0ºŸíÄÿcÇÅ{ LÂ.ŸÃ· yÙ¥@ÖI2J§4}JÓ/�°Îì²"êpËPdµÇ‘¿NWÍƒðìÿ›:utq ƒÚ…Üå,ëê|kà¾o·�hZ&íôùQ`Å<_y5eha>u!s]Ïž¦=�NZËÜ÷óKÝ¢K¨ê1¬fqè|ÝÁÝ€ïW’3ühn«Ag¡ÊŒÃ¾ØåSš'·ÿ]ól][2pÉŠ/•#G_›I3y5y~Ô‚©gÛ“ñÁ�•u6nSÚöÂÊ”ieë*¦\dÇŸ>Pä Áô¾5]Ž6ñ"Ý¤—Àá�pùNCvLÃ¹¼=zªd~%Rø[�B[¥pÒÀ€hþ6æpt�~æÃøúOÜÎ½¨f�=Ã§cGT^'¨½ª¢oGÅõÂSŽ$rLÀ�ìo—»¥ìŽL†½Ôq¨÷ « o;�7Í]áji°rÜäéKªˆL©ËâÏCˆä5ì¢tó´¹Rw4âîÊÐ‹.‘Xêø»ÝF:ýä•^gÎxw�§Wþ	úZŸÀÌòp–¤}r°k¨18+Ä"×¡…ú‡†JÚB+n<Õ&1¼tŠþ˜Às·á:>k°l£`1[RJx?®%‚}W�FÕŽxêèñ‘¡L!/(–�¯ê0:Ýžbº3çÔå“ââYÆˆst#â”	Å(•¼âB4Š¬Àµ|ÜSÀ¿PiYjHQöv0=Ú£ë6ïE`GAø.bŠªaQi¡e&�NdË<²Tæ•¼Ù^eÚËoºïÞ@8ÆKûÚ*Š‹µ2ŸO½ìÐžŸÛ_ÈÂdJ¦ûÿôÀ�#™â@ÈmóT#Ï6M`€FsùŒH÷;D¾ÑÉ°»¢'	�%9_â�¶$Ãí¥‘@ûôR1Ù‰|àæ¸,ò)wŠæï°ñFY{p¤íÁîvåãgŠ#$÷î.(^Fóì*8*%ðÚ!Oçá~^ˆlÇ,AMµïtË§5“‘uö/cG]­–x·}l\Ê£;•Œår%r¶K�¾ EÓi‚]®§4}¼KYÊ¸êAU(Xþ%›
-¬'Å×U«À4Ç.:Dçu–Sê¥Á'Î‰y ×TëPE/×|™=å‚šiÖ.¨iÅÇú=|¨rÜóCîÙ[§†Pæ½M¢Å¯À¹	Ïâ¥x.F»ûbt‡Í”y[äH*ÖUã@çõ™IdÉ.ÌÁ�f~ïFšþ/sxô{ÿì+qšÀJ'‘‚kW$³”||Ú›Ñ¤…ÔµY	ì2Sç’÷�?N,�ÆK)šV×Ia{%.‘�¸o°wðÃzoÏ«ÙøA ïI»£A»Ë�.ø,Ø³š}þ];Ûè@eÁr<8=%¸©é4#IÐ{‘‡
-%_}<6pjAy91žc†
-ý„.c0¾Ú[Ÿ„ŠáG^_/R©Ã`Ë1‰ê¡iÃW¾/S®ßOEA�œÇºžá0ª]e™ÒËšLEýÉ„ŸòÙÄ¼Bß	ac“Œ|öïm$¿´{(qNó‹�;ÛÎt[åhù·™`ÃÚÙ¯�6ÂCÇ7šýÝÈîç9Ù/|J&£þM+÷µ7�Kœ{]{]¾@OåM7?Ž<ò|ø©H�ÒC(šÅÐZ;!|„Ö�›Ö—ûŽ®ÄCµm0þ1†b~lÒæ$J™Ô/ÒH(È‰¢õ^HãûJ²Ûš1õgc
-õ6`b¹…i×@l¶)èžxŸ¾ýŠ3Ò,[£M€£=H !¸©õ^ý&Ècö‰;JKIÊæ¬�à¥íNgñ`\,˜ƒ—Ð‘djêÝèšÚì-�^\är�Ïdë@¤Ü.pkÒèŠàxs5çNÐN£èbé«q[M5~+-ûl”®ýð¹?ÇÓÏÌ“±c®]Û*,¨XõÝ{àÝ–¢Ê�û~:	ˆÔ68Àx�ƒ:c|uÓ#%…#òexønw1w½ÀSÑÆ}3“Ò×§ífT•¤"÷cçF:cü½i¹´æi¸ÈÆ”¹]Ü‹äèKj¿
-É¯aA7ÑÆÃƒ‚Û›B„Á‚º‘„¦Åò_îÙ(ƒ�îtºŸ¡7D.Bôy"­«¥¿ó%¢Pó~	‰�l;×’éSjJ»Øð%€lìEd€2-Oæº¦ÏƒãÏ£$ëYÚQ½ �Zh§&Á´°ºïåg“ûŠ {ÿùÃûóžv Ù/pþ·�øü°ve£	¥°*/a¼B(Þ®›[T9¾kÁšÈj(NZð7÷BšNìéÿBS©88?qJ$ÍàZk€~À£mBÚxœy/¾öðêÌ¨ ä`Š*°sH~°ñ:ëéìÖ»ÕŒÏXRønÃKT2.+š,_TŸ—óPÉ„%môË€Nøà¤½‚.ý>	% åJöRþZ³»ÔÕQ1¹Ò_ÂHÝÍÒ[T&ùƒn3½é••ï™f }ÇÈˆ3š6òköiàîý¦ûB‰cÁuCO+Ú¢ÀlJÅ"a·7o9.p	/ñ®…§Of¸ïä_IÝo�—¾žj)Ðvix’M8ôdICéŒ�t˜Üð[c¢@1s}‚þ]\×säºvZZWK]8õt(I�ª< ÷�#£aÀ3ÅƒË„FßÄiì+]j6EÒçn›7röXK³ÅëJ»šù>*–[Ð2WªõG…ÑÜ¯ÀÒ³qZð`~˜°ÒÍMÕÞè/O¥¼Áôå5bì0´·üpËÎ£Skg®lÑzo{ÊÌåËÔ'ZZþVæ)êBÏúå÷É5 `3–– ÿ  }O/®ö_tÆð’sæÊ!0Ä°� 5Ê”±„v°<¦@g�æèjk£ Nÿ(oÄáñ»òJ²š2IÕ…TÜ&-êM\SjBñôÙš7cA„P3»†6²›3<Ûã—ä¸’Lðx.+9ûm©Ÿu×Ÿ<@Q§åšðpZynÆîH+˜7HÎ·Q`Ù£´u˜%Bj8ðhý˜ÎÕ¦f¶A ÷MÌÁum}¥KkKzGï™`‰ôyÝ�Y<DÈúÒœD‡S9“[Æ�Àçþÿa|”èHDŽ0uúêA~Ãàáâ‰3CÑLè½02pÄsbÐ›çe³/ƒõêtY`tHO¿Ïi5<Ý+ÃáL…Ù€¼ä¬hõ—dL&Wv½ÜûÆKÝ£žÎéoª<DÖu‡ä¼Š²´×
-J+»@Hóž+÷Mg{#´qéö‘‘-º&ªSòªê@¸r$PèpZš6Q7ôÁd,š\ÜPÆ¹DWRn“Àä&äÙ]
-�F�éGÇÕp‘>¾W�÷ÝówZ	tj[¨NËòóœwàsóEžÉÃV-ëWZÒx-c†z£•õéë‹=æž��Ç ùæ`¤¿ãš‚‰0ŒE*ØÈÇþ¼G°l] ¤E=iEÓ¢n_–ø7¦�ºÆ¹!x	s(ïžáŸ¸c3xÏÒ³[/ËºÜ¨¯!tÏÚ‹îM(S¾5èVW¹+q1å7²09|ÅÅ<o³´°$’àÚùTêM‡Sœ
->‡B‡Èm5 ?þ»ú²1XÐàaæLÞÈäT°vŸ)zÚwÇ¡`²Â3v{0¨½ÔäBÁÐ•óXÏž	9—n[Ü°í…ìçó’H¿À$’rÊ¦U:ì¥§¸È¢wvZ)ˆåÚG÷àþ„t†éãÑ¿lqt £f3Ô>÷8µŸóœ�"ÕP‹@Çø¬GdFtU¿21+¤òÝz2ŽR”[~*8¨ßwôäÅ©#k�ÅË—›«!ÑË©®2o¬Éñq�ÜîX±9ö�do'}pze9¿dœ¾¾ó�øgf6…,N(µóú«…=H‰æ)à1mY�³ñœ:ÊAê ?½O†�¯75HðÌt–Š	”á‚ßq?Í©�lZûrˆˆÑ�~h^ßÏ—ôTïêK†„ÍƒfFé4D¶Q~“æ÷PŠraïèxyE ñXŠœoü¼½›ºÂHÈ%2v_’ŠvfGÃÎ•Ä;§(ZQw0�À>NÃ-bLRMe�¹úÁÕÉ+WŽ=pÄ“½°z
- ·¤-•Õ¬Îdíé®ŸÕhËE‘B#F}ô<âc„�xoH­2†�›?¢Pß“C‰n*Ï­èLož·rmÎðž~°Y/=7¥*YÊÜŒò×ït-³ÎõÜóä£Ç‘,A°öÐæ.BH¯š*Äÿ,æ@*’Þfk(8y5åÏyääèG¯Y¹2²œòäïè~ˆÚ‡·Á½|Fà3–. FÀÑ²®RÅ�M‰w¨´y	e°_C*¡)�Æš€`Œ¦stŒÁÔ³iEæÏ¬¥¼ÓÙ£örg"ÞÚÊÄ×1g�™¼m¨oú]¥ÓA±0–ˆ¯ÍsIÑˆ¡^Xèwº¡œJ‡O:&T÷7¡ wõèÎñ
-!Ë~´„«€.‰Œ¼ÞÜ™è<12bÔøÊ|‡”�ñNi©btq+à�»?dW„ègÓ@¢f ¹XàØ‰‚ ¾“Š²nG�¢¦�¹Œ¼ÐÐ±—âË§,›ä{¹møHÖr×=6\R’õPH�$J­X*f8,ø8Æ–Ñ�Ô^##	Îí±ŸRŒxÏ3;Ìäµ9Á`�æW¯vÓWÜí ôƒÂTà¶v¼öZ„ð©P°¸dC›¹…|¼iú¦ãy Üñ$/ŒR•þñøqç${Q=_à—¥‹ŠÞ³P}¾ÇjÎo]âE=›5l.,äÅž”ÙšªsÜ'`ê qRŽtÜn’u¶Ä´Õ“fŒuFw×V¨•¡PÈ¦0âS-oôõázÏ*žŸïóýG÷÷¾ä|	½�YV÷-V�è9ŽFˆ(m%ý™ßU:þ¡Ú4¾Bføß aÃï‡�—êF&¡JYËè´Q\ŸÉÓ�zSÓ`9K'ÕÁìxf#â…ÕM˜ƒªWÛóÿgˆÜòàZŽ~%ú�ûÔ€Ú¨¦Ì>>¡´G"áJb*ˆsFÌ
-ÿÉ&	2x›¡Ô ¹í/ ÿ£
-9R0þkÏP.Ï#|âÑ¡Û>öéÕ€±ÜÁÆgÓYã7•NoogtÈ#J¶û‘òp¥3é¯�8¸‘åhÄÀ®Æ:Ùï¹)<1u³?'Ð¤ežMAö{ â‡«IãWW×ç%È÷H(™ælU;?üòÏ�hçîsÜÏ$ñ�;xç4,ú¡�möÉ¥ù¿Y
-ykØÔõz‰ûù¦3×=ú]’“5Ò™R&Ï~Tß¿?�¢šŽ±µ•zKkƒÓ·Öù�cæ_v¶•r~×Oì³Y©=©ŒâV5¡Â$QC�H×•wá±6v¢À#x]Ò�VÜÒ»fÍcg_¸HOê3­ÕkÑ�÷"äÁc–¦/€ é-Óx¸Üow�‚Ä‘ UF’q¾£,¿“ì�<ho¿w><|4Â@M3Ý�/QÖ„­Æ†N&¤ÚÆ£ïÚp�<À£×ö^¯ûRKâ\úàoš›ƒÿÝgßëû¶ßµƒ DnÄPô ïß	Ž4Ô“nC-ñÖ©S²ì]�§ñ�Hä?WíõÄ:£�cð`úmH²—¡~ðo¨¡2™ÌÒþM®�`õ1ô“IFyôh´Ô³…Ü‹âÚ}y¯Mp$ÌÛšš²„ûÃï,&lz<'ÛÓsˆçŒ^¯luÌòž¦=mFT%öÆ]óJ]£u	r52¼¾]ºatüÞÏ7[1K’�dP0¨æ,gÈ–iO%RÙVä IH8¶ñ�œ%íHÏ¥ X1ê'Èÿá±¢˜( Tý¼âßÁèt·l«èÚÖex!ÎÂ ÏÌ¯ÎË2æýQÕúÑ²eË¶#�ÁÿW{¬üØ`{–wxÚYÌ(Hië™„š„U´¶¨É™€žýï �‡r�¾YŒÃ–.Ëf�žyÄ¼¾ÀÎÐ#+Vh›ÃOB†àÌÇe�rö§ã{%Q®BY«eŠ‡Ê«Š/ýÂpˆQƒìüÓµ¾z«×DÓ²Á
-Èa· Ú'?e—­`8�CggÜå0¦ÿžHS¯Í»ö‹OcÐˆq×F&§Ä4;J£¸Æ\¸Žïã-ˆÑý(Â9"¤"“Aƒm&†Ð#÷·ñ;úÅ–õ}wÍ™3|‰»8ÛŒ‰¼6qra•I³×¥8+>ëÄ@QKˆòûÀF¯u³œh 
-Ö„N¢)4¯ÿ,aÓN-¯('�âã¶O«ª2ù¿|òh9×¿7”þ)Ò?ßåx~/B�.‹,øS¬M
-eüfÝ£ŸÎ×JË£†v-';ä	#™?€\²ÿŠåŸÅ�õmtI^Bî(Ûá«h˜€[€öÙ<Õ¢omZá\þeœ�½ë:ÉÂÜÒõH.nˆÆ\¾œð�@5ù�(ßûÈmXø�Œ(¼É¨“@’Rë&†—\ÛÕ5ÂLÌ{5«ëw2SÒ“é’my
-jlv�©”£Ãmž@3õŠi>rßÉ Çé 6S¨pì”é±“fªw�çû5P+–Í3šr=Z.Úëä¸ŽF�—úÉÒùÅ#1kÈ¦ž!çÐDœ‰w/ÕŽTKJUðº#'ÄR¡AÒö~�ï?²ß÷Åø2ÙWVŸ?U°”Nf?‡ŠüÞ0–¸{gÝ@x/5HSöÀ]}xOTé­<¾0lE"¼J”�*5�‚0
-ÙÀ@¡5F[R¿lR�ŒÄw “Z�ÜrèôÂ/Ïše\ÓÙiï0”OôØfwŽDb�&t3³ªs†K3Ö†@×À$C¤Ý–¤6¾ZÙ› öÚŽêûBV§¯ÑË†;i*xÃ1ß	º!óC4�Ü�nº	(�•X,u
-EŒÿô2ž-µg/ÉçV_v™#•É¸¼Ýh˜gA…î“G�Ë›LW××ç&xâ»—;"Ïj–q5O3aµ™¯îŠyCC]�™Œ‘¼0îÔ…x˜
-¤"y#n0¢þ³Çïå�[�70›¡ÄWã¯¬m~ý	+‰‘yÞ�ÇV0í¿�Œ§@>bµÐìzÈ³nvúÃåË¹Žþp o{ÅÚÆJ3¨×œ…,„e¦Ë.K…XÂ+k}	è¹=!ph|aÒmñ$¸ëd¾¸õHËQª©)gø± 
-y®ü¥¨ÞÍ·è¬ó+sš~‚4Ðá…••oÉvFyF1 ˆÑF¡D3Äß†òý9ÊÊCÝ1¯"QÓ�¾.�¡>&Zü\t(j³�hž½0¼“­6e  @ IDAT¼ŸÈ†¹!%2é€ÁICº^~äÅÝºT‚KXƒZ ¯}Í{Uæ÷twr}îÚ¸• ˜ém¸îÄ£ÃqÞ—·›:JÆXp¨‚@¹œuãg6²ào=ú£Mkð]cr¢Ã‚ž1
-2
--äPn²vó<ÿäò¼ÓXòU“â!Ö�žê.rõ?´¯…*=}G÷ûA½î}ùÑìÅ·ÞûFŠ2g{œR6ëÓ†µ(¢›qÝkÞká45~*1¦mÓ²èy
-çÛÿA�óÿä8çÝøÒ·~á¾ë0£ËPóiUE³‡£­4Ï›½™p :_ïœ1›zc!ÑbÉÊÆÚ<·;5ÜÙ‰\ºÃk©\!ðšµÀ¸N0,¶�²2°Wà´[Ð!Cåv‚N4�AÙÍ4Ö'3êðÊ‡yMK†¥ì´³LM6�.&-½¦�;Ñt&ÌÎf‚[$ÖûuÅH&ÅN•¤|žãæ"‡ã¹Þ¤üL¥ƒ­ÐEþ!XúÛhSìØqjø¥LÇèþÈòúwœ¦;@ÑI�¦”ç
-;$¿¼°²1¯ø’%•ªBÍhç4PS#‘‹[¯÷eûbonÎ°ÐH�Ðølã¹¬ÚÛÓÜ—xOÊD¤[
-¡vq­‰û8ÑhÍ üTÝ˜ce¬+Ñ€ñÇQXØè(ú9{qV5€öÐ´F×J3.ùË«ÇBá·ûƒN6ÅL×ã6!&Á˜Ð†þ[o‘wàÜ�ìëp4*ó)sêS½AÉgRÓ�º˜Ä±ú0 m%&‰¥ Â÷æŒëÒÚÂ£0n'‹‹‹Bj�¡í23^.{ik^˜û“x‚vÉ~yÍÌï©íûöSS]-h[mU!é;2d”\TŸ½ðì¯µ7îÓ%v sü¹zÉ'}Ë67|Õ4?dpDHÉ¼f—½OÎË£rÆ�^CQíTKË&Ó[‚“¹^£­IeîYl÷®�uÙf{}�KdÒº�ó"òø¼º�ôFP·¢l‹§M¤p´®tÆ×ùÎ%­ÿó¯O.úâW¾Áêæ˜`ó�	ÌŒ*Ö¤.ª*ÿü_^²mÁ�wžeËÊFÂ´Ùÿ™ßHº­y0º«¯8EúÈNÙ,æñŒ�iyõäIá�¡!D,ù~8·€“«† VZ�v^ÓÐƒÀŸïŒÆ‡ãÝy7¾k�00œ–ÎÚò_I¤ ŸÍ¦™S£H’÷$«1¹ËÈUýÎ¥(F™»4§ÜÐPY‰¬…¶Qj¹ãÃÃxˆØôÇz¤R4|¤Vc˜:à<‰ àÀ†JÁxPözs]PŒYÊkL8®³1–Ñ— ¼‚×¥ïc¸»ð¿EBx»- Ù_ÅÈºXâ-ÿ²Ø|ûr@°VSÔÑK{¿DFñÇM�¶ËnÉ4PEfËó,ážg„#+)ŸEúrŒmŽ‹—UM­ã$n)Äû>¨Vy®T‚\ �‡3‘ö°®4Eå‡/Ï>9šÏwû­L†~EÔ€aôãâ';Xößá”ä¡¹,ƒ‰ó¼ßiZ»€²çB¬É.øôÞ„d7¦{¨Ð‰´9 Or6Õ>ï�ä™¸Ãàö-ÑjäBY >zxSý}p¨cmSé»qš„/â†’K„$@X\–ý½W@93‘7´¹[áÚ½ý{µs¼Hk ágÉp½_vlªt�"c;zMj*ê=ö­f:û7…—ÛLú“‚H¯æë§ÿp‡’„jfïÛ|5æÀèwÈB¼/œ\Â›È ³ÌËÐ÷ƒ°²UÎôl#såõžHœ¤vA&Ôâç��YHŒæpX1óÊFðÝ¤ùÁ¤ÚŠ?�Ç‘ù¶hÑ"R°´Š¹+Í0å:Ç†-S�§vŸË=zNµ×tZ´[F<å_O€µê±¨ P{Ú£'líöÞAY`ø\N4\xŽÑzûÐáVLã¹PÕ%Ÿœxkä¡åR6#‘a»Íîd°ðš›iª©éoH`]õ¤ÑåbÌoÄ‡ûº{8ŸXåt\cÚÜš‹¶™qE½ã²Ï|é;8ÁÜ¢lˆŒñ®Å8�‚¾$‡ƒAìÿ÷Îÿ=Ž|Þ�ïõ×_o®?Då†4»ÍçÆ‚S›¡Ù¾Ö!gçÜRÊD)Šµ3Ëvw“s*ÃGš›3Õ@ Œ=¹8I^ò#i�%Ïœ›’«9…ÉÔEµ¶nØlŒd@™Vÿ`'ß„w{ÂL÷j”ÄGºvœ¡I´nÝÌð¼°ÛâS¸!‹xå[VÜ[êän�Ñ—B¾,ÊñÔt„å÷°å0¼í+m=¤­›bù'ÚÂÍÀ•e9PÒêÇµÌÊ|»IŠ|5ee¾ÀœÅUœa^BÙO êS:;€×�ÀÇö ®‡
-€5žUÇš%è±»›—”�¸†ƒ£Äèý¸
-ñÆ¡ð3àžEŽ|QÈîX�¡Oýñhd •ñ/Àß´tÔ$djá=ÿZ,kæ'EE‹ìîïÎï){yìp³‹¡>Ü¯qŠ.
-&ß €VÅT×MX/Ý5kVîû£Ç%¯Ä0]]Qíæ's†š/±(�2Æ²B“ß
-lÿËETveÑ¬œÇ;þ{«U) ýinyêeãÜBà"xÆ[�_uQ}}
-�U'@C¡"7|;D÷È'­_;›š¶�"œÓ‚Óâ¢Â+Ù“ £>¥0)Aç1oÉ¢yäíÁ˜Y‹ÛµôPÜ“ ôvÇ¦„u-1"1úöv¨tZfUaâ,€JF»e(›G9@ˆQóÔÈìçÚ;0‘‚kôhr¢ä�A¢~"4Æ#þbç!ü>�	7~
-Ž¿Ô�Ì{“Ž²ÍwÈ’	­TÆîn’Ö;î2hñ‘qØÜ™KgÍàkUvÒ¬“+ª-È'×íÎA>m¶Àÿ¡SÙcëBÒÀQR²Þü$“Š§i-#JTÓ:§Y÷‚êhqýÐöÐ@Ý$ÿæ”…¦Xw©×¥Y5 Z_ÁYü_“š¾1��`ÔèIŠNQJ¥1½;Žwí¿«©áC•ï%çy^ÐÄ»zÅ—ËàçC•Á€L-˜¬)ÊÇÒ˜˜ÎÒûl¥®ý³^É”À3¼ÒÒŒ!w�s½‹¢„Î�X]Z‹uø í¥‚™´Âã±Z!œZQÊg‚A0Úq/¸—(d×ŸøåêyØÉdÚÐ›œ&°ú£Ë|-pnß¸zµ9íö/Í É�	ÖûAƒÍF2ï�ö)J•ú‹Ð	ÇÂ�`ãŸÓh5ŒÆ†{á-Ýá�ßŽèÔ¯¯*rŽ :O×Í™ãTíÞOÊŒ0A5´.‘bŸ�œoF÷�Ó!™3(VX «Î×ÃØÙqBk8Í|:¬ˆ{§ÔÊ# <e›?îgà žŒpyó®*ý!'W3~{ýh¨ÈîáŸFÓÈ|•G Å¿ªó®Ç›T²0XI8§=Å=#×È÷k“¦†YÕ¸9äf<)ú¬Yý¤³ º‰èŒ5ˆ$okˆJïÉüà7ï‚Û|u{¯|Y�Ôˆë¾8Obœð*u›,>6’J/22Êk-�cÂCš3¼dÁ‘ùRá³gºáÆŸûø÷ä¾�süïš£ÑJ»Â½²¬èÚCàÚ}øµ‡J^ý/_½ä6e–®í•8æ¤N1e�žƒŸ�ºé”ÎR™jìA‚€hŽ~"™¶~CzÔ!/ß…!@äÂw3¯_Ê(æ¥GSŠñ;J7þä8£áþÁ¬­Ø#é	ë1¤§~”(ó­Ÿ•Í–„¢ÊgDwØìI�s:…Bîö°èP›<ÔY0Èñ×ðQx¿�a^ÿiŒ�M²3[#CVpòà�[6nÜh^ö…ûžâY+™M«Öøzq“r÷‰<¿—­øê|8O£IacÈŒ¯ sô­]ÇüZqáM(\iýÇ÷þ‘<Gï×8�yCü&øý õvøDÞ6=­+=—”z�à˜¹9øfwøß Š
-îaªGC«,žûS¸„WCÛ×¿©®��=Wàù8hO—aÎµÅ­ìo	Þûuîÿè~Ï‹ç{åÊ•#ý–`V¡
-ÆPv¤ª�ÄŒ*v9A2ÀFC3mp€PÄ§Ìþ¡¤$QVy�ÇÃAWÊ'éRz$¥ˆV¾[t˜iUóŒMfR‚Áó¡t˜¿ò¦{ÐmLåàj˜=™ÒâŸ‡2™WœFtÏÖ®¥´.Ï³Vž¹aTi)TZ”(�:¸gq-Bøõh‰ën*ôŒìŽý
-Uó‰Pã¸1ÛÉ½±v“3R ²�ùGb½,5¯”èÌåŒWžO(S²ÆýàŒ-C?&$�L;[Fú¬%áð4/-£bäZK!¯²Ù¬›¾jµ˜æv§ÈË�Ñ]’Ï�nK&åîè�?/ŒÀ{ü€þ\¯Äƒ¯S�@{ÉWŸ	ùÈƒ²ô‹÷ÙàY#c&k‚µÔÞ§>Étÿ,¿°PîWíF—TR)°Ž×Ö"¬ÁSqñèaÎzm`4—ÂØ®*�­ fÒ³0.'º´Lý”¼5­­ôŒã¢�:S1xªë½HbþÖÞ«Ú…Ö'~™ïf|æKv×ÀáŒR59À»Âš]§ÀÑîùqždÏ»Ñ’ep�Y1ã·s±Ï�4°Ÿd9c¹ W†f±W£Y¦�£¬'»i(c»)ó�-‘Ðé{6±Í?¿ü³<g¹�UŽ¡!£]$Õ°ñÑXÂ!ÂáwÂäë¢@/gE­‘QC¿·77�pŠxÊ¸‡V[Pá!Øi)Ë¡Vúù¦±W&e£‡1V›1@c¹ë³ë#ðCAÃÄL¶�×³N=Î.±d©ó™;«-²._ñeÜöFÙN÷o*¦b;.ËZüÙ/Õ"zü6ÖµBÕÔÊÌ8Ï";«n"é•Ý5E^ú¾ŽËš#GøoÉPP­·a‚ÄÒ››‘l:ó,ƒ~yZÈ?Fº?É¬ÙÒîðóåyEsçº–——GÆß"» êPÚ>�F¬a´Sc:~ø¶ób|S'z�N�gjœv³PÃÎ0ì'XZ]kÐìEL,vtV¾]'|¬Ðš€VAUçŒ6dä´ˆ )ÃœsØRÓ¦Í&‡¥tÜÔX·•… ¥q	ôu|6ÃèNÈcªv&)‡x#žoÊºì‚‰á=õìbÊ5’íK'CÛÁËåeyeE–dµRÔfÜ@Ä˜¤kå´fCõvïpŒÈªÃƒæ¿ƒ¼ò ip¯»ÛÐWo ‡óø-¦†]’¹‰E0îYQ,þ&®yêk½ÙÄs«)gbÔðOuc_dÔ7h�í+½²CúÞèåÓ/A®û&ÙÜ,úé6¶i;Øáç� Œ|wî…·ÞU” !ž±ˆ+ˆ~.vÚé§šfÖ8Š¨ð¼÷ÎùíÝ{Bw.xÌí”/Âc#£«/Ý4ÅGàjä„¦&R‰‰¿i¾z0Ó­,rßÈÑòCºƒóræ„¾ºòíc=½Q¦+ãEÃ–™«Å³vÁ-î]ƒð‡{XÃCªÅÛøG”lèÉ¦úÊœÑ¶Ö,'Øßç]6ù°Ù��Çúå6Ž|zïÞèUgÐùÎÍu—º
-ó)›`Ð-)EÕ‰0^²/£àôðâÞ¹!gâ jÄ’'P¨€ 6£ÑH—‹ý°]€Î+Ô;�R&®ä,0Ö†"ƒéüþ“A�Ú†à‚>³Æ�3R�;£ÑlžŒ€œ�O™Z¿C`žyËa‹Àó!õjû@ô’>à]¡o7”lÉÛ]‰_;<Ž#qß„ƒ€Š)E$çóS:)Õ%¸à ¯Ù;¯NŒÍû8Õ`à3óèe²F! ¡÷Ahî¨h’ñã¡|8 dn£Ž¨¶‚Ûû¯HõmóxY0ä£yê‹‘¬kþþÂøÓÙ	Ê=`]aØš¢¤·á½ašã¿óA¿?/Æ—éo2]3@ØõY%[…|cXB�½¡É›Sjl›ÙS<@ÕP–ê›(´q|&}r±>¯7¾¡¹y't´Ž�Z½ó½¯'N8i"5\ÜÑA¯„E]·n=iéRz1UB¾—[Éˆ‘Àû1Ã‹÷cñ¯¸ó¾™ÀóÞi)Z9cˆŸßv`Ã³sfÌÃsÉ}Ú_y«á¡­ÄªšÉ*mÈ‘Œ ÊîÀº±Â‚¯$kkSc;÷f)ò³È[? ÷ÖLvF·Ê[�‰‹<+55C&ÖžŠÜw×&NŠAâšAþ×8(ŠÒöy…ï@yÆí6÷vãã�t/þÂWŸC=Ã ImY7k½ñ�fpxÄ*u8™‹YIúr»S†î\è�E	/EŒ0‚ˆ¼sw÷ßþ|¦¹ ‘ÁSÀ€ò„Àš(‰P^ï¹B¡ø‹óX-xKEÅž¡8U‘Ò7ï‹-Ùvmÿp¤Õ�å þÓ,™
-ãK*È€8KPá>Ž^r—T{� ~v‚;ÇŸÔÜ_ß‘plØy5ñÂ°Ãñ¶a³§–MòÈŽþ
-tb,œƒ†�C—½ñôà+¦Ð %ƒ½LQ‰)±²Ý†î<?šòagöÿãîMÀã¨®´áÚ—Þ[­Ö¾Y’-[òŠ7lÀÈì„&&BH&�Y™Ì7øÏÌ$a²/$qBBB	$a36ƒe¼áEØ–mÙÖ¾´¶–Ô{wíUÿ{[–±Á™çKbL=–[ê®®ºUuï¹çžóž÷¥+4øú³c³µ0&Mè%#ŠT¨t&Ðšò¯y€rMÛT—í¸ÀÇ–Ï¤íÀðžÑîÓÛú^øý!¨:ÿÇï÷¢rç%ÓxÓp}8™4è€÷° žíÎiÖ„`ö "x™Ì	ë¬œÖúz¢~„p6 Ø%äu‘>@Ñ;ÉCµpƒˆñ{[7¢P±g(õ"ˆ~ƒåÓm]oät+äc{PJÿ,©èl®	�½T D?>ž˜ˆSŒØÉøfš·ÇHŸ%}…4’ü~(‘É!ü};{¸[Ö�yokëÿ¶ƒŸãK<¼ŠÚìÈô9.úˆm~å¤[``/ò³¾–ÍS1›š°KÎ2¶H�×oùE?D%ð¾Õo»Õ YÊåSXÏÉ¶fÍšü+ù/oX?yo ¸[iK÷‘(¾s†7y Foí'?‰À®ýQÌ—+QÈÃjšvþêÅ‹·%²ÔÆ�ÀK×/ƒA `hYj@;FTÍü³ÇM?µ¼¤€ÄþòòÔIßøÅ©Ÿ.¨¨	´m�$ž¦¦œ~@‘oðòF´¯ç}·~ºÈ'	E‘ÈEˆƒ#vÁý æ¤z)Êó–äÕô¡I,{wßä3š(Ü"R6áeX†°Æ?e*‡Š%¨ÏÒsYš�µÕ±Œ�„{¥&#åÜÓÇ È…³Ul‘{^»Öõ™¦¦,õÀôÆ›oæùPHâÆU^5CJy•XøÃM›Ìy²l!öF£`ìæ6�åH½ïqTŽõ)’$±tÐHã%§Ú?¨›*(”]€N›ri¼`#˜ç2ð,Ç}†Eâ‡o6¼'ÛëŒ�ê/
-�ÕŒèm8øpË‰Ehò»WôLŽ%6Ž§_"ÏgT xÏ~}ì~$`¦bwõù	d–¨Ä0XEÑµ­ƒ“—˜ŠJJN:rˆU~!qÎh.æÎ÷‘’üà¿X… ïâÑ02±¹ÏNÚ‹ôäT¢wúV¾ç^És?�ÈAÕdÒÅƒ]tte3ÄéÅÅXñdn�,
-÷·vWÍ®Ü-‰ÎO@‡§Tä­õ'¢Ô#óŠ]¾®xÂz…Îá­5©d¨ �­¨8«£s®nT’SûÏ]nÓ|š/<½ÇeØ™ÉRø°Sð.´”é{iŠÛDsV:¿…ªÀü��“Ä[Ïpí�F‹³¨··
-àª»¶@Cøî\5óœ‡9WGjÆÒæÙ*Ïñ¸F}ƒcÙŸƒ]j®(pwMP q<¹MZÉl"cÃÂ¢“�÷6>ùäÔ@ELvF�p‘UTµ‚pçNï¶×ƒPÿ½üŽ/-ŒíV‰?ýÒ¥sHx�ì�TÜ141˜×Û2.ƒl³O 9ð`V£Å< P®;¯Éƒ9B™\£/PO–#7Ú•¹�*<>Ïï'±£¿dxÉî§oà‰±~�0FpLŸ— $úŠËï¸w±)ŠŸ†ñ¼“±	È×tM1E[žõò"†ðôƒœþûæ¾Ã]H|œ@«ô4À‘é/â&}ä1´ $¿Ãó÷Œ&C¿»¼¬`pÚðnhqmî›ñé‹Þ_ù“ý½¡À‚x $ÞM¸,nüç‰^þÌñ�Ò­·~vVÀ_Ö(ç¬ó4�ÿPEØ;[‹Û«Ÿ??lCa™cŠÂqÍ¨s:i[vùHÜ^	äFa†› in?ŠM*¡ü=§s
-1\â~ÃÔ~]X$ê(”(]¹ºŽðKƒ†8×÷¯—x4óüX�k/Åb{�ï›Gbÿ.¯[®ÖõüsX ÊJŠ5îiOõº7‹ÌûÉ‰é²ÿÞÇ3ÖBÎ
-ê$±«*C­†c?gÌÁd¶'?éƒH3ô£+z5ïè&(Ó›ÓÅ{òw�®s~ŸÐŒ>_ád•”‡{p!ùkïKDâšh²Õ3Ê«$· elZ@Y…N#ˆ½ûg…œ
-…R®ªò”.Ä=a[mDi»Û´Ù ¤á¿½Û•%%9¤èÓzöO
-cÿfy‘¿åÙÎ¶};0•_ gçu¯fØ›9:{k&ï(ý%tóÙ²‡9…#ƒÌÔ‘¡D�ÍÂ½«¥Àêöö¶üo;ú9%SoF®õ‰Ê�á�6Itw9¶9†ÒíP¯Ícp	9ò¿<¹~Ïî‘�Ì›™„zn¾Sˆá0gäÔ¹(J]Ž*¶ò½©Îš°;ïŸ~Y{F3�&'~‰—Ë°:©@ìxµ¡ØîëÞóØCßÕª}€c„ iºFqB{edZl‹íâ5X˜@™˜¿Ä‰Å ^”Q­±±U•!Wæç~aâ£§…0Úâ™¹C‰Te6k›?ü¶ ÂÏ‚8â®>¸Çjn®É·ýá€+VW@!Ê®¾ÙÇqÜÊ^�ÌBx­22	Twàüå¯Dg¿R·2së—\Ä�kÉØ/¾åÎM—\'ax«+™±I§ãÊÀ_0Vþ=0v�ý'#™Ì£…ñâƒtï	‰¢›¿üïU½ãÃIBrÞ¥«!�?g€ñFcØ„mvìŸnÿ
-†–TI¾E~Á%çëŽB¿´Ksè5¸?U(öë°x»TÓí•¸§£Å�P’Y@…]O—…Üž'àµ÷ˆÕÝ!‹LD ŒÊÌµyFz‡ï:<¸rþÌQF0A�ë„›ßª03ÆXsyJ ô‹’9žî-÷Hÿ#Š`½WˆÝ�ª¦ù2y5ÂnÅÔ7-««Î'/’Úb�aïGúµ¨®orÏŒb_ú�Ó:Ab”zŠ×rCpÖŒ�……Ó}ÇK´%ÜÒ¾š]—÷Š†,”E›é%"#`îÀ„É;/sñù8ôi‡|Ïþ:aj*èÚj
-�¬*ÞTämÇÅäû*Öã’mÊ?‘ÝüHß £rrçkøô)¬ .‚êÙMð$oÂ²?%OïøàŒÚÇo¿{Ø-0Çö>ö³I¬pÿ_�’¿úþ‘•Òþë§žcÝ'÷H¹]¾Ù‡Z^Y°øÂ’—\Ò=˜Ž›ðÈÐ@rŽÞ½êáŽ||áEuºÃ.DBuÈ•Ì¾V^èËçF†¢–*¹Ùh+6Bu;êÎB—kºOüÕm{»¾pN�/i$ñên»þzsÃñ#£µZ¨cóì@ªùLOÒ!²ÔÓòå¡¡�Ë¢*šyeþ�‰qnõ¹Ø�a·xFöl¾X&{<®™ÀL?�»	t£PŽoW]æñÈþýæ¬e4"îAnS„G4©äÒ*ÒsÃHº\
-òg,Š2¥
- qz-:‘|µ><õÀNo#éÕ³>�â²k5Æœ;{©U2œÉÈ‰„!Opâ‡ê–‡"å²œ°ä{½é\�@Äè
-¸x!$×ÆPÆ…cvÚÑc]«k§
-à&0šÍR¦¨hžfì‹Æ3î�—mÓ&‚�peé_Y†›…kØ…¶>š¼ßi¼ú¢cr“^·×#é•Z.½8›rG5fBê¸‹\ƒ1Ü¯�sò¥ ­å·®å<ÂN�bëÃkÆ„°Uí'3hJ:¡Ë€f¨-}–Ý`Ó~?ø5^Kì~ùÈ¡‹–�¯dP lƒ'€§»Ûûh‰ê:2»fÄ¿ùùQ}½iu5Ï2âÜY3«Šy¡–3¨JèÔ5ÒH•2n9‹ò¢I ž‡YCíÚõÊÀô$‹îqÖ­ùdÿøõÁƒÔŒòò
-+§�V�®¨œJ¤v§ÔË$–»Æ¢–u‹©›rÉÓŠ»ÆÆŠrñµ¸Æ»�¨	Á¸üaf�œÃìœ˜ð®ª,NÌÁ;}âþÄä‰ËLÉù=pâ†hÑÖO½blºÓû½W_£
-åm«N³©r/ÙˆKh/;i|þ�ïX3—¬ü ªOW“ð¨fs?æ©GŽ&Û*ü%}ÀH‚p.UÒŠè<ó»o}Ë¨	ys`vÊn}/!R*œ»h¡/ WÕy\ÜS%%ã33ñ¡¸f‚¶KXž™�`Q[™,'³ª||æ•Ú+�’ù4X/°TÌp‚·c<rŒ¨V”„l59`ö/Gâ.8ÊR;jå©>ñnz®ç$æ;}Ad™»o4ÝøJG$Ì	ÒÇßèÞÞ?Qú�»¾<!‚V;-æ]å¨«ºG�XÈ�›!,q*LNŒj
-Ñ0}ìŽHjŽ(
-ïÓ,ã7™Œ²åÂ*ƒëÄxbH'ñÄ+î¿ŸBåÚÞïßËgèóX‰
-�ºáÂjD�vcé@åÔ^xGOgèä¿è;P¨ŒÁ€VLŸâŒW„œ&ì2�2w Ñ°äøq�sbð˜/`tzâHLÙ>Ñ¶g“ˆÙŒÄÑ+Ã©§àm,D³`\¡/i½Ì%¬NEÐ”+0[3ŒÁêN<â%ÀòÎÇrh†Ì;‹Ñ½“9ë_tÁÎ~'»G¶�N”&·ÑTn‡*ÐíE`%·StÃ;% ¢) HJñXÊô	F¤’Áe’†o__lH3ÌzAfc|N[5à¤ÜÎ2‡Ün]Ö³¢žG5ý¨‹†t)gÈ’ìE]G6åt€‚Äô’ y ËÑür�92¡^ÿ‰Oø#‹.âÜ´Ptt 
-ýl@·ËÔœ“Ah'	åŽm±é‰Hlø@}¶¶¶•Ù°á­§ßdÒ_¦“$ä}»oëÛ‰úçk+Õ{a È¾?jmöä `œ}\7è”Zo‚ì�“?À±�5ôlÕràš�ÆÍ']Ž$ç€ÌÇLg²ÃÑL‘Ø³G’ ÀÄ `Z©'rP9†Ý‡ë|Ïo½	µz<–}¢6É†Ã;ì„
-È$3¸ø´ä'É)¼:’ìã�œçà8ydiyE|Uáà¸öž{¢éŒã‚øk¡G£tê¶à)L=ˆ·é.)ÁJŸ,ð©´2 K®™x=­¶kËÚ•hh/¢·ÇMÕñ¬ûÁI
-Éuëhê¶»o;¢Õ–Õ�qw…Ì_C�ãÇIòr2hæ^Õt®Bî1¨“¹£·éþ¦Ãž3ãK2û/Dç˜ŒY+zÝê­Ÿ¾âdÖÿô–yAÇÙæõ}=ñH=x$ÁÃª¶¾œ¸p³1ð7<FäÑ7�KJ)”ÞZÐdã+$Î¨y}<•,!Xì.
-½>œô[¼E	îÀ‰ÀH =ÚHm�S©£�ßc{%$z>ãrSRt×	y¬ðè¼Å€|-^|ÖNEªôZ'ROÁû\‰âÿ6 ð@: ©÷a¦õrÿÏ��_ìž¿ü{¸¶~ÉR7Q¼ø¤Ë—"›7Ó´øÕv(Ð±¦˜BLzÔ.k8H	R+¼Ú/€dh%¨(ÌZm8æ2P-Ž`0ŒÛÉÔ«<¿Ìær™‡@¶¬­½¢$\ ˆœÀZ•lÝ*cEh›b3Vö@²WYcC6xÊ)d§‡€:>aóL•‡cw«º9¬ÓÐÕ‹&wuîÛÞ¸ø2Y}u ·ûÿìöÅFk\e‡““Û=‚2¥³üý€Ís9Îª@Ô\²ÿýw1€ Ô×)Ÿ,ŒSfØT39VòuÂzFZËª™¤ç¢šê1`eíå˜U)j±…6ùåŒ�•J¾:Uî‰&ÜG&AÊéýG6o>D�Ô�£§Ûd
-a‘×Á>†Up«Ü�óý´¢ªQÕt¡jY«1É¢Vk–íKdÔü{Ì�Bq®ØÖUWÀ-ûÊÇK²Ùø�.pÉ�/Úmä&Ñf×YûÁÿA&±=1¥Š•ÙÊQÙ½±¨«ëxÇQêxûÚFsÑtÈádû±:ëGÙzŸIIëøòÓÃHÒå¯†™Lâ¯(ÉŸ�ý÷2J‚6õ;´KÌKÂËaé Â0¯;rj²»H*¨R$~Íå½“p£DÀc¥¼cý7ìÍB‚‰m‡QtÂGùí‚B×èîÝ±8dZÛ‰øÀôûï¦×sf|e(Ç
-¬°ÂDvRä…¬�r
-ÖSÊýozøÕœ/:h¥2Å~þÚc“ÙãX*.Ã’Q‚Ù‹¿‹M¥&@!õŒeŠ°ü'äÚyøèµú@öÝ¢�Ë!ï†¥Q@ÃÄ‡ÈÊ#µÃ°Ž@v®(óÐxûÀ®ö'»¯¸"áª\‡hQXÆ47«Û'"U”¾¶â†‘‘¿'F½,YégÀ2Ö„™w=*7™<³9ñ­ˆkgê:îÂºØôî¢~avòÄy›ì÷�ÉòF3=úâºâ’c'Ñ0h›ýî’K?]b ´ V¢Ÿµéƒ�áÙcÐr ­MûÀÚµyêËæüQaÊ8*0jŸW‡5¯>ÑŸ0â±ÝÊÞ½{g¢äC£îÊØ1M¬]tPµ5W‘Äur"}Ô"ãøXwdç5ª
-DeBN¨Ø°zC“q{@ §èÙòÜh<^;²ðêY>´�Êè~>§Öë+Çì5€’_¤åIDH'G†zÆ-¹07œ¦3Ò‰çÕ@~NêG¨Â)ù¥“Í>ëKÅ*=ÞëP²½
-¤H%H‚"¬m{4ƒ;ŽóÏáK§”/¦@†ao‘ê¶Äcz ¿upÝ{á½ÎA×‚×î‚=r¦fà­»“É¼ñ�öu	E¥%�*³…âœ:~�THF4—;¡VpÓ¦¤ùý¤(äíuí¦/æm|e,•…Åª*àüBcc ‚ø³o¶±*zÆ±á6Bó™[§íè€Ûl b½ÛÏ”ÂÎW“žöùÛò+¨ÖÒ=ÙlÎ£9+¤ý[<&ävõV^ô„iÖªRy0ƒXè„ ’$xà�œ­·Ý�^~&r2@mP_C41’¢ì|Ÿ>ÙH{¯oKƒÏÑAáLœ›m|àà¤Éð‡…2“5Üìò+"cM-¤4ö´­ €NAn~ÔhÓôM�«¹ñØW„ÝQ”Ì„Å}qÌ/eYêžªUW]ÓÒÞî!_/V'ztÝ|+¦ã²ó‘0€=U¬ZÆìfthM9WÂKýt•¿¤è�ûARŠ›ß]^°O5©±¬ú­lOÛ‰7cPOkÚ¿./ RÐæ|XGVÊáØµš`Í�®%ÂÌúÃˆ«~CÑs?,Hû‡ñ¥¼çÐÜŒ¢VÊz˜ÈnHX¨Î™V’k.îëóYºÁ0àZAN(4�'KýoÇÍ}ÍÍ¿ØTä><3Iïç�7Ý˜E•…£¨¯ß™Ô¢GÎú£“ÝÙ½™jçâ‹/fžîž8ïÅ�èEaŸ|­<s~Ig•¿ÍÝXºËEeZÖ@èCšUZÞ(Á¸ä�Y4	%Ñ_–uý¾¶ÁxÓ:8˜Üôù×Ö•n¦Ò#xêªÃÒ"(ŸG©lƒR1ÊÐ£™<Šòà6_6z¤P¯KgEI™1™§Û‹��Ø6–œÑI-?M¯@áJÝºuS(r-ø\òÊÒÇ�çú"ž}œë½€n„M‡ÌÂCT&vðŒ­<
-€�ê.dl?nØw¢ãôŒeàXéA/•ù¦f©ßÐ8jßBä r�KÓ"¯€j2„°JšïîFÚ€r@)S…·©ë±]¦àrøÁlñg9/9Æ{e#Î‚åH&Ô=8M‡/ƒÕøÉ�ü>�"oeÔø!#>ôÛÓKq§÷Ý:kÂ3ÿÄÖ?l$ÍÚÆûï?uœé}ÞŽW4ß6Rô(…)¯EÔbF¦�ÒN*L~V¡ÌTR¥^á!€@ÎO®×fåçLËò3¨JE¯ÙèÙÆ"WAúíhßÛuÌ3ãßsxWÊŽÃ»� Œ"Gæz$]HÄ{b¢oºD•ŸÜ8x´GÖ¬±…^Š¸Ô^Ê¦™ìí«W~*×�ç8Ã
-‘vš…Âê,<²íˆëª}}‰ßÛðêÍ®²EbÙ˜©“0tYU=‚M¯ƒg|±)ËÐ«ÊÃIY°E—z'pbÊù+“]ÛŸ91»ùšõ&e}Z”„å'bifçy¥Òå—úq9SYä“7Î5ÔÛ©Õ¾}&bºL7órˆ.möò[?ý|On¼½„qZLÍ:±Ï½ÝcFÕúg£nÕÕ¾b‚§’Ý?Ãø’stÅ,{2g
-–+ëÉ5Â<ª(+»ÃY˜5è&7§ÈX<‚ìVeÅ«¬Píq¹ë-C»hÌSÇ„gˆ%:w	œ:¾k(
-�6�^J¼?•ÖŠxÁ£a °F2ã½î1ÎLÅwÎ¦ckŠ�È££§Û6ýŠ¯SÔÞ¡ô¬€»àrpÃÎ‡¹Fb‘f‘ð»úÎ%/�™îY„rr°‚ªŸÀa
-âg6¥>:f™©
-Ás1»…´®ŸuàäT.Î†52,0ÅJ„ƒ5k›!�„ÈºÕ .g‹õûUjXkíëì#qMÒ¦fp4‰
-¤šHIá­|lKÙ”`I.…‘®ƒºT©ác‰BÇ×C¾ÿ^Û.&•ÉRŒ’fQ¹7u9Dcpûpü:Š§Û1æ’Éò$Þ:Ÿ�œ¾F21ò¼gV®·‚¬æj”Î{-7WBpÓÔâÿy•8}Œ¿÷U¨‰ÂTêèEà"ñ.û’ýXÁ-c5#„¢eAIÉëÓ×¦h9ä�aÂë¡ÎC	±W·�úcãuÇ'�Çn¬+#¡‹<zHŽD€LjÎ?û¿·�çúûçÌó%ê·L!d!L~D2}œ²]†gÝt#é˜BOÍ¢¤Ì÷xÚÙñþÇ^}mÛ#Bòþ
-*Bæ*æDæ»¨Zù!änž£®*÷zó8½fÈž[‡÷mãÊ¼¿ú�³ý/®¬.Øó\EðH|ï«(¦"yœ£š,fûSçÃ#ÝU¨4MbÓÏî<A Ù§>óME¼ÚM°ªíá0�c•9ÆyfÖ‹
- ­¢&F‚ôî3/9©ÒÁ:w?nªFÈØ°<†œ¼s¼½ë,^,÷ û—trK«õ¨N_%¼Ìê5<ßöøçòIsÑ#ð	Ò‚`v7@Ögsßäìgû'®v{<—Ö•,ÙÍ5Œ„Š|–.ÑõÕØâ@WYšTÒÛ<lzø~´É+DË½’«‰7™¬6š:…ƒ|Q¹v\rmS,õ1 %¦ZI«Ál4šˆè="8F/äYŒõµ¾ð�¯{qiéDýLŠºdt4´sl,ÜŠxíÔ7Þøßh¦	‹Â/€¡á³¸f KØ$žƒ+’›Àw[=g5ñ¼bæÀç!´s ]-°®ù&S›áìÃšÁ>¼ "4Š£NY�7Où\îBP{Jø¸Ž©P¢ýáÝÿÔXõ?Q\a9æn=mÝ¦†Oå*Dž¦6"Á„ðT�—“áäB,C>ñ3foš1ûeN
-1­Ï®˜ñÞÞÈsQS™¬$ìB·à[w²o©SÕW(]˜â™³Žõg‰Ü“¸‰á¤¯¢Ã~˜<àÖMÔÞ×ûÃø¾C[¢»ºmN’PW�ãõÄÕ*`Û¡=ÎÕ"­–Òzá˜nŠ®´œiŠAÝ­âBðC'�`®q±ÜÕd+M�«ø*§Ù�wévN<_ÄG}Õ!i	Æ÷œRÿŒ�3^7y~6øRE‘(?ø9é¹Ö‘}Ôâ3Ø¼l’¡ÇOþÖxˆx3ÝÔœ§Ï+	¶c°Y�q¾É¸ÛLF&…Ä{�óÚZsšÞ?žXdiõu{Gö^îbnþ…HÚ9³Q‚º	CØïŒx©üÚ44^/jZSURôü@rsnÏæ~2L?bøê/½jY	ë¹0ãe
-®_°¤WSÔmà:||½ŠH·vû(uþôÞôJ»Û±çaÕô£!±Ö…Þ»
-Ë;r¬u4sà€‰óå½Žq	ÐXÓs)ˆâ‘+H½À°»&‡ŠÈó›—¥MªHP­ ["9ÅXkXæëŽ´v>dþ R<ª{è{ÀH´%¡béEËucµô=”é)ÒEñZ9¶wy}fÍÉ6’ùç`"±ÅÐ�J
-ØÇ¬–Þ±jñTÕ×òÙå1”x'OÝ3gÞŠÔ³ÞƒÜâ’`É|ˆJÀåî¦¢ûÇÒF}™°DíL�á}wcfƒv˜õ4¢Ø¿‚hÀ<‘Z›æþ/Ãçá;Ÿ¦jšZ‹vX‘ìÝÀg_Oö4g®Çå2u+ÁÖ0ØîÚs¼±mÅIY§é[«+Ê$$±¬vž†í	hƒlËìð „à¥J.L~Aã¯c•±ú£˜”òvô8XÔhÆÕfª†C±T<3�öˆ)”šä¶ªD]W]d"]ðÀ�¿3	%É·þé6¼Û_QÐÃ
-!€³´}¢œ/^BI>4} p­R,³ºÒï‹!ÝÏÎ/ÄX+UÚ)ÃªbLïVÜÅÙ”ef:»`�Ñ§Þ‰­¬¬LiŸHgx&lš\µÌXÜ	ÙØSzV”E‹ªaf«„ó=…×emEóAdêH{é~jÒ\è¢Å;6ôÆz¶ßö¹¨vß ;Ì+øÎžwâþÚsüÝÆ—Â'Ž.*òú/ÅÂXg5ÐW<±âðÀÄpÐ?Äà Â5VÔT²Ç12ôð³vò´®§<Œu|r³ŽD£“m1·+cSAÁ�Û…H+.ìÔ÷ˆ»{4ƒ²aû–"Þû:<SmR¥)ÊdÖS”ú/ê“sWI4·Ììq(/ÌÑG57?‚ãžòŽ§WáLŸÒi)9V„' ‚´ˆ¶ùo�eGžÙöÐ¯õSƒø,wÚmYó–…½sz!5´—²ìm4míèDXF¥Nf–ÉWÃÙ±¾ÑxŠ«EÔÑ”ó*AÊi%	MYãçäM Ôë‚™ÉX¶ªäÉEPy9Ÿ“˜6°°gm-ï`/ˆxØIï$WõÐ�7ŒÜû‹_ä¶¼¸5se^	øTK"f|8™ü^w\wýú§©U'Nþ™œ¶4k)¬(ô~wü:„æà¾‚HpÐpÕï¥²¬;h‹¾�èºØ.ÚVì_õ»ô½%¹jÓJGí£8æ<¨O\èÅßî|å¶’Ùß£Eg­”/ˆIj	"H˜P„b—ÎCä$(óE9¤áï…çm€>X�·a®Ö§e'žlz±Ð_¶ á�/æk(ì.Ì//�_u$ª$ƒYÏbõ,ÕG©­âˆË<—ƒÎ²ÌÅñÐ	tjÐ/UM±1î?u�Þ‹¿p½½Š^;»�6¬ÆÜdBF?Ë_†ä÷årú˜ÌZ×óÞ¢¾z£í!U“È]H®%(½½1ñËá0çðþ QêI]i­äü•9`§ÅÞ‰{BœƒÃcñ.¯ –B‰$6®ëÊà@¯.�1Š:ãóP=€	ó
-´å�Óí±xa”³í>Ô˜—Cß¸Îå–P–\‹ä�q††ƒqOGˆ�"ÇŸþÞ»åõ-³áßÒ0:ec§‰úXjü|WKäh²ê¯Ã#âY–Š§'ôS±Ç³�cee¥ŠÛó4(›hÞ{;T„¿‚Qq%ø’Ã<©8#™ïéï²´Õ/
-4¼ÎeÈR-Å*¿R?ß›ÈŽniF¼oz?LÞâ†ÖŽB3@“¬ý’\\TM}F‰’ëÓûm‰D OAÿ3²ï*ÅŠ¿ !ÇwqîÍ`‹¼B`ŒË¼bM^¦š,gwÆ2M/Ž.%á”éï“WTô¥aÔ_êAÖÔ¾‘©>yaya'‰‡“�wDk_î™˜Õ‚Ð
-Ím»v‚Ä'l*=´Ø<uSNÕ_Gå«—”£—W„{
-¥°µØ(ñŠ¶ý<´ÓxZ²»QÌÅ£¨œ{TÄ][¾ùÍ¼GM”‚Wú}q’¼Ã9ß¼9)@`zÿg¾ô¾Ö±,¼ô3—–äpÞ� 	Šúyª	ŸoA¿}I²ßPÀÇaB:Ëý…­(?•nîW€±-ƒ÷°së×oèË£¤sÀE1h^ŸÍSÁ› ëËv"ddYß@CÿË4˜o‚|ô[@¬¬‡l|/øyçc¥ð©+k–àœy–4ºl;R9ý;»ÒÑ)ÃKÞ<¹žž2«ÙNTp¸�f_~€ÑF¶ä`´P¶s¢¹¹ÆðÓ^7–V7Òw¾ÞD\J•�ëCA~ô$g§�ù^|%á.”Ù@ìT¥:WS÷OîAþåQÇáJÀLv_ÐåºO1Äµ]ò—0&ÿ%ã×#d>�Ùï*¶ô ÝY¼íºššÄ†®CÇr3Žâ‡¿Û9ûkîg•ÄDxH\V8<#ÐdtÙ\+Ä_äu\(¶¨!uÓÇ�Ä	<Ï$Â•÷¢ õ};”Š¹�e¬ƒ214ê[ýVâÅw£á%×ðwß\raHˆâD«`òX
-dÀb«/6¾ráùÃ*›DD×%_ë¶è¡T
-ª}«Êd‚8µÜ'!ÇÁÃÞc†Ê¡bÃœD�ˆ•î¯xÙóL6fÎçúüÙášmHl%Æµ Ø¿sl$ñ]$ÙŠQH0ä˜Úq³óÈ 5¾@b`KJK•‡OœðÌtÎ‘‹‹çi°¸š£±Ðµ¼ÚÉ©Ý<gîŠAq­jªì;,ÌÔs6à_aûã¯ÑT©¡Ìˆmã-¥Áö
-ËNcÆõæTFªâÒÖ
-^�ÜHÖô¢é$œß¢´r¤Ì’†R•þÉ5T¾<š0r	"[TèsÁÛâ¤zà@§'>FA]@“³CŽNçLPgÆ`
-Ä,Kò�´zUmkë+”Á½HxbŠýj´´»’Ÿö’ú·�²fm‘TÏoüÒ'€
->¹aËrnÄÒ=Ðì*Ë(Ê0ºKë\€d_-GYMMoº¬KË¼á&_¯/¬žƒy;–žÕ ®ü…M)ßŠMU»«|
-ïáPÔH�À#ó[‰ð
-�X�Ü[QîmÀ‹Ê¢zÄ¶µWà… ÈÛº~`Û:Ênüd½èg¬ÂãéÑg™š+Ú5(	x£àiY+1°Ô ~ò×�~-ô:ñt¯iíg ƒ#{ÂªMø¦W íÏ÷÷Ö]]û;¯ì­)ÅJÛSÇŽiïŸ·1Ë õÐ�·ìdÎ G÷2ˆ®\¨„2ëÇsm�iÊ{ÆJñÜ‚È«%D‹—K`5TÝäoŒ$~­3t3ñø‚Õð–cà1¸|¸€;²ñ¤ŠU—m¬Š¬öd$7yÍ‚óÃ¶jÜ9!•ÿ7¢?ïÈä´ÙïO-�)Ã¼Äyƒ™õ íuîwœø¾É,@†”/—E¡ ËrËSIÕ'£P‹)@žé9ÎRzr†0Œ‡r=Uãbµ¤‹‹¬pù–ž¸	5Ò§ÞUÛßm|ÉÕ�*A0T­ºê6¶›“™FèhÕ{X½�®ïkF 1Xg_,Ó�Ëå>¶;¢þ6RlÇ˜:Ã “pE½ÊŽŽösî‚Ä¸–6FöEC‹/,6JÅÖ•…á0)ZhÇñ´äp÷s=²L‡£Q[;bµ'e_ÕcÐ©_õQ/‡ÄÐy	ÅôºQÏ„ìßÅ¼iîçàbÚ’˜u¹Ì#�•ªÈææ7Ë2‚Ð`qAv/×¿¸T›j[A¤m"37Sð�cŒl‘º©€¡Sã)eX£Jòï“ÿÖVT ‹ÊkÑí³Rß¤.+ª
-š^„�g�T £šv'1Qdÿááa£0X•‚­¬²Lêô"‹£Ó¸+›$ÆaÇÒ¯•†Ãæ£›»2?»½ÆeJ|zé}ÊÁÐö#¡Gž¼óQ]\_\�rf¶õÕA—ôGH?¯†q¼ ™ÇzÄPA¼Ã$'©.±žzƒÍ¤­f`šk!Agp¼ñ§I¨ëÚPˆµÌ‘hò'&ëò&¢‘ÕÿmïûbÊÒ8œú¦™š�iŒ s:„ÕÃD‰âŠ÷aìVùkD©9oñ0.úÛÒ|bèkãí©£7ÇÞò÷‹¥3„×Îuj°{�˜ýâ­¼¡¦Ô¶|Šå1Üü©g°O&u&“õ¼È,A"_¼°;†J[c4+‰ËYŒÉ®­mìwf¡«õþkÂ1iŽÚ…ï�0Õ{z“GÚ-#\MXç°¨{c[Th�ÇŽÒø—\[ƒDŠSjPU]´PÒÐA�ç>#8Î°åâ†Êlo$“Ë…Êú¥š[žÄDøæqúÆÑÏíoä<ý{0ÒKb¢w%ü±çq‹š» Úr½fqQT3Ö‘²ñ
-§Æ�­3ÛPlñ]_Øö&ÙûO&Â�_yÆ•GBõ¥Çùßi|É# ‰+z Þ=p+AP�AEZÏf,¯WœLèî�(ŽýÆ™êéŠ}›ª/È“��ïOoÍÈmr²r}ƒ'$…¨àÒ^V7N€Åþy�¢—Ó
-uIQSsöÏ�åVÞvb–o‰)1�ë*7Óº£ì J£Æ¬È‚BFæùY¢(Fµ»+6Üš�x£z)žÔôÆrÒ mi¨?Ò0çA„E¨U˜s€Ó\Ï¥Õ'_x�­¹hMõâ(²²ÚË3ùðÆv$Ú¨‘Qê˜�Llq—øžõ¸Ê‹8¾Ü'S5`…`JR”@C[ÌŠèªÖ~Ã“g”C×@–Çâø¶igaÃœ´£îâÜÞžä1ó¸U4œ[»¸a•©8ù…·/†�IÓ?€ZëÝ3gêû‡‡eJ
-:J:$òî³¸ª¦B™}…BîXR¿
-ÌK€‰†
-2­£<î	Þd7Û<}È1œ›à¥6Cm¤JÃAœ#�ëÄ?L.Ààm	Äœ¦Ê£Û¾·Î†BùÈ™[ä'÷�¦¥ pÜOíIµÜ¬/B»T\ÕâO-+/O¬Ã¾ ´±³K(ð_•²Ódªo¨/ÑãéÙøN#+z¸ØFÁ„àƒúÉ•ùô3´óË�ñÈÈòð¤íðÀ@�}wá'«35X iÃïòîÁdßW´òÒÅZ�°B�{·>9èœŒ©®Ì4�JÉÃ2:ƒ:ULšOaQTœEÛ:/&jÇ#Ù+ÍFid>‘;µÇ{÷ÿŠ¢�ÏÐi�'Qµ�§ �ä‚œÅÁ`r]�|^Ä©  @ IDAT:Œë>:±;ÂWÕ}–A•Z´Q…É¶Yu�Û)µMú<›Í“V…ñµ #KñÖVÀÍŸá$½�wÉ2²Ã ¿E!Þ¡’ÍLEÝþò¬	Ý'1ù8B[JPáØöÚst|Üy¢~­Õœgê¿Ô¤m…=l%ç Î~7Æ}Ï‰ç;}Í ñSºººÚG9¯�Ê1ýûÃQ[›xbç[�¥é ‡£[�Õ0Ž“Ï§¿?ýZZøM×á£óiŽ>ÆÐæ¦ÉÄÑAšP7&Qq–T+Mo/õ¤f ! ÆxUÒÈ½Hgé}«QÚ³¶�Êê7�ÚRuAï‰N;}|ƒ7qÍ¬·âþb#]}î?.âkmÜ	²3a8N¤×-ÕÞêË¦Íú5k
-”¤æ¢->‹ uäb”(Ã«ðc9·Ð©¬ìŸ“uWª´«Nvì™Â	ÑTræˆËÏO°ªw¢ã…Öôí(é%†—lµó‹Í#ÇûžózCéØ®Á4µ¶Ñú Yä�E ¿�ƒQ@
-4®¾ó�£‰&0OIöbItó†—+Ð¹ÊÀRVBóÌ£c±Ø«ÐbK!Žº	ñà ä@.‚|R§­¯ï)Œ’ÉŠ‰fp{é•¸ñÅ¯Îx‚’"x;?ÀÀüoÀÐQÐÍã:ãƒg�oÇÉÿÐœ)#MÚtýçîÛiFÆ\¼}©$?.å]W¸ÜõÃ™�Á—ÀøSC°bßûSë“Ofj›¯ú=f‘‹ëõ#Ö´‘/�¡ôÝXlGyéóˆãf§O8Éù¯ CÒ'A¸4šÐ×Q¹�2k©)„¨œÒ—ú¼ý$ƒ6†—.mß�{ü&=ƒ‘ù9 pP•„Ñ¹üM8U\éo65«t^Ýîµ'¯{úœïÕ×;–,1[‡“ýÀ˜{!4È`9zÆ¥œºî@Qê5~1EQ6u±…KJƒ&e”‚û£1ÔÐHÎa(neu•P?ã@oóñžž\a}Óë,c¤ax±:Ax±ý½ãê”Š7Êi¨«ý÷üçdõè[Z%¶�ä€Ý�KÊ”1@ö}ËNÿà7Hðœ7kŽÜs¬–ÏÍ˜ÎÕP|¸
-ÛÕX¢†þŽ�µf‡nZÇ«Cg Gbé•€7}ÊÔéí¼àx°<ª�uáb=I��lŸæ±%R¥vágÞO(¶zM« ü]®?ù[�B4²äÊ p\‚[>6íj'jé‚{ÆS3ÓHB &¶ËlÝŽnÿy$5¶? ‚n»Ö· ìÿõ:h£‘?]{ACºeH©PeJá_Ç’hŒµ¤A¯Lâ…~‹µolÙƒâ²	#ö–Iæd;àxN4ò7�»¡ %¤ÄÔJA–fäý˜Ë-–b§�Â™tËaéxDAO ‡ûI$T`¹Á*fÜŸ’Š½›ÞÉNŸ4!þ;pÒw1ñìHúökNBýÚGSËtŽÝ„•I2Éwu�ô®ŸV‰gÆg�Àøš"–ó%yÂû£<Â€4îä¶/š^	Ï%�îß[0oÙ'Ð¦ƒ/RŠPFE+®&‡°E!è
-b ªãß…Š_¯AH†(ƒ&sÅƒ|S<+¥T59Ö•üxó‰RÒ‡.¬_ø¸Ì2¾Œmþ\d¹~Às!ô2/¼¤B"Uh ¿€’.ÕÐ&®âL™÷\V,ŒÁöOÖºÝQôð|''Ô“¨ì:cY>}Mÿ^[ã¹«yÊhôÄíõµ³ü¿^ú"FÝ‚yYŒDxÉã)BÙî‡NrE<Bhç½gdbóxÙºT�¼K.¿…ðT.gïýŸâ¸ÄÓÝ9’|P4àØÙ\<òÿz?Þ©ýÎ©ç;Ýhbx_îŒÖ†ýe¡pþ±�]À²òèk¾€ÕC'0ÿÙIÛ‰|"—¤ôóŒMŠ�µšá²íÈÅW`)µK0™M¶‹S‡âÒH3âšÓ;�cÉQPG�@œè¨-ØÃÐ{CÂÓº±t¦ß6²Þƒ�›êV¬à•––\%¾DŒ5âÃ$†yjkN7€¶¼^3õQ�–~™å¬-n”ÖÆ2“—TTŒ-,òš=¡¸8çÌü%Ýï+óRV”TÊÑ‡].ÎÇÓb'¥Ó± $Oì+ñ$nG¼jéIØÏ©“�ü…$¡DçØeSÃIB!-]z¹7¦ÛŸfeq"3%·x 1€B@ÖÓ¢{ < è£³ÒD™¶þS””Þ‹ò\xß�1£¸þ®.º´$%'GÓ"ÆÍÒN{íb/žÚ‡îÁ³A�5ˆrð…>`TNnœÀívL›,Å+@Š¿ÖÇ÷>¹;ÛJEvëM+®ô«"µìbŸ?ÃXÆëÝï¬'E�¨tÒ×ÂÃ® báL
-:&Ù!ÄîvÂ»Ý¡¨úK5?‘Sé xœ#á„/šóàmÈGIöòŠpÞ@’}ÈvÙÜ¹²¢Rõ–m­×Gµ�n˜â<*±è!kd$CUÔRøÍOÆ[n¿û˜c±‹\n·˜œL &|Pu´nàÃ=/=Ösn_ì<ÒÞW’Ý«jŠjëíL×žµ�¾·ô¹©3¿wÿZÆXÆ‚|�å(ÅvrrršÉŠ ¢‚ô“�*ñ0—ŠÑK–x1‡žñhþŠ#ÿm»¾Ùð’£¬,öŒïOfÁ…âå¦Æï®÷ˆãOŒv#†áT‚û� hÞuÆ÷\-)è—Ç/Ú9�¾pó‰±-cék�ôE`D¡ˆÊ^øUÄ¤�ïçåGÊÑC¯©ºõ \#"G}°ˆs•¬[û¦�x¶Y[{û>�gÃˆ%Ì÷K}Í5T>Î:½;‰5gs£)k¢ë†JÜñ8�‰Ý‡xæ-€œ4KK�å`Ã"×¿dIÐ×°`Åþá‰†––)¤Ô‹káãÞƒ2Õû 0wŸÅQMf&~ÔV4©€ó-ØÜÖK�,Û@…£k¹Ø‰æššü’h9âÖš¡¶&“êà �|ýÅG<'•xÆ‰á�nãé¯d?8šºZ|w¹y×W�ùWÙðÏ­“ˆ…¾Õ­f¤¦‘0¢A/ÂÔ2¶}ƒES5Pà\o0ìh–õGøa›5‡%�?Z ýoñ0ŠˆæömBÂ5ùû‰•#Â&È"Óo8V mi…±‡?Ú‰Ý`3é¹àÚ�Èûdíï|‡þ#ø†sÄÓ¶(î+µõÁÛë/Ys»&²_Bìý«€—­¤x!*.v{½†AÿK¨ÿ²móÛˆ!þ ^ù·‘D|J_+ò?raUQ/==‚‰VJ>)³ñ}ò;Iœ½¶‡��h˜Mq\Àƒ@@à~83…HïŽð™üD²ü0^‚CF…S¾hgI©wrY±¿okEñQâ!•ŠÙÿ!–åWZ6u54ýþ•ÕkˆL®÷Ó6B'T—óÈäÿâênúz·õÇV¼:ž[DVZÓïÇ„ð�ào§9H\E`bÄ¦?ÿG¾¢mß• ±“àG	av	™´iúõÍíËåTØ
-N�ï/íóæï¼“¿Åèý­'Yq>J‚¿àH÷I&õo¼C} °¤	¬9Áh?m*ö&à�#(JŽoŠ¨Õ÷$UK î?ûY7üàÄ~c¹×^{¦•»³v„kÒ0†Ã:Î¥%¨tzKážO�ïÞ<™7:ˆ;Ë �‚ò’k0Y!àm†‰!Å|Áý…P?‚Š§Ú¢odTÔIÜH]ë).v“Öù±–éE‹œ€t<ÉÈŸò.nh¬;ðdEA;�¬>ÙÿlÛ®ÁhD¹ï¤xæß ´ûAË¢wun†}¼E÷žKVéœ’±ëg‚|TüCÞ£	3´Y¡ë %0?Îd�ÿÊ¦íÎ+¡V¬9ÌAŽþÂ29” 5KáÆ#‘@Ëø¸X«r¸-9Å²‰—pª½déÍÒöQ<|äE­zAòÌîIö�DíÊr¶®ý†�£mƒðŽ/�BÇW€’øw�ÝkÍŸûˆžÖGŒ?ïÍ’É&VèÝäØÙõ#£?6N<¬t$7/+÷v¢â„ìó–{Ò§ü;'ÊH£ÁW±…ÀW –¿ûb�¸¥…”AÑ?Ñ|`-¼�e;xáM��x+¾ÏÔŸw&�ù@=G”l6?âDä\HN]ïN]¿XîÑÐNvJ,UŽ•ƒ¬ªß�’\ûßºÀ2¯—Ä×O=ë³‹t{Qä¯cãÄÊOMB:„KE™Yóê`fÕŸzãó×íéò�íûoç{{J"c•LŽd"ØÔ«xu8½Rl˜WÿÝÏßÒkXHÌÂ·€ØmÁÕÿòù™;Atå¿|~ÅÙÚ„rþq0€d(Ë(»â“ŸÌ;QgÛïõÞ¹
-;ÿjÀGXšºÂáí.�¢µMnWÖ±¤w?Œ¸‘¾7;û!�¥1¸wË¦>1=PÞ|ÈòãÉ')ð¼ºì…·O-KÉ1R¦]"@�ç½Êî£Äû�þ.æigÓ¨ÐÍjÙŸÛ{'‡g-ùL
-<&TŒ‘ˆÉ$µÿ|x]½½½bŒ¡.FõeÑã2 1Æí¼ÅUcií@(rÔ›“òßW2z1+ |£Z‰t*u†WûâØ˜+t§§öõq«¼u,%�§*¦»“%žŽfœ‡œ{×hØôÞfZöÇ€öØg3Âs”n&áI/àýV„nÈP\0Ö¯¨Z¿~=»ôú� oÌ4 iU¦h±9K<Ç¨9$À¾°TXŽíÍ¬Ç½¯Çdw e7�ƒ’À´t£ñ12äÃdw²Ñ(.Qþ„70¿0~#Ü­1Î°Ëµ•ðè³%Ç¯™L[¤™×€wŸGÓ<¸”MTj:]�ï>æ0ÂÞÁj×îá©AÞŒëÜÇq…ÁŠ"'drHÛ‘Ik~™!4€DØP¤…2poŒ3¼Å!*Î_§1À#bóæå›6u=²fM½Fžé«ýñßƒ'ô‡<Ç~	êÅ(Ø E„°j\…•·Æ’‰BÈ3]†À|1T7~¤èõðrÎÜˆ‘ùé‘á«eYâ9‘J¨j‰›ç~Æ¶çáŸ7ï–O	ˆ-·ü¥¤Í™G{wÿõê°Rië9÷¶šPÇÙÆ&c�¨1~@�ŠvERåziiV6¥yˆñÍß;8J€éSˆ;@G•ÒµºÂ¢ßã³4~¦ûÎÛ~—¼ÔÐùª™%õHUX.¬ÜD–2+NÜ†¢ã;¢	Ð�pÉÉ LýŸxžC/<C½xº‘]1E©
-Šn@ë<9K&¤×CÓŸ½^Ï•ñ¥¤Rÿ¡T$ñ�|ÏÑêyƒ³¤s´%u‰Üš¬aR^™ï1½ç2Ô¥ë¹_Æ’Lì@d7ßþvÆöT\rúæ dzÊ°>?Ÿ‹Òß5P„häA$�5”IsîªÖ—£TË¥ETßÉw’5%Ô à§ºøT§´¦õpˆvRIO‚° Û~¿È˜l	 úû£ñþ„,>#x„�ñ¿Ò4í�TÙÑÇsóé ½+š	£�+‹÷ŽUÎŸŸ÷øH¡hQYäÈïwxê$Ã˜”™„Æ„`ïÕÚ#ë¨Æ©x¶ä÷¬Æî7bÒqÐé
-Ó�þÒRk¬wâ°ì‘VB‡jâ¶7¹=eÏa¿ÎÛo¿Ý88–>€àÈ�0¬”ï×µôQßvÁ:T‰çØÞÑøC�T*G‡m‚·z§¦*› 'âmz+HæÉ Êo€Åzxïgíº…ÅÛ	¿Ñ ¬bPYOòŸûaT×…¼Õ--}Ëš–@ép³^õpwk<œ^œ]½š&ãôÔ½=yhÌ±Ò¬þ¯C¸à9T%J]]™‚É]zõ§>ï½æÎ»S¼Í6éoð6µŒ—¥›£]Ð¿[Hî–ãoð_TòŽGž%øÈ¬í¦Æþ
-	î[°Jºó*¨”éKAØ´Ü%Ø>¼+€|l•zCë#ëLð3ä›r¡†N]mx`ëÖý(¡•!jºÊÐ¬z@ IšòˆkN…2Ù5ö/(jîYVÑ¼_zK¿Ëè=ôíd–»]ò%—¥¿wKógûPAÔ-ºÈa©°D¥ßUbÅU†{XDô<“eFŠÎÁeæû›£s’K@mŒ“’©?<:”¥)ß;gyÑØ?Ö¤çÑ€e‚ä?Ü~Ú2 „ªÉÓ”–ÕGy?`ð5	$MÜØ©�€`âë§Æ%™xŸ8õ 1 R…Âž|þ®2¾ç,ì°1N–Ÿ2,û•¥â´`¬X9Þá~�eBKû›àLÞîÖYðq¶ 	þ`<Ç¾*–—ÚŠsïUw|á:ÄWóK|Ü¤·l/ô�Ö(ºuh?‹%±±ä>0èò:JR'£Ÿz²c²_Ê/YñJÃÆ�VÚ§œeg&°0ËtX	À<È%EÁêÀòª‚<Öƒð¯Öµ8k8](ZÐôö"{g–ãf±‚œØ¶n]Þã#JË0v·! ñ$ù*a� ‡ø
-êZ%�œ4‡ÅiÉÜ#z%2µÅøbÒ„ËûW§â¹[Qq÷1T”b†'8]ZÀÒ¥-8¾G<w&.—¨44É¾é`gÛ@Y›%ç}§‹Â¾¯äyþˆ{ÑEÛií2�IÀøÎ‡ÚEâ³¿@œö[�2û¶…’hÑáþŒëÍ{õ0cöÇ�…n
-»Ç6üè;³T•†ÃÏš¨ûVgkD�²Çpìz[d½¨e‰GÝ¦‹×­Ð¦ÜÓR›e–Û9½ßæø…¶–Š‹²ã�H2!<ÏÛ•HòÔdK–Ñš­ÿä9ßÄXzÞñ6�'E� cºs5ü¿Fiì7¹ÒP'Y%‘6í 6¸M5þÞgë+*�¥·¢xfºä,½¦W*ïŒþDDë@ˆ¿o¤åÔùÎvMï•÷S�:<O}1ÇÛ_†·÷¯£ý›èb¾ÊqÔÿAÕè ¸s3 ŠË1|ènÃà	Ãƒ¬Â5æí@’›%¶�:3…çuèáž9§�"ïÔ}P-ý0Š‘~«
-ú#.ŠÝ&Ù™t¯Ô‚"‰ES;�dEy •¨X°ÚYTŒÙSF÷ôvV	eY,Ý	ÉIdðé{üc?gž/¹”G¶�¨ß—h)
-»IÕPT_¼÷¥úp�·H”F½=OYC:/ŒnëVß?³‰�å�Ó9ß_<Ã@ùð‹$~{úm!ËÖE·|æz8p°Òm¼cßÎ¦Ú �äXþw4K}\¤õÈ¢�ê]]î"Æ_œqT±ÐáÇ^y¬d‘MÅ©6À¼†¬Ù`ãIì'dŽ”¶ÉÌzÄçèÙ\†
-‡5ˆf>>Šÿ¦Ms//:q´ÃÉú
-ËÍœBÐ·oÄINtÉ’êÐ‰‰Òp)Ê¿%¹=OuìëSëç•ôØŒQ	+–÷(n­©á&ØD
-’t†ž§é±$e˜´(¦I„]H
-õ9Z6:NaÂÆÆe³}Ž(MÒŒSŠ,ï\ÁÎjôÈ¾c½¯/û{ÖK×#DðqLMðÀ!dÌƒl—ÑPXCv£Ü´6ÉÐâCºÁ$}&5¤òÙ„)Ö—,¦ìGZZøÁ†ó+ÄlBYU_2�F8@/ë²;îš6³:]¦çŠŒ8k¦Gü:Õ�Ÿ|;Éq±9¿+ò÷½,1L©Üù¨$|1÷„ 3aÈ‡:¶ËÓeé
- ÆL±jj‡B¶Ô™‚ècf&R6ÿt�ËÕÛÓÙzTééÑ¶—ù³Žãû@]AäŠÊÂÔ@?æ•+whŽZ…‰(ˆv›Ÿ4²©NiìÄPsÅè•	Õ=âpŒÎ2�Y†Ãl@ì|NÚ´ß‡°É',�èÍ¡”Ö2ëÄz·ýo9�›Eø£X}��ºº©¢¤ˆ‘O ­B"*ª­G±k¿âè“
-(Ûþ¼Ìå-0¾Í˜lohj2ZÆâ£vÎBŽ6ëÓk½ÝÔ;¼Å¨lg|rÌöôØ�/Ùª‰LÜ«@	Qv%Þ,úµ�$ùvšçnÆ_¨ˆ¤5¸TV�PÚ ‰ª.¢Ó7Ýä\Ú™thÓg£äXãÎn §÷ýG¼’‹9§ç…dÛ×­s¦9xìHêÄ	9GÕr­†;²
-ÆDTMg'mëÇPAV�òÒ‹˜uâû6—zÏˆ[ín�ŒÊÒŸ°ÖKwRÖþxôáH¦–YÔü˜	!]þ…ã¸,Ó¾
-c³>Àó:,~‚Ð1ÒúäVBÂBTR›š‘HÃh´ õàmà¥+hªs(2YNIÒƒÝ‰�lg½^�§ùeÊ¼Ê2rÝi½ÄîSË›ƒ™f|åðü ^û.Í°/qš34Á)fI®(ÛX“§Á´À}!–Š ÞÁ^Š‰]ÈzËècàN xb�»!Q±G'ìXü²ÚZb°ó^\ÆT|4ñ4íV =`˜ï…ç7$;¾ã³ÃtÏîÍ�Þ54¾À%¹¾ˆˆ°žÁíŠ8ÔÔ1ñJ!ÌIàvpz�ÊÃy/Ï	k‹óAÞP¯�ÖãC/p;>b÷Ž¤ÿ?˜»ËpºZ<ø'nUÊ‚l>Ër½-šû´nçé.éë/}ï½kîøÜRQƒœõë´Æ6è,#q¦Ù¯Z™¨�Ír[~ß n
-Ò‚©ömî+r{\çç@»2�îGÉ9ù�LÀDY!‹BþG»áRÃOµÿ—'N ç.®äd.N[�Øé«ð”_³áÿ ¸ñŠ	Õ¾‰Ç¹aItÀ!±K¸g®¬ðÅ¾OÙ;Éû ‰ f†ex<ù«U‹&Nï#ä|ïöü~¿›Ùät Ë„Ð€‘�p"3Œ.wÖès%{Í¦¤wlŒ2eLfFS7b’;:±csžh�\ã¶Þäå’�w©9Íå©þ‘¬hßÉk'Ï¹ù¶Ï\˜aqšfwUºØ&Sv^Ù¼9‹<@¾/�„Ã{n7§ÏÉ/JÌ<ÆbN€\ÿÐÒpààií¥‘¸ãæWÌ<OW�èªjïiŸýÃ='arÃ¦¯„@‡N7¼äýfR‚HÈ)B€„;1'SóB†§>Š¥ßª4ÃícëaÄæ�¿Òkgxx©‚@©À03`µ&ÃÚÛóÓŸCI¡K(ÿŽÃ²™sX…w#–y‡iS²Cˆï8E€FÝpU¼ÁE¸#Þ<¨š›)“„Gp¸¼©÷°‘34–Ô÷etÝñÑÒ
-ÊÊ£’Ë±Ý®!ù´e*cYýhÓaØ ä/ø[€™ý*0_-`\ŸU=É[P°pù“==~Bï¸g0‰åÀÑB«ê÷·u|8Säfy±oï3¿þþ@¡'Ü�³ù­ˆ�B÷Ähbo3<"L)tÔ>CýÕ”–¨ƒ!<uÏÉ½8¹9C»Zc2ú6îë× çô xH‡Ëóé�`xIŒó”ájé)T)Ïy¤‹›õ±	˜9lx¶pšèQ„/ŽãyH[@¬u	Õ×wÖU¸yG ys¼¦Î£ +‚˜3”‡Ç€Fè(ñµf�îß¥ä4Å´]3t9\õáÛÒ¤¼9ïÉù—CV!˜`J—¹ÃMx+�¤O‘¾ÕÑÚJ7£?‘ßñ¥ü÷Öƒ|ÞÃ¬õŠÂMC'SƒÏÁà?Š	ëÊHn¼bØá|9êçe2û_–Ì~ýà«Ï>N/9_ÇÑL©Bës{G’K*»ÀÉ±³×>1uNòù{eÛùèÒ`Œ ½ý	öë9[yp×àÑõé°ç)Û¶^6MÈ‚,¯¢‚RIÑ)Ä™ÌDÿpºá%×j!-—Je|P$åtH ¾Ó×¿âƒwÊ€]ÅŠìÂ èœ��Ø|:Ëµ·¯=—'«<€Ž°RdÏ›ÂÜxV3:ñ:¥$ûF£� ¸_P9“f¬Y[úbçCY…ããìo,²Ðw¼�‹j»ãÙ™‡FSÔ”�´'Øò2¯ùæ#Yv#* >ÌêëYÊøHÁû�PZÍëf ´”0/ÏÒ!�/ÞWã~#NÙ�/Ó-îc9dÓøõg?t	P¤íz&.yGzâ©Û†û8V[¯[¦ôÍl¶÷%‰õt@c­æX‹½¾¢—|büÏ=“K#I}æá´ÆöK)ŒîSúF”ù¥DmPVÕ�&+ú@DBËh_ åóm—-lÌ‡È¾¯ Ò]8D(H˜e`s©Y°t+“^Ž·šB¼'^½ ±‹ãdüÌKPKäEØ!‡AÒ&xÇ…ÖV+ãrÖ.[}Â÷Hà]3ôÌë¨û-4yîßYB‘Ž=‰xq'Œ`É±(C™»vxäÉ³µ½©©ÉÙþÜÓã—/]8Zî•SeH­�JÃ¦pø/Æ63š†u•ÈscY=Ó!x˜ƒWœ$.�¡vzFc½¢Kh×ñ2oW þ†å­ôÇ*¿tFxˆÜ“î‰À	öP<£÷ÕÜ™í›ÄÑ‰eâÐ•>Ÿë-ôW®A�â‡Qñx¥À2«TÚ™wk"cîñ¹Éõì{áY�+›�·©ZI‚ûµTW“;ÏGí=>r¼�D2ÞãÅžÙ“}ó—¾´Ëíûàé.÷1]$hÞïê ÚãZ—À%‚Ã½m×Î�¡ÖúÝ‰Yn)Ñ¼‚·'·�=X§ ã‡€XEÇ¹5k\ËFÖ6½µ_LçÝøJžÓ@Jõ ¹pt"m¹´ª*µ¢²Ò¬Á$Q¸õÔ-`°ÞÚ½wWMMM~2†çà	WÏº¬+‹Õ„¼ùåúX*²y°ÑsãÃÇëŠ‹ßQÏwP™€’˜ëbä‡DU§£_R›;Ôùa¢ù´±z<:¸“+ò“íe	¼[œ„Ç/—{¤ÞÓŸÏNŒáâ@h9.â<„cXÆÍ­ô!àö.ØþnãK:ÿ=_þ÷jXŸ«]¢¨±_gø¤¢»³
-Ý‘É•Eâ¿§}¿Ù„Ž0ƒ#ÄÚW l3¯ÇMìe8ó2Pý]6«àVõ#ž÷Xa±Ø¿ë”±èià/«/¨Á`ê:¡gFbñ¸½c4ð¤'­œâƒ ýÿ"°eû?ËøÂ�×Í.É<qxßd±¯è„°–k:ýôSGö{\ÁÉw3„0]I%{t\)îH%<m[ÓMMg(°ë;£éØH"kOú\R*š<Ýˆ‘ß_}þ©¾@Yâm|ª±"ÆtWƒ$N‹~3¸ØBEã^1¨›ÄY0¦õPí­F ØÅ
-• »ÄPºAÌ� £ÍEÙõ•6÷ÊÁcœƒ¤Ò>ÀÇ6 ‘õ¼­Ñ/Ä´É-e†:pA ð–AAV ¡y‹¤YuV4£~>8Hw óUùËBû^Ú¨x½�J“_�äjãš^ÝMšUžÜgº�©ªìpÛéîöîçÌÉ¯,¦ûg5öùù#V¿|ù¤A¯‰ägþ¹Ê#UræöÚ‹&Ùìâžæ…n2I9M0by£
-åbÁç¾Ãd¨Ûc!	:Y¶‰áéK–«åcéc([ÅäaoÉ%²4ç�@b)­3Öï¿¿øð»5­W�³ö‚È•X™É›0ˆÐý˜²K`BÒ`³rå||Ž„žöQöL/+o¨+ðdÏléÔ_×Ö‡³õG:Òs
-|uÈl:ƒúðì�~Ú@?Û÷Þ�ïF“ƒB�ÔyÑÿÏÝ{ ÆQÞiãÓg¶¯VZõ.Ù’%wÙ¶i¡Ä&@$BBB
-Iîøß%w!G:	%�jìÐL‘®r—¬ÞÛjWÛËôùžwm9†�Ü÷]À„ÿ$b­ÕîÌ;ï¼åWžßóž2H;1àhö³<Š�b6f÷Ÿ/;·úƒ±žæ~¨2Â¾j�H˜Ý¬ž�:*æ‹¥ç¦[Û¬¿ÑoÔýWz½zWLi ùÎ¤¥²ÝÈê¾Gë’‡˜¦ââìÆ�Ï¥ƒŠ"ð&³–~.ò	#œe…KÜŽ©ÓJòùñ˜V
-ƒÏ‡Äm§ÞÓÖ=½ù|P÷ð{ÞxñmÜðe'(É}S€¥Ç 'Èæ@‹tIá}h·ó)»;\ãuÆwŽv%�‚×„�Ñ�t�Éç#†x6Üj	 ÚÝcüVŸˆ¶èá¤Øš2Åz¯”Íb~ÿ�ç•ÆÒr †¨UW”fU¦~.VŸUààï�ƒGbésP‘é…2Ù½ëêÙE¡?"åò"ýyøRròÑä+ÑqG]^²\ŸñL�…º]°Èœ‹¸Œ+q��ô`]ž=Wšî@²KÖåº2:„ Û¿Ú1{¹»`ÊyÓR!e»_ËÝ§XñVT€ùà//D–ÕË	æÓË
-ý½cie’òEã¥ËÌ¤¡	‹Ç9AÃ-¢§RxEÏ¥}Þ1_šu;Ú@ ¼5PèÜ«ïÙÙ½tÎŒ±j�'âÅ �nßé¯(µf„’²´D±n]II³ŠrrÊ$F*µ×Ï²FRéù¸×r»È6p›Çˆ\î¢Îc}— èâ‘ÑÁ‰ÏÕ”G«ªªˆ5ÉKêôs“ßG#ª°¥Ë°É¹QDÓÒå’º*aY„AGÈç…Zªƒçç¼³É;O[¼î‚å=Ã“ûÄ’o�ÐaˆàeñÖ+ ¬¡ˆÄ\È3ì(Ð#ãÃ[K}>UsZ_¢µ&[gð”0.ëlnl4ú¦âŒB³>l^£6Íjï‹)³‹gÏúUï°é¦÷ÅRí^‘› œÏ†�C#€¢E†a%(‘}¶ÎcÇ‚4}oh'µ=å´QJæì”J‹¨P˜´¾1¶Äôg>*¯Ù¯Tº
-f(ryÁ_¼’ñ$R�€©á²³¶Ã£²>c<¥-†Ä×ZäZ.³QÖ¶n·ÔQ…‰¸á¶o÷©)Š- LõèŒ×_1~ÐýÑŒçBazLgÄƒ¼!'QRQT–Ëçû�¹Å•^ÛÈÉë[‰tÂ‘óC—-SL™Écò“¿2Júé<Œ±<lÌÁsêº?èöÿßžÿŽé4qìH†µƒ´ú ²ÊÝ(õ •‹ÒÖq°—cQ¤…jÎ­Ý…‘ä	dl6%@»‚´ÉwðV.È›šµY©-\wêøò¥•™–±ðU^ËÊy²küOWƒ}j# ÷�ï	oƒ€ÁÓÖHV¡úŒšƒ0CD“Tà¿/Êa1·©^š×¡HvâÐ’……�.g«“u‰wÞÙl<}Í¤‹+ê Ç‡R¬À ¼žt#¬'¢”ü*áÄ=½q2r¾÷œŒ%9®|“Rnø_°yÄ{ì‘ãB†áÐò¦tÞÔ¨e2$qe&ÚZw›³ÝƒÒ¾VTŸU"ö
-yl'TÚ&Óé#ûi54- /L$¼†AÞvâºÍÍ§7‰"IÃtIØÀœ>›˜‹Ä£5K×(Aöƒ×‡PP�ÈÜgÄI£“Ñ½vI( Ã°’¤™jzn•óªª€Ÿ¤4òlZ!Z¸g,¶0
-Ì¨·pÉw,ò:™'‹›8³&—�_ÝGÙr‚û\°sÏ g„ä*´õl>EUøÑ·'bÍkÝ¥È“]§TžjX¿£´ðk¢ìU±ºqJ¤?®;¼bœ¼ßsÒr„â#Nk‰¶“^Ð…@`<ü’OèëÜ"{™fz7Ít¿pCaS$Qèö	¼M;ùbÌ\,¥5¦£Óo¤ßÍ£À¸'Æ®&” £mÙ~½ýõ>O�ÏÊ‹+¬žëb]\$�añÑ<*€ªÁXú"Ÿ¯ïk™ˆ¾)Yˆps"èçÅ|ž �a›Paùmlt>$nA)É–ˆ´é òqèÙçû¹NÕjTP­Lp‚çÝî½ÇþÕK.‘™JéÆå¨Lœ8F¡Ñ”’+@ß‘»HšrŸËrí•(~˜ý|5l1ºŽ¼»]ËŒ!GG’ò’\
-PNïé½û{ôïÿðâûÒÔ”<Ïî¦ÒFßÙ•þHÄs5ÄÐðÁ�4ïÖÒìöÇ«ldB‘›™Ëm¯,¿®ò×a`�Bèâç¶Pâ­ŸtW&6®÷¿Ä™cÏ[�DÙÊ‡€ü
-µ�$®]â‹#vù‚ÛQÕŒX%!\7tÄ"#‚åÈ�FŒàY^È�û™÷ÙËAôò)d¸A×M¿@«ñð‹c”M‘9¢5Ç0ýLZ�=ã1B‹®Är·3uE’Ëß�f*??2V—/Z% *	$cý}·ž�ú«ça72zšåæÇ[i³1”dpí&o"ðo®ÃDÚ#6Ê�ué`=’y½ã�ŽÑc¹¹.ŸÍ&2É $*lTèÏ��*�=Ý¸È�¾™mA%½5êDÖ0©LZV¹_,Š¦Õ¤“Ý6’‰è¥+º™IGZ¡$V´C³™¶Ñœ)0ºàƒ÷�°±u˜Ó8à8I@áðYºJÔLËP\âh^ GX:­Q¾y
-5�š!pâ·�£íd'E� ã!á’ðÊ‰ŒOD}E˜¬• ñ]"™Ò–±ÖãwýrvGL*%	baË@ê;Í•rß0¢¬¹øC¥ÆÐ*¥‘ó_‘¡õ*Ã€qÊªü0Š!d²BAd²g¡sH’$R2gœÐ¢ÃjiÑ……ÁýC�êp…”áƒ't›ÇU&`l<C-8{ñõžŠêÇ‚Ò²y[,Cª	2fvó„©ÙY­}}[›ª«³¬_)N/j�ÜîrÕÑµŒI£ñ4­=Ò–�ÊQ90 S³|e B_ì¡©Å0Hœ(/@%aÒ«å€{‚NÛBØÏ
-ÃÛŠ |t^Äl…6ÚT_’+Ø“†U€pP1ô h›ÉÝpâú3ÜQ“NÂ³JB8pLµØŸ”GÂk”þ¹„ÉîÒªü i�•µMÅ“)°óÃ:v@´ Óá¯_GÊ+’ä(³ÌË9ka|Ad7ß3|kï¸Ü?vX‚øQ…Ë–(õ:RwbÅ)u8Òåv{25¥ó)`w|•Þ><¼w¸-m¦/Ç¢f(––Ÿ\�*0’àØ	¹ô|Úq‰È°—bpÌÁŽ×‘rNµW»ÝÙ$‰±>þÓD'<ŽÁ™ë»‚/¿0üñ+´¡¨’L˜z&ò\ìîŽ‚ÙKÊ†…šcó<°"‘5c;¼oÜò×Îƒ¬ð—Ñë! üüØ£¥ã7\éJu†ÓEˆ;hRŽE_˜“Ÿ“BÖb™Nq_¹úYÅÞ¼dO4ãÛ;‘ð½v •ZVã<u?©©	%ÉÙ
-@ÝhBå—¸6¤‚È‹]¶M3™§’TæùÅ~G6Ax²ç­ê<w¦Ð!Fîý¯„¯¾üâX1Ül`›³›ÓP,éãxÛe@Z–ƒ¥_tRŒ¯ÀÆ{a™ŸkçmHŒ™3L”ê!f>ýƒ²_NÔtÝŽÊ=�18 bVq°6 FÄ€žx)À™±¸Åv„9e„-Êxëà®áø¬Ñ5KÝ§Â,Á”>žÈM ¯É‘i~Ûh,UÞ“È,›µx…¿gÿÛ#‹/ÖFF5Š8VÀû mšÂv'~ú ÖMÎ …()«°8ïïm•�Ü¡Ìá¸²–Ô:T>ò¬À`�3—¢/f"< €ˆÙ…²îÍÐS{Ù+WIáÍÈ$^×Œ—L¸þ”ZSë¶~áksT“iÔ)«ü=€�5"!z'8å€žêê	¨6ÈŽ‹çæØ2ˆm*—4�ˆ*žüÁa?�üK´±“Z&Z IòóSyØ8]N‘�7ÀI“&ÙûúøG1ì@b™Ã	¹‘géK1öæ#An
-ðt#$Ñä!PQÂ¼	%•W¡„ýžóÄß¡?I—ëÿ|Ø¥'m*;%S(‡ñKs’>Õß18ï'Ýâ�¨¥ ¤Ò!JjÂ`Ž,„€ÛLx°+ ‰e–»¤¾“C„…(!RÝ0j,‹ŽÒ=3|6…@'É¼"Ÿ{ðwkUV‚(^~ß~Ó×¾—ARýô99}º3úú[¾'[{ú6’ÝQæ–{¢ø±.²‹Êéwuí’Úø¶ÁØ#g5 \ÞŽÑèq¸º%"Ï¯ë<LFQÕŒ·—]‚b©ÔÞÑÄ— Dv+b��:çIºÆæJoô�Ç†›fù!‘£æ" QA+–W`èM¼i>“ñòCö9‹ËÒª~µGdó`j*>~Ç¹&±êÊ7Ü4O§ULI¶ÃæÌÉ†¨OX:bÓL>ð¸$l ZZ¬¬±vƒðãéKë²z—VUU•²o0ð�ÆÚ_‡ïlV>¦0òPpÏžÑ‹/¾8›EÞý1«Ò™ïE©ï¦ŸÞ½âŠë<Ÿÿ¼‹L-]ºTXVZš•*Ðâ¡�À	 uuáš˜æü¸IµƒgÁOSép��s%3²Ü‡¸©*3zÔníZZƒÃ!M€1*>É¤Ý+¨y±ƒ�«oÏZr¹„¿}—-¢`…ãô'Òë?«7ÃÒ“AÞ‚*rðÖm�‚r I.kè#÷àÓº(»5“•¡ä�E‹=¬©úc@a!Q1¡f	1ž6‘ød/kG^3%�T!\Ydšx‘g^T5s …5¬�™êè˜JÉÕMçÛ(ï_»¸ÃÕdTý‹OvOB‘YÊ0üî‘ÉÎ­”¥ÚHéD‚§¸Û0ùnÉ¤X'Ât;¶#|qìÄýž¸GI„� «SHøYC×X»70äã
-ƒÚ€éWJJXF•ñ¿¿¯'»é#ñ‰•£ðrà¼X¯Ñ¼Ñª+Ö8/ð£J\›´±ÂäXz8�Ð âŸl0ƒÍH>ŒÄG  }vÜQ.õÕ%îú%•¼à†pM†bs“j¦aAaÍNc";¯ÏD'ôÙ�íÔù%––©ƒ~88bQÆ}2šÍ½cÑ\*�=}¡aÊÁ/¡LNó¸¨E»ÇcQ^p–£­ÏãÇBÎj¾á”h€gì	Ã ¡¶ýx__“«â;-žyXó�ð<°?’t(šu7øbˆ£<×¨�ÓyLÕ­—QîºŸ£´[‘Â»¤^¨³}ç;e¥½»çšf—{Â[áN·f%×Ã›²žº}s}¯íè«®É³ßˆRÓ+ð9Y±öˆÎÊ¬5½üK_ò�„©•ˆÎj ¸y“SBxßKAB^Å&usÀ‚pXx^I¤¡ÀÁ}9ƒ‚ò»wv>üm�©“méÇÏ`ËI—¹÷½žr˜ÔÅŸº½ÊBx}A$Q/ûÚ·ÆËÌ-G”ÚX¹n¸Ö¢}C“½›ÊóÛá:®�áUD�í™‰§�(ªhvÃmT›sT¦E›GS9Ž=n.«¥c um©n=>2b la`Ñ7ƒI34Âªµ¨ÚZ±x,TÉÀ•£€aF;Oµ	ÿÎK?uK‰,27¢üîr‡†¾%–(n9àº`9í…HÚÞþÉÉl†<2¥wˆn: «ÕÏâød\æ`]^êœxá ¯G�ÆYpg—&Ó'ÈLxžë„•Å¨]â˜ ¬Ç~?‹¨¶û§y×+¯ÐÜxÛ
-ÝÔk>xlšØ}º}²,Oé‚´ü³Q	15÷!D`nÖ&ªp;Ó4b2œlÌÍp­ŸE}lš´gúûäµÁï„54æ`œ¥HnÎFÁÊb§×ÆJ�hÕòÅ�==ßÉ°^§¤Fåi�¼ÓOðù7ž\/&b….‡‚#oªs ·…>öaBŸXTÝ‰~A|‡w=ôÓ¾åŸùR¢\,@„À7ikÍM)ä±äI°©ÝaòžÁ…—´ì€ò›Ã‘>0˜É r!?dd’à²¡Ã;âÐ,£ÞD1”F%«¦`ò ÑÃ´›1ÙóP?Ð�ïS	V2G_é*‚ÝVŽ¼N»›O÷“ë|Øòÿøñ6&ÎÎÑèê]‘ÈœÃ£‰™{Fâ3 ¯S>2•)ÙL`5ˆF½›Zû<szòŠ–˜�BP¾I±u˜í…†n=×ÿ’læCF¤ÿ *Ægg
-QUÞ7>þ77
-’MŸ-¤]B¡�W"ÞþÔ[JMá¶+æúFš‰µ†"To:xv õQ�7ü²>êÜÔ¬M¤¬n�­°�X²q”p9àã44—Ï‡ä‘Á«‘¸ö§‡~c³è_c(¸‘,ûô¬RoÖ7ü?{X�	HÑhŒÏ»x„YÈBõŽÉ‚r/��ÀÐV€äe¡ÁR•ø}™]`	ÆvqZ�êýü*|Ñ`¸­‘LfK0¦ |”Ð#F&+”¸ñ´FÒ(´¤”ß¹ºJ9Êx+ê‹;(Ê‡ªÒ ²%d¯ß�_ì´p–Ói[t<”.ˆbgy×á¶[NXKgp0H*¡ÁTa™Å°~
-:Ð(Ñ�?Þ²n]Ö#ð$ ¹nt£îÃ ®ÞÎÇ™;Nx7V3’£ºnìÅóÔ�b¨ä�B%.Åh‘LŸ®[{�|…áI-àiÇ…>gIé’bî–�©ºs¿xë`ƒ�Óå>ëóÀvy×6ø¸@"G•Bð²ÔÍU›N_üº¥ÙSáXÆ2»¦ßr¢'©?N‘½Â«±i0PëÞ Å4Gßz¥7®ÝËX‚ FW{}LuÆ ájÓn‘·Ã{ýè)YÆÎû;ä>�\4gNô¤
-…Až:$Û'§ßñ$%›mm’§?F
-ÈB…$%¢£|Å¦ËëÏ<Úí³ìß¹xòZ‹šÅÚ¼4_ ôwâ$ŸÀ7K^i6>‹z¥pDÓô  ò˜cÖqZg#áü<ÕS·
-¿ð{ÛÁl(ôíØ‘Ë§þø!ýã}Y|m½ Í7ì:ÿ}Cb¾ËÛØïò{„2¾kc­ÛÃ“©ïMiüíUeù_¯)(»h×•5ûçV”GQ-õâwƒØ^�Zû›£#ÛGŽ»|>h=2½¨{Õ6í9|°§õæiv>‹Ô˜M¬•ds�­TªèœöMíÙ�œ|ì¬BsÐ“cý
-ºd?„U÷+ÚàÂ¢C„ÖuŠ¶¾ˆñæÖxCs$[j½19™HÖù"k)~Á‚ë\#z‚@u†3 V´¨°2ˆd$·—‚kÝNî+zHù–½hÖ�/÷GWBöÝA®=}˜vw•cýœÁuÓŠÞ‰Û(0¼Ç3‘x\EÙ0o®$B«W¯6ÔÎýoŸrQQ‰ò¡”Ü¨ª,J«]M1–pÃ‹%X|ˆæ¦uoëpMá†5ª�÷?eß*Ðpfï½'L¹}Áx9àað(ÌB,®çäèÂ™ŠÅèÔ³/´±ãä¿Ruù?�ühEâ³�²kf¢ç­û<ƒ'ËŒ³·B7À
-p P.T˜Y�6Ú]ˆ?œåXÓv�\IÃTGÕZ€Í–;§./�äÉïuÓêÃ(@èàk"OÝ>ž¡¾ç´ßóûàb˜Ö¸cªÍv*ž>Ýw^dTUÃ|¹€ûA’ã7yö6¾7xÁØÌo(šµr*•nÎáÙTÊøÉáÑ¶c'7?RÇMÏ­œ}­Óß.ûÄ�«ÈBL¨*mL¬›ú›Ûž|¤¿¿S®¥{‰_d†ÕháøÈ&XãÓ×þÈ½´…tYþ�—�“
-¾¿ZlO¿2Ò#”—ówéxq1ìLŠ
-Ã5”M3—æ8a¸g²üµ±0 gyÆ§ŸãƒúwFQÜYu`fä
-€‰9$v>¹V„ú	‘Y‰*ÎRÔVxE£RñÆJÂNÅPvÃ#ëØþÒ�ååVÀ1Ý¾ a¡8TR©8w5¬äÿø‡nä&’²™ýë€]Eå‚žu¦&”ŒPDÔ›Så°ZÖ¼4ƒ§Ã[�Ã²ö¿òÜ”³¤3ÌÛ´­¯A¸	Á×‰EÛuCY¡RÚ¼¯|ã–Ñßº\Éæw*5ÏN‡&£nÈûÐ#”lœW_îóu‡Æ”G_×¾°¢N�…ë�Þ=ÈWoLŸ¡RHÊ3Á¯o“r&U³;ï¨¦;�b.åxj°°‡`8?|m£+g:Ì¬D5Û°T»é˜òT V‡3ìgQ•vV›j¸ÚõKÃ„˜¤#¹'ìŸ“»ïÏ›ä‚YÕ"ïž‹�  ·§øCB Y4ÙHøÅ÷ß§Qy2ùv<ƒ*J€Îƒ�ƒF†¢¼†9i  Ç@õšy(•žc3©õÇ¿€¤Ê\—E»V8&+aé €p™Y…g Ï9‹�.«�‘«~é²²H_Ï¸IL/O½.±'ðŠcØ[aTúµŸuŠ–ð›y~˜TÍ‘g2}L¤|ÁËšq[µµwŸàú‰k,—"¼Î´˜’L.g?v,O%9j@RÀòË^HSeˆ£ÏAUà\¼ˆwÃò~&“6ðí7N%»^~øð¨™¯ò±‰¡L{­�Ú� XBÔù(…ž‡ô]±b0—Anä /<QWÐwoee6<BÚºàÓ7à:ÜÐž5H>6:¥ÜñÞ|×`³Ã¡Ük#·IñDgtF‰ŸÍ+‡Y§Ô�F%=ò«ð�ÍÍï¸çé{ÿg%cq�Š—ŒÙ…Îâ^IVP¶»G-*4›9¡QjšÎ^&¼‹Z8!?)®$Ÿ¬÷zåCÁ°WäE%˜šSÜÈ"˜»7“˜¿¿˜¿Ÿ}Ó—1ªi”z¦-=‰b¤|¬ýceN¡}`lH½×�½_¥ä›ûðÁ]ƒ=›ž˜0³&}>if.gŽ
-î£‰LÍK�m#$qûvd‚Êì3áa;$Á-wÙ	ÜðC=þ¦+ÿÿÒªh,q$'Ç}@–�?À„z¬±Ã0ˆhî3Qh¾ÀdÍ�a°•p^»Ó)¶,ð¯Bí{½
-Ù÷'¸xÚyx| «—êƒ59.Û<à%IBaœ·@, E’’<K{÷ÑµÁi·š´³Ð°$#¶ÆY£ˆ3Á�±ª‡áÓÙœÊ¥KÝ]¯LQ±ñ®#ë››If7¾±{<ÏN%{œiîÞ€dÕ:)vQØ�õRŸËa±Üµ§_�$NÅ"¹ä"ÂÀ.ÁÜÌúZ„.lp�_§D:ÑY$™/ ÎX¢ ñvñy5÷ÐþsXñ7”šâ~˜„Ã˜ÅÙûtÊ‚kGÝ®^œr?’wJa±á\Å±¦
-lM§»ÀaqÁúÏ¿-—šéÄd® BË—cCnXÍÀÌvh`À[ÀæNÈtf5½õŠªµP¯§�GK6ÍòŽlÈ¥“G�ÞL’±›JÆpó†¦ŽÇ39]bn÷ÞéË5c—!¡Î}#ê>�á¸on…¥56®ß�ÏœZÐÈç±Åµ!‹áY³ègS•›)ª2+˜Zâ/Ï‡¾7¸(ˆ)³Ì¸o;úÁX�wgq4ú‡€""}2×2ÈÂsqé†p„K�u­®­M¬®]Ÿ]ô^„Bgy>îr™%fXÝõÄ_^QÛ�üCGÇ$Ñ«+w%<£µ`<§Ím=�Ü7¹.4�”ecâN;|>:J |eÊö9�2¾evLÒ›êóß¸ãä=99³`è+:uNQ8P¶+d\’ûü¨‚ Ô@ÄõêhXß)
-S”¦çT�³6Gg +¥jE´(‚Uº¶l`i`<3`á]Œ�`cµœ'š�iBÓƒ¬õè6aœÄæÏdd2ÉA—ÍIéI¥?Íèåœ¥'|¾D&ê­`p;„U—‰v,¹  @ IDAT¬0Ê$ÅÔÖn[Š¹V38e\aÚSâµéæ•¨–íšSPD»�~®²Ry}hÊÔê¡hÏ™¼—¿u­÷…ÕŒ°…eò*š3òÔ¾7ÊËcO&¾ÁA!P³¯£ø"4%WÂú¸ÀîIXÆ„äSKJ]@/œÚIé»0§1! 3¯¥ë
-L÷JÓdz•TæuÆ%TCF¦˜ÝOX–v/gú_h~—–ÛÉdˆ›››Sè¸”ÌR‘³%£„ö!†‰cÄPß&ê9ªp÷êJJÙ“ÛßÞnÛ¥”ÛÎËG SU	Ôj)Ô„¦[/`Ÿø÷X*.ÁÚœKü�áîØ�Œv�à`Fì�A®þi@æâ¸“WP�º[ÖÕv‘åï@�E£Xß=UùÇº¦Š€ìX ÒVEìß>AèÑyëE@„ Ý$9F¨!þî„':wwÜAYP¸àn—ç¦.’hZÜèë¬´r—?×¾ Õ…2ðÓ‡,Fbcéá>$°™1ud(ædt{…$5§%˜9â{³¹ù�þ6¸˜Ôor´Uƒà÷Ó‰‰þÏ]ð.ÅçGTŸa:ßÄâ»H6ÌŒný ÃQE]×DAú	’š—@U9Á²•™a™îU�ìÂµšõ4Nï‹8\NMÓ‚bTzSM'ÂS“û�¡ÉjÀ¾>�’ó�³/·±<@Ÿê½I�}úZhæ=ÐñØÚÙ.‰ñ¥ÒÌa¡Á×IB4Üèg¿pó\”—:Žì:^˜LZ„d©‚zAÕÕQÕºQ ¾Xé{Z¶þé²	¢_è�›‘9Ø}6`‘Áƒø»Ïü§:È†S»b�¯gûæ0	«ì/7Ã`6ëÇXN Ü”Ä:”8F@ OÑà$Ñ§·ŸDü^BÉ³H—vz·±=á¢\�ý´è¥dcöiC˜LŒCtôÃÜ™¸yrOþåk—9³¡D;Ü©¶`lè…é6 -Uå­UðD1LÙÞÄñ­®yÍMŽ|…å„—`É¹™Mo
-|ž§I›w"sS‰Òþ1F�n&áŠ3q/ëïKØ�¸®î8:¤;&ßŒÚü äj¡ÞøI˜?@õPX0©Õ°„Zyƒºo,9‰…³(zç�'¨+++É@·šñCbP•‹Ï¾	ƒáË0µJ±`—YUŒs´ð’ñ–¦±"i3SÓâo¾»VŸ|7^4ÛqÅ¬
-ù?ùQ¼ÜÁ‡Äœ’�$2qÕ@ÊŽ¢gÀ•rƒTºÎ’­ti•}ð°öqÝJ¿_]Y,fbg/PÖ”äu*,Ûîà�ŒnDX-=lÒÒuX"¯–w6¦å^ ¼~/*¢é�ÛQ.ëFYÑ°rp ´ÏÔª	aŒ¹¸KeôGª§d$ÔŒ›à,}ˆ™RˆYúc[¤YfÙ@Hž:œk�l¼D58æ~úæsv“3Þ<Ð7¹¬æ/„&d Ö]\Qß“JJtpy|ãÍÍÙ…êX(Z‡Ðk�Mä€bÎ¶‰Ò~Ð…]Œò‰ã¸v	â¸uv§=ÞSŠþUI¦fûâ3‘ ˜Ë(©¡¥³ÿšï`ïp¿ì²;ÎC©ñ[�…¾ü»»ÿc
-±hjÝ¿Zé—ÝÎ¼ÅÈ_^…ø¬&6Õ† ®[!¡ûi�Yi?¨É^4îÏ²©½â0é¶e³g8U‰¤EJ™Ó‘¾ïg’|Ò->µØ‘¤Ï¨àEŽép0ÌC	�Bu–µ’„Tâ%5ÈŒ{AÔnOebíCÏ=¼¹¹Ù„WÁ_Y»V½°
-½YŸ—_ z==zó§V¨�¸Þhd¢G¥øJtó%à“®­šÑxúõ—ßBÙr–¡òJÚøQ;d_y.Ð9kìE%ÌîW^Ú*K30d¯‚ÁRd¬Z¤’Msã´‹T±©™›�ðÝ·÷eK37ÃØ9‚ñºAª£‘þžƒRpìfä´¢-È*­	™ÖäÀ»¹O>È~B�™_P¶ÉT ZÌq@QÝN~|"�{ÂjÕªro÷˜¬•�>—å¨ZÓŸ{dïÞ­JEYE!mšK ½:¥Yìn¨§p‘¨ó»ÅÌTÁ'”é y›/ˆLo‰µ	d!ú�ŽSI—ôú3	«öÜW*µ¬A¹±«z`Î}	XÝj${6*šq÷P�ë5 	âäZpãÝžÆ…Còñ8@8€‰¿3ubª¬Fé¨–ü0þâ†eøéX’¹Öc1‚ïÕe Ã;Žso¼-×-ÑŸÝ<«†ËI+ë�ßýlÀlWÉ]iÃÜÅ :U0EÍv?þ®Âœ'eÌgUV’åù»sG•GLûc´��@�39š BÃNCH Û¢°}Ê+/)g”Çà¦ß“Ñ©ÇD‘>;ö(Èrß4UØWþSÐ­¸±&È^›�ƒ íK§û`%_‚çk¨®©Â:‡‹_�H4où5Ó0?§z\ÎÓoŽ­_R�ùj<­~Í·*yôŽqªø- ‚�‹šh@èê)P­'{¶%Õä(P¿  ‡[ÏÕŠ¹.*ó_‹ÉUHÚÿã‹ŸZ¡QœâÔ¢7}=bY ½¿#Â”²Š|
-/ÚH^cðì-”¿Âé¥kX“±ƒ4è,“×aIF¼2z4Ã=2�þ‘ÚýµZè|.°ó�=�ÌÀ…Þq­÷²ô	Ïp_ÔŒÆÑ,¾‡³aÓ2rºþ”@1)À„¾ã¬ï¨,»Š´—�’1³­/8£¢ ¼Â›çý²ä.ÍP#/ÎhXŸŸßdó2øÜå¹’èCØh#ˆ•œØ(¾5káª¹¹ç¯ÆÒt_|T^yQ7ŠYçù�ÍÍ¶7Ãá�ŠÁPQôß¯Á…ò#0Zý‡ª³ÿÂ¡a�£÷Ã©?õç{ÞÜ\â=ZÀy †W:ß–Ép™rN†IZeÔb3•Q¦2ôžõëÏœÕKúž±^·ä¸¦šiŒo·®We4éjŽ™Æ“Å³£÷¹Œ´Õ¡%“Aä€;¥•õC?²uÉ3-S�Fº$çD½F!B$Û,YÕ>üÐÃû¶ø’›£tý<xßD-õ­¬E,"æ8vš{YÿÅ04ÞÖ�ÔX"P‘p0¶†¥ØùœËYk›0Eõ�½j<ð´hò»œ”ú"¬­Hà]jç¬ï� ÒusGF1Säó§ ¢ô¢töóð>?ð|Fâ~„ÃwÍ¬Š‰á©þV�Ií¢5}KkGèT¹3YÈ 9sî‡«û4â^œÊ#;Á.]Zšùf�{jïý÷O²ü0vàÿDbè?QµTµZ’gbðO¡@Ûiž¯1‡‚ãrzøÏ#ÿ
-Vîi#s¿CÈñ+†v¥¡S„…ñ^[’zž¯+ÙfòÌó°,-¨:$®A°9¿¢Éê÷ˆø(Š)xä6N¿7Ên¯ÐêBÔ?œN¤]Ø'²¾¥–Šk‡ZŽêŽÔö¡Î}O'â©$º¶æ
-R	Ï¡¤ÃÎNÊÊl b!C)–§Ò«ó<E3¯½ûWç¿Ú«$Ùÿw\çä/†Î½Ëÿ*”l_™Ÿï–þ/è�£r†±Xý(Ê?×5ãý»6ø!ÛÓ¶•_ž•ï8r9—U*Õ0}ÁªÒ5kþf|�,Š›‡"ç<Þ3ZÚ
-2ðPQýå…w)Šö$žãþ )žƒM«á†_¡¿°³ÀLÍS5.1ŽÍžx;�üš¥ê­PeÂ»V™Äš(* ·"h}ŒjkËÆªó­®M¨ú·°ü‡l,ýß¸Í{ d•¹ÍYæº¬5¦Ôl9>2ã®“ðµ÷ê“æ÷Ê|¾—Ã@™ÐK( Oœ£ÉdÕ&IOFFþÔWèÜÆ˜‘Al’à¹?®9?Fµ·³wÀ¬üæ7Äá©ŒY:Õ@ûý¢¿­M¶x.Žx¾=i³œþ¡Ã5ß>èþ áM–ÑT„LR&Gv¯Ç4Åê$×ïk?|\UÕ-ýTü­æ“ê7? ”VC ÆIêæèª6‰ ?¨	=šD	‘zZÐD8>t¸Ù{N>ÒÐÿ×ƒXš#ÉA¸:×aq@¸–Ú¬§Ô§ì¢¾­¡ÔO*ÄNP¤õÂº:Û �4jË’¦Séð–�ðS@”	¼u…jØÃ€�ƒúÁ<¸ó]X že%îqq²'aÊSçÛ‹ø# +Ì0eÂšÀoyˆ| Ï!{XÄJ‚¹H,°©•þìâF\ÕÇº'šì,»|(;‡ün2g¬îÚ6ÜºÑ²Hi4™À!,‘	§óXÝÂ…žƒ�Ü†ÅE�ù*Ÿeyæ¦„¢I,Ï-«àÅþ,‡±Hì¨ó¬ê~O ªLFÌNÓ ßþÄÜüì ~2mIvëwˆÂ\ˆi†ä}âEÈdA6ƒ),Éñ^þÊXb+ê‰qœf“ü#Ø%ŸB…Øh"š‚ÅzBÉ™Üé3¼¤©"’?¡Ô—‚/c"–
-´õF*¬°À€1Œ½ªyk&Á™±Åpù¼`‰gÏ^�ƒû:©®fn\´h¿«úÑ@GÇü’ºŸ n½ÅR5ª
-€»oC
-î™èîÉ�o}Ãã==ëÌó�Q‚Cx0¿¼p x!^°¥w‚<Þ\ZÉ”ËQýà�–•�m“öž~8,àdÍ¸lúeTŽ)s;¶ïzÃñjñ”1·/t5¬”\cä ´IÅ}q°Æo:z¶¶Å‚ÖÍ7ÝÖ�Îè5 ØÝ^o¡¤Ä·NhÆ°¨slëÖ­ÃØ|³‹/fâR„Ú› “ø·Á±¶Þ
-Äx+æpšfüÔ`­o„’;íÞœ—©––~
-!ŒÓÛøQø÷¾Þ€èÏ…¬¡¬J¦b z=Pn²Çð(®I&"yíd‘ÝjØÚ@>ŽqWëp‰G×_‡·a~þ¿ï«Ã|„ÞŸ	à‡Ý?Æóâ‰C.�ëÂ8úÒÄü>ã]Áˆb[ÚÒz¬5IÈ`àv$‡�ïÎ®[—�×ëOð­[‚ÔÀtã6A`áÖÑp‚å9™*}–ÃQþæ½÷l_oxCY™¼m<Fñ–�J'„éñ>ýÝ3ýú¾-¾¤á†žÙÃÑŽ€Îè[’šù‡‰áT÷‚¥¥|
-,~}Ã	H?g'CPOÆ}v7âÂ¬–åñ„äÅ×³K[Žì_U¿è—¬aÜ}¶9à
- Ös¥¼lªæö‰žÉõë›³ç9zt('QàYlŠô¥°@×`â‡EËÜÉÛ�DªßjÆÏi^üÿ„ûK¬¦¦Ï|iµjÑ7 c>ePU×�ERB¼hÝ”ÊÌ§:Æ×2QtãN?¹È¡°€
-Z'³áSƒ�'È( a;d~˜Ëâ*�†«ymâ]{Z[û×æV ÛCóNŽê@� ‚ûþlk®™�?ùÖ@ô¾¤˜Qwïˆè³æçµ:s%Ö®c`<›”,æRFµâ!Gq1`dupëºz–“ƒÝŸ›?“”l¿ç‘½¿J “/èí3Ò'ÀÁôˆ´Ö,f{!êv£žRžÖrØ"-&WRg­«PnðÊàT›Q×ÉEXû}KË‹5uzAÍV	èR.V—}¤oøu€îê�ÏðRv!-g
-[QuN‘C½þùA*þ¬©½ôìóÎ79º,d°;1ñ‘T¤i¢0{:c\¥ÏÒY«ð¿ŽÄZ†2Ø?ðÔÃ‘ûo¹%‹õ}‰ãXÊp§uó6òà°1=íªÈÛrem�üú`Ñ5¥,?öq¯ˆKÇKÁäôÜzQŠª.²N_,àR‹XlXÍ0f7ä7\ßàO‚ÁëÙmð<Qùl¦Àé1@*ß³cÿÉßœ™+ªÁdz’±³LŽh¿‹²Jn2ŽÃZD½ŒcöÅ­ÔA
-Unj6a^<™°®«ƒB8¬TÎŸïÉ0×ãñ GŠ()Ï–£·´t6ÔÖò~‘b‰ùatA/•l�ÙÕ©¾ºµÙ¼ÉæãþóiÇæž°³À-V.Ì?A¨CTv½�ºK�ý­Ä:’‹Òù£øJ–ž ÉÈQð»•‹¢» ïe-èÓNwFÿù¾$Ü¦[<€l"h’I?�mTvå»V©	år�½¬Z¶æ’üÑxh¬Äí–oõUeYuÏèFƒ?Çå0ú¶¿d�’„Üs $.Tn1˜²Ì%>¦ã«;¾{Õüâìg@û(Æi^ÂÎ^�Ð,mYQú¸Î›�¨ý±±í]G›U‰sM·íÝ¯�’ºz�ãþ°“³Áßð÷I<÷ZÂ¦í£+ÅsÌžåÊÌüÌþnÛ©RÅ;O;8ŠccV'ÐÝ(}Žkô¸iém:+îºsnm¼#˜žKó\O�K¹­ÖkÏz ä•^Iž	â�ÒF?7M~aïy°>îÓTú	¯�E¥X,j7Ô5¯G4ï�Éqì™a³ý�îI"v'3¹ uÿŽ[È³Œ­cXM9EŽ¾±øíèW0ûsXuônÆ„”ûY~Gnðò/ßZK§%ÊïK~¬(oäíážž55¥=å)ry£SÉäq‚xŠ&r1/í.;JEaV±Ïß³¤À[Ô:nË)/w[ñ,Äiu•ØÌ¶¶êú¯4Yœû’Ã±ØÔ,(J�n~˜ê«ó `?™.a-”W1·cþI"¢©DŠ’MFTM¹=ë Ýnl<Ïéˆß‰ìLÉ²ZQÞT•
-±n¡kë¯}“Ø(É:MaR–ö‡ÒÅ–Ü$‹MA_™1­…Rý½©´òÇUŠ™o£­åèì­³
-‡›OnÌäû¥#Ç&)Ÿùº:M÷o}øç¡;îh6£i¼÷Ü§@Ôá‚‰3 b*|lÏ ˜ë>ÀŽù×KƒÝ+I¢ÏÌ@Â.‡H¿Ä¦Sír)Êá°çs¶™Z‚)MŽ†Çò™îrM2‡É3½óo\|R¡LSýêñtlk�óáÕ­/?Ÿ9§læ9(šÁ#7ó2œŒ°m’œbÐREK¦Ï…nmïµÿ�Óž‘·ß×Å·YåÎµÊÄ'²_òè3€¹Ô1åƒa-äA¸½Ã}Ýÿ²r¥íï·9³P8PÁ2öXU7ó7ëN�Œ¥‰–z(�p{Û—-kP‰õtáu·Vñ¢ý"–£¯Ç„À± šz�ü;­]{­y~Þ¸½óŒä¾dx(šø�ß•h~×¤"‰�)gÞ o_…©Ú¶­ÿ¾rF^{­[LÏEþº[œÝ`™œ«êPöµ4ú)T�¹]ºY0²wrza¯Î3‡r¤‘JŸóè¾Tp__Ï±ÖY:/»¸‰&d†¡Ào€ì½Ñ“LŠíQ½¼{*Y½µÿø$ÀßÚ¾‰p=¥3ß@Ñ€!k‰'ŠT¹mí+sìÀˆ¡ ¢�oç™f¸Šà	¦·¤ÀôÈ ¥Ú£ã¦ôØ}÷°ô²‹ÎôßöEÒÐä3TZ?:03¿×�I‰ µ¹�ÄÔq_#ˆA«`OÊ¨Ù‹†Å|R‘å¶Å\Í‹’-“Òó»ãiQpå~åÅ Q˜ çÞ“H‹)Yóš8`sÑC©¡j¿¤Æz×Æwâ6°ò¼}âï%ˆFôª]ÙŒž„Îdê›ðz»ßì9ÖA€ïä|ƒ)mf"­ìåOX4È0,Ï�@z¬¨µ˜b��âiEQv6íÍKŠ‹§,ëÎì}�ñ4¯ÙyVÌcJ[¸ §÷æfpÀ£IÕÌ[ž6µ«Òu!êÖêx‡Ô«(òâ2sÁ!²¬s‘Ü\Œxòf`öÜÐøÑT® ýG²I§™Å`Ç;9÷ÆT»�ÿÅA>Ç¤Êc&è¤åøñKfÎTHqÙ Éw¿¾aƒ>÷ŠO;zàÍ=î¹�KrNá¤Ó¥qK%XnÖ¬<)åD¾óÏpÜ±/£Ï6íR {>Ç·ÊÜöQÒ6ÂH×;×�ŸK1JôîR§-HþÖ1˜$ÁóÁè�''KÜ^±ÖÅ÷÷hžé
-Ùi¹�ñO ©tAÀ_€”ænÊ0Ÿ1(cI©#ŸÔå³mpÁ!u	o
-1ñÌŒ}}}bë`¨þáãeâ¬ÜÒÝŸÀ8«O×ÎÙÙ)ß5[‹Ã·€‘½¨ˆÙXÔ^læÇiJþÅ9E9»š›³±ekd hGÖýF*ÇyÍòÑÑœwßa²¸Îuc¨CI�gc"ýøLÖå„ocubÞâŽ"ð›ÎM°�ÙŒx‚ã½ˆÖoˆÕÌ½ró±Éšé„‰7!f}‚þ¿8É�@®Ù1|¼‹ê/@5‰Ì}9ÒÇß©õwaé­s
-~¸Â4�Nç!ìQŒpó._N^ï89¾n¦FGé‰Öìf÷zDFA.B¤þLp%/|>á ožsÍW>óX×ä¼»6mšæÍ ®®ÊŸ›ê}©(=4@Îi“QU\M¯eô©Ã‡;â/ m RØ&
-‰lPQMgZy²¥Oð(íÔ-öZ*c]ÊÍYë%=Ù´¾ÑXi‰š/·tØç9¸íÀŠú¢0#'Þn±gÀ OY~àYá¬
-Ð±d,ƒëÝºSŸÜeA‚ñe]ËLÎðUToêÌÙ€„›K“ß Íð“š¬ß«|³®›WØ%ú;FBù2Óg‡´ÌXgCña�­dÝFr.rœ?ËÎÔ7ÁvµuàÅ§{É3 ï—\uÝx—BéZÃ¸C‚ÎºÙJe–R‰g,û#äÁ·`AïçI;mÿÅèìüì¤$ßý(d®�ñ@~Úe¹üí`t>Id^ ^c„Sö.ØEÓ ;µ©	±‡w$x~#H�f?ä’Ï¬ÎÏOÑ"#ƒ3Á„Õ©ÿÝßÿ 'óƒpÂ ýp�O(Xú®ñøÚ”i¿¨$‚™ë1Ÿ�Óæ>A`ŠÓí9\Ú¡ú•�ŸIÊ¨ÉßFÅd˜ãÄNzÉiÐµNþÃx}ß_rÏ-ÀyT“3¿Š&‚Ouä:Þrç»7�Ë@1vÎR„I�’–)ý°ÎÐû–VjœygSvñv"\¼jÕ!Jæú"ocF5aü&ÀAß3×¿âô‡ç8(SÊ½™DâGžRïK`¦'.Evò®‰³ŠbÕAðzç™×
-Ô
-i×ôáp»
-l[‰6öKzæðWgÌ Pû�`:nÔýb®26‘›#MU#à®¤ƒä=â7—VÏ½!÷;¿ù—ßCÔ½Tâ•˜)ÿX6õ'QiuÄãHFîæsC(‚šDh"Ìn–N¥ÿòmˆQºr!$23â('èm5r‰éŽ�C¢à;0–¯„E\§ÓÖy€¼}£aaó¹ˆÕJ'Ï‘M2.òû”‹C)ÁCb<ÒwÍÌ™Sw¬«�û»ÔÕ‚D\Dg^�Lq,ÐA-8¸üm¸�ïëçEµÆ%�Ÿ¬­_¸íÀDÞëçWÇ_¾v]¼jù¬uAUi™š…frÄÆ9ÎâDl©“ãCÇ�ô:±øÆwå¶Fâ©gR²ofúö/¬\³èá-Ï…	¼­½¾ 	µŸÀSz
-;�Ÿá¸|Ð«=>|dwè²v¿ë ±½ó± ·Vy�Þp¢b0[BÝÅO)¦ÇS¤¨D„Gi^nŸSZà‚ÚÆn1aýˆbÔçŠ??ôø=ïuîw]êŸúW y€r´¯ÔY×…S¡ôKá–¯>Á]€8÷Ó¨4}ãn>ÍoÉÎtú¼'Ò¿–ª‡¬Ï›Y^ž5>þÇ/½Ï óc,Ã\üöxtå¾‰øâ�ÝøµÏ";pÿß+ÝUXt	‡ÉÓ0àî†7'Lz²ª,ÙV,)q…=Y(YeAê�óYä×UUá)£ªÇ`«Ê~øCúÏ²øâ±eÀ…F×H3¬Ab•DÉØÈ%Š.…8’xaíf«¡H‹2â“`§'[¬î#é�×^{¹sß…ØÁIRÀ†ÑÇP­ôŸ^:÷÷këŠ»NÒLäÂÞÑè¼DŠ¹I£õÛ s)×Ëh²Ù×Þž]<§ûØÐ5l]ø =bJÎgÓ#¯zTz(í8ðÚ¥bHöãPP¡Jž�Â	Bdž/ë6~SÏ„ÿwÇzËˆEO>wúAîßv°domØxªw#äôƒ�1u3,¹¬+	Lí LÓ,3ÌÌ€ááû4±2ñp.”uÝ�j³WcQ#K"S¾…iÊ¼`´zÈ5=ËXÚo¿|ÐÇ¹ÕUZ_ƒï3{€£~²µ+�(ƒ�ö\
-5âÎZÿá5sk²*y� @@Ù­Tùw¦¼Z’›‡Œõúáh4	¨‘ÕC!XÊ¯Ã{¹Ðâ¬�Y*wQÈÃ-yº'\òtûDãœŠù%
-e6£h×À2†cÂ] —†òÑ"/ûÁ·›}ÿAyªÑîž˜
-Ê�)M+ ¨I—õo/;ï²³ˆ¥FÁ½å¾Ê~æ‘lÿ…Eón}"ýçóšVW¾ËöÉô©N½’çF¾7ý†ñb°r™D9š*É3ªéÙÈ=ƒí™·CñÌ•iŠ[7áIÖ×”ö.‡¢Ê‡•HšnïûñJJ©!IRßB„t@µlÉvI’ˆÕ˜‘ãcØ¼ë‘‡¨à³z÷øTýöP¨¨%t’ñE>ó÷Ú 8À ¼Ý–´øàßýìß;ÏÿöoX|Qa�Q‹ý<³ï£:íÚÑì.]5ïC¾æ?SNêžÎ®)ŒùdR‚*ËÉsÔ’lbÜÑ� ÁêÄú[Mî™ŒÝä¢ I‘À•%øšþÎ™~}_c¾Ó�IÁ¾¥,(3cÝC}ƒ¤‚lD5jÀg[­[ôö¼üœ.ØûÆà”ÆJ"·Zcá ú =¯ç–å;8ú`Ä¯&Ü¶=¡T l.b,4æo­žÜãKfS§\¡vÐW:„¼‹@>súöp7Ó*Ï¢Äð÷>Á<°²¢"»ÐM·ïð@œ¢E¥†Ce/ÌÌu'¦ÿFäg¾ý­óñû�BCîåfŒ6¢M¡„zÈ{nÄƒ5-íš®ì9üdw¨ä¬’*h}Ê×}Ý™húÍ':SM'ÈÂR}vi¥UÄÉ–ø#ÈL§—–��®&÷7—Y�¡ÊÍšÅòl‘Á¡þ(0¹ÞÂÙàÓ½�¤âÝ,ûcefÞ&ÔAÄ[‘­^‹ãs
-�øÍ[w÷±æâ¾²œÌl�c/FEÓÞþ�£;/7éÊ\Z¨E‰Þø�Ãûõ†Þ^ë÷ˆ§Oß+ymÆ}‘{#@ã9ö~9›¸aÎe×@Àå²Ûh»ivÊ4}<¿Ã¥ò lÁúf,„ø(X“¬EÈA¨B{1xänÕ[?¿‚ÕøR<ÏjCIZ5ß5�KdŸ%Ø§¼4—wyZS}ð'6Cùp…/È²Ùh•VŒîùSçX•]È÷‘ÐÛýýþÞc£zIMŽÍÅŸÇ&d_ëøÐàéÊÑÙ’sØŠ!}ù*ÂUýáTÑ0­ÅYS¸ÊÁÓM	Íª°óôo'BúBÓ¨(Ì·%ÆìrjÉ}§Ÿ‡ôÁGù ch0šÊ¡†Ž†)%%�¥Æ_¼ÿ¿ä@Šò™ŒùÿÁHXDsÔ<`|ƒ¤©I°„9l~Á¬¯|ûûU#±dIoÒòÆÌ´Ôu|„G-±ET¡IŸLFuŸÄW@P%³v¨'z¦û‹/5œÚÉÐ¿†A‹tâ-sXþ6¹*¼[—8ÅÑ:›M~î÷¿×÷o~aÐ³wx°Û_|6í,ªAu:½ý|ÃíV¸m“Ýñ”	ˆ‰cŽÖ¸lÙ¢¯c| ‹ï`$0Å3R\–•÷ïD‰‰äà%vÐ¥O9„lLq‹¦š–�ŒT/eôû
-Ü]ÓI·éÎ(EaFw*Â^ rüSã‘Ñö‹û³;ÜÀ@Ô{(m,\í:HÉ|a�Äƒ·')óŒ¢mÔJ}‹ìvaËVÔí?r„«-(ÐÍm›å¦²Zà+Y�Ä´Á
-�¤ÀÜä¾õoÿ½…!ßÂ^P»à�L(þêúâœL¬aÍF‹Ð|¸Ç÷ê2õ2”äÊùþRÈøœŒñ-`[hj¼ÇVá�H›=2'øú=Vq»�±øV‡#‰un˜=›"ƒkwH³}%’„æâ°ðÇ,š»4¡ªŸ@hdnZ³ºVx|ƒÏîÓÄŒlbõCJŽµß‰ÐFs%euÆÔK`.™ãÙisÓìHcÜ†…q9£ë¨ûÊY�råÎ@¹Ø¡-/ßÍTFú¨' òïn-¼´ª&Œo*¦ê‚Ý2‚ «RjŠÏèÌ\‡‡%‘Ò?	òœ��í8kùZŸÊ	—±´á@Iw*Ã�œK¶ïÉ4ä*¾Òå_Ê"	÷?ãrMÊZ
-�çƒ•lŽ«:G²‹tc$åê¼eI}zÔÈƒjHÙyÁƒMÒÏy<“3‘êJ¦V…“©w¦bn^Ú@A#î bÃŽeMw :Õ´ÇL‰~F¼JÖø‡>;»"HîïÿOÇp:#X³ÀÐ /:ÆÕÃ¯f™èFô”¦«ì•(wo€™n2«÷½Õ}gƒånø@Î†”ø¨½,‚#Ød9M`þšÕ?÷¿Òs¼¯hlÌ óËk$#MË610=6Îdß%{"²Ý³X¡­©¤üKº"ïðJ�.†ñ†M·ðúïüÛÂ*§0ø^ãï#ÍbNœkš ïŒ»Ì-í¯z	RDæÂKú�ûG;’X NÁ€Ø/Àì|åÈ[”é†[P«Ê%:Š½NÇÅÈ|Ï…*Ÿ6´9ëƒñg7µ¸ûáŠ*oé½†bååÛ¹a¬vÈx[Y±¾Þ€'v`ÛÁ×†·{ÝËYZaq~Yâžã.Á?übãM}R Š£Ž Pð’¥jopý‰þÍ•Ù‰Oî�X³[úcv_	)�é}²½=œœ»r“ÍÆ£bíãIZ/z¾/4¤”48€Mýº,ÌÏH¬µ±½©:kÓŽ¬Hä¹²n¤ ÈG�ÈEðnËÓÐŒÉÅ6¬«CIKÔ‰¼aOCaÄlEW½¼iS€kÉZ�·,=¿ñ¶ñX)Í¶_[—o2J�D¶q±ÚàGÙŒÂøV SÂÌ_†Z²öß»}B®M6÷³ìlÇåµ�(y·(ð	 �0�È¡¡@@wæÕŒ²”˜…D0àF”X«3Ú¼”¦®–šVÜ}¨ˆï8Íe÷8 ¥Öxo?VËøø‹†.TI�ëL£ÃTR«ñØX5#ÓIlÐ.áªªÂ(å:’_MQµë©M}}}ö9g!|þIôíëvF:f…ñúsr”‡;;ŸL5ÐÌ‘ sC«æÑ¼|]½ë®Ÿ1ç|î+åvšYˆ$íÏmÈY»Ðâúfû™l!©i×¹û<BÁFe”·rúúÌXSñ³iô‘ƒç× Úïsð”Rª©ƒlç×Ãác½°õ³ßÇy²qEÕ²Y¾ÜèHd:>>ý·�Êk‘èŠ…&áªÈ ‰/GÑÌQ´Ý8;77±s,:ŠÐ�ñˆŸA?ZXÌWÐ……x†¯´} 5.(BÍzX•À¾ÒnVÚæÌØ±´ÉÞLÆdŠµ9;S&Utæ{„T¨¾=y†Hhumavã$IÆóoøN™[®Ð}õ¦]#{×£"õ=[�”™]8ˆ{ßœö–ÉxÇ8xÏï~ÀoþÃ‹¯C¢‹AA8Ù†KU×-X0…6®tu]‰@$ÞúŽn0+uÕ´9�²ë\ð:ÚêV&ïCA¨!-Ò¡„g aËl…ýRot @+Å³W?…÷Ag× BòùÓ´Ý®gÌ¥¢˜;
-›…4Å-Û³ù¨Á/yèœsKQíU¾—“YxwvªeÎšÃˆ‚å�uí-‡ócý#JÎì_F3Éµ¨ž«ª¢V§q^1Öß¢TúÅÝw”6››AJŽM˜Iº–è0gPp% |	 aÍmQ-¦Û!˜}Sý‘Èá®Ê—ø.ÃçZ ê#èf§55uUjîjñ1¹ž«�4XaŠV>Ô=ž]ß%Ýœü��¢„ÞØÖþ§TÆñ*|ê`/‚šk‰“Jè2Ë#žŽøèûÑµ–EbÝy¾Š‹A913£©‡ÁœÖscS“þ|_xÃ¢x›1ÞÔ2ôÀxàäMærT‰Üé‡PCKûqªj¿8ˆeê' ôâ3'‹I¦»/Û�«ñBµ_¤ý®»¬¢‹¿œôÁÐÂ,uæòS¨$Ì£\<ä–Ý¯8¬BS‰§	PŸlÌ’Íñ‰$Ç~R¢Í:—ÅÞÝìÜ~ëIDÈõ ¨àèÀ–µ PåeÝf>wAAaÊ¸öF¿u”§Ðç“¬“?$Œ�£Ë¼§‚ó<§¶+&eƒ× úyŽ×h;	©?Ð:~ŸMÔ�Z<_®fŒ$øvô6ä·ÝAågÝé»°à‚†�Wzz4GCÓYNÓòÐîhoû›Ó¬YÓðQx­Z!�¢ÈSØyÓpÆGÌdc¶vLDw@ü¬Ó`œOHù”lLÄç!™|!6÷›
-T­õ´Ó-ñnˆf6 |ý*P}Ö`³_„jC²ÔFÔd<@;<g%‹¡åz¢êŒwI’S[ø$=ŸE-|•^sã×#åv	úâŠrOÕõ^kªÎ‰Ædâºbæ2§Â‹ÓŸ%ŒŒd�ŸþýL¾Â`üÇ,@vsx‘BœnÂV[K,&’~1)ˆà�åpÍnÓiö§�&ùØ¼@2¬¬J³6¶µ‘AB&8™4¬;ÇæÁè¹k\%³�b×™ÙnmÍÅ×¿vŒsQöu¸ÿñÍí¨|ý‰Ìr?ÓÚrvÍ+D¬÷=v4ËçñxÏ59�E,P¦9‰òÙ[¶¾0l
-*Ê|­Pÿ4JÉWTåî©hâþCµ…Ä¢#í
-�Vá´çª†Õ™Ö3a”N‰[eg™vN×îÒ|�êû¶ìXSâ¹Ú%—\ÂGlF¥ZÆŒubˆ"çyTš×y‹æ1 x–Ø9îV�ß}ÕÉ$ùTpÿb0ÜØT1áaÂo'9á:¥l„G‘îÇ“~òÀ ½ì™¾©Å–£øìþ×£?RØ8ãycòGö”n¬FFûüðuoþ¯<‰	jáúç‰yr½§zÇÊ\KÎ¿Z‘™¯ÚŸÿùz‚ÈâDþ6}�I<åº±)o"$‡v›™øÐÄ{�T©‘Ï}‰Å+j}£c;<w�¾Ã3­wfxx~ž¶†�ø¡RŒñÅº²™sÉb?}n“÷Ê`bû­d÷?´¡¨(Ô20 h�¸8“1ç:9úˆv‘äØ’úzÈ�ÿÅZIE@¨�¼"L™í[]šVÙ/>rl²�+	8ÁsÆÒLïHtôþ�@×C½OæE{t²“dÓšÚ9Më^E^†²Ö"C�¼}~Ž$}¨	˜é>ù_¾†ÁpÂ.Ôš§ ‰tò`4ú9‹<zNE¨;�·¢ìÍå€s6ºÛ3 K¶Q™=°9æpœYN+¤Vè—HÑ 1E.Ï‚ÌJ²ÞíBï�ù¤¹ ™R– •#ïó}€%¿‡‚¨›°®”#žýOSÁuõécjúÞ§__üõOûVÖ@RÌëÍâïO¾Oï‚œž[²|úsgúõ“ìsqKpN¡†Ÿ‡è™Ë9)o®úœvþ, ðB<O?0¶{kçºuë4`ñ$ª¢öc°�ç7À5Õ–�`!c³û½v™fj«AX3D©æ-¿Bp–vÃEÄü7wz…ö{Wb¡üð}�ÅõÌl²ÿx\	ñy3Ò³÷�ÇŠvŒÄ­!Uéå«ýY^²p<úÚ‘�‚yž”­8ÆÉ•'Õ3±D ¨ºÚ"�6œ¿«ëñC-hM3e’…ƒ¸£[jÖDÓñ0d]‡¬¿>ïO!G÷˜H%—K¬ã¬vJ#·”#ù»2Ý[:‡s‹ó}y†Jç›‚Ü>4î©ÎŒZÎšu¬Å|ñÛ:p
-ìDíù„�a—Q,ûUZJ›{&6]X[H¸'ðÿì¬Ö¼š2�µQ¢­ÿd ùDûèƒ¢è�ÁÏ°ßl 8ËPzŒè„ù ÃÎ¼¼âƒOjÁåšf5�ge(cªû�þù™döŸíMx¢�¸/ÆwM'�Ä8>›ÒÍO:YªrNÍ¢–Í*ix¡�?D
-i�·yl/úâ—Ã«Æ§èŸC«¬4êqPô†íèaò©ìÒø�¿×ù“»ßÆm’F87’TÕÏFÒÚ·õ¹«~‚‚•`Œ³¥s#�Õïj]!äîaø[vo›Ñg!I',sx]ƒÍ'úƒ¼’±rº~ÃM	Áé£ÄÿáîMà«ªÎõá=ï3Ÿ““œÌs€@˜ £EœŠÖY«b[µÖ¡Ã½ýßzï­Wí`oµZmël­Ðjµ(
-a&@„BÈ|’œ“3O{þžuÈÁ€øÿ¾û§»âINö°öÚk¿ë]ïû¼ÏƒG?œô
-pãm1¡MdÔ[š~ò û~XW§à™RMáŠ†¾P6V*ÐX5¦+† $n*ªãŒ$³øòh*øY	#rÍoÂïýXTãª\:š-c+-J_÷ÒoN€žšƒŸÉ}h:Ó)'>‘`§UÍ�:TÖ¸ˆÖ´E�ÍšÂÐº(žUˆ±¯>t8Ð»b…M¬¹;ºˆsìÚ*¨¨´}ú¤¿äN�ClÆLL »P¥ø6<à}šb>b²¨uÀ¦ÿ{áÌù@“úÎÖ,2ö½ÁR•U$Ž'ÂjÖØÅ“8ù�2¼Ûëà<œíØ/ò»ÚøæÊÑ1Ë�›á™¢8Œ)pÃQ 4ÓR$¦Æax‰koðcJ4šEÕ�²OI„X*ÇEe9ÌÙC1åNBù�¥]c¹±P¤™nôÀÉ`÷�)˜XÜÖx!‰Yøf·‹õ´B¸¨À,\,ì�E ºXºÕÖyw‡ÙH“oY4)NŽ‡GwbQÅ`f=0t-U›öÚÈ ÅŸIã©Í—›Ë8õ<�öØ êà0ãemóªìPímñVÄHb`‘ªÑ¥8¼%gÚ@`.º³\3Ô”f 5´kû‰Ë—ÔÊÛúã�þˆÌ¦bY÷šÃ0^�iÍ¸Õ½€Ñ]
-Ò›¬¢`y¯;ñgªÄâE#Òƒ<©É“¬,_e.6oÅ
- iImmâXMQS­7øß çÕ¢p£‚0ÇZ²5švÚœ	ùõ#ê•¢À_R”�1Ï™XS_RÕ—Tdá�°–›ºMJ¼P3;àIß`€ŒÝ`-?ŽÆ"àpÿÓÊÑ·ãÂ´C"ñµyË8ßÐäÅ	Î´¬Û& À0ÖÇ!(Nmì{¬pÍ»2ËuRŒ!ZsçðFí¼ÉHÊ�]^Ú—ßcÍb*ænŒ•ŸEóQg¬¼tÖ,òÂ¤ãu�öe#92ßÌ‹AZM5£�§rO½ð/íë.|öp&J¨ô¶qí¹-G¨zª$·|ÜHª,…ã§`¢ì²òÉ#ÍãÑEÃ[JäTR]IûJ�ƒnCìCõ¤ö€Yc-]©è¡+kÏ7ÌœäküIB£D ¡ÏYh+]Pðâ‹­Ôòå:&*£qùÏÛek~ódç·øÃž°ÌÆ�t»la	F3Îz…e~+‚Yk^Û•ok»1Ï–^Šƒ!�|öÍ“_Up­û�È£'ÿŠ6ïø»’Û©YÅ2VcúÚ.ÂÊ‹eÈÿä“v~nûxHhiæ�&Âk‹Œ	K
-J˜bÝíå.ÁÆéÆ÷Ÿ;ìíµi‚fÈþ”Ìw& ò"‹“á¥œ[À½À±tE«×¯ž¤ ÿu pEA¥›?œ€Ç§‡ƒzÁÄA†ÖÜ@ãêšÑ€õiÿu'�cú¬‘"÷>`üž�Ç¡Ãf ¢uÞ°‡€C¹BÒP¬�¢ú ÞËÐ–Éõ#’Š$Œà3Ë}LŠÛº©  ±ÊO—±é“�üè“)¥Z’­ËìaŸƒC´–:ìAÂE¼p&!^Fº“‘9%kà{×½¶|ÇÑ{®˜–~™%�¾ ªSQÑ>‹×Övd·dm…ä/“ºö>`yùP7ù¾‡—ï¬oé/ËœORä(bËN9)OÉò”ž·Íï·/ê‰¸²µ¸/í^åbÏ™S¿kío_sÇÔ|_ÇcÆÄ¶ jD‰XDÉuRõioqCÛ`<ïK`¬º¬~d-/Wì’¢ÆT5�ç„˜EJšR;(]û;¤1�ùOÅÁDEeV5Ä\€"°™IÕ„ˆ5Þ( “P•ÇbIß?1Ô´è¹Æõb Hrñì“§ªümC—Ì•é¬"·ò[3dUI(ÙË<ƒ=¾QªÃ<eŸnJ•|)Ÿº7cÐÉcYÓ(�òõXW]‡þúi¾�»/1!ZI�qË~¸`oO‚�ã÷x£V"NþÄ–�ŽžTÓOU)�W9LLRàYÓÄÍ%†û¤+×zøh‘c÷•U…=™¶¤ø†ý�ˆ”êÀ>¢¢¢“zIù•W
-äÈÊOaé+µ¸ò½‹îzd¾?Î^@ôri‘ðz°Ü²’ø¯ÈPç§æÛŽÀ¨�zöÃÝpjüªº�º”‰§^ÐiÆRXlÊ²¶kÖõ†n¶
-ÂÝðØû˜8•v€>¯}<%„ñNTâF�VÚ¦ëÜ[(‹{‘aù?:ž<ó~?ï4çôûj¶ÛwÄð¸r%ÎÏz¯ÿÍ“ÁñÃF-îí
-%ÑÎ ë–}·Æ‡3cÊ…‡¥­æ#ò‘CCåÀ�VfY	©sO2t×ÁûY„À:è°íõÜçÿGmá)f4VN>=y,7ìëöö›a¿‹ˆÄQö.àee*™üÃê[P^x±Yö%w�äC¨¶Z4µÑ]¼ù…'Ÿ”	Nòl=J +³mýBD=zÝ6Éu‰b��êm3‡"–ÚH2–ª¼øqVÏqp?x ˆãRÛ"ñ%è'¦X,1âu�s¥®%Ìgˆ+v…(ýå{&[Ò�³†�L\�tÂÄC5 ·åÆ!€cªŠwîÉ²„Ì±`ˆ¦,QØFÖíÕ˜GRÀñV÷'uÿÍãGÇ6wJ¹P³òô’òÏÇú¨|‡I²ÐlÚNéT4G×šçÜ÷£Kž¹�à[6ö†åø³RÏ	IÉ¶éŠÌÊ ‰Ÿl¸ê,Ú< ¾ùžá÷¶ŒÍ¬Ãs$ýƒiÈ�¥4”›î‡ËFõÚmûå¸QB‰zã–’Âô¾ýU@}ü�ãéõtŠúñf€Ûõq¸÷KÌ&îÐÊÀ‰ÃS,î
-¾·³úó»Çö’k ¸È,«�;\Ëc@\ïGUÖÁíãrûÉßÐ}ÔêF¯E˜; å�;»ÃÄsç™ûW%ÍVzÞùÇÿü›Û‡Ü%9~—gJc4Ô³£7PÞüäõ£Ó�9r<Ùò]&É^
-Uzýû7ïÝ„ñsKÍèÆªN �xÞÌÙàJ'�þfü¿[VÝŒ"ù>ŠòÝSj±¤�Jo(µ$ÿ7ÁH�¯„ZpH!ÆT7*À> ñÁKð ßNq­›îùÒ½¿ÿIÏ~	Esiá zfa,,ÂÄÕ¸jõGa mcQQ‘Aà›gÛŽ÷¦“˜mbØU�<Û�Ù6a°Ð.Æó-|Œpbœí˜/ú»Úó%„R2r˜yÍ¥ª£=Ÿ–òŽBÌP¤ä75UZ)‰16Îú JkB±ÜmLB¹Ï=qÚ$žˆ›4.*pué‚. 2 ¤ìál‹0”ê¬u£§<×ÜL2­§6"-¿5	Úh†¾KÇ8e¿yôSœNÙtÁ:Si$ç@a�I"\ÓSžüÁ˜<ºxB,ÉÜ¶ôá‡¡¤û©§~Æ~”­­�Sv¯‹&Gål1ÆŸ[èhŸ½  ‘ÈÚÀ "Jb…å8TÃžºÆEÅÙ}sPM†s�2ê(µ$î>Ê=Kl4;ù™5kÈ=§«¾b»Ö5¡^a3ÆDNôl¬oG|ô~wo´jë±ca2òhaÂ,AH¾LÅx§må³l¿C²¯{Lþ:Zñÿ™®ŸùaÂbf,sÈØbYÅ!zUÉbGñy¢jº’â­ï�œäiP:–Nð#‹hwûÖ¿sbÅˆÕÆbô·&¨�L¨”x¶qª 8ÙÑÞ×Ñvj_ÚVC;‘‹)Çd·
-¥Ykšö<nY—•KoÈ®eÁÓò‰Ý*>óÊO¶ö�ãˆ·¼ò†;°¬â9Á‘Ò&­ÔÝzêœ¸O[‘9·?!ß¶¦Í©ÁÈ&øÙ>šF–l™¬Þú‹ç®·WM�D5®ŠÝ;cìÐŠºOó™n"�9š
-2£Èzð²Ë.“—TW�ÁTIóPdÆîÁÐµUs/YP_ÿÏC/3×û*>shiÓ‡]ëõˆ¾m=4£3m`ŠäV²àù×áÓ�ÕÏ‡ï=Þ]çûç£°©î,}†}¿VÛò‚ð…Ð}ÈûÝxá*ù H ';cƒ¯§
-Ê*ëû"sÉêpÇ@|bƒ7\K’«™˜7©,ÄÂ.€·tÁ¦ÇÓ×·íxþ¥ø»‘ÙçËþü§�/1r0oƒ©˜ífŸµ¯#obbnî Ls~/€…ÌXŠü$Tžvá1ý[EyyåÃ™J#,›vÂ£ùƒUQGÃÓ»$4sVš™-ÚËÏ|1ˆ’Àãˆ6ÐÉØÐÞ¼D`3¼ºyF[fÑL÷ã½‹¤\‡fR?3«Á`�ƒá^�Wl<•ÙnòsŽ;TþÜE“	ãÿÜRgðAÄ�Û[â²Âj-à €¶MÓµ™î"G.1"ÃÇæaJrÐb½pÚó!ÿ½ñ53ædäk¡8HeÈàÆðB¼Ï�v¤p7 tñ�YÀŸÂóTÕ�`³‰êñ7VÙ#�œöÙ7-u) \—•»šÜSK¶12=à²ðEãžOA¼‘ŸT˜A˜ |(ƒû\jX7‘¿ ôþ6SKIß-BÄàô-ì0¾I'Ôò¡õèÎ�„ØKJ”3{²î’¦“°dêÑ£Ö:´å„·e`M›q~§�£ho±cÏ¢<gÇÊ•Ë4¨ÍZÝýýÉY6w.GénF“}ªÄ´’ã2ç$ŸM‡hÝÐê³å;/NÑº*2Ì/ uÛ–Ðõ«ÁÖv+×�d6û¼mãÆ�liy¹ò!ÌïXCŽkIº„ÓPít‰Áq—Çì�§&ÑÏ;Ï×ùûjLúË—×*$‘Aê�öBŒô(B^(Ø¤: èûÂ?WeÇËµåÙDxô¬KnÂ‘ÒNØÿ/ÎÉWÐpó«Á�²"+O)Ô¯�¶½ëÚÞ|�I~
-XW*KüýàæþBoƒ~ÿ _Ì¤�ÄNé) ¥XvÁÒï>x½ËÊ—h²´�¬ª¾‚ûH_2c0þ©ë#Ì ˆÚ@tÓ#GÛHðQ€“,‘ab9Ä—4Àzô7‘m}!ÒnJäŒ¢cÀaž_9wYÚ¼n”ÍNh*­±â=-´Ùhc¼ÀYí­öÆSç$g&ƒ‰°O€·™œÎbxÙª!ªo ~¤ ²îfÄwN€Îó»Ën
-µP¶ÍÝ¾°ÌºñP¬Õµ«Rq-½�  @ IDAT?íÜ™ý“�$ÂÙÌÂ>§ø±á¸.sÛŽeoyá·¥<ŽA½/ÞëcHF™ld°6´dàfrLÔ›Pdò6<²]‹‚ðÈÄÉž›·÷†/²ˆ97bé´@6ÔN3+üV‘Õ7 #‰©›LÓ’À"‰Æc¾ã�º*íNl·ÑOó¬3í%�z¨?¯ÂŒ�f¤áa„8¼éÄÁÍÎ¨ö<(Lÿ3$ë)F‚>ˆÐD^”¢oÔÍÙcÌpÑï,ŒdŽ•+?­?>€ÄR‘»òú}±˜dúo·#w‰ƒ”Òè¾´cæ=„¾]ÎYroZ…¶ÌÎUEÐ,s›+‹AJ�Ý°kz‚²*b…Ê™Ê¨T¢JÈ^‚4îåNc�	~ù‰–þòWðÏœøÿ´)'gÈÆ7€:}0ª…ê�Û„Éï(ÿ0{ô½ÃçÎtÇ©ÏÝ�d‰}ìÔ«½áë.«»ô¦-�HT²%œÀ‡àëîÂ<9û�-;û4ÇáÔ	¾á?¨F´ŸÒˆ/Eéøï:7}´kVq:É™~g»=)Á,ì�^µÇ0Ò“ÕÙöù*¾3Q‰fTŠüU0dm’4+£§LX|Ïƒ7«êåþ"Ž¦nÆ}Â¤Ú°âœ•d]Ó3í‡A8,å­Af
-³•Å¥Ö¢Ìß¿ìÏ:æKìM(c�€=rkÑÅ‡þºoO°n8IþÞJ^Îs\lÊ£À¶«»b}{X�›ˆˆ Tñ]… 	û’Øé‰84…’­.š+
->l·àt´ú{‚˜ÝOÍÔÞ°<k75;#²(0î£’.Ça”5ùW"%î�uÃ{±º¶Zp°W‰'°Žs�Ø9 ˆ×z‹¬î)uÛäÚ#7bÈØÜüx£eœEÌÎŠ€=mÈËË)½Ü.&oýå“Éh–��å……òÇGüßýé¿.”yæ²D,5¯ô¼™Å�T$¼³>�UVu	Aä6˜R@³P¢lLÄà˜Œ%àb«< ^Š%äáÎ7#DQ‹ÔebÄÝÀ^íB™®DúeÍ±#ƒMý]Ýwž?!#†þ¢{7˜’kŽu¶%²+& fú];ÅuÝºä¿|¤�äžÈ³ q­wžs…²wŸøþ¼Irs,æ…jò3ì$ 3&'c¼Öd\b^‰†ŽÊðí6÷DÜªv/Lî]Ý!Ùr×Ã¾£c²\ñÇ£é•G½Ó#JòF˜ÖYðtÐ‘£2eò�qj
-J¾ç'roÇb:³jÁ3OE®ž8±ð|� œ«=Ô4$­"¦©:„@�—9ö=ãŒ%¡“·Ø—µÌÂu1�ÏI%R‡³EAVTíaUËsRÚL†gþ‘h}ãæ	Â™ç·ÐEoJ½´3$÷x'~¸Ð<LÈA”„ÏE¦
-h›hß¶D4Œ"×`%ühfQþqœãsRæü_×OB¿¸§/™‹�í�Úšûû5“h5tjÓ–?äö~ÿû'¹™Oí0â2îC.—yã@•zz"ùû×‰Ë·åïÝÉ’b¨’Zr¬HsWã}^Åjêâ½X
-k‘”ô/½¹pS•¥vó6r‹m¾oâ˜ó�‡€*
-;‹<h|¥‹H
-Ã¾ôíœÌjÐ)ƒî#5�Gù¸<”¢jÎHbá†�"�2r°²hÑcõ#slêx,�žfS©SKWÒÇBÝJ¹ÓøTr�¹©ÀüVƒvRt˜Ý±ÇV5^1¬¤úQ±ãø¢žÐ*›Îx.‰&‡êáÐGf�kw_G²cY‘-I0ÄÜùÀlÌtKRŠ1Ÿæõ�`°+cŠü!ågvÎ™’ÆC€³LÓ{öìI÷‡œ7ºŒ=±Ì`„
-žÕ$YÕÊl<åX…LiÆ»"Ë4U¥óm~#¿ÖØÒóvînÔ _‰ pàpà{× •û¸hvÝËbŸëpÊ>ô{Äv{�^„Êœ@nG£B+Œ¾y3N)ï.•æ#Žnéµ·:'©H’�
-Œ\â“~"MØØZ~„K„ìâ�Àm<Buy†,ÁºÏ8ç0Æuiƒ¼ïOÏµÏ½þ¡ßõóñ]WÃkíÕ¦U¦„�G^'™ã°1Ý>ˆÁê'0Ý‘Ò-ô�hìùOåQ9õÔb'Ã¸‚ç]š§hÎ:ó1Ä*5•Õ!¡ãâa0‹SÖ<Óàö¶Ü{/xÌSž]ºôÈš5kz¥qãº,º­4¤¦•Vó¡%èOˆÊ±Ú”.Õ$Q ÀýÀ.„'3BHMýúP“E³~€.ù<÷›{ß`âGwÎ™ûé�“�RðËÀçð=äzÅ„½ýsŒëOr�[»}QE÷Giù÷ó*+ÃûÁTI‘Êºc¤«,3'ú¦}vËìx‡ÍXPßÞf§Ûk�a'÷@ðÚ{{#ƒ(¹™¹dÕ�¯Òc€ZûäÉV†6»Ôh<W„Ó¸©¹)‰.Còå|]C2Ë0HX.½ÁçW¶‘J´0óÈ²ð¦vI£ÊasfÃQi vû‘Qv äX*vÞ»�î#/TÔ*[z‚›ðf]Wî
-íñ%ÁÍA¦T”Ç,yðWQZ~NŒo2)!ì¦› @wäzœƒˆ‘R55dy™ÞdNi`U°UeIJµüÑ"0Û–ºžVéÍ¬I«—£ŒØ¾_SëèèØyXÍOq
-Ètõµ6PÄê*uÉ¬J{ñ’�²dcDÅ®­õg²–ˆ”šÊÄÇ€^«	ú,Û¼Áy¼(\†*˜… 0sB¿jfÈ@jh“½ÂÝW[ŒÌáë.[¹’‰T^*¤äF`f±š>YºS¦è (ý÷£ÊozÐŽh*±piÃ½©7x’Mß�Ý‰Á�Ü :Š2èi`‹¼•bÄ¬DQäÙ¡ÀÀ~�àyCS­{t55Q8g\%åÕÌöÆWw/�üËêVoŽÃb-�{�äÓ®ˆ'3±m%öì²|2±4œ¾o4ý@mèð÷È,U†éðk–¦³�'Sj[f’ÙÖ‘?c‡«·¯£ì�›Jl662K�4¼dÿÁž¶�`Ëùc0’ †š½Çm­)½ÌãŒªŒü2û ðH²×€=êL.¬�Šo³š<m¨dÌNm`žËžWJ�~„ˆ’†#Fic§Ì��3ôÞQÿ&)fcæUÛÈ$H½Y=›d4¯7Qü¯ãzŠF?\dbè&ÅøÊ8gE�—_4ªKR@}¤é›ß™ZÐCžAæÞÖuû²-â\äˆ¶M³¡´;‰·MåÙ*¯/ÒNéº[¥Ø^Y•Ò+¨”JOD-Á)TˆŒ©Ìy¾‰ŸL*U¤óP®ùSDãsw7û6Ì¨ñ�þÁR»±Ðo(ÞÀsX¨.~ô„\FaóN-dÍb¯êEÇç(º–Î%j’›²æã}ò­8ËØÿ2ûHÍÏÏþRNÀälÛ†½��€Ÿ‹zÍ'zÃ¾6Ø›d¼£ƒ¯¶º;^à<Ê‚ÔÐÑcÇ ÓV�ŽŠ¥››L$ö¢`‚ª8à£¸W–½QËóþø¥{¿çÄø²‚)¨ÏœÅŸ–+IßpmVVÏ�¡È_�u» Áž2ôuºÆyƒ±X“5G³²².„,È–I(#Ì<ÐrTœ´ôùc‚Æ·f,‘…¯BÑFŠO©Eh£ˆ�š¯<ow¶7ä5ÑÂ‚†žÁ±ØÛ!Î…Ïx)ªu&aðµª±ÀòµR‘³¥î@51x?8ÿB<¤‰†Å’ƒêÁÐéO°7˜h†{Cg¥L;I@ÿƒ¾ àsÔ¼nñÿ‚.;d-ì¤n) -×a)tÚ.Úl¿%öHDóõŠFÙ¡¢dµv¨\»‡�\?:ŸZð_¡Ùn]†YyÚ|\’åML�=ÿéóÆ*SˆmÏìéi¤Š‹	¦‘Ø
-£!@­�Åw!Ay!ÆkÚD‡Cœ<²ða{÷`•˜ÔÂÓÆŠLüwrkÒäšjÏ„¦xÅ±›F¹O[ªfö�×D¾�®Úº®Gž0vŒ{ Ê-È|Èf�YK[øçcJÉb7*ËîE0ú!•wL‘õè{¥=Çv×UÔ�N†‰‡Yê�•£ªâ2?a�×»«¶º€Ä¯Om6+�²Q¦z ™ÌJ¨ÆÅvžÙŽá²òÊÃ}C¾¡Xî÷¾¶î×±ƒTCÐþÔý`2¢÷ôÇêÃõnÕÆÒÜa«°•£Ô×Y"‹ŽØÄ< ý¬½Ä¥Ã&¬™;(iÄ†#þÜÈ}×wÍÌ¦i	ä—�ÈgXñrÉ©ÛöPÔË¸%EN%:i“…¨Zÿ+˜Çp.FäÝøÙi þ†0\+	€Â�ã¯;ATîWUæ ¹k.D(ÎñÇãËì*EB€Ž£ršëÄƒ26ÊÌûº¨÷|RäiªÙ^O[Ä‚qùæì*ˆìŠ[bÄ[?@ÐV£F�ÞÊ
-6uÄK™/‡³*�½2z9öúf_#…¡•Á#Œ!ï±ëjjNy”Ã·®ÛTæí°.eG;"‘µ³Š}³ššzªFOr‡£‘E´F_'Ó¦Vì{ÿÐ·i©·¢Z²Àj5˜>«S(UiÕDóªÃÒ0£�ª§ ÷Cö%^ÞÖ˜ÌÒva%—,ög©i€nE1ç¿«KÒ‡V#¾ã½òòÈŠƒˆ$uÊùbÁæ²L‘Ym<®nì€¹(Pøñ'©ËFåÃÐå§ÛD®5r#ƒ~CWph0çÃ‹vþÂŸð¯<ðê«‘š+hOo²C¦~”±ÞœÀíª�àØ&«á$ü¯—W—G——ST	¼Z¾k¨NaØ…,„A}
-]ý…pŠ9¸KqKæ­ÌÄ€sÎÒäG¤®î$" ÔßÃqNò‚ÊjÀ&ò ÿ³ŒÑî"gþk@Ô›Í€ ˆwE­ú¶�õÔGÔðqä>‡§(Á0óÇÙi~Õ*jw¦4xä=ÿ”Ã2Þþ¼–�_ªfö~L6ËÀa·ÊŠýÆ²ÒŽ×Þ–‚4*œ�ÿ0‹t»¤› Ã^7âd£ YƒÁoåÊ˜¤”›âõÇö
-Êœ¥¤uFTñ¶Û<(þ£Ñ¥ôCGuÂ<%Ú©Žöþ�ëiƒš‡DíËÞ%µ©ßŽxŽ™K�°‘Á Qc¨ípxfÆy¢®MCòò­ø z²#$ÓÐ½#Ù´l™+=)è2Õ@j«T\|Zè+sÎoÊ'I	Vr(ƒC�´Öa2ô]¨åRÒ©~Ü„(˜Iù¸Ô«µE±ìEZªFy½ÉÖ>ô“B‚‚ÃâIj˜£•Ñˆ›ŽÇ”ôN‘î¯¯ª?ÌAo¿’SrÊ7&ð›ÍGŠ,ÙÞ%��¬:wÑRØžk’bµ8z×†Né­‹Ë³Q|súj¦ˆ%¿?ž’áÞ3"sýVÅŠh©Æ/ûÞÎ‰çËX²£tØ‡:ck�rÄðcE·Q”O:3?*Ïæ[éK&&UÚó¯ŠWªEåãÑÈXÄï¦a÷5¡f#¦ÚI)éU¬Xö_j&8£µ ”�]hSdÐ·ÚœÞ[öâ‹ý'´†ì¯ò‰>Ú0«?ˆƒE”ÖnA”ùïaFû$÷õ‘j©)dÇá,iÖ1ù£¡~Ë:T]Ëg5nG±[-±×õôôŒ¢‚9��ôv¶°T÷["s':C8ô”&†w›7<þÀýXjO‡Ñds%VÀ‡'½„"sïj¯ú’	•ŸXÚ>ÄrÂbÄA«AòûrWÎ)O…#T7EÕÀÍÇ¹:P€¿Z’ä•K«scÛŽúí¼�!,o•"¤½ã¼KÔ}Ú¶ÀªÑ	íÜò.CS ®aÜŽÚ÷…Hæå9uëÄPL×Ežþ6«Q´:\hxÛíóåk†0°F^,ô>™ÆFldrÊÎ*œlñ‰­Õç»éóÛ}sŒ\~«=Åÿ*”ÂÂœ'ˆ£‡W÷=oÚ»ù„cÚE:Ë|�»ç‡¦5¯8‹�$ÞÈÚ¦¦¶üÂŠðÐ°‰4ýÚ‘�ËDZ½›¦óßµÐÔ{½I­Dè—Xi&è´2“‚£˜ê«æx;)Ä�‘ó6")G›™QI^iÆUSƒN'“OÓ€ô±ƒˆ©¡ð2hc8ƒ)8)ÌXu8væ²O½¸=ýÇ³Ìfz™§æ+5.#ºýü#10õý¡]Šá]"|Ê{P¨oY‹·vØh®>Úº´zZ7&'Þ‹WSšÒ$ÒT�J1r4éë÷©1Ï¬b10ƒ°×=úè
-cW¬�Ð²¯—UPð?n×¹<€0�Æ�#ãz�”_‘·$V4Â!›iÛDdç†I“ÊYU�=ä`xú†-��GÐ†ÏT¾ER‰¿')iÈfí¢ÅL<ÅS˜èsÙæÿ·s�´Ã»½mT>o¯�·È{œŽ¡v_�Òuà€J™³–ö¥TO,™òÜKÎpS¦KI©#Ö8Wi
-=³°á¸NÄaƒ™ng$ÐB²™¤ÑzpP¤,¥(œØâ*[²z¾BÑÙ€ýM‡|y’bgÙrøÃcó]ée9©.ë
-ö †3K	¨µkÿæ§“^^˜ë_ù»ßi!ÏÓŽ�o‹$hTˆ•šÞŽXòU�âÉ‚GÚƒzooJŠ+-Í;<:›ŽV`J,ª»ìbŠ¾<FÕ¡¡èñÑ.Hjo€‘Ñw?øã¥¨§¯ÂØ×�Í‡:eb®ÉÞ°ÒNÔdÉ®ÕSòºð£jìZ 0•¯”ù��^|<HªÇÈ>¨ôÐo{øá­±ŒIùÀœ ×Ì­Ì	Ð¸Fñù³gÂƒÉc!Ë£1J£g «cAa¡J&XÎcD·š'›»Ýyg‡îÎ‡Œ½�Ü;ÕKÉ0IÍ#
-'¿8ßj�ëu¡/¬° ñp«Sç¥†öÎ™3ç3žß`Âd“à�š]ta�?9ÞEM(ÙpðuOßèZk0)çYþ
-ÜU–œ[™ãàé ôHvÄƒ»oõœ$¼'×Ël×K¹«òò”<‹„=d¾ýÔÓqå,U†ZíhQ‰$Û_`å¥0ÆI2=öhOo7Éºeb™ÿ:$_¸ÜìÑà)Æ,�'C%GòÏÏ<cT�WÛmÄ}Rpp7':à=÷œ°ŠÝ—C&½üäd�îóL›ªãËVhÈ\û\~–ÛLáÎ”Æ#®‚ê?Þ&Ðü¬¤šJìqYºÆÃ ÖñÒKÎ%,à7þIo°og°¢¤cÇ¯þËë5Kâã¡®Bú'½/Æå£�RtW4y+Æ¶è¢<ïÚÓ¢®ç²ÉÿãsõE‚1ƒ5U*cüé×OônD;¡âq%³‘|4Mü5»"·aPŽ5Ù(þVè+µ•ÙÍðk>ÝˆCqÍØQþˆD�`ëF8;n `”ãþhW™Ëò¥&Ï‰ç‹¸ ÕÒh‰BÎKž¨ZÜÉöÖõ‰Úq3Fã‹› é» ‚p¹/º°ª>�UWè´/©Ð'ì"û-,Ù/Suq-º)�¡-GÌ7ÚþÛN.¯-O}Üè^|(¡M‚xdAN6â·¥q§éjfy~ç¶Áø«†®|†âØù¨ˆÁ†¸¨#Åp|YK–NI)]¹Ðl¦ö'“¬+³0­ŽAXq�<UY€wÚ Ë5ÁðÜjÂ2…µQ¸áÛ`,ü¤è�<JrÞúŽÀ>'ÇµÆdÃC³úwÀV6eÈ?€±ã×ôÇV.&Hlkºx¾T6öïFŠziS¹¹oáwÎ©ïè`ªE1‚“%çSÔA¬{šÛWQúôéü²Uë™—?4È™
-ÖGª!o—öï:1í²ËÔ=“íŒm>e(£ŒD( )¦mæ:ß¶:O<W{ƒÏŠšÞ*@¶)©ékØÜÜNÒì]½½Ù”Õ6™’µJ�?ll•ƒP9JOä¾FnDËHAà‰îÔl¹Ç´uÑ+ŠQ™öë¶Šëïý5²Ïà¤nÀøuD8ngÖ±CíË†û(s®_65Y‹Ä‚y²ÎŒûC°kíºGZ–=8KˆçW/þø[Vž+�RÆ™‹lm·;•G7Öob³«Ã<#L'UwÌ º=*½þÊó‹¼½Q·ZPRC«T)–Í4JÑÇzjŠ÷]­#4B8õÌ7€?~Óîaã×a–=}ñ™iÙÿªO€Ž€<˜2ÈO±àÐf4�ã<õõ4ñøÉfpl3>&Ø¥HäoÆ
-ôÖY6Ä�«E“0edãë?ºysjÜÂ%q‹H�ºéþû¢Ù¼¦Æá–Õo¯'Bª$$QT9¶K9ðFÙ#o� ;¦�;‹j'VFÓ0\X]¦·Ñ<åâL<	=xGîÿEÿÌœ‹ôÔ×kil-gHI�ñêH‹y½^LFê^X*�¥Ð&$9v‚ÐãE¡dZße‚ÌŽ{ëæÚ[e5E˜²'0,$cNÓt³&¢ª3vÚ0°Nz¥q´@$HŠwq"-@(pî:RT «:|HrkQ1öGˆG �€…	¶`¸¯ Ë’‰¨€9Zò0Ç6àY‹¢²²žO2;±é˜Uãd+9&q1Ä™@9çÌ¼“S´ä&|ß†òÌLñ„¯Ü½»-ÏZßíz'E¥~�DÿZ�å”£˜äQÑnÛ<.¯ïN°³D«Óx•bÌÏûv¯ëÆp×‘Ñ+wØ<÷Q¶óŸTWÖ1*w=JgÕÜ>mn1oès00Ç<˜ŒûÀ'mêè/Yñˆ"~BT— ßï5C	ØH
-7-344™YÝš|#x<�L=åò:ëë°ü$¥—ÞVËÜÖBí‰õ‡�.ó¤ám8ì³Ûª;d‹`ò!T‚® +cñduÉEÕ$²’­”æsƒ�þüñ“ƒfŽû[OS¨sd’ývµôfW9
-oQíÇ	Mý‘È™o^pk¥èÊ‹ºU�££ÏCŒ`ŽÒÇ¥(ƒÐ\[Y°·óÈ®—>úŒ9ÕûÖÒêœ¾•˜ñ¢TY11Eé
-Í´ ¹Ôðæªæ0™äÒíáÝ.¿0á&ç$#»ÖÖh4g¸¬ýä—ÿ[þ¯šP‚®mFâøoÑxê�¼Ü5òy [¿Ø±ÉžUóyü·dÛÖç¯Fâó^„zŠ ƒ²K(N;_‡nRSR@¥Ô<J7!¢‰�™®5`È+–,»vç@ti²`ôrUR†gnNÅí#Ûl·#¹“†@€ ‘à—PRÍ¾ñlAgIôïKÝˆ·ðO_�<°÷ÚnÒN°×å†««ò|õ½�"·Iøø^–µ!;''Š¾	ËÁL½�E´™ËYÕX.x¹SÁë/(.†}ûôeÙ8x�`Û§JbÊƒYf¶•¡j(Ä°;=Ÿí¤Óê¾0·ô��ÜHt©p’’ÊmÀÓî¡E-.*\ ú!Yíò%¬!ý~§ôSWæšÀ	NBUÚlˆ÷Æº7zÅù€«]©ðÚfWoö~HqŸZª#¢È•Ñóïxµ—`æñ¡-�]M´ôó}Føøž×Ø�¬¼L©bÒÙ—“çZ[>�±¦sè"Ln À=)ƒ’4iÓÒŠÜAÒ/[û#÷#þ=$?F¸æŒO-Š#ê›KáZ+u¨:P)•+pÒ-oºÝ1bèÉý�©abf F7	À‘þ¶OæNœø™xÙ—l$ÖÜwËŒ÷ˆ€’Å5êJDãËACø‡D$ù–Tu’.!cÌ4%!=£tÇ7Þ^wºýJ}‡IËïÉ3%µã`p³¹MôÑÞÁÏTŒËSÃÊXG9“*õÝ”®Ûú…xDuRy¾Üîõi¤:ïdkðP±òEëR]
-RiÔ/ÑŸDv|œF-Œ¯«óP>_àóT	*ÅiÎšÂ�Z¼o9’®�PÚÚÚRE{öñ–¹ö7å³ÊÄ1‰¿«¯½l¼ëÌŠ
-pŠ|zoÍ‘ˆ;œÔß‡Êñ	Z“_€zúÑCt<Q#äq€AŠ9n[~2!�)Õ%6W!DÖ’#·/ü¿¼“_vß4G 
-ªÆ§�ep¨Êii$a„±ùU7"Ì6«²N¹¬"PýƒƒIý/“‘8¿À¹—<c2†Àù}©Ed³�KêÚRI5Ž‰,J£qJ¶ý½/ó~ÎIÌ—0	5ùå§H„¶ŒW-Éõíå±PÜpæFBjlûì¼<\&ŒÚ%Xƒ_Šå¤{ØyŒJi%ÐîND6�ÏÊ:ë˜tJï¾† C,$}¨÷¡\ÌÂð=žÚûÚ?‘†J=Šý2ÕYä²}ðúËÉì1“�Òl†¢Ät“~Ø\àn�írÉÉd¼¸[7M.
-…Ø¡¡”kPŠ0Í*ŸÓ¸úÝäâYµýò€©é…u¯«5Ån¸{‘Ÿ¿ØÖ2Ö­zßÙüIÿù£G§„åå”¾Ç)öÙ"ñN\rŒÒÂè�ñ¸la?	oÝäýþø“•EdùÃåæU¡€À…*¿½fa |ØH"�êYa¬Àp9¬€˜‹”Ø¹·2¿Ÿª¯g»9Ëx×·ƒ+acžk§ƒ›ó\æ&MV#,ÃŽÃøº ƒ°Lç¡ôœb[{Ûc(ÎÏS,
-DQÖ3—Vµ>E2µ²$ð(z¶í(¿í“¨›Ìy]¤[†Žx·Z<–T��Ëê¥P!ÉÕå,LÕÉ„ñÖñ�æÃ?¬›’ÆÍŽ<_KÍJª÷Ûî-·‰‚Ô“¸Ímh�·L™ø«'#ÁlË‰ÁãÍG­9%^ôëxœo!Ê}yIJÕ8
-DïO<‚ç–öÈ�ÔË‘ˆ£©º_6’[æå€‰ŒbÊBðVU°ò=6S{áp_fÚ’Fµä•|Ïã&Tæišz*		ÑPvHÕ›sLÜ©ê¸Ì1ßÄOp&fÇÚ·¡"¥XaÔw‰è�Ö}$Õ„ä~rMbêîG0"ý:@ÍÆArª:Ëàk-9O‘ ˜Ë Ísœ†ùàž>¦iÌ/¬…9èÏôÿ:ôI®‰NÝyÏ#þ/û	ky×{äX;«V�C²nìFÜðý¤¯km¹ÝV 3Ü�Q	»¹È!&Óc(¦„e]©Àb™ý0V¤yxo@aË›C^0,žÊë|Ñ÷{NŒ/iä‰H´\²N;%ªóe�ãŸ�ÄÐþMë;N�ÍÜÈ�jxÁ“;L—�cñB!ö«¦¾gLU�Á!É°tuæ˜Ìg9’ï„ºõÑâ©³…%ˆbÏ±P”ÛÛÛ1t¶ä	ªWô��ì9Ë …W:çæç‡^PBêTÄˆGƒG8‹çøÂ°ÎUÊ197Ë]É{«ävSš=;JÇ­¨Y¾2+((7&Â{Ï/ðòõôŒv»Óƒ“$+f¯=ž*Å3D6› Eöë€¯çÈÈ8èîD‚s˜�ˆ29F\ß;Çe
-�è�U8w•f˜¬¨Ê¹TÏ1UN¶ÄRÇ¿ï¡Ô.Î9…„!6>Õj#!ï¼jtQâOOˆ¡Ü*„S 1�3™Ñ�]‘”¾eœ-k¬™Ë£‘Àü,xÆ $>©ÍÏö>Š‹gúuä'a‚ÍäwŠv4dJ²á4˜VÙ—å´uÚcRWPR „;‘c)>¥h)Ÿ¿ÿöòòt•P!^„Ì¹Hh&bí�3¤¢Êà/¿5ªlpb–)2*Ûž@6Ç FµÏ³™Î57n}ïXiIM?Ç1‘”œ‰Mw$$í¼ï[KB™ó‘ÏþD¼ªØ€OkGfäyHüRGåoXÿÆ¸›‘´6u}4©Ø-�<.Ï™3àŒ'(†jDü-LÚMà™ƒåælUWÃG½{HÂvä1ß´Ÿu‡«IíbL.ã“†<Èü%H6–MË¯Ú^î:™üÅüEµõù»9¨Q¢ë¦1}
-ƒfR3�ÑQ-Æ•È?  Ânå(ê÷�íkæUå}®3ôUô1 …Yf)C—IÚ@~>î“dA£�éfu7°çÈš‰„Û-�>¼:Æ0ïVX…²o¡MHÞèhs	ôAM(Mž�>C5«õ [d7µ‘k|Û9‰ù’†
-¢9fæ™ü ¥'cŒê­6n$NIÜ}²‘ýÞ›~4&=‡£§8E~„�Ç³-/‡2¨|ù[xSÖUÍC©‹v%g‹KÝ¨ªÕT*ƒ|§q/XÒ&€l&Åf=6L€C®5r#a"ÓC”-F.Å *ívORãtŽ@¤¡€‡ëV½§ŒSd ÎçB5ø¯’®?ƒŒq+R= ´ùˆÅ’½èx«™k¬Ü:ÓÄÁÇfMýµÜ*¹1¼SóªUª˜K�˜“1tŒ1¡xÌDÌÄ—¢D}bâðŒ]P…>¼¬†’I? Ž·È�¹H/æ‰õmÑÉ_ô@ò%Æ%ˆW.µ<¹ Bê•hü%¢ŠX†�†ÈdÄE=W¯Q?´ukšqêÞ2í&ŸÄ`&ÃŠŒ€¯ó.pµ³B@;L?šKgøQMv±'ð’þ’•é_÷wù>ªÃü·ZXt^iÙu#´Ù.\ö}‹¢S3­f£¯ÊR“N¢â$4{ÚµËÌôEK]3ÛLù¶˜Y£chsDÑ_gÇæ“,õiû¢"r .½GsÀ|“yÂp˜ÙôÝ.L:Í•E¦S¡ òw2î"ªºy Â?òWðgœ R
-˜X²_/<ÀÓ®AŽù&nxÉr ®ZF1´MS8B{G„BI¿w™{ªSàO"ß‚2Ü'‘ƒyÄôð}ŠÆ¿¢ÿþ„™íI&™øOÁc{oÑ°LæØ¯ó'
-4K)û=Mï4™…«*õ/°
-Ú+¨ò"²Ú$íÇÃ&“~ª¹	¸o¬àZ°zþ�7'°cÎŸ_ä=§t..À$¢IÖdåcR\d1÷Ÿ<+IòìˆL°;…At@'0°°·ÔÀJ`ôÊ¢Q— ¿ê‹]AÛÌ@0> ÅJ<¶@·HâœŸYòîß­Ã‘°C½ÁD‹€Î€™T£Á|%:&ïïp¬±©IRÏ~æ}‘ŽÏ|G.dŸ+KÝ-�=VÏÌ¹e²UG¹„Ã:ˆÊ­XI`Ò©ã_|1uÑ=÷ÿ%ìã<J�™ê„�¿^æ\¼Þ¦
-Æjªoö­I:Y2Be,«5)q¶•­ô\LyN�‡\»ap0ï²Û¡9³¶/æ£¸ÅUùéª³¿s‚u1¸wJá>î4èðÞÙÅ¥©Lƒ1! ‰¦á¥¡Ç w1T4r¶‚úßß ~Ö¯ò¯ï�bqmÕ˜¢8äÐó°4²"“C¥8kÂ¤n½Àíè=ÿ¤Âo¦N}®†�vû}çk’´Ùd/x›õ‚ãÝb¢tþ™S.hõ¾`Ì±²Rs÷šîî#Äè=R�“~6¼AOˆpbÎ#ó/w�³á ™p]…<×Õ/[†íõZëÊ‹ÎêAÁh\ª(jIqnù=Áhâï¬Â6÷<\7&u)iqÒ×™*Êágº…üŠ¼>óº¬HÀ9‹­v³«ü¨?ªWçØ�áoiOmãp2z¢³ÌS,òÀ›Pÿ	È±êíN'æ3Pùƒ·‡ä’n~7¥È­P„Ù�@@á(%ÔÔ¡JKO»³º1v=E½'�má9‡6ÙQé•’°ô™r,�U9uÅ¡›ÓNð5ü…KÈþ(Ç]‰ø-ê¤ŒHäîäY~›¬(e¨Æ¼#X2nš}hdÓ%Vê2«&Œ¹‚´ÓMZOQÖ‘»|¡?Ÿ3Ï×"Z#ÐOKPYÕ ”Ú÷†
-ªù[¬¡×…BÒÙí&ƒ<=ûŒî•)j9û~
-cü|»˜&R‡‰ã Àû^ó°òYzÀ˜÷ÎoÂ òéŠ!°²¤]P÷$iµF³YoJž¢³yÍ™ólˆåÚÍY×¯ïŒ!NJÑ+VÔ© 1½`\q@Ú¶®iûŸž>
-Ka3uûÚú=‡kjèyùî–%cÆø—c?o°ï]x¨¿ÂD±UeÓEÑôåäïsóƒŒ®^Ù“.®t4Ö�ñBïùŽ“7Ïp[ô*Ä¥œ½„-†¹KV¡¶€…©#E«û.Gr}atÀ«6Ï�+&xÇ?´�÷9žw=¡èòsð>UÄ«¾œëC¼C¸�‹PÆ8é•’XöæQ`r#þô|÷:Ô@çÄ¶Üî¾ÌµðyÚ¶ª½Ý‰0ÅmèÿŸÉ,{[ÊåïžY9èV´—@Ûþ<¢…n†û‰F©·úúu't½âá““ì¨Ð9Þ‚Åj%¤ëç	“æ¢P
-‚D”a‡·y^y®e!¡Æ$ß�Ü>nîqÃN ô°´¯7@›\ìª—÷­k"zB¤Ò4�×ì�^Žc¤�lÄè’§m5Y¦n·èÜ#ˆòX¸í?–üÞ–ÞÞ,²ñdPñDÈÎ}/j.Æ€1o-¾¿l|»ÂL…yŠ¿‰(Ùbw<‚oævA~¾^�s¨7ù×:ðô^VQÐµ¨ºÄK*ÏvGuX9Ì®²¾�q=ÕÅ\ýì¯[gäÚj  X©ª]ƒÑYƒñ¼Ž…á×ûÇ‰ƒÇÀ³@úã((zb�·x�¾¦�£Hj;-œPvæ]lzî¹A0,¶!{ú�/½Ê–3÷ù"?'hÒÀmÁ`i4b|+¥ª(÷gZ­¼í€�M^€€÷T>²ËCÑ˜ÿ·pùC4–·»¿ûÐàÅþ6ÈrÖ#¸¿-&¥ŽÛ8!†Š›'Q¡òxÿ[ÃâÅ'Ë‡Gv@ ^ûvìP–Íš•Ämsù¥^÷`Ê ËòqHªÄDU{viuá)ÏgäñÀ¥8ü��GÁIx-
-+ÚÁ	ôDa"wc–÷™ý¶ôN’þJ& À�„Ùl1›^ûè™§N‰Q2ô‰ãrÆ™Mì¿‚¥ú2¼Û)û·)’ô«¡¤oç™¡âÅNMâ]À;È*�m6”×z<®ƒuxðÖÓ;:Äîˆæ0Mª"î9ŽÂ%(>XŠCMº¡äEþï;ß|¹-ÿâoóùn±†6tL\L<pÀoØÔÐjbt3÷‘ù|nú
-y’ñï|ìÌò@Ô‚	ùê“X'éÆ\–ÒW+¬þø·�›?pUB×ÞC¨åmÔo�Y•Ëp²Œ£+&MO±””vÈ$jƒ¢®wD¤ð®ÌªãÝß¥¾¸ò'ˆ[JPYþ£ƒ×ßÜýÚ‹Ýˆ©¯7wä¢åÇ0¾· ˜â_B¡¼W–£GšÀÐÄ‡Ð%$±jYþ¶ëÿ±ãÌv“û#É4Ï)¾pÔR³…_Ž"Ãjp,»ðlÿ�É×õ"A?ôÇ.Äóy0C7�!ÿÑÞ­<»çgxÙ�—bf„öÍPJ¿n”ÛŒáñiõ9ÿÿ¦m¸—é!ÿ’ÃáÎwW@Œõsî�†²ÇÕp 'Êrj“Yà…`®sCÝp˜çsŽùR¿&s² 2dè£:7¯Ý”uMÇstûKÜë‡±ÝÆo¨8ÉJL¼Õ³¸fªËÔ9²±¦
-GBGy=C`žä=ý²BçÌøBúÜòïÙCXïdÙLÁ@¯ÖZU"ÌÔuu>Ø”ê!Ó¯y¬‡ñ¢ Ž¦"¿GìvT*©þ„Jô�S]�€‘0.ˆ]Æ¯½�E9Ç3Þé,rÌúßhIånÑ4Ùk8˜×—‚¹Ÿ–Ù=ÁK�÷[f¯w”¤E)f:šì\¼øôÐñ†=³|/©? ‘r!Œ<¸v¨ý¯ý¼íHx=�J‘°€jX~ö«K0cf¡`ö�F¹ª¶åÇOôlýèXæa§Ï7û¢[ÀŽô+ÄdJ©Ôc‰²œí‹áyŽ|ÀýÐêˆ #Oå˜5Ô�Tð».D_?öñûí™ó�¼O˜RÄÖvúo²Šü]�×Aþ�Éâ)Î!©ê é\_˜sê´ìä¥7Þ��Ë¿£‰Ïêrè÷˜ØÐ&¦rÁÛêßf¡âSCBð¶=¢é‡@
-Ð¢h¬q´'ë†¡a$“¢íNŽ7<ŠÆý}³(&«PŸ Þwòô,h¨2ÞtW_Æ°"ÌbC«~ˆÙ`BÕ9—Ê×w[RÝä™dîý™†6GNŽãn<—a\(Y"ÓdåùÝˆC‡C)yh#çBfÍ±�_[îéÏúNÈ¼Çþ'�
-‚#†*6š[©„î�‚‰;snòyh0\ECœ“Õõ"oJêz‘¬P•Ã?	DH�Ù¾=:[hiöù¬õýÒøÍ'Àeð7�â¼˜ñÎ‰QV_ïÁaø÷*›�„¹¾q‡c.\t1âØY
-2ÁäH¥�*#h„L¤€5q#)­$ªª³¶¶EïxbAåç"<â7Ò ¥‚èk·¦(Û£ùY×}�ŒoÓPø¢8à¦àÅÉÉbµ×ªóœ'È=“qìp¹„L¹9ùŽ8íœ‚	þ—(¼xí‚Ò¬È÷gÛpßÁ³õ#””O.(t“¼Ã¶�3ãK*K¼öBg_´O1ó¼zË¤I‰¶d²(–PÀ;ËS4uo,Ü‘Ž­5¥+R²¼Ü©Q�ü¥Ð~ì¶ŽÁk·gãÅgóâq!Ày×ÄøníÝ‰ä	’áBØî6qFìr¾µ]áZÄY+Pu8ªH·Åa‰sz§$3› ´OCÐÈ¹Òçè^�Šµ,ŠVaøïóYFSj3@€OÈ)çj]ˆÜ…ìÙÿ�ÊÃœ³LÃD|. P)Þ¬“XíqêðþCdiLÎ·±;ô0g%RêÏ°ñz"54²Ýäç¦@ìZ,‰
-9�.ó1Ê£ÕÀ|äTôÈÙ<Õ†@²
-×¯€‰k®·&t<C~™÷� �øÓd2é#F°÷-sÆå Žÿ3%²±„ÏG¹Ý.xÉúBˆ;mî+´§©%ÉË©N©û)
-2¾ƒÃAÇ­+žT\áÝÙyÕ¬F€:ôQpÞÑ?
-O÷em‰‹ç �Gõ&ý—õ›º>ya˜GƒÜÁÓNîa¬=œ¡®nò¦öÝ3­0¹Ó'²ÚxM0í­uŠí«š;ò@,yBC·è4=ÁÊR’Ò@8ã�çþxâõßµ�âÃÀ¹Q†äràyÝ(¼y‰¿<(*/÷çÚÞŸ�Yp¯ÏW`e,—A0õ*UÓD…zdí¾þí³sÃzvU•5ª±Ï`^½YÒß…Á¤��„Re@ÙünóZŒªI`8#Å*”u¿5Î#bQõÙ�¾ûÚoäù–]xé[x1à†ª`¬“ˆKú~Ò¡E|…ïs_$Ñ%XôÅ‹F0žyƒÛº‚sía)BkA)Iÿõ#„áF>Ÿ3÷ÿ²ßí‹]`M¨€@Ú{žÇAž]z#4Þ˜Ïëê¡€ÆLæz�Cà¦ !?+Ôç8Ìì;ò³ÑÍ¡xí6§º”Œ1ŒnŽù“'’L#÷;—?Ÿ3ãK…)ïÉ§˜,MÝã§]…¥ûXÈ()Vyžˆ_’}÷wt¸b&×”íjÎ¥B³Pz²˜Ñ˜bˆ€Ið`>V‡Ro‘'| Ù2Wí,óö÷E‘½Ô¦KŒ±œ±‚1¹Íµð¤Á¨eÍ�ãÊ¾P,B$Beå £èÚümG\ì Ð| îN^_Œ‘�–‹–û	¤6ktZ'õ<–'7jºn£yHž+Z3¤Þ=:Ïß‰Rè[Ê6âà�¥’ÒÏÍ.öp_H5åÙÌóÁ¢Ó#ÔæºEäwõF³íº ô”KPá5ÙÄóSTÝf³­‰};½0àgMò@üo oÏAýá;œÍ8	QO‰œ>
-AËŸ™ºZ’ù£î wng¿ÝSªŠÂê‡|Ž>?ß8 ãí;¥±Trõ¢²¼N46�¦_=2°ÅØ?âæÀ­Šâª>ÅÊrþ�¤í…¨å‡£lò¦ó
-òýÄ �½©»BÒMÓÜ"kÇx¤U4ö?rÆËJ–û“ÇMBˆ,ËT‰™·„Bå’ÆÏcÔ$¼üGvìÝúæ@ûøfW—K‹YÇP¬:Á!0ùpæ¢Q[Ì’Ðtåw/i#é¯‘ÛcXÑÔ47s
-+¾§jÚ{låôÄ-‡ëë}Õ/þ70Ð]�ñ6ñÜ_&8êéYGš·‚œã â•(³ý3‹�GÓÒ-‡Ö¹¶aIÉA•£ùÈÙseH\BÂN>�*£è?2™’c¿*bmríÿ¿}Ý*vÝo} z¤ý3ÓÇá3q^ÒÁ’ªMIÆô~=xÙíg¬"2×&ÏuZyõrXðR8ÍDiÜ«Ô®¡ÈÀšÌª'³ïWõIôå [q	4ç):ÓºØ·kì~Òž÷á ÊâU�Á»áƒyRË2QÛáütë:ó-ŠÕ¿?ÛãÚfÛ÷Ä&˜hz*�6Ä��a•ze*©o„vcû™ûž«ßÏYÂ�4h¤á%¿“<XsJ“Á®.$ÙSUíBò7²„ÌÏwípë!ˆ2?ÃÌ´P©ÄÌ¿TÈ2/ÝÑC™ÑÑª,Šù=�Cs±”œ�qL<¡ôcí<-ê�\¿Ïï/lÿ}^ò’wßð+”¢�]ìo(Wõ†ÉÉCJ’�ƒ§"�Qa6ÊM¯r¹B³jŠ\L‡'IýËÐ=À9f¢?—lâ…/ê´¼}>Ôz/(óH&è§‘Èy®äÔE²ÀýÜPÄgóÌæåvPG{6ÎŸ'÷•ÙÒÉ5;3]Ö´[’O åhO© Ë‰`ÿç^r<âV›¬I“Œs·•7&ªö\°+¶7š��i™½VSŒ«-†Ý˜V–Ó?Ôyœ’(JŠ‰ã´*°¢u¥R!2ÓF�,ç&úï³Á S «ù@ÌÅ =¨Ñ¥à3}¬9B?û‡Ã}·�¾q°<GeB1Õ÷ÀX+÷½ü|Ã™†—´‘LhGŽî:¼±8ëp±Èq†¢WÇRLâãË0qu‚ÙÌ?oÖãˆvciið‡7ìaX~•Ù¢ÿÁ­‰¯úèØú«&¸{HÉä@Î9r[�ïIÜ<�¯Bßo‚7]çÌWU.[Æ°ºº	Vu\¹€›v¼½öé§OG´Èáý,­½©Z®ª	O\à` ö³€bå÷YÉø¸E^×û{ë§!Üá^Å‘@ìú¦Pü6º´r&Ú”Ö7h[u�.¥Ô�+ôÚÞ	$Þ=ó_ß&äçºã‰·7´‘ˆílý>¦pŒ¨–éïJºÒBŠ€MÍ+2yÈ!_‡^?x~=¹é>Œá	€W’¶¥·}ù]\gt(çc E}…å”Gâqê¿™ û*fWªUï8Û}ŽÒ8c'Ð¥"(1‚’xÊ·™ó~ŸçÔøž­�v·�d¡ šB‚…Ÿ9zÔ<b?8]Ì-KÄ±JúO<Ù6¼Šk@y÷""Vó:�ý(2ëƒ)ix\EhÀé,†d}!êKQ™£'B27íâ;ÂN� rÔ¼¸£\Äj€ßÛ4ÄÄNo ³á¥+VØ3æ_ß Ï7Óùé%…ÙÞ•C|#ø	
-E
-tt�ãëŠb•žöâõÅ£œíQ:ö®ÿ,[e+ËÏ†G0l7ÍöW?bÓiŸ÷î(fÔ²Ê~ˆ˜ghè=l0Úþùåå§Å„3Ç†ünà„ý'Üò˜ïÀhÿÙäâ×_�e=+º/d)­ýÕk3A8mDÉož;+ˆ,ªæÉHûöUWŸ6t£– Æw%M«‹HRÔœgú›IãŸ¶™™ªâ,fž�ï6‹?E^
-üÏ
-˜@ñÜÌ´/ó¹'˜œÓ×Z}uÊÔ£~kB  ²†ST12¶ÏJ£˜J`l‰hœ,ÙÐDŠZ‰¬»°ï“¸¶wo˜@�^{]{Ð±í„¿zK÷Ð%ŸÇµ0§$ÇŒî3Àá… î†¢Un%Ù€º€R‚T” NÇ$!(©ÂZÚ`(c>&Í+u•;DQ®Æjª"×:v5?IÆ‘‰ÉFé6¨‡Ö¢Šz
-¢­õõ_#CúíÿËFî!ÒóÆÓí‹Ï!+°³ýøÃÅ3yÃ'ÝÐî³	Iª(ÙÍ\g”ŽÖ˜À$½ˆ…hÒ¶1L'Ÿcf¿¯úä™m¢Á6á}ÜlŒ±b�ô×{X½‚Õã+[_<¼òA�g¢pbÐÌAÂ÷3“ˆ£È£eè¶äæ‚ï�ÛŸó£ÎN´_D‡Ž"É'Qìƒq ªH/(˜ÍNîGý6ŠeJàÅ}`¨± .¸W£™Áˆ÷á%Åó¢o.½¬Ü3ÀšL»¬¬ùížÃ�;‘�µó<µzŠÛ@M9&!²EQ!¦ËýmŠªìT5%Oö<âÀˆ¼qXè‹}ƒI15‘b2°¥ôí’x 'æß	ßÇ¢ŠþJ/5“ÀÝ^P�õ]’¤îã²‚‚®¥üa´4>Ì¿‘’ñÍ£	îˆ�@ÃHñHq�Ð`.¼¡�>EWFII“#V�C°»iƒDÂ2[�¨ÄáÌcÈàn}zÑ];ÂEØ®”¢¾ŸPµ"Ìà¥@«1¦v«7ºUIÿ*iúPXR×ô�—@¸ú·¬	˜Mb	NkQUn‡)Øî]1ìõfšFŒ§2o �È`PÞîK8õÔõ<ÍöÌ0ŠÛÿž¢ÅOÕà,Úîo<ÍxgÎC>µÀp
-�_8ßŸç+VÆCÚƒçXFß hÃMÐ¶º¢þnôÅ©ÉÖãùÛ˜óœ$¾¶§'2Ãfæo0Y„Z€a*í‚Ç2ò#~6úƒÒVÄäßÇP�%õ­1‹;ci.~Ï…‘øå÷?ü¯m¡ÄT“^U‘l8GkWâ÷8Ü»·ë{<¥HoC)%“áO÷æC'ñœ6`¢ô�¥»¿®î$Œ.ó÷oÂç²ÚÊðÈ¸,�ñmï‹þøÀPì¿wû"¿Ù=yvBEñSe~i�'7Ý×
-Ê‘U–Ÿ®†C¬éã>é@Ã$âêäôB¾éXG*Êfs_°—¬¤Në·¯²_d*Þ3Œ\¸c‘¼®-,µ¢
-úäì‘š ,ÞžßIsnŸ8zCOø.Îjù’�“±b*¾àŽûÇeöÍ|v´õÚP¢¾ù“ùQ]øÓ�_�ùûñyÎÊ‹ÓTnEE¨}ô3íìJF#vÞ4
-¬øãð�½%àë$%ÄÝF¬çÜU4Ï‰Òê.�pðz¯…á<8ËIJ¬,qZ	ù‹QåS²s‘ÉUyò‰Hœ‚êdA\ejFŸÁIêÆçÛþuÞ<åÿ¬ÿ0<³¬z"ªÇDIÑWÃ c?íZŠa;Q=õþá}Ûº?|ã�´7G2¡ûRlvÏÎ-±Þƒl¿©ÊÖ™ûlÄ|§!Z8^á(åÛ„îÊˆ)…ð’/Vîy}0ùÎ%O“å!‰"Éä¬ÃS¼VFºàðÐ‚l‹¬)!he‰F(Øžá,îâsê@ù£Pœ,2;ÎÃÐ~ 3ö9¨‰®ÿ‡º÷€�ªLÛ‡OŸš™LzO „^¤Cl Š}a-kwíºÖ]]õµ·µ¡ØËÚØP¤÷J€��^'™–é3§×301 ¾ï÷Ûÿ/œŸ2“™3ç<§ÝÏ]®ûºªEtN›8º?zƒ 1™ãé3�‹ËˆIúÜP¬kõ¨ÌLJ÷î�(X  @ IDATiù¦þýru‰)Cº¦Ü¸;¦-=f¸´´»­;•³äAjæâ£0u	¼á8X±:ÝžßÍqôiË¼“½?]qÊ)Áß\ÈÃ4b'F#7‚×¹ªºEá˜‘&Wˆp5ÝÀP�>—T)5ìí6åô/‚~Ý$÷Á}-+=¬�YP0é—1à@îËr†<¤˜ÐÌ§7C
-|×þEuîç6Ò£ŠËGDu¢3R�Œt‘Ýâ‡oÜ�TÆ60½HõA˜ƒI\ÝNèS€F•†‰Qè�*ãM©ŽˆSøî'ÚÌ}µfÃºÊ‹ONRÇ4±h,Ü®£åX¸fa¡£¶ü¨‰ë÷ÎÃ‰üyS\¹ÔÀ±7Ç‘êZdÎ�¡zÿ°¬7”÷›ÊÕ«USqÿià1@¨ußÈ4Ác7â÷eõçÊ…ˆÖŠ€ëÎàbì¦ŸßyÉsÃÅÿ&ú¿<~b?:Â‘B8C�Ým£ÕÄŽo¯Ú·Ÿ´¸¥îNIÊ�kÔ³p6Îµ
-Ìix® z­†nwè¦5úœK{·”w2BšW24Uq¢Ðk•5å Âpb®Yhþ£Žó¸ÜV¶{úk*{ªÈÇ—ž—­°C•ÖÄ¸I˜¿Ýå½Ä@›
-¡zqhâÏ¼¾·ë±ÇNCå:ô‰‰Ñ˜t/m3‡�²¼ u#àdoø:¥Ï¦ÿU×-yHŽQ�¥¨ú5ñF#<›b`„»Á@¶lj®õà†WqTãÏDø”¸T}6Ë¿Õ³¼¾#©|±¡-8½0³ahû¢Ãê3-ÐþK ¦&ž?þÌA2Cÿª‹1OøU]™¯èÊÛtœJ¡2Rü\Dì×ê�ïºlè!–±ä˜ˆ!7™R¯U¤_2ðÍZ\¾Ô,íš_*©”´�§BÒ±jP¶µ¿IÜÈ«À^%�×�æP$ [A‡	¯žyzB¦­9jjÌåw•d¤pÓ]>ý°Y˜˜ü~vIüÒóûX\ÝÝ6WŒ?ßGx�-–cúš°ýß°’ã\tÐ?Â¯Ç¿+œÍÂ7Awxé,¨Ü®�·�›&evÓil¸~¤fþÛ…i�ºQ0p+Á£6CA¬F3Æl,Ê«¾•îvµŽ†*ðÚvßË¥¢ø—Â‰œ€|Zœ¥µÎ"H¥xB²Ò¢Jþ.žI¡X„ì¹=(³· ª¢ÓÈ›à‰7qº6wPº�Í>{Ä)Ï|&p	“ãb<¶Æj0WhÊúX$"‚¨øV),õekqFcÛ8Šc9:roV»# §T¯ÖhyuMZÚv¤‘u‚ßýÉóÉFgð-ˆ¹ê]ÑØÒ\›õaËþÅ§,0Ë])½kª	hÖ9¨µ&‹øãüZ}ÍRR&G#(Xê\.g È=Úý¢Ãžbæ‰t¶…¨ô¯_Í·²SÐÕ7‘§âO“¶a2ÆÊúpV'­ƒÖáŒ¯ô3¦6^Œ°ÿ“•e.›cÛž<ž­ííFƒý:h0~‹EM(V½nT†}Gr�ãýz\Ò$ßÃ?#ß:„�r©¯ÕÖÑÍDd�5m�‰¡-àbMíP·\xû°lò|ñ=ÈB¼‘ï/u4x¡/ÿ4¥Äï¦MÜ·0¼É0ñˆã&Æ¢�ã h(—_a¦Y2æòÞx<<¤ÂÍª[UÕÁ¨(g§Bó;“/ôË%}R[‰á%E·í¾9Àó=,ïÕ¨þŸ�Ö?u{ñ 
-%ñå…Ž*ä’Ÿ�iÌWm¡xL_ÁÓÂ«Œ�{ŽîdÚÛúË‡e<hïjå<cæÁAó…¸‚ÉSß¢ï–n_W}QNªORŒ;êµ©œöxÍíB>s4æû 2 ž+à-"ý8V"!ä¹eöÆXÜý=Å³O‚vóÐiz¬Uôý@/Ùÿº@@„úƒ�µlm5ÛÛCN|þ»†ßQ�Œ§¹íï�,†ŠˆnŠDØÜïêÚvt³¸’äcÉå"ëö^oÃð¥µŒÍªQUxYŽ~Í±ühƒ³¸lìÖŸ�-‰á%¿¢ "!Tàý"-C-Ä™¥]¾hx™`e×wháý¨ž·”+ë—¹ûA°z:ä_~€Ö0!iã7UgøG[Âák×®•DÅð1&ª\óŠ¥ùŠ
-©EUÃ‹a@Úð¹ í/PÕ~ÒîY�klƒá%cÑW‚Št›;tõgð
-¢ Òû¸~ÙÓiÑþéèŒâÁC}rÚzÈoÞƒÔ”ÕMkÜ	´ˆòSƒÃ†µ°zYAj®‘Óf#Ï"®Úcž°†7q_ÆÂ¡Lz« ‚²[–ã¨ˆ3ŠúÍîþ>g£}ým\>è%ÿŒ‰ÞR„‰ÉaŒ(µº!}*)ÒûT@ünY^æˆ¸-Ã¢—$×%¯°>†g~nÞ¸ªÕò„#×/àWÑÿã–ÿµñ%ÆLKg¯RT…Cù�ÎòJ1ïøë2ãÀ{ëÙ~ÓÊE&£5›b”vžÒö‡"bXu¿×{Pe”'U?·-ÕœÇqÀ{±‚i<§ÿ¶Ó¾ˆàI�uø$—|ù€</ br;ëµÎ@Ëyã±"iX¹ªÇ¨Ê˜úÌMgn?ù0X“„QÊšxÖT@¬î�t=à°ú<¨K|Ž<å§ºàñh�âÿUà{ˆHáài.fÊŠ¶éñHìo0ÖæáÙT´·q"òjQœå.ƒ®D¨¶‚âØ¿ð<W]ÜÕh‰\òøãÑïÞz®…L½�EiØ‚Ñ0¡ÈØ	¯­7ÐT£Ãðät—o|EE¢¥VW9ÛøXTWÕêW½óRõl7úñÇi‚¦(5SÀHUjö�KÕ«îžPpLèÙ'ñð£ÛÇP`Ó)öãžmEßÃ}þ¸òLZJJ�£¡Aû=ìç
-pÿ}Ê9W ’�“xf–\DÃŒ^µ] ”÷ÃœaÇ›­mÇ¿æ¿Ey§.¨ðÖ²‘’Á .ri{cKñêDÆš0ò9F�@—ãåh›^¦´ïÔŽ¦‘ZyCÞŠúÀ)a™¾fðôé†…o>×�iM�qª~íSÿ¤T¶ºoQ{»[
-©s77U¯íŸ››T¶¦Ö·ù.±„Wá?„Éë^¦‘\{ò:8¯,Ç´FT~};cN(?$¿<‰_C’¶ÜÄðƒŠl¦bQÕ¿†ëí<ów”g›››ÛcÑtAôÅÄ�oÓiEYl=t°²ÎO@çá9PpÎ¡ëfHAÁ	�çbÍî¸¤/�•ØfœSPO¸Ýšˆ�¸ô™‰ç²-hƒ=Íž¼º½ûi†ž½Ã,%T=z®0F–”ñ£'œë³d]‰ú<p=+üozŒãºmSßÉ+€¯ô£ÏßQU¥é˜sÓX¯ÂÃ}ëÙ,éâEõ@Œ1¬(þ—•%<$‚—åØg)4Ñ”™ý/„©�€èü:Ô¯/¢eê1k†pMe×¯l¤˜‚æ�ò ‘“Ï)ÑõxŠín›åvxsý¡¾B›ªJ<ª’€gß5%T�Aªƒˆ+l¯B(+&És)£ðž¦ŸG±îÚÚJ2Ë%ŒÁc€T”ä”)e·¢1pŒ¨Ït]úPÜòsY‡¾êPˆã˜²RÇ8„Ò)Š¢—ºý*rÀPm\å÷tî�ÿ‚™¬¯­b žìo.$¼9pŸ3MÀ¯ýLhw#Ü®„|¦$3ÏK…ÑëÖ·�n€T;£Oç,×SPA{®Æð6V5%‹¢…·Û
-3ŽöÆÉP1¼Ëš}¡'ôbFiÞÀ&6P‡^–õh)6¸R˜i˜3gvbrJþ&ùºÎé”janCÛ(KÚÏhÞXˆ�HIº$Ï–â�‘õÒMX?qî’¿k‹v5Ä»µmùº´gIÀs`2På‡BB\µ#×…„ù( ²8ÖÜ©ÕÔø‡Yœc=€¢ÉëðžÑÞM]8rðà\¿
-Í
-  3¢†¢»o$>Q-¯ìhkþyx±½©7¦{E³wÇqöa´ºMó ðÛ@T•“ãœ3dˆo¨W<#=Ÿ'¿?Y_Û#]kQ}P©µ´AZæ©7 ½úØ#Å÷íÍ÷ƒ× 
-ZÅfàê™p©­²¾’m•Dqµ�ávA�ÞG^«í|Ô¬[â5#‰­±†~€� `g¬�Œ3²cCx®ûZô�™Ö^úé4f4 ‰øžýš§¾÷±ÄÜêLº®0ð�Y–IR¸#"øÞë�÷ÿkã[ª‘¢ª²Àú›5ÿjÏ™�
-³¬ÀÁ¸;êÂ™ý­�“3ÌÎÁ6ìrÏ�Nò›r8t%È~Ó{D�}ZÖ•"1¾B%²ò¬§ ›¸;Ò‹ŠR#!í®´A£
-Égîhwƒ*+ÛzoS9í-6êjÆç‰mƒÇ7�gÄß‰Åí�!—È�A·"K»§`,å¥¶úòc3‘®!+A÷Ë¶Ö˜9­©	œã”]QŸóŠöæê‚ÌF2�t†¥Á‚A½V‘Ù§÷vwAøÝ	i–ÃÑNV‹¼Î[ÔHlíÄÒRwïc<4‚CÿnÞÜfZç
-L?ûÖJã‘À·ðì¾/QK�sFþ›ù7ÉPxŠà ^D×Ü0Ûä®HÏ$B¶"*âXÈŽæ¾Wèúò^éŒC{9ô/1¼+Z<cDU}Au§jâ:®íÓGD.u€sLì3¢mÉ$·Çêo6™ÐðÇ¢c³bUGkõzÖ | ÓìR4¸(£G'¼y� ßëÂÒ�êîÈ0ì™!ÝrÈø�kM ]¸*Ah„(áâ}Þè-{=ÁË÷E"õDÀ‚_Aˆ2	yÌ?H»àòzÊIWw`²,”ªd¶Ëil9þî ©Ñs¢,>ëÓÄ†4XL‡ÁÆÏŽ˜ R­Æ±(2‰+j],.¼Ô%(ó.kª'Û&û ™À£¬ÅñÙT<•À¦±�Ck�|ÿ^?x°oiãîõ#úYÝ@êx²>—Ë3ßRû®0UÈDÎs*KgÓ‚„H@§Hk4™‡s7)¦kCe†ó†Ö¬9¡Ïy&ÂÂsCm�¡hª&jv'Œ/ùh¡u¸¬C o_dÕý%?`£KÀ`¬9èÌH^Ù† j¡}‰f¯ÕO|'è�‡í?pù__b´°¬$"•6F�¯Õ9ýÔ5ù¬¬h°õ{WyÔB¾Ÿ5k
-ÓÌ´?nåxfž¯aï7á}»—"A´‰2¢$òù[}áA;Ýá9-aæ1€¨/E«í¤&x²ä!ÿê¡Û›ã!}ÓŽ�+w~{ï¶ç=ªÙfUU­È­fYmötr³áKrsõÜ`v‹è@Î÷~–u\2ô5oz™s7Ö‚ìV«A‚ÔY’nYM: ù!�*tòœP•àMTq-¸¥iûwïmö o¶ÅË3Ý¯þ©˜{6=#SÛò�ÍOÚ©×¼óÊ®8ÇÿdáÏBé£ðª( so†jÙ¬Ñ¹‰Ü["gÝÕ•ÂÖt]’œQQÚI¼˜ä> º¶ÈéøóÞ€ŸÑµº.@Âç2›0½Yõñ›®„Á‰†c¡÷Öðº9	j3~³Ó�E”4rEËÈŸ†”Æ,AÑ.ÐÕØ'WÇ[Uþâôìl}á+ÏÕ�ÂÄ…íëUÝñ¢½¾ÐµÍðZ<.¾E�öx<È
-%&Ëžóº½3<…W�Ü¸Ð¶Ûà‘<.ÐÛ‚b¿`\¹9„SiýÜ‚üACðÛÄ}ÙœÄh Ù�ßÁÕ8§‘;¾�ÑÂo�ÌrlIvL’ïŽ^P_ Y?¨1psqF­�4×$®G¬<§Ða„EüšCã>âë“å�ïë»‡~}Ð5âqœ?¢ÃvÞ°QS·#zÚÙå?£ÔL��nŸ–nå.²ð&ãjà«áíyP4ˆ…%6ŠÒ	�Ó$Ÿ"éš+¢]�{1�°i‡äuùÿnDŸ!`ï‹PcÃ—ÍJ~ÇÊÝP¢ø¼+¦¿®Åµ}ÝÁMÒ"k¾‚O1¿³×èKÖ%†zÚ”OÍ´t�=(£3Ñæ7A–*¹�?âõ¸ ðìÒ¯ÕúRr¤(J³)¬ÊOŠb­ÁL/›fÐ]y¹PîeàŽ>’>ïÖ»¿Ð4:ŒÐáÒ*2+%ñýÐi0””qp¶€jH¬^ŠÖ²:‚Np7üJžCœ'bXŽÞ~òo(
-g‚à|`4ƒ�y3®ŸšqT%w]{`Ž‘£_Ghý²ÆŠo€¤ƒTOuÒv9­dÐ9¨Š_¥èÌ�(¨õì«˜ÖÙÆ˜&»¼±UcûüÕ©måå¿Õ’û&¯Äp:Æžug¤g€[sN(Üš/£÷ÏžÁÛ;#./!Z'ÊÆ~¨ašáÓÒ[§˜©Dú‚hÑ)ñX¡
-wÐh¦i&v[gÞ“Ô’û Æyv
-Ã^u°‚¡Qƒeßi–¼;R5ËXJ’¼Æ¡Å“•||�ÿE¯éŽGWÂ P:HÍ¶½{°®.žkÏyFg¯¢ˆµ0ÎûX•ž¸Òæï÷WlNF	Õþp9<Ò»@¿>Q&Â6~¢=s®,…Ÿ®–x£ÔNo3êM(ï5™e˜ÔìÀ[ÞÔÂ`dÞ¿ÇÍñ°QômfbRù,iÿ Ãñ^ô}îð8ŽscZdÆ˜ŒŒƒË*+Í'2h²C“&iÐHOÍ:Fy< gq=Â¿;ßÆßYèv™Ï3:ØÑÍÕµó{§%ÈØÈB�*‹ão Ê¯‘žò>úMŠ(±â	üÏœUÖÇç|ŒóšYÕ¾tt_ûläÂ/× I.4 VèS¢ÌíÑXç­­³/.,¹ÄŒê0Èñ³ëbÎWn8ÐKRyæÁ£ïD~<H5¾-á;W-[ãô‡z�ÿ›SKîåÝ¾ðlU¦<«[ k“íHp÷Òxæ�Ÿ^bçè	°þï6Eðã
-Š-,ý'Üµ�ŽõË'Æ÷¨1�Óö»¶ä¨uÿ£?{
-ÿÑ¯ÿèÐC@8Ò¨EÍ!—HÇB�×¢’ú×j†¯Y]Ù¾êñáù�ö
-÷zï�„@;<Ñ/Ð{\Ñûv{#P£5bÍ,tà™V ù÷@u·©˜ƒ‚Âu!I¶7DÛC´0¨ºÚ} ÛõÞvï÷ÛÖ·¦NÊ_Ž[?ä/ÅL¾E½ÎêŸžÈY&mtýJ\Ä zx7i…ÄÛL\ <´
-Ï¶˜Ñõþ‡ËdT~(–[…¶™ÁÈËÚÚƒ¡ŠÅ]TÎ¯!mï}“÷ÖQSÒ3G•µ•û:¡c‚5å“M¿²Þ%Ù\þnÓõ·¿µ<ÛŠ&	k¢Wýð|’CÐK1›ÙA¬‘JSiµFÆ�6ÃÙ¤(Ò©Ã{ËQM­`ñ™­>Û—³=½_d6ý}hnbIŽ	¿Il“LX€ûý‰„=”]õ
-Ö/ËJV- ¨QÁÔ“åŠé_3Ö¸7ixk<�1q†}
-N)š,”à4’›½¡Ýõš¤"…©Ùþnwè2¤	J‚ªòOÅŽJ>w(ŸšiòÀhÃàRX)ú;à±çé2=Ç5Ký€/´ÏGà€�¸QÞñut´Qz2²IN±Äð¢çŽ˜H•‡ñ´&qËÊº¦ÀÏUÄíÊ&4’LÇ}uGYnñŽo»V†šbs°_&ù Í¦}Æy­T\²ÀóçÊ!‹”<O'Ëë®Îf™£òpêº­–”¨OTÒR)ÖŽ«pü1G¢HÕ#òœ³ÁÃUZx“YÔEÑ5ÞcODU©#GZ�ÒcŠé#¥œ�úˆðÑÒ¢‰gTãç‰ÉðD<ä^®ˆ¨F+“‘è	&šµá:Öá:ÆuÕÝM~o€ÑïÐX8@¡¡Žó kä
-‰ê¼šz5{êô"WãQÇ–¸�úì¸þ™ïŽç�]ûc:ýEŠÀÓŽ
-ˆK3›äì. g&ŽýØK8ìZ³åCÑérp\Ž‡2 ýºJ=¨éÒý¼`x)÷Ì�íK]ÿ#ªþà¤*DîÔX	úÁ0Å�1RÌøH®�}8•@vbØØêž²¢%0ç£ÝmeÈ²�ÎQõ#˜ÍM ËK³
-ìMŽþ¹5ÎÀ�k;ü×ÆcÒ=Çâ¬¿òûö–ééã²²\’X+pÚÇ­Y‘Ø¤Hâ*5¦~k 9öÙ“K$8zIçMV|–ÏqÔ�¸jœj±ï´˜§†OÖx0r¼×¤0ü*»LX�lˆ«¤™ÁHj‹�f7!ÒhÑõÔ=0’2ø®Þ5©!ªÜ¸Ì>^gßRâê<‰RŸ„gi�ç÷ð ž:ï‹zOùãü¦€@¶¤…òôÀÏ¾ˆ«ë.þrí«; Èt[Œæ*OTïpÁ,!¿.ÑÜ]¸˜¥*%ýËh`?ä0¯°„<_Etåoš�ÿhÔ?ÈñÿDLžÀ:\cEÒÖo®SÙ|xª6xË—„Ã Ð§”G½Û/)Z9<¶ÛáL�BÒîŽâ>�ÑíI­�í&“%{¬™ånÂŽŠ€]~Gó�7BUÃÃ×&@^	ÞøË˜¼›á7Ðü“éý*˜®nQýzŸÇ“é�¾}	ùÊ$�p9î“o©»óØVñ-Jcÿµ¸vy("I[]1ùM%À}æwÓ_�ÿÛBÑÏÝ1yU4 FU.¶¹3Ðµˆ½•c§´¶Åb Ib+¯œŽŽIKT�­ÇA ÐqqÒþÈ³ªßÕŒ®ù|A Ì@âç…ôâäþ\&1)Há}ªÐêÓ@ëlÿNZU§Cêj†þÿ`9î'õ
-ô–#�Î¾úoV�:­iÝqQ"Œ~]êøÀ¢yK6í½23G«{ûö�ýt@n)ùcñ´‘Ö�œ¥ËÀÊ¾†¬ì8y˜({‘NaŽÊ:åî4¼²ØR.ZgÃ@‰Ä6ÅdcæìÙ4É{fÍ·±¼a†Š…éÖ:¾+0·Êkßp ÖX[šUôä‡bð’¦Jv>ø&"Æ@¿xy(öC#„!×+
-œ{ä 	1�;qZd±˜¬ì2´GtêÀÔ[;U {�…ì;Çdº)š1>DQ¯E¡§Ø½´èß
-Odr
-ö5š`Z7 [÷‡&�£¿²�árª‘ÉDÈÞ{¤_…°zÝQè6uWI¨ôy�óT@þÉQê¤ˆ¬|bŒ)Î9£r=¯mõu÷Íg$´)?��ÿ!%®¿]œ™¹¹÷ö’ï»ã�ïÓŒéU ƒ…ÎiænV¤›º¹A2ÑÁ³Ž &¤O@àm#ðçéÈÑnSŒü
-ðà’‰j5EÒÖÔÀ¥µaàÚHn×Í†š7ý©k(ª­üp¡®Ùý:¬ÑW¢áyRÐ&U–#Ze6÷áAÒËQt#$É¼ò¸_ïµ½ävÉ«…QO����˜±çó#w°½u RhMì?ÂD7sªå'�-ÝÊpì n<¨Ú½ P±æG){âš-Z´H=ó¶Û6¦ÉFËÚ¦¦0<&²é“j9<É5’AOž=[_ØàËFX5”Z»'‚.„|þiuØ’j`ògÏ¢Ï-Ê �£dîFªîÐ¹º)//¶³;´óP6¦ø çIÉ¶ÖF»�¤�nì	¼`RW¶zÂn£¬@�¨�‘•{�99QÐÑ~ÆèÔ@^ãtÉr‡�½ Ïý4X•z™Wºÿ×‡wÜ=_r $�àw¨	Çø•hÉŠR§ñõFVÏŸ8ræ1½ß9sæàAÐ×€8àËTÞ±øÙÕËv�š—ÖFò†0¼$“¸øÄ³4®8 W,;ýÁË
-"=ŠFÖÕ²j³ÒMY2ÆÐõ42`Ð£³ÁýyÔŽŸò¥‡¦ÚG3ÔPx™÷_HÐ/A‹ë�¨¬.…ºï#A*üöDxy�ò<©}±tw—ÿ‚º€<²àôY9#Ø«ÄŽ0<Cýôã®�+ùØä…ËáM…,«_¢¯[)Q<¥ªêPõž|?>�ñ¼ð<­Rÿf8<½ÌÓ!9ú/ÑÕ°˜F1 E™•µ&‹É~J#¹mòJŠ–crS¼ä•ü6ÿ¨æÃ‹_�0ýìN^ÿëëÕíiwŒK2qÏz({@“·õ¤e×Àë$¿9z)ÏÏoïl?¸%.Óeš¤àÂÊOXý^Zû™`�Â‰?âÁ‹kâ©@`8 ò~ àñ‘æ�áí¹VÉýÀ°nÆäÑ`þê—+=ùyGØW"xn†1Yt�°U5n^Uq°³ñg[È¿h€Ý¼s°�òÁð&Œ$Ia$›|%ê™H��ªš]”x‘`ñ]b¼d};m9�Þ‘›�9×ÀÖ¥qPØÞVž›ÛSL!÷+rûÎùo>WŸL«$·’½ê40à¤`jA[zªÙ\Ö^Sc$õ
-ÂÂòTq¶Å05›eìÉãJ^ò÷6	¨q}¨KóXUžbJ‘�k¿þ¤íh|zò·'Ú«ßåßƒ”•‹a)7ÏÎß$2F21y¢‘O19hŽ~ÊÂ2å yÝÆù·!#w~&’ÿ¼ü!Æ—‘ù©ýbnjØµŒ.ïCWÉêZÜÚã.Ò4Ažú«ê¦’¯Z£yÄ ’õHßvpÔ–~iTˆ°`%z².ÙfS“?µìô³gA9a€…¡bÖB6‹ÙÅµ ÛõèäBÞ«Pv‹6Ü·b!ñ!´²¾€½Eq £#¢ô„`ð]hâúÑ„
-1Æ„>VÊc’zHRâ/Gxiá¹ïæ¶bW‰‡�ì²ftYÝ£c
-y9&³|�°kWdxš©ã‡7uG"ÐÛ¾òù¥²Q­�©¡1«;üçZY‰Ü¨®ïùî³J�m½Õä—åx`]
-c8EÈê;“æõ"ÄnXy‰;ó¿ï*"ç…<L?6º²�©Ž.šÍ\hVåGáÿoËàØk29þŽ¯÷¹J]”Í&PÌçaQz%¥²O§Çˆ’tÍ¦fß„e­ÝCñ9=cÄˆ(
-�íÍ´¥øÂ‹¥;|3o9–t&ˆŽ0zÈïfA€ùL1”P%øù¿àú,DÇR%ú$–µÞàAŽžüÂnÉÈ„Qt ´99¥#Þ<h˜ ?°Jâ:4�±Ú;œ�[¶aÜø¼g<P�Þ	ŒuÅÏR¯\HÎÙ6y%ç›RåL� MÇ>‰”V#R þ¹Â®²^¯6þ�‘ïõÙI÷ö•óo§õÛ&À³cô‹sSsß]PöQqzÁGý,æ;€fU)rbâ>úàÑPd§¨Ä—0¼Pað³±o¼ñw�£ÿý÷ÐÄ"ZæÑ1Ñ �Rz®ñ¥ympð;AJeàY¨jéñ@­ü£Ó
-Ò·ÇuSùfÐÓ"v‡üuÇ�XçXF( ­8#™zZ“¸k™ÛÒ§/—ÊPÂöv9åæ‡>#¨PÁ­ ,©`6KEæp™ÉÔã�£,fæ»ûÁGFtc%QZKÕY®/€H%ÀÂB¡4¶5ÀªõSr2|�áAuœ*°O@|?¥Èm.Ë®ÏóK¹È÷�M3:àùl´\fx9xŠ/ÞÑŒ¹‘€Òúï]ëÛœ4Î�ðYz¬üWµÙìgd�Y¸»À°6>]úÄ»S¨‘î¼<J-ïµnòø@ t½ßUG�[ û2ýž¢ÿì0;lÍÝjíÅgŒÚÌ¡b«Ñß¡ÒàµÞÅSúE€Ù‰2ÏÍÓÅ@Å¹©©ÿíÿm“B‘–[�r¹]¥i<+uëÝ­»íÐV½*ælp·�á¡Ô€‚Ëò¼Žƒõçž[B<Òžå`0†ÞuîQœÇý…)†F"i�rÌíö+cû¦ûæP–,‹‰½Œ§¹´z\ØþËOî!C†$Œw·Lx—µrò Ç¤è·9©Æ#0È=;ÁRAÏÉÏ‰¡�ýÌ4Àç†Æ¶¸+*G[ùµ(º!í¦¾0*+£«÷LpEìÕnÿ¸îhˆQ)}9ž/G~9ÇÁZ·®iv—•¥%Ž§Ú§5ÀÈ1Ã�Bé“&Ø*Z"ÒXo½6Ê©•-.½Õn¦7XqXÝpŠéiHÃ”å[ypÿ�Ñ bé=Þ“ýýÆ—Ía²äxzÚÖÑ¨F‰$°ÀýoEK’Ç“ÞÙ¶yMEù�!GÜä¸Û¢âtµM` Ç4@æÁŽk‡žTÅG§…\$À¨œö‹S•<x¦{ž¥Ön0s3ºGöw|ºº´¤ý*«ÙÔÕ•©jìù°)·‚ïT ÎGvVï]Ezþè{á5¾dðÀaªýÓ„Øü!C´UT<zfT‹]ŒXÀnáY£¤ˆN%ÄTÉ´üf6rÊBöy†àÂ0Þ(—iŸ.Rû]¡Ø¾ÎÂlç¹‹øØá‡ÖŠL·Ø?c·qŽÒ–P(� "Ö5åãØ°8�éGÔ.bŒV.í\Á,ìèÓRç�aé9ÙÄÓ¾àÎûƒ3xRb`Dâº]¬°¬�Skæó¡ò^†ûëYÃ;0.…—|¶/�U–qKSç",N |$Ú¨Kƒñæ¦�[<%%%Z£„
-ï¬­aÞW�ŽºíÓNTžÉÄÓîÈ-ø×—ŸÆÎMºz-«Z¥½¡¿²Û×.¶¶iÈÚMV…Ô6QrVlJ;*h³eYm†Ñ‚ýóê¯éU½'ÛmfSËL{ÅBÅ‰Ñˆxk½";!7ÕU–f"ç“o%i,Ò:\–Ù [^±£2ô€WîŒI© {�	#|›ÖZ„æ!¿s>¼)éý‘ºé�¯ŽußÎ¿ÍÔhªšSÙ·[ýÎŠ²´´#ò�ÝÙ)Fþ	0Èuí&Ÿy(†3m‰BëÉXl¬+8<I“ñ6EÄçÆ‚8„ûƒPx;n<þåg÷IkØ¼äGç§Ž]v£»‘5ðƒ1îaHÉ—X›Þ·Ýå¿3öCgü¤ù—Dô7­Q(7Èµ€m‚Š®Æ­ü&Øë–£øº"�¯lÑÙ­÷N>¶xf#Š-|<Ô�by]H•ÅÌAý«òzE�'Ã™Ø¸hQ˜Oíß>© µ‹8S½Ç¼4ê÷ÊtÍÄ²bÓìèŒIWªw»ÎDA³ŒÞ›ð]ÓžŠê¤£Ñû÷ÇûýqÁù’A!×Ä�Ü1\óg6Eü¦á%BkÀ=É¶îÊ�ëNËÌÔ|ùCçh$(.ád‰‰?-mÎ®:œ+<âø*HŠÝ˜‹p†ÙbÚ�„>îß³Íë�¯ùK}°ŸÝB?¤èj}<æ›g6¥Ÿ	±F ûùg5OüÇ€�)7ÒúFp£Õ4‚|áà~~|¶5Ñx�Ü9Ú‡áS· åêgF¡ƒ¨ü\QÆ7‚�M¡æ½{ý$4N®û{¯ä<¬jé¾Ö ·IÉ*î×�Nb8¼ÅJ ^Wý«5söé@÷·ªœ©cm¦…ðô ÝsX�+SC�7ˆÆZr?‹›=÷û$ØbÙø½(¶Ë9™BqýQä½Û ¿¸A±ØâZ8ü·8cZÈFÛv�5›™.Kú˜ƒÎÆ]ß›yË=ãüŠ†‰E†‰í+ÃŒ•UU1Ò7£32zŠƒdüëš"9AÎ—T:C0Óù†¨´tDAzG]8œ�‚çBœçq(�.4ÈÚÍ¥8‡É1ö~= ….½$«ò]ZDØÎ§ÐÅ<Ç¤„ÔÖÊeÚ{§nÈäÐ÷ÌsäHðƒ‹‘Ì¥Ã¡T«yº&Q^]`*"•;jH�%¹`-–Ìâ—àÕ^”IJTk²þ q®·FONš|³Ñž‚bè‡Huà,~aÐ©{(¾bº‚‰mØf�÷�Üþ‰üJ0òg^w[8˜Ü´Ò1ê+d¼_Õ:o*J±žÑà	½;hhÞšÑ(<ŽÏq�õLäG×žP|²ÏA«;.+ÝhvY?ì­ê}ôú'Ãß¿@™;ƒáÍ£íõd¼‰{ÀíN�—ÐWŠe#ÎÈ
-4w9 :Ó×Ï+W÷�ý#�©ÐÿýB—_sçLè)KÛ=ghQuŠTj¿0ô\*@¬ÒlÎ�0iV6á20òáU6Í´Và©|QŽw²¬Ùnç»è—æh.F‚sóë2º®ot¶£
-‚�àµkaÏ.ÈzÞ�­ž¼íþ+·uE.S¢~/êsZ4ú1×ÂˆaE?9f¬Ô<iÎx¸ãgì ÷Ö6è9½4ê{-Y–#X¼Ö#Ç	ÅVD^Ìn„lç �?ˆR¹Ö`Ä:@tbxI>‘`‚7¹s0ÚßœÃMPÕ]ÝØ1ÀhV‘:©ïTì'ðu?ŒâÞ"tŠÁ�q™-ë†gï5±¦´,w³/ixI˜þiµëbQ¡ïeùÈn‡R8ÁS1ÞaL£ê¾aÔ ¿È,Æ‡ÀËÒ¥qÖXÐÙZ2moÕloÛEx‚¶´‘`o»mPvaŸâiWhW>¾Í0NµP$àö{~Pcâ’E.—»é1<$_:¥ØÜÙÜTµŸ±²�lD[³µK"…	ýó—^òâ¦}ö9xÜéQ–º�`­“ãL¾‚&2UÔ™ÙˆryÁhoØö³·få¢íMW­¬ÎLÝ®«h+œ<}è.\»
-w`öV´v—–ŸsŒìéÝ¼€øoÀ æbRì§é¢¼DøUM�-µ½/1>BFñ¥ˆnÊeY#¯Î:5®*Ý„Ô(9òŠƒÓÛUÿv@ŒÞÃä+Xý|‰ÑEé¹hÞ¹yQE�ø�TòÔ:ÔÝóã&:DÏvXòé…)&¨�Ð¥³)öü‚Äàj¹ìÂz_!a¨;ÖAÊQ¹?ËòÐ'èÈ8DL¬õNÄÏ44Ø“$\ ‚Ú„ZÆvW…oþÑZQ*OŽ™ÜŒDŸ®¨–h¯ ñç~‘ßGdúžª²îÌ8.‡—5 ý'möÉ¿�÷ëqI;ÔøýF�FÁõCÅ¾Än€:IÐ�¦šY.%#·{+o¼üÂð©©‘~•›ÄŒÔ#§é]èÉ�ç =,iW»Ôöq™Æx/BvbôæxØÇ´6v�:4’““@<³q×Ü>
-Äv¶¢©å&‹‘	w7œ9 ßõg›fæê4‰ƒ÷ Bk3¬Ö¢ Ž.YþšÓÄÏ¡ÏÖ€p¹Ç‹?n*Ï@ÚÙf…Y¥ß :·þd¨m‚$Ôg ŸKöÝÈä1Ï} §1{ÃæºBÛ¯ëÊfÿi(>
-Ù xmæý]ñ–†óûô‰?óÙ×€¡)UÀ²iP÷>Þï`ô!,FBKÆèÛãÙÖëæ¡.Y¿F-7ÄÀ4£Ù[7WõO5Ø{ïQ9#N S›ÅªsZRZ¯jŠ5ø£>U×fP1z±qDiëù)|@ÊÐŒwÝs×1E!ëƒ(Ÿ™>xHvE(™‚H ÃÄ3~†Â9‘ŒcX<Ôþý´jÊÈ øù<-ÉùíÛÓ�:8¯k4HªÉñÃøé>9Þª©Ã¤µ±¸èŽã�Á°3n5…RQ§¬ò…H÷w¹óe�ÚkóÑãFøHz§¬¬L�´‡Òé™7Ë°âàKvá!™F9hÀ‰](dá³AHSAX‹úÍ~oã¨¢<ÿ�ÌÌžë•KK 6Æ×„
-àÛˆ3ËÐÍU±Ó”}]ÝëÊÒ¬G!ñ�Ð-èr:…¸Bœ™¾P@j*ka`PiÝï¥OÈ¾NÔ¥>¦÷cB1ƒÏ,´þ5Å ã¬(§ ÚÈÆ"î9X­u‰&£9e "½[,¬}ã¸‚´žÚJò¸ÜQ1KÓå€üFiŠº'Pj¬.ùo<åäïN„×8eÊ†ÎÔ=íaù,‰×/�hÔˆ\À–*´kÙ¢ÉTèü†ã�©ûO+²W—Z-‘1ý>dõ-k7õ0Áí‡¼U“�}=ÀZ´»)Ñ-w¼�ó7^Û²)??Œ§²ARÐ2ÛÍïDþd©,{SQãz6à_¸=Òä!³ùŸÀy$¯w*üÛ	�fDbáA*C
-Œ±1ßô÷YpìƒôïM’áƒrè,=†‚ÑpIÓ½°/v4d¡'+œŸmë´z2È±S7³Ã\Y //¥Å�[¾ú£l‚j8âAéüxäŠu™õKFÍ"´]0�ßc{Df,º©ãÉ²
-Ðô±Å£!É;s%Ò,Ø½¦É=’çô{±û6ÿYugºk¤ZŸ×?¤ox#£E�E ÐA˜¾mÎvnìÀo±‹C‹�¦]º&½�öeº3»$†ºM=!ò¤�£ûU{ÒžûXºÍó§åmÁ2–g§˜X®‚gõVËƒ÷ž‘¢þ.Ó–—ò,ú…š"µ Òårw…oà)óOPÅ  ÃägèðF„•°4•6lìå1Ž~ñ@4šC´äª}¡	.QìK<K¢–#!Ð©òGÏw»ÝfžW_F®ì3üÞ�¼óÕ€¾DçîõE_ƒQ{}­³Ð\ñŒÜsµ9Fr¾{ŽÕÈp
-)}«²û ùù©“1à¤BN„É§(†¶®Ö–ŸßË«=­ÓId°®Á]¶<kÑD³ -˜ÆñÒ
-Q•ž‹îïÁÓ<4q�ÑÎ1Í—-¨¢Žð\È¤m #9hµµ£ŽÐ€ûo®¨E_˜è†Ã�ÆÃWâäy1ÓqF51Fs·Ü½tGƒFHBõO·½U'±_K&ök‡Õ®}„%õØ˜]ø¼Û#³õŸÀ²nw¯ëu¢Ÿ�êƒm~•ÑNu-nþvÃ:´þ%Œìk¸ƒ–±å™Éc@m °¾4U ì�L”NPŒIP,{óNg`”náM§ò@(ßËKþþx½ãkr»y›®‚ZW[�VÔ
-£-º÷ž×·oë'¾}åKzXÃ’·8ì¬QåJ‘&@1–*“Q%B‘à<#¯^�Öà)=Ú 'G^‰ì<Ãó·�Ÿ!¥¸§@ w*é·ÓQêý”Pnbæ?§¬L+ÚGóà}›8fÖA«Ì<—·¥Œc=áñx÷wÇ.ÅÃOÈÓ'êG¬�…ã¢ºO\ŽœçZ³ÊV‹\†IÌé7%¦¨Ó"²–
-ÁÅm¼ EõT>#Eƒík`itå}ùß ,)~ª¬ûú!õ�3û�zæ´[ƒ¥@@PûŠÑç¶v[ë“?)OçÐÂ�¬â]¯2üã1UÙï�«wtt³W¾ˆÜ&¯°ë ¡yÍÄP}aôDâó‚’r*J¼_äÈÀóBHb Ç0nä—Ç@Í gÎ@Ñ2N:ôc¡–±Øb°m9õÍÌ%I10g�ž	K7íëœ¿8û’'J�9ëÑG!*™tøãS�:ÿ"îÖ§ÒY•Ö”ˆf>Çc"ÀWCÜ\»³Ò�†‚œü Oƒ<`îðlkÕÑ†mAÝÎ k4|­Išƒ31c<;6@:¦…CŒo%†ÿR6éëïÄuL²Ã-¬ë¬õõ¤Ébz�Æ+àÓx	í¯ˆ”­OõOMug‚ëX¦¢?€úb!î‹�£nËË�JòÈä¼�…kLãÊÑå¶è‰û0î<›²ö-¿Ckœ|ÿ†e•e.;kéÉç‚<§4!+Âó ÔaèƒÐ
-“Œ…{Îáµ¨ ]%Hæ‡Ú»'CÝ'ˆp2�‰¿Œ/¡›ó[4XÌ3‹ü|ðR€’XG<Úå/L¾™£Hwibùå�W[0±ÿÂ_iOßîö�\Óá»�Qé7aSÆ5ílg}È)iü]±°¶8ù»ãýz\
-näæ.˜0ÃNØbi:NnpòÙÀÉg—É¬:XÔ˜\„vhš‘e#½=õÝu;¨È )‰þ1Z©‡4Íœ‘á²FZ	‰”dïÂC{DÅ’œ€Í`È‚’ð^QüP«ÿºh`¾wN"‰Lž ’?T‡æÂpè M�1»Ñ
-³±.ÖYqE¿„'—X•è®Y�¶‹UVõ˜"Â�¨Q™Òžx4ßÑóToûüsùê«ÿf[æ­�€ ¯¬°W¼¾.*2ãŒ¶	ý˜»göËñã{ú�wGw4EyêÅàð¡ÿ7n)`8Í,©Ì·1&úŒ×ŒÑmÝ0¼‡%þ]åœl3³C …ªá´x­µ£®‹ä5ix�ïþù¶~fFyÐÊó0Ñ¼[×ü`\:t�ië(“ÎŒ*r­’Û8&X}¸Á ïŠtØ-Æ+á�âíyQ”'ƒx_8;åçò^Å=r"êBÑóE™úEˆ0"ˆtÿ,„ìÁŸ>÷\Ý´[o5§QÆrOõCMÿ¨�OúÙíø©Nr»-a½zW9Ï›ã¢ƒñv—Iþú[Ý¡ÉðPnŽË Òä´|†æ¾„]>t<Ê½'¦ÍmÞSŽ‚Ñt¤Kô*Fghp>ƒ;�oz#i·-/I­|žÌäûà?†tÓPE£—+bäÅc®§ìÎ‚ôyž~^eº"]õÉsFÎÁÉº¬#�Aç&y�Ñ/Á~—H³|_ï½’A†~f£!‡%,±EUšµn�ûñçÏ?Tˆ$òQ6Þò
-î“N†b#1QR‘š°›Ì'Cn÷ôýüüÜÒâ8·¨ˆÔ%¨UmÞ|CDÊÎ}1¹hH—Ø6{Â¯,ÔlÆ£3öY(%µ ³>-íiøYœ¢¥I[:£(mÿ}¼ÇÅø=H‚�EÅêjô!·IeàÂš¢k*$‚ñ
-’lê£Æ†}ËÊ¢”tÖr°£Æ?¬x@~TbFäxZv‡«WÓ
-)æÜzô²¦%t5ä¢_†¥ý4qCº'gšË&g`:ŒÕù�êy#wûò…åëÚŠ@ï&¢G–aÒ¡èð7d¥ßa7×&�0§¢rYªð‡Œã¤$Áz–…1ˆÅÕZ™Q'Bìs-—Îo_…âÓ¬knËn #YvjþÝF†¹—†mD˜/ÄTÝ¤Ç·¨]ìàýVxv}"RôœéÅÙ�dœ$^Òäß—ŸA»c_U¥P#¤<0à‘£Ýœn¥=¨i5˜­iw¯_RNƒû	Ç¯ww7D³ÒÓ-­]ŠvÇ¸~¤¢ßÒ'ÏÁ2 Æ´v¶›*Óü×j¼«Åd³E�¦al	úúæUÐ<ž…ßB�ƒúEÅGç:Hõ_#E9«ä5–AûµÌ|…]íýþí—<$’Üy%)�,Èncâ%äñG|×{½Þï‰H~qÊ‹ÈÙï•EjYû–eM½�.Y—(i yð9ŒCP ãÏÃuí±Fsš‰>]}O Ç›ŠVï¯£ý6B¢O&þœ‰g]‰¼ú«+2ô&ÜwFìc�&ûŸ>|ÆÄAHŽãÝ*g‘™ÖÔwå­~´ü×ˆ(ùý‰þºÑ/Ò¨èt–~œ©™¾H¡
-Á¤<ÖŠ‡�uÎ‚Í¦‘}‹ÆoØT¹iñ‡ZüÉ3 ÒútÎÀºId%Öd¥uu
-EGç�ÉÊ"÷iÏy:ÑÏß4b™ÌzÑžÖ†rú]ÈªTÅ”âÔÆä9HÃG»›RK²R„ k?@òHb¥—÷`òï\ùáÜ#” “¿9Þ¯ÇÝøVz¢§Ä5õä\&ÁûHÇØæ%hílD{)8oõ™*ºLÀÿZ�«å3ÒÍDŠäÏ¾>Õ`´L0Ôpü\�&C4íóBÍ ”9·ÈNŒ¬¾¦5x)èò^âÊí‘#W¨Ûr÷UÛÔøÂ`+*7¦úË�†ÌÔ…©L1ºj>àI³c2]È0j+ÂÐÍ±zó>BÓHÈ–­©f[Œâ¬áhìZPy7#6¯Š"ÖŽ3¡Š‹ú”Ö´ùË‘›½-¼õÀý`âMå¸yG`;õQþrÔ5©�ƒ¡œ²wQ(+çñ•gf�</µ´©³¡Í?bºz¶ 9 àÑœèÌ«M1ðYØ”~´p\¢<ÈÏVq:@‚zð¹6@b>¶jÚ¼¥Ùn<ÿíÃ±©Ý?LgkÊÞI«N†ð-èæ	§"i�(ä@·4TÕ¥;`ô›4�½¡—ÄRÊåûÓík§è*w°ÔÏkrûòåm½Œ#òÜMP¿¬é�£oprŒ½¢¥FþÞ ™¦G{TÄ`§30$Å}+þýFç±Œö–¶àL…¡>G:á!{¾ã}À¦!qE7e�Dº†‘½lí1p&^î)vüBÆŒü{¤sÖ¢hY†I¸øcÔ}¿ü%×Z“Ü÷w�þb;­Lð**D=™‰žZ²¹yÿ¦ÞtïñŸ¨ï«�÷ösÚÑ¨¾“OOný—vÿˆ–J‹€+ÔÈ¡�¢i9.I?¯)ÈÞzË0{ÂC$ç,s¦Õ%‚”žµíE<õõJ¤=ßäÈG"ý8�qM@G(Žÿÿ×„úuž
-)Óž÷Zc"•ùž)'Þ§MÍµ}~¬1­hÜWÕS}¯,\å`A[€4L&îgòþX¿9žŸ—œor@»;ý%2/Šg!Ì„·ñ‹¬èw©<ÿ¼Ûü^Ý«²¤Þ‹\òOÚ}Å™E3‰WI~OºÙh´Àn%‰ëT�='%”ÉòãóRPÃ+�Î$ë2š¼'Õ�ÄU_;c¼?{´»/ 6=ÇBàg@]Ì‚—Ö/¾yÁàßz3Šž
-4ƒÊsÛtQßåŒ�¼¦¯
-€o É�Ë[,ý"
-õ }: &|&†I¥8)Þ!ëÛ.,)ñ×z)�u3w!·:4“s�Ø°Cìò)&= ŠÞ—¡f°1ê%oÀµ¨®�‚¡ÿÌO"4!ÇáŠ«!–Óß‡·|'¼•€Œ™‘NÙ$éÊ=`“z\3?²<ÒUf
-
-	¤‹Q(€Ë|‚Ã´Çà<“í�…xÑdB!T�œrX)¿p [¯´ÆƒÄðuŠ*oä™€…ýJ–Ù/zcwð¼Ô…¨äÙˆ›z¶ü0‹¥é×Ä.$}0ˆ¦'¦¦6÷2¼Ôn(›„´ëpÃÿ¥Â¼:ÙÚ{ø7G¼¬íôŸfæ¸W<óÔ„ú0¢¡CI¯@
-æÀ$LHIÃKÒ-¾ˆ5Ç‡Ö¸áÈÛ›Œ,›…ÞÁžë<dë<¥¼‹P.ƒ“�?ÏTQa ç0‰iÈaƒ—–Z“•¿!ŠzcB®5aôÉ¤º²½=]Ñä€£ÅnBÐj`¶zr¡Éñ�¯16Ñš­›Œœ	ÏAâœýØèŸêàÙ·Á*ø†ÕÀ¼Gèu@Ÿ‚£�kïUB"çŸ°Ì‘èyo	ÞXé L[#ásèF-À·ç!½cC¦ç^;QÏI&0í˜ˆ3ŠþÏâhÌJQ{8…8vÇ³$É½ünR®£Å`H)YÕx*—µ}k2¥µ¹+p=�vëwÇë³cê?Ù8	õšý+Bîr Ë�@zÂêZ>.ÍÔvî°¢îqY–®Ý�uëá«½‰|œWó6U6ça=víûó:$Ê°‘cÔÆl³yÑtxöB8„¢Obh9½‚�ó1»‰ÏÏþó…3;B³Hžg4ÇÀŠ÷ ò’ƒÐññn»·¥	Õ }G‡TU0r6öÈƒ�öžˆWž†Dà0ôx´Ø�/÷VÔ%/äáG¡<îúqE�  @ IDAT>ñ3�(€Zrì¨ýî¾n@F˜<à~:hšVŒIô�ÚýŒfÚ¾ìõ9§öÍ¬5ˆb Fi— Ú:Tm·ÂgøÊ¤+‹çüª)×øõûÝ;>|c—Ð'c8khº‚KÐv[ä÷„~‰Óæ¹¬"ß‹\ù­¨þ?]-„þÌ‚ª¿`º;’\•O\í	þ=.E>•Yö}�H½l)%('Æ'Øê®ÁLÞ2‚a^MÎx3&ÉR�ÑïG.üÖÌl{×h(CÊçu„`­°Úå~…ý3I9�bÛnwðœ£±¼~¿?ŽÜ¶ÜDšI’YZtô�Nî‹�ÎÀ6Ž{ü7Ó >™a0*áP
-¡·A')†Í7ß{»;Êÿq	#ô‚Lü{Éó-f_n–žû¥móšF|¿¼a}èÀ>£4Îy!�*ÿFÉý’Ø½„Ü{Ø„¾Þ·j1^"h–)ŽQxž-À½µScº;Ýþ]'›×KW$è6.'Æ€{"±8ôyˆ0»Ý’øMðú»¢Êü„~§Cr#ˆ:r©pv9�N”Y*÷p*(Ú*Hn^£j5Žé\0æ÷_Ö~ü1¢/m]œÒ/ÇøÇbvÃÐ’“úÑÃ7·ìkˆF¢K7v„hÿjN7 zP÷hSÞYe9¥—ý›ãù÷q3¾E“Ï‰|haQãšòœ1?­¢·Ò8i�P£Ú¤¼Ð>;Õj3«:¬ÛE¾''jNiZÐÂÃãc>©Æo£B´ú¦1‡ä­gö£ÄhœzÓgByv:r¬/¢˜ô¹NqŸ"µqâ|*¦~‡=‚Js<û' ®‚'ùD¥7tËÊ Ú + °ØGÒåz­Sï<­Ï°²m�xŠyãü…¨Ð8¡·nXö5¹ÚjföKÂîRë[»/”âÚ¨®"mDmvÒ�§õ±v%/4!è–ùÀª€A©²ðá}²\Ä �ã$Y—ü?’l²äÛ¢š!æØ¢jôýY9©ênnŽÌ�WCïÞ°‘1HD“ðš¢K�ç"R4$`ùôQßRhæ:lØO…]šä­§_ÔÕeJ¦ˆJÌÝ¸©²qåØ�§áI?ŽC
-"€[‚¾àT‰�6×í…QþŸC‰ºGÎî{�PÜÿ9xNqŒ%µ·á#E1é¤¸N¯‚·Q¬°ê´Ó¯¿…õq_!EFW@˜ºq˜÷æö‹Ùƒ#×ÛæŒ±Z¸— u~¿�¡öÛSP­Ç‚4Ön¤$C1±ü‹ù#Ÿ“…nEÖÖc² �böµ4�cÔEšúuX–_žZàØ×û¤�)ƒQdŠcÒ´}šQYáëÐ6Ïî×Ï}M¯NÂC[?9þÝ&�c�¡<´ªõ�·dIÂ[š##¦èÍ�À{èDôú%z[‡/ð%Ô|KLTš­÷‘¥N`ïmg¬—1´qD,NÏÜ�	¹PœQI6EpßšÙ3áõþí‰ôž<KI«
-Ir'¼¦Gq<LIòÏëš}6#5³)ÂÞã%^ÿåp
-‘"¿4 ’¢?D)ê�À˜¿ÈëÔ‹pÎfm@z®÷oŽçû#’ÿtÃÄde&ÍÒùH- V¦|Œ6‹ŠdnîèíÒf‰Àz–£@¤EõSº~¥]Äç$­†"VstÉbü§4�ä$aÐZW°ß¦VWiŠ40‚mºA}ôãàØ�;ýëÃa€TJ¥"kx©£bE;¶GŒf~æ fý&´4ïÁ¤~E@¢žB:žÑ
-G4°{øðìˆlR}bXí+÷1ŽÓ(�HÓYš&–DTa;­Åë“�u»ü}`¸ê|–¤ñ+Æq¯-®=Â(0u{wÂ{s¿³ñ§3úXõ¤¾²º=}E«÷‚D	$öy¼m<Í<„»¼Ð¸{r‹sn^PÑ`·™`�åæê …÷<ëˆš9çOœ1ÊÉúC`i²��øLw@,ð\‚yÀÍn—Û²{�"P#ÈE pà|�î€ó äcJ��>Í"ÎÎRH¬´<Žñ<5¯ÑÂûýc+âiíox²ç`�å¢Æ�úëäAŸ_‹,êb%P+2¼žá ô„ïdX»ù'¾,+Ê?‘.ªÇMWdâøû€]&fŠÝÖwoÇù~&'«Æ¿ž‘��0¾šÈTÀ×ÝÖ6R?·ä¤fÏX³æ×,L´éØ1{³3¸â­Â­PIèÌ‘}$—$1 ¦Ø²ùõ^·çì¬¬úë&e„’ßŸ”¯(p¦¨t%¨øfÎLäÃ‡¬2óÜùÃ2Rse•Ú™ÂRÏä¦¦<Z×Ù`ÄóðëÂÑRˆ\WE¡ì1I)EÖÔ€gF�Ö(" †5æ?úëê'ô;�F×Ø9~T¹ëd±‚ávô<þ%¤êvÜ#Ž9xZÏGtý¹;(}=¥(­ŠÜ;F&~ SO)È¼ò�ù›ãðáq1¾°•0:ôXè¯ALWoF�øÓ¸~i‰BÚ±ÆÈ1V@Šh+žØAÑ’›<8ÀïúS·v…ØäôO]²¤Î@<\G{MíÄ‰…q3©Ì(�&ë¹ÖB¬ÎNr8ZBÑè‡qJº½«r\%iÒMq�{gý[Ï%Ô†“û¨è/8ÁP9¥û±:ýÞ×b–¨�ÄSZÓRf	XZŒ)4=ž/’¨P�|ÚÔé³øÊ{%àE Pœ-õâáíØ&Éù¾xÊÈ´+—UvYßZgû´¾+ëM·[Ÿ‚ê3ŒvÂˆ�±˜­zÄªg±õOH‘›8vò1î|ý®Ý&–yÀðZUWo˜M/á‰”OÎsÏº;vìà`@®/éPÄÙŸÒý§!©–=Ðµ[Ãª±¹íÝ®ÝÉÜ5Ù¶Ñ$ Óz[Z/+Í(|-o/c{ô{%F~Â"†šnt:ùw¢Ÿ—eJõL,Ÿ¡hõ ¨±Þœ™!Ûê½€×e¯@««ú‹†)’³½ç-n4¹Þééíà�pt7le4u.Ž"5�éé”é
-Òa-Ât=C¬‚÷Ær±OngÒÐº!_AÎÜ)0tAPTŸ2_¿¦Ý=rKG÷yF�»+¦h¨l~Õ†¼er¿Çz%“Ž¯m©g�>„ c%“Á¼ë7'úgÄã«¶5ïw67ÀH&kk4ò…®«_šyM”Ú{ Éï€'kFqôÕözW—196¹±±KRÙ)Z¬CCL­¬Ñ-ÑØ® °a¬²·L�àÎI° ÙàGi_8bÏ Å�HÕ]ß!èÝN]Ò¿Ç!üæ8ðA�I)™æˆBjP¤HÑLO"JËCÓØoîùãuŽÚ�È­gÙøEìx_ß}¡;ÊûçzŽ5Hr“ïpúÿNsìƒ8h;rÃ× '7ŸäZoçU„Pƒ™þH’}_O>ŒÛ[ ¹õ¢²4ôc¡û	°*Û»šiäf#Û|­¶V˜hGwÂ%Ç@ÖÙã	_…¢Ö™(ú½n0
-®¦vO v7ÖÑ;�Å±¨pž…£:X¨ðá…ÝüøÓÌ™¿â‡I1hÃ¥·¡C“Kø˜ º‹SŒÜÍí.ÇLæ�Éú7àv!…ªZÒ_%†#9òúC] ÔnÒ>CäsÔÅFUûwkqz�°%Y‡¤=”’ácb´þ¡7ª ;X–W¤¯HˆD¾'Ë‚*·u@¶yŒþÀùî°EÍçæ‚=ùw–zÀÎ",½³y!Îo=&žO�û]BI‘FBX¿’îH7´:Ì¯PhTÆRÙìO•Ì¼‘’�Ñˆ<~gÓ‰�	X=3%½‰Çs%�k� 6¡ u¾<"¿—§­sÍ{)¼àf4:\q ½i×ðüÒüˆÂL6±Ú»à*¸4¼oÛb&÷I¼ck¦ùJàOÁåÊŒ±O7µ	(EÑ—¼üER´3ù»ÿéusÆ“šr«³Mº&³ºø¾÷Dû?ýþDûþ•=mù“rí§‚ž�m÷…«$›Ò¸ )°ëO)ïc6pfZcZ'B:ô;½Ã¸ÑO?D’H5ìb²lóY¿??a¦„bñMÛ>«‘ù^¿9aß.kõýRlXVöX
-M¨r÷tD¶¤~áwäŸ×-S«€œêy–H�^b¸gÌ,k6š3s€TRÿnõ¶=I&ì?â`�‹ç›jŒ¢‡�†-æZŠª5!Aù{ƒÝÑâï‘ÅBZàÙ8½Ú×¶ù�·Þµ_(õêÔ °î?h68^Úê	Œ^”Ãx¿Z­¯J”ô�¤º �SÏöùN=è¤2ÀA“‹ß3¼d,ðòtE@ø:gb›wmq’ÔÆãkÖ°ÀŽL¥-YP<0£åôâŽ‡eé;�ßÕ˜4¼¤’¿¤ÑsÞú›îy–¶ñwFeª¨�²…7~ôê—?òœÒçg2¢¥ój¸ÿSQ7¯”5Çp•--«QûÚŠÁÔ¦¿†B’¦ü¹mþ)óàé'Ï1:@|Ô]Ñl3ò¯êzüû+†ù“ß“×!”[B)"!ËCýÕo_½Ã.¯BÓBUP<›Ó(ºV…âSjjjRv®[âÅ)XŽDœv¼FÚÊák1V;ÜþQpþ�³4¥«¡!‘:!çknÐÑ�ˆ?–á%mÆû|>�$<	’WE3HT‚]Œ®ŸlOê¡÷¸1Éú 9|Ê!°¿ˆ¢ÞWš“cŸ“ÚD<Ü@ÿS™m4vZoO4Ñ<`Ó¿–Tê6´B~¥ÑªžryùÅª¬ß&[èù¿gx‰ö~op,JF¿“Æe|¶žÂÒªÓ]R’Û{�ùdyÿ´
-Çe¥¼Žü<b¸gí©æçã~¶dHU•>£4³nJ�£ò†—Ï#sÅfŠªº]�kÁ?�H;øÂhEátCÃÿÓ}"Ÿ#KmB¢º²ÙÝx“<¯Ù…i+Úº¦¼ŠšÇÍv–Éì=þÉE™N¨9¼„çq>G�ˆZ¤Ä½ñ˜øFIff`«ê½þñz\Œ/©¨ã‘Ù‡™BÊÀÊ¥§ýÆµ'&!9%°wàà†€mžƒ¡þ!è‹¾tÈ;ê7eæ <óÓ€›2#DjÏšÈØçÍÁÙ›Z[�Ð¡¢5îjÉ¡<ÕšëÐc&ÌÈGœ�y»ZVåœ’Ø_¯oö­þÙ%Rê<�±T4¯]›˜ ¦äËVyz6ðF fQC=­
-’c»µ]9=c¤ÚŸçÈ»ÕfþÜ‚}¸7é¶À=ƒg]™rÞ€ìF_<þf í¸ñ¡q©¿£"ëIÚäÿãî=à¤ªÎ÷ñÛïôí}ÙÆR—^¤
-‹ E±Æ®±'±÷¨XcïÝ¨±EeAé½-m{›-³ÓgîÜþÎÀ¬¢¿DÉ÷/Þ�rggn9çÜsßó–ç}ÞÄí‘Ñ‡Éq3°Ç(Ú§¾„ ÓÇm­q(^UÔ4îë]–ZŠc»ž‡/Æ€j�~”6Ôw®è_�Ô'®Eö 	õõ&>6!a¹¾ö{Ý}NƒßTSµ'±>f0Ì#¼n¼(§å?�1r¤¢çEL*L03Wc¸ù{<Á›«|Ñ?óÿ´Ðdâ½F•”ü¤†Kî�*NFçoVu~ÒRmä;²•efFbQå˜ôÏÜ2µ_áÿp3önÚ‹ø1 IÂÈ.šnaì—Í‹ÍÉ Ä�‡�:Q³g(Öùì·M�óHuL(º£¥%ª+�_Åúþ`”»&,Enà<Ôk¶­"åŽ~x'œ„ÍdÄ~ Z¿­—ßÿæµ<jQ£EŒmˆÝÚJº=ƒc]ï×úégïtç5ˆî�“s{X3¶Œ9¶G²íò‰—_Þ‹8Vû‡
-(‹ø‡…çOBàL™ä¸D?¿tz}ÈuÿcØÕ±Úõs¿‹¡î#´ž€Vx5¬Q�"°|.ä	XÙ:Ì­G¢\”Ä‚º6¢hLì‘º[K¯º2GS”¿·Ö?ƒ»ÂÉÜ ÜC’7ºN8Nº^ö_r=ÒxØéŸàm@(”G‚îÜyGMâ:øR’²m7 0s>´^ï.D�ß¦Zrâñ»�}þFhs(Bµšñ8´é ¨÷r<}·Õ–<“øcˆV89/¯³ÝŒî°ÐÆÚºúNâÞè2‡>é
-X¸‡¥Ø„T•‰ßºúíÚº­ÔAu€¨…^ÖÔ9J™³�ÍµøÚ³Qñ3ÉÆª_¿´~²¬¾ÑœÞ'¡-bŠ~ ÓõpJ|‰¹^‚`›5·°$~oyó*úå‡Fû/:j.˜Ü7¯Ë¯FàWõÍ�ËÁc{9Ú3n³È™É¡”;�(Áì³….(²‡¶š…/IRÌ³îœžYqþ…Ä÷‰=rÆŒ~��¿jýç0¿Cðÿ¦Âï
-4œ?0)ð,ì�~`ü¢.ËHÊ¹(ºWü­x4æ^h÷án¿©^7²!Yn#Á³£ƒ¤dÌw¶‡ÏÛã�ÎÛÚœ»£#:ÔÎY{¢^?`g'G® mŠ/¶¤M'#ÈÜ¿mGw³Ž -67JÖ{Ã**=CT|þ�]€>ÃÇËþ19×zÈ†úaXVõû‚cu6„É£Èµki£ï™œÔÜy!§påKOÕO)´m›R’µk´–ì^Ã“ºCÜÈbYZÏ�  ÚÞ|Ød8T,ff ¹?¿KŒ!ÙS:¦ÑÍÁ¨6AÛ¬öªª®ùÒý¸_ûç_®w‚HþdO4ö2§ï«ò}I}K£ôQ8Ó°�xeéW{sˆë¬{¶mÛ¦ÁzZƒ²;1¯?UTµ>_ÌyL{ÌT€H?óì~Þ¯õóº—^"ý(&åvàëŸFñ„§A¦ó&/Ÿ·­ž
-kïè¶“¹ë¥…Þ,Åç‚ *7·Èy³hß‡%‹ä#ª�C Š�>ç—þ}\(%I#ê}Ž³ˆ�DS^ÌÎ‰h5Ëß{Ë;bÄóìëo)
-‰Ž›�l¸*Ñìf¾¼¿­1úíÔ±N™¬Ú7Þþ×¡^‡÷Ø‰@ÏßyÉûÉ°Ü¬f·ª4B$]„¢“CtŠ]Yà²Å…)R±hQxÖ´1G¸8#±R+ÍƒÐñYyÞ÷öW‹:»—L)B	ÒÞíbŽæÇ…ˆžú$TÁäètÅÌ]_d´=ß­ªE¼oaéZÐ@æ@ý› hn�a/G £
-øµ§-Þ©N3Ï°»
-:U–ÙƒŠßL,JoÄyÆÛUí=«;Ã½‡�9è…Ûá=A½1m1²û.v8©]uo§EÞ­ëÌæpQšû£¹ß/"XdLTwˆkŽËÁ–¶# Ñ%Û¢å�œ¤MdKGé¥Ö ¯FÄ¼ËtC]¬QüB–Ö>FZÉgŠi,…l‡/ÕÌ´ÌìŒ�;BþŒ)làþ Ú°‹Éç¾�þFºÜ¹~Pnn”øÅZ%Á•�d‘çbá
-j,˜Aòë° q}ð,aÙXiá™<#´6Ùø]¹ÝÀÄ�h/q²=¯øV”ÿéùJ2ÚüUÝÞ3ÆD÷ù¥Zh$ ‹ê…[¡�FÖMrÌ€Â7 ØW/Q/x0ŠÐÝ¾Ë�cÚŠ+ÏžÞ¥åÎÐæšÑcnì?zL¯˜n¦´FÔ™FRÚµË^ÿÅ90§G´)ÁâhnÛÓÓ&ìèÞV\—:èg,W,ÒÚ¾Î¢üÚ²ncL~?¶z¯šŒòT—ûUù±­…é•W'Ù½Ëý¢SäFkŠù©“æ¤{#Yæ–~¹½Ö”w£”¤“z¤è=cdAÍ Uk¾Ëj�…-²Íh3&�o:QÆ…¼;-¡X+H‰÷Š¬0vÃŠUÇ%W&ææ±žiM 6Ö&²CìãŒ bŒF©—&È«wàN"°4ªýÀî/Žgy¡øŠx¬†ü·ß‘€Ùçû=oå¥Z�†ÿ>™Ñû?û¢­›Ï¹t®fÜà!� ¬FÆ“ÁˆùU‚dm³oMSDG³a>‚"£~ööÛÁ!p'ˆ!½Y²Ò!”â˜Øà·*ê†L¨Ê<©ºÐrt;�½dd l'…}fvÿ±æ¼
-jÏœÃ9ûD¸t&å�\d£ŠÂ:“0kX`µ¤fÙ¿jÃûïÓ·… \64±tVÖReŽ¿Ä9`Ucî<Øì800Wî	n�Û�T�QÛ¤EÄ±Ÿh�§6‹•»ÑÉq£¡¶†äÈ“6Jl‹¨j	/0+}TItv1$«nâœ£ö4Òd³T–mÕé½%•MÔÎî!‡ýœUDÐmžœ�>Æ¯7sæLÖìQj˜;~Í|Sá,xN�8vËå7ß|p¯ŸãK’c±	…juÈª¢s
-o…^¼y‹û¶ªâäTÈ¶Çû‹�V¾Sea7Üg÷9Ä–Ÿò†ÞÜF³‹ì �ÝYwðóA€Àuk?;éê[®FôüzÝdø‚í¨K”Ž…înçˆÌ8î@`ýŠ½–±ÓŸÀ"ñ4V@²(íît×‚>²²¥¥V aöÒô½0ÿjÎ|ÙÊX¿hÞü¹›*žÕ5^&4×½¾(ÊD÷Àu•Ä1 ”4(ÜVï‰¦±IÒ™vJËCæT°UpTþ¡ôäD[EQ,cÅfrb1oJDÇ½Äï'Â¾^òêãñzõIvÝÕ«-Ù„¨Ù tæ7=À’Á=¿ÍR²íö¼€¡;,!¼iÝ¶£A5æ]ÐJ,*G;d]ÚI~ŽBS Z–ºát,©â¨¨Àu‚lö¶š}áì^÷(º9ÉN$³ \j*ï‘²ûÇº ˜40šÔ‚1¶’�i­QµÅ0™ÕÜ"âD¬âølG˜¿ô’göIoa¬ÔËÀ»ÿ öfT"(‡�ñ|3ú‚â°Í�~“Ûçþ,A†CÀÏ¢Àß†ˆý ­ü´¦¼ÁfYšˆ9HÚ£ðÔHªd#:š`!}h_WOäáÏgXí…‚qSO!Qöîí&Iþh ¤4ûÕoA’Ã)#zxO"3bþz\9çÃ,+@ú2'+(£fÄ>×dmMMÏžÇ¼äÚÐÈ‘Þš-ðÜ£ÐÆ¦@É{2Ò,mºüÈ™††ÓšpYGkX¥­à5h^µX�öÓšYCÕmo’Mõ±ÀšÖÍE|›°¶%0muKàªU��#‘¿È'úDƒ]!¤ì”Þžà�dŠøç�±‘ñ*+/Ïè3a‚Ÿ!“æÄ‘H"AÓüoÖÔ�Õ‡œJ~+JNöÏ(utôIÿãºÅ+ .˜^z&ôÀb»ØÃÌ�ÖkqïN—$‹Ò†…SAÌÎOƒ…pq$A0vàÙÐ©©ƒâÏ+Ñ´¯ê}Ó‘J|;îÝŠÔí[QÃí
-˜ÂW¿2ÍaÀØ‰'HØmÎOÁ(õÁ	CHÈOÉ÷üû“^yÅ‹6»¶[¨‚±Ì+ÓoÉÂut„¥CîGëêzÄH]†©ïGvåc¦fÜ|²×´hÒb·b’ œ¨oŒk…÷áÈn—&ð¡:LE÷fôïD?Ž<ò×û×?«¡z‡2JDÉ‚–qðL&êÙµ!í«LS©!Vž„kJÉ‘ýp‡âú;ˆqËDF›×	ŽmümêPðÎº�uYÿæ›Ûº�'Gžýëü«ÆjEdÙ@ÜÞ|ÐÐÕ4‚`køS­íÜ¼¼	ŠÆx_ÿŠ´}1.×¹8ÐJpZ±eÒ£éømÇMóÝ"“ºh‡°ŒŽe‘¶ÏÒiÛFÓõ0MK*x	‚RTêÔmfKÇ·Ä÷Jº@´5Ô»
-¾ß©ð·ñÈTr¡ºÂe±æ€¶Ià*ÁÖÙWw´™	º_ÕÁÃß
-Â1Ð‚yœÓ3Ãžù*òôÿIüÀ‰a!Ð�5¾5):=d)^Ô£*±XRUnèÐ�Hù­’u„  £Ô7’äÛvÈ}¦&N>Æ^UåE‚År>¸~Ç" V�1�TH%­iñO�Y{5¼Ê›_l×l áv!-9B[\Mõ—B„Ð_ËÚ3îâ9¾œQ9&é{ý]t¡zæ=1ÃœŒkn4ivˆ§Þ×k±û”$”�fd´ï‰IÅCÖù¢Úh§•­ã4­–M*æ>®ò–JëÁî˜Ý�ÀŽµßË²Æ ^`7@1¶að¡Þ
-0JÑQoZ;ÀþP0œBÖN‰W—#g"ã·éÒ"Á�9»Ý¸2†gb°~ÿ;tz�Oô¼1m@¨¬éÈTÛˆR¸ßº#¦ââ¨Çñ,Ú"1Ó[†´éÄ…È‚h³e\�ëdË²v“¤ùV6Ø3£Ç¾R…ß~æ­CÚ>ágX­�ëš2‚¢Ù>~•yè$Þµ¿âê?¾îQÌ¯²êë}žª†ëFŒÐö´JN­†Ãßíñ}RÑ",¿ŒÖÙgN©âXn«3™`Ë¹:“›À_ÑŒ<ôY0§‹ð~0çyS'‹ÞgÈ\‰Lïæ>!ÏàDÙÆˆ
-O4Û—RX³ƒAø^…*€šJÐi0àÑB¦ VHãL_zuX W 	R�iŸ`„åƒ1‘Þb¡˜Ü¯OÂ…‘/‰Ä !ÿ‚³N¬EiÏ�›Ô4Œ¶lhfƒªàáŸzžD.�¢à-({ú¤Ô®w‡Áÿ¡Í@ü„@T[	îÿ§ÎÿoûÁDüo/@´É‚±ÓFÖÒ·Ÿ³tÃæÆ66¿GV]MWôÑGµŽ¡C9kS“¡shåD$+±�~Ã-“¡=]‰÷?å[Ð~:À•pŽ]àãðaÖ¤ñ,[‚é#Àßøo 	¼€‹�oG¡2C‚ ¾ÙÅ:úmïð¿àß“¼»ü°{aV¬…ûš×GQ2!Y5.2Yñ$TÂÔ­Ï^Ípi¬Óz%G)IIZZBf$šEUy)—;ìh°f.
-÷6§¸¸=!É˜� Õý@ô yúoª"øì•	“J)ÿ¢Ÿ�Ä“Ö+–"›ƒË‚´'‚M!‹ÌŽS®øck«Iê¤¥Çï‡,«ó±€`Fà ÙÖÁ
-æÝ,m?œï62^äï=a#=è²1§Z;Y~Œ¢*ƒ8!õ-çKŒ+‡œøuË0QÆ±¦eD*) _[9¦ç9ýËÁHâ n>%\¶h+›š>éèéx¦’’;™VÕ×@¤>ëL:³GÓŸÑ9f´J‡Áð[JÝþÁóÿh�»822Ö;ü\»b’=?;¦EG@àHó­�h«äòÚ“œàø.ñA?è}†,gMªT„ö¢¢øk;w'7ž‹‰�l)pìñJ£A„SÂ@æ,Â`�ž�ä•¸¥QššÚÕz„mo¬±egà%»Sg €L-óðÒ‚¤ÅP¶÷} Í§'î|h¯2T.ˆñûÐ”Žú|P.?ä�>òŒ_ß_Ua%0T£îÿê³5ž9Lyt+á<(óì–Øšw"Ô”9ñŸEYÌ6iãÊÆ{­ºáAæf@ŽÂIäöJÒòöì©.öƒw=º�Ção"HW6u®Á{æ ”c,‚2“æ÷ÿ¿®�¬Ô¶H¯!3pÞ•ˆ7¤aÝÊÂ¼©Æÿó«;ª'Cy9^Û/N² /s45ˆSÀKÃrÌ_/H;Uí©;IÉ·¨&jÀ”$PÉ†ÎþKòxd›ííäõ§4;Ë(á‹á£ÝÈôCÌS‚¡?Ñ¡Óµ}œ©2Í†ò!I2�â˜»QmlŒªª½"ùÔ…åý3Â‰"ÚõÐ‹ÿ0ºÍPÖ`‹9Þ\l´)»èñt«É¢r…ïßå`(K¿€k îE„s<ì{dm2À]«ëà·~ånìŒ@]a6B]f÷GMóU]ò|‘‹IWV†(ZNexð‹oß¼‚ñœoâ¤Mc¯ºùÀ{Ådï=£0©nu‹”ÏP±¥€{Íu1æÆ0/(­€Æ‘IDŽ§&NdÊ{9ÙSÆÃ“ ÁÊ@©¥·2Zj�´Llª=•›Í«`ˆÃå‰Tj“ÞÛ%(1³e¨ÃÑAã:ß]sãdh˜#€5^o¥#ØØm^Tl6¨÷�Y÷¦ÁÐ'á1žÒò·ô 6/â °Z×­lˆ�!s1˜èÇ�í	¹« l¡^�~Nk^ÊRˆÛ#ü…˜Ôôš¦ÎÑ^FÞ‘Á²N]GUÔ}„;èeZ/ª1åÚ+g’Âˆ©â¨ìØ�5´÷ÛCfÇ)ÅÉ¸—Ì'lm–»
-)Ì=‘39¾ˆÇe *�fúGÕ¤OÆÂTƒçù�Ž�›¾N,XDq(>Å¨±vc‡�To8å­Qø’gAÆ”(º?ö\ŽuAeÑp�Ð~�ã4ÕôŽ.Ê®Ç±æ
-`¹…ˆ>lríTlKÂ"û©ëÿš~#H“qõÔ(æ¸5	þÕÇêôü	…IµÇ‹Äwß4ù¯·ÈS ¶øx—ò†¾ÞÇËq¦·ãÙ¿_,|É_ÙÞn·«¨’fáòÙÌCaINg”€]Ó²uÙ(g’˜k[BgYú6@É�ÔÀ&ƒoïF)ÇõïrÀ°ê0`n{j¾Å4‹ ¶¤Aó@ Ô†+·5�—¦
-xÙ^ ùÂõÂÙê´Ûþ	žördæhÀÅºUÚX„)ôRMNÚÁÄÿl…HŠ{¢(ÚJ ©¢}€öË;-÷HoKGúòM“÷TÓ@ðÏ™¨/Ms¢žI8m¢:sQNÈ�:l),á>ó6x Ý†‰¶ì•¼e€§”†ehêšð ~ÔT[Zç}ZAçý±ØƒeY6-¦þ‚òeçÁy¡Áñie^
-ÿ�Òª1©:à—…ñ mžÄ3,,hvÊ¤ì:­´4ž›O(=m<;Tç„PÀòZÁäu`q-Ü<ýQE„¦·€ÖÀã“àÓm@bÂ’Š™x.ÛCc uþ�¯Õ0µöË|Düçuu{çÏì–Ý}òm@ý8‹•Õ!iVE�.;­8'.	A·Â˜ßÝÒ’àÝP»tC÷@$¹Fª_pQæßð§}Ô	}•b±Ý£ñôbQv­•2zl‰{‘ÅçÂ;î•¨IHzE1lËÆ¶më*B”·»=’epæR¤ƒöB…Ò/Ã‘è=î«êžzjEf²H
-(R ž†×%û8ï¯`ç¦
-×EFG ñýîîœîÇþÚ?o;—(ŽÎ°©;;«÷tO:"Mé©gäÕ{ZºOúõ °Û��ÒY,°Á»:ÓU:!Ü¶´m0HÑ¼Ï¬]YýÑawá¯}º·ïë&ß£à00‡ùøËiXSZ&÷Hyny£w ²ý²&$­è~<ùzƒÂ�j>à¤™ÂB¬•@ÓÈøeddÐÝçÜÑçý·3ÿí	GO^’òŒŒð—¯>ÛÜªJ»Â¡è*˜ëÛECP‘šx Á[ˆCºîcêò&š¨/ Ë„\¥+aF®žDÃ§‹­ÚÎpÇ*·UD$ßgO®^V1"3©&ÑéR0€áz2Ó8›C¼p©¡À#0k>§ú&øQfÑ¼ø|©'<kÊI“kÞÍÐ’fÙàWbPâÆŠ2>1ÑjúÎ‡lBð’ã¾­¯OÆü;Í ô�ÐÆûtE )¼~-|—k …)ÉÆ}Qä´.ãï[Fçf®•�Úd‡ÉàÉù€B!e˜F2£›˜òqÁK¢q’ß»o W|•ø|z8·Að’¤‹é0�ž÷ª:Ò\�é°&ÂÅ‘,¥¸±¦ÐX´)Šð(¨³)“Á`Õþ…1”-mâ5¾({n’�\/„:—Á4º0}ë`«µ9ûä‚¤�¨ý¶�=�aŠ•nÿÂ
-|Ý%xÉµ3}¯¤ê7+
-óš'ä]„‰úˆ“K†b’#Ç$6Â³ñ�;x3x™á21°2Ô_,¼å)°Gáº~íR\ÛX—¡‚œéL/ØrT0‘Ó³žešZMáQ7Ô|lû¦ö'åQqß=¸‰û‘ aµÛ½ÏJÊ�Ï|°Þ¿?1	ããBŽ[Û¸Ï‹¤�FhÏ•œN?ôuA&°Ú³ô¾ÉÉuƒ³“6Osî;Zð®kê(e9n
-„’ÀçâÐ‚õïß%ô÷?öñ±àÌ“$�šÌóLy(-Æã÷[Êð)y‘¨23–[rÕÚúÐ˜îÙ~¨O2 óm+‚©5x/y'¡1Â–c8-:ÃâÀž•Ÿ�5ÿÄÛàíFh‚©¥¸² @œç¼ÕM�' ›ëpx÷9”è�²{38¹çŽí‘T�À—L™âû›œ8æxì±æ{¬F�»V\luröLÖ]×Ö·OŸ0ft×¤Þš6°ËA’ÂŸðú‡¾+ñ|^Þ�¼æX×íþÝº6ßLðÛ>[ì\Ô+zX}ÄêdhÀO
-<3œ¸íøÿ�õ¾¦•	MæSÞŒÅ’Qø²Å3»ŒPM~ß¦Š¦`)ÊäœƒÀ×ùE¾>¼1c'I´ (‰lWN_˜²OÁ„‹ÿªœòqyÑ÷¼¼¤]Û<ž\C³œ	¼�ªß»‹h„ÂN2�KàØÒÔÐþ®³eg”r<Y<Æ÷ ¶0B¤ô<�åú¢Ñµ¢ œk¡™;‘žü¡Õ_t‰BÏ°©Ó¢òåäÌC2boPä7µs‘œQ­,ª6‡ßÛZXX?§›¶M(±VL¶¨¬™(ËN7›lìëÑ¸N÷çAÚsô¶­5œ�Ì ¶Æ!6¶Äï¤R³Óf¹°.À>éåÐ–û`/âV¨Ú‹´¯á¯„uí»öÈ`]U>€ÉŠßéj¸ž¡5q¡ÎQäÚvÇÆ÷0õk–‚ö1ÑnÂk,ø; eÆ€owa° meb�§p¯$�"úJÙŒr´ôO�ýt¹˜�R}#^&vÙþ�/�/ì“_Q†�“½ÿîc¥HolöôV¦D6xdÊîF´ÖûßIÌ—DŸO”ýÖŽàt¤\˜`é��¤JñµÓpÛ8˜T®TS˜rX§Àñë¥ÊMßVhèÞðýp3u"¾‚ª$Òžhe*\3”VƒJ!µÁŽó9ÞÖÝ±zõŒ‡J�(ãAÚYÑè?ñ�?¾'¢j’ƒgýPzH2ISX‘ª¦e×ýTˆâ´‚é¶Œ¤°®Oqùš®¤ýS§ýG¿—$‹�OïÎ�‘Ó,É}|@3()	NµZc/<:ßÞyçÉs�jJV’%¶®¡
-ZŒk³•ÇÐèT0ÌSû¶64Ð1k¿mî½_ºë˜þRr©µ��žŽˆf¨!pnnÖ%é�æâ´ªSïÕwÜÛè «kY}ÇêJ.kÉiŸ|·²óò‘##3¬��ž^™Û­Q„¤F´°÷[Xæb¬¤ü|LO‰ìé�f—edèw~µØsR~q2²]&Â¥²�ƒ›
-�à�èÑnM{êP(å Q»Çõ)Š,k‘z(šr=²À¢€[MæíÉTN�sP%9¹´†W¦öþæûïjð…ä]¼ªv1øHB¹ûíœ¬>ùmÏôúâXl,¨Çîà)®¾ÚÓZˆ˜VbµÊzŠÅßé�Ôñ—
-Ç±ÁŠÖìÁž°´=¤ôßài‰NM�ºCa§Î
-£±â—ò,×äøWœR�ÓŠ®Cöbb6øÆƒ¸ÇöªSô–w[Éo9!šaºùnˆÎ«ð ,�3P-y€ŸF•è:dÊ�¤Ýì’¤>Ž¤¤=Õ›,Uûb»<Ù®ôNhT'ñUˆq„ÂÄ“J<Çž—J½nªýg[ÝÖÇss»üÁ{5�7ËE¨8K\3¬~Iù¦ÚV9üRÍûv‡¨¤Œ<C7m6+·ìy…»í–ú¢ÃN{X­—)©²WZÎðG }Ô€Í %âÀ:oh;I ýHlÈmo‘7Gi)#@åÕX{Tu[ÀÇþÚ÷a"Z¬ã8,„ ùf]q^{9ž)1—]½{ý‘2¸aðá/‡[‹æ |Ç—õÍ=Ô)¶Î'e1†V˜jjlãØB=~2·Ä|Feûèº\;mÄàòÝ¡SNœC ÐcYW8¦}1´å.žA?zç¾öêƒ¹©.VmmÕS‘ÌD„ìEEâòåËMŸ3?¹9ªµI±!¿:¶Ìiµgj´q*xQ”=©#Ë&Æ­³_:
-]¦Ý/¹�hZ†@x‘ºIiá¨n�¦wþŸvã]yk@êBþ<úúdUž�ï:Š*Ï7KÒR¨÷RFRv¦ÈhÃ,6û¥+ê;†TÀ’?ú<X¢9úOˆÐž„Uåˆô'd3²—hGpG ÞI£X/…²éÆ13TÇì@˜ø�:þ¢ŠÊJ`¾÷%&®�“Ä÷„àí�s· ¡>žf.Ou²�­kŽœ·`�pë˜1äæB�°ˆÄ70±\Ñ‡6Òž€-u"‚}¬óµ¤^~1Ežâ“cæë!Õ�Q;8P•r–1R­\)±vâÁ‘áà$@õãŽrhýà )Lµòy¨¶üïˆh8¹ª½—EZ
-æ´^�ñDóœH)$ýY¥™ÕtLYmµqd®^ž)©ù°,TÉ¦Ñ‘äÜô:]�~ŠfWúåØ’™½óã/y!×5f‰"÷DH3æLnhˆ»g}ú±½æ
-áÇ=n'²v–ç8;ñÌ|x%5ÔË¢ fO74önª´£H-Ñá�ÜŒ*ÎŸÁU vNå�@?Ê€è^Sîp´Ö÷òaÄB|@ðO¼œa¾ì�H;þ –Ã-EéÞ‘hC¬	=¬mh�É‹"šáÐX¶¯³ÞCX¾ñE€�ÛÊXR€)¿ð:ASxDhdùéa«�¿´®Ž:NÜ„¸?	Îs@‰<‹ØÞ±`Á	'`Hß]öü,(1&¢°�Q%f�C¾ÄF,-Ý`«Pz«±Ž	xtn[¸¯�Œ÷s�Â<À>?Ìp!&LíÆiñÅ0…J¼Á�]pÅ¯w¢ý£‹Z�`jOnnØUqAÏ¬Ý„«—äè¢@Û&ûÁÄ+¯ÿæëo*9Ò.Í7õ|‡�9ŸgÌˆ{ô`8j<j&–"<Ó‚ÊÙ{ S�Ã@�Ç8á‹Gî‡à²H¿]7c�äámnñôÐð.Õ‘Õþ%†˜Ù›À,µ­=0euKœ+~oÂ ¼i[Ee˜Üø‘ >V ¯É‰%çÝIALš-HJ¯Ë[AWâ8dD½§húm ©üš|ï	ÆÁï#�úgGf�y[ë;ûu÷w‘ób6Ž”©ûtSþ³¦2’tc4³éØ¿0~ìÔ'c”ã9ˆì³ð÷Â˜"}»ìõü.Âœâä|€ö5æÓ¢OµA@Ä3èaPÀ™¡¢²»‚�º<
-U0¦™[W½=Oùc°Ñœ¶¡6’…&Ä…8*A^^�œ…™.[êÙx+@Þ®jêã-ÞÖƒœÕ:ž­óOvû{�sÈBB·"(kaö{M�.4Ã&YuqîÜy4ÐÙùYÛÛÜ‹ÊóR	„ÈŒ“�Ÿz'] “g¸MdNgØ¤ß÷
-~ÿÉMÔŒC2È*ìÛ¹³ÍŠîGŠðIXz–BË”au_ñ�¯lq[IÂ‹[ƒhÇ¼«Áe 9¼$ß×Ç¢±''f€oøTl9ø8>©ñ<¸¨Þûð¢ê¶‹0^œ�‘ÒŠñ1Â”x7ž\·..8	ÓZAÌçá4³T`X#Ùe²²[™H±‘‘Ø.êýxî†®wÂûþ*(#G˜¶ö,2€CB)7AOç¨ŠZà+)ùÁœûÉAùµüûð¢“¤ªJ~{kÀöDD\›Á–¾4›®»nD—òP0qb:,	'PJh¨Eî&ºŸ�>Ê/cYI�ß=.¬-ÝýOÛAâQ'å¥5�¼Š+aºÙ	©?b¿3LnLYä—ÀÁ§›Ä
-¨d4jCëï‡TíK¹aFYË¸k[ÿÓ{ÿ¿Ž;.-Oä½G'‰œÚDÜ¿Ãà¡šuEqWÎ« göJ8SŸEvÙ3¨ŸööšÖà´îÙiŒKÌ�ðÎ<ÊÊKÚV¯NWö?\¥6Ñ‰­žèpL”?!�7	+¡á¾²ò#L {ïSÿW“ŠŠâùÿ©.Þ)•ŠUD8ôº�{©¸#:µû½	#VÛÆ¥Æå¦ïÏ+p.3åðÐ˜@›ëmaÌKPBgø^‘dm¾· ³YÏ](oCeÀÉÓëÛZ‚›_øî;ÚŸ¤2+¯@)êfôï9&-}ø¼šI²÷L B†CPõã]±Tœm ÄÆd ÊÀlPöxF0:÷´ê©ßà²-"ÏÂl7fÿÐ*wh|B`ž••Õ�Â;à;¯‚�`ÒÂ$HEÆ�àsõìzkjjøÚed²½�4âxÚÀÃssIJÞ è6]óajzmj�±¢¡cö¦¶Èä
-øË‡ +à¸¹’Ýóy{�'œi¹Ì.Ð— Ë‡#ÚŸá{_ªn ˜ÌÅÅ–K×ºÃç¶âeù®š%/>±alžkÝdÐ–e´¢’‡‹hà¤�,Ëf ÑäB�õ\�’D×kúzå|¯UUŸÑ(¿1B>9ððöÞ{ï©v][ˆÄ4ˆ“’;"ðS¼íÀô‚ÐË¨¥Ôè> |¿a8v´Á³‘"ËŒ¡Gm³‘ŠúÁï@Rê‡óÆ�½ëÙuè¯úO‹�GÕNâiTvâ.Š÷Õài'¯A¨R9Q°Š[·‘În‹A.³T
-„NoT5È²IÑC’ˆ¶ëÏœ\]…9Õƒð#�‹Úcü†®yÁ«ˆ=u�âèM‘ˆ±P£¢KBZhY�–×P-ªk+–ï$Å †@[‡lÐ„ÂpŒËý×_u½lÿõ™ÝOàA<§¡ÌeÍl>Ó,D”Ñ�¬¶ðÔ?+Ò Í�0g9j$½
-ÁÖ2•kzØRãT�ÄtGlš`a0Ô¶­û×·‘$	\Ë•[Á"îFæ˜¬j·C›)ƒ†EÈ–žNÊqÖà˜#^"tˆÆ‹™gB›v ùFP —¦ý*àS€ˆƒó»w!#Âê”’ü�!&ú(kÐ�(&Ä‚�ƒ„Ž�™.x_a¦‘ö&*›ç{	„7x*<Š³¸ÆW°¤¾ó>#Æ?»f–w¯'ŠÄW˜Ñÿ2”ðF‚!EŸ
-¡¥”i:Û¦HLÑŽN)›ŒqÅìk©^gDõW	E'`_u1-´>‹�Ê€³ÖÐÁ�A?
-„�Ù~s3íÙÃ+'1�Û/ß‹bßR¦¸8ºaÃ�bqI?YY}_‹F_Dåýð™7ƒõ¬§B±·�8ì~Xß:ÓA±¯Á·û�$‹ð0òœžåÅÔg¿q{†¹9Ÿ—~`ª+£ ‚ûO@™ÄÀ=ñ
-Hãwƒòq 5Ú�‘„÷„ù3<÷ëW<±¢‚!Ï%ñ,G¥ À”OSGMu‘g`èôŒÇëÜª¥@J¼�M±±˜ Ÿ¡vÐ»•cÆtYäZj¨£‹”ŽÅªIsÅu~üZ3¶ýÉ´;’‘åÆ®Ã¢W†d–�›¿hkÍ®#|¾QñÝµ·þnŠÖµÁè¥XÐŽ@	�ö�m3Ñ•‚ÒkHn$á1fXq4Ò¿‚t¿Î0¥†U«ÊãïÉlÛ žZ˜E]5–™›AÔÐÜ^ï'ï9ß•ŠFÔÚ´ÂøþnASÙO±±%€0~ÑVÚ´ò­§êOÎÎî Ù²Dc&‚6!þÝ?.ƒC�¬?"êž™[ÐJò’mj€g–�î2ÅUÅõB‘Êí¬D½q%{MŸçK§C˜¦ÙŒ�@ŽÃib’&²CtE³wàŒqŸ¸bí`¦¹ËbZS£#°¬>	f/3ü5°m­ƒ²Ÿ!År!P§þ…Ê|RŽ? x^Ù™ðŒÜxÖÕ1O?,$ê—Tµ¾fmu`¾sô4EÕÓóÆM{’{L¿\çjá/»Ã—ç§Æh×£ÔXCq�h©ºhjª¤¿Ú�µ5ƒzÆµô ¬u¢Øçw*/÷D¡«ljy;ARãy÷Có"oNóšÏ³¸Î‰±Œe÷êoÑõóÁ;ûV„gþÅi1§f
-c•›ÝïÙM¡ô÷á6Ç“EèâÙôWÞ­‘6÷e}ûØ[üeJtv$4OòÚì‹�òØ¬æ ùd¦SOúfMk¸ÆÂ©@‘ÀõÒ—êV%0Ã
-�ËO?ãZû§]wÛ8 ?àïaê5¯¿•Êv˜Á ¼#=‰÷‚«A",Â™Ô«
--mš4©o0L‰¦&K&“4EÔÔ'å‹‚^yöë•M®©=ÆúU“gsáf˜Ž	t·“¾f ¨A+5­ú°iªý´ä';)k>ì ‹Ñ~wÓ½ß2t¬Œá„�aMS 8—S{ö¸ËN�±Å Î©ÄC¹êÑÑL»ßŒ.�5fL—{ŠôÆÕ·¥ÀM“…ñBíˆ³+£Ü0¹N´M–˜fV0Zá*cö ê]@Qa…ˆ5¥ŠÝ¶•×¤ˆV›�âÁ¸Äôb­úŠv�g§Ë–´æ�úóðÖQQ!‰#&~#KtdNÖ‘JNâ˜iOÊ”¹RÅ+PI`A>`˜DÀ¢ý‡‚Êù.jæð9ÿ§ÝùÅš/I.ð+(ä‡)&yÉwñ•ºå2|t€°ä1T¸�CbD�Ñdj{E˜í.++”&!Pfz´€¿�„Ø	Ú¿PÇaa¡65Añ¤#£Ë
-Sùä\'!¦°	çï¯Ïwue¥kÄ6!XR‘ë 4²Q±øÃhLÿh\INã8`{g¤Æ³´â‰héÇ:Ÿ|Gü©`S†Ï˜º�¶-vã¼{úÀ¬B[[—ïŒ�J”£½BÅ`îcY
-¾Š€ÏÃUQÿ�\�6>6  
-yÚBÕ\
-�º”�Q\¿ÈfMqxð$Rd³eÍÊ*›J}
-Z/…?/€‰½S“õS³¨û-"}ßL�V'[’þ:j#‚¥|'¸rýzûÀ£}Ü‰Ã‰…`°±7Ñ$'P6$½ÜF›úc  ±Á¿}?–¹ËQhórXïâ’&c-´~çÄY³l1CåPë‹†Ù_ :�¿_ß•êào‰	©ÛÀqy8æyo,\"¼ægU­ýxÕzžª))†`í�LµïXÎHî‘–Œ©AÓd|‘'š³Qå‡-vûÕºm¦=Ñ¶’ÓÎ¿"l8ßAý¥#ðÆÂêŽé$ãÏh9€±¶ÃgW¸¶D’L¢©Âòë›×DÍE9ª7CÛe3Å›vû#—tw7ÆaSC Ã¤„e-×YÞeu'†é„Øw²‘ÝõÕ�í!ÌT_Qd�µ‰aX-Ù(ï<$j0­(FÐe= 0ê Zh—žœ!UHZÖ,­2MÊÏÉézÈX’xÌ¬n£'Ä`£‘ôl¸¸œìµ²fÞ‘Í'W"&uŒÃâ_íŠ«ý‘Ë¶{B�íò„çUû£g× ÞùcÇÿÜï±æÛöæ‹6ËP×ñ’®¤WÂ…ÅAo^¿¬®`Â´ùÈ ý#Ì¾Ið©Mt	â8³ÿ0�ªè2Ñ[Œ�ÒAåPyøðÿUçšä²�Ê¬xõyŠ"j?´Ë•šb«·Ø…ßAÀ_S“…þ“‹Æ·­­0L  @ IDATÖv|šý‘n»CSèç	›UT¸d°Ö5uæ	‚0rC{°Ï–ŽP~Ãù·KÖ˜ïâ	‡ ’ª�j]FRþ<¤=ÿÆ)ð£Ì#¾6ÏÎ	‡F‰ÁhVØ4óu-žÕ¿¨A¤f@é:8ú�€<L§…0ðè†½µ8-©þÑ
-EOv9í2;kV`Eù?oo_j‘x;aâ7’DzYu[™ÄrE‘Í:(˜+RT«‚ŸÉ|W-²vSqNãÄŽTáNÂ’8ˆ³[^Å÷£Žkš½Ã}Ëàï�¬ˆ¯37´F[—^Ø»·‡¼ÄzÉÐ:$Î¤r‚1	çZÓ?ˆ ®—&˜n;Ë˜øÝ.C0A¿Wè@óŠÑñä“¢®û¦	Ö\‰1G£&n8'j,[ç0uïºÎ†®d�é(%ô•ÛóP$f<§QjyÈ-VãÒ}KAÚSÌ*ŠË!Å>0¼d OÕ¤/‘JK¢a¿·)Ôg~cà£&xpº#ýF‡•žç�²WŠ=&ôÈ‚Ôâÿ^�ÿu™Sý°¾î$Tâ¨£mEùÔÅøþøeïwuÿþ!žúÿ¶xŸ­ÏÐ! åLaY~/,Ó°tÕ ÿÒ5¯kÐ�ñ¥6‡ÒAùæ)œ0­¶T¨ÀNÿÏÛû}ƒª×N;Iò7Ã¤Î…ºrzºhI®ìþ¥škc¢-D	  ``™·ë(– W�
-—ò+M	[aš>=(Íµþ°•™8ígï!ËºäÑÏºñ«æe‰e&Ë�ÃK%ušÊ{£i–yq™ÒaÅvÎ:5šq_,«àO1hªþÆ˜üÈêC°–ÄÍI&mð)ÙU¡ºv˜à]¾Yâóê–SqÜµààý0ì•ßîÎáÐýüÒS¦ß	WÃmðY‚Q»±¾.²0Á�K¸(¤Ô‚³àï¼ÑþÞð÷9át±WàgE0‚Þ†"/[Û“×$ÒzÉµ7·Jd�FóSV’ŸF0ŒÜƒ‡:QQ›ìÕ¨fîCJcµ“gzÃ·ý±ƒ
--%Zf¢�ÇÚ¿ƒK%Ii¨N‘oU˜Ê¡EÉ�ÄõIrˆL€à³½(ŠS€Yñ*ý‹ÅÜÂ�{¡�E„_VM½Å®ÑsŒqªHÓW#Tý´Åä>8VÝ®îmÀâ"ä%å\…l¯¿AG6µy×öížnìV8t}K`
-¸|ßEVbÜ!¯*¾ÆÛÙ¤Üsq�? Õ‘‡qi�õ}§bYpR‘ýe�Ö´xO�èÌ ´±ÃŒ	K[BâŽÉîÏ˜´‰Ì™P~¿`4f:¬î¦PtI²È¢¾}êµíHž74á…Ö†šuÉ¹ýâìfÝ»ÿ¼Óyœbô<NgoÉÎør!Ð�  ôu¦ÙçäB^6rpâe"÷.?LD¾?Q7âÏK9‘ˆ[Œ~aYÍ7_mîî¿$}u>Æ”Í)pÊ¥cÞWK1éÓñ™µè÷óúD‡D»‰ï¢>E‰ªa@2´yÓT ›ÜŽšUsz¦Ú—’c÷{B}àFû–Wþä@{Ág;ù$M`“û, ×Âñ_&æùíçn¿Xø’×uD²u;”�à{Qj¸·§4ÛáÁOñ‡¸=ì…ºº½QúÉO«†oÙëÏµ!pr„ÙN®?¤%Â&�í‹ª‚Û=ÃU7�—16’‘—Ä´0‚?˜ã8XN0^GmëÜÁéÐrHyòR¬pÏXlô£ƒ�Î8…!2¨ÅÆüUÈ$í�w�ü\k¥¦�E�CÉš9A¨¨*ËeôH[Bpä$+/À1gkLdeyvv¾êÒ"VûÄ0‹%=Ð�+¤MB¼øT	dÁðë®q(âŠéý]>ÄÿsBapæ}/u�±uïY”rÆœŒ7G6�º¨¢Ì…%q´í‹C{Zù„§©&SU´ÁèÇÛ¼M}yZVVÇú*¯S·CxY:`çD¥,ÿ‡í�…‘ªó®ç€e„¢ÌT³”|ñÒœôms÷s‹Ûm›¶÷�u6I#{b²YW‰	ß}!˜i¨{Õ™lòõ„ÿ´{»ŸIñP·a)Ÿ®Ïšíù©ñ }%‚Ï;›¶;æ­P¸ùBÑI®·²Á7.dè5;7´aÅºîB%q¿��¡ù†mqúG¬Lm	Ò­Àòæ„tc<
-ã\;ü'*='®q¢î¿yU²Å:[QTÍ1Ù ß›œçìB%Æ—¼kÉÉÉÙ± gÕ™X`ÅÏ·’`æ‰Úïk7�¹ž3pøÅ@| È¨hH"êhµÐÍ½°K”áøª›ÏÇr|7,ÀVX–/4u7OýpÝ‹\Hæ,¬éÝÐ ¯˜n#á­_´ý¤ùþŸ^™uaÑdÅ$ÅVDÕx Œ<ämþß›
-ûÀÝG4ùA‘æJe-Ôy,ÁKî·êí·=ª¯æE®:�¦”º.s[mÜßB|OÍk¿ÞXýÝ’å‡/¹q¤“úT„™¦ï�aÅ �Y§™ÚƒdD°õHÏŸ3ìz 3€ícð;Ï×Yê¯ÞPû»™9®OAéYÔ ¿œ`É¢U¸Ï×D4Ò®OÞ|*²¨¯zùå#/‰˜ƒŒär'¼˜#dÞàŒ=t,ú²Ój}ËF–N/û¡ #×#i;aìZ®ò™´“{²?tÄ÷ÿS‰l0™–ïå5ö­²Ì,Âä,¸oVÁ“þ¡XµsÌÆMˆ,ŽÿÁW2%ÿµ¬âB.¬I<Æ±6ËË”/ÞÕ�üý•}BàÐ«Êæ? Ô@»-…~[ý@Ž é¹HQ®‡ŸÐ A=@	A‡À¨LûÎöµËWO.ÎÜ™¼¤/ xìK
-m&î3¾ À7�¾YCáGï¶äÉœ#Ï'qlB˜"½9‡°›ÜÓPâwÉ0{ãep àg?šž2qwN‚ßüÏðë&k´ÖM£†ã¹7Bû+~2P›¸Æ‰¸'ó1‰ãOV a0xs32Bð’ k|#ûÂñÓ¦žUEE
-àƒu£{Ißs¯¼%é«FßÉKë½Gp?$Î=Q÷ã2åOZ´ð'Ÿ<ûÄ¸®æ Îñ8Þ2‚Š*ƒvû |»÷@>S3zÛ»TF}ù`[ã*¢¿‚²8×#ÖT�cAž­˜1îî;ø¹ãr\4ß8¤…¶LB„»Å£Çþãë¯#vE´P˜Ý×XºŸ$I§ÍñH#¨ˆ«ç8Ìé¦=vï xz¢ú4x8Ä”ª;¼æPUŽ™Y²P4ÎÊÿÜâÑýð�ÆzÔiêOi™ŽÅ	Í•¤$ó"ó6¼Å£0ˆQ°ªÍGÈè]`÷Ü¸7¾:´-††—ÁÙÁË{9)ð‘Œ9‰ª‰cŽÞ/®÷>€‡r
-¤´·YR¢NŽ‘’-Â^3ôIâ>¸îç�×#5g¢ªSáï©‹ˆ®E6Ñ
-MZÚÿ'äåºxÎþà†*‘ËK[†¾î‡`½×B³éðá=�þû‘5p¨„ÛÒž»i84z„Ûµœ©ŠXÛ`†ûy�ò«"“Ã4ì_G–ò~9½®¯Â#°@ea>ÙdŸ;§¯³sM«¦÷*þ(8jÚk®Jh¢ÝûFæ’a]°g¨Štûˆì´Íß¶zûÚi~Yá´oà–Š'|W†Ed&t"ÌÁ†h¥ç­òòïÝ3¤¯Ã¯¼ùFÎ4~íd>b
-{ P89á^YÓSA²?FÂ€”EÉBÐ½û!øÚv3ã©ÈvÙÜ*SóóEY©ñûcè~ìoéó7�í=EA,gt16j,cš»UÿnEAê^ò¾UÔyG³VÖîD]2÷¶ö�ÎÅÇâ-hÁE|òï€p€1û¦3bÚT¹iÉ±žñoa¼µmv’}6¬Èû°�g@¢J�«î¯)Ý	ï*Q&úN:}(�Þ„¥94Œ!PTŽí—âØýKÆâ¸p;¼ðøãÚ°1#[¬ko)”�UVfßªls^?É2YÓ>EåuvÁòJSO¤h­%ÏcOÁÝè]”ss.‰hz²¨Å˜ßYÞM@vï°bJ šÒùxÏF2Ä`˜H?fž�ÂMutá]›£òàL8—·!9ãŸZDa\^Z\t¿^o§Sm•ÔdLÚéP—s‘ù¼À&viÝ�M|>èƒ0ŒÆÐês,Åå€¿î¬ª¹¢É5nk®k&ü‰c}ˆšš–Â/zú8Qö]8ôé¾hûÓnÉìŒödØlq;q^bŸ¤‰¬ý_¯?«„ð™3j"²6~‡óEWdòSv�^VÖuÏÖhÄ´]'î“*r”äá%¼N'#™¡L³`´t£¯l(;Ï8Pªu{khAèþâ�H©.³‰ÆÀƒ~©ü¿×ñ,.º©ÂH½
-«!�»-Ò>B%©ÓÜÝàTè�({ÖäÞq«j6­›�ò<‡ûS6$ÚÌn
-D¶º£zÏÑs° o¡4z£Èa¯ªM%×#}­îð×p—�Ôä‹‘,q^’ÀŸŽç’ìÚ|‹ TaAyÎSÎÜã�DîÚ\ßz\C&ÅE›¢�ƒ†B¯ey¦bÑ˜™nw–¸CjC–]ˆÎ%7ù�m�¡h:²C§ q Å½ùjàç3†®½ÜiiCWÍöˆ&¡:¯)ZogaRZk‹7œ›ê�†>ý´ÑcØˆdp–�ÇÀ¥)ÛasÙ½‘²Í>¹µ,Åú›Z°
-“má–öèVdª�‚$øypI›,²+Ý6SX‘aãAÐ0he�g/ýýá¶�£Æ‘ù~:„´È#m`ö¿dú·ñ‘DƒÄ*JTÅfŠ0ös@Û¶§mÍ×-SQ}D¶c7ü,[a¶Z�q«áëÝÑ¡ŠF‚�ç´Õ�nÓMVìÄ±dJ|&ûwžy&¥#ï`µ¾‚}92–‡¨ÎÅº‚uë*›RYŽ�
-Ák‡P¨uë[jCÊ�… ¬Ço!ë'Ï¥+) š‘{‘{“E…|î¾yCÆVäÅû#:ŸŸ’¸ÙW�Ý= ›L–5%%î¶ Ç“Ô^·!üÄ2×‚ýÁ†´ìGc²v3„æÝ­ß„€ä×øí�µÜ?:ô¿7Å‰OvYƒg8"”ñû“1o•;– Éë~4®Î«žÈìz®ÅŒn-?Êžð‘-¬¬|ð†×Jº¾Xaô•�áu�Tê2›[vêñ—«¼wŽ‡3µ¿7[¤J&äùD
-�‚@E ó#I+ÞÖªõpw	wÒ·Šît�ÈÏCæwÔ�­^ �Õs(”?–¥è¿‘Ûò>žA.´îSá<;O&Hô{}I”6ÛÃ(aNú¼·32¥&…'iO h§g |ØÆ3_ >ø7ÄÔÎ‘²Ö)SÚ€Iê$Í¼oPÁÀ3+ ž“ö�m8¬Ì7 úÌ¹ Å¾©t¿±úY¨«wÿÖÖÖôCGývþ­höæ#µ{&’‰šQúg¿Ÿ	.òù¨wc¬L„Dü•ïò¶Ëáƒ†ÀmE°67fGm÷G¬�1ˆí ìîE¼x-XÐë‘?0l˜©=ïÀïÝoaÔHªº¦„?CAÜ?ÁçE ¤â“A€ûtSP†ÑüýFÞ·¨nTª‡Ôõ	�°´¾?ò?ÿtLøŸŸþãG‚¹MAg,¼ÉÎÊ33{6×š_„d!§Ru€˜u	ÇÄUT…3‚ÁSýº& Õ™eì¶+Ë‹ºVÜîPz¯òó¶´‡¯']r’•Òhÿ†Rå;ñî>”Ã)IŽÌÒ„¿–JN-ÄÜ+A|Ê1½,”ö——SëŽ7³Z(…2oÀ=@$Ú—6nú¨PjÞC[Û#]¾`òÛ¥¨X¡¿Ì0ô[ÁÂèE£ï*:÷xÈ\¹%'§åÀ•N@`ìrHv¸SèT5úÖˆl×¦ÁéÎKà‹ŠRòcºI·á¡\b���¦%qoX†MFÚB—a’�ïé‹KKƒmk–n 4æU¸E+P~©®¨¨(„¤a²'ÎÅw1ÂK:<D¸ÒûvîßÕT³Ï"SËÚsc,,­áz×ópÛ¶98î9PËZðwa�P¯ôÉæ<‹{_Å±ÈÕ“’]y0Ù†Z.‡a¨ÓÁ	à´[AÏa2œÙcÛ$A÷Ã½’ŠÄ	;ùø�¿4Tóu¼ÖY¨2rÆÐY³â%Ç`
-â¡3ƒOIJŠ÷áT`³uÙ³„VÔçh|ºÝ~A`pû6,²Šöz{Ô|×Ý	ÊÀÛƒû=™‰~l'°Ë—Áû‰¤gãðý¶KŠú¤Ò9&oÙrdÁÒÄy'êq/¢÷ySÈ”�uß>ßÌþ)	NZÒ/,´&ù›­?P+i5J
-0ùCÏ¸úÆõR[hZqúþ¶ˆ±E¡ƒ@ßÕwª†S“ô6,ú‡ÄÎ‰:8?ÒnRÉ…ëhú¡÷‘â¾Z-àeÔé1Sö@gtdâ´y*‘€KŸE„�Œ©îIüös÷]/èÏ½À��GØ©`ú,A�µAýÎ	Ó_DÂÅ+€Cx)]= ,e×ËN®A„…¤‡„bÔJè�B²�Ù"K™]("HÃ,u%f@Yk„˜™µ£3xÉ.Ol"ñ¡?Þp3PQéš5ëÐC0[ãÚð© TéÃ(.¾Öæ0�é?&í Õ”YÎ,G»­ üwH"ïƒ–× Ké€{`44µ'†�˜±�œš¤N›Ôjóþ•z¤G7\2¼°Kk'5Ò�én_ª ÷ý X† V"„,"]GÝ:ˆep*¢­ÁXìÐ}‰Æ�Œ¸4M�lbP)©Ž 7JœµŠiÞ Êú\o‡y°)Ñ7\{Û™¨NñØ:wàž-àiXXÝ–¹²Á[F\“0.âEVþ³Á×privW;â×DÏÆÞC
-ó»¨köIÍþm«Çå¤ožŠò+?–Û®åZŒÍMÇ¼a�…‰RlI‚*}APËºØ¿ØMë£€?Õ§X-+°#ƒX�í¯‚k@§Tø®Ù¦º:2·ñ=lEÏì°Xºæ'y¾Äz:A»+°˜�*Î‘S®VYaPÏ¤¾³†g‡pvkñ“~�Jw–fê¯yÝ±7€ùƒÀ+­®ú°´á¿mŽ`Ûô/4E*CgiQµ*1ÿ�Ûçû[ú¼¸«!…<Ç¯<ÓDY’6 Êo5x&‹†ö¿Ui*ßy&t:¤¢$�ÒŸúÔ¶ê9Ý¬ÏÄõNä==¯"žÜCú@(v}½t£¦PwÀ5¶ BÃž’SP~ç…ý¾è}ué‚³&õxnÂK°vµaÍÏs~Äü¹ãp\n?vsbŠ:S\ƒÔd:™ZÐ&P/¾ÝÜ#%NÙý<#3æ2°iIW¥ƒ›Î9„þ#ebÀí@Ûß!~U9¼x©~�¹TSµpÔõÛ“í»¦0ÆqjBŒ9wk»o�É‹`®fð"?S­Úóí±„™œ ‘¼
-Qöù€”d"»ë½ˆº…T� ×!e|ŒãS–c†A0µ@’ÿ�ÖSÞ!°%rîGûs“’xÿ´ì,<·#5‚!„cx„ÚŸôìé¶m¸ä¦{‚!gú(«ìB±�§§¥Å]#`±$ýÁ ~Ø'Ë-VÁ2\åb‹ˆûñHÛºo¤-«Ü�ðÜn×š2V	áD›s¹j’õï-)€huÝŸ˜”D`± V ,Q¤ƒœ>0É×ýú?õ™Œ}Nrö³š®íU­ÌÛËž|ÒÆU·–˜¦‡.)Ç	‹öo>8£ÐÔ‰Ã"·êØ ÙTæ�ÍN¢Ímñ[\à‰6ÛšŸ+=û¼¶¥OPìâ¶•;H ‘à¢Ó’„w}²ZWM§¢Sý]»ÏÎQM9ÑFð'?¦iò>-#ù]±3üLŸ,eŒÉ=eº«_?^ÄØ‰ûýÿ±'Ï{cGø"¸Ô$E’jyV½Õv°>A×™hYÄ™¡“þ·“SäÔÇfõÌ¯Æo&±"� @2Te°Ê³š5j¬3,RÇˆÜ\‰hÊ‰óûÊ`0USÙ3À?2 ë„ô]¨æÀ"È8nnó—Øyt¦ÔÕ2"øx)<H¶��ÐP%MS¯jä/|’TLÕuÛÃXä~ yýOÆªKCøOþoŽ!Aééˆ_1Þe4å6ÔÕºIáØ'›×¯ø¡àÅ¤-ôD}à¾c(‰¥šwÔÕQýÂû^24�¿�æ¨¿Â…Ð -p.�Å:ðxÉ%[âÂ#ÞD¢%uŸ4&OÕÃÌ­ÃÙŒ5“Û›³G÷ç»¦ÎQK]‹ïSA‘DªùQfNNWÐÎÆ8/D ¬‚å´éžà,©‘\‡ÜoVïüfbÒ-xÉï´ÀöÄ�$#UwO$nÄWG^rÜ2kH¯"ýä�oÒÿB|â7­[§ÄtmY(Ho 6œ!Fš¨g®jöŽFµÝ¸˜œŸØH[ì¢¾U‘Á}`º0‡ŠÀ�»í
-P?E4…â’’-Êdçmhþac[èåí¡×7wî[�ºl¸NÜÕRŽŒ³ÿFð’û“±G
-ñÓ,+|8Æåò�~X¾«ªÝßº¶SöVËqì%Ð�×?Cdý) =¶ÀWý``ÛÆ�8Ý2C&%êÙÕPnž\“l¨£{†•¢n�õéwÅÔ,|IBPh+È±	óÚž{×»ƒ¯ÞM2Ø¾ßt})Ãò—8<�Áð>¬ÄXDç¾ÈèË¹¤¼øo`#´˜1Iö xh^Œfu¨�¡£/é&Y´\VnrªÏdiñéÅUž‰K"ûí!÷‡Ãú-­h>ÝN³<oë»º14aÉ’%ñùý&ª>îÇÜË¦s!-ñy‹f2/q…½ùIT¤�Ã3“ªJ~ïêãxûd¸N3ˆCgóVÌ›CQÿ"âª`u~8-Ð×p¥vBäÿDøígKkà“u¾ãâÍé²žVÇ‚9‡Õä³òO™÷W&&ÒÊÐÉv�¡‚Û-×ÊQ­ŠF7“4qY±a"G%)6&ÿpä½ÄêÆ¿@4÷®YDæÒðáT×ñ‰óûÈ¸ƒiû|‘àçÑÏí•�íJü–ØxÇr÷#H8Quäo,½©ÒqLè6˜Ä¸šZ
-^à(´y¸Áøy˜A*q�Û¸e…H£¡Õ6ÛRÅÃ™šHílíg³¹»i¥ñ—¦iõŠJ«‹Î„À�’T¶MÍ�O·y'-AQÑ£ïKHÚq?0Í!�27ÉÁà'hìsø{]X•š9…%vA|ø�ð‰¢î¨YwŽE`ž«ô†û%Lw2ö«ÛÚŠ×6ú¬mj\0}¿î�ÌN­šnsã»øâA~#B™üŸ8ŽÐSÊ¶lô‘¯Gç&o=\¢†¶¨ì††„¤X(Þu¾ˆjËÈ@‘äÊ»ìsôÏ¼iŽÁb¸²‡À­G™§÷g—fl=Zéh—6ÁwŸn"j0ÜP(õAÆ&3s'œvI¼I´éDÝÏž=ÛdjÎÁ_¼ÊEÓÇ‘g‰1ë…E8©%ªNF�óoƒ^ójü‘góÑÓ�52¸N&Ra"ˆÍ€PÜ•6~†ƒ¼£'êØ$Ú]…²X…~÷L°m˜XëÀ´ˆKœõî÷I,wt–¸+¯JJƒªO!Þ1ò%„ùq=ŸHsì%DZdÁRU3ãÛàOrÌ$î¬ýÿDø¦9³QŠš:€ä„ÜË‰á‘Š©ÀÅžr¥44¤ëa~ZíàdµkTU?>Ñ6 >wÁ_J4–°Ì—L˜ö�í�á7ìVqüÅi*¶œá¹‹@~ lï3•¾@Æç“=Ñ%:¼õÝÀœmN
-ÅÌ{ÖÀÿI0½„hCKçYà¯ùLÒò¸V«›Ÿh‚úòØ¬x–µîpåÞ*ÌÞâ¨Œ`lCèPõBqÄµ'2±×¹}­o	�#‹O÷û“Ï’j4ãaÁÕH¶ËòO¾ðÀµ¹öúÂšý‘!•@9àtšh-°ÄAF¤ncôZšæ†ðœ®O;Äåö�ÜYÎœwÈu¿5ñ‘“[ß1†‰Þ©—fûP|yLSnJåÔ]4/ü“p*ú²ÄEODcòKðAý@óÑAÕ8÷¤‹/æI¡ÌÂò÷Xië;,Ï½ÀSækëÝ�{×¸Ý¤MäÁ'-‰ßµë"4»g×·G} ‚’h]äù�ŸÀÇ€°7&Rô#æ¦¯9²W|þ¶k>ý­Î¨.(æÕ4öÑ`Â;ý¨‚ ‰[ÅSÐuó5{Þ94ÛÑñmí¾
-Wr2ªo0ƒŽ¾½ofÁc;|¡»I²KâœmOÆoˆëA˜ßâ¢«Ëá?V”!“f„UíRÐ}
-À~�TÙž½2É‘wß¿��H¬r�ÍÍ«Äì†µ*0�àI«à~ÂõºÞÙc]û×þ�a¡/…;Áß‡5U»þÛÀýwtJÇËÈ (mŽ.µ[UÅ|˜;1_ƒUÚ5¦£K‡Ay£GÂiÌÄ¢Q2~ÖvÄÿYW8ê¤ø*i'›*ó1‚*·BòE€™=¾Y�]ÑÓæôá˜®ÓÐc``Q/äÁ!¸/æ­!ævÜÜ$)½p+€s€´i…ÿòB0{	>Ã .ö™Á°ÏKî5ååßÌQÍéú“ "b±ècð·äØ9¼…};›q¾ÐCï¡håckN„‰Ž¬Cú “–v�´ƒh€i.Ç•hQ9øjeC{Éq(Ò}V'Œ{l¤Í°ýXŽ~$Íšqå˜Ì]7ÇïªD0m\ÁÃRÛ9„£ûï‰Ï`5Ýî�>ƒçú&zŸ6l©¯íõ‡Î&~ß¤Ì¤¦ÝÛ7íŽ²Z_h0^ 
-á[s#3=d1gŒikƒe~hçöI±N	˜Å‰/§¶}!/Ö(h¥
-mÉ‚{g&ž�B¨ Ð¾™œÍ6 ¢ê§ÀžIÏ´—²¼“�~4FPVÏâõ[Í0Üµe›�„ÎÖÈL3¿÷³kž™úðÚÆð Rr{u‹(YØHêj¢-ÿÍ^çèRÖ4
-ÄQhtb#Ü"/½‹zÈÜ\1f†Ì˜KX•ºÓnn"ÊÙuXÇwß“òBJkkl lczöùkÌyu6ÁÂ=È‹É€B$[øàqº·áÿêó±’zÈ½—4xû[Yú^dûÀhÛædÙGÅáÍ˜¢½æSµKlªå¼q¥€PvR£CSt7^Ú4¸â¦ìr‡ú$8¬ÿ¯úrïc…–{$k[K,ôÏ~®ƒ´Nû!<'â�0†üºÊžç‚Àc Ë™Êû£|Ü½-ZëgðvÈ³íß{¶Üý˜ÿäóqŸpñ²,4]ˆ¥&)ÛµþÙ÷��Ò–‰ ü´0¬Ò¥é�´ZdãôD‰—QŠH�J{fwã\Õ,Ôp+Ê¢üZk˜�>Sk“‹¯†v{›·ŒëÓ'®%oðz];:ÃçîóFîØŒ]RÕ å‹ŽÀ&N(ÌªÕxöqUÑæC¯‡; >Ç2Ø Þ3>Puæ�Œ¦ý­mÝ
- kùdÏºá–É¨q%ˆ¾á60žbÂÊh;ÜŒ@ë^WVV\ø’šPð}×F	(,ïÍ±¤>¶©1821a{¥Ñ!ô‡³b/4ÎÛS³¬«ì�µÏ.?àÿÿÈûÀ¨ªìý×çMÏ¤'$BèÒ¤!(»`±¡bA×¾ºØ{A±#v]ÑEDš€R¤×„H/“L2}æõ÷ÿn`bÀ îŠ»ëÿ÷vq&3oÞ»÷¾{Ï=ç;ç|Gš¸7N�¹ß)� >G5µh×+ØöAP>`µºÏ J :¡‚,�ï0ž_²�Èw¨8»KD
-.ÈSä4f´8ÌÒÜö$&diPâZúÓ‚Ÿê&ÓŽ4œ®‚6i¢=xZ{\	€Þ—hk#ŒÐCö…f�Žg[Ãñ†%Mqù#\¦Ð�AG¸ëÃ÷�á ¼tÛ/ nwes,"÷�ÃžüÄŠÃ%’~Ë<l>ç€ªaü`³`=g·ƒ‹<ïT°š6ÚñMñ¨2�:°a5+á¥??µãyk‘6K*'Ã9Êº0ÒÚ_ ˆåY8-/C¿±ïP_`3üÊÁvÕŒ¿{hË–{ýæþ—NÜ‚*ÄP(D”ÐÉ¬CBÒÃ[·|·ãL—«	E?‡BÒ€ªÝ7Û¼þ.	¸éÀ²eá€dìBÈU)­±%pFŒœÑã7ÁNÿ¥n÷¶Ñ¨�a>„j™˜QœhwóL¬³Óaí½ÊÆŒ· MÂÛkA%•‡Þ6³
-Ê¹ !	#yOKS¡tY®¤é,§G‰µ@¾ûwŽ–€ôçÇmýIf~áYNhSêª‹:÷-2—AÕ�Áò’5æ”WùËD¿žêR¥ƒ®P·ÓxJ¯�#ê'sBÂ-¨&ç‘ì¡wT©Qá­žS�ZgÝW S…&æ¯§×À©pÀ]¯þ—`
-NŽ1Ü£=›ÂK·$;ÿÑéÄ‰¶N¶V­ÝýŒ±«9+—,é’ >³8¼­ïÄ›6ŸNR—Qdä.ìü�P„ðE–u+( KêBN0ÑO7ÅŠ!Ô Ï˜1>5s0µÓ@Í8h¦§ëÀ2úäæÞ‡‹y‰iˆ·%/#çÐ^‰�ót”B:ß!Aßªãåk»Ra0&ÅÇà£�ˆú*(Þµ>Å*Œâ(öºp’oª‚×Nâæ¦Ù©5Áb3I2ãõC{81QcM¾ î¥ `H†p.òj‹Ó�ü›Xº /<¸»”¨<Ãíx™a²€ñu€ÀÎ×5­4'+Cm¬n† Dl¹qnª˜º±H|ÃÉÌ=YI\ÝPÄ ­,’¶;ÓÄeØ‡†±,´&ƒy0F"QÆÃ)8Ñ.êQhÀ�&Ì`’(B±®Aà(Î…Æê«—£ÛPº»MÂc‡CxBòöz“’�hG�ïG3u"rxS]Ç6¿Uj“Oæsªš¢6{ðXm9p>kðð�Lºs±«èØHîöIR‰�°{ô>>75µj `�–kþô†ÀaüÉ…·Á�Qt-I`CÌôwÓÇ�oö;t²i±M€.cæ‚%nÄ¸éÓ÷¡ûÆ‘Ôô0"!vQÛi
->�AY›ŸÕŸiˆÂ
-+ ˆ•c]7F; 3ôrTÞ™ß †Â‘í’I\‚³ƒdP‹Ÿ²X¦ÛG¢XvpgwG0¤QCÐÛÔ£�»ÇþàWþ>áš/Ù	àáy_2ô�fD’Ê7.­€xZeÕU™CTÍÕ¯»QÊ\¾Öfå³]Û, —eÖ÷Œ-ø©2É$£m„ˆ´˜©HE­ðµÃš2	~¶9,#Ž÷°“-ÌãK��å‹ÒòWº¤|²L¬Öõ3ów8ÈÌaR”ôMµm’ž¼v`»¤íCàÙ'ä1‰ñ"f¾na¦ÁQ3Zw‘!Io€'¶nWSÜ…‡è@Š2ê-RþúúUÍ;ß7N;ãDÌLÈãÄ°Þ‚Ú`sã±X‹óƒhheß-Ù–äga¾O^ù.døJ\~—ÖÙT€ûà³0k�2û/¡¯Ú+ªñÐ=Ü¦`ß‚ôdM”@Ó'm%t‘Þï—¶Ò{5— îŒ�˜ùäq„™¸ñ~Á¤Dßxž¯CØhx©ž�êŸéÞð{¿¡×Üp0ø´JKb?Qm¢{¹ª+„éÉÂˆìÝÄäÇ€¯F{ Š(­ÙŒ§"�ïÑezcµä[Ê
-®÷5U}NI8×Ì‰.9÷¥‹�¾çzI�cc:™·$‰öw6Õ…¯†™Ñ¬¥+�Äö•—·àk‰6ÿÚ+ ’TOŽ²&ÒEÎ+³J«aŒöÓ®#ø;}›y�•Bë†g&uÊpÔG(i3ÌÏ×2ŽpàþÚ=þŒßsýG_Ö$kSP¸4	sS•u¦l[mm3ßH­AsœaãØNHRýŠ™V_Rr”L ˜<‰à!I9ÄËÿg²N¶Õ ½´K�˜°kËþ“‡aõÞ|qu\Õf�jÆ¤Od,PâZøGcOm˜÷ê«-²€|O²!º fr2d@U^Þ‚zøÛý¿Gô¿þó¶q°QZIE¥wOëÖÎOŒ°#¸Ë� ¬ñtš‡V�$e™©0V�åGÄ¢òV—²‹ ßˆéõE
-å´ÜÙeé3ýEhS•À7ÏçÀ[À~B‹ù”*Kkéx�
-!‘.‡0ë$R–œ’p½PÁ»ˆåSYUóDk«¥D%Gâ;brmªŒÜŒûV÷4¤^ï8¡2zÉ[_V„ót”yuBƒÇ†`FMŠÁidl@2vÂi _ )þ#J™ï”6Ô.·y®S¬Vv{}xøŽÆÀE[ëCg¦ Ûop»äšXÉîÕ‘¸ùf$&=åÕþÀYød@,Hé¢×Õûüeä^¤]»›¢£°‰äáaW…e5f•ùvÏ>7-³KÃá®8…9¢¥�Ó©xÕÎ˜ÄQ¯CY™‚¦_‹ôÝ‡±QÔ;Ý„/þð×¥íˆÔ(&ÓÓ"$Ý±£"Ü3=);ÙTÃ'¹=Ž®úÞLÿ¿M¨iÖçàr˜ŠÈ’ƒØÐ&ºíìŒ%U¡f<›˜aÀŒ»«ï¶%ååEú{¨`}�´¶	àÆ2±‘y€ìÏD?Æ‚ýî³h\}PÓÃh`ró!½>:’@DÛw*î×t(˜½¶&rúzàÇ›«üc7FÀ¹¿8Wu“­ƒ;r!c•7é}µ�¯gYä]5Í‹Èfèï�lé+,À–q {eØÉsý·MÇÃ#ú¿ùßµáS�Pr6âvðWl‚·×'ëÚc};ô¸cî�Æ1&ß|¼ÿÓ¡§``ÌiÅÖ*X“mÇò.·qÊÿÌGDÛL~bú_Û�²ÔÔÔt�¹p¸AîR� e �zƒÕW]IœÅDÑÛûÝ—a‚Ay2›�¬òQ"n©µë<Wiª°âTpñ#§e.ý;�?á°iÄ‘²#-ÚÂ×ž,=ÿêiï?¾é›0ØÎLht„kìè�; 2&Eƒµ”±çþ#þ?¢´;g&AÓ³!£ÖÒ"ËÓXÏä÷÷ÎÂó´m}ÕªÅ{ p°	>†åæJE¾àÓÀŸ„ÖýH—¬ÜGB>}�aDò›µ¨qãÆ±:ÍŒFµŠó©­•syæm3_znÿþq2ÒÁ¸ár
-È–£©��B€<{×7Ð<u
-âU·!‡îUovRÅø·¾ª:žã¡Ô»AT2
-euXáºKÐË·y#s•ŒŒ¯ �Kâ_2U”«�c@�›G"Ez¶­®©o±Üí;	Xèç4¯hùw×“h°¢²jq ²]Qµïû¦%íÆO4A€×D0nàº]63Ë&.œ5;ÜútrYÊØ¿³Vïzòã&CßìzŠ$êç.!!5ž¨b~™SH­ñ×Êgr‚p÷oÙpp÷ý³»T2VùºÌ.Jym&øå�³Ú°æãw`ÕIv]³ËÊÏâ)$Â”…J•UÁ9œ¼§¬±;Âéž–�Z=cÆLúœ©w}�~<5õóÓÊ¨5š¨42´�gc?–Ò»�7=HF'<e]mèkÐZ¿€Øa2f?;Ž°šµX4Bí~<Ð‚Ðh¾¿öbÙy7ÞõqÍ¾}�.YY­ßÜæC’Ô>†"t'¥§·(­Oú³¼ÿê`S.�ÀzDå‚»aÊAuiæ€Ië÷aû‚•ÂÜ…R]·»XÙØŒUÚ¥"–È?è ¾¦Öä‚}¾ìz]ï–.ÒY¢Nñ8]…p€=gž¯ÿÓCA„éž×ÎžˆE0ºœGxb!š¨Uò©M¤OÏÇ%ˆ8‚þÄ^Ãeååí~=¯Ê].© ƒ�(ño´¿z;•—Iª8Cêª²†%¤â6¡>µXYpmÓXŽê¯vêCà?²îþ­ãÍp#`c•¿�«]ÒÁn4ÝâhkÝR’3=}<¼«GŽ-¡G06¥‚¢.U¹i@VV|“?Ò“’”®™Yq,½#Ì‹öNJ–Ë9‡#\·OãR½ 7ÞY¨Y’œ\`qRá‹9šë|¯ÌÔcº§¦’ˆŠ6w-’¦igðõ�Ð‘:"Ù÷rOšã+@Ë0£‘-çõŸK±ü¨|¥¾¸|a
-/Ž QËó$)8.ËWÛëR�=G©˜ÏKËyxèÀ–+þWpô”CØŒiD'88^¬ÖÎF|e3Kvëž§�fMÍ€¹.¡rÜ,Þw†9ø*Ê÷<Ñ¦òî¦Ð=ÐZï‡Öº‚s4È+q.‹²;÷Ôú“¾tÓÜNÒÖ_:Hûr“³³ñÛ�‘]Á`†šl†OÖ,K_ùËÄC·>ÿÖÝ6��v³o8JyÒd‘ÚnR ê!YÚð¡Y)ûPä³‹…À†a‰ÇÕ¡§€¶÷4¨ñyn8,"fPl:ù§Þ4†7Xó\"Þ±àãÂö.¢-V¼‘Kƒû¾—:Œ<ë8†n¤ó</2Ÿ 6|.vÏ[á0my²)ì}!ñû«BƒiÞ¼ Úw&ÔµÝSYôÔšï:Ó_êû1ß1û|Á“c4;Œ5õ5½SÝÛñ}³@>æ¼ÿù?Éâú¾îÖB„”¹+e	òX¸IUßÎ[âñxŒhÏÂ´t;
-Ðô0Ýò�pQkeÙEœ®¾‚&Ç8Ü·D@†á•™Œ˜kP‹šYQ£ªYšíâ^­ó~
-�–õú¿4(DÞû"W�Ö`Œ*’ÐD¢œÞ+ÙA¬,ª.I¨ÌtLŽ å
-ø‚©í4Åã�Ã#`<Y«GŸ"0	¡ŒfLÂg1@Yßxo#`]…µ\ìdŒE‰�EÑ¿;hÃwŒ@ÍZÌœXCdòZ¤í‘ÉqìÝZ^ò4Neé‹$,Õc¨î ö=ÕïÑ±¿·SÂ¤‹>âáÝyöï/E*ÇÝ4‡µl^ÞÁíöˆzäQX¬`±7vcÆôQ)ë#€	Ò×!œ‰÷ä•„¤ùŒè»¸ïd˜'Ë»t�â÷£tšF†K�i|ŒòÚ-8¨Ì»ñ�ÓtU{Á§7ÁKNë`o×-‡7•rÃì�ô¿Fª´§uÅ˜ïÆZ¤:ß‘æÎœ´šÉù:°…|‘5GŠ~z¡Q�ðª†L¿ƒé'.U¿7èAs<ôõ(óLÌ”_FYpBM)0{¦Å—B®õ[‚?Íò”ïÙë_¨†ÔYq¿ô|ƒ�»rÎ“áXÀ”‹ÍA
-Ë]˜ÏÈ�ãÞ„8zZ0a©*‹—ãÞ°tÅ³B3í-Âtž8?í?¼PÑ÷{L¡½ÌÇé¬ÆèG™µÍ /€,ŒgrF³“×ÊÁØ34Ï®=¸ü›½šª–±ºù,Æ²„>1ºÍV8*†‚Ÿy.kÒ—CÀÈcŒE Æyú9«VýÄlFÆ‚˜•‰ð¡6ÆÆÀFÝH<ÇtÐS§ü9>"sˆ3Ø×Ë¾aP™È!f]<ûž¯_=eÊ”æ2è“{¤Õ5µwÁ¦s%ðÍ³#u©%¢Í¶ ª-ïNžƒv»È³'YÂ®h|‘õgÃªþ&à0ÐÙ²ÏqƒÒ¦/Ej÷ÿâˆ4Cˆ�MzÖÏ‹XGÐ‰˜É{|±fS'Óáh�hå!ðC_…9¶ }¨„àõa~�ök«Ê³Dð..k¼ ")§ksDÍúOé�ø±ÎÔH–=6–ª§÷Ù�Sš#­þÝ±øC`‡Dcˆ²ÜïÿÁ%Sy‚ižÛ±ðÌýóÖW­$1›¤,<’¾F¨¾D}oÖ6�¥SÄ3ü�ýP™Çi]Ý§NøN3�Í&dâúä•Óè=(TÕ  ªð�öÝçÅUÕ†„ˆHé…uä#Uí\”ñÅL­3kò!P>^ääl)¨´à�³ëFÝ•™¾³)R/Xèwê6mÚCÌö#;ß=§àf“á»jk›L�Ï;©az0i'¢ º®ß�¼×ž€'ÀãôÙ�‚äH²²f-îöPÐS?¦sÝ°Ð�ÕÁÏhž	¬ô.‡fYƒËîÄ?#6ì¸…´‚be<ÔºˆÑÑfDêtwR™,Üß±«·ÃHÝ#ëá=ýS3¢ðF¯M2E/BÄzuš˜Xµ wtÎ¬U´Ú\7ºLnm~JsÙ“£4º#x7�eZ x»ñ'Eö3lï±1ú·Uì ³Ìa*ªWµêåäù-ãÇÚp_ôÄbT%„íýi9'Kžöú{ËÂ`ckC$"õtC˜â�ðn(„ÐÆA6âÜSÎ+aÞìÆ²P±¾¾Ê.fWÒòÂº/�0!™¹ÓôC[ý0%Àllþ=‚/@¼j>¸j�D¢o²6.uæ—™º™å,<¼QŠEÇO2RrN…kÖºÙ>¤Ëú;í’¾G<K‹vghŽÕõL$®lÖwøú¤‘ÂCÚ¶b/SpÊm¼ƒÞÅá^<‹TÖšyÔ:',|èZ�°¹¼Š²¦ï�Äg%[ØSáÜ¶ÂÞÆÆ£¨ô»¦DgãÖP”Îq'}7´GL�¹Ét1¡bŠz¡Ç‘ìÏÿ…aªÊùŠõyC¡,"sb�ž“°	�
-¿ÂUhã3¤�$l
-×‚ˆ=c¥Çnz°érÁ(ÕX÷…ÆäIJë3P¥[tsB!œÆ^-$¯ycóf</g!«´
-Q(ljH˜:2GçÿPÍ—hðÌ´Ç–é QVÕ(#-:#“µ�FòëK¨†x9²¸ˆ'¾Y³ädåmàS?ÀÉõ “£—X,Ió!1P™‚]9,\½ÇÛÊŠP>íZL¤µà¯¼Yj“ ®#™Æ[œNE_ƒc�gPÝ·X7uÈCf£ág^pðÝ|wŽÊ’9ÝSÐŽïÃ!ÚŒˆ†`ÍŠÂæJ¼‡?ŒàBPÁÜèt¼Ö 4Í³ñ;ëðyËÂ•©Õj€/�2—‚g~8ê!i =qOÀÚt’i‰ÙÒò;r_Â66Ðn¯¯l�›ðŒqC˜â>ÂïNCÑ¹Å¨î±°È{H‹2a²ír¡ýr³fa²ÆZ_ßé¿å°¥¼“éV¤‘¶D:�ßÁWä­"$?¿p�Må�¼‘½[·î®Ú÷Ãˆ¹/ï!Þoò2÷€•õ„ÄFD=‡äŒYH:é�¶ž“Ô4¦"ò#áÀy[€“iHöØóHìuî)§Ÿx(`“Ðs¬€&®Âß˜Ë£/P°Ë(�oÁ^%�Î‚ƒÿQ•N-­yÁQc²ew—1iêV//‚�y‡Óf[¾pæL}sE0˜ü{pÂÞ,¾í;¦F9ž�“]å?¿l±¢Àñ›†öšLcŒô­åYàýŸî Ú/)ÕÄ4…Á�Lß­•)Œ“æÍû©¿‰N ´Ä±·¢ú
-»´UR�Í0oØiÆ¾¹óï^DÝ6¸ tQ÷´NÕ|0(k�>U¿³âPcØ¨üH´ó×^w65åÄýc(ë÷�îØQ>™Œg’²X&ý6kèFÔ$½8qBÖÔ?ËéËw¹JÞ}î¹}½çÉ`³ÑL÷˜¦£Ø/-ð³‹Dôä{òmˆóO‘UÕ ©^ªD—$®õ{^Oøà�KxŠAø¢ev<™RÙKŸ[¡ÚwFÈµ–i0Ê7ìÃ |‰êË%«ûz¯{mcu O�£Xè{°2Â"\¡ò®•ŸC­°ú¶vb>ÿóÍç÷ÛK°§®eiõRÙBÝñÔÍßˆšÖb0�5�h»#£sN{‰Ž3w~ÈÆ
-ëŽl±³ìD`™�¡ÑžL‰1§š7ÒFr¿¾Hþ&4s¾=ÚMXbá {&ì--"óá3ÿ÷Õ5k�ÉÇ¬€Ç¹Ä#z—ydÁÏ˜aZ9vLè�†®>Õj¨Æ/Ž»àIP¶äÌ¡O±˜B@Z�‰��}$P¡¸Ûñ{‡…åÞ�hÉŸ®6"�^‡ýlÅq¸rÈzˆS Eëí}ÚØ‹c¦ðeª/|'4˜f3þp«Ûþ/éñv›ð 'Î@@:‚ÐÍî„òinG_s!îw6˜u.ŒÇš>
-™œ¯*úl˜k;pÞ]aotÆ_ø/¥³A¾ÎèªùhMÀ[ŽÓL”›ŠnÙÁí[Lå¸Z¢T0VÝ1XY3vÕGk¬º ½a¿™‰ç$ó®÷:Ž:kHù~ùë‡—.(ƒöj 8îV0ôÛÙ¼€¬>Qe?V@»‰g�r¢IH-o�›RDNlF¯­ÝÝ’¤’èçŸõõJL©.þ9*„\�M0Áý¤é·îÓ×%M=°>&Ã1g‡ òÚúîêå;§F‰sÉ<\ýá«‡ µ¬á	hÚ…ƒJþû|È$äE;^|0 ¬™™¤�‰6W5Ö¬iê[l*ùºH_‘ø¼Õ+¦ôOsš|ÎQ‘!®ŸÂo0¹h)ùl-(6Q'ñ†1žGìüªó»V@Èw¿ç8áÂ×f³ášl¯hr”à¬.˜†6„†¹›P2¢ÛON·xÑÖR_HyÑm#‰‹Àæ±‚È}’ÜgÐÁŠŠxL~JëÔã9Zä#;¤ÖA[c«*R‹c;Lpp2Ù)»²KRRé §³ñ³ÏÆërÑú2ñ´ò©¼ ý¼OZ8‘$*ÒMDÝè�ª†ú&œ+àXøe×I<`ËÃ;ö>äo”Y��¥2‚'¡á+qæëÑ={ŽÞR<ƒ(Äi�\4]ÿ5ðYdqË¤Î�€“Lò›¼äÊÈÞàwÇ
-÷Ä=ÉõïÁSo£O�ìãF ”ë’�}K‚Òuœ“{	vN�Ó"Ëé�. —óBÄæ†´¢ÑÖÇ6nWó5Qj"›R$UTý\#JÜ·­WÒ®M™&ëºÖCždhõ�HüÀ˜üü`ÿ\÷ÁÒ–l–•TžÐ$È5ê6¬ØÆ±Ip/‚R¥ˆÌ‹€eï5djr½¨~J*X Ðê#Ðà†v/bgÑQw3ƒ¢H6ð�Ó�*�" ÌNk¥\¹rÙ²J+£O�ïu4i6¸�ÛuáÇß—?ž!õ¹ HÆ";ÐjåÙ!)¢õ¡Ž¼ó
-„Ê¥Ka‚ÝºY²šçø$:½/h“Óél�"È½ÿì�‡vôÆž+Á)„„—�¡Â&²­Ó¯Õ6–oš2¥››Ygne‹„aú•Væ”þo�Ó®`Ð£Q–Y˜Ôçà¹ìœ=þØ+%iñå�µ¥RÆ“€
-„ÙÝH¸º­­dÞ�¿¢Qþçè7ßlŽ¬!ý&Ñ4£sRª£Ñ†Õ­ü¯]ï—¾‡bö‹²æ—~ÛæwÛ	,'(\,–E–S±[Áôíò,OÕc'ýz  @ IDATôVÚWâÇ$Z�VØlT·0M;ÂúL´è{¨‘û!<‚f@›C8	VTW§°´£ÑøCÝ³<7µ®­ë%®›x%^K`¨Þeºƒ†akÚÐt0{�p„ø&0×T”ü§à çv�=PÐî0ö<&Jr h¬Aœò±÷(ÃPmñœ�ü%šl|˜à&ÞR=Ž£YŠiK1e*	M!Ss†y‹¤�)“£Ço+ß·Žh‘DˆýÒCÙËM2l)YîïóŽ`²°u,ÛàÔê›Óá<Iú;–@{`½Õ§^¶ËíÞNpÌ½¾p•f>F˜W>ØF§*2áÄ &@ëœn£˜pçÇ>@.@ #%E*úâµKÉäJŒ×¯½¬¼Êïq´1øI*¢@aÞ*Äô¯Õ‹Ûº‰¡sÙ-vI0lq“·dY¥Øºh4|Y(WÆí€Ç‡â™tÆÐ$¡òÄ}”jÄ€©ß!�j¼¦ &»3ÊÛ¹W·ó†Ç	´1¥›�v�R‹‡Îå8êYuÄ{[
-Y#–­2ÜbT1¿CÝÐö4cdër‚E ³»´Â{ÊøþùÁ­ ó�ñhHë}©Îoë·Õþ?Ûg‰øT"€HòJ;W^Á~k¼ìÎV]É\pÈ7ü«ç#7U¥µS/ï’µ}ÅüùAÎ_Têû
-Å]ÆÆd}#jžsGß¼ÀÏÏüÏ|Rˆö‰™ô@Wqøa�¡I;A‚Ž9`„ñ÷f0.@i�Åà‡™‰	>I5�[Oò8^ÿÏ´î×ïrÂ…ïí‹K,SežƒUƒxzo£:²7ðcaaÛä7¥õÑŒÍEJ«Øµ SÅýÎ� þà†Ò´kBYžõ…X�ÈàÑÄÑ
-<9/ÕP…š0\ nTw„�œÎÅ¸šp›{\úÖpÕ�/( µ%ˆ”‡ éÀ[‰ !‚`ÜÍwtä~Ç‚T%ƒU}ªw†»¿2Ás;hŸ_ÍÊB°Á«šô�ï‘Ó¢ÍËÚ»ÐöÜM¢$2`SYC&ã?��Óx.Jã<p$†—Ú€X]˜¹_ "¢³iPsÑ¸w„ûøää�íuÆ9}¡6�^­Åùó~II•hW‹€$ž{“w¤LíÄ ÷FúóÅÛ–ÚvôëWÂé)Ù/Bsœóã-^6kÔƒQA“<v[;™¥^FVðC¦ßj�C$>º­`EE}¾ˆÁYž�zàØÍ‡lfj‡NÃyŠ-€˜êWÚIQKãM©mÛ�=íþMaP£­< U[ÏçÅ¢ÑJ‹Mìâ
-àmùà�ÈÃ}¶‰RÓ%Š˜ò ,•©Š©ÝÆT$}TKÕò)Ùö5ˆ½ìÍL_
-Î3V`¾D³Ý¦&�oæåÙÎd;[—Ý�íy“8Œf6À¯Q•²qp–{Û2Î¿©áÿƒ'‘òïHaÕ™Eq¾¹ˆAGÀe}Ý4óá²\Oqâ¡ÌÛÛ-‰(ÆÈ|·ø•Wj˜|í®”¶ºõÍ!_Pw.kjb»ˆ6õŠ#éÞÍ§“5ÖÖ|jëZ¿ç3rŸápªRQŒ¤æöM£¡à©ó3Ý%�(ì×fZqðþìÈáHØÚ…j§v»ãÝŸÈ†Ñ×ßQÕ?ÃÊå;>Þ¹¿÷óŸ™ðÿî‰FäŠÇõIÒOÕÀÅLºÛD‰ephnoKðîE9ÅÊÜ‡]éŒNNVaûz‡VÂ ûés«˜4AÑ›#rpW!Ë‡¼zµO<mÜZYÂx²öŒ@LrŸ‘a5=<PKèÈ)´;ÍkJ¼LõÀ.(Šzè`=»²¦AAÕƒ=˜ÄÃÛ¼£À¥£¦NýÈ-a%ÎÁ±D2æL"XËSò}HÈI±ÙFÄuÙL²‹Æ§û|ßìûtvÝ¨Q£˜#øn‚—4�ŠZ4^80�Ý·".ÂÚ9rì¨.=Ð?§K	‡p+d"ºeÊƒ	@CšÛ’8�¼’°³ÞcÎ¾Z˜K¢áÊ©ëÖúê¨±IG	pþF ×pyyûMS,ŒqðÿÚŒÝþô1"ã )”j´9§g)uâ$¿�¿[VæèNÛ�ê=×é‚ž®çokk¡¬ ûzqžaäŒÚp÷µHB“‚ÁÕkê	Ç2qB£_g�{6’dŠÆ¦ƒ–dkº‡¢ƒ•Ó)ÛQí$}"Zí¼^!ç�ƒX7‡ßQ�xµ«W¯6úO™Rê·¬¨öM*;hæÆÆÆhïvÉ«N4ØößéÜØàÝî†—¾8(V5ÈMÕ™–:Ž|uìÿ¹†dXÏÌO=€Eåí1~ü~wJÊ*´…à%‰å ¯ã.¥(Àøòƒ¦eåM"a’Ãçâ‘³ÁLßh1ä%lÜ¬˜Þjs!Ø?KêÝ<:?s?SkQ©®m �±ú|â-7j²’Ž6ð˜0k£þTµ©ÖWYÓ’¹s”úú}VR/yËMiXókÏ¼í;ýú§±KdÅœ&eä^_þÝ·	ŸñÊ•++©¼¾ÛÓ\B{¬¯‹`�*š!þJ#ø*`¯$»…Áã>þAÖw“¬Þk¨\¯¡î¢rŽîïýæ„”Ž_UHbDá<NHŠÁ…Ò»Ï(xžÃMªºpLÞaÒŠÖ%ÎLÏºN!Ðkš Ä¹t8Æ&ÒŒ¨Ô·	{Œôe#:¦·ì:¤|óº…_F·®ø6T‘ŸÛ�ÃäU”•—Hw;)šZ ·ÑÊqP‹ÁÊ2íY“ÊD@XLc—•ê¶¯AÖ+“­MyG&¨™g·+í\–x¾ÇÞ"˜±žŽ¨ÞzŠU`8d?Vu³l>Bª;6Xv¦�·¿ÒWÔ%ÃÝyñÞóÏKùÛ(Ä¦#zeÅÛÏXü……”)…;oã®ÁDh\JSâô‡o'Yš‰<cBÌEÓî>Én2g f'ÅäJârpÑüW^©¹þú‹Ú4ƒadÚláÒ¦ú’Åo¼$ý©‹)“1¤#!Ößó¼ß¢¢tK�2—¬2Ì�ù)
-e<<"/e?îoM›Œm¢-[£ƒƒŠ
-†Î†Êñ5z)œèpÚ“»‚Í^;Òãòó#g;Õl+%wJNŽ¶s‰Mo<ûlË†C®E°Ú�Ñè~Ö>©Ðã‹üÑn;}¡=½R‡‚(qUÓYüR�Êp(ÒÙãL_ª,f·e�ìÏ�ÍÌŒå9�±—5´æÛ¯ëÍWÙe'�¤”øj«ß»LcY„¸1 ÷ *5³Ð4•'˜“UÃõ©Y(Ë0+Ãô’Y¦CUX÷‚|‹³Ÿ�‡xîÝÝ37WÛïtrÒSABg«ºPIæBbþ¬¯°î¨}Õ^Š¶&¡"W>ùÎ@åêÝñÈÁ‹
-Úý,Tó@Pn‡TÙS1Ê¢fÝâþÙÙG=ÇÄ8ôïÐs|@1ïw
-Œ o%k¨¿¸›³~9²¾lNö(w çp8R‡j”v¾NÙº6Fb›:¸m‘‰‹´z%¿ó*ò•Þ�{ëùÃk¥Õ×Ç}»	1hë›€zÂB^qÚ7ö›+WšyyyF^’(�¥Ü8Ìå°f¿€fùWd¢B‘¢ÀƒY¤ZßR¹cÃrî±7 ë`—˜vW£˜jA±ÅbôçÃÂ¯©W‚™ƒÇž"þþÝ°ký“‘
-š©Ên±î‹‡èÓh!¾¼bUÚ¡¶¼¬;½ÁŽ2Í>*«ÒLk�ZÕ˜Ã82û4 gÆó*Yn,+<ÆÛúK�%m˜±r%;('‡… ¦£aÆªØ,¼Åæ¶Zâ�tN’•°¿qMRU[íi}mbŠuqwÌˆ²ä—˜xZ²Ð	†L•¤ŽðXÄŽŠ®V‰:ûöyÁiý»õØý…Îî›�ÁÞ¯h‚¨Ù.»P‰ª— �àZìÀH¦—šTlÒàôtoâ·Ä[kpÈ’3¨LhrNÃT×Ñ)®==iåˆ0…þ…cgCì:†3Ÿá(zƒij3c¥¶M•\LNOÀùm—~=ØP1“PqÇ™ÈŠOð¿Ž‘ýó‘vëû©ÍÐFÐ0+tMÚÆ³ât°µmAŒ±,0F_ñô"äf!OëRÜ¢–“p´¶š¸¸¤.�,× ‡hQ™*e£xè{Ö¼3¹KÆ;wT\”bµÞRÞïÓD`im„©RÏØÜú0B¦!0ª›=¨ÊÓXÇì3:9ê�½yæ_×ÔXóu»XÎÅØô˜EÐ)9”³MÀì#QÝeå˜829PŽÔ´"[pé�†²'öîIG4hE^¿aPËfìýþlÉêêRQÞ³ÙGÂÏHûÉ˜%Æ'ÑÐºæ4™Úb°Py€�Ÿ»­ mÇôVÚ19oe¹ÿœÊ¸úb’ÈvB6œD•èHÅî×'JËoÇ>SÒ)‡dó,ûÂû@sœ€ ÷U™nÇ-#ALÞú¾¤’ù}£Ï<Åtûé”¶h@ZÒÜæg1ÑÆÄkIS¤GÌ ?`ª/ž'ÃAÄ—‡x‘Áêk»8�>Bˆå²y6ã~‚Õ)¨wÂÊ´ÇÊ	©l fW¢&`âšäõÃ½u…™K#Óóý’z•Sˆ]/Òîóâ†>,×.ÎšéÚØúüõžhã¿û 'ï2$O×#Hý3®¥ÁËÿé·¯¾zðx‚‰Õ0 º9ykÇCV?Ij¨·Y/*ªÑÀqºØ°)ïg»/q �hbþÛ`ò`‰ILÌ"´ÏéÕÞQAfÃ¦7Ÿª<ˆ<ívÙÉß¿>mÊ¯
-^r]bŠ­þèåšqH2 ÁèÞC{ø²¢ÝnNü’dˆ „g\‡	Ô[·c(<ËÕ�ò[púüŽ¨là¿³YŸìÄóº±À½HžÝ"´|XèÇþÆÐ@š³] sùd0ëçƒMlí­Ú,²ÍTìÖ÷;ö=YXMQå\ë¬48­¸ŽÜnÝ	t0 �†ú|-0¯ƒ(4‚·9VW�€´ÞÝ µ'KÒÄ�Mñœ�7-;iE 2ò­X¶·
-•VÄ‚ú1]É@:j"¡±t¬UÔ«¬ºÐ·9|îØÆàï�½ÑÒ¨78¤\´³YF¢<Te“©îQz““Eño 6Y�ZÌ/LèE˜‰Û`>,‡…ö˜0-¿ ›ê»²NO©–B§­j�L ‚7÷Ô�ómQ¥§1ÄŒ©0¥�VIì¹>ƒÖ¼lÕ²]µñøõˆ˜¹‰�"µûeš£þ
-¿÷c‡z÷nÖp—�³¶¬AZ"ÊÆ’ú­[[4ï6ºó§ûh@2:¿W~}Bð’¼W\}Úœ"ï�$©"Ñ!��×¸þ	Ä:8dššÕ¿¼i0Æøp$6§¯6Þ^#+³œ6ŸGl&¤YMþ¦‰à%Úb@ÒÎðË†Ã/këá^¹·¤D{?Â
-÷ƒ"öql £½ÁèŸ<èJÜ�¼Þ1rl
-a½u][CµÃ�euíñ1M"…6B1C’áÏÖ8qtvzÙ’} ’ ¶"�X¦#´Ü+ázñ1ß5FŸÌ°§öÇµ–�ïì.a4)§Õñú;W.Úv¬à%Š±Ú‘!ÙPÃÌHH[ÊÍ"Óp>[WV#ëmz RO6†?äøÝš/iY£ÆOµ9Ò„K-Ó‰;—Í¡ŽkÂ‘ò=9œãCàRÝ�ä0›Õc‹á”?	Âé|ž‹ÿ­_êOÕg½^V˜(©Úx”Yàuð¶L^(—ê"_
-M{d¦c÷\ÃÆÄÓš`F'[³ÖH„°Ù£˜¿×üW^I‡]wg§€×W?¡~oS+%¸mëìŽè"@cÃáëƒÉÃ”À÷~Œ•W“$…P‡ÆBÃ ¥ça·HF|™ªóÉ²Ú3¨];¢}µ\›´SuC“·¦Ù‰ø3�h×>u´[`K\Òy±�›Wô€aL@ºòPLÔHuÎÔtõ†õ%_’†ô”_]9µæ¢pÉn¨FÙµµºªÎÄ„-'í@F¢uÂ°\iîÎš®‡0¨�‹Úë�²WÆLuI(X»šh�äZm¤íŸî¯Iä™+€/}«Ê–i"§fDc=Â¯M©Hÿ
-ÐŒ¶¤"0±,›å`­#+}UU}2ÛeEhýŠªˆ|ZOß| G»�Ó�ôû‹’ºž¨}m†EœÇJºÊ2qCeHì¨pÀÇUUa³(ÖÁÊÕuR]µJiÌÉÐGÚ"ËúÒ9säc£;H;ó¥­~üÿòÙ'»ë3$ðH#Ôî”\‘y­!/­¹â7yÆ¶,q¢bÐE²Ùxf¢‚›bºÞe†zq¦™,°lýjTb^º¦gúa~jÌ»`ÏSæclÇ*x¤êýN/ìÑ¼±�"‚k�gÅúæP¸ìÓÄ¼#B»Ã°³’bŒ’æâ„‹ J`¤ÛÇ	Œ|›²y£ñƒY³Â­ŸY§Ý_„™‚¬	ÌMs¸N1§NèƒÅâÀ?È`*þ2À¹àY"—î'ÖÏCçHôGÙÏ†?,*›_as9VaT°ÅpŽëF òmnF
-G’1þ¨çB„o¢qP­bg±1¡°Gƒ�ÿ}�Iž„Û`B€žëQ_�Óð˜ƒ£áªË Ueï×�k½S-EGhK@�s£]`lÈB	"4i>ã þF‚gãQæ5¿®u…æ¶qL#*=€@Ëx$íWÕ›aEÇ€Õ@ÖÂ#îeYÕgrbC0
-ºt¼ÁÊITÑªxkMáèÖÎû¥ïç'¢!â¡ŒjVvºåeˆ$„�sˆ6jìENÜ!É�òÚÝ»ëÒÓ™	­6�ÄµÈ+©gø	¨˜<¶Ô{ÓÓËÇ“Éväø¡6x22“ºEúÇr_ÍžâyóšqâñS§õQþvôÔ˜tµ@ÅÇ€±¿ŠüŒ´1½÷ ×’vC±�PZø3•'³›
-yg8oé‘F5/$r>ðçv)f¡Z%"n/‡©»{$ï™ÞÆf@ÎOoí¨îv–‹ðLî’uõ~hÏÿýB”´Ù—éÐî6$›æÕ”70á»xTzì…½3êçlx|—ƒÜ}©§î<ï¤Ã0M³¯  Ï_ ì;àÉŽ‰p,ß„r7É*&†�`bQ`hÿi,ÅÕ;4éƒAypÂ¶1wz#'Ñ¢£ºwø¿ xÉó˜œ•£µgc’±<ÓeééàùÙC�ÝEúÿ,øz»ù>qÃœŠ½Ñàºu&C¦rrÜ�Àï52Ñï¯@5‘Ä³%¯Ë|Ó‘;þ€O’£™VîŒõíS·‘9±¼Â?"¤ióñHÜØ÷&ûýåó<‡¤ÜVB“ç™Ü½_.$åhp…ÕÂ[=B0ÌoCº^	~íòu�>»ç,JÄË×XQðz5­cGd=Ž<§X ¥íDªŽ�µ‘Ü˜KDö f­1ßê¯»¼µI´}IyJÃ£ ±ªm7ÍÊ™ÓM�Ž¥u†W®JËu¼‘�ù>ú£‡'Tø&:F ‚”¤¤lyji‚h†(Üâ�VÕ¬@k+âòÇv‹UO§õ“‘�ïúN­dç¾¡C‡Æ·ûÃÃÁ£’C«¡…	gò â9½3ÎXne¹<àw1íúügÏö%Ý­W¿@œúÚ0f¾aåèE0=ž•$êdZ0�5³<1*vvÃ%ð •ÖÁqc�WbšÖ$éf}KÝ'¼êloÍÔ7ªj��a}†,ûY^@¦œ/Nˆ þ=Úù­•€‹éXt5H›[ïð‰1lýº­!ò2~¢"µq®®ê×À[ÿI Åµ­ðHLêbÄ%ÛäX�Â	ª¤6€¢qËø‚L""8%£³3ÉÁŽC ù_!ƒ>Ù<=ÚßÞ;ï»ÜÐ�L™Û5ƒ™xrš½v3ðgÁà¿BÐFß¸*'UˆÑ2‘[ÒöÏŠêíÅõE�zZ¾8ÎËã§ä$Y¸]¨÷¤�	>ï¦Ü=œu+¬Éó´&¨Õàôô«$c»¡n¾u‘U îƒø`JûÔ¹°%U²Ü9òìr<–y±£&k6' i4Â„¶šJ¬Ö¯³6�¦†:­<9«–%6¼c›·Ã}�|M\]SÈû6àªÿZ¼ê±mû#þ^u°¡ ¬ü×a£­GÎœ\‘î°×{hoB’{’5&§¸ä$G#"er¢UQ¥ˆi¶Õ¥Ìá˜ì%H`au6v„Â“‚� /cªßB{#ý’�
-=@ ¿…¾QY{Û%0ßEjâ!á£iq¹ÿVÃÐûZDöá1Y>i�QG¶S€Ãž2§àòßÓÈÏç­ ¥†ÕiIé9}’{pþÏ¬>Òfþ¤“¬‘(å(H¶wÄ3Pð,6^Õ®/@)xÒ7r¬ª­ME5°sê%%�¬'dMv)î1$%Ýnë3”4ÃbŒƒ…�ˆífù¨lÏÔæü‡_d�,æI,âEŠ"Ïyxõö†ÈTƒ6oÅ„±œó �K¦ú¬�wÈ>-¾°fK€,fb’äž9ƒ§‘bªG$„/¼5X”AŠ_Ž‡ŒJÏê˜1Ùi-@=yR~ŸÇàw³¬QÿDÙÈ‡#Š¯’¶¤>”$ð7`7|IÎˆ@ën^xµq�Ãó<ÛM&?‘†GqÊiC¼Œh—�w@U"dÐZš
-kB&‘µÅ¡Q—h’<·2X8µ +¢uþ%.q´`#}<öØ†¢”ÇÍGµ�ç¢ª´UÄ¹`÷™c‘�•7È&Õ†*Õi”=�µó¢¼–Þ›¹�˜õÍN«ë$ÎäL�ÕIEéqHÂ;±Ÿ6ˆ®ËŠSÍ�øa•¶­LÑÝd”ÁógÍ*>÷–{Îád©a_»äM­µícÛyìß?TOóÊÊ X'•!U?Í#pô=i]^ÚÎóæÑ\¯aI
-ÏeAð²pÄÕ~¨ò¿‰:xdI†ÞtS˜Ù‚²§kÿ$ƒÜƒ<g†Fúë­âh;~	_œ´‘ìv3™#F+yò1±åÄÃžûÙMàëì;Ð”DXAOÕáO�ç8<¶_Ö¿¿.o<n*«JwœýÑÛ5ß\3ív'§Ô”È2",[÷‹Œ?hö¸¬xÜ¬]¸PO(Û�×Ì¹(ÉÃ”6�”€Âó`›Ú÷|‘KW!ÂÈœþ¬‹’‹_.)Ú3)]D9ä;³{‡ºO÷{O…†9S>%®˜[\vöÞÈº›–$Y÷Ù£GÛJ<•PºBqÊWun%Ï¨¢Cªv-]´=qnë¶¶~OæFzÏž"RÐv�å¿yëåêDÛÉy‹+où’ZS
-í<÷œÛÂŒAd–î�Ä–^Ó3gÇòCÞtQ°ŒBI*¬
-$Lm;Ym­ïq"ßŸpáK‚ðé]Ä ÷AÚð×í•usô«M]]¤[mËXEŽ¬¯;Q€1i£U`¿ú+Ÿ™´–h7»|±þ À9X0ä�˜<½2—ç£„OÍJ˜×ªf,Dn9h5õÑ¤Tvb0ˆF¶¼¢é5à¬kbÚƒZL‹8Ì–Vù¯„ÆÕÁÕÞY]_äËHï|UG§ý9LÄ-19|³…âC¬ <D1ô„ $ŸæÅG€ƒwþŸ %#mG_A×Z<½^¿dtNY«†~Å£‘ó’lÖ�aïó+†„ˆ†jì
-…Ñ¡4S9)²c]×Ü63ñH{©3hI‰>´õºÙº�ÁcGyÞŒ!q8DÑ–—ú§[JqþQ¿	¶ù´ƒhˆÁ¤A×Hmãyï²={šz44˜iii´§Ï ³Pïqàí=�SøE]À;eRƒÉ½‹›Â×BƒysEµ_ží&¼«)úpéQPRç{½�'Q�ä¨0¹¶ÚL>[[+µ/i
-ÚD&ƒ|{åA8/[kZdÁ‘s‹êÅíu…¹.zˆ@sÕHá.Dàô YÑ¯ÞÑ9­ó%çÿ«ë��áKà,<Æ‚Ìá�Ã¤ì¥Ðæ¬ÎŸ×ëðX¥áÿ«÷ø_?Ÿàº©™b{ÉÍÔJ!s44Ì3àhÚ§RiÜo¾àW4²®½©ù�Iºv3�ïP]õ¬óºf”aÐÌ¥åMÃÂºþeD5RYò¤ÓL{˜ðJ!N„Á£»
-q†ÍpÈ†Y•k·>¸æÇ%ÿLÔ“#cH¬f·='ÓBÇÉ&×´˜<ê,®—ëØ#z?9éxã�„©v°çKª¾æê5 Ë ªÈ‡\<}’&«‹dNRw”•EFô�ÂA¨.–)ÐË½XýÞ{Jká}¼{ü»ŸC&žØƒ€Û²˜Õè)˜ì×?Ô
-ò
-\Ý,<»¥2I¬L‹5}fš«!dÃ(¶¸G’Ô½Dðn�I´?ë€¿Ì6y 	K<ÀCFm²$pÊ2	Aò›9hp»¥kr‰Ç²²²RŒ›t
-0:8¯îŠ7c¢Þ&åKUÒ_;‘—hÖÙ61ä·Ø@§§1�±ˆŠ°
-æG<M¿•çFRRTQÓêUY�=á¨�ÏAšÌBl*2Â—†…�d¡µ	Õ8­YB(•®Ä(TÜ5÷;Xæt8¼nBëéQÅ ‰Ï36ç×Ã*ýSìÛòÃÑBWÔ4�þMiÓ“_]}Ûk‹Êý³VU&/¯õ·Ç-Ïƒìâ„ Ü=ƒl.š°—Lt“¶¼x÷kO–Ãºè´ebˆ6‚ß-š"„Û»×ø+ö~nÚ…à»µÊšõ¬¡¹Ý»“
-"è,Ú´BRÕ+¹1ÐXf·¬,Ç®Š
-Ï¶¦ðP”ñºã—UýYÿ–åï…‡ZÅ”™k£W»–^�»ýòQ³æëê½þ òf<FÍY3gÖîÖ‚—üšÝ„àm¾š.ƒpˆª@'Ó`žnAê÷‹CEÓ�Ùd~ùÎ‡¿Ý^¸æ¡m¾Ðåë*ƒ”wº›ÑV” ù¤¯”×›±¯°ÉÄiAŽ˜d{"÷·\ûÏxáyøþýÙ¬¡j¦ê½9Ê\ËîlŠ)°®z{§·#úEaéÎ�„`ê¨£fß� b ½KÒ‘Ž|Ør«)mÅøþ\ßÀ:º N5¥‘'—Ó¢†-5Ž¾;…:šÓ­p”E‚ŠübÏ“O»om«õAðÕeˆRR´ØBÀ_é†Z‰«ÂÙÀ�ßÑ‘Ø°�j\�ó>;Ôp6øKÎ"Š
-ùü�¹Ev!Öj-”¤Â˜®¡fdfC Œ’N-èÓìPg�uQ×™ÐW£ÁäG¬�DûÛ¸ü	ùè„k¾à’uFMñjšÕkƒ!sEªË‚J¿Ê$x£o 	J�Ö5-öõ_KJÔ{õ¿ØëâXqXÁ(íGT‰`(î|}lnTµÅŒðRŠÅnY`|‡ÊŒn¾|Öv%”œ¡u@	ÜQx-Ã‚Év·ð,ã|gmÊêÞÜz¤VV‡žCI†áÙ}Sµé3Ç e&8	™"Ân"£®žšÞ`pññùB¬M»nÚ{N–¹¦ÈCµMÒùñ
-¹*¹ý½pV¤k33´~IÐ9tTOÆ!æ0Ü´×cÚw4+w²q¶'�ZtTMý> ½cG€]“…™	Mú¿¬zl<íµ1œLH•²¡½ÞÐ?";É¹2'C¬N²ðôTYUF€…rœFÅ®){?(½™3Ìy(ôž¬àÃ‚GËb ý%“/ÌG}Ðì.˜½ô=\þš|G4’‹®¹Ã±p9n�¯ªú½Çe�ñ3ºôƒ‘¸ÿeBÒC&;ÊÑ|ŒŸ 1 .�·kÓê{8ŸâÍ|K„ý¨k®­ßaž˜ƒF»Þ7EÌu[8_LÕ'õÉŒýV(‡ÄŽ£v]ÇØ.÷÷É'{£TÎ½k¡í\žžçwš	*Ñ®&KY±¥D¨ˆ~/ïä§5ÞóÍŒ¡?Ý+Ý]z"ûsbFåÄ^…X¯î,OJE ¬;ƒ¾É¡ž
-P.Cë{#Í&Ôƒh*#+fÝV)ÄÎÈ²S+†gd4Ï+ò»o€ÙF5õiC§öÙ¬Ì9ãZ™äïïñ¾ˆßßÑ`šæ¨â‚ô­7Mb•íÉKtþëq
-Ïx`
-?©^ÖŸwñ¨8¥ËA¯õ÷+:§5þD!x.oXNB
-ý8T¯¤­Œô8Éð<vT>Ø[7
-Ñ.õvÎÚ³iÐv»¥kmDêˆŸŒV|�«ÝÉ‰*z;TŸá‹…£åB,6*-M�ãÌ�ÿwÁ,>â¥à tçúc¯ýGý}B…/‰Å8SŸ„Zy)BO°ÉÐ—mûrÿ¦ž£:ˆ¬�ë�råw!ìª¼�‹âUãÚ'bCé~¢-��cl©¤£¬Å:�ÕÕ¾+üh_ª³$�5~~Èw‡�ã¦#ˆ{•HéïC¸ñ˜,i(<™ŠµZ€øÚó°XUð?œ~‚Åq©£ÌrüM/¯¼‹E9!¢š3«òJ‚Ÿ–Ü÷ØƒhC¬%eœU£Ñ–)a:òRÞ|Ñ®
-Iâ û	C1
-`õk„8%ƒ¸ýìŠ†’ïÉµ4kÖ��ÖG€—‚^`èOÉè«ÀŒ]Xð35S]–bPæ—¾2õzÚ"L‹Üs2Ùl4�L¤.7j°�›x'LÿÓ�\ÆêÔ½HÜ@.„YÁqÔpÆ{±tÙŒÓ”uò¾]%DË%×ø¬¨ˆ?žÓ‰èçžÛÎQ§as¼××S,ÎÂwž›Y<qút§ÒýB§CÓyTSÃÏü}«7x)/p/@³®Ttå¦>¿1@þØ±=CëÏ4~X}DýÆãnƒ)}©�–Ï4hñrÄž)ë('éÈôúm®�ÉÚÙ(�‡ð½¡¢ûBÉa—Õ?ÂÁ±õ;¼UÛ�7N'¢­ÿ‹×XSÕ88b2— ˜›¥­±	üDŽ M×ÉÚ=EçC#ó~J�X_\•Œ€üOÂ²62®šŸ¥¸˜™µO/…iŸÝ(ÿ 1Ôö ÐÃ‹»dnn-|[÷Ÿ8Te�ùÄ¤¨Áô#æ_ôˆüNY6’:¥¬N¬÷ÄoH<nïN�Ú�xx W½ï«cCÇ`Ùtòªêø˜êTÉûƒË™y%®{ËÆ&ÕÇ,7¡Ú-XÛè�I,³íû…iOÏ�kRÔa·�YÔƒ5Õ…†­lˆÅŒÿäh1sý=¯�6Ï5X¨§À‹8ÜSNÝMÂDH©vÞ{p- ˆkQ¾d¢ÆÇì ‰š/1�VÑu*+XnWy&Åë�/×9vmLÑR{B'Ú„´a”§8¤¾î‰pê÷¡¸ã«Ê=•ïFcÆ «zNÕõ îå-fæ+žíÑ²ÐD˜ip¶í ,rZ34qôY?ýÕõßà†K�vmêˆˆ B9Íç“$B;‡3›…»“§Sà\4J…Á'ôêo¥~jÀ$®I&•K©&øR™Á™6!	“¡$%ÙöO$‚¯œ3«ÈÐé÷!ø|·k”ô`ó5‰ÆGh2ŸÙðÃÞÕï½ZOÇå±™Mgb`_EÊ$Â©³¼2ŸÖQß�a†€°þ,Å¤öò4wž­ÛÉW¬¯j(øxÕ£ÇqûHLþ5_]­sú#Hâ›„MsW\'õ˜>�ÖÑó¡uÃÍ6CÐ¾Õ©¾dd Aµ¡Ý€môTTikœ#HÊÍ¬Ù÷Õ�«¬~¼„ŒÄù¿å•dn­¯mì¶»	…")!FÆ3©6~ ÖüˆŒòJ7‰ ˆCe:ÚXýû¨¢LÇÆd« þqÌxžYÃxxO]LK*à7.«ÙµuërÑý–~þ'ÎYòn3eõuðX$ŒÝF°¨CèÞ>sê½—ìñµ¶<†öÈir1æ_!d¦XÙ‹@A9ÿë2ß§~ÕüHHÖ°ôuˆ<(=žà%Jˆ®yó·¢žb í¸ÝeaïiŠ©]B†>WÝ[w3¸C­ûOÖÒ’—^ª0´À¢„¼ ß#;Ïµ¶*p2…pô¿¢™ÉwÊ1ãó¸®ïöÇ,7ÛYz“È À«"¯�WÅ—‚aÚ¬âYàŸá ªÍ÷®_uˆÀÿé9pÂ„/=œÔ‡²üœ©9°bprY
-•Ôµ+êøñS–ßŽ»†1ÍWØôôç�ªh.uVšŸ˜åâgÀ£ßÇ!šóf¦ø#Zz6”WÎÆÐõÐ€%êO<£w”±‹S¬UD�z`Ë�A�ª ?¾r–fÁ52HL„•? •«·~æTMØ›‚n–ÆW\¿ªÍóè�Š	É o†?NoLdöxlý]M
-OÖ†%Ž"±`ªFXÕrÊÃÝÏÌ\ÉÅ†÷€Óa’�6Ÿl¨«;*Ój
- ƒ¢¢"z (*S3œKÍ}­Bç¸WxP9r&?0ÎVhx'Q¦úMY¥V„Âœ'CÀÔ³œµUïPl�òÙ�Ž‡iLJ«xÃ5K5SºÜ›'Ìœ‰l_ú„oX‘êû�æ-m.7³íp5 ¢�Ë1Y}ìÀÎÃÕ;DBRuI(Xë¬înœ¬’—æ´XÓV­Âð·yïó–“‰Ãg{cäÚˆÌ´±ÂãÐnoò6F– ¿kMÆ8+;Ã(¹„aÙKP»w-CëÅ&#LspÜHÝ^N·YêÅfFbÚÌÒ€·%­9+VBË�þ½™Ž¸ó�½VªZdP¸ÒÛAšS£sü=€þv¦³†Ôí{¢jÎvK}h÷+Å^Ki%võ®°0ÎÃœ ¨Ð‚"©»R­Üß%™&üÙA,­:Æ¸Üºc!¥	?Ïóq:¼°²^yBû]£`³�PbÚu„ŽµõÈ:!PùŒÀfkPx.ù‚ºy1lÌ¿3!£8G`?AÀ0�1û9há#„QÃZkl
-Ež¸¨{NSùê÷”–Gz
-Bƒv�ÝnÓê÷^ª8ÊïÐú¦ðû&|³Ò¹”¬IC°óv¤õEúËÉ,¥¾Î‰NÔUŠÿõÐ÷UÛ
-1jä»æ„žë‰Æ¤Áüy~1�y_ìÜY‹’bÍo+(ä€“v¼ÀƒÀ»VÏÈ8jÁèºœ
-Í†ÁŽê³PlsX¹vëC¤’’ð£$Äõªq…òWk™­Ïiý^fÄ”8Ê×CŒG(; âÔúûÄ{ÍàÒÀïKH‚XÞd¯ ¥ß²ÊÀ_à”›,ƒ7 å/>NvnX �8Î<v†yy¸+ãFâ,$“ŠÙ¿ecõ�Ë�Š ûM$ ¾ú™·Ïš_Zê. ¹&¡öíËO×ÔPñ%LÌ|wkmù!A07#º‚îØž»ÙœaÑv[Xê8Ê5‘�"®óïíÜ)ƒ~Ió$BˆdÀÄDÇä¬†öƒ¼#·ù¤- Þþ¢$ú!'Ž¬ýÐ»×¹QIm·¨ÊàVÿí´³¿ÙÝœð2hEÉØLÆµªÍèw©ö"Z#ÓYXØ"d‰o`¯_éµ»!rûv_øõÍÞÈ'„?KpªË¸íõ¡©»›â¹–ünÝ�%N„£æ-Xï¡pèˆ:*ƒ²ôsxÏn¨Ÿx.T®fÔÉgÜ‰D�§ÊöœÀ;^ E€8Xµs6’ç¾
-›éi'H~<«ê¤<²¨Éßÿ—"Ô-$Rk?×Uêø“9Ä9µš9Ãirã‡]wë¹ÄìOŒ	�³ÜÕ»¶„%sŠG`¯þUÆ4Þƒ®ó J _¡Ç«ýSPâwÍ¯½F^
-ëä&Ì¬ßy<m¼z%ªwOéŸsY„Ý(Qž
-!cîGh¡G­ïC°x¶Õú�ëŒºzšË¯j÷2:õ	 æ$UgG‘r?omYuñüsT†z¾ŒT;Mß¦ÇkwOç0©Ã6èê[Ï3ÄW†¼»î`Ñ™˜¤ÿGµñ?øÇ	›l?2C9m”Y@eg·<¬D_t…g34WZç¶U&ÊO“¼W æ´É„?ª¼¦©®ÔW¹iò±Aü_–ù¦TùäOyšéƒØ;VÒÌ‘L‰¯ç*äü“ô*Ì5�{ƒ8¥v$HàÄ}[¿BïEJ!;h<sæ¸&9ù<ü)žã1a¹°&Í˜>ýgÚ4¹?82!è�‰|;†»ç¿„§"V±E6ïµŠòœÑiiQïú%‡Üœ9šÂ
-hƒíT�y˜âé·‘Ó>Ìé,¤�Ý�—ÔÕÙÒE±‚QONb“.X�â~hV3'1Y0¤Ö1Éª•� ãO¿Ø`´ïìj ‚;![_²¦Bpô¤¨l"$ä[}ÁvÕ‡‡þ’ &}§õ}ÀGëPptŠÇžò’ÞÅ»	Zï^N¡g‹(ŒYÜù;‚ †Å’Æ²ìGø~#T?mHö5‹/nÀÀ'$HÈ6\VÖ,X‰«1¶;@Ä4ÅN3ñ¸¾ É9²E�G ]'“ûo©ßBèÑàé­ú+ÐðÛcL08Aƒ
-MÛYOÚIur`9à’ïá€½‡ãX¿h2W³Rüý‡—.-ÛZ¹ã—o<·'ØèKû¶Êß›8pÈ¿^yéþFù¬Ÿ5ÏSY—á£Uûd�#A*ÿ7âämˆUíSØØc&ÇÈð‹ì@L{ÀS]²:]µ²Æ×5Á¹@0©‚\UZÛæá ÒxOe…þòèöÉEÇ3Ý¿.ñ«Þtðä¥!ëm+ªfœ×1�@wÍGXU3Qœ<Š”•Úý;ñáQk8(Gä�_DÈ  ­†DÊ|fCùŽb<°ÇÀ÷|Á‘çRÈw9ŠS8æÅÚÊÈ†	Ý2ËÈú 
-NïÌ‚a¥EuÍ¿»êÐ>òykHåH3þ£/'LøV•jaò— _»ÅÂ:ú®jE†BzÄìéÞ�DâÊÞÉ……-šé@hU˜�€+Úi°!eg{¦tJÉ9™8Š#áâ? Š=0)B ®†ƒm”Eä'h~¿}á~oÇLkú§Ø9¯·0´&þp‡`¹õíg	Ý"n;€¤ë'ógAŠ±b9B°ü3aš¸'yB€Š¶ÐÄL&3A¾Õ”AÎÃÂÏ ç}W«’t«ªPWƒ‚äBÝÂ_bªÞ™™IhíL"\‹½e[AD~êš<¡šF”¥�sL“{·&9pÙ<8Éõ‡M¦34Z/)mrv‰NÙ�\L|ÿÓ+hA
-”Âxléï¢bÑ5Æ†¨ˆ9š¿•ƒ×[v6žÇ“SPGgBÇºÆþ[|¾,â¬HŒÓO×£¨�QºÈ‚!d=<dÐÌZ®Y¤‰Úƒž³lÛÊZkûn§a·½j:`Ž�^Åx¿1ä{s`6—ÛóL!×#aM¸†[°¦Â¡ibÁì|_DÈï�`a£+°¹FëQuvè(á¤¼¿Q5¼h”^«*Ü,Ì&]½ÝÐ˜³Ð×C£Ïî”“…)ô J‚ßÎkÑ��Ê¼9¯"eœÈ#Ù�1�;ËJÑ]w9;u0:uê Ñbj2ÏFûÎõÏƒõ–ÄäSQ#ÛcíßÆØ¶•ÿ¿ß“ñ"éÃñÚÈ'ËoÊ°
-ûDQ¨ÑmHc”:·Ç•uÝZÏ’Ä‚¨ àu=z4];<5|<aFJX!Œâ)X‘ùMoD(çÅU{›)M#
-Î†¹YV~¢‘dÎ�,×Äç‰W·Å¡ ñ	ºŠˆÛÓ�À¦U»ˆrVæ+Ý�Ôe1…zý�âš~TÉÖ²ªÒð7$´Žü–T°æúÌ0ÈÍì·
-Q›I?×ýo¾ž0á{vN„ó<ƒ ~·ÆÒo'5Do!Ž‘²(•¹©®i¢îÀý+™Uèp‹Ðëˆ‚šÉÉöU¾ˆöªI<‚ÅÜñ�ïÑrN¬N^$°Ñ¿™>ej„Ò/åyúlEŽÎö{<J’ü¨ù!øãpn=	z9Ìå¾ÈFH;XóbbºôíåeM˜(ôãðzºÛ˜*¨ÔßÞß×0œ„™û ˆ€ GÜüí]pUå�?¯ïœsßÉÍ’4@yƒ
-²j�dÉ¬Ó®–n­­ãØ.Ú�µÛu;íìlµììt‡meU´jíÔuºSug¡Êê
-Bl$D!R!¼“�\ò¸Inrßç}ö÷O¼r¤`'Ø6gnrsî9ç~ç;ÿïÿøý?§�…)B³âØýèw
-g ;±+¢{¦Ó–µ3‡^Þz¼…´µÅÞî;A<C†—B7tý(tãïª	wu?­òÒý`Û:,qT~PÀù—æ‡x} éËh|mZWÅâmO××å'<º†RV	é‘Ô²¾µ¨(™0’O)
-x�ŸµMjÂjËî.È	…°@K-Nxù	Å+®û\4õ0þF¤HV‡0šà3Ë
-Ú£Vz[×`ö§»Ü›4ä–O™u«jóÎ}ˆtB2'þÞðœ‘©4P¸ÇFäÂ¶ù•ŒŽ?�-E›O‚µ.¸	�%tÍ¯>ýï]°Ìÿ…LÑÊÒÛŒzÁ½øjÛŠ++“½rÜ„`	ïGQÈ6^€ÀÅ‹^ ¡òÏx¯Tpù¹È®lA#ÎíæÀ@xne0vK8ÜE$ZàòCIòÒÎgù�¬¦U)k2–÷Þ´®¯ŽCYÞÓ’"›Záó‡¼’¬$ÅS#Þ:]ßŸòF†KvãõŽaDsÂË~XýW.ùþeæßØ±¢g>zB«Þ^ÓýÚË—¢Ðì*¼ôoÉd¤1Õæ>ûåê²h:Ó»÷«y¥tœ0žÍ€<Æ�ä
-¤/`ÖéKÜš‹éy
-©rÈÛõDzåC¹Ýw"C^ïèE'­ Å7êÍØ;)òl}ùE²?×Å6¡P3*ê””­…Íû.¼YÈf:"—ÏûáA½nèÒ¦å•žn@ÒnútnÏ#�áüh£„|åòu¡-šÎ‘aPˆªÕÌ‹«Ò…ƒ?Ù2R ƒÂ�Úüâ‹# hºAíííÊ›ŸTÄ,§¥EËSÈN6?²~ýˆ‡ý.d~lIY-ðN®+€´E9XÇ*tHR<Ö/Æ¶–Öw%Ö)ÌÍ©Â¢í±ça¾°=ï®žMêjŽ0ÀYUÓ¹Ë}¬_‹>s9)–úÈq$	Ìèü³=±ÎýžQÊ¥4Pv£Î‰ÿ	¯¹”�§RöÖWð;¨äbu\óAÞŠí]‰jn¬ò_iÜf­__â*)Oæp�dì—¨¥À=§KAúÇœ�ÉØ —À2»Ë´Øc&o‘lñlÅ¯‡ý=`X‘¬‘øa®¸‘;ñ›¼z‡nX!�h¼a
-Þ=ˆdJcÉÔŸ+²�uÜßÂ€Þ‰¼kºß�%í»WNÅ7àAEW¦ns†»b ¯GíÂT„^üËvÊŒµ7ÇÜŸZm§~ÁªfÞæo ;ýÒ)ŠÂ™¿jN'öNãCÞR_ÀÖ“+€ÙÝ†ûùk×ä¿=ž4Í�7Ú£Äîö!�ªn ço›	.m¦ø ‹ƒëÓe½¿»ÄF¯�dçÚå sc}½¼R|ÑO+0ÝÔgAŠhBòË2%¢™]ƒ³ÑHñC„‚@ÁZ�Ò(È°¿”4´ïÜ]’Í=Éb[âæ0Ç¹M’Åž±",ö<DVÛ]^k¸±èbÛ/9ZŒ	y¸píí!ýET»Q0GÆ{v®åXO¨ñ¥/òÐH%�Ñ
-Ñ§‚‡GñCà,“kA²þÍçžˆ’W²ëüÐzXÜ›%�¹óÜŽ®9Ö"zPÈ“Á¥Ž"±¡cVÝ¶nºw[²’Rc))\U˜::ŠlTÈ•R1eJXIŽ5ô¹ÜF“èÎ¯}MiI(âpÜyŠ¡'b(Y&dœUL€í� úÌî®Ø�H#Üm8îtÃû3V²–LåøG§Wï‚G*\ÈµtÞ1Æo"ç¸4m›*Œïî 'na™È>òxsç§}Ñ‚¹ÙËÄ¿ÔÍÍ€Â<·ú;˜š
-lV¸—p#òa�)jáÖ@g³>T<½VTXu:k,Ãúõ+£vÊ©þñ,
-F¿7›”²­$tÄÈõÓ¸å
-�mCC¡„«ÎNôY…èb?: ±`º-:‹P:kEö.�À7aúÛ’¾Ç¼Â�¦¯ÂWýÅ^Û1Å	cY+‹x0(îBƒÌÝoy7ë&‡7–næ™njÚ€^ 1K=
-²š§‚ê+ÔµHß‘T+\™»‡9Â)Kƒ¡öö¢€`ãáféU3·Ûß"d´çEŸç[HCÜ�Å»�uÿŠ6Ô€Wt<jH=?v¬ßmîFÇ<2˜|@=øNt/×Hû’ÖÚÑ©� ?Âý`„Xu)ÀJ–ºÞr¾@ûOnG€æ.ýFc´¿+Z#*J5Ò>é{NZS½Ø[æ)Ýð‰hìÌ½TÌüGÃåò1¤ƒœ•´C ¸ïžêLßO>oÏ†wð‹$,y¦Ì„Å:,ÍZ!ˆì¼"¸¾¡”µÍÃ2úÎ�¯ÜçÈé+”ÜŽ¦£³7C9›Þoèþ,"¾ô@êÂ‡¿knäŽq-^'ÜøÒ— FÞèYMâ÷¤!9Ï}ÁÆÞDú›4Ž�ð¦� ·JØ/¹}<“dàV=€kG”ÁI¤SÊr� qý6°²;YBw†àÅ¸õ4]½ÒÉH¬ã×¿‹[6wî«y…ATõŒäuÐü>Œêœ_p½®&J|bÂ˜D©¤Ï¿Ýûˆ6þ%*ùeèì!Ç»Þ`jÌ__W<GûÑùh_°<ý($q'n 0·'`¿“ÒøŒÈØ—à]?šµ-8ÜçKú;Œ²2I“ü€]Š&³§ßk;Ú±^<…`>¦˜ðø€/t[û©Æßü¶®®Î	ç‘ßÜDÆ&œó¾G¾ï´†?gY;gM×ArÉÊ•ž@g§®•Ï\æäv¤åŠh•¾Ë0­%š®ÿSQ::8—<sx%’3OJ²¾ç©p¬ŽÂ²Î¦×dy÷%TÒê½*·EÑ…!'c¦ûýràlwÛ &üÈâBç=½¾a×z°Pdç ZQ 2¡a×sO¶áš]´IoÁö‰sþÅaâ oZ«ÁGõž›èÛEzmŸÁ"\wÃ—�KžÆc}ü¸F©:OþF÷ÐyÈeàGnŽ$j,•_i%íÝœÊ’Uï˜¼:piT]ö€¿Ãê°b‘Æ‰,ò�û§ú3Íá}Ý±Û/Wkf¦CºÐˆ~�`ˆou¤:Ïä8Ú—ÔÑlZç‘åÇ±ˆÎB]àñ�ó>ñ HØscHûíOÌDwgµèd�•½µ�b†6f^‘š8ÓX†JÃI `Z†ÒF;ER„FYû3K§µîOOq,«©`t¨	K�òÚßöÞ[ÿM)	Š*K¢Qçrs#wþkýú1¾WúRû{S_ ¡[2åêAÉUÒ ¢©
-Ê\¼ B
-JÍ=À¼[ ~E%n^A®Ñ§hr„žîŒYXå—�fuP�™hL<ÅÒ¯�å½Òu\íßi’�q#cA[îsô€§ÁÑN1iˆb0ÈùÏ¼¶>xflhFé	?Ç¾¯ðÈ¥è¶ß‡kcbBTˆÃy>•Î<•äØžHt¡k³ùŒ	hðˆÅö+ä)L‹�ÙÔÓpàƒ)ˆe¡KÎëÚ2`Ævš/€Äžò†Æ  |IDAT®:çˆEé¬ýãÛ�ŠÈ]sî•&g¹Xª¢·rZ¤¿·ºn3˜�¾íÏæ¼ö&4i¤  rTƒjA„Ô›äìƒ¢ÆÃ˜ÇôÊÂ©w šôòüµ(ðÁÉ·ïéøyþƒHçÁKEâ‹jÃÃƒoE²ƒƒ”«k�$Â[û™÷²cn—ã€Á˜tæDJ'÷ÜX€r5Ïy–»¦Û^ÏVÛ§[~Î�GÇ–\�¡pPïâÚ ÐSF9/¨SvÈ¹‹B’ôó^ËT<¼øwœeG$EšaÚú/ÈÌ¢ò%/ºå¶C÷òò?"¡Ü}žÈWâÑ4µ€%†Ri¿2“	ò¤˜N8†åå™ØŽúB‡šåâˆÆFˆšèùp¤ÀÂHÆþQ@‚Ù¾¿ñgeÇ	>J˜ðMkêþÄZåh†Ý-°È
-³]Ó® Ó™¡”V½RcÖÎ¶›ÇŽeÉˆ¶t”›Šò%ò3…É¾]É‚)ßEšž\/"¦ùHÑ5ö'£ÛÇ>{9y¬kb|w Ôt¿�0\(ôhf—Ç#+§œÒ™µ|ÛÑV»¿´„û³r&gÌ…>4BŒÔÍ9®FJ-Æ{NZš1Í7âí$Ï«ReÀvÖ-,	þøáÌDÚxÇÊéü‚On_J},½ï?˜€Œ0ƒÉv>¼dŒ>”ôÄSò±//§¬»¯'¾“ªÚµ¹!S0Î³³ÇÛ¥êê€ßWô0Œ4šù„~Ì8Ò;€7CÿYrO¸_)É®ŽÙ>€Ö:´‹2ªPVãþÞúeAï¹k£W*´9‚4OM¤ÞŸ?
-röÄ—dg­#ÉM›å÷HVBwýLpö÷ïâæµŠEE!Å7MƒÕŠ)ì�U¦vàp/PtlÚöõÿŠ’s2Y÷Ù0ÀdÔ€CžxÕŠÅŠ\ªðÁ»Z¾W4ú©ÑÿDã5‡µÈVR˜rR@Âð*Ö„Ì˜x¨)¡b ô³‚k¡ö!UGèG÷[XpõzZ[×Cye‘ZÝŽÂKšf¼øwPœuÈ·¿ÙÕðöá\!'ÿü“?�Ž ÍoC .1ÒÏ+´X�Gñ[¦Qå@à@°yÜ^¶,ÛRž}o<¹¹�Ð&ç+k¦2ßCRÖ|ùÐl_íèX-]ñZ�z~ç¼n61¿¼AÓ�¸7 üòÂqCKuîIçß�–��rÔs¿¢+ðoÛ¨ç@øB½ˆ<wK’ÓrõØÚ<¿ëý¾]ã{½ÊòúhÒÕ#%Ó?ˆ”r2(ìš��Ì¯þR¡lFÜ'6£±™ûˆÖŽä‰Ê¼Þ
-3	®m1BF*ÃX6r<‘U£4…M.+³•¦&^_¾Ü…¾¼Ð¼sçU±3åòâ»òdv¨kQR?³S±„ë�X>£ÏDñýhÅ(0�“rÍ„í›‹£¿å¶ÃÝñµÐhY€¦ˆˆ"ØÃGßh¯ÏåúsûŒ÷ÚB%““�þ5bˆ†æjGxTÌK®ðáÃ gr}’£Ãèòšë(¼ÎËj�;�2*K¶©*S“fÒFÅŠ€”é„oC„ehØÍF{uëå"„ñ®iò}˜>l„ö)4Ê¤’ZEd?›“ØMÐÌôù¹#7tbœFRt»ÏÅ‚mï¼–Ù¸qãÇ¨!Z|kV¬ÿ:ºH«€ÏÞ
-$’èafvZÁS 	¸´ðIûO¿cÝ"8Ó1Þ¡ðÎ“–#*íÃ]í­Po¹œÓs=ß§Iã{=ß�¼k£‰N^Š^.yýàç%$šçí:a?Ò9é`túùùÆ³%Å•þ5†ï·‹jý#Øå«=Ù�Hâ¤,T¯nôÅ¼NŠšD®ö³Äˆ5Õ+ÏþiÀ6pÎÙ1Uúò�íHô¦L{&ªÓƒŠPŽtÚ¦vw›;“I—5ºvJÑÃI?ç�-:sQÅ›*=ÊäÿŸf(ÍÀtF>ÍŠ45ù^ëxÇ9Ü›XŠ®ÄY3v\Mñ°Õy¼$-ÌhúáúŸ=wµ‰Kš“Æ;×õöþ¤ñ½ÞîÈu|=d¨ÂP�øæe
-`Wºljt¡}V­Z…úÊÅ¼ù•>—û;å¨Q\³iÁÉ½G¯¿Ï±ò??ùó§Z¼¸¯
-î«£rôŸîÓ—îM÷5TTÄÆÂ=/ÝsôŠ²Hµé…²ÿß<Ý±ßiÒøŽ‘Éß'G`r&dÆFrÐ?¢ƒü†¤1æ=¬Ã    IEND®B`‚
\ No newline at end of file
diff --git a/core/vendor/guzzlehttp/guzzle/docs/_templates/nav_links.html b/core/vendor/guzzlehttp/guzzle/docs/_templates/nav_links.html
deleted file mode 100644
index 7950a0f..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/_templates/nav_links.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<li><a href="https://github.com/guzzle/guzzle">GitHub</a></li>
-<li><a href="https://groups.google.com/forum/?hl=en#!forum/guzzle">Forum</a></li>
-<li><a href="irc:irc.freenode.com/#guzzlephp">IRC</a></li>
diff --git a/core/vendor/guzzlehttp/guzzle/docs/clients.rst b/core/vendor/guzzlehttp/guzzle/docs/clients.rst
deleted file mode 100644
index 0614a25..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/clients.rst
+++ /dev/null
@@ -1,1315 +0,0 @@
-=======
-Clients
-=======
-
-Clients are used to create requests, create transactions, send requests
-through an HTTP handler, and return a response. You can add default request
-options to a client that are applied to every request (e.g., default headers,
-default query string parameters, etc.), and you can add event listeners and
-subscribers to every request created by a client.
-
-Creating a client
-=================
-
-The constructor of a client accepts an associative array of configuration
-options.
-
-base_url
-    Configures a base URL for the client so that requests created
-    using a relative URL are combined with the ``base_url`` of the client
-    according to section `5.2 of RFC 3986 <http://tools.ietf.org/html/rfc3986#section-5.2>`_.
-
-    .. code-block:: php
-
-        // Create a client with a base URL
-        $client = new GuzzleHttp\Client(['base_url' => 'https://github.com']);
-        // Send a request to https://github.com/notifications
-        $response = $client->get('/notifications');
-
-    `Absolute URLs <http://tools.ietf.org/html/rfc3986#section-4.3>`_ sent
-    through a client will not use the base URL of the client.
-
-handler
-    Configures the `RingPHP handler <http://ringphp.readthedocs.org>`_
-    used to transfer the HTTP requests of a client. Guzzle will, by default,
-    utilize a stacked handlers that chooses the best handler to use based on the
-    provided request options and based on the extensions available in the
-    environment.
-
-message_factory
-    Specifies the factory used to create HTTP requests and responses
-    (``GuzzleHttp\Message\MessageFactoryInterface``).
-
-defaults
-    Associative array of :ref:`request-options` that are applied to every
-    request created by the client. This allows you to specify things like
-    default headers (e.g., User-Agent), default query string parameters, SSL
-    configurations, and any other supported request options.
-
-emitter
-    Specifies an event emitter (``GuzzleHttp\Event\EmitterInterface``) instance
-    to be used by the client to emit request events. This option is useful if
-    you need to inject an emitter with listeners/subscribers already attached.
-
-Here's an example of creating a client with various options.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-
-    $client = new Client([
-        'base_url' => ['https://api.twitter.com/{version}/', ['version' => 'v1.1']],
-        'defaults' => [
-            'headers' => ['Foo' => 'Bar'],
-            'query'   => ['testing' => '123'],
-            'auth'    => ['username', 'password'],
-            'proxy'   => 'tcp://localhost:80'
-        ]
-    ]);
-
-Sending Requests
-================
-
-Requests can be created using various methods of a client. You can create
-**and** send requests using one of the following methods:
-
-- ``GuzzleHttp\Client::get``: Sends a GET request.
-- ``GuzzleHttp\Client::head``: Sends a HEAD request
-- ``GuzzleHttp\Client::post``: Sends a POST request
-- ``GuzzleHttp\Client::put``: Sends a PUT request
-- ``GuzzleHttp\Client::delete``: Sends a DELETE request
-- ``GuzzleHttp\Client::options``: Sends an OPTIONS request
-
-Each of the above methods accepts a URL as the first argument and an optional
-associative array of :ref:`request-options` as the second argument.
-
-Synchronous Requests
---------------------
-
-Guzzle sends synchronous (blocking) requests when the ``future`` request option
-is not specified. This means that the request will complete immediately, and if
-an error is encountered, a ``GuzzleHttp\Exception\RequestException`` will be
-thrown.
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client();
-
-    $client->put('http://httpbin.org', [
-        'headers'         => ['X-Foo' => 'Bar'],
-        'body'            => 'this is the body!',
-        'save_to'         => '/path/to/local/file',
-        'allow_redirects' => false,
-        'timeout'         => 5
-    ]);
-
-Synchronous Error Handling
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-When a recoverable error is encountered while calling the ``send()`` method of
-a client, a ``GuzzleHttp\Exception\RequestException`` is thrown.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Exception\RequestException;
-
-    $client = new Client();
-
-    try {
-        $client->get('http://httpbin.org');
-    } catch (RequestException $e) {
-        echo $e->getRequest() . "\n";
-        if ($e->hasResponse()) {
-            echo $e->getResponse() . "\n";
-        }
-    }
-
-``GuzzleHttp\Exception\RequestException`` always contains a
-``GuzzleHttp\Message\RequestInterface`` object that can be accessed using the
-exception's ``getRequest()`` method.
-
-A response might be present in the exception. In the event of a networking
-error, no response will be received. You can check if a ``RequestException``
-has a response using the ``hasResponse()`` method. If the exception has a
-response, then you can access the associated
-``GuzzleHttp\Message\ResponseInterface`` using the ``getResponse()`` method of
-the exception.
-
-Asynchronous Requests
----------------------
-
-You can send asynchronous requests by setting the ``future`` request option
-to ``true`` (or a string that your handler understands). This creates a
-``GuzzleHttp\Message\FutureResponse`` object that has not yet completed. Once
-you have a future response, you can use a promise object obtained by calling
-the ``then`` method of the response to take an action when the response has
-completed or encounters an error.
-
-.. code-block:: php
-
-    $response = $client->put('http://httpbin.org/get', ['future' => true]);
-
-    // Call the function when the response completes
-    $response->then(function ($response) {
-        echo $response->getStatusCode();
-    });
-
-You can call the ``wait()`` method of a future response to block until it has
-completed. You also use a future response object just like a normal response
-object by accessing the methods of the response. Using a future response like a
-normal response object, also known as *dereferencing*, will block until the
-response has completed.
-
-.. code-block:: php
-
-    $response = $client->put('http://httpbin.org/get', ['future' => true]);
-
-    // Block until the response has completed
-    echo $response->getStatusCode();
-
-.. important::
-
-    If an exception occurred while transferring the future response, then the
-    exception encountered will be thrown when dereferencing.
-
-.. note::
-
-    It depends on the RingPHP handler used by a client, but you typically need
-    to use the same RingPHP handler in order to utilize asynchronous requests
-    across multiple clients.
-
-Asynchronous Error Handling
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Handling errors with future response object promises is a bit different. When
-using a promise, exceptions are forwarded to the ``$onError`` function provided
-to the second argument of the ``then()`` function.
-
-.. code-block:: php
-
-    $response = $client->put('http://httpbin.org/get', ['future' => true]);
-
-    $response
-        ->then(
-            function ($response) {
-                // This is called when the request succeeded
-                echo 'Success: ' . $response->getStatusCode();
-                // Returning a value will forward the value to the next promise
-                // in the chain.
-                return $response;
-            },
-            function ($error) {
-                // This is called when the exception failed.
-                echo 'Exception: ' . $error->getMessage();
-                // Throwing will "forward" the exception to the next promise
-                // in the chain.
-                throw $error;
-            }
-        )
-        ->then(
-            function($response) {
-                // This is called after the first promise in the chain. It
-                // receives the value returned from the first promise.
-                echo $response->getReasonPhrase();
-            },
-            function ($error) {
-                // This is called if the first promise error handler in the
-                // chain rethrows the exception.
-                echo 'Error: ' . $error->getMessage();
-            }
-        );
-
-Please see the `React/Promises project documentation <https://github.com/reactphp/promise>`_
-for more information on how promise resolution and rejection forwarding works.
-
-HTTP Errors
------------
-
-If the ``exceptions`` request option is not set to ``false``, then exceptions
-are thrown for HTTP protocol errors as well:
-``GuzzleHttp\Exception\ClientErrorResponseException`` for 4xx level HTTP
-responses and ``GuzzleHttp\Exception\ServerException`` for 5xx level responses,
-both of which extend from ``GuzzleHttp\Exception\BadResponseException``.
-
-Creating Requests
------------------
-
-You can create a request without sending it. This is useful for building up
-requests over time or sending requests in concurrently.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httpbin.org', [
-        'headers' => ['X-Foo' => 'Bar']
-    ]);
-
-    // Modify the request as needed
-    $request->setHeader('Baz', 'bar');
-
-After creating a request, you can send it with the client's ``send()`` method.
-
-.. code-block:: php
-
-    $response = $client->send($request);
-
-Sending Requests With a Pool
-============================
-
-You can send requests concurrently using a fixed size pool via the
-``GuzzleHttp\Pool`` class. The Pool class is an implementation of
-``GuzzleHttp\Ring\Future\FutureInterface``, meaning it can be dereferenced at a
-later time or cancelled before sending. The Pool constructor accepts a client
-object, iterator or array that yields ``GuzzleHttp\Message\RequestInterface``
-objects, and an optional associative array of options that can be used to
-affect the transfer.
-
-.. code-block:: php
-
-    use GuzzleHttp\Pool;
-
-    $requests = [
-        $client->createRequest('GET', 'http://httpbin.org'),
-        $client->createRequest('DELETE', 'http://httpbin.org/delete'),
-        $client->createRequest('PUT', 'http://httpbin.org/put', ['body' => 'test'])
-    ];
-
-    $options = [];
-
-    // Create a pool. Note: the options array is optional.
-    $pool = new Pool($client, $requests, $options);
-
-    // Send the requests
-    $pool->wait();
-
-The Pool constructor accepts the following associative array of options:
-
-- **pool_size**: Integer representing the maximum number of requests that are
-  allowed to be sent concurrently.
-- **before**: Callable or array representing the event listeners to add to
-  each request's :ref:`before_event` event.
-- **complete**: Callable or array representing the event listeners to add to
-  each request's :ref:`complete_event` event.
-- **error**: Callable or array representing the event listeners to add to
-  each request's :ref:`error_event` event.
-- **end**: Callable or array representing the event listeners to add to
-  each request's :ref:`end_event` event.
-
-The "before", "complete", "error", and "end" event options accept a callable or
-an array of associative arrays where each associative array contains a "fn" key
-with a callable value, an optional "priority" key representing the event
-priority (with a default value of 0), and an optional "once" key that can be
-set to true so that the event listener will be removed from the request after
-it is first triggered.
-
-.. code-block:: php
-
-    use GuzzleHttp\Pool;
-    use GuzzleHttp\Event\CompleteEvent;
-
-    // Add a single event listener using a callable.
-    Pool::send($client, $requests, [
-        'complete' => function (CompleteEvent $event) {
-            echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
-            echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
-        }
-    ]);
-
-    // The above is equivalent to the following, but the following structure
-    // allows you to add multiple event listeners to the same event name.
-    Pool::send($client, $requests, [
-        'complete' => [
-            [
-                'fn'       => function (CompleteEvent $event) { /* ... */ },
-                'priority' => 0,    // Optional
-                'once'     => false // Optional
-            ]
-        ]
-    ]);
-
-Asynchronous Response Handling
-------------------------------
-
-When sending requests concurrently using a pool, the request/response/error
-lifecycle must be handled asynchronously. This means that you give the Pool
-multiple requests and handle the response or errors that is associated with the
-request using event callbacks.
-
-.. code-block:: php
-
-    use GuzzleHttp\Pool;
-    use GuzzleHttp\Event\ErrorEvent;
-
-    Pool::send($client, $requests, [
-        'complete' => function (CompleteEvent $event) {
-            echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
-            echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
-            // Do something with the completion of the request...
-        },
-        'error' => function (ErrorEvent $event) {
-            echo 'Request failed: ' . $event->getRequest()->getUrl() . "\n";
-            echo $event->getException();
-            // Do something to handle the error...
-        }
-    ]);
-
-The ``GuzzleHttp\Event\ErrorEvent`` event object is emitted when an error
-occurs during a transfer. With this event, you have access to the request that
-was sent, the response that was received (if one was received), access to
-transfer statistics, and the ability to intercept the exception with a
-different ``GuzzleHttp\Message\ResponseInterface`` object. See :doc:`events`
-for more information.
-
-Handling Errors After Transferring
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It sometimes might be easier to handle all of the errors that occurred during a
-transfer after all of the requests have been sent. Here we are adding each
-failed request to an array that we can use to process errors later.
-
-.. code-block:: php
-
-    use GuzzleHttp\Pool;
-    use GuzzleHttp\Event\ErrorEvent;
-
-    $errors = [];
-    Pool::send($client, $requests, [
-        'error' => function (ErrorEvent $event) use (&$errors) {
-            $errors[] = $event;
-        }
-    ]);
-
-    foreach ($errors as $error) {
-        // Handle the error...
-    }
-
-.. _batch-requests:
-
-Batching Requests
------------------
-
-Sometimes you just want to send a few requests concurrently and then process
-the results all at once after they've been sent. Guzzle provides a convenience
-function ``GuzzleHttp\Pool::batch()`` that makes this very simple:
-
-.. code-block:: php
-
-    use GuzzleHttp\Pool;
-    use GuzzleHttp\Client;
-
-    $client = new Client();
-
-    $requests = [
-        $client->createRequest('GET', 'http://httpbin.org/get'),
-        $client->createRequest('HEAD', 'http://httpbin.org/get'),
-        $client->createRequest('PUT', 'http://httpbin.org/put'),
-    ];
-
-    // Results is a GuzzleHttp\BatchResults object.
-    $results = Pool::batch($client, $requests);
-
-    // Can be accessed by index.
-    echo $results[0]->getStatusCode();
-
-    // Can be accessed by request.
-    echo $results->getResult($requests[0])->getStatusCode();
-
-    // Retrieve all successful responses
-    foreach ($results->getSuccessful() as $response) {
-        echo $response->getStatusCode() . "\n";
-    }
-
-    // Retrieve all failures.
-    foreach ($results->getFailures() as $requestException) {
-        echo $requestException->getMessage() . "\n";
-    }
-
-``GuzzleHttp\Pool::batch()`` accepts an optional associative array of options
-in the third argument that allows you to specify the 'before', 'complete',
-'error', and 'end' events as well as specify the maximum number of requests to
-send concurrently using the 'pool_size' option key.
-
-.. _request-options:
-
-Request Options
-===============
-
-You can customize requests created by a client using **request options**.
-Request options control various aspects of a request including, headers,
-query string parameters, timeout settings, the body of a request, and much
-more.
-
-All of the following examples use the following client:
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client(['base_url' => 'http://httpbin.org']);
-
-headers
--------
-
-:Summary: Associative array of headers to add to the request. Each key is the
-    name of a header, and each value is a string or array of strings
-    representing the header field values.
-:Types: array
-:Defaults: None
-
-.. code-block:: php
-
-    // Set various headers on a request
-    $client->get('/get', [
-        'headers' => [
-            'User-Agent' => 'testing/1.0',
-            'Accept'     => 'application/json',
-            'X-Foo'      => ['Bar', 'Baz']
-        ]
-    ]);
-
-body
-----
-
-:Summary: The ``body`` option is used to control the body of an entity
-    enclosing request (e.g., PUT, POST, PATCH).
-:Types:
-    - string
-    - ``fopen()`` resource
-    - ``GuzzleHttp\Stream\StreamInterface``
-    - ``GuzzleHttp\Post\PostBodyInterface``
-:Default: None
-
-This setting can be set to any of the following types:
-
-- string
-
-  .. code-block:: php
-
-      // You can send requests that use a string as the message body.
-      $client->put('/put', ['body' => 'foo']);
-
-- resource returned from ``fopen()``
-
-  .. code-block:: php
-
-      // You can send requests that use a stream resource as the body.
-      $resource = fopen('http://httpbin.org', 'r');
-      $client->put('/put', ['body' => $resource]);
-
-- Array
-
-  Use an array to send POST style requests that use a
-  ``GuzzleHttp\Post\PostBodyInterface`` object as the body.
-
-  .. code-block:: php
-
-      // You can send requests that use a POST body containing fields & files.
-      $client->post('/post', [
-          'body' => [
-              'field' => 'abc',
-              'other_field' => '123',
-              'file_name' => fopen('/path/to/file', 'r')
-          ]
-      ]);
-
-- ``GuzzleHttp\Stream\StreamInterface``
-
-  .. code-block:: php
-
-      // You can send requests that use a Guzzle stream object as the body
-      $stream = GuzzleHttp\Stream\Stream::factory('contents...');
-      $client->post('/post', ['body' => $stream]);
-
-json
-----
-
-:Summary: The ``json`` option is used to easily upload JSON encoded data as the
-    body of a request. A Content-Type header of ``application/json`` will be
-    added if no Content-Type header is already present on the message.
-:Types:
-    Any PHP type that can be operated on by PHP's ``json_encode()`` function.
-:Default: None
-
-.. code-block:: php
-
-    $request = $client->createRequest('PUT', '/put', ['json' => ['foo' => 'bar']]);
-    echo $request->getHeader('Content-Type');
-    // application/json
-    echo $request->getBody();
-    // {"foo":"bar"}
-
-.. note::
-
-    This request option does not support customizing the Content-Type header
-    or any of the options from PHP's `json_encode() <http://www.php.net/manual/en/function.json-encode.php>`_
-    function. If you need to customize these settings, then you must pass the
-    JSON encoded data into the request yourself using the ``body`` request
-    option and you must specify the correct Content-Type header using the
-    ``headers`` request option.
-
-query
------
-
-:Summary: Associative array of query string values to add to the request.
-:Types:
-    - array
-    - ``GuzzleHttp\Query``
-:Default: None
-
-.. code-block:: php
-
-    // Send a GET request to /get?foo=bar
-    $client->get('/get', ['query' => ['foo' => 'bar']]);
-
-Query strings specified in the ``query`` option are combined with any query
-string values that are parsed from the URL.
-
-.. code-block:: php
-
-    // Send a GET request to /get?abc=123&foo=bar
-    $client->get('/get?abc=123', ['query' => ['foo' => 'bar']]);
-
-auth
-----
-
-:Summary: Pass an array of HTTP authentication parameters to use with the
-    request. The array must contain the username in index [0], the password in
-    index [1], and you can optionally provide a built-in authentication type in
-    index [2]. Pass ``null`` to disable authentication for a request.
-:Types:
-    - array
-    - string
-    - null
-:Default: None
-
-The built-in authentication types are as follows:
-
-basic
-    Use `basic HTTP authentication <http://www.ietf.org/rfc/rfc2069.txt>`_ in
-    the ``Authorization`` header (the default setting used if none is
-    specified).
-
-    .. code-block:: php
-
-        $client->get('/get', ['auth' => ['username', 'password']]);
-
-digest
-    Use `digest authentication <http://www.ietf.org/rfc/rfc2069.txt>`_ (must be
-    supported by the HTTP handler).
-
-    .. code-block:: php
-
-        $client->get('/get', ['auth' => ['username', 'password', 'digest']]);
-
-    *This is currently only supported when using the cURL handler, but creating
-    a replacement that can be used with any HTTP handler is planned.*
-
-.. important::
-
-    The authentication type (whether it's provided as a string or as the third
-    option in an array) is always converted to a lowercase string. Take this
-    into account when implementing custom authentication types and when
-    implementing custom message factories.
-
-Custom Authentication Schemes
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You can also provide a string representing a custom authentication type name.
-When using a custom authentication type string, you will need to implement
-the authentication method in an event listener that checks the ``auth`` request
-option of a request before it is sent. Authentication listeners that require
-a request is not modified after they are signed should have a very low priority
-to ensure that they are fired last or near last in the event chain.
-
-.. code-block:: php
-
-    use GuzzleHttp\Event\BeforeEvent;
-    use GuzzleHttp\Event\RequestEvents;
-
-    /**
-     * Custom authentication listener that handles the "foo" auth type.
-     *
-     * Listens to the "before" event of a request and only modifies the request
-     * when the "auth" config setting of the request is "foo".
-     */
-    class FooAuth implements GuzzleHttp\Event\SubscriberInterface
-    {
-        private $password;
-
-        public function __construct($password)
-        {
-            $this->password = $password;
-        }
-
-        public function getEvents()
-        {
-            return ['before' => ['sign', RequestEvents::SIGN_REQUEST]];
-        }
-
-        public function sign(BeforeEvent $e)
-        {
-            if ($e->getRequest()->getConfig()['auth'] == 'foo') {
-                $e->getRequest()->setHeader('X-Foo', 'Foo ' . $this->password);
-            }
-        }
-    }
-
-    $client->getEmitter()->attach(new FooAuth('password'));
-    $client->get('/', ['auth' => 'foo']);
-
-Adapter Specific Authentication Schemes
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you need to use authentication methods provided by cURL (e.g., NTLM, GSS,
-etc.), then you need to specify a curl handler option in the ``options``
-request option array. See :ref:`config-option` for more information.
-
-.. _cookies-option:
-
-cookies
--------
-
-:Summary: Specifies whether or not cookies are used in a request or what cookie
-    jar to use or what cookies to send.
-:Types:
-    - bool
-    - array
-    - ``GuzzleHttp\Cookie\CookieJarInterface``
-:Default: None
-
-Set to ``true`` to use a shared cookie session associated with the client.
-
-.. code-block:: php
-
-    // Enable cookies using the shared cookie jar of the client.
-    $client->get('/get', ['cookies' => true]);
-
-Pass an associative array containing cookies to send in the request and start a
-new cookie session.
-
-.. code-block:: php
-
-    // Enable cookies and send specific cookies
-    $client->get('/get', ['cookies' => ['foo' => 'bar']]);
-
-Set to a ``GuzzleHttp\Cookie\CookieJarInterface`` object to use an existing
-cookie jar.
-
-.. code-block:: php
-
-    $jar = new GuzzleHttp\Cookie\CookieJar();
-    $client->get('/get', ['cookies' => $jar]);
-
-.. _allow_redirects-option:
-
-allow_redirects
----------------
-
-:Summary: Describes the redirect behavior of a request
-:Types:
-    - bool
-    - array
-:Default:
-    ::
-
-        [
-            'max'       => 5,
-            'strict'    => false,
-            'referer'   => true,
-            'protocols' => ['http', 'https']
-        ]
-
-Set to ``false`` to disable redirects.
-
-.. code-block:: php
-
-    $res = $client->get('/redirect/3', ['allow_redirects' => false]);
-    echo $res->getStatusCode();
-    // 302
-
-Set to ``true`` (the default setting) to enable normal redirects with a maximum
-number of 5 redirects.
-
-.. code-block:: php
-
-    $res = $client->get('/redirect/3');
-    echo $res->getStatusCode();
-    // 200
-
-Pass an associative array containing the 'max' key to specify the maximum
-number of redirects, provide a 'strict' key value to specify whether or not to
-use strict RFC compliant redirects (meaning redirect POST requests with POST
-requests vs. doing what most browsers do which is redirect POST requests with
-GET requests), provide a 'referer' key to specify whether or not the "Referer"
-header should be added when redirecting, and provide a 'protocols' array that
-specifies which protocols are supported for redirects (defaults to
-``['http', 'https']``).
-
-.. code-block:: php
-
-    $res = $client->get('/redirect/3', [
-        'allow_redirects' => [
-            'max'       => 10,       // allow at most 10 redirects.
-            'strict'    => true,     // use "strict" RFC compliant redirects.
-            'referer'   => true,     // add a Referer header
-            'protocols' => ['https'] // only allow https URLs
-        ]
-    ]);
-    echo $res->getStatusCode();
-    // 200
-
-decode_content
---------------
-
-:Summary: Specify whether or not ``Content-Encoding`` responses (gzip,
-    deflate, etc.) are automatically decoded.
-:Types:
-    - string
-    - bool
-:Default: ``true``
-
-This option can be used to control how content-encoded response bodies are
-handled. By default, ``decode_content`` is set to true, meaning any gzipped
-or deflated response will be decoded by Guzzle.
-
-When set to ``false``, the body of a response is never decoded, meaning the
-bytes pass through the handler unchanged.
-
-.. code-block:: php
-
-    // Request gzipped data, but do not decode it while downloading
-    $client->get('/foo.js', [
-        'headers'        => ['Accept-Encoding' => 'gzip'],
-        'decode_content' => false
-    ]);
-
-When set to a string, the bytes of a response are decoded and the string value
-provided to the ``decode_content`` option is passed as the ``Accept-Encoding``
-header of the request.
-
-.. code-block:: php
-
-    // Pass "gzip" as the Accept-Encoding header.
-    $client->get('/foo.js', ['decode_content' => 'gzip']);
-
-.. _save_to-option:
-
-save_to
--------
-
-:Summary: Specify where the body of a response will be saved.
-:Types:
-    - string
-    - ``fopen()`` resource
-    - ``GuzzleHttp\Stream\StreamInterface``
-:Default: PHP temp stream
-
-Pass a string to specify the path to a file that will store the contents of the
-response body:
-
-.. code-block:: php
-
-    $client->get('/stream/20', ['save_to' => '/path/to/file']);
-
-Pass a resource returned from ``fopen()`` to write the response to a PHP stream:
-
-.. code-block:: php
-
-    $resource = fopen('/path/to/file', 'w');
-    $client->get('/stream/20', ['save_to' => $resource]);
-
-Pass a ``GuzzleHttp\Stream\StreamInterface`` object to stream the response body
-to an open Guzzle stream:
-
-.. code-block:: php
-
-    $resource = fopen('/path/to/file', 'w');
-    $stream = GuzzleHttp\Stream\Stream::factory($resource);
-    $client->get('/stream/20', ['save_to' => $stream]);
-
-.. _events-option:
-
-events
-------
-
-:Summary: An associative array mapping event names to a callable. Or an
-    associative array containing the 'fn' key that maps to a callable, an
-    optional 'priority' key used to specify the event priority, and an optional
-    'once' key used to specify if the event should remove itself the first time
-    it is triggered.
-:Types: array
-:Default: None
-
-.. code-block:: php
-
-    use GuzzleHttp\Event\BeforeEvent;
-    use GuzzleHttp\Event\HeadersEvent;
-    use GuzzleHttp\Event\CompleteEvent;
-    use GuzzleHttp\Event\ErrorEvent;
-
-    $client->get('/', [
-        'events' => [
-            'before' => function (BeforeEvent $e) { echo 'Before'; },
-            'complete' => function (CompleteEvent $e) { echo 'Complete'; },
-            'error' => function (ErrorEvent $e) { echo 'Error'; },
-        ]
-    ]);
-
-Here's an example of using the associative array format for control over the
-priority and whether or not an event should be triggered more than once.
-
-.. code-block:: php
-
-    $client->get('/', [
-        'events' => [
-            'before' => [
-                'fn'       => function (BeforeEvent $e) { echo 'Before'; },
-                'priority' => 100,
-                'once'     => true
-            ]
-        ]
-    ]);
-
-.. _subscribers-option:
-
-subscribers
------------
-
-:Summary: Array of event subscribers to add to the request. Each value in the
-    array must be an instance of ``GuzzleHttp\Event\SubscriberInterface``.
-:Types: array
-:Default: None
-
-.. code-block:: php
-
-    use GuzzleHttp\Subscriber\History;
-    use GuzzleHttp\Subscriber\Mock;
-    use GuzzleHttp\Message\Response;
-
-    $history = new History();
-    $mock = new Mock([new Response(200)]);
-    $client->get('/', ['subscribers' => [$history, $mock]]);
-
-    echo $history;
-    // Outputs the request and response history
-
-.. _exceptions-option:
-
-exceptions
-----------
-
-:Summary: Set to ``false`` to disable throwing exceptions on an HTTP protocol
-    errors (i.e., 4xx and 5xx responses). Exceptions are thrown by default when
-    HTTP protocol errors are encountered.
-:Types: bool
-:Default: ``true``
-
-.. code-block:: php
-
-    $client->get('/status/500');
-    // Throws a GuzzleHttp\Exception\ServerException
-
-    $res = $client->get('/status/500', ['exceptions' => false]);
-    echo $res->getStatusCode();
-    // 500
-
-.. _timeout-option:
-
-timeout
--------
-
-:Summary: Float describing the timeout of the request in seconds. Use ``0``
-    to wait indefinitely (the default behavior).
-:Types: float
-:Default: ``0``
-
-.. code-block:: php
-
-    // Timeout if a server does not return a response in 3.14 seconds.
-    $client->get('/delay/5', ['timeout' => 3.14]);
-    // PHP Fatal error:  Uncaught exception 'GuzzleHttp\Exception\RequestException'
-
-.. _connect_timeout-option:
-
-connect_timeout
----------------
-
-:Summary: Float describing the number of seconds to wait while trying to connect
-    to a server. Use ``0`` to wait indefinitely (the default behavior).
-:Types: float
-:Default: ``0``
-
-.. code-block:: php
-
-    // Timeout if the client fails to connect to the server in 3.14 seconds.
-    $client->get('/delay/5', ['connect_timeout' => 3.14]);
-
-.. note::
-
-    This setting must be supported by the HTTP handler used to send a request.
-    ``connect_timeout`` is currently only supported by the built-in cURL
-    handler.
-
-.. _verify-option:
-
-verify
-------
-
-:Summary: Describes the SSL certificate verification behavior of a request.
-
-    - Set to ``true`` to enable SSL certificate verification and use the default
-      CA bundle provided by operating system.
-    - Set to ``false`` to disable certificate verification (this is insecure!).
-    - Set to a string to provide the path to a CA bundle to enable verification
-      using a custom certificate.
-:Types:
-    - bool
-    - string
-:Default: ``true``
-
-.. code-block:: php
-
-    // Use the system's CA bundle (this is the default setting)
-    $client->get('/', ['verify' => true]);
-
-    // Use a custom SSL certificate on disk.
-    $client->get('/', ['verify' => '/path/to/cert.pem']);
-
-    // Disable validation entirely (don't do this!).
-    $client->get('/', ['verify' => false]);
-
-Not all system's have a known CA bundle on disk. For example, Windows and
-OS X do not have a single common location for CA bundles. When setting
-"verify" to ``true``, Guzzle will do its best to find the most appropriate
-CA bundle on your system. When using cURL or the PHP stream wrapper on PHP
-versions >= 5.6, this happens by default. When using the PHP stream
-wrapper on versions < 5.6, Guzzle tries to find your CA bundle in the
-following order:
-
-1. Check if ``openssl.cafile`` is set in your php.ini file.
-2. Check if ``curl.cainfo`` is set in your php.ini file.
-3. Check if ``/etc/pki/tls/certs/ca-bundle.crt`` exists (Red Hat, CentOS,
-   Fedora; provided by the ca-certificates package)
-4. Check if ``/etc/ssl/certs/ca-certificates.crt`` exists (Ubuntu, Debian;
-   provided by the ca-certificates package)
-5. Check if ``/usr/local/share/certs/ca-root-nss.crt`` exists (FreeBSD;
-   provided by the ca_root_nss package)
-6. Check if ``/usr/local/etc/openssl/cert.pem`` (OS X; provided by homebrew)
-7. Check if ``C:\windows\system32\curl-ca-bundle.crt`` exists (Windows)
-8. Check if ``C:\windows\curl-ca-bundle.crt`` exists (Windows)
-
-The result of this lookup is cached in memory so that subsequent calls
-in the same process will return very quickly. However, when sending only
-a single request per-process in something like Apache, you should consider
-setting the ``openssl.cafile`` environment variable to the path on disk
-to the file so that this entire process is skipped.
-
-If you do not need a specific certificate bundle, then Mozilla provides a
-commonly used CA bundle which can be downloaded
-`here <https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt>`_
-(provided by the maintainer of cURL). Once you have a CA bundle available on
-disk, you can set the "openssl.cafile" PHP ini setting to point to the path to
-the file, allowing you to omit the "verify" request option. Much more detail on
-SSL certificates can be found on the
-`cURL website <http://curl.haxx.se/docs/sslcerts.html>`_.
-
-.. _cert-option:
-
-cert
-----
-
-:Summary: Set to a string to specify the path to a file containing a PEM
-    formatted client side certificate. If a password is required, then set to
-    an array containing the path to the PEM file in the first array element
-    followed by the password required for the certificate in the second array
-    element.
-:Types:
-    - string
-    - array
-:Default: None
-
-.. code-block:: php
-
-    $client->get('/', ['cert' => ['/path/server.pem', 'password']]);
-
-.. _ssl_key-option:
-
-ssl_key
--------
-
-:Summary: Specify the path to a file containing a private SSL key in PEM
-    format. If a password is required, then set to an array containing the path
-    to the SSL key in the first array element followed by the password required
-    for the certificate in the second element.
-:Types:
-    - string
-    - array
-:Default: None
-
-.. note::
-
-    ``ssl_key`` is implemented by HTTP handlers. This is currently only
-    supported by the cURL handler, but might be supported by other third-part
-    handlers.
-
-.. _proxy-option:
-
-proxy
------
-
-:Summary: Pass a string to specify an HTTP proxy, or an array to specify
-    different proxies for different protocols.
-:Types:
-    - string
-    - array
-:Default: None
-
-Pass a string to specify a proxy for all protocols.
-
-.. code-block:: php
-
-    $client->get('/', ['proxy' => 'tcp://localhost:8125']);
-
-Pass an associative array to specify HTTP proxies for specific URI schemes
-(i.e., "http", "https").
-
-.. code-block:: php
-
-    $client->get('/', [
-        'proxy' => [
-            'http'  => 'tcp://localhost:8125', // Use this proxy with "http"
-            'https' => 'tcp://localhost:9124'  // Use this proxy with "https"
-        ]
-    ]);
-
-.. note::
-
-    You can provide proxy URLs that contain a scheme, username, and password.
-    For example, ``"http://username:password@192.168.16.1:10"``.
-
-.. _debug-option:
-
-debug
------
-
-:Summary: Set to ``true`` or set to a PHP stream returned by ``fopen()`` to
-    enable debug output with the handler used to send a request. For example,
-    when using cURL to transfer requests, cURL's verbose of ``CURLOPT_VERBOSE``
-    will be emitted. When using the PHP stream wrapper, stream wrapper
-    notifications will be emitted. If set to true, the output is written to
-    PHP's STDOUT. If a PHP stream is provided, output is written to the stream.
-:Types:
-    - bool
-    - ``fopen()`` resource
-:Default: None
-
-.. code-block:: php
-
-    $client->get('/get', ['debug' => true]);
-
-Running the above example would output something like the following:
-
-::
-
-    * About to connect() to httpbin.org port 80 (#0)
-    *   Trying 107.21.213.98... * Connected to httpbin.org (107.21.213.98) port 80 (#0)
-    > GET /get HTTP/1.1
-    Host: httpbin.org
-    User-Agent: Guzzle/4.0 curl/7.21.4 PHP/5.5.7
-
-    < HTTP/1.1 200 OK
-    < Access-Control-Allow-Origin: *
-    < Content-Type: application/json
-    < Date: Sun, 16 Feb 2014 06:50:09 GMT
-    < Server: gunicorn/0.17.4
-    < Content-Length: 335
-    < Connection: keep-alive
-    <
-    * Connection #0 to host httpbin.org left intact
-
-.. _stream-option:
-
-stream
-------
-
-:Summary: Set to ``true`` to stream a response rather than download it all
-    up-front.
-:Types: bool
-:Default: ``false``
-
-.. code-block:: php
-
-    $response = $client->get('/stream/20', ['stream' => true]);
-    // Read bytes off of the stream until the end of the stream is reached
-    $body = $response->getBody();
-    while (!$body->eof()) {
-        echo $body->read(1024);
-    }
-
-.. note::
-
-    Streaming response support must be implemented by the HTTP handler used by
-    a client. This option might not be supported by every HTTP handler, but the
-    interface of the response object remains the same regardless of whether or
-    not it is supported by the handler.
-
-.. _expect-option:
-
-expect
-------
-
-:Summary: Controls the behavior of the "Expect: 100-Continue" header.
-:Types:
-    - bool
-    - integer
-:Default: ``1048576``
-
-Set to ``true`` to enable the "Expect: 100-Continue" header for all requests
-that sends a body. Set to ``false`` to disable the "Expect: 100-Continue"
-header for all requests. Set to a number so that the size of the payload must
-be greater than the number in order to send the Expect header. Setting to a
-number will send the Expect header for all requests in which the size of the
-payload cannot be determined or where the body is not rewindable.
-
-By default, Guzzle will add the "Expect: 100-Continue" header when the size of
-the body of a request is greater than 1 MB and a request is using HTTP/1.1.
-
-.. note::
-
-    This option only takes effect when using HTTP/1.1. The HTTP/1.0 and
-    HTTP/2.0 protocols do not support the "Expect: 100-Continue" header.
-    Support for handling the "Expect: 100-Continue" workflow must be
-    implemented by Guzzle HTTP handlers used by a client.
-
-.. _version-option:
-
-version
--------
-
-:Summary: Protocol version to use with the request.
-:Types: string, float
-:Default: ``1.1``
-
-.. code-block:: php
-
-    // Force HTTP/1.0
-    $request = $client->createRequest('GET', '/get', ['version' => 1.0]);
-    echo $request->getProtocolVersion();
-    // 1.0
-
-.. _config-option:
-
-config
-------
-
-:Summary: Associative array of config options that are forwarded to a request's
-    configuration collection. These values are used as configuration options
-    that can be consumed by plugins and handlers.
-:Types: array
-:Default: None
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', '/get', ['config' => ['foo' => 'bar']]);
-    echo $request->getConfig('foo');
-    // 'bar'
-
-Some HTTP handlers allow you to specify custom handler-specific settings. For
-example, you can pass custom cURL options to requests by passing an associative
-array in the ``config`` request option under the ``curl`` key.
-
-.. code-block:: php
-
-    // Use custom cURL options with the request. This example uses NTLM auth
-    // to authenticate with a server.
-    $client->get('/', [
-        'config' => [
-            'curl' => [
-                CURLOPT_HTTPAUTH => CURLAUTH_NTLM,
-                CURLOPT_USERPWD  => 'username:password'
-            ]
-        ]
-    ]);
-
-future
-------
-
-:Summary: Specifies whether or not a response SHOULD be an instance of a
-    ``GuzzleHttp\Message\FutureResponse`` object.
-:Types:
-        - bool
-        - string
-:Default: ``false``
-
-By default, Guzzle requests should be synchronous. You can create asynchronous
-future responses by passing the ``future`` request option as ``true``. The
-response will only be executed when it is used like a normal response, the
-``wait()`` method of the response is called, or the corresponding handler that
-created the response is destructing and there are futures that have not been
-resolved.
-
-.. important::
-
-    This option only has an effect if your handler can create and return future
-    responses. However, even if a response is completed synchronously, Guzzle
-    will ensure that a FutureResponse object is returned for API consistency.
-
-.. code-block:: php
-
-    $response = $client->get('/foo', ['future' => true])
-        ->then(function ($response) {
-            echo 'I got a response! ' . $response;
-        });
-
-Event Subscribers
-=================
-
-Requests emit lifecycle events when they are transferred. A client object has a
-``GuzzleHttp\Common\EventEmitter`` object that can be used to add event
-*listeners* and event *subscribers* to all requests created by the client.
-
-.. important::
-
-    **Every** event listener or subscriber added to a client will be added to
-    every request created by the client.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\BeforeEvent;
-
-    $client = new Client();
-
-    // Add a listener that will echo out requests before they are sent
-    $client->getEmitter()->on('before', function (BeforeEvent $e) {
-        echo 'About to send request: ' . $e->getRequest();
-    });
-
-    $client->get('http://httpbin.org/get');
-    // Outputs the request as a string because of the event
-
-See :doc:`events` for more information on the event system used in Guzzle.
-
-Environment Variables
-=====================
-
-Guzzle exposes a few environment variables that can be used to customize the
-behavior of the library.
-
-``GUZZLE_CURL_SELECT_TIMEOUT``
-    Controls the duration in seconds that a curl_multi_* handler will use when
-    selecting on curl handles using ``curl_multi_select()``. Some systems
-    have issues with PHP's implementation of ``curl_multi_select()`` where
-    calling this function always results in waiting for the maximum duration of
-    the timeout.
-``HTTP_PROXY``
-    Defines the proxy to use when sending requests using the "http" protocol.
-``HTTPS_PROXY``
-    Defines the proxy to use when sending requests using the "https" protocol.
-
-Relevant ini Settings
----------------------
-
-Guzzle can utilize PHP ini settings when configuring clients.
-
-``openssl.cafile``
-    Specifies the path on disk to a CA file in PEM format to use when sending
-    requests over "https". See: https://wiki.php.net/rfc/tls-peer-verification#phpini_defaults
diff --git a/core/vendor/guzzlehttp/guzzle/docs/conf.py b/core/vendor/guzzlehttp/guzzle/docs/conf.py
deleted file mode 100644
index 917bdf4..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/conf.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import sys, os
-from sphinx.highlighting import lexers
-from pygments.lexers.web import PhpLexer
-
-
-lexers['php'] = PhpLexer(startinline=True, linenos=1)
-lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
-primary_domain = 'php'
-
-extensions = []
-templates_path = ['_templates']
-source_suffix = '.rst'
-master_doc = 'index'
-project = u'Guzzle'
-copyright = u'2014, Michael Dowling'
-version = '5.0.0'
-html_title = "Guzzle Documentation"
-html_short_title = "Guzzle"
-
-exclude_patterns = ['_build']
-html_static_path = ['_static']
-
-on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
-
-if not on_rtd:  # only import and set the theme if we're building docs locally
-    import sphinx_rtd_theme
-    html_theme = 'sphinx_rtd_theme'
-    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
diff --git a/core/vendor/guzzlehttp/guzzle/docs/events.rst b/core/vendor/guzzlehttp/guzzle/docs/events.rst
deleted file mode 100644
index 647dcd0..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/events.rst
+++ /dev/null
@@ -1,520 +0,0 @@
-============
-Event System
-============
-
-Guzzle uses an event emitter to allow you to easily extend the behavior of a
-request, change the response associated with a request, and implement custom
-error handling. All events in Guzzle are managed and emitted by an
-**event emitter**.
-
-Event Emitters
-==============
-
-Clients, requests, and any other class that implements the
-``GuzzleHttp\Event\HasEmitterInterface`` interface have a
-``GuzzleHttp\Event\Emitter`` object. You can add event *listeners* and
-event *subscribers* to an event *emitter*.
-
-emitter
-    An object that implements ``GuzzleHttp\Event\EmitterInterface``. This
-    object emits named events to event listeners. You may register event
-    listeners on subscribers on an emitter.
-
-event listeners
-    Callable functions that are registered on an event emitter for specific
-    events. Event listeners are registered on an emitter with a *priority*
-    setting. If no priority is provided, ``0`` is used by default.
-
-event subscribers
-    Classes that tell an event emitter what methods to listen to and what
-    functions on the class to invoke when the event is triggered. Event
-    subscribers subscribe event listeners to an event emitter. They should be
-    used when creating more complex event based logic in applications (i.e.,
-    cookie handling is implemented using an event subscriber because it's
-    easier to share a subscriber than an anonymous function and because
-    handling cookies is a complex process).
-
-priority
-    Describes the order in which event listeners are invoked when an event is
-    emitted. The higher a priority value, the earlier the event listener will
-    be invoked (a higher priority means the listener is more important). If
-    no priority is provided, the priority is assumed to be ``0``.
-
-    When specifying an event priority, you can pass ``"first"`` or ``"last"`` to
-    dynamically specify the priority based on the current event priorities
-    associated with the given event name in the emitter. Use ``"first"`` to set
-    the priority to the current highest priority plus one. Use ``"last"`` to
-    set the priority to the current lowest event priority minus one. It is
-    important to remember that these dynamic priorities are calculated only at
-    the point of insertion into the emitter and they are not rearranged after
-    subsequent listeners are added to an emitter.
-
-propagation
-    Describes whether or not other event listeners are triggered. Event
-    emitters will trigger every event listener registered to a specific event
-    in priority order until all of the listeners have been triggered **or**
-    until the propagation of an event is stopped.
-
-Getting an EventEmitter
------------------------
-
-You can get the event emitter of ``GuzzleHttp\Event\HasEmitterInterface``
-object using the the ``getEmitter()`` method. Here's an example of getting a
-client object's event emitter.
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client();
-    $emitter = $client->getEmitter();
-
-.. note::
-
-    You'll notice that the event emitter used in Guzzle is very similar to the
-    `Symfony2 EventDispatcher component <https://github.com/symfony/symfony/tree/master/src/Symfony/Component/EventDispatcher>`_.
-    This is because the Guzzle event system is based on the Symfony2 event
-    system with several changes. Guzzle uses its own event emitter to improve
-    performance, isolate Guzzle from changes to the Symfony, and provide a few
-    improvements that make it easier to use for an HTTP client (e.g., the
-    addition of the ``once()`` method).
-
-Adding Event Listeners
-----------------------
-
-After you have the emitter, you can register event listeners that listen to
-specific events using the ``on()`` method. When registering an event listener,
-you must tell the emitter what event to listen to (e.g., "before", "after",
-"progress", "complete", "error", etc.), what callable to invoke when the
-event is triggered, and optionally provide a priority.
-
-.. code-block:: php
-
-    use GuzzleHttp\Event\BeforeEvent;
-
-    $emitter->on('before', function (BeforeEvent $event) {
-        echo $event->getRequest();
-    });
-
-When a listener is triggered, it is passed an event that implements the
-``GuzzleHttp\Event\EventInterface`` interface, the name of the event, and the
-event emitter itself. The above example could more verbosely be written as
-follows:
-
-.. code-block:: php
-
-    use GuzzleHttp\Event\BeforeEvent;
-
-    $emitter->on('before', function (
-        BeforeEvent $event,
-        $name,
-        EmitterInterface $emitter
-    ) {
-        echo $event->getRequest();
-    });
-
-You can add an event listener that automatically removes itself after it is
-triggered using the ``once()`` method of an event emitter.
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client();
-    $client->getEmitter()->once('before', function () {
-        echo 'This will only happen once... per request!';
-    });
-
-Event Propagation
------------------
-
-Event listeners can prevent other event listeners from being triggered by
-stopping an event's propagation.
-
-Stopping event propagation can be useful, for example, if an event listener has
-changed the state of the subject to such an extent that allowing subsequent
-event listeners to be triggered could place the subject in an inconsistent
-state. This technique is used in Guzzle extensively when intercepting error
-events with responses.
-
-You can stop the propagation of an event using the ``stopPropagation()`` method
-of a ``GuzzleHttp\Event\EventInterface`` object:
-
-.. code-block:: php
-
-    use GuzzleHttp\Event\ErrorEvent;
-
-    $emitter->on('error', function (ErrorEvent $event) {
-        $event->stopPropagation();
-    });
-
-After stopping the propagation of an event, any subsequent event listeners that
-have not yet been triggered will not be triggered. You can check to see if the
-propagation of an event was stopped using the ``isPropagationStopped()`` method
-of the event.
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client();
-    $emitter = $client->getEmitter();
-    // Note: assume that the $errorEvent was created
-    if ($emitter->emit('error', $errorEvent)->isPropagationStopped()) {
-        echo 'It was stopped!';
-    }
-
-.. hint::
-
-    When emitting events, the event that was emitted is returned from the
-    emitter. This allows you to easily chain calls as shown in the above
-    example.
-
-Event Subscribers
------------------
-
-Event subscribers are classes that implement the
-``GuzzleHttp\Event\SubscriberInterface`` object. They are used to register
-one or more event listeners to methods of the class. Event subscribers tell
-event emitters exactly which events to listen to and what method to invoke on
-the class when the event is triggered by called the ``getEvents()`` method of
-a subscriber.
-
-The following example registers event listeners to the ``before`` and
-``complete`` event of a request. When the ``before`` event is emitted, the
-``onBefore`` instance method of the subscriber is invoked. When the
-``complete`` event is emitted, the ``onComplete`` event of the subscriber is
-invoked. Each array value in the ``getEvents()`` return value MUST
-contain the name of the method to invoke and can optionally contain the
-priority of the listener (as shown in the ``before`` listener in the example).
-
-.. code-block:: php
-
-    use GuzzleHttp\Event\EmitterInterface;
-    use GuzzleHttp\Event\SubscriberInterface;
-    use GuzzleHttp\Event\BeforeEvent;
-    use GuzzleHttp\Event\CompleteEvent;
-
-    class SimpleSubscriber implements SubscriberInterface
-    {
-        public function getEvents()
-        {
-            return [
-                // Provide name and optional priority
-                'before'   => ['onBefore', 100],
-                'complete' => ['onComplete'],
-                // You can pass a list of listeners with different priorities
-                'error'    => [['beforeError', 'first'], ['afterError', 'last']]
-            ];
-        }
-
-        public function onBefore(BeforeEvent $event, $name)
-        {
-            echo 'Before!';
-        }
-
-        public function onComplete(CompleteEvent $event, $name)
-        {
-            echo 'Complete!';
-        }
-    }
-
-To register the listeners the subscriber needs to be attached to the emitter:
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client();
-    $emitter = $client->getEmitter();
-    $subscriber = new SimpleSubscriber();
-    $emitter->attach($subscriber);
-
-    //to remove the listeners
-    $emitter->detach($subscriber);
-
-.. note::
-
-    You can specify event priorities using integers or ``"first"`` and
-    ``"last"`` to dynamically determine the priority.
-
-Event Priorities
-================
-
-When adding event listeners or subscribers, you can provide an optional event
-priority. This priority is used to determine how early or late a listener is
-triggered. Specifying the correct priority is an important aspect of ensuring
-a listener behaves as expected. For example, if you wanted to ensure that
-cookies associated with a redirect were added to a cookie jar, you'd need to
-make sure that the listener that collects the cookies is triggered before the
-listener that performs the redirect.
-
-In order to help make the process of determining the correct event priority of
-a listener easier, Guzzle provides several pre-determined named event
-priorities. These priorities are exposed as constants on the
-``GuzzleHttp\Event\RequestEvents`` object.
-
-last
-    Use ``"last"`` as an event priority to set the priority to the current
-    lowest event priority minus one.
-
-first
-    Use ``"first"`` as an event priority to set the priority to the current
-    highest priority plus one.
-
-``GuzzleHttp\Event\RequestEvents::EARLY``
-    Used when you want a listener to be triggered as early as possible in the
-    event chain.
-
-``GuzzleHttp\Event\RequestEvents::LATE``
-    Used when you want a listener to be to be triggered as late as possible in
-    the event chain.
-
-``GuzzleHttp\Event\RequestEvents::PREPARE_REQUEST``
-    Used when you want a listener to be trigger while a request is being
-    prepared during the ``before`` event. This event priority is used by the
-    ``GuzzleHttp\Subscriber\Prepare`` event subscriber which is responsible for
-    guessing a Content-Type, Content-Length, and Expect header of a request.
-    You should subscribe after this event is triggered if you want to ensure
-    that this subscriber has already been triggered.
-
-``GuzzleHttp\Event\RequestEvents::SIGN_REQUEST``
-    Used when you want a listener to be triggered when a request is about to be
-    signed. Any listener triggered at this point should expect that the request
-    object will no longer be mutated. If you are implementing a custom
-    signature subscriber, then you should use this event priority to sign
-    requests.
-
-``GuzzleHttp\Event\RequestEvents::VERIFY_RESPONSE``
-    Used when you want a listener to be triggered when a response is being
-    validated during the ``complete`` event. The
-    ``GuzzleHttp\Subscriber\HttpError`` event subscriber uses this event
-    priority to check if an exception should be thrown due to a 4xx or 5xx
-    level response status code. If you are doing any kind of verification of a
-    response during the complete event, it should happen at this priority.
-
-``GuzzleHttp\Event\RequestEvents::REDIRECT_RESPONSE``
-    Used when you want a listener to be triggered when a response is being
-    redirected during the ``complete`` event. The
-    ``GuzzleHttp\Subscriber\Redirect`` event subscriber uses this event
-    priority when performing redirects.
-
-You can use the above event priorities as a guideline for determining the
-priority of you event listeners. You can use these constants and add to or
-subtract from them to ensure that a listener happens before or after the named
-priority.
-
-.. note::
-
-    "first" and "last" priorities are not adjusted after they added to an
-    emitter. For example, if you add a listener with a priority of "first",
-    you can still add subsequent listeners with a higher priority which would
-    be triggered before the listener added with a priority of "first".
-
-Working With Request Events
-===========================
-
-Requests emit lifecycle events when they are transferred.
-
-.. important::
-
-    Excluding the ``end`` event, request lifecycle events may be triggered
-    multiple times due to redirects, retries, or reusing a request multiple
-    times. Use the ``once()`` method want the event to be triggered once. You
-    can also remove an event listener from an emitter by using the emitter which
-    is provided to the listener.
-
-.. _before_event:
-
-before
-------
-
-The ``before`` event is emitted before a request is sent. The event emitted is
-a ``GuzzleHttp\Event\BeforeEvent``.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\EmitterInterface;
-    use GuzzleHttp\Event\BeforeEvent;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('GET', '/');
-    $request->getEmitter()->on(
-        'before',
-        function (BeforeEvent $e, $name, EmitterInterface $emitter) {
-            echo $name . "\n";
-            // "before"
-            echo $e->getRequest()->getMethod() . "\n";
-            // "GET" / "POST" / "PUT" / etc.
-            echo get_class($e->getClient());
-            // "GuzzleHttp\Client"
-        }
-    );
-
-You can intercept a request with a response before the request is sent over the
-wire. The ``intercept()`` method of the ``BeforeEvent`` accepts a
-``GuzzleHttp\Message\ResponseInterface``. Intercepting the event will prevent
-the request from being sent over the wire and stops the propagation of the
-``before`` event, preventing subsequent event listeners from being invoked.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\BeforeEvent;
-    use GuzzleHttp\Message\Response;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('GET', '/status/500');
-    $request->getEmitter()->on('before', function (BeforeEvent $e) {
-        $response = new Response(200);
-        $e->intercept($response);
-    });
-
-    $response = $client->send($request);
-    echo $response->getStatusCode();
-    // 200
-
-.. attention::
-
-    Any exception encountered while executing the ``before`` event will trigger
-    the ``error`` event of a request.
-
-.. _complete_event:
-
-complete
---------
-
-The ``complete`` event is emitted after a transaction completes and an entire
-response has been received. The event is a ``GuzzleHttp\Event\CompleteEvent``.
-
-You can intercept the ``complete`` event with a different response if needed
-using the ``intercept()`` method of the event. This can be useful, for example,
-for changing the response for caching.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\CompleteEvent;
-    use GuzzleHttp\Message\Response;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('GET', '/status/302');
-    $cachedResponse = new Response(200);
-
-    $request->getEmitter()->on(
-        'complete',
-        function (CompleteEvent $e) use ($cachedResponse) {
-            if ($e->getResponse()->getStatusCode() == 302) {
-                // Intercept the original transaction with the new response
-                $e->intercept($cachedResponse);
-            }
-        }
-    );
-
-    $response = $client->send($request);
-    echo $response->getStatusCode();
-    // 200
-
-.. attention::
-
-    Any ``GuzzleHttp\Exception\RequestException`` encountered while executing
-    the ``complete`` event will trigger the ``error`` event of a request.
-
-.. _error_event:
-
-error
------
-
-The ``error`` event is emitted when a request fails (whether it's from a
-networking error or an HTTP protocol error). The event emitted is a
-``GuzzleHttp\Event\ErrorEvent``.
-
-This event is useful for retrying failed requests. Here's an example of
-retrying failed basic auth requests by re-sending the original request with
-a username and password.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\ErrorEvent;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('GET', '/basic-auth/foo/bar');
-    $request->getEmitter()->on('error', function (ErrorEvent $e) {
-        if ($e->getResponse()->getStatusCode() == 401) {
-            // Add authentication stuff as needed and retry the request
-            $e->getRequest()->setHeader('Authorization', 'Basic ' . base64_encode('foo:bar'));
-            // Get the client of the event and retry the request
-            $newResponse = $e->getClient()->send($e->getRequest());
-            // Intercept the original transaction with the new response
-            $e->intercept($newResponse);
-        }
-    });
-
-.. attention::
-
-    If an ``error`` event is intercepted with a response, then the ``complete``
-    event of a request is triggered. If the ``complete`` event fails, then the
-    ``error`` event is triggered once again.
-
-.. _progress_event:
-
-progress
---------
-
-The ``progress`` event is emitted when data is uploaded or downloaded. The
-event emitted is a ``GuzzleHttp\Event\ProgressEvent``.
-
-You can access the emitted progress values using the corresponding public
-properties of the event object:
-
-- ``$downloadSize``: The number of bytes that will be downloaded (if known)
-- ``$downloaded``: The number of bytes that have been downloaded
-- ``$uploadSize``: The number of bytes that will be uploaded (if known)
-- ``$uploaded``: The number of bytes that have been uploaded
-
-This event cannot be intercepted.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\ProgressEvent;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('PUT', '/put', [
-        'body' => str_repeat('.', 100000)
-    ]);
-
-    $request->getEmitter()->on('progress', function (ProgressEvent $e) {
-        echo 'Downloaded ' . $e->downloaded . ' of ' . $e->downloadSize . ' '
-            . 'Uploaded ' . $e->uploaded . ' of ' . $e->uploadSize . "\r";
-    });
-
-    $client->send($request);
-    echo "\n";
-
-.. _end_event:
-
-end
----
-
-The ``end`` event is a terminal event, emitted once per request, that provides
-access to the response that was received or the exception that was encountered.
-The event emitted is a ``GuzzleHttp\Event\EndEvent``.
-
-This event can be intercepted, but keep in mind that the ``complete`` event
-will not fire after intercepting this event.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\EndEvent;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('PUT', '/put', [
-        'body' => str_repeat('.', 100000)
-    ]);
-
-    $request->getEmitter()->on('end', function (EndEvent $e) {
-        if ($e->getException()) {
-            echo 'Error: ' . $e->getException()->getMessage();
-        } else {
-            echo 'Response: ' . $e->getResponse();
-        }
-    });
-
-    $client->send($request);
-    echo "\n";
diff --git a/core/vendor/guzzlehttp/guzzle/docs/faq.rst b/core/vendor/guzzlehttp/guzzle/docs/faq.rst
deleted file mode 100644
index a8e9ad0..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/faq.rst
+++ /dev/null
@@ -1,199 +0,0 @@
-===
-FAQ
-===
-
-Why should I use Guzzle?
-========================
-
-Guzzle makes it easy to send HTTP requests and super simple to integrate with
-web services. Guzzle manages things like persistent connections, represents
-query strings as collections, makes it simple to send streaming POST requests
-with fields and files, and abstracts away the underlying HTTP transport layer.
-By providing an object oriented interface for HTTP clients, requests, responses,
-headers, and message bodies, Guzzle makes it so that you no longer need to fool
-around with cURL options, stream contexts, or sockets.
-
-**Asynchronous and Synchronous Requests**
-
-Guzzle allows you to send both asynchronous and synchronous requests using the
-same interface and no direct dependency on an event loop. This flexibility
-allows Guzzle to send an HTTP request using the most appropriate HTTP handler
-based on the request being sent. For example, when sending synchronous
-requests, Guzzle will by default send requests using cURL easy handles to
-ensure you're using the fastest possible method for serially transferring HTTP
-requests. When sending asynchronous requests, Guzzle might use cURL's multi
-interface or any other asynchronous handler you configure. When you request
-streaming data, Guzzle will by default use PHP's stream wrapper.
-
-**Streams**
-
-Request and response message bodies use :doc:`Guzzle Streams <streams>`,
-allowing you to stream data without needing to load it all into memory.
-Guzzle's stream layer provides a large suite of functionality:
-
-- You can modify streams at runtime using custom or a number of
-  pre-made decorators.
-- You can emit progress events as data is read from a stream.
-- You can validate the integrity of a stream using a rolling hash as data is
-  read from a stream.
-
-**Event System and Plugins**
-
-Guzzle's  event system allows you to completely modify the behavior of a client
-or request at runtime to cater them for any API. You can send a request with a
-client, and the client can do things like automatically retry your request if
-it fails, automatically redirect, log HTTP messages that are sent over the
-wire, emit progress events as data is uploaded and downloaded, sign requests
-using OAuth 1.0, verify the integrity of messages before and after they are
-sent over the wire, and anything else you might need.
-
-**Testable**
-
-Another important aspect of Guzzle is that it's really
-:doc:`easy to test clients <testing>`. You can mock HTTP responses and when
-testing an handler implementation, Guzzle provides a mock node.js web server.
-
-**Ecosystem**
-
-Guzzle has a large `ecosystem of plugins <http://guzzle.readthedocs.org/en/latest/index.html#http-components>`_,
-including `service descriptions <https://github.com/guzzle/guzzle-services>`_
-which allows you to abstract web services using service descriptions. These
-service descriptions define how to serialize an HTTP request and how to parse
-an HTTP response into a more meaningful model object.
-
-- `Guzzle Command <https://github.com/guzzle/command>`_: Provides the building
-  blocks for service description abstraction.
-- `Guzzle Services <https://github.com/guzzle/guzzle-services>`_: Provides an
-  implementation of "Guzzle Command" that utilizes Guzzle's service description
-  format.
-
-Does Guzzle require cURL?
-=========================
-
-No. Guzzle can use any HTTP handler to send requests. This means that Guzzle
-can be used with cURL, PHP's stream wrapper, sockets, and non-blocking libraries
-like `React <http://reactphp.org/>`_. You just need to configure a
-`RingPHP <http://guzzle-ring.readthedocs.org/en/latest/>`_ handler to use a
-different method of sending requests.
-
-.. note::
-
-    Guzzle has historically only utilized cURL to send HTTP requests. cURL is
-    an amazing HTTP client (arguably the best), and Guzzle will continue to use
-    it by default when it is available. It is rare, but some developers don't
-    have cURL installed on their systems or run into version specific issues.
-    By allowing swappable HTTP handlers, Guzzle is now much more customizable
-    and able to adapt to fit the needs of more developers.
-
-Can Guzzle send asynchronous requests?
-======================================
-
-Yes. Pass the ``future`` true request option to a request to send it
-asynchronously. Guzzle will then return a ``GuzzleHttp\Message\FutureResponse``
-object that can be used synchronously by accessing the response object like a
-normal response, and it can be used asynchronously using a promise that is
-notified when the response is resolved with a real response or rejected with an
-exception.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', ['future' => true]);
-    $client->send($request)->then(function ($response) {
-        echo 'Got a response! ' . $response;
-    });
-
-You can force an asynchronous response to complete using the ``wait()`` method
-of a response.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', ['future' => true]);
-    $futureResponse = $client->send($request);
-    $futureResponse->wait();
-
-How can I add custom cURL options?
-==================================
-
-cURL offer a huge number of `customizable options <http://us1.php.net/curl_setopt>`_.
-While Guzzle normalizes many of these options across different handlers, there
-are times when you need to set custom cURL options. This can be accomplished
-by passing an associative array of cURL settings in the **curl** key of the
-**config** request option.
-
-For example, let's say you need to customize the outgoing network interface
-used with a client.
-
-.. code-block:: php
-
-    $client->get('/', [
-        'config' => [
-            'curl' => [
-                CURLOPT_INTERFACE => 'xxx.xxx.xxx.xxx'
-            ]
-        ]
-    ]);
-
-How can I add custom stream context options?
-============================================
-
-You can pass custom `stream context options <http://www.php.net/manual/en/context.php>`_
-using the **stream_context** key of the **config** request option. The
-**stream_context** array is an associative array where each key is a PHP
-transport, and each value is an associative array of transport options.
-
-For example, let's say you need to customize the outgoing network interface
-used with a client and allow self-signed certificates.
-
-.. code-block:: php
-
-    $client->get('/', [
-        'stream' => true,
-        'config' => [
-            'stream_context' => [
-                'ssl' => [
-                    'allow_self_signed' => true
-                ],
-                'socket' => [
-                    'bindto' => 'xxx.xxx.xxx.xxx'
-                ]
-            ]
-        ]
-    ]);
-
-Why am I getting an SSL verification error?
-===========================================
-
-You need to specify the path on disk to the CA bundle used by Guzzle for
-verifying the peer certificate. See :ref:`verify-option`.
-
-What is this Maximum function nesting error?
-============================================
-
-    Maximum function nesting level of '100' reached, aborting
-
-You could run into this error if you have the XDebug extension installed and
-you execute a lot of requests in callbacks.  This error message comes
-specifically from the XDebug extension. PHP itself does not have a function
-nesting limit. Change this setting in your php.ini to increase the limit::
-
-    xdebug.max_nesting_level = 1000
-
-Why am I getting a 417 error response?
-======================================
-
-This can occur for a number of reasons, but if you are sending PUT, POST, or
-PATCH requests with an ``Expect: 100-Continue`` header, a server that does not
-support this header will return a 417 response. You can work around this by
-setting the ``expect`` request option to ``false``:
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client();
-
-    // Disable the expect header on a single request
-    $response = $client->put('/', [], 'the body', [
-        'expect' => false
-    ]);
-
-    // Disable the expect header on all client requests
-    $client->setDefaultOption('expect', false)
diff --git a/core/vendor/guzzlehttp/guzzle/docs/handlers.rst b/core/vendor/guzzlehttp/guzzle/docs/handlers.rst
deleted file mode 100644
index d452003..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/handlers.rst
+++ /dev/null
@@ -1,43 +0,0 @@
-================
-RingPHP Handlers
-================
-
-Guzzle uses RingPHP handlers to send HTTP requests over the wire.
-RingPHP provides a low-level library that can be used to "glue" Guzzle with
-any transport method you choose. By default, Guzzle utilizes cURL and PHP's
-stream wrappers to send HTTP requests.
-
-RingPHP handlers makes it extremely simple to integrate Guzzle with any
-HTTP transport. For example, you could quite easily bridge Guzzle and React
-to use Guzzle in React's event loop.
-
-Using a handler
----------------
-
-You can change the handler used by a client using the ``handler`` option in the
-``GuzzleHttp\Client`` constructor.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Ring\Client\MockHandler;
-
-    // Create a mock handler that always returns a 200 response.
-    $handler = new MockHandler(['status' => 200]);
-
-    // Configure to client to use the mock handler.
-    $client = new Client(['handler' => $handler]);
-
-At its core, handlers are simply PHP callables that accept a request array
-and return a ``GuzzleHttp\Ring\Future\FutureArrayInterface``. This future array
-can be used just like a normal PHP array, causing it to block, or you can use
-the promise interface using the ``then()`` method of the future. Guzzle hooks
-up to the RingPHP project using a very simple bridge class
-(``GuzzleHttp\RingBridge``).
-
-Creating a handler
-------------------
-
-See the `RingPHP <http://ringphp.readthedocs.org>`_ project
-documentation for more information on creating custom handlers that can be
-used with Guzzle clients.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst b/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
deleted file mode 100644
index 0c6527a..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
+++ /dev/null
@@ -1,483 +0,0 @@
-=============================
-Request and Response Messages
-=============================
-
-Guzzle is an HTTP client that sends HTTP requests to a server and receives HTTP
-responses. Both requests and responses are referred to as messages.
-
-Headers
-=======
-
-Both request and response messages contain HTTP headers.
-
-Complex Headers
----------------
-
-Some headers contain additional key value pair information. For example, Link
-headers contain a link and several key value pairs:
-
-::
-
-    <http://foo.com>; rel="thing"; type="image/jpeg"
-
-Guzzle provides a convenience feature that can be used to parse these types of
-headers:
-
-.. code-block:: php
-
-    use GuzzleHttp\Message\Request;
-
-    $request = new Request('GET', '/', [
-        'Link' => '<http:/.../front.jpeg>; rel="front"; type="image/jpeg"'
-    ]);
-
-    $parsed = Request::parseHeader($request, 'Link');
-    var_export($parsed);
-
-Will output:
-
-.. code-block:: php
-
-    array (
-      0 =>
-      array (
-        0 => '<http:/.../front.jpeg>',
-        'rel' => 'front',
-        'type' => 'image/jpeg',
-      ),
-    )
-
-The result contains a hash of key value pairs. Header values that have no key
-(i.e., the link) are indexed numerically while headers parts that form a key
-value pair are added as a key value pair.
-
-See :ref:`headers` for information on how the headers of a request and response
-can be accessed and modified.
-
-Body
-====
-
-Both request and response messages can contain a body.
-
-You can check to see if a request or response has a body using the
-``getBody()`` method:
-
-.. code-block:: php
-
-    $response = GuzzleHttp\get('http://httpbin.org/get');
-    if ($response->getBody()) {
-        echo $response->getBody();
-        // JSON string: { ... }
-    }
-
-The body used in request and response objects is a
-``GuzzleHttp\Stream\StreamInterface``. This stream is used for both uploading
-data and downloading data. Guzzle will, by default, store the body of a message
-in a stream that uses PHP temp streams. When the size of the body exceeds
-2 MB, the stream will automatically switch to storing data on disk rather than
-in memory (protecting your application from memory exhaustion).
-
-You can change the body used in a request or response using the ``setBody()``
-method:
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-    $request = $client->createRequest('PUT', 'http://httpbin.org/put');
-    $request->setBody(Stream::factory('foo'));
-
-The easiest way to create a body for a request is using the static
-``GuzzleHttp\Stream\Stream::factory()`` method. This method accepts various
-inputs like strings, resources returned from ``fopen()``, and other
-``GuzzleHttp\Stream\StreamInterface`` objects.
-
-The body of a request or response can be cast to a string or you can read and
-write bytes off of the stream as needed.
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-    $request = $client->createRequest('PUT', 'http://httpbin.org/put', ['body' => 'testing...']);
-
-    echo $request->getBody()->read(4);
-    // test
-    echo $request->getBody()->read(4);
-    // ing.
-    echo $request->getBody()->read(1024);
-    // ..
-    var_export($request->eof());
-    // true
-
-You can find out more about Guzzle stream objects in :doc:`streams`.
-
-Requests
-========
-
-Requests are sent from a client to a server. Requests include the method to
-be applied to a resource, the identifier of the resource, and the protocol
-version to use.
-
-Clients are used to create request messages. More precisely, clients use
-a ``GuzzleHttp\Message\MessageFactoryInterface`` to create request messages.
-You create requests with a client using the ``createRequest()`` method.
-
-.. code-block:: php
-
-    // Create a request but don't send it immediately
-    $request = $client->createRequest('GET', 'http://httpbin.org/get');
-
-Request Methods
----------------
-
-When creating a request, you are expected to provide the HTTP method you wish
-to perform. You can specify any method you'd like, including a custom method
-that might not be part of RFC 7231 (like "MOVE").
-
-.. code-block:: php
-
-    // Create a request using a completely custom HTTP method
-    $request = $client->createRequest('MOVE', 'http://httpbin.org/move', ['exceptions' => false]);
-
-    echo $request->getMethod();
-    // MOVE
-
-    $response = $client->send($request);
-    echo $response->getStatusCode();
-    // 405
-
-You can create and send a request using methods on a client that map to the
-HTTP method you wish to use.
-
-:GET: ``$client->get('http://httpbin.org/get', [/** options **/])``
-:POST: ``$client->post('http://httpbin.org/post', [/** options **/])``
-:HEAD: ``$client->head('http://httpbin.org/get', [/** options **/])``
-:PUT: ``$client->put('http://httpbin.org/put', [/** options **/])``
-:DELETE: ``$client->delete('http://httpbin.org/delete', [/** options **/])``
-:OPTIONS: ``$client->options('http://httpbin.org/get', [/** options **/])``
-:PATCH: ``$client->patch('http://httpbin.org/put', [/** options **/])``
-
-.. code-block:: php
-
-    $response = $client->patch('http://httpbin.org/patch', ['body' => 'content']);
-
-Request URI
------------
-
-The resource you are requesting with an HTTP request is identified by the
-path of the request, the query string, and the "Host" header of the request.
-
-When creating a request, you can provide the entire resource URI as a URL.
-
-.. code-block:: php
-
-    $response = $client->get('http://httbin.org/get?q=foo');
-
-Using the above code, you will send a request that uses ``httpbin.org`` as
-the Host header, sends the request over port 80, uses ``/get`` as the path,
-and sends ``?q=foo`` as the query string. All of this is parsed automatically
-from the provided URI.
-
-Sometimes you don't know what the entire request will be when it is created.
-In these cases, you can modify the request as needed before sending it using
-the ``createRequest()`` method of the client and methods on the request that
-allow you to change it.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httbin.org');
-
-You can change the path of the request using ``setPath()``:
-
-.. code-block:: php
-
-    $request->setPath('/get');
-    echo $request->getPath();
-    // /get
-    echo $request->getUrl();
-    // http://httpbin.com/get
-
-Scheme
-~~~~~~
-
-The `scheme <http://tools.ietf.org/html/rfc3986#section-3.1>`_ of a request
-specifies the protocol to use when sending the request. When using Guzzle, the
-scheme can be set to "http" or "https".
-
-You can change the scheme of the request using the ``setScheme()`` method:
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httbin.org');
-    $request->setScheme('https');
-    echo $request->getScheme();
-    // https
-    echo $request->getUrl();
-    // https://httpbin.com/get
-
-Port
-~~~~
-
-No port is necessary when using the "http" or "https" schemes, but you can
-override the port using ``setPort()``. If you need to modify the port used with
-the specified scheme from the default setting, then you must use the
-``setPort()`` method.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httbin.org');
-    $request->setPort(8080);
-    echo $request->getPort();
-    // 8080
-    echo $request->getUrl();
-    // https://httpbin.com:8080/get
-
-    // Set the port back to the default value for the scheme
-    $request->setPort(443);
-    echo $request->getUrl();
-    // https://httpbin.com/get
-
-Query string
-~~~~~~~~~~~~
-
-You can get the query string of the request using the ``getQuery()`` method.
-This method returns a ``GuzzleHttp\Query`` object. A Query object can be
-accessed like a PHP array, iterated in a foreach statement like a PHP array,
-and cast to a string.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httbin.org');
-    $query = $request->getQuery();
-    $query['foo'] = 'bar';
-    $query['baz'] = 'bam';
-    $query['bam'] = ['test' => 'abc'];
-
-    echo $request->getQuery();
-    // foo=bar&baz=bam&bam%5Btest%5D=abc
-
-    echo $request->getQuery()['foo'];
-    // bar
-    echo $request->getQuery()->get('foo');
-    // bar
-    echo $request->getQuery()->get('foo');
-    // bar
-
-    var_export($request->getQuery()['bam']);
-    // array('test' => 'abc')
-
-    foreach ($query as $key => $value) {
-        var_export($value);
-    }
-
-    echo $request->getUrl();
-    // https://httpbin.com/get?foo=bar&baz=bam&bam%5Btest%5D=abc
-
-Query Aggregators
-^^^^^^^^^^^^^^^^^
-
-Query objects can store scalar values or arrays of values. When an array of
-values is added to a query object, the query object uses a query aggregator to
-convert the complex structure into a string. Query objects will use
-`PHP style query strings <http://www.php.net/http_build_query>`_ when complex
-query string parameters are converted to a string. You can customize how
-complex query string parameters are aggregated using the ``setAggregator()``
-method of a query string object.
-
-.. code-block:: php
-
-    $query->setAggregator($query::duplicateAggregator());
-
-In the above example, we've changed the query object to use the
-"duplicateAggregator". This aggregator will allow duplicate entries to appear
-in a query string rather than appending "[n]" to each value. So if you had a
-query string with ``['a' => ['b', 'c']]``, the duplicate aggregator would
-convert this to "a=b&a=c" while the default aggregator would convert this to
-"a[0]=b&a[1]=c" (with urlencoded brackets).
-
-The ``setAggregator()`` method accepts a ``callable`` which is used to convert
-a deeply nested array of query string variables into a flattened array of key
-value pairs. The callable accepts an array of query data and returns a
-flattened array of key value pairs where each value is an array of strings.
-You can use the ``GuzzleHttp\Query::walkQuery()`` static function to easily
-create custom query aggregators.
-
-Host
-~~~~
-
-You can change the host header of the request in a predictable way using the
-``setHost()`` method of a request:
-
-.. code-block:: php
-
-    $request->setHost('www.google.com');
-    echo $request->getHost();
-    // www.google.com
-    echo $request->getUrl();
-    // https://www.google.com/get?foo=bar&baz=bam
-
-.. note::
-
-    The Host header can also be changed by modifying the Host header of a
-    request directly, but modifying the Host header directly could result in
-    sending a request to a different Host than what is specified in the Host
-    header (sometimes this is actually the desired behavior).
-
-Resource
-~~~~~~~~
-
-You can use the ``getResource()`` method of a request to return the path and
-query string of a request in a single string.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httpbin.org/get?baz=bar');
-    echo $request->getResource();
-    // /get?baz=bar
-
-Request Config
---------------
-
-Request messages contain a configuration collection that can be used by
-event listeners and HTTP handlers to modify how a request behaves or is
-transferred over the wire. For example, many of the request options that are
-specified when creating a request are actually set as config options that are
-only acted upon by handlers and listeners when the request is sent.
-
-You can get access to the request's config object using the ``getConfig()``
-method of a request.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', '/');
-    $config = $request->getConfig();
-
-The config object is a ``GuzzleHttp\Collection`` object that acts like
-an associative array. You can grab values from the collection using array like
-access. You can also modify and remove values using array like access.
-
-.. code-block:: php
-
-    $config['foo'] = 'bar';
-    echo $config['foo'];
-    // bar
-
-    var_export(isset($config['foo']));
-    // true
-
-    unset($config['foo']);
-    var_export(isset($config['foo']));
-    // false
-
-    var_export($config['foo']);
-    // NULL
-
-HTTP handlers and event listeners can expose additional customization options
-through request config settings. For example, in order to specify custom cURL
-options to the cURL handler, you need to specify an associative array in the
-``curl`` ``config`` request option.
-
-.. code-block:: php
-
-    $client->get('/', [
-        'config' => [
-            'curl' => [
-                CURLOPT_HTTPAUTH => CURLAUTH_NTLM,
-                CURLOPT_USERPWD  => 'username:password'
-            ]
-        ]
-    ]);
-
-Consult the HTTP handlers and event listeners you are using to see if they
-allow customization through request configuration options.
-
-Event Emitter
--------------
-
-Request objects implement ``GuzzleHttp\Event\HasEmitterInterface``, so they
-have a method called ``getEmitter()`` that can be used to get an event emitter
-used by the request. Any listener or subscriber attached to a request will only
-be triggered for the lifecycle events of a specific request. Conversely, adding
-an event listener or subscriber to a client will listen to all lifecycle events
-of all requests created by the client.
-
-See :doc:`events` for more information.
-
-Responses
-=========
-
-Responses are the HTTP messages a client receives from a server after sending
-an HTTP request message.
-
-Start-Line
-----------
-
-The start-line of a response contains the protocol and protocol version,
-status code, and reason phrase.
-
-.. code-block:: php
-
-    $response = GuzzleHttp\get('http://httpbin.org/get');
-    echo $response->getStatusCode();
-    // 200
-    echo $response->getReasonPhrase();
-    // OK
-    echo $response->getProtocolVersion();
-    // 1.1
-
-Body
-----
-
-As described earlier, you can get the body of a response using the
-``getBody()`` method.
-
-.. code-block:: php
-
-    if ($body = $response->getBody()) {
-        echo $body;
-        // Cast to a string: { ... }
-        $body->seek(0);
-        // Rewind the body
-        $body->read(1024);
-        // Read bytes of the body
-    }
-
-When working with JSON responses, you can use the ``json()`` method of a
-response:
-
-.. code-block:: php
-
-    $json = $response->json();
-
-.. note::
-
-    Guzzle uses the ``json_decode()`` method of PHP and uses arrays rather than
-    ``stdClass`` objects for objects.
-
-You can use the ``xml()`` method when working with XML data.
-
-.. code-block:: php
-
-    $xml = $response->xml();
-
-.. note::
-
-    Guzzle uses the ``SimpleXMLElement`` objects when converting response
-    bodies to XML.
-
-Effective URL
--------------
-
-The URL that was ultimately accessed that returned a response can be accessed
-using the ``getEffectiveUrl()`` method of a response. This method will return
-the URL of a request or the URL of the last redirected URL if any redirects
-occurred while transferring a request.
-
-.. code-block:: php
-
-    $response = GuzzleHttp\get('http://httpbin.org/get');
-    echo $response->getEffectiveUrl();
-    // http://httpbin.org/get
-
-    $response = GuzzleHttp\get('http://httpbin.org/redirect-to?url=http://www.google.com');
-    echo $response->getEffectiveUrl();
-    // http://www.google.com
diff --git a/core/vendor/guzzlehttp/guzzle/docs/index.rst b/core/vendor/guzzlehttp/guzzle/docs/index.rst
deleted file mode 100644
index d456a5f..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/index.rst
+++ /dev/null
@@ -1,98 +0,0 @@
-.. title:: Guzzle | PHP HTTP client and framework for consuming RESTful web services
-
-======
-Guzzle
-======
-
-Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
-trivial to integrate with web services.
-
-- Manages things like persistent connections, represents query strings as
-  collections, simplifies sending streaming POST requests with fields and
-  files, and abstracts away the underlying HTTP transport layer.
-- Can send both synchronous and asynchronous requests using the same interface
-  without requiring a dependency on a specific event loop.
-- Pluggable HTTP handlers allows Guzzle to integrate with any method you choose
-  for sending HTTP requests over the wire (e.g., cURL, sockets, PHP's stream
-  wrapper, non-blocking event loops like `React <http://reactphp.org/>`_, etc.).
-- Guzzle makes it so that you no longer need to fool around with cURL options,
-  stream contexts, or sockets.
-
-.. code-block:: php
-
-    $client = new GuzzleHttp\Client();
-    $response = $client->get('http://guzzlephp.org');
-    $res = $client->get('https://api.github.com/user', ['auth' =>  ['user', 'pass']]);
-    echo $res->getStatusCode();
-    // "200"
-    echo $res->getHeader('content-type');
-    // 'application/json; charset=utf8'
-    echo $res->getBody();
-    // {"type":"User"...'
-    var_export($res->json());
-    // Outputs the JSON decoded data
-
-    // Send an asynchronous request.
-    $req = $client->createRequest('GET', 'http://httpbin.org', ['future' => true]);
-    $client->send($req)->then(function ($response) {
-        echo 'I completed! ' . $response;
-    });
-
-User guide
-----------
-
-.. toctree::
-    :maxdepth: 2
-
-    overview
-    quickstart
-    clients
-    http-messages
-    events
-    streams
-    handlers
-    testing
-    faq
-
-HTTP Components
----------------
-
-There are a number of optional libraries you can use along with Guzzle's HTTP
-layer to add capabilities to the client.
-
-`Log Subscriber <https://github.com/guzzle/log-subscriber>`_
-    Logs HTTP requests and responses sent over the wire using customizable
-    log message templates.
-
-`OAuth Subscriber <https://github.com/guzzle/oauth-subscriber>`_
-    Signs requests using OAuth 1.0.
-
-`Cache Subscriber <https://github.com/guzzle/cache-subscriber>`_
-    Implements a private transparent proxy cache that caches HTTP responses.
-
-`Retry Subscriber <https://github.com/guzzle/retry-subscriber>`_
-    Retries failed requests using customizable retry strategies (e.g., retry
-    based on response status code, cURL error codes, etc.)
-
-`Message Integrity Subscriber <https://github.com/guzzle/message-integrity-subscriber>`_
-    Verifies the message integrity of HTTP responses using customizable
-    validators. This plugin can be used, for example, to verify the Content-MD5
-    headers of responses.
-
-Service Description Commands
-----------------------------
-
-You can use the **Guzzle Command** library to encapsulate interaction with a
-web service using command objects. Building on top of Guzzle's command
-abstraction allows you to easily implement things like service description that
-can be used to serialize requests and parse responses using a meta-description
-of a web service.
-
-`Guzzle Command <https://github.com/guzzle/command>`_
-    Provides the foundational elements used to build high-level, command based,
-    web service clients with Guzzle.
-
-`Guzzle Services <https://github.com/guzzle/guzzle-services>`_
-    Provides an implementation of the *Guzzle Command* library that uses
-    Guzzle service descriptions to describe web services, serialize requests,
-    and parse responses into easy to use model structures.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/overview.rst b/core/vendor/guzzlehttp/guzzle/docs/overview.rst
deleted file mode 100644
index 1355afa..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/overview.rst
+++ /dev/null
@@ -1,150 +0,0 @@
-========
-Overview
-========
-
-Requirements
-============
-
-#. PHP 5.4.0
-#. To use the PHP stream handler, ``allow_url_fopen`` must be enabled in your
-   system's php.ini.
-#. To use the cURL handler, you must have a recent version of cURL >= 7.16.2
-   compiled with OpenSSL and zlib.
-
-.. note::
-
-    Guzzle no longer requires cURL in order to send HTTP requests. Guzzle will
-    use the PHP stream wrapper to send HTTP requests if cURL is not installed.
-    Alternatively, you can provide your own HTTP handler used to send requests.
-
-.. _installation:
-
-Installation
-============
-
-The recommended way to install Guzzle is with `Composer <http://getcomposer.org>`_. Composer is a dependency
-management tool for PHP that allows you to declare the dependencies your project needs and installs them into your
-project.
-
-.. code-block:: bash
-
-    # Install Composer
-    curl -sS https://getcomposer.org/installer | php
-
-You can add Guzzle as a dependency using the composer.phar CLI:
-
-.. code-block:: bash
-
-    php composer.phar require guzzlehttp/guzzle:~5.0
-
-Alternatively, you can specify Guzzle as a dependency in your project's
-existing composer.json file:
-
-.. code-block:: js
-
-    {
-      "require": {
-         "guzzlehttp/guzzle": "~5.0"
-      }
-   }
-
-After installing, you need to require Composer's autoloader:
-
-.. code-block:: php
-
-    require 'vendor/autoload.php';
-
-You can find out more on how to install Composer, configure autoloading, and
-other best-practices for defining dependencies at `getcomposer.org <http://getcomposer.org>`_.
-
-Bleeding edge
--------------
-
-During your development, you can keep up with the latest changes on the master
-branch by setting the version requirement for Guzzle to ``~5.0@dev``.
-
-.. code-block:: js
-
-   {
-      "require": {
-         "guzzlehttp/guzzle": "~5.0@dev"
-      }
-   }
-
-License
-=======
-
-Licensed using the `MIT license <http://opensource.org/licenses/MIT>`_.
-
-    Copyright (c) 2014 Michael Dowling <https://github.com/mtdowling>
-
-    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.
-
-Contributing
-============
-
-Guidelines
-----------
-
-1. Guzzle follows PSR-0, PSR-1, and PSR-2.
-2. Guzzle is meant to be lean and fast with very few dependencies.
-3. Guzzle has a minimum PHP version requirement of PHP 5.4. Pull requests must
-   not require a PHP version greater than PHP 5.4.
-4. All pull requests must include unit tests to ensure the change works as
-   expected and to prevent regressions.
-
-Running the tests
------------------
-
-In order to contribute, you'll need to checkout the source from GitHub and
-install Guzzle's dependencies using Composer:
-
-.. code-block:: bash
-
-    git clone https://github.com/guzzle/guzzle.git
-    cd guzzle && curl -s http://getcomposer.org/installer | php && ./composer.phar install --dev
-
-Guzzle is unit tested with PHPUnit. Run the tests using the vendored PHPUnit
-binary:
-
-.. code-block:: bash
-
-    vendor/bin/phpunit
-
-.. note::
-
-    You'll need to install node.js v0.5.0 or newer in order to perform
-    integration tests on Guzzle's HTTP handlers.
-
-Reporting a security vulnerability
-==================================
-
-We want to ensure that Guzzle is a secure HTTP client library for everyone. If
-you've discovered a security vulnerability in Guzzle, we appreciate your help
-in disclosing it to us in a `responsible manner <http://en.wikipedia.org/wiki/Responsible_disclosure>`_.
-
-Publicly disclosing a vulnerability can put the entire community at risk. If
-you've discovered a security concern, please email us at
-security@guzzlephp.org. We'll work with you to make sure that we understand the
-scope of the issue, and that we fully address your concern. We consider
-correspondence sent to security@guzzlephp.org our highest priority, and work to
-address any issues that arise as quickly as possible.
-
-After a security vulnerability has been corrected, a security hotfix release will
-be deployed as soon as possible.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst b/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
deleted file mode 100644
index 65a70ed..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
+++ /dev/null
@@ -1,448 +0,0 @@
-==========
-Quickstart
-==========
-
-This page provides a quick introduction to Guzzle and introductory examples.
-If you have not already installed, Guzzle, head over to the :ref:`installation`
-page.
-
-Make a Request
-==============
-
-You can send requests with Guzzle using a ``GuzzleHttp\ClientInterface``
-object.
-
-Creating a Client
------------------
-
-The procedural API is simple but not very testable; it's best left for quick
-prototyping. If you want to use Guzzle in a more flexible and testable way,
-then you'll need to use a ``GuzzleHttp\ClientInterface`` object.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-
-    $client = new Client();
-    $response = $client->get('http://httpbin.org/get');
-
-    // You can use the same methods you saw in the procedural API
-    $response = $client->delete('http://httpbin.org/delete');
-    $response = $client->head('http://httpbin.org/get');
-    $response = $client->options('http://httpbin.org/get');
-    $response = $client->patch('http://httpbin.org/patch');
-    $response = $client->post('http://httpbin.org/post');
-    $response = $client->put('http://httpbin.org/put');
-
-You can create a request with a client and then send the request with the
-client when you're ready.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://www.foo.com');
-    $response = $client->send($request);
-
-Client objects provide a great deal of flexibility in how request are
-transferred including default request options, subscribers that are attached
-to each request, and a base URL that allows you to send requests with relative
-URLs. You can find out all about clients in the :doc:`clients` page of the
-documentation.
-
-Using Responses
-===============
-
-In the previous examples, we retrieved a ``$response`` variable. This value is
-actually a ``GuzzleHttp\Message\ResponseInterface`` object and contains lots
-of helpful information.
-
-You can get the status code and reason phrase of the response.
-
-.. code-block:: php
-
-    $code = $response->getStatusCode();
-    // 200
-
-    $reason = $response->getReasonPhrase();
-    // OK
-
-By providing the ``future`` request option to a request, you can send requests
-asynchronously using the promise interface of a future response.
-
-.. code-block:: php
-
-    $client->get('http://httpbin.org', ['future' => true])
-        ->then(function ($response) {
-            echo $response->getStatusCode();
-        });
-
-Response Body
--------------
-
-The body of a response can be retrieved and cast to a string.
-
-.. code-block:: php
-
-    $body = $response->getBody();
-    echo $body;
-    // { "some_json_data" ...}
-
-You can also read read bytes from body of a response like a stream.
-
-.. code-block:: php
-
-    $body = $response->getBody();
-
-    while (!$body->eof()) {
-        echo $body->read(1024);
-    }
-
-JSON Responses
-~~~~~~~~~~~~~~
-
-You can more easily work with JSON responses using the ``json()`` method of a
-response.
-
-.. code-block:: php
-
-    $response = $client->get('http://httpbin.org/get');
-    $json = $response->json();
-    var_dump($json[0]['origin']);
-
-Guzzle internally uses PHP's ``json_decode()`` function to parse responses. If
-Guzzle is unable to parse the JSON response body, then a
-``GuzzleHttp\Exception\ParseException`` is thrown.
-
-XML Responses
-~~~~~~~~~~~~~
-
-You can use a response's ``xml()`` method to more easily work with responses
-that contain XML data.
-
-.. code-block:: php
-
-    $response = $client->get('https://github.com/mtdowling.atom');
-    $xml = $response->xml();
-    echo $xml->id;
-    // tag:github.com,2008:/mtdowling
-
-Guzzle internally uses a ``SimpleXMLElement`` object to parse responses. If
-Guzzle is unable to parse the XML response body, then a
-``GuzzleHttp\Exception\ParseException`` is thrown.
-
-Query String Parameters
-=======================
-
-Sending query string parameters with a request is easy. You can set query
-string parameters in the request's URL.
-
-.. code-block:: php
-
-    $response = $client->get('http://httpbin.org?foo=bar');
-
-You can also specify the query string parameters using the ``query`` request
-option.
-
-.. code-block:: php
-
-    $client->get('http://httpbin.org', [
-        'query' => ['foo' => 'bar']
-    ]);
-
-And finally, you can build up the query string of a request as needed by
-calling the ``getQuery()`` method of a request and modifying the request's
-``GuzzleHttp\Query`` object as needed.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httpbin.org');
-    $query = $request->getQuery();
-    $query->set('foo', 'bar');
-
-    // You can use the query string object like an array
-    $query['baz'] = 'bam';
-
-    // The query object can be cast to a string
-    echo $query;
-    // foo=bar&baz=bam
-
-    // Setting a value to false or null will cause the "=" sign to be omitted
-    $query['empty'] = null;
-    echo $query;
-    // foo=bar&baz=bam&empty
-
-    // Use an empty string to include the "=" sign with an empty value
-    $query['empty'] = '';
-    echo $query;
-    // foo=bar&baz=bam&empty=
-
-.. _headers:
-
-Request and Response Headers
-----------------------------
-
-You can specify request headers when sending or creating requests with a
-client. In the following example, we send the ``X-Foo-Header`` with a value of
-``value`` by setting the ``headers`` request option.
-
-.. code-block:: php
-
-    $response = $client->get('http://httpbin.org/get', [
-        'headers' => ['X-Foo-Header' => 'value']
-    ]);
-
-You can view the headers of a response using header specific methods of a
-response class. Headers work exactly the same way for request and response
-object.
-
-You can retrieve a header from a request or response using the ``getHeader()``
-method of the object. This method is case-insensitive and by default will
-return a string containing the header field value.
-
-.. code-block:: php
-
-    $response = $client->get('http://www.yahoo.com');
-    $length = $response->getHeader('Content-Length');
-
-Header fields that contain multiple values can be retrieved as a string or as
-an array. Retrieving the field values as a string will naively concatenate all
-of the header values together with a comma. Because not all header fields
-should be represented this way (e.g., ``Set-Cookie``), you can pass an optional
-flag to the ``getHeader()`` method to retrieve the header values as an array.
-
-.. code-block:: php
-
-    $values = $response->getHeader('Set-Cookie', true);
-    foreach ($values as $value) {
-        echo $value;
-    }
-
-You can test if a request or response has a specific header using the
-``hasHeader()`` method. This method accepts a case-insensitive string and
-returns true if the header is present or false if it is not.
-
-You can retrieve all of the headers of a message using the ``getHeaders()``
-method of a request or response. The return value is an associative array where
-the keys represent the header name as it will be sent over the wire, and each
-value is an array of strings associated with the header.
-
-.. code-block:: php
-
-    $headers = $response->getHeaders();
-    foreach ($message->getHeaders() as $name => $values) {
-        echo $name . ": " . implode(", ", $values);
-    }
-
-Modifying headers
------------------
-
-The headers of a message can be modified using the ``setHeader()``,
-``addHeader()``, ``setHeaders()``, and ``removeHeader()`` methods of a request
-or response object.
-
-.. code-block:: php
-
-    $request = $client->createRequest('GET', 'http://httpbin.org/get');
-
-    // Set a single value for a header
-    $request->setHeader('User-Agent', 'Testing!');
-
-    // Set multiple values for a header in one call
-    $request->setHeader('X-Foo', ['Baz', 'Bar']);
-
-    // Add a header to the message
-    $request->addHeader('X-Foo', 'Bam');
-
-    echo $request->getHeader('X-Foo');
-    // Baz, Bar, Bam
-
-    // Remove a specific header using a case-insensitive name
-    $request->removeHeader('x-foo');
-    echo $request->getHeader('X-Foo');
-    // Echoes an empty string: ''
-
-Uploading Data
-==============
-
-Guzzle provides several methods of uploading data.
-
-You can send requests that contain a stream of data by passing a string,
-resource returned from ``fopen``, or a ``GuzzleHttp\Stream\StreamInterface``
-object to the ``body`` request option.
-
-.. code-block:: php
-
-    $r = $client->post('http://httpbin.org/post', ['body' => 'raw data']);
-
-You can easily upload JSON data using the ``json`` request option.
-
-.. code-block:: php
-
-    $r = $client->put('http://httpbin.org/put', ['json' => ['foo' => 'bar']]);
-
-POST Requests
--------------
-
-In addition to specifying the raw data of a request using the ``body`` request
-option, Guzzle provides helpful abstractions over sending POST data.
-
-Sending POST Fields
-~~~~~~~~~~~~~~~~~~~
-
-Sending ``application/x-www-form-urlencoded`` POST requests requires that you
-specify the body of a POST request as an array.
-
-.. code-block:: php
-
-    $response = $client->post('http://httpbin.org/post', [
-        'body' => [
-            'field_name' => 'abc',
-            'other_field' => '123'
-        ]
-    ]);
-
-You can also build up POST requests before sending them.
-
-.. code-block:: php
-
-    $request = $client->createRequest('POST', 'http://httpbin.org/post');
-    $postBody = $request->getBody();
-
-    // $postBody is an instance of GuzzleHttp\Post\PostBodyInterface
-    $postBody->setField('foo', 'bar');
-    echo $postBody->getField('foo');
-    // 'bar'
-
-    echo json_encode($postBody->getFields());
-    // {"foo": "bar"}
-
-    // Send the POST request
-    $response = $client->send($request);
-
-Sending POST Files
-~~~~~~~~~~~~~~~~~~
-
-Sending ``multipart/form-data`` POST requests (POST requests that contain
-files) is the same as sending ``application/x-www-form-urlencoded``, except
-some of the array values of the POST fields map to PHP ``fopen`` resources, or
-``GuzzleHttp\Stream\StreamInterface``, or
-``GuzzleHttp\Post\PostFileInterface`` objects.
-
-.. code-block:: php
-
-    use GuzzleHttp\Post\PostFile;
-
-    $response = $client->post('http://httpbin.org/post', [
-        'body' => [
-            'field_name' => 'abc',
-            'file_filed' => fopen('/path/to/file', 'r'),
-            'other_file' => new PostFile('other_file', 'this is the content')
-        ]
-    ]);
-
-Just like when sending POST fields, you can also build up POST requests with
-files before sending them.
-
-.. code-block:: php
-
-    use GuzzleHttp\Post\PostFile;
-
-    $request = $client->createRequest('POST', 'http://httpbin.org/post');
-    $postBody = $request->getBody();
-    $postBody->setField('foo', 'bar');
-    $postBody->addFile(new PostFile('test', fopen('/path/to/file', 'r')));
-    $response = $client->send($request);
-
-Cookies
-=======
-
-Guzzle can maintain a cookie session for you if instructed using the
-``cookies`` request option.
-
-- Set to ``true`` to use a shared cookie session associated with the client.
-- Pass an associative array containing cookies to send in the request and start
-  a new cookie session.
-- Set to a ``GuzzleHttp\Subscriber\CookieJar\CookieJarInterface`` object to use
-  an existing cookie jar.
-
-Redirects
-=========
-
-Guzzle will automatically follow redirects unless you tell it not to. You can
-customize the redirect behavior using the ``allow_redirects`` request option.
-
-- Set to true to enable normal redirects with a maximum number of 5 redirects.
-  This is the default setting.
-- Set to false to disable redirects.
-- Pass an associative array containing the 'max' key to specify the maximum
-  number of redirects and optionally provide a 'strict' key value to specify
-  whether or not to use strict RFC compliant redirects (meaning redirect POST
-  requests with POST requests vs. doing what most browsers do which is
-  redirect POST requests with GET requests).
-
-.. code-block:: php
-
-    $response = $client->get('http://github.com');
-    echo $response->getStatusCode();
-    // 200
-    echo $response->getEffectiveUrl();
-    // 'https://github.com/'
-
-The following example shows that redirects can be disabled.
-
-.. code-block:: php
-
-    $response = $client->get('http://github.com', ['allow_redirects' => false]);
-    echo $response->getStatusCode();
-    // 301
-    echo $response->getEffectiveUrl();
-    // 'http://github.com/'
-
-Exceptions
-==========
-
-Guzzle throws exceptions for errors that occur during a transfer.
-
-- In the event of a networking error (connection timeout, DNS errors, etc.),
-  a ``GuzzleHttp\Exception\RequestException`` is thrown. This exception
-  extends from ``GuzzleHttp\Exception\TransferException``. Catching this
-  exception will catch any exception that can be thrown while transferring
-  (non-parallel) requests.
-
-  .. code-block:: php
-
-      use GuzzleHttp\Exception\RequestException;
-
-      try {
-          $client->get('https://github.com/_abc_123_404');
-      } catch (RequestException $e) {
-          echo $e->getRequest();
-          if ($e->hasResponse()) {
-              echo $e->getResponse();
-          }
-      }
-
-- A ``GuzzleHttp\Exception\ClientException`` is thrown for 400
-  level errors if the ``exceptions`` request option is set to true. This
-  exception extends from ``GuzzleHttp\Exception\BadResponseException`` and
-  ``GuzzleHttp\Exception\BadResponseException`` extends from
-  ``GuzzleHttp\Exception\RequestException``.
-
-  .. code-block:: php
-
-      use GuzzleHttp\Exception\ClientException;
-
-      try {
-          $client->get('https://github.com/_abc_123_404');
-      } catch (ClientException $e) {
-          echo $e->getRequest();
-          echo $e->getResponse();
-      }
-
-- A ``GuzzleHttp\Exception\ServerException`` is thrown for 500 level
-  errors if the ``exceptions`` request option is set to true. This
-  exception extends from ``GuzzleHttp\Exception\BadResponseException``.
-- A ``GuzzleHttp\Exception\TooManyRedirectsException`` is thrown when too
-  many redirects are followed. This exception extends from ``GuzzleHttp\Exception\RequestException``.
-
-All of the above exceptions extend from
-``GuzzleHttp\Exception\TransferException``.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/requirements.txt b/core/vendor/guzzlehttp/guzzle/docs/requirements.txt
deleted file mode 100644
index fe7a4ea..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Sphinx>=1.2b1
-guzzle_sphinx_theme>=0.6.0
diff --git a/core/vendor/guzzlehttp/guzzle/docs/streams.rst b/core/vendor/guzzlehttp/guzzle/docs/streams.rst
deleted file mode 100644
index 8fe9a69..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/streams.rst
+++ /dev/null
@@ -1,213 +0,0 @@
-=======
-Streams
-=======
-
-Guzzle uses stream objects to represent request and response message bodies.
-These stream objects allow you to work with various types of data all using a
-common interface.
-
-HTTP messages consist of a start-line, headers, and a body. The body of an HTTP
-message can be very small or extremely large. Attempting to represent the body
-of a message as a string can easily consume more memory than intended because
-the body must be stored completely in memory. Attempting to store the body of a
-request or response in memory would preclude the use of that implementation from
-being able to work with large message bodies. The StreamInterface is used in
-order to hide the implementation details of where a stream of data is read from
-or written to.
-
-Guzzle's StreamInterface exposes several methods that enable streams to be read
-from, written to, and traversed effectively.
-
-Streams expose their capabilities using three methods: ``isReadable()``,
-``isWritable()``, and ``isSeekable()``. These methods can be used by stream
-collaborators to determine if a stream is capable of their requirements.
-
-Each stream instance has various capabilities: they can be read-only,
-write-only, read-write, allow arbitrary random access (seeking forwards or
-backwards to any location), or only allow sequential access (for example in the
-case of a socket or pipe).
-
-Creating Streams
-================
-
-The best way to create a stream is using the static factory method,
-``GuzzleHttp\Stream\Stream::factory()``. This factory accepts strings,
-resources returned from ``fopen()``, an object that implements
-``__toString()``, and an object that implements
-``GuzzleHttp\Stream\StreamInterface``.
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-
-    $stream = Stream::factory('string data');
-    echo $stream;
-    // string data
-    echo $stream->read(3);
-    // str
-    echo $stream->getContents();
-    // ing data
-    var_export($stream->eof());
-    // true
-    var_export($stream->tell());
-    // 11
-
-Metadata
-========
-
-Guzzle streams expose stream metadata through the ``getMetadata()`` method.
-This method provides the data you would retrieve when calling PHP's
-`stream_get_meta_data() function <http://php.net/manual/en/function.stream-get-meta-data.php>`_,
-and can optionally expose other custom data.
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-
-    $resource = fopen('/path/to/file', 'r');
-    $stream = Stream::factory($resource);
-    echo $stream->getMetadata('uri');
-    // /path/to/file
-    var_export($stream->isReadable());
-    // true
-    var_export($stream->isWritable());
-    // false
-    var_export($stream->isSeekable());
-    // true
-
-Stream Decorators
-=================
-
-With the small and focused interface, add custom functionality to streams is
-very simple with stream decorators. Guzzle provides several built-in decorators
-that provide additional stream functionality.
-
-CachingStream
--------------
-
-The CachingStream is used to allow seeking over previously read bytes on
-non-seekable streams. This can be useful when transferring a non-seekable
-entity body fails due to needing to rewind the stream (for example, resulting
-from a redirect). Data that is read from the remote stream will be buffered in
-a PHP temp stream so that previously read bytes are cached first in memory,
-then on disk.
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-    use GuzzleHttp\Stream\CachingStream;
-
-    $original = Stream::factory(fopen('http://www.google.com', 'r'));
-    $stream = new CachingStream($original);
-
-    $stream->read(1024);
-    echo $stream->tell();
-    // 1024
-
-    $stream->seek(0);
-    echo $stream->tell();
-    // 0
-
-LimitStream
------------
-
-LimitStream can be used to read a subset or slice of an existing stream object.
-This can be useful for breaking a large file into smaller pieces to be sent in
-chunks (e.g. Amazon S3's multipart upload API).
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-    use GuzzleHttp\Stream\LimitStream;
-
-    $original = Stream::factory(fopen('/tmp/test.txt', 'r+'));
-    echo $original->getSize();
-    // >>> 1048576
-
-    // Limit the size of the body to 1024 bytes and start reading from byte 2048
-    $stream = new LimitStream($original, 1024, 2048);
-    echo $stream->getSize();
-    // >>> 1024
-    echo $stream->tell();
-    // >>> 0
-
-NoSeekStream
-------------
-
-NoSeekStream wraps a stream and does not allow seeking.
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-    use GuzzleHttp\Stream\LimitStream;
-
-    $original = Stream::factory('foo');
-    $noSeek = new NoSeekStream($original);
-
-    echo $noSeek->read(3);
-    // foo
-    var_export($noSeek->isSeekable());
-    // false
-    $noSeek->seek(0);
-    var_export($noSeek->read(3));
-    // NULL
-
-Creating Custom Decorators
---------------------------
-
-Creating a stream decorator is very easy thanks to the
-``GuzzleHttp\Stream\StreamDecoratorTrait``. This trait provides methods that
-implement ``GuzzleHttp\Stream\StreamInterface`` by proxying to an underlying
-stream. Just ``use`` the ``StreamDecoratorTrait`` and implement your custom
-methods.
-
-For example, let's say we wanted to call a specific function each time the last
-byte is read from a stream. This could be implemented by overriding the
-``read()`` method.
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\StreamDecoratorTrait;
-
-    class EofCallbackStream implements StreamInterface
-    {
-        use StreamDecoratorTrait;
-
-        private $callback;
-
-        public function __construct(StreamInterface $stream, callable $callback)
-        {
-            $this->stream = $stream;
-            $this->callback = $callback;
-        }
-
-        public function read($length)
-        {
-            $result = $this->stream->read($length);
-
-            // Invoke the callback when EOF is hit.
-            if ($this->eof()) {
-                call_user_func($this->callback);
-            }
-
-            return $result;
-        }
-    }
-
-This decorator could be added to any existing stream and used like so:
-
-.. code-block:: php
-
-    use GuzzleHttp\Stream\Stream;
-
-    $original = Stream::factory('foo');
-    $eofStream = new EofCallbackStream($original, function () {
-        echo 'EOF!';
-    });
-
-    $eofStream->read(2);
-    $eofStream->read(1);
-    // echoes "EOF!"
-    $eofStream->seek(0);
-    $eofStream->read(3);
-    // echoes "EOF!"
diff --git a/core/vendor/guzzlehttp/guzzle/docs/testing.rst b/core/vendor/guzzlehttp/guzzle/docs/testing.rst
deleted file mode 100644
index e7098be..0000000
--- a/core/vendor/guzzlehttp/guzzle/docs/testing.rst
+++ /dev/null
@@ -1,232 +0,0 @@
-======================
-Testing Guzzle Clients
-======================
-
-Guzzle provides several tools that will enable you to easily mock the HTTP
-layer without needing to send requests over the internet.
-
-* Mock subscriber
-* Mock handler
-* Node.js web server for integration testing
-
-Mock Subscriber
-===============
-
-When testing HTTP clients, you often need to simulate specific scenarios like
-returning a successful response, returning an error, or returning specific
-responses in a certain order. Because unit tests need to be predictable, easy
-to bootstrap, and fast, hitting an actual remote API is a test smell.
-
-Guzzle provides a mock subscriber that can be attached to clients or requests
-that allows you to queue up a list of responses to use rather than hitting a
-remote API.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Subscriber\Mock;
-    use GuzzleHttp\Message\Response;
-
-    $client = new Client();
-
-    // Create a mock subscriber and queue two responses.
-    $mock = new Mock([
-        new Response(200, ['X-Foo' => 'Bar']),         // Use response object
-        "HTTP/1.1 202 OK\r\nContent-Length: 0\r\n\r\n"  // Use a response string
-    ]);
-
-    // Add the mock subscriber to the client.
-    $client->getEmitter()->attach($mock);
-    // The first request is intercepted with the first response.
-    echo $client->get('/')->getStatusCode();
-    //> 200
-    // The second request is intercepted with the second response.
-    echo $client->get('/')->getStatusCode();
-    //> 202
-
-When no more responses are in the queue and a request is sent, an
-``OutOfBoundsException`` is thrown.
-
-History Subscriber
-==================
-
-When using things like the ``Mock`` subscriber, you often need to know if the
-requests you expected to send were sent exactly as you intended. While the mock
-subscriber responds with mocked responses, the ``GuzzleHttp\Subscriber\History``
-subscriber maintains a history of the requests that were sent by a client.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Subscriber\History;
-
-    $client = new Client();
-    $history = new History();
-
-    // Add the history subscriber to the client.
-    $client->getEmitter()->attach($history);
-
-    $client->get('http://httpbin.org/get');
-    $client->head('http://httpbin.org/get');
-
-    // Count the number of transactions
-    echo count($history);
-    //> 2
-    // Get the last request
-    $lastRequest = $history->getLastRequest();
-    // Get the last response
-    $lastRequest = $history->getLastResponse();
-
-    // Iterate over the transactions that were sent
-    foreach ($history as $transaction) {
-        echo $transaction['request']->getMethod();
-        //> GET, HEAD
-        echo $transaction['response']->getStatusCode();
-        //> 200, 200
-    }
-
-The history subscriber can also be printed, revealing the requests and
-responses that were sent as a string, in order.
-
-.. code-block:: php
-
-    echo $history;
-
-::
-
-    > GET /get HTTP/1.1
-    Host: httpbin.org
-    User-Agent: Guzzle/4.0-dev curl/7.21.4 PHP/5.5.8
-
-    < HTTP/1.1 200 OK
-    Access-Control-Allow-Origin: *
-    Content-Type: application/json
-    Date: Tue, 25 Mar 2014 03:53:27 GMT
-    Server: gunicorn/0.17.4
-    Content-Length: 270
-    Connection: keep-alive
-
-    {
-      "headers": {
-        "Connection": "close",
-        "X-Request-Id": "3d0f7d5c-c937-4394-8248-2b8e03fcccdb",
-        "User-Agent": "Guzzle/4.0-dev curl/7.21.4 PHP/5.5.8",
-        "Host": "httpbin.org"
-      },
-      "origin": "76.104.247.1",
-      "args": {},
-      "url": "http://httpbin.org/get"
-    }
-
-    > HEAD /get HTTP/1.1
-    Host: httpbin.org
-    User-Agent: Guzzle/4.0-dev curl/7.21.4 PHP/5.5.8
-
-    < HTTP/1.1 200 OK
-    Access-Control-Allow-Origin: *
-    Content-length: 270
-    Content-Type: application/json
-    Date: Tue, 25 Mar 2014 03:53:27 GMT
-    Server: gunicorn/0.17.4
-    Connection: keep-alive
-
-Mock Adapter
-============
-
-In addition to using the Mock subscriber, you can use the
-``GuzzleHttp\Ring\Client\MockAdapter`` as the handler of a client to return the
-same response over and over or return the result of a callable function.
-
-Test Web Server
-===============
-
-Using mock responses is almost always enough when testing a web service client.
-When implementing custom :doc:`HTTP handlers <handlers>`, you'll need to send
-actual HTTP requests in order to sufficiently test the handler. However, a
-best practice is to contact a local web server rather than a server over the
-internet.
-
-- Tests are more reliable
-- Tests do not require a network connection
-- Tests have no external dependencies
-
-Using the test server
----------------------
-
-.. warning::
-
-    The following functionality is provided to help developers of Guzzle
-    develop HTTP handlers. There is no promise of backwards compatibility
-    when it comes to the node.js test server or the ``GuzzleHttp\Tests\Server``
-    class. If you are using the test server or ``Server`` class outside of
-    guzzlehttp/guzzle, then you will need to configure autoloading and
-    ensure the web server is started manually.
-
-.. hint::
-
-    You almost never need to use this test web server. You should only ever
-    consider using it when developing HTTP handlers. The test web server
-    is not necessary for mocking requests. For that, please use the
-    Mock subcribers and History subscriber.
-
-Guzzle ships with a node.js test server that receives requests and returns
-responses from a queue. The test server exposes a simple API that is used to
-enqueue responses and inspect the requests that it has received.
-
-Any operation on the ``Server`` object will ensure that
-the server is running and wait until it is able to receive requests before
-returning.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Tests\Server;
-
-    // Start the server and queue a response
-    Server::enqueue("HTTP/1.1 200 OK\r\n\Content-Length: 0r\n\r\n");
-
-    $client = new Client(['base_url' => Server::$url]);
-    echo $client->get('/foo')->getStatusCode();
-    // 200
-
-``GuzzleHttp\Tests\Server`` provides a static interface to the test server. You
-can queue an HTTP response or an array of responses by calling
-``Server::enqueue()``. This method accepts a string representing an HTTP
-response message, a ``GuzzleHttp\Message\ResponseInterface``, or an array of
-HTTP message strings / ``GuzzleHttp\Message\ResponseInterface`` objects.
-
-.. code-block:: php
-
-    // Queue single response
-    Server::enqueue("HTTP/1.1 200 OK\r\n\Content-Length: 0r\n\r\n");
-
-    // Clear the queue and queue an array of responses
-    Server::enqueue([
-        "HTTP/1.1 200 OK\r\n\Content-Length: 0r\n\r\n",
-        "HTTP/1.1 404 Not Found\r\n\Content-Length: 0r\n\r\n"
-    ]);
-
-When a response is queued on the test server, the test server will remove any
-previously queued responses. As the server receives requests, queued responses
-are dequeued and returned to the request. When the queue is empty, the server
-will return a 500 response.
-
-You can inspect the requests that the server has retrieved by calling
-``Server::received()``. This method accepts an optional ``$hydrate`` parameter
-that specifies if you are retrieving an array of HTTP requests as strings or an
-array of ``GuzzleHttp\Message\RequestInterface`` objects.
-
-.. code-block:: php
-
-    foreach (Server::received() as $response) {
-        echo $response;
-    }
-
-You can clear the list of received requests from the web server using the
-``Server::flush()`` method.
-
-.. code-block:: php
-
-    Server::flush();
-    echo count(Server::received());
-    // 0
diff --git a/core/vendor/guzzlehttp/guzzle/src/BatchResults.php b/core/vendor/guzzlehttp/guzzle/src/BatchResults.php
deleted file mode 100644
index e5af433..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/BatchResults.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Represents the result of a batch operation. This result container is
- * iterable, countable, and you can can get a result by value using the
- * getResult function.
- *
- * Successful results are anything other than exceptions. Failure results are
- * exceptions.
- *
- * @package GuzzleHttp
- */
-class BatchResults implements \Countable, \IteratorAggregate, \ArrayAccess
-{
-    private $hash;
-
-    /**
-     * @param \SplObjectStorage $hash Hash of key objects to result values.
-     */
-    public function __construct(\SplObjectStorage $hash)
-    {
-        $this->hash = $hash;
-    }
-
-    /**
-     * Get the keys that are available on the batch result.
-     *
-     * @return array
-     */
-    public function getKeys()
-    {
-        return iterator_to_array($this->hash);
-    }
-
-    /**
-     * Gets a result from the container for the given object. When getting
-     * results for a batch of requests, provide the request object.
-     *
-     * @param object $forObject Object to retrieve the result for.
-     *
-     * @return mixed|null
-     */
-    public function getResult($forObject)
-    {
-        return isset($this->hash[$forObject]) ? $this->hash[$forObject] : null;
-    }
-
-    /**
-     * Get an array of successful results.
-     *
-     * @return array
-     */
-    public function getSuccessful()
-    {
-        $results = [];
-        foreach ($this->hash as $key) {
-            if (!($this->hash[$key] instanceof \Exception)) {
-                $results[] = $this->hash[$key];
-            }
-        }
-
-        return $results;
-    }
-
-    /**
-     * Get an array of failed results.
-     *
-     * @return array
-     */
-    public function getFailures()
-    {
-        $results = [];
-        foreach ($this->hash as $key) {
-            if ($this->hash[$key] instanceof \Exception) {
-                $results[] = $this->hash[$key];
-            }
-        }
-
-        return $results;
-    }
-
-    /**
-     * Allows iteration over all batch result values.
-     *
-     * @return \ArrayIterator
-     */
-    public function getIterator()
-    {
-        $results = [];
-        foreach ($this->hash as $key) {
-            $results[] = $this->hash[$key];
-        }
-
-        return new \ArrayIterator($results);
-    }
-
-    /**
-     * Counts the number of elements in the batch result.
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->hash);
-    }
-
-    /**
-     * Checks if the batch contains a specific numerical array index.
-     *
-     * @param int $key Index to access
-     *
-     * @return bool
-     */
-    public function offsetExists($key)
-    {
-        return $key < count($this->hash);
-    }
-
-    /**
-     * Allows access of the batch using a numerical array index.
-     *
-     * @param int $key Index to access.
-     *
-     * @return mixed|null
-     */
-    public function offsetGet($key)
-    {
-        $i = -1;
-        foreach ($this->hash as $obj) {
-            if ($key === ++$i) {
-                return $this->hash[$obj];
-            }
-        }
-
-        return null;
-    }
-
-    public function offsetUnset($key)
-    {
-        throw new \RuntimeException('Not implemented');
-    }
-
-    public function offsetSet($key, $value)
-    {
-        throw new \RuntimeException('Not implemented');
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Client.php b/core/vendor/guzzlehttp/guzzle/src/Client.php
index f1779eb..29c867f 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Client.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Client.php
@@ -1,403 +1,386 @@
 <?php
 namespace GuzzleHttp;
 
-use GuzzleHttp\Event\HasEmitterTrait;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\FutureResponse;
-use GuzzleHttp\Ring\Client\Middleware;
-use GuzzleHttp\Ring\Client\CurlMultiHandler;
-use GuzzleHttp\Ring\Client\CurlHandler;
-use GuzzleHttp\Ring\Client\StreamHandler;
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Ring\Future\FutureInterface;
-use GuzzleHttp\Exception\RequestException;
-use React\Promise\FulfilledPromise;
-use React\Promise\RejectedPromise;
+use GuzzleHttp\Cookie\CookieJar;
+use GuzzleHttp\Promise;
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\UriInterface;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use \InvalidArgumentException as Iae;
 
 /**
- * HTTP client
+ * @method ResponseInterface get($uri, array $options = [])
+ * @method ResponseInterface head($uri, array $options = [])
+ * @method ResponseInterface put($uri, array $options = [])
+ * @method ResponseInterface post($uri, array $options = [])
+ * @method ResponseInterface patch($uri, array $options = [])
+ * @method ResponseInterface delete($uri, array $options = [])
+ * @method Promise\PromiseInterface getAsync($uri, array $options = [])
+ * @method Promise\PromiseInterface headAsync($uri, array $options = [])
+ * @method Promise\PromiseInterface putAsync($uri, array $options = [])
+ * @method Promise\PromiseInterface postAsync($uri, array $options = [])
+ * @method Promise\PromiseInterface patchAsync($uri, array $options = [])
+ * @method Promise\PromiseInterface deleteAsync($uri, array $options = [])
  */
 class Client implements ClientInterface
 {
-    use HasEmitterTrait;
-
-    /** @var MessageFactoryInterface Request factory used by the client */
-    private $messageFactory;
-
-    /** @var Url Base URL of the client */
-    private $baseUrl;
-
     /** @var array Default request options */
-    private $defaults;
-
-    /** @var callable Request state machine */
-    private $fsm;
+    private $config;
 
     /**
      * Clients accept an array of constructor parameters.
      *
-     * Here's an example of creating a client using an URI template for the
-     * client's base_url and an array of default request options to apply
-     * to each request:
+     * Here's an example of creating a client using a base_uri and an array of
+     * default request options to apply to each request:
      *
      *     $client = new Client([
-     *         'base_url' => [
-     *              'http://www.foo.com/{version}/',
-     *              ['version' => '123']
-     *          ],
-     *         'defaults' => [
-     *             'timeout'         => 10,
-     *             'allow_redirects' => false,
-     *             'proxy'           => '192.168.16.1:10'
-     *         ]
+     *         'base_uri'        => 'http://www.foo.com/1.0/',
+     *         'timeout'         => 0,
+     *         'allow_redirects' => false,
+     *         'proxy'           => '192.168.16.1:10'
      *     ]);
      *
-     * @param array $config Client configuration settings
-     *     - base_url: Base URL of the client that is merged into relative URLs.
-     *       Can be a string or an array that contains a URI template followed
-     *       by an associative array of expansion variables to inject into the
-     *       URI template.
-     *     - handler: callable RingPHP handler used to transfer requests
-     *     - message_factory: Factory used to create request and response object
-     *     - defaults: Default request options to apply to each request
-     *     - emitter: Event emitter used for request events
-     *     - fsm: (internal use only) The request finite state machine. A
-     *       function that accepts a transaction and optional final state. The
-     *       function is responsible for transitioning a request through its
-     *       lifecycle events.
-     */
-    public function __construct(array $config = [])
-    {
-        $this->configureBaseUrl($config);
-        $this->configureDefaults($config);
-
-        if (isset($config['emitter'])) {
-            $this->emitter = $config['emitter'];
-        }
-
-        $this->messageFactory = isset($config['message_factory'])
-            ? $config['message_factory']
-            : new MessageFactory();
-
-        if (isset($config['fsm'])) {
-            $this->fsm = $config['fsm'];
-        } else {
-            if (isset($config['handler'])) {
-                $handler = $config['handler'];
-            } elseif (isset($config['adapter'])) {
-                $handler = $config['adapter'];
-            } else {
-                $handler = static::getDefaultHandler();
-            }
-            $this->fsm = new RequestFsm($handler, $this->messageFactory);
-        }
-    }
-
-    /**
-     * Create a default handler to use based on the environment
+     * Client configuration settings include the following options:
+     *
+     * - handler: (callable) Function that transfers HTTP requests over the
+     *   wire. The function is called with a Psr7\Http\Message\RequestInterface
+     *   and array of transfer options, and must return a
+     *   GuzzleHttp\Promise\PromiseInterface that is fulfilled with a
+     *   Psr7\Http\Message\ResponseInterface on success. "handler" is a
+     *   constructor only option that cannot be overridden in per/request
+     *   options. If no handler is provided, a default handler will be created
+     *   that enables all of the request options below by attaching all of the
+     *   default middleware to the handler.
+     * - base_uri: (string|UriInterface) Base URI of the client that is merged
+     *   into relative URIs. Can be a string or instance of UriInterface.
+     * - **: any request option
      *
-     * @throws \RuntimeException if no viable Handler is available.
+     * @param array $config Client configuration settings.
+     *
+     * @see \GuzzleHttp\RequestOptions for a list of available request options.
      */
-    public static function getDefaultHandler()
+    public function __construct(array $config = [])
     {
-        $default = $future = $streaming = null;
-
-        if (extension_loaded('curl')) {
-            $config = [
-                'select_timeout' => getenv('GUZZLE_CURL_SELECT_TIMEOUT') ?: 1
-            ];
-            if ($maxHandles = getenv('GUZZLE_CURL_MAX_HANDLES')) {
-                $config['max_handles'] = $maxHandles;
-            }
-            $future = new CurlMultiHandler($config);
-            if (function_exists('curl_reset')) {
-                $default = new CurlHandler();
-            }
-        }
-
-        if (ini_get('allow_url_fopen')) {
-            $streaming = new StreamHandler();
-        }
-
-        if (!($default = ($default ?: $future) ?: $streaming)) {
-            throw new \RuntimeException('Guzzle requires cURL, the '
-                . 'allow_url_fopen ini setting, or a custom HTTP handler.');
-        }
-
-        $handler = $default;
-
-        if ($streaming && $streaming !== $default) {
-            $handler = Middleware::wrapStreaming($default, $streaming);
+        if (!isset($config['handler'])) {
+            $config['handler'] = HandlerStack::create();
         }
 
-        if ($future) {
-            $handler = Middleware::wrapFuture($handler, $future);
+        // Convert the base_uri to a UriInterface
+        if (isset($config['base_uri'])) {
+            $config['base_uri'] = Psr7\uri_for($config['base_uri']);
         }
 
-        return $handler;
+        $this->configureDefaults($config);
     }
 
-    /**
-     * Get the default User-Agent string to use with Guzzle
-     *
-     * @return string
-     */
-    public static function getDefaultUserAgent()
+    public function __call($method, $args)
     {
-        static $defaultAgent = '';
-        if (!$defaultAgent) {
-            $defaultAgent = 'Guzzle/' . self::VERSION;
-            if (extension_loaded('curl')) {
-                $defaultAgent .= ' curl/' . curl_version()['version'];
-            }
-            $defaultAgent .= ' PHP/' . PHP_VERSION;
+        if (count($args) < 1) {
+            throw new \InvalidArgumentException('Magic request methods require a URI and optional options array');
         }
 
-        return $defaultAgent;
-    }
-
-    public function getDefaultOption($keyOrPath = null)
-    {
-        return $keyOrPath === null
-            ? $this->defaults
-            : Utils::getPath($this->defaults, $keyOrPath);
-    }
-
-    public function setDefaultOption($keyOrPath, $value)
-    {
-        Utils::setPath($this->defaults, $keyOrPath, $value);
-    }
-
-    public function getBaseUrl()
-    {
-        return (string) $this->baseUrl;
-    }
+        $uri = $args[0];
+        $opts = isset($args[1]) ? $args[1] : [];
 
-    public function createRequest($method, $url = null, array $options = [])
-    {
-        $options = $this->mergeDefaults($options);
-        // Use a clone of the client's emitter
-        $options['config']['emitter'] = clone $this->getEmitter();
-        $url = $url || (is_string($url) && strlen($url))
-            ? $this->buildUrl($url)
-            : (string) $this->baseUrl;
-
-        return $this->messageFactory->createRequest($method, $url, $options);
+        return substr($method, -5) === 'Async'
+            ? $this->requestAsync(substr($method, 0, -5), $uri, $opts)
+            : $this->request($method, $uri, $opts);
     }
 
-    public function get($url = null, $options = [])
+    public function sendAsync(RequestInterface $request, array $options = [])
     {
-        return $this->send($this->createRequest('GET', $url, $options));
-    }
+        // Merge the base URI into the request URI if needed.
+        $options = $this->prepareDefaults($options);
 
-    public function head($url = null, array $options = [])
-    {
-        return $this->send($this->createRequest('HEAD', $url, $options));
+        return $this->transfer(
+            $request->withUri($this->buildUri($request->getUri(), $options)),
+            $options
+        );
     }
 
-    public function delete($url = null, array $options = [])
+    public function send(RequestInterface $request, array $options = [])
     {
-        return $this->send($this->createRequest('DELETE', $url, $options));
+        $options[RequestOptions::SYNCHRONOUS] = true;
+        return $this->sendAsync($request, $options)->wait();
     }
 
-    public function put($url = null, array $options = [])
+    public function requestAsync($method, $uri = null, array $options = [])
     {
-        return $this->send($this->createRequest('PUT', $url, $options));
-    }
+        $options = $this->prepareDefaults($options);
+        // Remove request modifying parameter because it can be done up-front.
+        $headers = isset($options['headers']) ? $options['headers'] : [];
+        $body = isset($options['body']) ? $options['body'] : null;
+        $version = isset($options['version']) ? $options['version'] : '1.1';
+        // Merge the URI into the base URI.
+        $uri = $this->buildUri($uri, $options);
+        if (is_array($body)) {
+            $this->invalidBody();
+        }
+        $request = new Psr7\Request($method, $uri, $headers, $body, $version);
+        // Remove the option so that they are not doubly-applied.
+        unset($options['headers'], $options['body'], $options['version']);
 
-    public function patch($url = null, array $options = [])
-    {
-        return $this->send($this->createRequest('PATCH', $url, $options));
+        return $this->transfer($request, $options);
     }
 
-    public function post($url = null, array $options = [])
+    public function request($method, $uri = null, array $options = [])
     {
-        return $this->send($this->createRequest('POST', $url, $options));
+        $options[RequestOptions::SYNCHRONOUS] = true;
+        return $this->requestAsync($method, $uri, $options)->wait();
     }
 
-    public function options($url = null, array $options = [])
+    public function getConfig($option = null)
     {
-        return $this->send($this->createRequest('OPTIONS', $url, $options));
+        return $option === null
+            ? $this->config
+            : (isset($this->config[$option]) ? $this->config[$option] : null);
     }
 
-    public function send(RequestInterface $request)
+    private function buildUri($uri, array $config)
     {
-        $isFuture = $request->getConfig()->get('future');
-        $trans = new Transaction($this, $request, $isFuture);
-        $fn = $this->fsm;
-
-        try {
-            $fn($trans);
-            if ($isFuture) {
-                // Turn the normal response into a future if needed.
-                return $trans->response instanceof FutureInterface
-                    ? $trans->response
-                    : new FutureResponse(new FulfilledPromise($trans->response));
-            }
-            // Resolve deep futures if this is not a future
-            // transaction. This accounts for things like retries
-            // that do not have an immediate side-effect.
-            while ($trans->response instanceof FutureInterface) {
-                $trans->response = $trans->response->wait();
-            }
-            return $trans->response;
-        } catch (\Exception $e) {
-            if ($isFuture) {
-                // Wrap the exception in a promise
-                return new FutureResponse(new RejectedPromise($e));
-            }
-            throw RequestException::wrapException($trans->request, $e);
+        if (!isset($config['base_uri'])) {
+            return $uri instanceof UriInterface ? $uri : new Psr7\Uri($uri);
         }
+
+        return Psr7\Uri::resolve(Psr7\uri_for($config['base_uri']), $uri);
     }
 
     /**
-     * Get an array of default options to apply to the client
+     * Configures the default options for a client.
+     *
+     * @param array $config
      *
      * @return array
      */
-    protected function getDefaultOptions()
+    private function configureDefaults(array $config)
     {
-        $settings = [
-            'allow_redirects' => true,
-            'exceptions'      => true,
+        $defaults = [
+            'allow_redirects' => RedirectMiddleware::$defaultSettings,
+            'http_errors'     => true,
             'decode_content'  => true,
-            'verify'          => true
+            'verify'          => true,
+            'cookies'         => false
         ];
 
         // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set
         if ($proxy = getenv('HTTP_PROXY')) {
-            $settings['proxy']['http'] = $proxy;
+            $defaults['proxy']['http'] = $proxy;
         }
 
         if ($proxy = getenv('HTTPS_PROXY')) {
-            $settings['proxy']['https'] = $proxy;
+            $defaults['proxy']['https'] = $proxy;
         }
 
-        return $settings;
+        $this->config = $config + $defaults;
+
+        if (!empty($config['cookies']) && $config['cookies'] === true) {
+            $this->config['cookies'] = new CookieJar();
+        }
+
+        // Add the default user-agent header.
+        if (!isset($this->config['headers'])) {
+            $this->config['headers'] = ['User-Agent' => default_user_agent()];
+        } else {
+            // Add the User-Agent header if one was not already set.
+            foreach (array_keys($this->config['headers']) as $name) {
+                if (strtolower($name) === 'user-agent') {
+                    return;
+                }
+            }
+            $this->config['headers']['User-Agent'] = default_user_agent();
+        }
     }
 
     /**
-     * Expand a URI template and inherit from the base URL if it's relative
+     * Merges default options into the array.
+     *
+     * @param array $options Options to modify by reference
      *
-     * @param string|array $url URL or an array of the URI template to expand
-     *                          followed by a hash of template varnames.
-     * @return string
-     * @throws \InvalidArgumentException
+     * @return array
      */
-    private function buildUrl($url)
+    private function prepareDefaults($options)
     {
-        // URI template (absolute or relative)
-        if (!is_array($url)) {
-            return strpos($url, '://')
-                ? (string) $url
-                : (string) $this->baseUrl->combine($url);
+        $defaults = $this->config;
+
+        if (!empty($defaults['headers'])) {
+            // Default headers are only added if they are not present.
+            $defaults['_conditional'] = $defaults['headers'];
+            unset($defaults['headers']);
         }
 
-        if (!isset($url[1])) {
-            throw new \InvalidArgumentException('You must provide a hash of '
-                . 'varname options in the second element of a URL array.');
+        // Special handling for headers is required as they are added as
+        // conditional headers and as headers passed to a request ctor.
+        if (array_key_exists('headers', $options)) {
+            // Allows default headers to be unset.
+            if ($options['headers'] === null) {
+                $defaults['_conditional'] = null;
+                unset($options['headers']);
+            } elseif (!is_array($options['headers'])) {
+                throw new \InvalidArgumentException('headers must be an array');
+            }
         }
 
-        // Absolute URL
-        if (strpos($url[0], '://')) {
-            return Utils::uriTemplate($url[0], $url[1]);
+        // Shallow merge defaults underneath options.
+        $result = $options + $defaults;
+
+        // Remove null values.
+        foreach ($result as $k => $v) {
+            if ($v === null) {
+                unset($result[$k]);
+            }
         }
 
-        // Combine the relative URL with the base URL
-        return (string) $this->baseUrl->combine(
-            Utils::uriTemplate($url[0], $url[1])
-        );
+        return $result;
     }
 
-    private function configureBaseUrl(&$config)
+    /**
+     * Transfers the given request and applies request options.
+     *
+     * The URI of the request is not modified and the request options are used
+     * as-is without merging in default options.
+     *
+     * @param RequestInterface $request
+     * @param array            $options
+     *
+     * @return Promise\PromiseInterface
+     */
+    private function transfer(RequestInterface $request, array $options)
     {
-        if (!isset($config['base_url'])) {
-            $this->baseUrl = new Url('', '');
-        } elseif (!is_array($config['base_url'])) {
-            $this->baseUrl = Url::fromString($config['base_url']);
-        } elseif (count($config['base_url']) < 2) {
-            throw new \InvalidArgumentException('You must provide a hash of '
-                . 'varname options in the second element of a base_url array.');
-        } else {
-            $this->baseUrl = Url::fromString(
-                Utils::uriTemplate(
-                    $config['base_url'][0],
-                    $config['base_url'][1]
-                )
-            );
-            $config['base_url'] = (string) $this->baseUrl;
+        // save_to -> sink
+        if (isset($options['save_to'])) {
+            $options['sink'] = $options['save_to'];
+            unset($options['save_to']);
         }
-    }
 
-    private function configureDefaults($config)
-    {
-        if (!isset($config['defaults'])) {
-            $this->defaults = $this->getDefaultOptions();
-        } else {
-            $this->defaults = array_replace(
-                $this->getDefaultOptions(),
-                $config['defaults']
-            );
+        // exceptions -> http_error
+        if (isset($options['exceptions'])) {
+            $options['http_errors'] = $options['exceptions'];
+            unset($options['exceptions']);
         }
 
-        // Add the default user-agent header
-        if (!isset($this->defaults['headers'])) {
-            $this->defaults['headers'] = [
-                'User-Agent' => static::getDefaultUserAgent()
-            ];
-        } elseif (!Core::hasHeader($this->defaults, 'User-Agent')) {
-            // Add the User-Agent header if one was not already set
-            $this->defaults['headers']['User-Agent'] = static::getDefaultUserAgent();
+        $request = $this->applyOptions($request, $options);
+        $handler = $options['handler'];
+
+        try {
+            return Promise\promise_for($handler($request, $options));
+        } catch (\Exception $e) {
+            return Promise\rejection_for($e);
         }
     }
 
     /**
-     * Merges default options into the array passed by reference.
+     * Applies the array of request options to a request.
      *
-     * @param array $options Options to modify by reference
+     * @param RequestInterface $request
+     * @param array            $options
      *
-     * @return array
+     * @return RequestInterface
      */
-    private function mergeDefaults($options)
+    private function applyOptions(RequestInterface $request, array &$options)
     {
-        $defaults = $this->defaults;
-
-        // Case-insensitively merge in default headers if both defaults and
-        // options have headers specified.
-        if (!empty($defaults['headers']) && !empty($options['headers'])) {
-            // Create a set of lowercased keys that are present.
-            $lkeys = [];
-            foreach (array_keys($options['headers']) as $k) {
-                $lkeys[strtolower($k)] = true;
+        $modify = [];
+
+        if (isset($options['form_params'])) {
+            $options['body'] = http_build_query($options['form_params']);
+            unset($options['form_params']);
+            $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded';
+        }
+
+        if (isset($options['multipart'])) {
+            $elements = $options['multipart'];
+            unset($options['multipart']);
+            $options['body'] = new Psr7\MultipartStream($elements);
+            // Use a multipart/form-data POST if a Content-Type is not set.
+            $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='
+                . $options['body']->getBoundary();
+        }
+
+        if (!empty($options['decode_content'])
+            && $options['decode_content'] !== true
+        ) {
+            $modify['set_headers']['Accept-Encoding'] = $options['decode_content'];
+        }
+
+        if (isset($options['headers'])) {
+            if (isset($modify['set_headers'])) {
+                $modify['set_headers'] = $options['headers'] + $modify['set_headers'];
+            } else {
+                $modify['set_headers'] = $options['headers'];
             }
-            // Merge in lowercase default keys when not present in above set.
-            foreach ($defaults['headers'] as $key => $value) {
-                if (!isset($lkeys[strtolower($key)])) {
-                    $options['headers'][$key] = $value;
-                }
+            unset($options['headers']);
+        }
+
+        if (isset($options['body'])) {
+            if (is_array($options['body'])) {
+                $this->invalidBody();
             }
-            // No longer need to merge in headers.
-            unset($defaults['headers']);
+            $modify['body'] = Psr7\stream_for($options['body']);
+            unset($options['body']);
         }
 
-        $result = array_replace_recursive($defaults, $options);
-        foreach ($options as $k => $v) {
-            if ($v === null) {
-                unset($result[$k]);
+        if (!empty($options['auth'])) {
+            $value = $options['auth'];
+            $type = is_array($value)
+                ? (isset($value[2]) ? strtolower($value[2]) : 'basic')
+                : $value;
+            $config['auth'] = $value;
+            switch (strtolower($type)) {
+                case 'basic':
+                    $modify['set_headers']['Authorization'] = 'Basic '
+                        . base64_encode("$value[0]:$value[1]");
+                    break;
+                case 'digest':
+                    // @todo: Do not rely on curl
+                    $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_DIGEST;
+                    $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]";
+                    break;
             }
         }
 
-        return $result;
+        if (isset($options['query'])) {
+            $value = $options['query'];
+            if (is_array($value)) {
+                $value = http_build_query($value, null, '&', PHP_QUERY_RFC3986);
+            }
+            if (!is_string($value)) {
+                throw new Iae('query must be a string or array');
+            }
+            $modify['query'] = $value;
+            unset($options['query']);
+        }
+
+        if (isset($options['json'])) {
+            $modify['body'] = Psr7\stream_for(json_encode($options['json']));
+            $options['_conditional']['Content-Type'] = 'application/json';
+            unset($options['json']);
+        }
+
+        $request = Psr7\modify_request($request, $modify);
+
+        // Merge in conditional headers if they are not present.
+        if (isset($options['_conditional'])) {
+            // Build up the changes so it's in a single clone of the message.
+            $modify = [];
+            foreach ($options['_conditional'] as $k => $v) {
+                if (!$request->hasHeader($k)) {
+                    $modify['set_headers'][$k] = $v;
+                }
+            }
+            $request = Psr7\modify_request($request, $modify);
+            // Don't pass this internal value along to middleware/handlers.
+            unset($options['_conditional']);
+        }
+
+        return $request;
     }
 
-    /**
-     * @deprecated Use {@see GuzzleHttp\Pool} instead.
-     * @see GuzzleHttp\Pool
-     */
-    public function sendAll($requests, array $options = [])
+    private function invalidBody()
     {
-        Pool::send($this, $requests, $options);
+        throw new \InvalidArgumentException('Passing in the "body" request '
+            . 'option as an array to send a POST request has been deprecated. '
+            . 'Please use the "form_params" request option to send a '
+            . 'application/x-www-form-urlencoded request, or a the "multipart" '
+            . 'request option to send a multipart/form-data request.');
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
index fac8864..7706a22 100644
--- a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
@@ -1,150 +1,84 @@
 <?php
 namespace GuzzleHttp;
 
-use GuzzleHttp\Event\HasEmitterInterface;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
+use GuzzleHttp\Promise\PromiseInterface;
+use GuzzleHttp\Exception\GuzzleException;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\UriInterface;
 
 /**
- * Client interface for sending HTTP requests
+ * Client interface for sending HTTP requests.
  */
-interface ClientInterface extends HasEmitterInterface
+interface ClientInterface
 {
-    const VERSION = '5.2.0';
+    const VERSION = '6.0.1';
 
     /**
-     * Create and return a new {@see RequestInterface} object.
+     * Send an HTTP request.
      *
-     * Use an absolute path to override the base path of the client, or a
-     * relative path to append to the base path of the client. The URL can
-     * contain the query string as well. Use an array to provide a URL
-     * template and additional variables to use in the URL template expansion.
-     *
-     * @param string           $method  HTTP method
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
-     *
-     * @return RequestInterface
-     */
-    public function createRequest($method, $url = null, array $options = []);
-
-    /**
-     * Send a GET request
-     *
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
-     *
-     * @return ResponseInterface
-     * @throws RequestException When an error is encountered
-     */
-    public function get($url = null, $options = []);
-
-    /**
-     * Send a HEAD request
-     *
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
+     * @param RequestInterface $request Request to send
+     * @param array            $options Request options to apply to the given
+     *                                  request and to the transfer.
      *
      * @return ResponseInterface
-     * @throws RequestException When an error is encountered
+     * @throws GuzzleException
      */
-    public function head($url = null, array $options = []);
+    public function send(RequestInterface $request, array $options = []);
 
     /**
-     * Send a DELETE request
+     * Asynchronously send an HTTP request.
      *
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
+     * @param RequestInterface $request Request to send
+     * @param array            $options Request options to apply to the given
+     *                                  request and to the transfer.
      *
-     * @return ResponseInterface
-     * @throws RequestException When an error is encountered
+     * @return PromiseInterface
      */
-    public function delete($url = null, array $options = []);
+    public function sendAsync(RequestInterface $request, array $options = []);
 
     /**
-     * Send a PUT request
-     *
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
+     * Create and send an HTTP request.
      *
-     * @return ResponseInterface
-     * @throws RequestException When an error is encountered
-     */
-    public function put($url = null, array $options = []);
-
-    /**
-     * Send a PATCH request
+     * Use an absolute path to override the base path of the client, or a
+     * relative path to append to the base path of the client. The URL can
+     * contain the query string as well.
      *
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
+     * @param string              $method  HTTP method
+     * @param string|UriInterface $uri     URI object or string.
+     * @param array               $options Request options to apply.
      *
      * @return ResponseInterface
-     * @throws RequestException When an error is encountered
+     * @throws GuzzleException
      */
-    public function patch($url = null, array $options = []);
+    public function request($method, $uri, array $options = []);
 
     /**
-     * Send a POST request
-     *
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
+     * Create and send an asynchronous HTTP request.
      *
-     * @return ResponseInterface
-     * @throws RequestException When an error is encountered
-     */
-    public function post($url = null, array $options = []);
-
-    /**
-     * Send an OPTIONS request
+     * Use an absolute path to override the base path of the client, or a
+     * relative path to append to the base path of the client. The URL can
+     * contain the query string as well. Use an array to provide a URL
+     * template and additional variables to use in the URL template expansion.
      *
-     * @param string|array|Url $url     URL or URI template
-     * @param array            $options Array of request options to apply.
+     * @param string              $method  HTTP method
+     * @param string|UriInterface $uri     URI object or string.
+     * @param array               $options Request options to apply.
      *
      * @return ResponseInterface
-     * @throws RequestException When an error is encountered
      */
-    public function options($url = null, array $options = []);
+    public function requestAsync($method, $uri, array $options = []);
 
     /**
-     * Sends a single request
-     *
-     * @param RequestInterface $request Request to send
+     * Get a client configuration option.
      *
-     * @return \GuzzleHttp\Message\ResponseInterface
-     * @throws \LogicException When the handler does not populate a response
-     * @throws RequestException When an error is encountered
-     */
-    public function send(RequestInterface $request);
-
-    /**
-     * Get default request options of the client.
+     * These options include default request options of the client, a "handler"
+     * (if utilized by the concrete client), and a "base_uri" if utilized by
+     * the concrete client.
      *
-     * @param string|null $keyOrPath The Path to a particular default request
-     *     option to retrieve or pass null to retrieve all default request
-     *     options. The syntax uses "/" to denote a path through nested PHP
-     *     arrays. For example, "headers/content-type".
+     * @param string|null $option The config option to retrieve.
      *
      * @return mixed
      */
-    public function getDefaultOption($keyOrPath = null);
-
-    /**
-     * Set a default request option on the client so that any request created
-     * by the client will use the provided default value unless overridden
-     * explicitly when creating a request.
-     *
-     * @param string|null $keyOrPath The Path to a particular configuration
-     *     value to set. The syntax uses a path notation that allows you to
-     *     specify nested configuration values (e.g., 'headers/content-type').
-     * @param mixed $value Default request option value to set
-     */
-    public function setDefaultOption($keyOrPath, $value);
-
-    /**
-     * Get the base URL of the client.
-     *
-     * @return string Returns the base URL if present
-     */
-    public function getBaseUrl();
+    public function getConfig($option = null);
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Collection.php b/core/vendor/guzzlehttp/guzzle/src/Collection.php
deleted file mode 100644
index 4aabd20..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Collection.php
+++ /dev/null
@@ -1,236 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Key value pair collection object
- */
-class Collection implements
-    \ArrayAccess,
-    \IteratorAggregate,
-    \Countable,
-    ToArrayInterface
-{
-    use HasDataTrait;
-
-    /**
-     * @param array $data Associative array of data to set
-     */
-    public function __construct(array $data = [])
-    {
-        $this->data = $data;
-    }
-
-    /**
-     * Create a new collection from an array, validate the keys, and add default
-     * values where missing
-     *
-     * @param array $config   Configuration values to apply.
-     * @param array $defaults Default parameters
-     * @param array $required Required parameter names
-     *
-     * @return self
-     * @throws \InvalidArgumentException if a parameter is missing
-     */
-    public static function fromConfig(
-        array $config = [],
-        array $defaults = [],
-        array $required = []
-    ) {
-        $data = $config + $defaults;
-
-        if ($missing = array_diff($required, array_keys($data))) {
-            throw new \InvalidArgumentException(
-                'Config is missing the following keys: ' .
-                implode(', ', $missing));
-        }
-
-        return new self($data);
-    }
-
-    /**
-     * Removes all key value pairs
-     */
-    public function clear()
-    {
-        $this->data = [];
-    }
-
-    /**
-     * Get a specific key value.
-     *
-     * @param string $key Key to retrieve.
-     *
-     * @return mixed|null Value of the key or NULL
-     */
-    public function get($key)
-    {
-        return isset($this->data[$key]) ? $this->data[$key] : null;
-    }
-
-    /**
-     * Set a key value pair
-     *
-     * @param string $key   Key to set
-     * @param mixed  $value Value to set
-     */
-    public function set($key, $value)
-    {
-        $this->data[$key] = $value;
-    }
-
-    /**
-     * Add a value to a key.  If a key of the same name has already been added,
-     * the key value will be converted into an array and the new value will be
-     * pushed to the end of the array.
-     *
-     * @param string $key   Key to add
-     * @param mixed  $value Value to add to the key
-     */
-    public function add($key, $value)
-    {
-        if (!array_key_exists($key, $this->data)) {
-            $this->data[$key] = $value;
-        } elseif (is_array($this->data[$key])) {
-            $this->data[$key][] = $value;
-        } else {
-            $this->data[$key] = array($this->data[$key], $value);
-        }
-    }
-
-    /**
-     * Remove a specific key value pair
-     *
-     * @param string $key A key to remove
-     */
-    public function remove($key)
-    {
-        unset($this->data[$key]);
-    }
-
-    /**
-     * Get all keys in the collection
-     *
-     * @return array
-     */
-    public function getKeys()
-    {
-        return array_keys($this->data);
-    }
-
-    /**
-     * Returns whether or not the specified key is present.
-     *
-     * @param string $key The key for which to check the existence.
-     *
-     * @return bool
-     */
-    public function hasKey($key)
-    {
-        return array_key_exists($key, $this->data);
-    }
-
-    /**
-     * Checks if any keys contains a certain value
-     *
-     * @param string $value Value to search for
-     *
-     * @return mixed Returns the key if the value was found FALSE if the value
-     *     was not found.
-     */
-    public function hasValue($value)
-    {
-        return array_search($value, $this->data, true);
-    }
-
-    /**
-     * Replace the data of the object with the value of an array
-     *
-     * @param array $data Associative array of data
-     */
-    public function replace(array $data)
-    {
-        $this->data = $data;
-    }
-
-    /**
-     * Add and merge in a Collection or array of key value pair data.
-     *
-     * @param Collection|array $data Associative array of key value pair data
-     */
-    public function merge($data)
-    {
-        foreach ($data as $key => $value) {
-            $this->add($key, $value);
-        }
-    }
-
-    /**
-     * Overwrite key value pairs in this collection with all of the data from
-     * an array or collection.
-     *
-     * @param array|\Traversable $data Values to override over this config
-     */
-    public function overwriteWith($data)
-    {
-        if (is_array($data)) {
-            $this->data = $data + $this->data;
-        } elseif ($data instanceof Collection) {
-            $this->data = $data->toArray() + $this->data;
-        } else {
-            foreach ($data as $key => $value) {
-                $this->data[$key] = $value;
-            }
-        }
-    }
-
-    /**
-     * Returns a Collection containing all the elements of the collection after
-     * applying the callback function to each one.
-     *
-     * The callable should accept three arguments:
-     * - (string) $key
-     * - (string) $value
-     * - (array) $context
-     *
-     * The callable must return a the altered or unaltered value.
-     *
-     * @param callable $closure Map function to apply
-     * @param array    $context Context to pass to the callable
-     *
-     * @return Collection
-     */
-    public function map(callable $closure, array $context = [])
-    {
-        $collection = new static();
-        foreach ($this as $key => $value) {
-            $collection[$key] = $closure($key, $value, $context);
-        }
-
-        return $collection;
-    }
-
-    /**
-     * Iterates over each key value pair in the collection passing them to the
-     * callable. If the callable returns true, the current value from input is
-     * returned into the result Collection.
-     *
-     * The callable must accept two arguments:
-     * - (string) $key
-     * - (string) $value
-     *
-     * @param callable $closure Evaluation function
-     *
-     * @return Collection
-     */
-    public function filter(callable $closure)
-    {
-        $collection = new static();
-        foreach ($this->data as $key => $value) {
-            if ($closure($key, $value)) {
-                $collection[$key] = $value;
-            }
-        }
-
-        return $collection;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
index f8ac7dd..4270469 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
@@ -1,14 +1,13 @@
 <?php
 namespace GuzzleHttp\Cookie;
 
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\ToArrayInterface;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
 
 /**
  * Cookie jar that stores cookies an an array
  */
-class CookieJar implements CookieJarInterface, ToArrayInterface
+class CookieJar implements CookieJarInterface
 {
     /** @var SetCookie[] Loaded cookie data */
     private $cookies = [];
@@ -194,23 +193,24 @@ public function extractCookies(
         RequestInterface $request,
         ResponseInterface $response
     ) {
-        if ($cookieHeader = $response->getHeaderAsArray('Set-Cookie')) {
+        if ($cookieHeader = $response->getHeader('Set-Cookie')) {
             foreach ($cookieHeader as $cookie) {
                 $sc = SetCookie::fromString($cookie);
                 if (!$sc->getDomain()) {
-                    $sc->setDomain($request->getHost());
+                    $sc->setDomain($request->getUri()->getHost());
                 }
                 $this->setCookie($sc);
             }
         }
     }
 
-    public function addCookieHeader(RequestInterface $request)
+    public function withCookieHeader(RequestInterface $request)
     {
         $values = [];
-        $scheme = $request->getScheme();
-        $host = $request->getHost();
-        $path = $request->getPath();
+        $uri = $request->getUri();
+        $scheme = $uri->getScheme();
+        $host = $uri->getHost();
+        $path = $uri->getPath() ?: '/';
 
         foreach ($this->cookies as $cookie) {
             if ($cookie->matchesPath($path) &&
@@ -223,9 +223,9 @@ public function addCookieHeader(RequestInterface $request)
             }
         }
 
-        if ($values) {
-            $request->setHeader('Cookie', implode('; ', $values));
-        }
+        return $values
+            ? $request->withHeader('Cookie', implode('; ', $values))
+            : $request;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
index 4ea8567..2cf298a 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
@@ -1,8 +1,8 @@
 <?php
 namespace GuzzleHttp\Cookie;
 
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
 
 /**
  * Stores HTTP cookies.
@@ -17,14 +17,16 @@
 interface CookieJarInterface extends \Countable, \IteratorAggregate
 {
     /**
-     * Add a Cookie header to a request.
+     * Create a request with added cookie headers.
      *
      * If no matching cookies are found in the cookie jar, then no Cookie
-     * header is added to the request.
+     * header is added to the request and the same request is returned.
      *
-     * @param RequestInterface $request Request object to update
+     * @param RequestInterface $request Request object to modify.
+     *
+     * @return RequestInterface returns the modified request.
      */
-    public function addCookieHeader(RequestInterface $request);
+    public function withCookieHeader(RequestInterface $request);
 
     /**
      * Extract cookies from an HTTP response and store them in the CookieJar.
@@ -72,4 +74,11 @@ public function clear($domain = null, $path = null, $name = null);
      * to RFC 2965.
      */
     public function clearSessionCookies();
+
+    /**
+     * Converts the cookie jar to an array.
+     *
+     * @return array
+     */
+    public function toArray();
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
index e431851..28cfad5 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
@@ -1,8 +1,6 @@
 <?php
 namespace GuzzleHttp\Cookie;
 
-use GuzzleHttp\Utils;
-
 /**
  * Persists non-session cookies using a JSON formatted file
  */
@@ -45,15 +43,14 @@ public function save($filename)
     {
         $json = [];
         foreach ($this as $cookie) {
+            /** @var SetCookie $cookie */
             if ($cookie->getExpires() && !$cookie->getDiscard()) {
                 $json[] = $cookie->toArray();
             }
         }
 
         if (false === file_put_contents($filename, json_encode($json))) {
-            // @codeCoverageIgnoreStart
             throw new \RuntimeException("Unable to save file {$filename}");
-            // @codeCoverageIgnoreEnd
         }
     }
 
@@ -69,14 +66,12 @@ public function load($filename)
     {
         $json = file_get_contents($filename);
         if (false === $json) {
-            // @codeCoverageIgnoreStart
             throw new \RuntimeException("Unable to load file {$filename}");
-            // @codeCoverageIgnoreEnd
         }
 
-        $data = Utils::jsonDecode($json, true);
+        $data = json_decode($json, true);
         if (is_array($data)) {
-            foreach (Utils::jsonDecode($json, true) as $cookie) {
+            foreach (json_decode($json, true) as $cookie) {
                 $this->setCookie(new SetCookie($cookie));
             }
         } elseif (strlen($data)) {
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
index 71a02d5..1688eb6 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
@@ -1,8 +1,6 @@
 <?php
 namespace GuzzleHttp\Cookie;
 
-use GuzzleHttp\Utils;
-
 /**
  * Persists cookies in the client session
  */
@@ -37,6 +35,7 @@ public function save()
     {
         $json = [];
         foreach ($this as $cookie) {
+            /** @var SetCookie $cookie */
             if ($cookie->getExpires() && !$cookie->getDiscard()) {
                 $json[] = $cookie->toArray();
             }
@@ -54,7 +53,7 @@ protected function load()
             ? $_SESSION[$this->sessionKey]
             : null;
 
-        $data = Utils::jsonDecode($cookieJar, true);
+        $data = json_decode($cookieJar, true);
         if (is_array($data)) {
             foreach ($data as $cookie) {
                 $this->setCookie(new SetCookie($cookie));
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
index ac9a890..cf31906 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
@@ -1,12 +1,10 @@
 <?php
 namespace GuzzleHttp\Cookie;
 
-use GuzzleHttp\ToArrayInterface;
-
 /**
  * Set-Cookie object
  */
-class SetCookie implements ToArrayInterface
+class SetCookie
 {
     /** @var array */
     private static $defaults = [
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
deleted file mode 100644
index 0d2f4db..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Basic event class that can be extended.
- */
-abstract class AbstractEvent implements EventInterface
-{
-    private $propagationStopped = false;
-
-    public function isPropagationStopped()
-    {
-        return $this->propagationStopped;
-    }
-
-    public function stopPropagation()
-    {
-        $this->propagationStopped = true;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
deleted file mode 100644
index 8c8fbc9..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-use GuzzleHttp\Transaction;
-use GuzzleHttp\ClientInterface;
-use GuzzleHttp\Message\RequestInterface;
-
-/**
- * Base class for request events, providing a request and client getter.
- */
-abstract class AbstractRequestEvent extends AbstractEvent
-{
-    /** @var Transaction */
-    protected $transaction;
-
-    /**
-     * @param Transaction $transaction
-     */
-    public function __construct(Transaction $transaction)
-    {
-        $this->transaction = $transaction;
-    }
-
-    /**
-     * Get the HTTP client associated with the event.
-     *
-     * @return ClientInterface
-     */
-    public function getClient()
-    {
-        return $this->transaction->client;
-    }
-
-    /**
-     * Get the request object
-     *
-     * @return RequestInterface
-     */
-    public function getRequest()
-    {
-        return $this->transaction->request;
-    }
-
-    /**
-     * Get the number of transaction retries.
-     *
-     * @return int
-     */
-    public function getRetryCount()
-    {
-        return $this->transaction->retries;
-    }
-
-    /**
-     * @return Transaction
-     */
-    protected function getTransaction()
-    {
-        return $this->transaction;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php
deleted file mode 100644
index bbbdfaf..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Abstract request event that can be retried.
- */
-class AbstractRetryableEvent extends AbstractTransferEvent
-{
-    /**
-     * Mark the request as needing a retry and stop event propagation.
-     *
-     * This action allows you to retry a request without emitting the "end"
-     * event multiple times for a given request. When retried, the request
-     * emits a before event and is then sent again using the client that sent
-     * the original request.
-     *
-     * When retrying, it is important to limit the number of retries you allow
-     * to prevent infinite loops.
-     *
-     * This action can only be taken during the "complete" and "error" events.
-     *
-     * @param int $afterDelay If specified, the amount of time in milliseconds
-     *                        to delay before retrying. Note that this must
-     *                        be supported by the underlying RingPHP handler
-     *                        to work properly. Set to 0 or provide no value
-     *                        to retry immediately.
-     */
-    public function retry($afterDelay = 0)
-    {
-        // Setting the transition state to 'retry' will cause the next state
-        // transition of the transaction to retry the request.
-        $this->transaction->state = 'retry';
-
-        if ($afterDelay) {
-            $this->transaction->request->getConfig()->set('delay', $afterDelay);
-        }
-
-        $this->stopPropagation();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php
deleted file mode 100644
index 3b106df..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Ring\Future\FutureInterface;
-
-/**
- * Event that contains transfer statistics, and can be intercepted.
- */
-abstract class AbstractTransferEvent extends AbstractRequestEvent
-{
-    /**
-     * Get all transfer information as an associative array if no $name
-     * argument is supplied, or gets a specific transfer statistic if
-     * a $name attribute is supplied (e.g., 'total_time').
-     *
-     * @param string $name Name of the transfer stat to retrieve
-     *
-     * @return mixed|null|array
-     */
-    public function getTransferInfo($name = null)
-    {
-        if (!$name) {
-            return $this->transaction->transferInfo;
-        }
-
-        return isset($this->transaction->transferInfo[$name])
-            ? $this->transaction->transferInfo[$name]
-            : null;
-    }
-
-    /**
-     * Returns true/false if a response is available.
-     *
-     * @return bool
-     */
-    public function hasResponse()
-    {
-        return !($this->transaction->response instanceof FutureInterface);
-    }
-
-    /**
-     * Get the response.
-     *
-     * @return ResponseInterface|null
-     */
-    public function getResponse()
-    {
-        return $this->hasResponse() ? $this->transaction->response : null;
-    }
-
-    /**
-     * Intercept the request and associate a response
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function intercept(ResponseInterface $response)
-    {
-        $this->transaction->response = $response;
-        $this->transaction->exception = null;
-        $this->stopPropagation();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php
deleted file mode 100644
index f313c37..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Event object emitted before a request is sent.
- *
- * This event MAY be emitted multiple times (i.e., if a request is retried).
- * You MAY change the Response associated with the request using the
- * intercept() method of the event.
- */
-class BeforeEvent extends AbstractRequestEvent
-{
-    /**
-     * Intercept the request and associate a response
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function intercept(ResponseInterface $response)
-    {
-        $this->transaction->response = $response;
-        $this->transaction->exception = null;
-        $this->stopPropagation();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
deleted file mode 100644
index 56cc557..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Event object emitted after a request has been completed.
- *
- * This event MAY be emitted multiple times for a single request. You MAY
- * change the Response associated with the request using the intercept()
- * method of the event.
- *
- * This event allows the request to be retried if necessary using the retry()
- * method of the event.
- */
-class CompleteEvent extends AbstractRetryableEvent {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php b/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
deleted file mode 100644
index 536317a..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Guzzle event emitter.
- *
- * Some of this class is based on the Symfony EventDispatcher component, which
- * ships with the following license:
- *
- *     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.
- *
- * @link https://github.com/symfony/symfony/tree/master/src/Symfony/Component/EventDispatcher
- */
-class Emitter implements EmitterInterface
-{
-    /** @var array */
-    private $listeners = [];
-
-    /** @var array */
-    private $sorted = [];
-
-    public function on($eventName, callable $listener, $priority = 0)
-    {
-        if ($priority === 'first') {
-            $priority = isset($this->listeners[$eventName])
-                ? max(array_keys($this->listeners[$eventName])) + 1
-                : 1;
-        } elseif ($priority === 'last') {
-            $priority = isset($this->listeners[$eventName])
-                ? min(array_keys($this->listeners[$eventName])) - 1
-                : -1;
-        }
-
-        $this->listeners[$eventName][$priority][] = $listener;
-        unset($this->sorted[$eventName]);
-    }
-
-    public function once($eventName, callable $listener, $priority = 0)
-    {
-        $onceListener = function (
-            EventInterface $event,
-            $eventName
-        ) use (&$onceListener, $eventName, $listener, $priority) {
-            $this->removeListener($eventName, $onceListener);
-            $listener($event, $eventName, $this);
-        };
-
-        $this->on($eventName, $onceListener, $priority);
-    }
-
-    public function removeListener($eventName, callable $listener)
-    {
-        if (empty($this->listeners[$eventName])) {
-            return;
-        }
-
-        foreach ($this->listeners[$eventName] as $priority => $listeners) {
-            if (false !== ($key = array_search($listener, $listeners, true))) {
-                unset(
-                    $this->listeners[$eventName][$priority][$key],
-                    $this->sorted[$eventName]
-                );
-            }
-        }
-    }
-
-    public function listeners($eventName = null)
-    {
-        // Return all events in a sorted priority order
-        if ($eventName === null) {
-            foreach (array_keys($this->listeners) as $eventName) {
-                if (empty($this->sorted[$eventName])) {
-                    $this->listeners($eventName);
-                }
-            }
-            return $this->sorted;
-        }
-
-        // Return the listeners for a specific event, sorted in priority order
-        if (empty($this->sorted[$eventName])) {
-            $this->sorted[$eventName] = [];
-            if (isset($this->listeners[$eventName])) {
-                krsort($this->listeners[$eventName], SORT_NUMERIC);
-                foreach ($this->listeners[$eventName] as $listeners) {
-                    foreach ($listeners as $listener) {
-                        $this->sorted[$eventName][] = $listener;
-                    }
-                }
-            }
-        }
-
-        return $this->sorted[$eventName];
-    }
-
-    public function hasListeners($eventName)
-    {
-        return !empty($this->listeners[$eventName]);
-    }
-
-    public function emit($eventName, EventInterface $event)
-    {
-        if (isset($this->listeners[$eventName])) {
-            foreach ($this->listeners($eventName) as $listener) {
-                $listener($event, $eventName);
-                if ($event->isPropagationStopped()) {
-                    break;
-                }
-            }
-        }
-
-        return $event;
-    }
-
-    public function attach(SubscriberInterface $subscriber)
-    {
-        foreach ($subscriber->getEvents() as $eventName => $listeners) {
-            if (is_array($listeners[0])) {
-                foreach ($listeners as $listener) {
-                    $this->on(
-                        $eventName,
-                        [$subscriber, $listener[0]],
-                        isset($listener[1]) ? $listener[1] : 0
-                    );
-                }
-            } else {
-                $this->on(
-                    $eventName,
-                    [$subscriber, $listeners[0]],
-                    isset($listeners[1]) ? $listeners[1] : 0
-                );
-            }
-        }
-    }
-
-    public function detach(SubscriberInterface $subscriber)
-    {
-        foreach ($subscriber->getEvents() as $eventName => $listener) {
-            $this->removeListener($eventName, [$subscriber, $listener[0]]);
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
deleted file mode 100644
index 9783efd..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Guzzle event emitter.
- */
-interface EmitterInterface
-{
-    /**
-     * Binds a listener to a specific event.
-     *
-     * @param string     $eventName Name of the event to bind to.
-     * @param callable   $listener  Listener to invoke when triggered.
-     * @param int|string $priority  The higher this value, the earlier an event
-     *     listener will be triggered in the chain (defaults to 0). You can
-     *     pass "first" or "last" to dynamically specify the event priority
-     *     based on the current event priorities associated with the given
-     *     event name in the emitter. Use "first" to set the priority to the
-     *     current highest priority plus one. Use "last" to set the priority to
-     *     the current lowest event priority minus one.
-     */
-    public function on($eventName, callable $listener, $priority = 0);
-
-    /**
-     * Binds a listener to a specific event. After the listener is triggered
-     * once, it is removed as a listener.
-     *
-     * @param string   $eventName Name of the event to bind to.
-     * @param callable $listener  Listener to invoke when triggered.
-     * @param int      $priority  The higher this value, the earlier an event
-     *     listener will be triggered in the chain (defaults to 0)
-     */
-    public function once($eventName, callable $listener, $priority = 0);
-
-    /**
-     * Removes an event listener from the specified event.
-     *
-     * @param string   $eventName The event to remove a listener from
-     * @param callable $listener  The listener to remove
-     */
-    public function removeListener($eventName, callable $listener);
-
-    /**
-     * Gets the listeners of a specific event or all listeners if no event is
-     * specified.
-     *
-     * @param string $eventName The name of the event. Pass null (the default)
-     *     to retrieve all listeners.
-     *
-     * @return array The event listeners for the specified event, or all event
-     *   listeners by event name. The format of the array when retrieving a
-     *   specific event list is an array of callables. The format of the array
-     *   when retrieving all listeners is an associative array of arrays of
-     *   callables.
-     */
-    public function listeners($eventName = null);
-
-    /**
-     * Checks if the emitter has listeners by the given name.
-     *
-     * @param string $eventName The name of the event to check.
-     *
-     * @return bool
-     */
-    public function hasListeners($eventName);
-
-    /**
-     * Emits an event to all registered listeners.
-     *
-     * Each event that is bound to the emitted eventName receives a
-     * EventInterface, the name of the event, and the event emitter.
-     *
-     * @param string         $eventName The name of the event to dispatch.
-     * @param EventInterface $event     The event to pass to the event handlers/listeners.
-     *
-     * @return EventInterface Returns the provided event object
-     */
-    public function emit($eventName, EventInterface $event);
-
-    /**
-     * Attaches an event subscriber.
-     *
-     * The subscriber is asked for all the events it is interested in and added
-     * as an event listener for each event.
-     *
-     * @param SubscriberInterface $subscriber Subscriber to attach.
-     */
-    public function attach(SubscriberInterface $subscriber);
-
-    /**
-     * Detaches an event subscriber.
-     *
-     * @param SubscriberInterface $subscriber Subscriber to detach.
-     */
-    public function detach(SubscriberInterface $subscriber);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php
deleted file mode 100644
index c89432b..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * A terminal event that is emitted when a request transaction has ended.
- *
- * This event is emitted for both successful responses and responses that
- * encountered an exception. You need to check if an exception is present
- * in your listener to know the difference.
- *
- * You MAY intercept the response associated with the event if needed, but keep
- * in mind that the "complete" event will not be triggered as a result.
- */
-class EndEvent extends AbstractTransferEvent
-{
-    /**
-     * Get the exception that was encountered (if any).
-     *
-     * This method should be used to check if the request was sent successfully
-     * or if it encountered errors.
-     *
-     * @return \Exception|null
-     */
-    public function getException()
-    {
-        return $this->transaction->exception;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php
deleted file mode 100644
index 7432134..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-use GuzzleHttp\Exception\RequestException;
-
-/**
- * Event emitted when an error occurs while sending a request.
- *
- * This event MAY be emitted multiple times. You MAY intercept the exception
- * and inject a response into the event to rescue the request using the
- * intercept() method of the event.
- *
- * This event allows the request to be retried using the "retry" method of the
- * event.
- */
-class ErrorEvent extends AbstractRetryableEvent
-{
-    /**
-     * Get the exception that was encountered
-     *
-     * @return RequestException
-     */
-    public function getException()
-    {
-        return $this->transaction->exception;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
deleted file mode 100644
index 97247e8..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Base event interface used when dispatching events to listeners using an
- * event emitter.
- */
-interface EventInterface
-{
-    /**
-     * Returns whether or not stopPropagation was called on the event.
-     *
-     * @return bool
-     * @see Event::stopPropagation
-     */
-    public function isPropagationStopped();
-
-    /**
-     * Stops the propagation of the event, preventing subsequent listeners
-     * registered to the same event from being invoked.
-     */
-    public function stopPropagation();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
deleted file mode 100644
index a1a8612..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Holds an event emitter
- */
-interface HasEmitterInterface
-{
-    /**
-     * Get the event emitter of the object
-     *
-     * @return EmitterInterface
-     */
-    public function getEmitter();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
deleted file mode 100644
index 8e36ce3..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Trait that implements the methods of HasEmitterInterface
- */
-trait HasEmitterTrait
-{
-    /** @var EmitterInterface */
-    private $emitter;
-
-    public function getEmitter()
-    {
-        if (!$this->emitter) {
-            $this->emitter = new Emitter();
-        }
-
-        return $this->emitter;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php b/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
deleted file mode 100644
index 407dc92..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Trait that provides methods for extract event listeners specified in an array
- * and attaching them to an emitter owned by the object or one of its direct
- * dependencies.
- */
-trait ListenerAttacherTrait
-{
-    /**
-     * Attaches event listeners and properly sets their priorities and whether
-     * or not they are are only executed once.
-     *
-     * @param HasEmitterInterface $object    Object that has the event emitter.
-     * @param array               $listeners Array of hashes representing event
-     *                                       event listeners. Each item contains
-     *                                       "name", "fn", "priority", & "once".
-     */
-    private function attachListeners(HasEmitterInterface $object, array $listeners)
-    {
-        $emitter = $object->getEmitter();
-        foreach ($listeners as $el) {
-            if ($el['once']) {
-                $emitter->once($el['name'], $el['fn'], $el['priority']);
-            } else {
-                $emitter->on($el['name'], $el['fn'], $el['priority']);
-            }
-        }
-    }
-
-    /**
-     * Extracts the allowed events from the provided array, and ignores anything
-     * else in the array. The event listener must be specified as a callable or
-     * as an array of event listener data ("name", "fn", "priority", "once").
-     *
-     * @param array $source Array containing callables or hashes of data to be
-     *                      prepared as event listeners.
-     * @param array $events Names of events to look for in the provided $source
-     *                      array. Other keys are ignored.
-     * @return array
-     */
-    private function prepareListeners(array $source, array $events)
-    {
-        $listeners = [];
-        foreach ($events as $name) {
-            if (isset($source[$name])) {
-                $this->buildListener($name, $source[$name], $listeners);
-            }
-        }
-
-        return $listeners;
-    }
-
-    /**
-     * Creates a complete event listener definition from the provided array of
-     * listener data. Also works recursively if more than one listeners are
-     * contained in the provided array.
-     *
-     * @param string         $name      Name of the event the listener is for.
-     * @param array|callable $data      Event listener data to prepare.
-     * @param array          $listeners Array of listeners, passed by reference.
-     *
-     * @throws \InvalidArgumentException if the event data is malformed.
-     */
-    private function buildListener($name, $data, &$listeners)
-    {
-        static $defaults = ['priority' => 0, 'once' => false];
-
-        // If a callable is provided, normalize it to the array format.
-        if (is_callable($data)) {
-            $data = ['fn' => $data];
-        }
-
-        // Prepare the listener and add it to the array, recursively.
-        if (isset($data['fn'])) {
-            $data['name'] = $name;
-            $listeners[] = $data + $defaults;
-        } elseif (is_array($data)) {
-            foreach ($data as $listenerData) {
-                $this->buildListener($name, $listenerData, $listeners);
-            }
-        } else {
-            throw new \InvalidArgumentException('Each event listener must be a '
-                . 'callable or an associative array containing a "fn" key.');
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php
deleted file mode 100644
index 3fd0de4..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-use GuzzleHttp\Transaction;
-
-/**
- * Event object emitted when upload or download progress is made.
- *
- * You can access the progress values using their corresponding public
- * properties:
- *
- * - $downloadSize: The number of bytes that will be downloaded (if known)
- * - $downloaded: The number of bytes that have been downloaded
- * - $uploadSize: The number of bytes that will be uploaded (if known)
- * - $uploaded: The number of bytes that have been uploaded
- */
-class ProgressEvent extends AbstractRequestEvent
-{
-    /** @var int Amount of data to be downloaded */
-    public $downloadSize;
-
-    /** @var int Amount of data that has been downloaded */
-    public $downloaded;
-
-    /** @var int Amount of data to upload */
-    public $uploadSize;
-
-    /** @var int Amount of data that has been uploaded */
-    public $uploaded;
-
-    /**
-     * @param Transaction $transaction  Transaction being sent.
-     * @param int         $downloadSize Amount of data to download (if known)
-     * @param int         $downloaded   Amount of data that has been downloaded
-     * @param int         $uploadSize   Amount of data to upload (if known)
-     * @param int         $uploaded     Amount of data that had been uploaded
-     */
-    public function __construct(
-        Transaction $transaction,
-        $downloadSize,
-        $downloaded,
-        $uploadSize,
-        $uploaded
-    ) {
-        parent::__construct($transaction);
-        $this->downloadSize = $downloadSize;
-        $this->downloaded = $downloaded;
-        $this->uploadSize = $uploadSize;
-        $this->uploaded = $uploaded;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php b/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php
deleted file mode 100644
index f51d420..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * Contains methods used to manage the request event lifecycle.
- */
-final class RequestEvents
-{
-    // Generic event priorities
-    const EARLY = 10000;
-    const LATE = -10000;
-
-    // "before" priorities
-    const PREPARE_REQUEST = -100;
-    const SIGN_REQUEST = -10000;
-
-    // "complete" and "error" response priorities
-    const VERIFY_RESPONSE = 100;
-    const REDIRECT_RESPONSE = 200;
-
-    /**
-     * Converts an array of event options into a formatted array of valid event
-     * configuration.
-     *
-     * @param array $options Event array to convert
-     * @param array $events  Event names to convert in the options array.
-     * @param mixed $handler Event handler to utilize
-     *
-     * @return array
-     * @throws \InvalidArgumentException if the event config is invalid
-     * @internal
-     */
-    public static function convertEventArray(
-        array $options,
-        array $events,
-        $handler
-    ) {
-        foreach ($events as $name) {
-            if (!isset($options[$name])) {
-                $options[$name] = [$handler];
-            } elseif (is_callable($options[$name])) {
-                $options[$name] = [$options[$name], $handler];
-            } elseif (is_array($options[$name])) {
-                if (isset($options[$name]['fn'])) {
-                    $options[$name] = [$options[$name], $handler];
-                } else {
-                    $options[$name][] = $handler;
-                }
-            } else {
-                throw new \InvalidArgumentException('Invalid event format');
-            }
-        }
-
-        return $options;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
deleted file mode 100644
index 33d7702..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-namespace GuzzleHttp\Event;
-
-/**
- * SubscriberInterface provides an array of events to an
- * EventEmitterInterface when it is registered. The emitter then binds the
- * listeners specified by the EventSubscriber.
- *
- * This interface is based on the SubscriberInterface of the Symfony.
- * @link https://github.com/symfony/symfony/tree/master/src/Symfony/Component/EventDispatcher
- */
-interface SubscriberInterface
-{
-    /**
-     * Returns an array of event names this subscriber wants to listen to.
-     *
-     * The returned array keys MUST map to an event name. Each array value
-     * MUST be an array in which the first element is the name of a function
-     * on the EventSubscriber OR an array of arrays in the aforementioned
-     * format. The second element in the array is optional, and if specified,
-     * designates the event priority.
-     *
-     * For example, the following are all valid:
-     *
-     *  - ['eventName' => ['methodName']]
-     *  - ['eventName' => ['methodName', $priority]]
-     *  - ['eventName' => [['methodName'], ['otherMethod']]
-     *  - ['eventName' => [['methodName'], ['otherMethod', $priority]]
-     *  - ['eventName' => [['methodName', $priority], ['otherMethod', $priority]]
-     *
-     * @return array
-     */
-    public function getEvents();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
index a91c5a6..d33b0cc 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
@@ -1,4 +1,37 @@
 <?php
 namespace GuzzleHttp\Exception;
 
-class ConnectException extends RequestException {}
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * Exception thrown when a connection cannot be established.
+ *
+ * Note that no response is present for a ConnectException
+ */
+class ConnectException extends RequestException
+{
+    public function __construct(
+        $message,
+        RequestInterface $request,
+        \Exception $previous = null,
+        array $handlerContext = []
+    ) {
+        parent::__construct($message, $request, null, $previous, $handlerContext);
+    }
+
+    /**
+     * @return null
+     */
+    public function getResponse()
+    {
+        return null;
+    }
+
+    /**
+     * @return bool
+     */
+    public function hasResponse()
+    {
+        return false;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
deleted file mode 100644
index fbe2dcd..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-class CouldNotRewindStreamException extends RequestException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
new file mode 100644
index 0000000..c82998e
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Exception;
+
+interface GuzzleException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
deleted file mode 100644
index e593e3d..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Exception when a client is unable to parse the response body as XML or JSON
- */
-class ParseException extends TransferException
-{
-    /** @var ResponseInterface */
-    private $response;
-
-    public function __construct(
-        $message = '',
-        ResponseInterface $response = null,
-        \Exception $previous = null
-    ) {
-        parent::__construct($message, 0, $previous);
-        $this->response = $response;
-    }
-    /**
-     * Get the associated response
-     *
-     * @return ResponseInterface|null
-     */
-    public function getResponse()
-    {
-        return $this->response;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
index f81d248..ebf0975 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
@@ -1,11 +1,9 @@
 <?php
 namespace GuzzleHttp\Exception;
 
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Ring\Exception\ConnectException;
-use GuzzleHttp\Exception\ConnectException as HttpConnectException;
-use GuzzleHttp\Ring\Future\FutureInterface;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use GuzzleHttp\Promise\PromiseInterface;
 
 /**
  * HTTP Request exception
@@ -18,23 +16,28 @@ class RequestException extends TransferException
     /** @var ResponseInterface */
     private $response;
 
+    /** @var array */
+    private $handlerContext;
+
     public function __construct(
         $message,
         RequestInterface $request,
         ResponseInterface $response = null,
-        \Exception $previous = null
+        \Exception $previous = null,
+        array $handlerContext = []
     ) {
         // Set the code of the exception if the response is set and not future.
-        $code = $response && !($response instanceof FutureInterface)
+        $code = $response && !($response instanceof PromiseInterface)
             ? $response->getStatusCode()
             : 0;
         parent::__construct($message, $code, $previous);
         $this->request = $request;
         $this->response = $response;
+        $this->handlerContext = $handlerContext;
     }
 
     /**
-     * Wrap non-RequesExceptions with a RequestException
+     * Wrap non-RequestExceptions with a RequestException
      *
      * @param RequestInterface $request
      * @param \Exception       $e
@@ -43,13 +46,9 @@ public function __construct(
      */
     public static function wrapException(RequestInterface $request, \Exception $e)
     {
-        if ($e instanceof RequestException) {
-            return $e;
-        } elseif ($e instanceof ConnectException) {
-            return new HttpConnectException($e->getMessage(), $request, null, $e);
-        } else {
-            return new RequestException($e->getMessage(), $request, null, $e);
-        }
+        return $e instanceof RequestException
+            ? $e
+            : new RequestException($e->getMessage(), $request, null, $e);
     }
 
     /**
@@ -58,16 +57,24 @@ public static function wrapException(RequestInterface $request, \Exception $e)
      * @param RequestInterface  $request  Request
      * @param ResponseInterface $response Response received
      * @param \Exception        $previous Previous exception
+     * @param array             $ctx      Optional handler context.
      *
      * @return self
      */
     public static function create(
         RequestInterface $request,
         ResponseInterface $response = null,
-        \Exception $previous = null
+        \Exception $previous = null,
+        array $ctx = []
     ) {
         if (!$response) {
-            return new self('Error completing request', $request, null, $previous);
+            return new self(
+                'Error completing request',
+                $request,
+                null,
+                $previous,
+                $ctx
+            );
         }
 
         $level = floor($response->getStatusCode() / 100);
@@ -82,11 +89,11 @@ public static function create(
             $className = __CLASS__;
         }
 
-        $message = $label . ' [url] ' . $request->getUrl()
+        $message = $label . ' [url] ' . $request->getUri()
             . ' [status code] ' . $response->getStatusCode()
             . ' [reason phrase] ' . $response->getReasonPhrase();
 
-        return new $className($message, $request, $response, $previous);
+        return new $className($message, $request, $response, $previous, $ctx);
     }
 
     /**
@@ -118,4 +125,19 @@ public function hasResponse()
     {
         return $this->response !== null;
     }
+
+    /**
+     * Get contextual information about the error from the underlying handler.
+     *
+     * The contents of this array will vary depending on which handler you are
+     * using. It may also be just an empty array. Relying on this data will
+     * couple you to a specific handler, but can give more debug information
+     * when needed.
+     *
+     * @return array
+     */
+    public function getHandlerContext()
+    {
+        return $this->handlerContext;
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php
similarity index 75%
rename from core/vendor/guzzlehttp/streams/src/Exception/SeekException.php
rename to core/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php
index 3f6d5eb..a77c289 100644
--- a/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php
@@ -1,12 +1,12 @@
 <?php
-namespace GuzzleHttp\Stream\Exception;
+namespace GuzzleHttp\Exception;
 
-use GuzzleHttp\Stream\StreamInterface;
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Exception thrown when a seek fails on a stream.
  */
-class SeekException extends \RuntimeException
+class SeekException extends \RuntimeException implements GuzzleException
 {
     private $stream;
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php
deleted file mode 100644
index a7652a3..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-class StateException extends TransferException {};
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
index 92d7de6..b92071c 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
@@ -1,4 +1,4 @@
 <?php
 namespace GuzzleHttp\Exception;
 
-class TransferException extends \RuntimeException {}
+class TransferException extends \RuntimeException implements GuzzleException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/XmlParseException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/XmlParseException.php
deleted file mode 100644
index a4a1a0a..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/XmlParseException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Exception;
-
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Exception when a client is unable to parse the response body as XML
- */
-class XmlParseException extends ParseException
-{
-    /** @var \LibXMLError */
-    protected $error;
-
-    public function __construct(
-        $message = '',
-        ResponseInterface $response = null,
-        \Exception $previous = null,
-        \LibXMLError $error = null
-    ) {
-        parent::__construct($message, $response, $previous);
-        $this->error = $error;
-    }
-
-    /**
-     * Get the associated error
-     *
-     * @return \LibXMLError|null
-     */
-    public function getError()
-    {
-        return $this->error;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
new file mode 100644
index 0000000..f6a0ea1
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
@@ -0,0 +1,497 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Exception\ConnectException;
+use GuzzleHttp\Promise\FulfilledPromise;
+use GuzzleHttp\Promise\RejectedPromise;
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\LazyOpenStream;
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * Creates curl resources from a request
+ */
+class CurlFactory implements CurlFactoryInterface
+{
+    /** @var array */
+    private $handles;
+
+    /** @var int Total number of idle handles to keep in cache */
+    private $maxHandles;
+
+    /**
+     * @param int $maxHandles Maximum number of idle handles.
+     */
+    public function __construct($maxHandles)
+    {
+        $this->maxHandles = $maxHandles;
+    }
+
+    public function create(RequestInterface $request, array $options)
+    {
+        $easy = new EasyHandle;
+        $easy->request = $request;
+        $easy->options = $options;
+        $conf = $this->getDefaultConf($easy);
+        $this->applyMethod($easy, $conf);
+        $this->applyHandlerOptions($easy, $conf);
+        $this->applyHeaders($easy, $conf);
+        unset($conf['_headers']);
+
+        if (isset($options['curl']['body_as_string'])) {
+            $options['_body_as_string'] = $options['curl']['body_as_string'];
+            unset($options['curl']['body_as_string']);
+        }
+
+        // Add handler options from the request configuration options
+        if (isset($options['curl'])) {
+            $conf += $options['curl'];
+        }
+
+        $conf[CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy);
+        $easy->handle = $this->handles
+            ? array_pop($this->handles)
+            : curl_init();
+        curl_setopt_array($easy->handle, $conf);
+
+        return $easy;
+    }
+
+    public function release(EasyHandle $easy)
+    {
+        $resource = $easy->handle;
+        unset($easy->handle);
+
+        if (count($this->handles) >= $this->maxHandles) {
+            curl_close($resource);
+        } else {
+            curl_reset($resource);
+            $this->handles[] = $resource;
+        }
+    }
+
+    /**
+     * Completes a cURL transaction, either returning a response promise or a
+     * rejected promise.
+     *
+     * @param callable             $handler
+     * @param EasyHandle           $easy
+     * @param CurlFactoryInterface $factory Dictates how the handle is released
+     *
+     * @return \GuzzleHttp\Promise\PromiseInterface
+     */
+    public static function finish(
+        callable $handler,
+        EasyHandle $easy,
+        CurlFactoryInterface $factory
+    ) {
+        if (!$easy->response || $easy->errno) {
+            return self::finishError($handler, $easy, $factory);
+        }
+
+        // Return the response if it is present and there is no error.
+        $factory->release($easy);
+
+        // Rewind the body of the response if possible.
+        $body = $easy->response->getBody();
+        if ($body->isSeekable()) {
+            $body->rewind();
+        }
+
+        return new FulfilledPromise($easy->response);
+    }
+
+    private static function finishError(
+        callable $handler,
+        EasyHandle $easy,
+        CurlFactoryInterface $factory
+    ) {
+        // Get error information and release the handle to the factory.
+        $ctx = [
+            'errno'  => $easy->errno,
+            'error' => curl_error($easy->handle)
+                ?: curl_strerror($easy->errno)
+        ] + curl_getinfo($easy->handle);
+        $factory->release($easy);
+
+        // Retry when nothing is present or when curl failed to rewind.
+        if (empty($easy->options['_err_message'])
+            && (!$easy->errno || $easy->errno == 65)
+        ) {
+            return self::retryFailedRewind($handler, $easy, $ctx);
+        }
+
+        return self::createRejection($easy, $ctx);
+    }
+
+    private static function createRejection(EasyHandle $easy, array $ctx)
+    {
+        static $connectionErrors = [
+            CURLE_OPERATION_TIMEOUTED  => true,
+            CURLE_COULDNT_RESOLVE_HOST => true,
+            CURLE_COULDNT_CONNECT      => true,
+            CURLE_SSL_CONNECT_ERROR    => true,
+            CURLE_GOT_NOTHING          => true,
+        ];
+
+        // If an exception was encountered during the onHeaders event, then
+        // return a rejected promise that wraps that exception.
+        if ($easy->onHeadersException) {
+            return new RejectedPromise(
+                new RequestException(
+                    'An error was encountered during the on_headers event',
+                    $easy->request,
+                    $easy->response,
+                    $easy->onHeadersException,
+                    $ctx
+                )
+            );
+        }
+
+        $message = sprintf(
+            'cURL error %s: %s (%s)',
+            $ctx['errno'],
+            $ctx['error'],
+            'see http://curl.haxx.se/libcurl/c/libcurl-errors.html'
+        );
+
+        // Create a connection exception if it was a specific error code.
+        $error = isset($connectionErrors[$easy->errno])
+            ? new ConnectException($message, $easy->request, null, $ctx)
+            : new RequestException($message, $easy->request, $easy->response, null, $ctx);
+
+        return new RejectedPromise($error);
+    }
+
+    private function getDefaultConf(EasyHandle $easy)
+    {
+        $conf = [
+            '_headers'             => $easy->request->getHeaders(),
+            CURLOPT_CUSTOMREQUEST  => $easy->request->getMethod(),
+            CURLOPT_URL            => (string) $easy->request->getUri(),
+            CURLOPT_RETURNTRANSFER => false,
+            CURLOPT_HEADER         => false,
+            CURLOPT_CONNECTTIMEOUT => 150,
+            CURLOPT_PROTOCOLS      => CURLPROTO_HTTP | CURLPROTO_HTTPS,
+        ];
+
+        $version = $easy->request->getProtocolVersion();
+        if ($version == 1.1) {
+            $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1;
+        } elseif ($version == 2.0) {
+            $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2_0;
+        } else {
+            $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0;
+        }
+
+        return $conf;
+    }
+
+    private function applyMethod(EasyHandle $easy, array &$conf)
+    {
+        $body = $easy->request->getBody();
+        $size = $body->getSize();
+
+        if ($size === null || $size > 0) {
+            $this->applyBody($easy->request, $easy->options, $conf);
+            return;
+        }
+
+        $method = $easy->request->getMethod();
+        if ($method === 'PUT' || $method === 'POST') {
+            // See http://tools.ietf.org/html/rfc7230#section-3.3.2
+            if (!$easy->request->hasHeader('Content-Length')) {
+                $conf[CURLOPT_HTTPHEADER][] = 'Content-Length: 0';
+            }
+        } elseif ($method === 'HEAD') {
+            $conf[CURLOPT_NOBODY] = true;
+            unset(
+                $conf[CURLOPT_WRITEFUNCTION],
+                $conf[CURLOPT_READFUNCTION],
+                $conf[CURLOPT_FILE],
+                $conf[CURLOPT_INFILE]
+            );
+        }
+    }
+
+    private function applyBody(RequestInterface $request, array $options, array &$conf)
+    {
+        $size = $request->hasHeader('Content-Length')
+            ? (int) $request->getHeaderLine('Content-Length')
+            : null;
+
+        // Send the body as a string if the size is less than 1MB OR if the
+        // [curl][body_as_string] request value is set.
+        if (($size !== null && $size < 1000000) ||
+            !empty($options['_body_as_string'])
+        ) {
+            $conf[CURLOPT_POSTFIELDS] = (string) $request->getBody();
+            // Don't duplicate the Content-Length header
+            $this->removeHeader('Content-Length', $conf);
+            $this->removeHeader('Transfer-Encoding', $conf);
+        } else {
+            $conf[CURLOPT_UPLOAD] = true;
+            if ($size !== null) {
+                $conf[CURLOPT_INFILESIZE] = $size;
+                $this->removeHeader('Content-Length', $conf);
+            }
+            $body = $request->getBody();
+            $conf[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) {
+                return $body->read($length);
+            };
+        }
+
+        // If the Expect header is not present, prevent curl from adding it
+        if (!$request->hasHeader('Expect')) {
+            $conf[CURLOPT_HTTPHEADER][] = 'Expect:';
+        }
+
+        // cURL sometimes adds a content-type by default. Prevent this.
+        if (!$request->hasHeader('Content-Type')) {
+            $conf[CURLOPT_HTTPHEADER][] = 'Content-Type:';
+        }
+    }
+
+    private function applyHeaders(EasyHandle $easy, array &$conf)
+    {
+        foreach ($conf['_headers'] as $name => $values) {
+            foreach ($values as $value) {
+                $conf[CURLOPT_HTTPHEADER][] = "$name: $value";
+            }
+        }
+
+        // Remove the Accept header if one was not set
+        if (!$easy->request->hasHeader('Accept')) {
+            $conf[CURLOPT_HTTPHEADER][] = 'Accept:';
+        }
+    }
+
+    /**
+     * Remove a header from the options array.
+     *
+     * @param string $name    Case-insensitive header to remove
+     * @param array  $options Array of options to modify
+     */
+    private function removeHeader($name, array &$options)
+    {
+        foreach (array_keys($options['_headers']) as $key) {
+            if (!strcasecmp($key, $name)) {
+                unset($options['_headers'][$key]);
+                return;
+            }
+        }
+    }
+
+    private function applyHandlerOptions(EasyHandle $easy, array &$conf)
+    {
+        $options = $easy->options;
+        if (isset($options['verify'])) {
+            if ($options['verify'] === false) {
+                unset($conf[CURLOPT_CAINFO]);
+                $conf[CURLOPT_SSL_VERIFYHOST] = 0;
+                $conf[CURLOPT_SSL_VERIFYPEER] = false;
+            } else {
+                $conf[CURLOPT_SSL_VERIFYHOST] = 2;
+                $conf[CURLOPT_SSL_VERIFYPEER] = true;
+                if (is_string($options['verify'])) {
+                    $conf[CURLOPT_CAINFO] = $options['verify'];
+                    if (!file_exists($options['verify'])) {
+                        throw new \InvalidArgumentException(
+                            "SSL CA bundle not found: {$options['verify']}"
+                        );
+                    }
+                }
+            }
+        }
+
+        if (!empty($options['decode_content'])) {
+            $accept = $easy->request->getHeaderLine('Accept-Encoding');
+            if ($accept) {
+                $conf[CURLOPT_ENCODING] = $accept;
+            } else {
+                $conf[CURLOPT_ENCODING] = '';
+                // Don't let curl send the header over the wire
+                $conf[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
+            }
+        }
+
+        if (isset($options['sink'])) {
+            $sink = $options['sink'];
+            if (!is_string($sink)) {
+                $sink = \GuzzleHttp\Psr7\stream_for($sink);
+            } elseif (!is_dir(dirname($sink))) {
+                // Ensure that the directory exists before failing in curl.
+                throw new \RuntimeException(sprintf(
+                    'Directory %s does not exist for sink value of %s',
+                    dirname($sink),
+                    $sink
+                ));
+            } else {
+                $sink = new LazyOpenStream($sink, 'w+');
+            }
+            $easy->sink = $sink;
+            $conf[CURLOPT_WRITEFUNCTION] = function ($ch, $write) use ($sink) {
+                return $sink->write($write);
+            };
+        } else {
+            // Use a default temp stream if no sink was set.
+            $conf[CURLOPT_FILE] = fopen('php://temp', 'w+');
+            $easy->sink = Psr7\stream_for($conf[CURLOPT_FILE]);
+        }
+
+        if (isset($options['timeout'])) {
+            $conf[CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000;
+        }
+
+        if (isset($options['connect_timeout'])) {
+            $conf[CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000;
+        }
+
+        if (isset($options['proxy'])) {
+            if (!is_array($options['proxy'])) {
+                $conf[CURLOPT_PROXY] = $options['proxy'];
+            } elseif ($scheme = $easy->request->getUri()->getScheme()) {
+                if (isset($options['proxy'][$scheme])) {
+                    $conf[CURLOPT_PROXY] = $options['proxy'][$scheme];
+                }
+            }
+        }
+
+        if (isset($options['cert'])) {
+            $cert = $options['cert'];
+            if (is_array($cert)) {
+                $conf[CURLOPT_SSLCERTPASSWD] = $cert[1];
+                $cert = $cert[0];
+            }
+            if (!file_exists($cert)) {
+                throw new \InvalidArgumentException(
+                    "SSL certificate not found: {$cert}"
+                );
+            }
+            $conf[CURLOPT_SSLCERT] = $cert;
+        }
+
+        if (isset($options['ssl_key'])) {
+            $sslKey = $options['ssl_key'];
+            if (is_array($sslKey)) {
+                $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1];
+                $sslKey = $sslKey[0];
+            }
+            if (!file_exists($sslKey)) {
+                throw new \InvalidArgumentException(
+                    "SSL private key not found: {$sslKey}"
+                );
+            }
+            $conf[CURLOPT_SSLKEY] = $sslKey;
+        }
+
+        if (isset($options['progress'])) {
+            $progress = $options['progress'];
+            if (!is_callable($progress)) {
+                throw new \InvalidArgumentException(
+                    'progress client option must be callable'
+                );
+            }
+            $conf[CURLOPT_NOPROGRESS] = false;
+            $conf[CURLOPT_PROGRESSFUNCTION] = function () use ($progress) {
+                $args = func_get_args();
+                // PHP 5.5 pushed the handle onto the start of the args
+                if (is_resource($args[0])) {
+                    array_shift($args);
+                }
+                call_user_func_array($progress, $args);
+            };
+        }
+
+        if (!empty($options['debug'])) {
+            $conf[CURLOPT_STDERR] = \GuzzleHttp\debug_resource($options['debug']);
+            $conf[CURLOPT_VERBOSE] = true;
+        }
+    }
+
+    /**
+     * This function ensures that a response was set on a transaction. If one
+     * was not set, then the request is retried if possible. This error
+     * typically means you are sending a payload, curl encountered a
+     * "Connection died, retrying a fresh connect" error, tried to rewind the
+     * stream, and then encountered a "necessary data rewind wasn't possible"
+     * error, causing the request to be sent through curl_multi_info_read()
+     * without an error status.
+     */
+    private static function retryFailedRewind(
+        callable $handler,
+        EasyHandle $easy,
+        array $ctx
+    ) {
+        try {
+            // Only rewind if the body has been read from.
+            $body = $easy->request->getBody();
+            if ($body->tell() > 0) {
+                $body->rewind();
+            }
+        } catch (\RuntimeException $e) {
+            $ctx['error'] = 'The connection unexpectedly failed without '
+                . 'providing an error. The request would have been retried, '
+                . 'but attempting to rewind the request body failed. '
+                . 'Exception: ' . $e;
+            return self::createRejection($easy, $ctx);
+        }
+
+        // Retry no more than 3 times before giving up.
+        if (!isset($easy->options['_curl_retries'])) {
+            $easy->options['_curl_retries'] = 1;
+        } elseif ($easy->options['_curl_retries'] == 2) {
+            $ctx['error'] = 'The cURL request was retried 3 times '
+                . 'and did not succeed. The most likely reason for the failure '
+                . 'is that cURL was unable to rewind the body of the request '
+                . 'and subsequent retries resulted in the same error. Turn on '
+                . 'the debug option to see what went wrong. See '
+                . 'https://bugs.php.net/bug.php?id=47204 for more information.';
+            return self::createRejection($easy, $ctx);
+        } else {
+            $easy->options['_curl_retries']++;
+        }
+
+        return $handler($easy->request, $easy->options);
+    }
+
+    private function createHeaderFn(EasyHandle $easy)
+    {
+        if (!isset($easy->options['on_headers'])) {
+            $onHeaders = null;
+        } elseif (!is_callable($easy->options['on_headers'])) {
+            throw new \InvalidArgumentException('on_headers must be callable');
+        } else {
+            $onHeaders = $easy->options['on_headers'];
+        }
+
+        return function ($ch, $h) use (
+            $onHeaders,
+            $easy,
+            &$startingResponse
+        ) {
+            $value = trim($h);
+            if ($value === '') {
+                $startingResponse = true;
+                $easy->createResponse();
+                if ($onHeaders) {
+                    try {
+                        $onHeaders($easy->response);
+                    } catch (\Exception $e) {
+                        // Associate the exception with the handle and trigger
+                        // a curl header write error by returning 0.
+                        $easy->onHeadersException = $e;
+                        return -1;
+                    }
+                }
+            } elseif ($startingResponse) {
+                $startingResponse = false;
+                $easy->headers = [$value];
+            } else {
+                $easy->headers[] = $value;
+            }
+            return strlen($h);
+        };
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php
new file mode 100644
index 0000000..b0fc236
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php
@@ -0,0 +1,27 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use Psr\Http\Message\RequestInterface;
+
+interface CurlFactoryInterface
+{
+    /**
+     * Creates a cURL handle resource.
+     *
+     * @param RequestInterface $request Request
+     * @param array            $options Transfer options
+     *
+     * @return EasyHandle
+     * @throws \RuntimeException when an option cannot be applied
+     */
+    public function create(RequestInterface $request, array $options);
+
+    /**
+     * Release an easy handle, allowing it to be reused or closed.
+     *
+     * This function must call unset on the easy handle's "handle" property.
+     *
+     * @param EasyHandle $easy
+     */
+    public function release(EasyHandle $easy);
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php
new file mode 100644
index 0000000..43577da
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php
@@ -0,0 +1,45 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * HTTP handler that uses cURL easy handles as a transport layer.
+ *
+ * When using the CurlHandler, custom curl options can be specified as an
+ * associative array of curl option constants mapping to values in the
+ * **curl** key of the "client" key of the request.
+ */
+class CurlHandler
+{
+    /** @var CurlFactoryInterface */
+    private $factory;
+
+    /**
+     * Accepts an associative array of options:
+     *
+     * - factory: Optional curl factory used to create cURL handles.
+     *
+     * @param array $options Array of options to use with the handler
+     */
+    public function __construct(array $options = [])
+    {
+        $this->factory = isset($options['handle_factory'])
+            ? $options['handle_factory']
+            : new CurlFactory(3);
+    }
+
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        if (isset($options['delay'])) {
+            usleep($options['delay'] * 1000);
+        }
+
+        $easy = $this->factory->create($request, $options);
+        curl_exec($easy->handle);
+        $easy->errno = curl_errno($easy->handle);
+
+        return CurlFactory::finish($this, $easy, $this->factory);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
new file mode 100644
index 0000000..417850b
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
@@ -0,0 +1,197 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use GuzzleHttp\Promise as P;
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * Returns an asynchronous response using curl_multi_* functions.
+ *
+ * When using the CurlMultiHandler, custom curl options can be specified as an
+ * associative array of curl option constants mapping to values in the
+ * **curl** key of the provided request options.
+ *
+ * @property resource $_mh Internal use only. Lazy loaded multi-handle.
+ */
+class CurlMultiHandler
+{
+    /** @var CurlFactoryInterface */
+    private $factory;
+    private $selectTimeout;
+    private $active;
+    private $handles = [];
+    private $delays = [];
+
+    /**
+     * This handler accepts the following options:
+     *
+     * - handle_factory: An optional factory  used to create curl handles
+     * - select_timeout: Optional timeout (in seconds) to block before timing
+     *   out while selecting curl handles. Defaults to 1 second.
+     *
+     * @param array $options
+     */
+    public function __construct(array $options = [])
+    {
+        $this->factory = isset($options['handle_factory'])
+            ? $options['handle_factory'] : new CurlFactory(50);
+        $this->selectTimeout = isset($options['select_timeout'])
+            ? $options['select_timeout'] : 1;
+    }
+
+    public function __get($name)
+    {
+        if ($name === '_mh') {
+            return $this->_mh = curl_multi_init();
+        }
+
+        throw new \BadMethodCallException();
+    }
+
+    public function __destruct()
+    {
+        if (isset($this->_mh)) {
+            curl_multi_close($this->_mh);
+            unset($this->_mh);
+        }
+    }
+
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        $easy = $this->factory->create($request, $options);
+        $id = (int) $easy->handle;
+
+        $promise = new Promise(
+            [$this, 'execute'],
+            function () use ($id) { return $this->cancel($id); }
+        );
+
+        $this->addRequest(['easy' => $easy, 'deferred' => $promise]);
+
+        return $promise;
+    }
+
+    /**
+     * Ticks the curl event loop.
+     */
+    public function tick()
+    {
+        // Add any delayed handles if needed.
+        if ($this->delays) {
+            $currentTime = microtime(true);
+            foreach ($this->delays as $id => $delay) {
+                if ($currentTime >= $delay) {
+                    unset($this->delays[$id]);
+                    curl_multi_add_handle(
+                        $this->_mh,
+                        $this->handles[$id]['easy']->handle
+                    );
+                }
+            }
+        }
+
+        // Step through the task queue which may add additional requests.
+        P\queue()->run();
+
+        if ($this->active &&
+            curl_multi_select($this->_mh, $this->selectTimeout) === -1
+        ) {
+            // Perform a usleep if a select returns -1.
+            // See: https://bugs.php.net/bug.php?id=61141
+            usleep(250);
+        }
+
+        while (curl_multi_exec($this->_mh, $this->active) === CURLM_CALL_MULTI_PERFORM);
+
+        $this->processMessages();
+    }
+
+    /**
+     * Runs until all outstanding connections have completed.
+     */
+    public function execute()
+    {
+        $queue = P\queue();
+
+        while ($this->handles || !$queue->isEmpty()) {
+            // If there are no transfers, then sleep for the next delay
+            if (!$this->active && $this->delays) {
+                usleep($this->timeToNext());
+            }
+            $this->tick();
+        }
+    }
+
+    private function addRequest(array $entry)
+    {
+        $easy = $entry['easy'];
+        $id = (int) $easy->handle;
+        $this->handles[$id] = $entry;
+        if (empty($easy->options['delay'])) {
+            curl_multi_add_handle($this->_mh, $easy->handle);
+        } else {
+            $this->delays[$id] = microtime(true) + ($easy->options['delay'] / 1000);
+        }
+    }
+
+    /**
+     * Cancels a handle from sending and removes references to it.
+     *
+     * @param int $id Handle ID to cancel and remove.
+     *
+     * @return bool True on success, false on failure.
+     */
+    private function cancel($id)
+    {
+        // Cannot cancel if it has been processed.
+        if (!isset($this->handles[$id])) {
+            return false;
+        }
+
+        $handle = $this->handles[$id]['easy']->handle;
+        unset($this->delays[$id], $this->handles[$id]);
+        curl_multi_remove_handle($this->_mh, $handle);
+        curl_close($handle);
+
+        return true;
+    }
+
+    private function processMessages()
+    {
+        while ($done = curl_multi_info_read($this->_mh)) {
+            $id = (int) $done['handle'];
+            curl_multi_remove_handle($this->_mh, $done['handle']);
+
+            if (!isset($this->handles[$id])) {
+                // Probably was cancelled.
+                continue;
+            }
+
+            $entry = $this->handles[$id];
+            unset($this->handles[$id], $this->delays[$id]);
+            $entry['easy']->errno = $done['result'];
+            $entry['deferred']->resolve(
+                CurlFactory::finish(
+                    $this,
+                    $entry['easy'],
+                    $this->factory
+                )
+            );
+        }
+    }
+
+    private function timeToNext()
+    {
+        $currentTime = microtime(true);
+        $nextTime = PHP_INT_MAX;
+        foreach ($this->delays as $time) {
+            if ($time < $nextTime) {
+                $nextTime = $time;
+            }
+        }
+
+        return max(0, $currentTime - $nextTime);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/core/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php
new file mode 100644
index 0000000..b70ca81
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php
@@ -0,0 +1,71 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use GuzzleHttp\Psr7\Response;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\StreamInterface;
+
+/**
+ * Represents a cURL easy handle and the data it populates.
+ *
+ * @internal
+ */
+final class EasyHandle
+{
+    /** @var resource cURL resource */
+    public $handle;
+
+    /** @var StreamInterface Where data is being written */
+    public $sink;
+
+    /** @var array Received HTTP headers so far */
+    public $headers = [];
+
+    /** @var ResponseInterface Received response (if any) */
+    public $response;
+
+    /** @var RequestInterface Request being sent */
+    public $request;
+
+    /** @var array Request options */
+    public $options = [];
+
+    /** @var int cURL error number (if any) */
+    public $errno = 0;
+
+    /** @var \Exception Exception during on_headers (if any) */
+    public $onHeadersException;
+
+    /**
+     * Attach a response to the easy handle based on the received headers.
+     *
+     * @throws \RuntimeException if no headers have been received.
+     */
+    public function createResponse()
+    {
+        if (empty($this->headers)) {
+            throw new \RuntimeException('No headers have been received');
+        }
+
+        // HTTP-version SP status-code SP reason-phrase
+        $startLine = explode(' ', array_shift($this->headers), 3);
+
+        // Attach a response to the easy handle with the parsed headers.
+        $this->response = new Response(
+            $startLine[1],
+            \GuzzleHttp\headers_from_lines($this->headers),
+            $this->sink,
+            substr($startLine[0], 5),
+            isset($startLine[2]) ? (int) $startLine[2] : null
+        );
+    }
+
+    public function __get($name)
+    {
+        $msg = $name === 'handle'
+            ? 'The EasyHandle has been released'
+            : 'Invalid property: ' . $name;
+        throw new \BadMethodCallException($msg);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/core/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
new file mode 100644
index 0000000..0d5fe94
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
@@ -0,0 +1,133 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use GuzzleHttp\Promise\PromiseInterface;
+use GuzzleHttp\Promise\RejectedPromise;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+
+/**
+ * Handler that returns responses or throw exceptions from a queue.
+ */
+class MockHandler implements \Countable
+{
+    private $queue;
+    private $lastRequest;
+    private $lastOptions;
+    private $onFulfilled;
+    private $onRejected;
+
+    /**
+     * The passed in value must be an array of
+     * {@see Psr7\Http\Message\ResponseInterface} objects, Exceptions,
+     * callables, or Promises.
+     *
+     * @param array $queue
+     * @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
+     * @param callable $onRejected  Callback to invoke when the return value is rejected.
+     */
+    public function __construct(
+        array $queue = null,
+        callable $onFulfilled = null,
+        callable $onRejected = null
+    ) {
+        $this->onFulfilled = $onFulfilled;
+        $this->onRejected = $onRejected;
+
+        if ($queue) {
+            call_user_func_array([$this, 'append'], $queue);
+        }
+    }
+
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        if (!$this->queue) {
+            throw new \OutOfBoundsException('Mock queue is empty');
+        }
+
+        if (isset($options['delay'])) {
+            usleep($options['delay'] * 1000);
+        }
+
+        $this->lastRequest = $request;
+        $this->lastOptions = $options;
+        $response = array_shift($this->queue);
+
+        if (is_callable($response)) {
+            $response = $response($request, $options);
+        }
+
+        $response = $response instanceof \Exception
+            ? new RejectedPromise($response)
+            : \GuzzleHttp\Promise\promise_for($response);
+
+        if (!$this->onFulfilled && !$this->onRejected) {
+            return $response;
+        }
+
+        return $response->then(
+            function ($value) {
+                if ($this->onFulfilled) {
+                    call_user_func($this->onFulfilled, $value);
+                }
+                return $value;
+            },
+            function ($reason) {
+                if ($this->onRejected) {
+                    call_user_func($this->onRejected, $reason);
+                }
+                return new RejectedPromise($reason);
+            }
+        );
+    }
+
+    /**
+     * Adds one or more variadic requests, exceptions, callables, or promises
+     * to the queue.
+     */
+    public function append()
+    {
+        foreach (func_get_args() as $value) {
+            if ($value instanceof ResponseInterface
+                || $value instanceof \Exception
+                || $value instanceof PromiseInterface
+                || is_callable($value)
+            ) {
+                $this->queue[] = $value;
+            } else {
+                throw new \InvalidArgumentException('Expected a response or '
+                    . 'exception. Found ' . \GuzzleHttp\describe_type($value));
+            }
+        }
+    }
+
+    /**
+     * Get the last received request.
+     *
+     * @return RequestInterface
+     */
+    public function getLastRequest()
+    {
+        return $this->lastRequest;
+    }
+
+    /**
+     * Get the last received request options.
+     *
+     * @return RequestInterface
+     */
+    public function getLastOptions()
+    {
+        return $this->lastOptions;
+    }
+
+    /**
+     * Returns the number of remaining items in the queue.
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->queue);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php b/core/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php
new file mode 100644
index 0000000..9bd76d2
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php
@@ -0,0 +1,54 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * Provides basic proxies for handlers.
+ */
+class Proxy
+{
+    /**
+     * Sends synchronous requests to a specific handler while sending all other
+     * requests to another handler.
+     *
+     * @param callable $default Handler used for normal responses
+     * @param callable $sync    Handler used for synchronous responses.
+     *
+     * @return callable Returns the composed handler.
+     */
+    public static function wrapSync(
+        callable $default,
+        callable $sync
+    ) {
+        return function (RequestInterface $request, array $options) use ($default, $sync) {
+            return empty($options['sync'])
+                ? $default($request, $options)
+                : $sync($request, $options);
+        };
+    }
+
+    /**
+     * Sends streaming requests to a streaming compatible handler while sending
+     * all other requests to a default handler.
+     *
+     * This, for example, could be useful for taking advantage of the
+     * performance benefits of curl while still supporting true streaming
+     * through the StreamHandler.
+     *
+     * @param callable $default   Handler used for non-streaming responses
+     * @param callable $streaming Handler used for streaming responses
+     *
+     * @return callable Returns the composed handler.
+     */
+    public static function wrapStreaming(
+        callable $default,
+        callable $streaming
+    ) {
+        return function (RequestInterface $request, array $options) use ($default, $streaming) {
+            return empty($options['stream'])
+                ? $default($request, $options)
+                : $streaming($request, $options);
+        };
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/core/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
new file mode 100644
index 0000000..b848c9b
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
@@ -0,0 +1,398 @@
+<?php
+namespace GuzzleHttp\Handler;
+
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Exception\ConnectException;
+use GuzzleHttp\Promise\FulfilledPromise;
+use GuzzleHttp\Promise\RejectedPromise;
+use GuzzleHttp\Promise\PromiseInterface;
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\StreamInterface;
+
+/**
+ * HTTP handler that uses PHP's HTTP stream wrapper.
+ */
+class StreamHandler
+{
+    private $lastHeaders = [];
+
+    /**
+     * Sends an HTTP request.
+     *
+     * @param RequestInterface $request Request to send.
+     * @param array            $options Request transfer options.
+     *
+     * @return PromiseInterface
+     */
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        // Sleep if there is a delay specified.
+        if (isset($options['delay'])) {
+            usleep($options['delay'] * 1000);
+        }
+
+        try {
+            // Does not support the expect header.
+            $request = $request->withoutHeader('Expect');
+            $stream = $this->createStream($request, $options);
+            return $this->createResponse($request, $options, $stream);
+        } catch (\InvalidArgumentException $e) {
+            throw $e;
+        } catch (\Exception $e) {
+            // Determine if the error was a networking error.
+            $message = $e->getMessage();
+            // This list can probably get more comprehensive.
+            if (strpos($message, 'getaddrinfo') // DNS lookup failed
+                || strpos($message, 'Connection refused')
+            ) {
+                $e = new ConnectException($e->getMessage(), $request, $e);
+            }
+            return new RejectedPromise(
+                RequestException::wrapException($request, $e)
+            );
+        }
+    }
+
+    private function createResponse(
+        RequestInterface $request,
+        array $options,
+        $stream
+    ) {
+        $hdrs = $this->lastHeaders;
+        $this->lastHeaders = [];
+        $parts = explode(' ', array_shift($hdrs), 3);
+        $ver = explode('/', $parts[0])[1];
+        $status = $parts[1];
+        $reason = isset($parts[2]) ? $parts[2] : null;
+        $headers = \GuzzleHttp\headers_from_lines($hdrs);
+        $stream = Psr7\stream_for($this->checkDecode($options, $headers, $stream));
+        $sink = $this->createSink($stream, $options);
+        $response = new Psr7\Response($status, $headers, $sink, $ver, $reason);
+
+        if (isset($options['on_headers'])) {
+            try {
+                $options['on_headers']($response);
+            } catch (\Exception $e) {
+                $msg = 'An error was encountered during the on_headers event';
+                $ex = new RequestException($msg, $request, $response, $e);
+                return new RejectedPromise($ex);
+            }
+        }
+
+        if ($sink !== $stream) {
+            $this->drain($stream, $sink);
+        }
+
+        return new FulfilledPromise($response);
+    }
+
+    private function createSink(StreamInterface $stream, array $options)
+    {
+        if (!empty($options['stream'])) {
+            return $stream;
+        }
+
+        $sink = isset($options['sink'])
+            ? $options['sink']
+            : fopen('php://temp', 'r+');
+
+        return is_string($sink)
+            ? new Psr7\Stream(Psr7\try_fopen($sink, 'r+'))
+            : Psr7\stream_for($sink);
+    }
+
+    private function checkDecode(array $options, array $headers, $stream)
+    {
+        // Automatically decode responses when instructed.
+        if (!empty($options['decode_content'])) {
+            foreach ($headers as $key => $value) {
+                if (strtolower($key) == 'content-encoding') {
+                    if ($value[0] == 'gzip' || $value[0] == 'deflate') {
+                        return new Psr7\InflateStream(
+                            Psr7\stream_for($stream)
+                        );
+                    }
+                }
+            }
+        }
+
+        return $stream;
+    }
+
+    /**
+     * Drains the source stream into the "sink" client option.
+     *
+     * @param StreamInterface $source
+     * @param StreamInterface $sink
+     *
+     * @return StreamInterface
+     * @throws \RuntimeException when the sink option is invalid.
+     */
+    private function drain(StreamInterface $source, StreamInterface $sink)
+    {
+        Psr7\copy_to_stream($source, $sink);
+        $sink->seek(0);
+        $source->close();
+
+        return $sink;
+    }
+
+    /**
+     * Create a resource and check to ensure it was created successfully
+     *
+     * @param callable $callback Callable that returns stream resource
+     *
+     * @return resource
+     * @throws \RuntimeException on error
+     */
+    private function createResource(callable $callback)
+    {
+        $errors = null;
+        set_error_handler(function ($_, $msg, $file, $line) use (&$errors) {
+            $errors[] = [
+                'message' => $msg,
+                'file'    => $file,
+                'line'    => $line
+            ];
+            return true;
+        });
+
+        $resource = $callback();
+        restore_error_handler();
+
+        if (!$resource) {
+            $message = 'Error creating resource: ';
+            foreach ($errors as $err) {
+                foreach ($err as $key => $value) {
+                    $message .= "[$key] $value" . PHP_EOL;
+                }
+            }
+            throw new \RuntimeException(trim($message));
+        }
+
+        return $resource;
+    }
+
+    private function createStream(RequestInterface $request, array $options)
+    {
+        static $methods;
+        if (!$methods) {
+            $methods = array_flip(get_class_methods(__CLASS__));
+        }
+
+        // HTTP/1.1 streams using the PHP stream wrapper require a
+        // Connection: close header
+        if ($request->getProtocolVersion() == '1.1'
+            && !$request->hasHeader('Connection')
+        ) {
+            $request = $request->withHeader('Connection', 'close');
+        }
+
+        // Ensure SSL is verified by default
+        if (!isset($options['verify'])) {
+            $options['verify'] = true;
+        }
+
+        $params = [];
+        $context = $this->getDefaultContext($request, $options);
+
+        if (isset($options['on_headers']) && !is_callable($options['on_headers'])) {
+            throw new \InvalidArgumentException('on_headers must be callable');
+        }
+
+        if (!empty($options)) {
+            foreach ($options as $key => $value) {
+                $method = "add_{$key}";
+                if (isset($methods[$method])) {
+                    $this->{$method}($request, $context, $value, $params);
+                }
+            }
+        }
+
+        if (isset($options['stream_context'])) {
+            if (!is_array($options['stream_context'])) {
+                throw new \InvalidArgumentException('stream_context must be an array');
+            }
+            $context = array_replace_recursive(
+                $context,
+                $options['stream_context']
+            );
+        }
+
+        $context = $this->createResource(
+            function () use ($context, $params) {
+                return stream_context_create($context, $params);
+            }
+        );
+
+        return $this->createResource(
+            function () use ($request, &$http_response_header, $context) {
+                $resource = fopen($request->getUri(), 'r', null, $context);
+                $this->lastHeaders = $http_response_header;
+                return $resource;
+            }
+        );
+    }
+
+    private function getDefaultContext(RequestInterface $request)
+    {
+        $headers = '';
+        foreach ($request->getHeaders() as $name => $value) {
+            foreach ($value as $val) {
+                $headers .= "$name: $val\r\n";
+            }
+        }
+
+        $context = [
+            'http' => [
+                'method'           => $request->getMethod(),
+                'header'           => $headers,
+                'protocol_version' => $request->getProtocolVersion(),
+                'ignore_errors'    => true,
+                'follow_location'  => 0,
+            ],
+        ];
+
+        $body = (string) $request->getBody();
+
+        if (!empty($body)) {
+            $context['http']['content'] = $body;
+            // Prevent the HTTP handler from adding a Content-Type header.
+            if (!$request->hasHeader('Content-Type')) {
+                $context['http']['header'] .= "Content-Type:\r\n";
+            }
+        }
+
+        $context['http']['header'] = rtrim($context['http']['header']);
+
+        return $context;
+    }
+
+    private function add_proxy(RequestInterface $request, &$options, $value, &$params)
+    {
+        if (!is_array($value)) {
+            $options['http']['proxy'] = $value;
+        } else {
+            $scheme = $request->getUri()->getScheme();
+            if (isset($value[$scheme])) {
+                $options['http']['proxy'] = $value[$scheme];
+            }
+        }
+    }
+
+    private function add_timeout(RequestInterface $request, &$options, $value, &$params)
+    {
+        $options['http']['timeout'] = $value;
+    }
+
+    private function add_verify(RequestInterface $request, &$options, $value, &$params)
+    {
+        if ($value === true) {
+            // PHP 5.6 or greater will find the system cert by default. When
+            // < 5.6, use the Guzzle bundled cacert.
+            if (PHP_VERSION_ID < 50600) {
+                $options['ssl']['cafile'] = \GuzzleHttp\default_ca_bundle();
+            }
+        } elseif (is_string($value)) {
+            $options['ssl']['cafile'] = $value;
+            if (!file_exists($value)) {
+                throw new \RuntimeException("SSL CA bundle not found: $value");
+            }
+        } elseif ($value === false) {
+            $options['ssl']['verify_peer'] = false;
+            return;
+        } else {
+            throw new \InvalidArgumentException('Invalid verify request option');
+        }
+
+        $options['ssl']['verify_peer'] = true;
+        $options['ssl']['allow_self_signed'] = false;
+    }
+
+    private function add_cert(RequestInterface $request, &$options, $value, &$params)
+    {
+        if (is_array($value)) {
+            $options['ssl']['passphrase'] = $value[1];
+            $value = $value[0];
+        }
+
+        if (!file_exists($value)) {
+            throw new \RuntimeException("SSL certificate not found: {$value}");
+        }
+
+        $options['ssl']['local_cert'] = $value;
+    }
+
+    private function add_progress(RequestInterface $request, &$options, $value, &$params)
+    {
+        $this->addNotification(
+            $params,
+            function ($code, $a, $b, $c, $transferred, $total) use ($value) {
+                if ($code == STREAM_NOTIFY_PROGRESS) {
+                    $value($total, $transferred, null, null);
+                }
+            }
+        );
+    }
+
+    private function add_debug(RequestInterface $request, &$options, $value, &$params)
+    {
+        if ($value === false) {
+            return;
+        }
+
+        static $map = [
+            STREAM_NOTIFY_CONNECT       => 'CONNECT',
+            STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
+            STREAM_NOTIFY_AUTH_RESULT   => 'AUTH_RESULT',
+            STREAM_NOTIFY_MIME_TYPE_IS  => 'MIME_TYPE_IS',
+            STREAM_NOTIFY_FILE_SIZE_IS  => 'FILE_SIZE_IS',
+            STREAM_NOTIFY_REDIRECTED    => 'REDIRECTED',
+            STREAM_NOTIFY_PROGRESS      => 'PROGRESS',
+            STREAM_NOTIFY_FAILURE       => 'FAILURE',
+            STREAM_NOTIFY_COMPLETED     => 'COMPLETED',
+            STREAM_NOTIFY_RESOLVE       => 'RESOLVE',
+        ];
+        static $args = ['severity', 'message', 'message_code',
+            'bytes_transferred', 'bytes_max'];
+
+        $value = \GuzzleHttp\debug_resource($value);
+        $ident = $request->getMethod() . ' ' . $request->getUri();
+        $this->addNotification(
+            $params,
+            function () use ($ident, $value, $map, $args) {
+                $passed = func_get_args();
+                $code = array_shift($passed);
+                fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
+                foreach (array_filter($passed) as $i => $v) {
+                    fwrite($value, $args[$i] . ': "' . $v . '" ');
+                }
+                fwrite($value, "\n");
+            }
+        );
+    }
+
+    private function addNotification(array &$params, callable $notify)
+    {
+        // Wrap the existing function if needed.
+        if (!isset($params['notification'])) {
+            $params['notification'] = $notify;
+        } else {
+            $params['notification'] = $this->callArray([
+                $params['notification'],
+                $notify
+            ]);
+        }
+    }
+
+    private function callArray(array $functions)
+    {
+        return function () use ($functions) {
+            $args = func_get_args();
+            foreach ($functions as $fn) {
+                call_user_func_array($fn, $args);
+            }
+        };
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/core/vendor/guzzlehttp/guzzle/src/HandlerStack.php
new file mode 100644
index 0000000..3dcb2c2
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/HandlerStack.php
@@ -0,0 +1,272 @@
+<?php
+namespace GuzzleHttp;
+
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * Creates a composed Guzzle handler function by stacking middlewares on top of
+ * an HTTP handler function.
+ */
+class HandlerStack
+{
+    /** @var callable */
+    private $handler;
+
+    /** @var array */
+    private $stack = [];
+
+    /** @var callable|null */
+    private $cached;
+
+    /**
+     * Creates a default handler stack that can be used by clients.
+     *
+     * The returned handler will wrap the provided handler or use the most
+     * appropriate default handler for you system. The returned HandlerStack has
+     * support for cookies, redirects, HTTP error exceptions, and preparing a body
+     * before sending.
+     *
+     * The returned handler stack can be passed to a client in the "handler"
+     * option.
+     *
+     * @param callable $handler HTTP handler function to use with the stack. If no
+     *                          handler is provided, the best handler for your
+     *                          system will be utilized.
+     *
+     * @return HandlerStack
+     */
+    public static function create(callable $handler = null)
+    {
+        $stack = new self($handler ?: choose_handler());
+        $stack->push(Middleware::cookies(), 'cookies');
+        $stack->push(Middleware::redirect(), 'allow_redirects');
+        $stack->push(Middleware::httpErrors(), 'http_errors');
+        $stack->push(Middleware::prepareBody(), 'prepare_body');
+
+        return $stack;
+    }
+
+    /**
+     * @param callable $handler Underlying HTTP handler.
+     */
+    public function __construct(callable $handler = null)
+    {
+        $this->handler = $handler;
+    }
+
+    /**
+     * Invokes the handler stack as a composed handler
+     *
+     * @param RequestInterface $request
+     * @param array            $options
+     */
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        if (!$this->cached) {
+            $this->cached = $this->resolve();
+        }
+
+        $handler = $this->cached;
+        return $handler($request, $options);
+    }
+
+    /**
+     * Dumps a string representation of the stack.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        $depth = 0;
+        $stack = [];
+        if ($this->handler) {
+            $stack[] = "0) Handler: " . $this->debugCallable($this->handler);
+        }
+
+        $result = '';
+        foreach (array_reverse($this->stack) as $tuple) {
+            $depth++;
+            $str = "{$depth}) Name: '{$tuple[1]}', ";
+            $str .= "Function: " . $this->debugCallable($tuple[0]);
+            $result = "> {$str}\n{$result}";
+            $stack[] = $str;
+        }
+
+        foreach (array_keys($stack) as $k) {
+            $result .= "< {$stack[$k]}\n";
+        }
+
+        return $result;
+    }
+
+    /**
+     * Set the HTTP handler that actually returns a promise.
+     *
+     * @param callable $handler Accepts a request and array of options and
+     *                          returns a Promise.
+     */
+    public function setHandler(callable $handler)
+    {
+        $this->handler = $handler;
+        $this->cached = null;
+    }
+
+    /**
+     * Returns true if the builder has a handler.
+     *
+     * @return bool
+     */
+    public function hasHandler()
+    {
+        return (bool) $this->handler;
+    }
+
+    /**
+     * Unshift a middleware to the bottom of the stack.
+     *
+     * @param callable $middleware Middleware function
+     * @param string   $name       Name to register for this middleware.
+     */
+    public function unshift(callable $middleware, $name = null)
+    {
+        array_unshift($this->stack, [$middleware, $name]);
+        $this->cached = null;
+    }
+
+    /**
+     * Push a middleware to the top of the stack.
+     *
+     * @param callable $middleware Middleware function
+     * @param string   $name       Name to register for this middleware.
+     */
+    public function push(callable $middleware, $name = '')
+    {
+        $this->stack[] = [$middleware, $name];
+        $this->cached = null;
+    }
+
+    /**
+     * Add a middleware before another middleware by name.
+     *
+     * @param string   $findName   Middleware to find
+     * @param callable $middleware Middleware function
+     * @param string   $withName   Name to register for this middleware.
+     */
+    public function before($findName, callable $middleware, $withName = '')
+    {
+        $this->splice($findName, $withName, $middleware, true);
+    }
+
+    /**
+     * Add a middleware after another middleware by name.
+     *
+     * @param string   $findName   Middleware to find
+     * @param callable $middleware Middleware function
+     * @param string   $withName   Name to register for this middleware.
+     */
+    public function after($findName, callable $middleware, $withName = '')
+    {
+        $this->splice($findName, $withName, $middleware, false);
+    }
+
+    /**
+     * Remove a middleware by instance or name from the stack.
+     *
+     * @param callable|string $remove Middleware to remove by instance or name.
+     */
+    public function remove($remove)
+    {
+        $this->cached = null;
+        $idx = is_callable($remove) ? 0 : 1;
+        $this->stack = array_values(array_filter(
+            $this->stack,
+            function ($tuple) use ($idx, $remove) {
+                return $tuple[$idx] !== $remove;
+            }
+        ));
+    }
+
+    /**
+     * Compose the middleware and handler into a single callable function.
+     *
+     * @return callable
+     */
+    public function resolve()
+    {
+        if (!($prev = $this->handler)) {
+            throw new \LogicException('No handler has been specified');
+        }
+
+        foreach (array_reverse($this->stack) as $fn) {
+            $prev = $fn[0]($prev);
+        }
+
+        return $prev;
+    }
+
+    /**
+     * @param $name
+     * @return int
+     */
+    private function findByName($name)
+    {
+        foreach ($this->stack as $k => $v) {
+            if ($v[1] === $name) {
+                return $k;
+            }
+        }
+
+        throw new \InvalidArgumentException("Middleware not found: $name");
+    }
+
+    /**
+     * Splices a function into the middleware list at a specific position.
+     *
+     * @param          $findName
+     * @param          $withName
+     * @param callable $middleware
+     * @param          $before
+     */
+    private function splice($findName, $withName, callable $middleware, $before)
+    {
+        $this->cached = null;
+        $idx = $this->findByName($findName);
+        $tuple = [$middleware, $withName];
+
+        if ($before) {
+            if ($idx === 0) {
+                array_unshift($this->stack, $tuple);
+            } else {
+                $replacement = [$tuple, $this->stack[$idx]];
+                array_splice($this->stack, $idx, 1, $replacement);
+            }
+        } elseif ($idx === count($this->stack) - 1) {
+            $this->stack[] = $tuple;
+        } else {
+            $replacement = [$this->stack[$idx], $tuple];
+            array_splice($this->stack, $idx, 1, $replacement);
+        }
+    }
+
+    /**
+     * Provides a debug string for a given callable.
+     *
+     * @param array|callable $fn Function to write as a string.
+     *
+     * @return string
+     */
+    private function debugCallable($fn)
+    {
+        if (is_string($fn)) {
+            return "callable({$fn})";
+        }
+
+        if (is_array($fn)) {
+            return is_string($fn[0])
+                ? "callable({$fn[0]}::{$fn[1]})"
+                : "callable(['" . get_class($fn[0]) . "', '{$fn[1]}'])";
+        }
+
+        return 'callable(' . spl_object_hash($fn) . ')';
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php b/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
deleted file mode 100644
index 020dfc9..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Trait implementing ToArrayInterface, \ArrayAccess, \Countable,
- * \IteratorAggregate, and some path style methods.
- */
-trait HasDataTrait
-{
-    /** @var array */
-    protected $data = [];
-
-    public function getIterator()
-    {
-        return new \ArrayIterator($this->data);
-    }
-
-    public function offsetGet($offset)
-    {
-        return isset($this->data[$offset]) ? $this->data[$offset] : null;
-    }
-
-    public function offsetSet($offset, $value)
-    {
-        $this->data[$offset] = $value;
-    }
-
-    public function offsetExists($offset)
-    {
-        return isset($this->data[$offset]);
-    }
-
-    public function offsetUnset($offset)
-    {
-        unset($this->data[$offset]);
-    }
-
-    public function toArray()
-    {
-        return $this->data;
-    }
-
-    public function count()
-    {
-        return count($this->data);
-    }
-
-    /**
-     * Get a value from the collection using a path syntax to retrieve nested
-     * data.
-     *
-     * @param string $path Path to traverse and retrieve a value from
-     *
-     * @return mixed|null
-     */
-    public function getPath($path)
-    {
-        return Utils::getPath($this->data, $path);
-    }
-
-    /**
-     * Set a value into a nested array key. Keys will be created as needed to
-     * set the value.
-     *
-     * @param string $path  Path to set
-     * @param mixed  $value Value to set at the key
-     *
-     * @throws \RuntimeException when trying to setPath using a nested path
-     *     that travels through a scalar value
-     */
-    public function setPath($path, $value)
-    {
-        Utils::setPath($this->data, $path, $value);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php b/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php
deleted file mode 100644
index 0c67575..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php
+++ /dev/null
@@ -1,253 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Stream\StreamInterface;
-
-abstract class AbstractMessage implements MessageInterface
-{
-    /** @var array HTTP header collection */
-    private $headers = [];
-
-    /** @var array mapping a lowercase header name to its name over the wire */
-    private $headerNames = [];
-
-    /** @var StreamInterface Message body */
-    private $body;
-
-    /** @var string HTTP protocol version of the message */
-    private $protocolVersion = '1.1';
-
-    public function __toString()
-    {
-        return static::getStartLineAndHeaders($this)
-            . "\r\n\r\n" . $this->getBody();
-    }
-
-    public function getProtocolVersion()
-    {
-        return $this->protocolVersion;
-    }
-
-    public function getBody()
-    {
-        return $this->body;
-    }
-
-    public function setBody(StreamInterface $body = null)
-    {
-        if ($body === null) {
-            // Setting a null body will remove the body of the request
-            $this->removeHeader('Content-Length');
-            $this->removeHeader('Transfer-Encoding');
-        }
-
-        $this->body = $body;
-    }
-
-    public function addHeader($header, $value)
-    {
-        if (is_array($value)) {
-            $current = array_merge($this->getHeaderAsArray($header), $value);
-        } else {
-            $current = $this->getHeaderAsArray($header);
-            $current[] = (string) $value;
-        }
-
-        $this->setHeader($header, $current);
-    }
-
-    public function addHeaders(array $headers)
-    {
-        foreach ($headers as $name => $header) {
-            $this->addHeader($name, $header);
-        }
-    }
-
-    public function getHeader($header)
-    {
-        $name = strtolower($header);
-        return isset($this->headers[$name])
-            ? implode(', ', $this->headers[$name])
-            : '';
-    }
-
-    public function getHeaderAsArray($header)
-    {
-        $name = strtolower($header);
-        return isset($this->headers[$name]) ? $this->headers[$name] : [];
-    }
-
-    public function getHeaders()
-    {
-        $headers = [];
-        foreach ($this->headers as $name => $values) {
-            $headers[$this->headerNames[$name]] = $values;
-        }
-
-        return $headers;
-    }
-
-    public function setHeader($header, $value)
-    {
-        $header = trim($header);
-        $name = strtolower($header);
-        $this->headerNames[$name] = $header;
-
-        if (is_array($value)) {
-            foreach ($value as &$v) {
-                $v = trim($v);
-            }
-            $this->headers[$name] = $value;
-        } else {
-            $this->headers[$name] = [trim($value)];
-        }
-    }
-
-    public function setHeaders(array $headers)
-    {
-        $this->headers = $this->headerNames = [];
-        foreach ($headers as $key => $value) {
-            $this->setHeader($key, $value);
-        }
-    }
-
-    public function hasHeader($header)
-    {
-        return isset($this->headers[strtolower($header)]);
-    }
-
-    public function removeHeader($header)
-    {
-        $name = strtolower($header);
-        unset($this->headers[$name], $this->headerNames[$name]);
-    }
-
-    /**
-     * Parse an array of header values containing ";" separated data into an
-     * array of associative arrays representing the header key value pair
-     * data of the header. When a parameter does not contain a value, but just
-     * contains a key, this function will inject a key with a '' string value.
-     *
-     * @param MessageInterface $message That contains the header
-     * @param string           $header  Header to retrieve from the message
-     *
-     * @return array Returns the parsed header values.
-     */
-    public static function parseHeader(MessageInterface $message, $header)
-    {
-        static $trimmed = "\"'  \n\t\r";
-        $params = $matches = [];
-
-        foreach (self::normalizeHeader($message, $header) as $val) {
-            $part = [];
-            foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
-                if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
-                    $m = $matches[0];
-                    if (isset($m[1])) {
-                        $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);
-                    } else {
-                        $part[] = trim($m[0], $trimmed);
-                    }
-                }
-            }
-            if ($part) {
-                $params[] = $part;
-            }
-        }
-
-        return $params;
-    }
-
-    /**
-     * Converts an array of header values that may contain comma separated
-     * headers into an array of headers with no comma separated values.
-     *
-     * @param MessageInterface $message That contains the header
-     * @param string              $header  Header to retrieve from the message
-     *
-     * @return array Returns the normalized header field values.
-     */
-    public static function normalizeHeader(MessageInterface $message, $header)
-    {
-        $h = $message->getHeaderAsArray($header);
-        for ($i = 0, $total = count($h); $i < $total; $i++) {
-            if (strpos($h[$i], ',') === false) {
-                continue;
-            }
-            foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $h[$i]) as $v) {
-                $h[] = trim($v);
-            }
-            unset($h[$i]);
-        }
-
-        return $h;
-    }
-
-    /**
-     * Gets the start-line and headers of a message as a string
-     *
-     * @param MessageInterface $message
-     *
-     * @return string
-     */
-    public static function getStartLineAndHeaders(MessageInterface $message)
-    {
-        return static::getStartLine($message)
-            . self::getHeadersAsString($message);
-    }
-
-    /**
-     * Gets the headers of a message as a string
-     *
-     * @param MessageInterface $message
-     *
-     * @return string
-     */
-    public static function getHeadersAsString(MessageInterface $message)
-    {
-        $result  = '';
-        foreach ($message->getHeaders() as $name => $values) {
-            $result .= "\r\n{$name}: " . implode(', ', $values);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Gets the start line of a message
-     *
-     * @param MessageInterface $message
-     *
-     * @return string
-     * @throws \InvalidArgumentException
-     */
-    public static function getStartLine(MessageInterface $message)
-    {
-        if ($message instanceof RequestInterface) {
-            return trim($message->getMethod() . ' '
-                . $message->getResource())
-                . ' HTTP/' . $message->getProtocolVersion();
-        } elseif ($message instanceof ResponseInterface) {
-            return 'HTTP/' . $message->getProtocolVersion() . ' '
-                . $message->getStatusCode() . ' '
-                . $message->getReasonPhrase();
-        } else {
-            throw new \InvalidArgumentException('Unknown message type');
-        }
-    }
-
-    /**
-     * Accepts and modifies the options provided to the message in the
-     * constructor.
-     *
-     * Can be overridden in subclasses as necessary.
-     *
-     * @param array $options Options array passed by reference.
-     */
-    protected function handleOptions(array &$options)
-    {
-        if (isset($options['protocol_version'])) {
-            $this->protocolVersion = $options['protocol_version'];
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/AppliesHeadersInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/AppliesHeadersInterface.php
deleted file mode 100644
index ca42f20..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/AppliesHeadersInterface.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-/**
- * Applies headers to a request.
- *
- * This interface can be used with Guzzle streams to apply body specific
- * headers to a request during the PREPARE_REQUEST priority of the before event
- *
- * NOTE: a body that implements this interface will prevent a default
- * content-type from being added to a request during the before event. If you
- * want a default content-type to be added, then it will need to be done
- * manually (e.g., using {@see GuzzleHttp\Mimetypes}).
- */
-interface AppliesHeadersInterface
-{
-    /**
-     * Apply headers to a request appropriate for the current state of the
-     * object.
-     *
-     * @param RequestInterface $request Request
-     */
-    public function applyRequestHeaders(RequestInterface $request);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php b/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php
deleted file mode 100644
index 5e5037e..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Ring\Future\MagicFutureTrait;
-use GuzzleHttp\Ring\Future\FutureInterface;
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Represents a response that has not been fulfilled.
- *
- * When created, you must provide a function that is used to dereference the
- * future result and return it's value. The function has no arguments and MUST
- * return an instance of a {@see GuzzleHttp\Message\ResponseInterface} object.
- *
- * You can optionally provide a function in the constructor that can be used to
- * cancel the future from completing if possible. This function has no
- * arguments and returns a boolean value representing whether or not the
- * response could be cancelled.
- *
- * @property ResponseInterface $_value
- */
-class FutureResponse implements ResponseInterface, FutureInterface
-{
-    use MagicFutureTrait;
-
-    /**
-     * Returns a FutureResponse that wraps another future.
-     *
-     * @param FutureInterface $future      Future to wrap with a new future
-     * @param callable        $onFulfilled Invoked when the future fulfilled
-     * @param callable        $onRejected  Invoked when the future rejected
-     * @param callable        $onProgress  Invoked when the future progresses
-     *
-     * @return FutureResponse
-     */
-    public static function proxy(
-        FutureInterface $future,
-        callable $onFulfilled = null,
-        callable $onRejected = null,
-        callable $onProgress = null
-    ) {
-        return new FutureResponse(
-            $future->then($onFulfilled, $onRejected, $onProgress),
-            [$future, 'wait'],
-            [$future, 'cancel']
-        );
-    }
-
-    public function getStatusCode()
-    {
-        return $this->_value->getStatusCode();
-    }
-
-    public function setStatusCode($code)
-    {
-        $this->_value->setStatusCode($code);
-    }
-
-    public function getReasonPhrase()
-    {
-        return $this->_value->getReasonPhrase();
-    }
-
-    public function setReasonPhrase($phrase)
-    {
-        $this->_value->setReasonPhrase($phrase);
-    }
-
-    public function getEffectiveUrl()
-    {
-        return $this->_value->getEffectiveUrl();
-    }
-
-    public function setEffectiveUrl($url)
-    {
-        $this->_value->setEffectiveUrl($url);
-    }
-
-    public function json(array $config = [])
-    {
-        return $this->_value->json($config);
-    }
-
-    public function xml(array $config = [])
-    {
-        return $this->_value->xml($config);
-    }
-
-    public function __toString()
-    {
-        try {
-            return $this->_value->__toString();
-        } catch (\Exception $e) {
-            trigger_error($e->getMessage(), E_USER_WARNING);
-            return '';
-        }
-    }
-
-    public function getProtocolVersion()
-    {
-        return $this->_value->getProtocolVersion();
-    }
-
-    public function setBody(StreamInterface $body = null)
-    {
-        $this->_value->setBody($body);
-    }
-
-    public function getBody()
-    {
-        return $this->_value->getBody();
-    }
-
-    public function getHeaders()
-    {
-        return $this->_value->getHeaders();
-    }
-
-    public function getHeader($header)
-    {
-        return $this->_value->getHeader($header);
-    }
-
-    public function getHeaderAsArray($header)
-    {
-        return $this->_value->getHeaderAsArray($header);
-    }
-
-    public function hasHeader($header)
-    {
-        return $this->_value->hasHeader($header);
-    }
-
-    public function removeHeader($header)
-    {
-        $this->_value->removeHeader($header);
-    }
-
-    public function addHeader($header, $value)
-    {
-        $this->_value->addHeader($header, $value);
-    }
-
-    public function addHeaders(array $headers)
-    {
-        $this->_value->addHeaders($headers);
-    }
-
-    public function setHeader($header, $value)
-    {
-        $this->_value->setHeader($header, $value);
-    }
-
-    public function setHeaders(array $headers)
-    {
-        $this->_value->setHeaders($headers);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
deleted file mode 100644
index 85984e2..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
+++ /dev/null
@@ -1,364 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Cookie\CookieJarInterface;
-use GuzzleHttp\Event\ListenerAttacherTrait;
-use GuzzleHttp\Post\PostBody;
-use GuzzleHttp\Post\PostFile;
-use GuzzleHttp\Post\PostFileInterface;
-use GuzzleHttp\Query;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Subscriber\Cookie;
-use GuzzleHttp\Subscriber\HttpError;
-use GuzzleHttp\Subscriber\Redirect;
-use GuzzleHttp\Url;
-use \InvalidArgumentException as Iae;
-
-/**
- * Default HTTP request factory used to create Request and Response objects.
- */
-class MessageFactory implements MessageFactoryInterface
-{
-    use ListenerAttacherTrait;
-
-    /** @var HttpError */
-    private $errorPlugin;
-
-    /** @var Redirect */
-    private $redirectPlugin;
-
-    /** @var array */
-    private $customOptions;
-
-    /** @var array Request options passed through to request Config object */
-    private static $configMap = [
-        'connect_timeout' => 1, 'timeout' => 1, 'verify' => 1, 'ssl_key' => 1,
-        'cert' => 1, 'proxy' => 1, 'debug' => 1, 'save_to' => 1, 'stream' => 1,
-        'expect' => 1, 'future' => 1
-    ];
-
-    /** @var array Default allow_redirects request option settings  */
-    private static $defaultRedirect = [
-        'max'       => 5,
-        'strict'    => false,
-        'referer'   => false,
-        'protocols' => ['http', 'https']
-    ];
-
-    /**
-     * @param array $customOptions Associative array of custom request option
-     *                             names mapping to functions used to apply
-     *                             the option. The function accepts the request
-     *                             and the option value to apply.
-     */
-    public function __construct(array $customOptions = [])
-    {
-        $this->errorPlugin = new HttpError();
-        $this->redirectPlugin = new Redirect();
-        $this->customOptions = $customOptions;
-    }
-
-    public function createResponse(
-        $statusCode,
-        array $headers = [],
-        $body = null,
-        array $options = []
-    ) {
-        if (null !== $body) {
-            $body = Stream::factory($body);
-        }
-
-        return new Response($statusCode, $headers, $body, $options);
-    }
-
-    public function createRequest($method, $url, array $options = [])
-    {
-        // Handle the request protocol version option that needs to be
-        // specified in the request constructor.
-        if (isset($options['version'])) {
-            $options['config']['protocol_version'] = $options['version'];
-            unset($options['version']);
-        }
-
-        $request = new Request($method, $url, [], null,
-            isset($options['config']) ? $options['config'] : []);
-
-        unset($options['config']);
-
-        // Use a POST body by default
-        if ($method == 'POST'
-            && !isset($options['body'])
-            && !isset($options['json'])
-        ) {
-            $options['body'] = [];
-        }
-
-        if ($options) {
-            $this->applyOptions($request, $options);
-        }
-
-        return $request;
-    }
-
-    /**
-     * Create a request or response object from an HTTP message string
-     *
-     * @param string $message Message to parse
-     *
-     * @return RequestInterface|ResponseInterface
-     * @throws \InvalidArgumentException if unable to parse a message
-     */
-    public function fromMessage($message)
-    {
-        static $parser;
-        if (!$parser) {
-            $parser = new MessageParser();
-        }
-
-        // Parse a response
-        if (strtoupper(substr($message, 0, 4)) == 'HTTP') {
-            $data = $parser->parseResponse($message);
-            return $this->createResponse(
-                $data['code'],
-                $data['headers'],
-                $data['body'] === '' ? null : $data['body'],
-                $data
-            );
-        }
-
-        // Parse a request
-        if (!($data = ($parser->parseRequest($message)))) {
-            throw new \InvalidArgumentException('Unable to parse request');
-        }
-
-        return $this->createRequest(
-            $data['method'],
-            Url::buildUrl($data['request_url']),
-            [
-                'headers' => $data['headers'],
-                'body' => $data['body'] === '' ? null : $data['body'],
-                'config' => [
-                    'protocol_version' => $data['protocol_version']
-                ]
-            ]
-        );
-    }
-
-    /**
-     * Apply POST fields and files to a request to attempt to give an accurate
-     * representation.
-     *
-     * @param RequestInterface $request Request to update
-     * @param array            $body    Body to apply
-     */
-    protected function addPostData(RequestInterface $request, array $body)
-    {
-        static $fields = ['string' => true, 'array' => true, 'NULL' => true,
-            'boolean' => true, 'double' => true, 'integer' => true];
-
-        $post = new PostBody();
-        foreach ($body as $key => $value) {
-            if (isset($fields[gettype($value)])) {
-                $post->setField($key, $value);
-            } elseif ($value instanceof PostFileInterface) {
-                $post->addFile($value);
-            } else {
-                $post->addFile(new PostFile($key, $value));
-            }
-        }
-
-        if ($request->getHeader('Content-Type') == 'multipart/form-data') {
-            $post->forceMultipartUpload(true);
-        }
-
-        $request->setBody($post);
-    }
-
-    protected function applyOptions(
-        RequestInterface $request,
-        array $options = []
-    ) {
-        $config = $request->getConfig();
-        $emitter = $request->getEmitter();
-
-        foreach ($options as $key => $value) {
-
-            if (isset(self::$configMap[$key])) {
-                $config[$key] = $value;
-                continue;
-            }
-
-            switch ($key) {
-
-            case 'allow_redirects':
-
-                if ($value === false) {
-                    continue;
-                }
-
-                if ($value === true) {
-                    $value = self::$defaultRedirect;
-                } elseif (!is_array($value)) {
-                    throw new Iae('allow_redirects must be true, false, or array');
-                } else {
-                    // Merge the default settings with the provided settings
-                    $value += self::$defaultRedirect;
-                }
-
-                $config['redirect'] = $value;
-                $emitter->attach($this->redirectPlugin);
-                break;
-
-            case 'decode_content':
-
-                if ($value === false) {
-                    continue;
-                }
-
-                $config['decode_content'] = true;
-                if ($value !== true) {
-                    $request->setHeader('Accept-Encoding', $value);
-                }
-                break;
-
-            case 'headers':
-
-                if (!is_array($value)) {
-                    throw new Iae('header value must be an array');
-                }
-                foreach ($value as $k => $v) {
-                    $request->setHeader($k, $v);
-                }
-                break;
-
-            case 'exceptions':
-
-                if ($value === true) {
-                    $emitter->attach($this->errorPlugin);
-                }
-                break;
-
-            case 'body':
-
-                if (is_array($value)) {
-                    $this->addPostData($request, $value);
-                } elseif ($value !== null) {
-                    $request->setBody(Stream::factory($value));
-                }
-                break;
-
-            case 'auth':
-
-                if (!$value) {
-                    continue;
-                }
-
-                if (is_array($value)) {
-                    $type = isset($value[2]) ? strtolower($value[2]) : 'basic';
-                } else {
-                    $type = strtolower($value);
-                }
-
-                $config['auth'] = $value;
-
-                if ($type == 'basic') {
-                    $request->setHeader(
-                        'Authorization',
-                        'Basic ' . base64_encode("$value[0]:$value[1]")
-                    );
-                } elseif ($type == 'digest') {
-                    // @todo: Do not rely on curl
-                    $config->setPath('curl/' . CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
-                    $config->setPath('curl/' . CURLOPT_USERPWD, "$value[0]:$value[1]");
-                }
-                break;
-
-            case 'query':
-
-                if ($value instanceof Query) {
-                    $original = $request->getQuery();
-                    // Do not overwrite existing query string variables by
-                    // overwriting the object with the query string data passed
-                    // in the URL
-                    $value->overwriteWith($original->toArray());
-                    $request->setQuery($value);
-                } elseif (is_array($value)) {
-                    // Do not overwrite existing query string variables
-                    $query = $request->getQuery();
-                    foreach ($value as $k => $v) {
-                        if (!isset($query[$k])) {
-                            $query[$k] = $v;
-                        }
-                    }
-                } else {
-                    throw new Iae('query must be an array or Query object');
-                }
-                break;
-
-            case 'cookies':
-
-                if ($value === true) {
-                    static $cookie = null;
-                    if (!$cookie) {
-                        $cookie = new Cookie();
-                    }
-                    $emitter->attach($cookie);
-                } elseif (is_array($value)) {
-                    $emitter->attach(
-                        new Cookie(CookieJar::fromArray($value, $request->getHost()))
-                    );
-                } elseif ($value instanceof CookieJarInterface) {
-                    $emitter->attach(new Cookie($value));
-                } elseif ($value !== false) {
-                    throw new Iae('cookies must be an array, true, or CookieJarInterface');
-                }
-                break;
-
-            case 'events':
-
-                if (!is_array($value)) {
-                    throw new Iae('events must be an array');
-                }
-
-                $this->attachListeners($request,
-                    $this->prepareListeners(
-                        $value,
-                        ['before', 'complete', 'error', 'progress', 'end']
-                    )
-                );
-                break;
-
-            case 'subscribers':
-
-                if (!is_array($value)) {
-                    throw new Iae('subscribers must be an array');
-                }
-
-                foreach ($value as $subscribers) {
-                    $emitter->attach($subscribers);
-                }
-                break;
-
-            case 'json':
-
-                $request->setBody(Stream::factory(json_encode($value)));
-                if (!$request->hasHeader('Content-Type')) {
-                    $request->setHeader('Content-Type', 'application/json');
-                }
-                break;
-
-            default:
-
-                // Check for custom handler functions.
-                if (isset($this->customOptions[$key])) {
-                    $fn = $this->customOptions[$key];
-                    $fn($request, $value);
-                    continue;
-                }
-
-                throw new Iae("No method can handle the {$key} config key");
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
deleted file mode 100644
index 57c43e5..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Url;
-
-/**
- * Request and response factory
- */
-interface MessageFactoryInterface
-{
-    /**
-     * Creates a response
-     *
-     * @param string $statusCode HTTP status code
-     * @param array  $headers    Response headers
-     * @param mixed  $body       Response body
-     * @param array  $options    Response options
-     *     - protocol_version: HTTP protocol version
-     *     - header_factory: Factory used to create headers
-     *     - And any other options used by a concrete message implementation
-     *
-     * @return ResponseInterface
-     */
-    public function createResponse(
-        $statusCode,
-        array $headers = [],
-        $body = null,
-        array $options = []
-    );
-
-    /**
-     * Create a new request based on the HTTP method.
-     *
-     * This method accepts an associative array of request options. Below is a
-     * brief description of each parameter. See
-     * http://docs.guzzlephp.org/clients.html#request-options for a much more
-     * in-depth description of each parameter.
-     *
-     * - headers: Associative array of headers to add to the request
-     * - body: string|resource|array|StreamInterface request body to send
-     * - json: mixed Uploads JSON encoded data using an application/json Content-Type header.
-     * - query: Associative array of query string values to add to the request
-     * - auth: array|string HTTP auth settings (user, pass[, type="basic"])
-     * - version: The HTTP protocol version to use with the request
-     * - cookies: true|false|CookieJarInterface To enable or disable cookies
-     * - allow_redirects: true|false|array Controls HTTP redirects
-     * - save_to: string|resource|StreamInterface Where the response is saved
-     * - events: Associative array of event names to callables or arrays
-     * - subscribers: Array of event subscribers to add to the request
-     * - exceptions: Specifies whether or not exceptions are thrown for HTTP protocol errors
-     * - timeout: Timeout of the request in seconds. Use 0 to wait indefinitely
-     * - connect_timeout: Number of seconds to wait while trying to connect. (0 to wait indefinitely)
-     * - verify: SSL validation. True/False or the path to a PEM file
-     * - cert: Path a SSL cert or array of (path, pwd)
-     * - ssl_key: Path to a private SSL key or array of (path, pwd)
-     * - proxy: Specify an HTTP proxy or hash of protocols to proxies
-     * - debug: Set to true or a resource to view handler specific debug info
-     * - stream: Set to true to stream a response body rather than download it all up front
-     * - expect: true/false/integer Controls the "Expect: 100-Continue" header
-     * - config: Associative array of request config collection options
-     * - decode_content: true/false/string to control decoding content-encoding responses
-     *
-     * @param string     $method  HTTP method (GET, POST, PUT, etc.)
-     * @param string|Url $url     HTTP URL to connect to
-     * @param array      $options Array of options to apply to the request
-     *
-     * @return RequestInterface
-     * @link http://docs.guzzlephp.org/clients.html#request-options
-     */
-    public function createRequest($method, $url, array $options = []);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
deleted file mode 100644
index b2b472b..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Request and response message interface
- */
-interface MessageInterface
-{
-    /**
-     * Get a string representation of the message
-     *
-     * @return string
-     */
-    public function __toString();
-
-    /**
-     * Get the HTTP protocol version of the message
-     *
-     * @return string
-     */
-    public function getProtocolVersion();
-
-    /**
-     * Sets the body of the message.
-     *
-     * The body MUST be a StreamInterface object. Setting the body to null MUST
-     * remove the existing body.
-     *
-     * @param StreamInterface|null $body Body.
-     */
-    public function setBody(StreamInterface $body = null);
-
-    /**
-     * Get the body of the message
-     *
-     * @return StreamInterface|null
-     */
-    public function getBody();
-
-    /**
-     * Gets all message headers.
-     *
-     * The keys represent the header name as it will be sent over the wire, and
-     * each value is an array of strings associated with the header.
-     *
-     *     // Represent the headers as a string
-     *     foreach ($message->getHeaders() as $name => $values) {
-     *         echo $name . ": " . implode(", ", $values);
-     *     }
-     *
-     * @return array Returns an associative array of the message's headers.
-     */
-    public function getHeaders();
-
-    /**
-     * Retrieve a header by the given case-insensitive name.
-     *
-     * @param string $header Case-insensitive header name.
-     *
-     * @return string
-     */
-    public function getHeader($header);
-
-    /**
-     * Retrieves a header by the given case-insensitive name as an array of strings.
-     *
-     * @param string $header Case-insensitive header name.
-     *
-     * @return string[]
-     */
-    public function getHeaderAsArray($header);
-
-    /**
-     * Checks if a header exists by the given case-insensitive name.
-     *
-     * @param string $header Case-insensitive header name.
-     *
-     * @return bool Returns true if any header names match the given header
-     *     name using a case-insensitive string comparison. Returns false if
-     *     no matching header name is found in the message.
-     */
-    public function hasHeader($header);
-
-    /**
-     * Remove a specific header by case-insensitive name.
-     *
-     * @param string $header Case-insensitive header name.
-     */
-    public function removeHeader($header);
-
-    /**
-     * Appends a header value to any existing values associated with the
-     * given header name.
-     *
-     * @param string $header Header name to add
-     * @param string $value  Value of the header
-     */
-    public function addHeader($header, $value);
-
-    /**
-     * Merges in an associative array of headers.
-     *
-     * Each array key MUST be a string representing the case-insensitive name
-     * of a header. Each value MUST be either a string or an array of strings.
-     * For each value, the value is appended to any existing header of the same
-     * name, or, if a header does not already exist by the given name, then the
-     * header is added.
-     *
-     * @param array $headers Associative array of headers to add to the message
-     */
-    public function addHeaders(array $headers);
-
-    /**
-     * Sets a header, replacing any existing values of any headers with the
-     * same case-insensitive name.
-     *
-     * The header values MUST be a string or an array of strings.
-     *
-     * @param string       $header Header name
-     * @param string|array $value  Header value(s)
-     */
-    public function setHeader($header, $value);
-
-    /**
-     * Sets headers, replacing any headers that have already been set on the
-     * message.
-     *
-     * The array keys MUST be a string. The array values must be either a
-     * string or an array of strings.
-     *
-     * @param array $headers Headers to set.
-     */
-    public function setHeaders(array $headers);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php
deleted file mode 100644
index c3cc195..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-/**
- * Request and response parser used by Guzzle
- */
-class MessageParser
-{
-    /**
-     * Parse an HTTP request message into an associative array of parts.
-     *
-     * @param string $message HTTP request to parse
-     *
-     * @return array|bool Returns false if the message is invalid
-     */
-    public function parseRequest($message)
-    {
-        if (!($parts = $this->parseMessage($message))) {
-            return false;
-        }
-
-        // Parse the protocol and protocol version
-        if (isset($parts['start_line'][2])) {
-            $startParts = explode('/', $parts['start_line'][2]);
-            $protocol = strtoupper($startParts[0]);
-            $version = isset($startParts[1]) ? $startParts[1] : '1.1';
-        } else {
-            $protocol = 'HTTP';
-            $version = '1.1';
-        }
-
-        $parsed = [
-            'method'   => strtoupper($parts['start_line'][0]),
-            'protocol' => $protocol,
-            'protocol_version' => $version,
-            'headers'  => $parts['headers'],
-            'body'     => $parts['body']
-        ];
-
-        $parsed['request_url'] = $this->getUrlPartsFromMessage(
-            (isset($parts['start_line'][1]) ? $parts['start_line'][1] : ''), $parsed);
-
-        return $parsed;
-    }
-
-    /**
-     * Parse an HTTP response message into an associative array of parts.
-     *
-     * @param string $message HTTP response to parse
-     *
-     * @return array|bool Returns false if the message is invalid
-     */
-    public function parseResponse($message)
-    {
-        if (!($parts = $this->parseMessage($message))) {
-            return false;
-        }
-
-        list($protocol, $version) = explode('/', trim($parts['start_line'][0]));
-
-        return [
-            'protocol'         => $protocol,
-            'protocol_version' => $version,
-            'code'             => $parts['start_line'][1],
-            'reason_phrase'    => isset($parts['start_line'][2]) ? $parts['start_line'][2] : '',
-            'headers'          => $parts['headers'],
-            'body'             => $parts['body']
-        ];
-    }
-
-    /**
-     * Parse a message into parts
-     *
-     * @param string $message Message to parse
-     *
-     * @return array|bool
-     */
-    private function parseMessage($message)
-    {
-        if (!$message) {
-            return false;
-        }
-
-        $startLine = null;
-        $headers = [];
-        $body = '';
-
-        // Iterate over each line in the message, accounting for line endings
-        $lines = preg_split('/(\\r?\\n)/', $message, -1, PREG_SPLIT_DELIM_CAPTURE);
-        for ($i = 0, $totalLines = count($lines); $i < $totalLines; $i += 2) {
-
-            $line = $lines[$i];
-
-            // If two line breaks were encountered, then this is the end of body
-            if (empty($line)) {
-                if ($i < $totalLines - 1) {
-                    $body = implode('', array_slice($lines, $i + 2));
-                }
-                break;
-            }
-
-            // Parse message headers
-            if (!$startLine) {
-                $startLine = explode(' ', $line, 3);
-            } elseif (strpos($line, ':')) {
-                $parts = explode(':', $line, 2);
-                $key = trim($parts[0]);
-                $value = isset($parts[1]) ? trim($parts[1]) : '';
-                if (!isset($headers[$key])) {
-                    $headers[$key] = $value;
-                } elseif (!is_array($headers[$key])) {
-                    $headers[$key] = [$headers[$key], $value];
-                } else {
-                    $headers[$key][] = $value;
-                }
-            }
-        }
-
-        return [
-            'start_line' => $startLine,
-            'headers'    => $headers,
-            'body'       => $body
-        ];
-    }
-
-    /**
-     * Create URL parts from HTTP message parts
-     *
-     * @param string $requestUrl Associated URL
-     * @param array  $parts      HTTP message parts
-     *
-     * @return array
-     */
-    private function getUrlPartsFromMessage($requestUrl, array $parts)
-    {
-        // Parse the URL information from the message
-        $urlParts = ['path' => $requestUrl, 'scheme' => 'http'];
-
-        // Check for the Host header
-        if (isset($parts['headers']['Host'])) {
-            $urlParts['host'] = $parts['headers']['Host'];
-        } elseif (isset($parts['headers']['host'])) {
-            $urlParts['host'] = $parts['headers']['host'];
-        } else {
-            $urlParts['host'] = null;
-        }
-
-        if (false === strpos($urlParts['host'], ':')) {
-            $urlParts['port'] = '';
-        } else {
-            $hostParts = explode(':', $urlParts['host']);
-            $urlParts['host'] = trim($hostParts[0]);
-            $urlParts['port'] = (int) trim($hostParts[1]);
-            if ($urlParts['port'] == 443) {
-                $urlParts['scheme'] = 'https';
-            }
-        }
-
-        // Check if a query is present
-        $path = $urlParts['path'];
-        $qpos = strpos($path, '?');
-        if ($qpos) {
-            $urlParts['query'] = substr($path, $qpos + 1);
-            $urlParts['path'] = substr($path, 0, $qpos);
-        } else {
-            $urlParts['query'] = '';
-        }
-
-        return $urlParts;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/Request.php b/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
deleted file mode 100644
index 4dbe32e..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Collection;
-use GuzzleHttp\Event\HasEmitterTrait;
-use GuzzleHttp\Subscriber\Prepare;
-use GuzzleHttp\Url;
-
-/**
- * HTTP request class to send requests
- */
-class Request extends AbstractMessage implements RequestInterface
-{
-    use HasEmitterTrait;
-
-    /** @var Url HTTP Url */
-    private $url;
-
-    /** @var string HTTP method */
-    private $method;
-
-    /** @var Collection Transfer options */
-    private $transferOptions;
-
-    /**
-     * @param string           $method  HTTP method
-     * @param string|Url       $url     HTTP URL to connect to. The URI scheme,
-     *   host header, and URI are parsed from the full URL. If query string
-     *   parameters are present they will be parsed as well.
-     * @param array|Collection $headers HTTP headers
-     * @param mixed            $body    Body to send with the request
-     * @param array            $options Array of options to use with the request
-     *     - emitter: Event emitter to use with the request
-     */
-    public function __construct(
-        $method,
-        $url,
-        $headers = [],
-        $body = null,
-        array $options = []
-    ) {
-        $this->setUrl($url);
-        $this->method = strtoupper($method);
-        $this->handleOptions($options);
-        $this->transferOptions = new Collection($options);
-        $this->addPrepareEvent();
-
-        if ($body !== null) {
-            $this->setBody($body);
-        }
-
-        if ($headers) {
-            foreach ($headers as $key => $value) {
-                $this->setHeader($key, $value);
-            }
-        }
-    }
-
-    public function __clone()
-    {
-        if ($this->emitter) {
-            $this->emitter = clone $this->emitter;
-        }
-        $this->transferOptions = clone $this->transferOptions;
-        $this->url = clone $this->url;
-    }
-
-    public function setUrl($url)
-    {
-        $this->url = $url instanceof Url ? $url : Url::fromString($url);
-        $this->updateHostHeaderFromUrl();
-    }
-
-    public function getUrl()
-    {
-        return (string) $this->url;
-    }
-
-    public function setQuery($query)
-    {
-        $this->url->setQuery($query);
-    }
-
-    public function getQuery()
-    {
-        return $this->url->getQuery();
-    }
-
-    public function setMethod($method)
-    {
-        $this->method = strtoupper($method);
-    }
-
-    public function getMethod()
-    {
-        return $this->method;
-    }
-
-    public function getScheme()
-    {
-        return $this->url->getScheme();
-    }
-
-    public function setScheme($scheme)
-    {
-        $this->url->setScheme($scheme);
-    }
-
-    public function getPort()
-    {
-        return $this->url->getPort();
-    }
-
-    public function setPort($port)
-    {
-        $this->url->setPort($port);
-        $this->updateHostHeaderFromUrl();
-    }
-
-    public function getHost()
-    {
-        return $this->url->getHost();
-    }
-
-    public function setHost($host)
-    {
-        $this->url->setHost($host);
-        $this->updateHostHeaderFromUrl();
-    }
-
-    public function getPath()
-    {
-        return '/' . ltrim($this->url->getPath(), '/');
-    }
-
-    public function setPath($path)
-    {
-        $this->url->setPath($path);
-    }
-
-    public function getResource()
-    {
-        $resource = $this->getPath();
-        if ($query = (string) $this->url->getQuery()) {
-            $resource .= '?' . $query;
-        }
-
-        return $resource;
-    }
-
-    public function getConfig()
-    {
-        return $this->transferOptions;
-    }
-
-    protected function handleOptions(array &$options)
-    {
-        parent::handleOptions($options);
-        // Use a custom emitter if one is specified, and remove it from
-        // options that are exposed through getConfig()
-        if (isset($options['emitter'])) {
-            $this->emitter = $options['emitter'];
-            unset($options['emitter']);
-        }
-    }
-
-    /**
-     * Adds a subscriber that ensures a request's body is prepared before
-     * sending.
-     */
-    private function addPrepareEvent()
-    {
-        static $subscriber;
-        if (!$subscriber) {
-            $subscriber = new Prepare();
-        }
-
-        $this->getEmitter()->attach($subscriber);
-    }
-
-    private function updateHostHeaderFromUrl()
-    {
-        $port = $this->url->getPort();
-        $scheme = $this->url->getScheme();
-        if ($host = $this->url->getHost()) {
-            if (($port == 80 && $scheme == 'http') ||
-                ($port == 443 && $scheme == 'https')
-            ) {
-                $this->setHeader('Host', $host);
-            } else {
-                $this->setHeader('Host', "{$host}:{$port}");
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
deleted file mode 100644
index f6a69d1..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Event\HasEmitterInterface;
-use GuzzleHttp\Query;
-
-/**
- * Generic HTTP request interface
- */
-interface RequestInterface extends MessageInterface, HasEmitterInterface
-{
-    /**
-     * Sets the request URL.
-     *
-     * The URL MUST be a string, or an object that implements the
-     * `__toString()` method.
-     *
-     * @param string $url Request URL.
-     *
-     * @throws \InvalidArgumentException If the URL is invalid.
-     */
-    public function setUrl($url);
-
-    /**
-     * Gets the request URL as a string.
-     *
-     * @return string Returns the URL as a string.
-     */
-    public function getUrl();
-
-    /**
-     * Get the resource part of the the request, including the path, query
-     * string, and fragment.
-     *
-     * @return string
-     */
-    public function getResource();
-
-    /**
-     * Get the collection of key value pairs that will be used as the query
-     * string in the request.
-     *
-     * @return Query
-     */
-    public function getQuery();
-
-    /**
-     * Set the query string used by the request
-     *
-     * @param array|Query $query Query to set
-     */
-    public function setQuery($query);
-
-    /**
-     * Get the HTTP method of the request.
-     *
-     * @return string
-     */
-    public function getMethod();
-
-    /**
-     * Set the HTTP method of the request.
-     *
-     * @param string $method HTTP method
-     */
-    public function setMethod($method);
-
-    /**
-     * Get the URI scheme of the request (http, https, etc.).
-     *
-     * @return string
-     */
-    public function getScheme();
-
-    /**
-     * Set the URI scheme of the request (http, https, etc.).
-     *
-     * @param string $scheme Scheme to set
-     */
-    public function setScheme($scheme);
-
-    /**
-     * Get the port scheme of the request (e.g., 80, 443, etc.).
-     *
-     * @return int
-     */
-    public function getPort();
-
-    /**
-     * Set the port of the request.
-     *
-     * Setting a port modifies the Host header of a request as necessary.
-     *
-     * @param int $port Port to set
-     */
-    public function setPort($port);
-
-    /**
-     * Get the host of the request.
-     *
-     * @return string
-     */
-    public function getHost();
-
-    /**
-     * Set the host of the request including an optional port.
-     *
-     * Including a port in the host argument will explicitly change the port of
-     * the request. If no port is found, the default port of the current
-     * request scheme will be utilized.
-     *
-     * @param string $host Host to set (e.g. www.yahoo.com, www.yahoo.com:80)
-     */
-    public function setHost($host);
-
-    /**
-     * Get the path of the request (e.g. '/', '/index.html').
-     *
-     * @return string
-     */
-    public function getPath();
-
-    /**
-     * Set the path of the request (e.g. '/', '/index.html').
-     *
-     * @param string|array $path Path to set or array of segments to implode
-     */
-    public function setPath($path);
-
-    /**
-     * Get the request's configuration options.
-     *
-     * @return \GuzzleHttp\Collection
-     */
-    public function getConfig();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/Response.php b/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
deleted file mode 100644
index 42e10e6..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-use GuzzleHttp\Exception\ParseException;
-use GuzzleHttp\Exception\XmlParseException;
-use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Utils;
-
-/**
- * Guzzle HTTP response object
- */
-class Response extends AbstractMessage implements ResponseInterface
-{
-    /** @var array Mapping of status codes to reason phrases */
-    private static $statusTexts = [
-        100 => 'Continue',
-        101 => 'Switching Protocols',
-        102 => 'Processing',
-        200 => 'OK',
-        201 => 'Created',
-        202 => 'Accepted',
-        203 => 'Non-Authoritative Information',
-        204 => 'No Content',
-        205 => 'Reset Content',
-        206 => 'Partial Content',
-        207 => 'Multi-Status',
-        208 => 'Already Reported',
-        226 => 'IM Used',
-        300 => 'Multiple Choices',
-        301 => 'Moved Permanently',
-        302 => 'Found',
-        303 => 'See Other',
-        304 => 'Not Modified',
-        305 => 'Use Proxy',
-        307 => 'Temporary Redirect',
-        308 => 'Permanent Redirect',
-        400 => 'Bad Request',
-        401 => 'Unauthorized',
-        402 => 'Payment Required',
-        403 => 'Forbidden',
-        404 => 'Not Found',
-        405 => 'Method Not Allowed',
-        406 => 'Not Acceptable',
-        407 => 'Proxy Authentication Required',
-        408 => 'Request Timeout',
-        409 => 'Conflict',
-        410 => 'Gone',
-        411 => 'Length Required',
-        412 => 'Precondition Failed',
-        413 => 'Request Entity Too Large',
-        414 => 'Request-URI Too Long',
-        415 => 'Unsupported Media Type',
-        416 => 'Requested Range Not Satisfiable',
-        417 => 'Expectation Failed',
-        422 => 'Unprocessable Entity',
-        423 => 'Locked',
-        424 => 'Failed Dependency',
-        425 => 'Reserved for WebDAV advanced collections expired proposal',
-        426 => 'Upgrade required',
-        428 => 'Precondition Required',
-        429 => 'Too Many Requests',
-        431 => 'Request Header Fields Too Large',
-        500 => 'Internal Server Error',
-        501 => 'Not Implemented',
-        502 => 'Bad Gateway',
-        503 => 'Service Unavailable',
-        504 => 'Gateway Timeout',
-        505 => 'HTTP Version Not Supported',
-        506 => 'Variant Also Negotiates (Experimental)',
-        507 => 'Insufficient Storage',
-        508 => 'Loop Detected',
-        510 => 'Not Extended',
-        511 => 'Network Authentication Required',
-    ];
-
-    /** @var string The reason phrase of the response (human readable code) */
-    private $reasonPhrase;
-
-    /** @var string The status code of the response */
-    private $statusCode;
-
-    /** @var string The effective URL that returned this response */
-    private $effectiveUrl;
-
-    /**
-     * @param int|string      $statusCode The response status code (e.g. 200)
-     * @param array           $headers    The response headers
-     * @param StreamInterface $body       The body of the response
-     * @param array           $options    Response message options
-     *     - reason_phrase: Set a custom reason phrase
-     *     - protocol_version: Set a custom protocol version
-     */
-    public function __construct(
-        $statusCode,
-        array $headers = [],
-        StreamInterface $body = null,
-        array $options = []
-    ) {
-        $this->statusCode = (int) $statusCode;
-        $this->handleOptions($options);
-
-        // Assume a reason phrase if one was not applied as an option
-        if (!$this->reasonPhrase &&
-            isset(self::$statusTexts[$this->statusCode])
-        ) {
-            $this->reasonPhrase = self::$statusTexts[$this->statusCode];
-        }
-
-        if ($headers) {
-            $this->setHeaders($headers);
-        }
-
-        if ($body) {
-            $this->setBody($body);
-        }
-    }
-
-    public function getStatusCode()
-    {
-        return $this->statusCode;
-    }
-
-    public function setStatusCode($code)
-    {
-        return $this->statusCode = (int) $code;
-    }
-
-    public function getReasonPhrase()
-    {
-        return $this->reasonPhrase;
-    }
-
-    public function setReasonPhrase($phrase)
-    {
-        return $this->reasonPhrase = $phrase;
-    }
-
-    public function json(array $config = [])
-    {
-        try {
-            return Utils::jsonDecode(
-                (string) $this->getBody(),
-                isset($config['object']) ? !$config['object'] : true,
-                512,
-                isset($config['big_int_strings']) ? JSON_BIGINT_AS_STRING : 0
-            );
-        } catch (\InvalidArgumentException $e) {
-            throw new ParseException(
-                $e->getMessage(),
-                $this
-            );
-        }
-    }
-
-    public function xml(array $config = [])
-    {
-        $disableEntities = libxml_disable_entity_loader(true);
-        $internalErrors = libxml_use_internal_errors(true);
-
-        try {
-            // Allow XML to be retrieved even if there is no response body
-            $xml = new \SimpleXMLElement(
-                (string) $this->getBody() ?: '<root />',
-                isset($config['libxml_options']) ? $config['libxml_options'] : LIBXML_NONET,
-                false,
-                isset($config['ns']) ? $config['ns'] : '',
-                isset($config['ns_is_prefix']) ? $config['ns_is_prefix'] : false
-            );
-            libxml_disable_entity_loader($disableEntities);
-            libxml_use_internal_errors($internalErrors);
-        } catch (\Exception $e) {
-            libxml_disable_entity_loader($disableEntities);
-            libxml_use_internal_errors($internalErrors);
-            throw new XmlParseException(
-                'Unable to parse response body into XML: ' . $e->getMessage(),
-                $this,
-                $e,
-                (libxml_get_last_error()) ?: null
-            );
-        }
-
-        return $xml;
-    }
-
-    public function getEffectiveUrl()
-    {
-        return $this->effectiveUrl;
-    }
-
-    public function setEffectiveUrl($url)
-    {
-        $this->effectiveUrl = $url;
-    }
-
-    /**
-     * Accepts and modifies the options provided to the response in the
-     * constructor.
-     *
-     * @param array $options Options array passed by reference.
-     */
-    protected function handleOptions(array &$options = [])
-    {
-        parent::handleOptions($options);
-        if (isset($options['reason_phrase'])) {
-            $this->reasonPhrase = $options['reason_phrase'];
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
deleted file mode 100644
index c0ae9be..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-namespace GuzzleHttp\Message;
-
-/**
- * Represents an HTTP response message.
- */
-interface ResponseInterface extends MessageInterface
-{
-    /**
-     * Gets the response Status-Code.
-     *
-     * The Status-Code is a 3-digit integer result code of the server's attempt
-     * to understand and satisfy the request.
-     *
-     * @return int Status code.
-     */
-    public function getStatusCode();
-
-    /**
-     * Sets the status code of this response.
-     *
-     * @param int $code The 3-digit integer result code to set.
-     */
-    public function setStatusCode($code);
-
-    /**
-     * Gets the response Reason-Phrase, a short textual description of the
-     * Status-Code.
-     *
-     * Because a Reason-Phrase is not a required element in response
-     * Status-Line, the Reason-Phrase value MAY be null. Implementations MAY
-     * choose to return the default RFC 2616 recommended reason phrase for the
-     * response's Status-Code.
-     *
-     * @return string|null Reason phrase, or null if unknown.
-     */
-    public function getReasonPhrase();
-
-    /**
-     * Sets the Reason-Phrase of the response.
-     *
-     * If no Reason-Phrase is specified, implementations MAY choose to default
-     * to the RFC 2616 recommended reason phrase for the response's Status-Code.
-     *
-     * @param string $phrase The Reason-Phrase to set.
-     */
-    public function setReasonPhrase($phrase);
-
-    /**
-     * Get the effective URL that resulted in this response (e.g. the last
-     * redirect URL).
-     *
-     * @return string
-     */
-    public function getEffectiveUrl();
-
-    /**
-     * Set the effective URL that resulted in this response (e.g. the last
-     * redirect URL).
-     *
-     * @param string $url Effective URL
-     */
-    public function setEffectiveUrl($url);
-
-    /**
-     * Parse the JSON response body and return the JSON decoded data.
-     *
-     * @param array $config Associative array of configuration settings used
-     *     to control how the JSON data is parsed. Concrete implementations MAY
-     *     add further configuration settings as needed, but they MUST implement
-     *     functionality for the following options:
-     *
-     *     - object: Set to true to parse JSON objects as PHP objects rather
-     *       than associative arrays. Defaults to false.
-     *     - big_int_strings: When set to true, large integers are converted to
-     *       strings rather than floats. Defaults to false.
-     *
-     *     Implementations are free to add further configuration settings as
-     *     needed.
-     *
-     * @return mixed Returns the JSON decoded data based on the provided
-     *     parse settings.
-     * @throws \RuntimeException if the response body is not in JSON format
-     */
-    public function json(array $config = []);
-
-    /**
-     * Parse the XML response body and return a \SimpleXMLElement.
-     *
-     * In order to prevent XXE attacks, this method disables loading external
-     * entities. If you rely on external entities, then you must parse the
-     * XML response manually by accessing the response body directly.
-     *
-     * @param array $config Associative array of configuration settings used
-     *     to control how the XML is parsed. Concrete implementations MAY add
-     *     further configuration settings as needed, but they MUST implement
-     *     functionality for the following options:
-     *
-     *     - ns: Set to a string to represent the namespace prefix or URI
-     *     - ns_is_prefix: Set to true to specify that the NS is a prefix rather
-     *       than a URI (defaults to false).
-     *     - libxml_options: Bitwise OR of the libxml option constants
-     *       listed at http://php.net/manual/en/libxml.constants.php
-     *       (defaults to LIBXML_NONET)
-     *
-     * @return \SimpleXMLElement
-     * @throws \RuntimeException if the response body is not in XML format
-     * @link http://websec.io/2012/08/27/Preventing-XXE-in-PHP.html
-     */
-    public function xml(array $config = []);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/core/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
new file mode 100644
index 0000000..80876cb
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
@@ -0,0 +1,176 @@
+<?php
+namespace GuzzleHttp;
+
+use Psr\Http\Message\MessageInterface;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+
+/**
+ * Formats log messages using variable substitutions for requests, responses,
+ * and other transactional data.
+ *
+ * The following variable substitutions are supported:
+ *
+ * - {request}:      Full HTTP request message
+ * - {response}:     Full HTTP response message
+ * - {ts}:           Timestamp
+ * - {host}:         Host of the request
+ * - {method}:       Method of the request
+ * - {uri}:          URI of the request
+ * - {host}:         Host of the request
+ * - {version}:      Protocol version
+ * - {target}:       Request target of the request (path + query + fragment)
+ * - {hostname}:     Hostname of the machine that sent the request
+ * - {code}:         Status code of the response (if available)
+ * - {phrase}:       Reason phrase of the response  (if available)
+ * - {error}:        Any error messages (if available)
+ * - {req_header_*}: Replace `*` with the lowercased name of a request header to add to the message
+ * - {res_header_*}: Replace `*` with the lowercased name of a response header to add to the message
+ * - {req_headers}:  Request headers
+ * - {res_headers}:  Response headers
+ * - {req_body}:     Request body
+ * - {res_body}:     Response body
+ */
+class MessageFormatter
+{
+    /**
+     * Apache Common Log Format.
+     * @link http://httpd.apache.org/docs/1.3/logs.html#common
+     * @var string
+     */
+    const CLF = "{hostname} {req_header_User-Agent} - [{ts}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}";
+    const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
+    const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';
+
+    /** @var string Template used to format log messages */
+    private $template;
+
+    /**
+     * @param string $template Log message template
+     */
+    public function __construct($template = self::CLF)
+    {
+        $this->template = $template ?: self::CLF;
+    }
+
+    /**
+     * Returns a formatted message string.
+     *
+     * @param RequestInterface  $request  Request that was sent
+     * @param ResponseInterface $response Response that was received
+     * @param \Exception        $error    Exception that was received
+     *
+     * @return string
+     */
+    public function format(
+        RequestInterface $request,
+        ResponseInterface $response = null,
+        \Exception $error = null
+    ) {
+        $cache = [];
+
+        return preg_replace_callback(
+            '/{\s*([A-Za-z_\-\.0-9]+)\s*}/',
+            function (array $matches) use ($request, $response, $error, &$cache) {
+
+                if (isset($cache[$matches[1]])) {
+                    return $cache[$matches[1]];
+                }
+
+                $result = '';
+                switch ($matches[1]) {
+                    case 'request':
+                        $result = Psr7\str($request);
+                        break;
+                    case 'response':
+                        $result = $response ? Psr7\str($response) : '';
+                        break;
+                    case 'req_headers':
+                        $result = trim($request->getMethod()
+                                . ' ' . $request->getRequestTarget())
+                            . ' HTTP/' . $request->getProtocolVersion() . "\r\n"
+                            . $this->headers($request);
+                        break;
+                    case 'res_headers':
+                        $result = $response ?
+                            sprintf(
+                                'HTTP/%s %d %s',
+                                $response->getProtocolVersion(),
+                                $response->getStatusCode(),
+                                $response->getReasonPhrase()
+                            ) . "\r\n" . $this->headers($response)
+                            : 'NULL';
+                        break;
+                    case 'req_body':
+                        $result = $request->getBody();
+                        break;
+                    case 'res_body':
+                        $result = $response ? $response->getBody() : 'NULL';
+                        break;
+                    case 'ts':
+                        $result = gmdate('c');
+                        break;
+                    case 'method':
+                        $result = $request->getMethod();
+                        break;
+                    case 'version':
+                        $result = $request->getProtocolVersion();
+                        break;
+                    case 'uri':
+                    case 'url':
+                        $result = $request->getUri();
+                        break;
+                    case 'target':
+                        $result = $request->getRequestTarget();
+                        break;
+                    case 'req_version':
+                        $result = $request->getProtocolVersion();
+                        break;
+                    case 'res_version':
+                        $result = $response
+                            ? $response->getProtocolVersion()
+                            : 'NULL';
+                        break;
+                    case 'host':
+                        $result = $request->getHeaderLine('Host');
+                        break;
+                    case 'hostname':
+                        $result = gethostname();
+                        break;
+                    case 'code':
+                        $result = $response ? $response->getStatusCode() : 'NULL';
+                        break;
+                    case 'phrase':
+                        $result = $response ? $response->getReasonPhrase() : 'NULL';
+                        break;
+                    case 'error':
+                        $result = $error ? $error->getMessage() : 'NULL';
+                        break;
+                    default:
+                        // handle prefixed dynamic headers
+                        if (strpos($matches[1], 'req_header_') === 0) {
+                            $result = $request->getHeaderLine(substr($matches[1], 11));
+                        } elseif (strpos($matches[1], 'res_header_') === 0) {
+                            $result = $response
+                                ? $response->getHeaderLine(substr($matches[1], 11))
+                                : 'NULL';
+                        }
+                }
+
+                $cache[$matches[1]] = $result;
+                return $result;
+            },
+            $this->template
+        );
+    }
+
+    private function headers(MessageInterface $message)
+    {
+        $result = '';
+        foreach ($message->getHeaders() as $name => $values) {
+            $result .= $name . ': ' . implode(', ', $values) . "\r\n";
+        }
+
+        return trim($result);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Middleware.php b/core/vendor/guzzlehttp/guzzle/src/Middleware.php
new file mode 100644
index 0000000..8b5a5ee
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Middleware.php
@@ -0,0 +1,251 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Cookie\CookieJarInterface;
+use GuzzleHttp\Exception\ClientException;
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Exception\ServerException;
+use GuzzleHttp\Promise\RejectedPromise;
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Functions used to create and wrap handlers with handler middleware.
+ */
+final class Middleware
+{
+    /**
+     * Middleware that adds cookies to requests.
+     *
+     * The options array must be set to a CookieJarInterface in order to use
+     * cookies. This is typically handled for you by a client.
+     *
+     * @return callable Returns a function that accepts the next handler.
+     */
+    public static function cookies()
+    {
+        return function (callable $handler) {
+            return function ($request, array $options) use ($handler) {
+                if (empty($options['cookies'])) {
+                    return $handler($request, $options);
+                } elseif (!($options['cookies'] instanceof CookieJarInterface)) {
+                    throw new \InvalidArgumentException('cookies must be an instance of GuzzleHttp\Cookie\CookieJarInterface');
+                }
+                $cookieJar = $options['cookies'];
+                $request = $cookieJar->withCookieHeader($request);
+                return $handler($request, $options)
+                    ->then(function ($response) use ($cookieJar, $request) {
+                        $cookieJar->extractCookies($request, $response);
+                        return $response;
+                    }
+                );
+            };
+        };
+    }
+
+    /**
+     * Middleware that throws exceptions for 4xx or 5xx responses when the
+     * "http_error" request option is set to true.
+     *
+     * @return callable Returns a function that accepts the next handler.
+     */
+    public static function httpErrors()
+    {
+        return function (callable $handler) {
+            return function ($request, array $options) use ($handler) {
+                if (empty($options['http_errors'])) {
+                    return $handler($request, $options);
+                }
+                return $handler($request, $options)->then(
+                    function (ResponseInterface $response) use ($request, $handler) {
+                        $code = $response->getStatusCode();
+                        if ($code < 400) {
+                            return $response;
+                        }
+                        throw $code > 499
+                            ? new ServerException("Server error: $code", $request, $response)
+                            : new ClientException("Client error: $code", $request, $response);
+                    }
+                );
+            };
+        };
+    }
+
+    /**
+     * Middleware that pushes history data to an ArrayAccess container.
+     *
+     * @param array $container Container to hold the history (by reference).
+     *
+     * @return callable Returns a function that accepts the next handler.
+     */
+    public static function history(array &$container)
+    {
+        return function (callable $handler) use (&$container) {
+            return function ($request, array $options) use ($handler, &$container) {
+                return $handler($request, $options)->then(
+                    function ($value) use ($request, &$container, $options) {
+                        $container[] = [
+                            'request'  => $request,
+                            'response' => $value,
+                            'error'    => null,
+                            'options'  => $options
+                        ];
+                        return $value;
+                    },
+                    function ($reason) use ($request, &$container, $options) {
+                        $container[] = [
+                            'request'  => $request,
+                            'response' => null,
+                            'error'    => $reason,
+                            'options'  => $options
+                        ];
+                        return new RejectedPromise($reason);
+                    }
+                );
+            };
+        };
+    }
+
+    /**
+     * Middleware that invokes a callback before and after sending a request.
+     *
+     * The provided listener cannot modify or alter the response. It simply
+     * "taps" into the chain to be notified before returning the promise. The
+     * before listener accepts a request and options array, and the after
+     * listener accepts a request, options array, and response promise.
+     *
+     * @param callable $before Function to invoke before forwarding the request.
+     * @param callable $after  Function invoked after forwarding.
+     *
+     * @return callable Returns a function that accepts the next handler.
+     */
+    public static function tap(callable $before = null, callable $after = null)
+    {
+        return function (callable $handler) use ($before, $after) {
+            return function ($request, array $options) use ($handler, $before, $after) {
+                if ($before) {
+                    $before($request, $options);
+                }
+                $response = $handler($request, $options);
+                if ($after) {
+                    $after($request, $options, $response);
+                }
+                return $response;
+            };
+        };
+    }
+
+    /**
+     * Middleware that handles request redirects.
+     *
+     * @return callable Returns a function that accepts the next handler.
+     */
+    public static function redirect()
+    {
+        return function (callable $handler) {
+            return new RedirectMiddleware($handler);
+        };
+    }
+
+    /**
+     * Middleware that retries requests based on the boolean result of
+     * invoking the provided "decider" function.
+     *
+     * If no delay function is provided, a simple implementation of exponential
+     * backoff will be utilized.
+     *
+     * @param callable $decider Function that accepts the number of retries,
+     *                          a request, [response], and [exception] and
+     *                          returns true if the request is to be retried.
+     * @param callable $delay   Function that accepts the number of retries and
+     *                          returns the number of milliseconds to delay.
+     *
+     * @return callable Returns a function that accepts the next handler.
+     */
+    public static function retry(callable $decider, callable $delay = null)
+    {
+        return function (callable $handler) use ($decider, $delay) {
+            return new RetryMiddleware($decider, $handler, $delay);
+        };
+    }
+
+    /**
+     * Middleware that logs requests, responses, and errors using a message
+     * formatter.
+     *
+     * @param LoggerInterface  $logger Logs messages.
+     * @param MessageFormatter $formatter Formatter used to create message strings.
+     *
+     * @return callable Returns a function that accepts the next handler.
+     */
+    public static function log(LoggerInterface $logger, MessageFormatter $formatter)
+    {
+        return function (callable $handler) use ($logger, $formatter) {
+            return function ($request, array $options) use ($handler, $logger, $formatter) {
+                return $handler($request, $options)->then(
+                    function ($response) use ($logger, $request, $formatter) {
+                        $message = $formatter->format($request, $response);
+                        $logger->info($message);
+                        return $response;
+                    },
+                    function ($reason) use ($logger, $request, $formatter) {
+                        $response = $reason instanceof RequestException
+                            ? $reason->getResponse()
+                            : null;
+                        $message = $formatter->format($request, $response, $reason);
+                        $logger->notice($message);
+                        return \GuzzleHttp\Promise\rejection_for($reason);
+                    }
+                );
+            };
+        };
+    }
+
+    /**
+     * This middleware adds a default content-type if possible, a default
+     * content-length or transfer-encoding header, and the expect header.
+     *
+     * @return callable
+     */
+    public static function prepareBody()
+    {
+        return function (callable $handler) {
+            return new PrepareBodyMiddleware($handler);
+        };
+    }
+
+    /**
+     * Middleware that applies a map function to the request before passing to
+     * the next handler.
+     *
+     * @param callable $fn Function that accepts a RequestInterface and returns
+     *                     a RequestInterface.
+     * @return callable
+     */
+    public static function mapRequest(callable $fn)
+    {
+        return function (callable $handler) use ($fn) {
+            return function ($request, array $options) use ($handler, $fn) {
+                return $handler($fn($request), $options);
+            };
+        };
+    }
+
+    /**
+     * Middleware that applies a map function to the resolved promise's
+     * response.
+     *
+     * @param callable $fn Function that accepts a ResponseInterface and
+     *                     returns a ResponseInterface.
+     * @return callable
+     */
+    public static function mapResponse(callable $fn)
+    {
+        return function (callable $handler) use ($fn) {
+            return function ($request, array $options) use ($handler, $fn) {
+                return $handler($request, $options)->then($fn);
+            };
+        };
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php b/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
deleted file mode 100644
index 66ac63c..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
+++ /dev/null
@@ -1,963 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Provides mappings of file extensions to mimetypes
- * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types
- */
-class Mimetypes
-{
-    /** @var self */
-    protected static $instance;
-
-    /** @var array Mapping of extension to mimetype */
-    protected $mimetypes = array(
-        '3dml' => 'text/vnd.in3d.3dml',
-        '3g2' => 'video/3gpp2',
-        '3gp' => 'video/3gpp',
-        '7z' => 'application/x-7z-compressed',
-        'aab' => 'application/x-authorware-bin',
-        'aac' => 'audio/x-aac',
-        'aam' => 'application/x-authorware-map',
-        'aas' => 'application/x-authorware-seg',
-        'abw' => 'application/x-abiword',
-        'ac' => 'application/pkix-attr-cert',
-        'acc' => 'application/vnd.americandynamics.acc',
-        'ace' => 'application/x-ace-compressed',
-        'acu' => 'application/vnd.acucobol',
-        'acutc' => 'application/vnd.acucorp',
-        'adp' => 'audio/adpcm',
-        'aep' => 'application/vnd.audiograph',
-        'afm' => 'application/x-font-type1',
-        'afp' => 'application/vnd.ibm.modcap',
-        'ahead' => 'application/vnd.ahead.space',
-        'ai' => 'application/postscript',
-        'aif' => 'audio/x-aiff',
-        'aifc' => 'audio/x-aiff',
-        'aiff' => 'audio/x-aiff',
-        'air' => 'application/vnd.adobe.air-application-installer-package+zip',
-        'ait' => 'application/vnd.dvb.ait',
-        'ami' => 'application/vnd.amiga.ami',
-        'apk' => 'application/vnd.android.package-archive',
-        'application' => 'application/x-ms-application',
-        'apr' => 'application/vnd.lotus-approach',
-        'asa' => 'text/plain',
-        'asax' => 'application/octet-stream',
-        'asc' => 'application/pgp-signature',
-        'ascx' => 'text/plain',
-        'asf' => 'video/x-ms-asf',
-        'ashx' => 'text/plain',
-        'asm' => 'text/x-asm',
-        'asmx' => 'text/plain',
-        'aso' => 'application/vnd.accpac.simply.aso',
-        'asp' => 'text/plain',
-        'aspx' => 'text/plain',
-        'asx' => 'video/x-ms-asf',
-        'atc' => 'application/vnd.acucorp',
-        'atom' => 'application/atom+xml',
-        'atomcat' => 'application/atomcat+xml',
-        'atomsvc' => 'application/atomsvc+xml',
-        'atx' => 'application/vnd.antix.game-component',
-        'au' => 'audio/basic',
-        'avi' => 'video/x-msvideo',
-        'aw' => 'application/applixware',
-        'axd' => 'text/plain',
-        'azf' => 'application/vnd.airzip.filesecure.azf',
-        'azs' => 'application/vnd.airzip.filesecure.azs',
-        'azw' => 'application/vnd.amazon.ebook',
-        'bat' => 'application/x-msdownload',
-        'bcpio' => 'application/x-bcpio',
-        'bdf' => 'application/x-font-bdf',
-        'bdm' => 'application/vnd.syncml.dm+wbxml',
-        'bed' => 'application/vnd.realvnc.bed',
-        'bh2' => 'application/vnd.fujitsu.oasysprs',
-        'bin' => 'application/octet-stream',
-        'bmi' => 'application/vnd.bmi',
-        'bmp' => 'image/bmp',
-        'book' => 'application/vnd.framemaker',
-        'box' => 'application/vnd.previewsystems.box',
-        'boz' => 'application/x-bzip2',
-        'bpk' => 'application/octet-stream',
-        'btif' => 'image/prs.btif',
-        'bz' => 'application/x-bzip',
-        'bz2' => 'application/x-bzip2',
-        'c' => 'text/x-c',
-        'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
-        'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
-        'c4d' => 'application/vnd.clonk.c4group',
-        'c4f' => 'application/vnd.clonk.c4group',
-        'c4g' => 'application/vnd.clonk.c4group',
-        'c4p' => 'application/vnd.clonk.c4group',
-        'c4u' => 'application/vnd.clonk.c4group',
-        'cab' => 'application/vnd.ms-cab-compressed',
-        'car' => 'application/vnd.curl.car',
-        'cat' => 'application/vnd.ms-pki.seccat',
-        'cc' => 'text/x-c',
-        'cct' => 'application/x-director',
-        'ccxml' => 'application/ccxml+xml',
-        'cdbcmsg' => 'application/vnd.contact.cmsg',
-        'cdf' => 'application/x-netcdf',
-        'cdkey' => 'application/vnd.mediastation.cdkey',
-        'cdmia' => 'application/cdmi-capability',
-        'cdmic' => 'application/cdmi-container',
-        'cdmid' => 'application/cdmi-domain',
-        'cdmio' => 'application/cdmi-object',
-        'cdmiq' => 'application/cdmi-queue',
-        'cdx' => 'chemical/x-cdx',
-        'cdxml' => 'application/vnd.chemdraw+xml',
-        'cdy' => 'application/vnd.cinderella',
-        'cer' => 'application/pkix-cert',
-        'cfc' => 'application/x-coldfusion',
-        'cfm' => 'application/x-coldfusion',
-        'cgm' => 'image/cgm',
-        'chat' => 'application/x-chat',
-        'chm' => 'application/vnd.ms-htmlhelp',
-        'chrt' => 'application/vnd.kde.kchart',
-        'cif' => 'chemical/x-cif',
-        'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
-        'cil' => 'application/vnd.ms-artgalry',
-        'cla' => 'application/vnd.claymore',
-        'class' => 'application/java-vm',
-        'clkk' => 'application/vnd.crick.clicker.keyboard',
-        'clkp' => 'application/vnd.crick.clicker.palette',
-        'clkt' => 'application/vnd.crick.clicker.template',
-        'clkw' => 'application/vnd.crick.clicker.wordbank',
-        'clkx' => 'application/vnd.crick.clicker',
-        'clp' => 'application/x-msclip',
-        'cmc' => 'application/vnd.cosmocaller',
-        'cmdf' => 'chemical/x-cmdf',
-        'cml' => 'chemical/x-cml',
-        'cmp' => 'application/vnd.yellowriver-custom-menu',
-        'cmx' => 'image/x-cmx',
-        'cod' => 'application/vnd.rim.cod',
-        'com' => 'application/x-msdownload',
-        'conf' => 'text/plain',
-        'cpio' => 'application/x-cpio',
-        'cpp' => 'text/x-c',
-        'cpt' => 'application/mac-compactpro',
-        'crd' => 'application/x-mscardfile',
-        'crl' => 'application/pkix-crl',
-        'crt' => 'application/x-x509-ca-cert',
-        'cryptonote' => 'application/vnd.rig.cryptonote',
-        'cs' => 'text/plain',
-        'csh' => 'application/x-csh',
-        'csml' => 'chemical/x-csml',
-        'csp' => 'application/vnd.commonspace',
-        'css' => 'text/css',
-        'cst' => 'application/x-director',
-        'csv' => 'text/csv',
-        'cu' => 'application/cu-seeme',
-        'curl' => 'text/vnd.curl',
-        'cww' => 'application/prs.cww',
-        'cxt' => 'application/x-director',
-        'cxx' => 'text/x-c',
-        'dae' => 'model/vnd.collada+xml',
-        'daf' => 'application/vnd.mobius.daf',
-        'dataless' => 'application/vnd.fdsn.seed',
-        'davmount' => 'application/davmount+xml',
-        'dcr' => 'application/x-director',
-        'dcurl' => 'text/vnd.curl.dcurl',
-        'dd2' => 'application/vnd.oma.dd2+xml',
-        'ddd' => 'application/vnd.fujixerox.ddd',
-        'deb' => 'application/x-debian-package',
-        'def' => 'text/plain',
-        'deploy' => 'application/octet-stream',
-        'der' => 'application/x-x509-ca-cert',
-        'dfac' => 'application/vnd.dreamfactory',
-        'dic' => 'text/x-c',
-        'dir' => 'application/x-director',
-        'dis' => 'application/vnd.mobius.dis',
-        'dist' => 'application/octet-stream',
-        'distz' => 'application/octet-stream',
-        'djv' => 'image/vnd.djvu',
-        'djvu' => 'image/vnd.djvu',
-        'dll' => 'application/x-msdownload',
-        'dmg' => 'application/octet-stream',
-        'dms' => 'application/octet-stream',
-        'dna' => 'application/vnd.dna',
-        'doc' => 'application/msword',
-        'docm' => 'application/vnd.ms-word.document.macroenabled.12',
-        'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
-        'dot' => 'application/msword',
-        'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
-        'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
-        'dp' => 'application/vnd.osgi.dp',
-        'dpg' => 'application/vnd.dpgraph',
-        'dra' => 'audio/vnd.dra',
-        'dsc' => 'text/prs.lines.tag',
-        'dssc' => 'application/dssc+der',
-        'dtb' => 'application/x-dtbook+xml',
-        'dtd' => 'application/xml-dtd',
-        'dts' => 'audio/vnd.dts',
-        'dtshd' => 'audio/vnd.dts.hd',
-        'dump' => 'application/octet-stream',
-        'dvi' => 'application/x-dvi',
-        'dwf' => 'model/vnd.dwf',
-        'dwg' => 'image/vnd.dwg',
-        'dxf' => 'image/vnd.dxf',
-        'dxp' => 'application/vnd.spotfire.dxp',
-        'dxr' => 'application/x-director',
-        'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
-        'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
-        'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
-        'ecma' => 'application/ecmascript',
-        'edm' => 'application/vnd.novadigm.edm',
-        'edx' => 'application/vnd.novadigm.edx',
-        'efif' => 'application/vnd.picsel',
-        'ei6' => 'application/vnd.pg.osasli',
-        'elc' => 'application/octet-stream',
-        'eml' => 'message/rfc822',
-        'emma' => 'application/emma+xml',
-        'eol' => 'audio/vnd.digital-winds',
-        'eot' => 'application/vnd.ms-fontobject',
-        'eps' => 'application/postscript',
-        'epub' => 'application/epub+zip',
-        'es3' => 'application/vnd.eszigno3+xml',
-        'esf' => 'application/vnd.epson.esf',
-        'et3' => 'application/vnd.eszigno3+xml',
-        'etx' => 'text/x-setext',
-        'exe' => 'application/x-msdownload',
-        'exi' => 'application/exi',
-        'ext' => 'application/vnd.novadigm.ext',
-        'ez' => 'application/andrew-inset',
-        'ez2' => 'application/vnd.ezpix-album',
-        'ez3' => 'application/vnd.ezpix-package',
-        'f' => 'text/x-fortran',
-        'f4v' => 'video/x-f4v',
-        'f77' => 'text/x-fortran',
-        'f90' => 'text/x-fortran',
-        'fbs' => 'image/vnd.fastbidsheet',
-        'fcs' => 'application/vnd.isac.fcs',
-        'fdf' => 'application/vnd.fdf',
-        'fe_launch' => 'application/vnd.denovo.fcselayout-link',
-        'fg5' => 'application/vnd.fujitsu.oasysgp',
-        'fgd' => 'application/x-director',
-        'fh' => 'image/x-freehand',
-        'fh4' => 'image/x-freehand',
-        'fh5' => 'image/x-freehand',
-        'fh7' => 'image/x-freehand',
-        'fhc' => 'image/x-freehand',
-        'fig' => 'application/x-xfig',
-        'fli' => 'video/x-fli',
-        'flo' => 'application/vnd.micrografx.flo',
-        'flv' => 'video/x-flv',
-        'flw' => 'application/vnd.kde.kivio',
-        'flx' => 'text/vnd.fmi.flexstor',
-        'fly' => 'text/vnd.fly',
-        'fm' => 'application/vnd.framemaker',
-        'fnc' => 'application/vnd.frogans.fnc',
-        'for' => 'text/x-fortran',
-        'fpx' => 'image/vnd.fpx',
-        'frame' => 'application/vnd.framemaker',
-        'fsc' => 'application/vnd.fsc.weblaunch',
-        'fst' => 'image/vnd.fst',
-        'ftc' => 'application/vnd.fluxtime.clip',
-        'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
-        'fvt' => 'video/vnd.fvt',
-        'fxp' => 'application/vnd.adobe.fxp',
-        'fxpl' => 'application/vnd.adobe.fxp',
-        'fzs' => 'application/vnd.fuzzysheet',
-        'g2w' => 'application/vnd.geoplan',
-        'g3' => 'image/g3fax',
-        'g3w' => 'application/vnd.geospace',
-        'gac' => 'application/vnd.groove-account',
-        'gdl' => 'model/vnd.gdl',
-        'geo' => 'application/vnd.dynageo',
-        'gex' => 'application/vnd.geometry-explorer',
-        'ggb' => 'application/vnd.geogebra.file',
-        'ggt' => 'application/vnd.geogebra.tool',
-        'ghf' => 'application/vnd.groove-help',
-        'gif' => 'image/gif',
-        'gim' => 'application/vnd.groove-identity-message',
-        'gmx' => 'application/vnd.gmx',
-        'gnumeric' => 'application/x-gnumeric',
-        'gph' => 'application/vnd.flographit',
-        'gqf' => 'application/vnd.grafeq',
-        'gqs' => 'application/vnd.grafeq',
-        'gram' => 'application/srgs',
-        'gre' => 'application/vnd.geometry-explorer',
-        'grv' => 'application/vnd.groove-injector',
-        'grxml' => 'application/srgs+xml',
-        'gsf' => 'application/x-font-ghostscript',
-        'gtar' => 'application/x-gtar',
-        'gtm' => 'application/vnd.groove-tool-message',
-        'gtw' => 'model/vnd.gtw',
-        'gv' => 'text/vnd.graphviz',
-        'gxt' => 'application/vnd.geonext',
-        'h' => 'text/x-c',
-        'h261' => 'video/h261',
-        'h263' => 'video/h263',
-        'h264' => 'video/h264',
-        'hal' => 'application/vnd.hal+xml',
-        'hbci' => 'application/vnd.hbci',
-        'hdf' => 'application/x-hdf',
-        'hh' => 'text/x-c',
-        'hlp' => 'application/winhlp',
-        'hpgl' => 'application/vnd.hp-hpgl',
-        'hpid' => 'application/vnd.hp-hpid',
-        'hps' => 'application/vnd.hp-hps',
-        'hqx' => 'application/mac-binhex40',
-        'hta' => 'application/octet-stream',
-        'htc' => 'text/html',
-        'htke' => 'application/vnd.kenameaapp',
-        'htm' => 'text/html',
-        'html' => 'text/html',
-        'hvd' => 'application/vnd.yamaha.hv-dic',
-        'hvp' => 'application/vnd.yamaha.hv-voice',
-        'hvs' => 'application/vnd.yamaha.hv-script',
-        'i2g' => 'application/vnd.intergeo',
-        'icc' => 'application/vnd.iccprofile',
-        'ice' => 'x-conference/x-cooltalk',
-        'icm' => 'application/vnd.iccprofile',
-        'ico' => 'image/x-icon',
-        'ics' => 'text/calendar',
-        'ief' => 'image/ief',
-        'ifb' => 'text/calendar',
-        'ifm' => 'application/vnd.shana.informed.formdata',
-        'iges' => 'model/iges',
-        'igl' => 'application/vnd.igloader',
-        'igm' => 'application/vnd.insors.igm',
-        'igs' => 'model/iges',
-        'igx' => 'application/vnd.micrografx.igx',
-        'iif' => 'application/vnd.shana.informed.interchange',
-        'imp' => 'application/vnd.accpac.simply.imp',
-        'ims' => 'application/vnd.ms-ims',
-        'in' => 'text/plain',
-        'ini' => 'text/plain',
-        'ipfix' => 'application/ipfix',
-        'ipk' => 'application/vnd.shana.informed.package',
-        'irm' => 'application/vnd.ibm.rights-management',
-        'irp' => 'application/vnd.irepository.package+xml',
-        'iso' => 'application/octet-stream',
-        'itp' => 'application/vnd.shana.informed.formtemplate',
-        'ivp' => 'application/vnd.immervision-ivp',
-        'ivu' => 'application/vnd.immervision-ivu',
-        'jad' => 'text/vnd.sun.j2me.app-descriptor',
-        'jam' => 'application/vnd.jam',
-        'jar' => 'application/java-archive',
-        'java' => 'text/x-java-source',
-        'jisp' => 'application/vnd.jisp',
-        'jlt' => 'application/vnd.hp-jlyt',
-        'jnlp' => 'application/x-java-jnlp-file',
-        'joda' => 'application/vnd.joost.joda-archive',
-        'jpe' => 'image/jpeg',
-        'jpeg' => 'image/jpeg',
-        'jpg' => 'image/jpeg',
-        'jpgm' => 'video/jpm',
-        'jpgv' => 'video/jpeg',
-        'jpm' => 'video/jpm',
-        'js' => 'text/javascript',
-        'json' => 'application/json',
-        'kar' => 'audio/midi',
-        'karbon' => 'application/vnd.kde.karbon',
-        'kfo' => 'application/vnd.kde.kformula',
-        'kia' => 'application/vnd.kidspiration',
-        'kml' => 'application/vnd.google-earth.kml+xml',
-        'kmz' => 'application/vnd.google-earth.kmz',
-        'kne' => 'application/vnd.kinar',
-        'knp' => 'application/vnd.kinar',
-        'kon' => 'application/vnd.kde.kontour',
-        'kpr' => 'application/vnd.kde.kpresenter',
-        'kpt' => 'application/vnd.kde.kpresenter',
-        'ksp' => 'application/vnd.kde.kspread',
-        'ktr' => 'application/vnd.kahootz',
-        'ktx' => 'image/ktx',
-        'ktz' => 'application/vnd.kahootz',
-        'kwd' => 'application/vnd.kde.kword',
-        'kwt' => 'application/vnd.kde.kword',
-        'lasxml' => 'application/vnd.las.las+xml',
-        'latex' => 'application/x-latex',
-        'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
-        'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
-        'les' => 'application/vnd.hhe.lesson-player',
-        'lha' => 'application/octet-stream',
-        'link66' => 'application/vnd.route66.link66+xml',
-        'list' => 'text/plain',
-        'list3820' => 'application/vnd.ibm.modcap',
-        'listafp' => 'application/vnd.ibm.modcap',
-        'log' => 'text/plain',
-        'lostxml' => 'application/lost+xml',
-        'lrf' => 'application/octet-stream',
-        'lrm' => 'application/vnd.ms-lrm',
-        'ltf' => 'application/vnd.frogans.ltf',
-        'lvp' => 'audio/vnd.lucent.voice',
-        'lwp' => 'application/vnd.lotus-wordpro',
-        'lzh' => 'application/octet-stream',
-        'm13' => 'application/x-msmediaview',
-        'm14' => 'application/x-msmediaview',
-        'm1v' => 'video/mpeg',
-        'm21' => 'application/mp21',
-        'm2a' => 'audio/mpeg',
-        'm2v' => 'video/mpeg',
-        'm3a' => 'audio/mpeg',
-        'm3u' => 'audio/x-mpegurl',
-        'm3u8' => 'application/vnd.apple.mpegurl',
-        'm4a' => 'audio/mp4',
-        'm4u' => 'video/vnd.mpegurl',
-        'm4v' => 'video/mp4',
-        'ma' => 'application/mathematica',
-        'mads' => 'application/mads+xml',
-        'mag' => 'application/vnd.ecowin.chart',
-        'maker' => 'application/vnd.framemaker',
-        'man' => 'text/troff',
-        'mathml' => 'application/mathml+xml',
-        'mb' => 'application/mathematica',
-        'mbk' => 'application/vnd.mobius.mbk',
-        'mbox' => 'application/mbox',
-        'mc1' => 'application/vnd.medcalcdata',
-        'mcd' => 'application/vnd.mcd',
-        'mcurl' => 'text/vnd.curl.mcurl',
-        'mdb' => 'application/x-msaccess',
-        'mdi' => 'image/vnd.ms-modi',
-        'me' => 'text/troff',
-        'mesh' => 'model/mesh',
-        'meta4' => 'application/metalink4+xml',
-        'mets' => 'application/mets+xml',
-        'mfm' => 'application/vnd.mfmp',
-        'mgp' => 'application/vnd.osgeo.mapguide.package',
-        'mgz' => 'application/vnd.proteus.magazine',
-        'mid' => 'audio/midi',
-        'midi' => 'audio/midi',
-        'mif' => 'application/vnd.mif',
-        'mime' => 'message/rfc822',
-        'mj2' => 'video/mj2',
-        'mjp2' => 'video/mj2',
-        'mlp' => 'application/vnd.dolby.mlp',
-        'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
-        'mmf' => 'application/vnd.smaf',
-        'mmr' => 'image/vnd.fujixerox.edmics-mmr',
-        'mny' => 'application/x-msmoney',
-        'mobi' => 'application/x-mobipocket-ebook',
-        'mods' => 'application/mods+xml',
-        'mov' => 'video/quicktime',
-        'movie' => 'video/x-sgi-movie',
-        'mp2' => 'audio/mpeg',
-        'mp21' => 'application/mp21',
-        'mp2a' => 'audio/mpeg',
-        'mp3' => 'audio/mpeg',
-        'mp4' => 'video/mp4',
-        'mp4a' => 'audio/mp4',
-        'mp4s' => 'application/mp4',
-        'mp4v' => 'video/mp4',
-        'mpc' => 'application/vnd.mophun.certificate',
-        'mpe' => 'video/mpeg',
-        'mpeg' => 'video/mpeg',
-        'mpg' => 'video/mpeg',
-        'mpg4' => 'video/mp4',
-        'mpga' => 'audio/mpeg',
-        'mpkg' => 'application/vnd.apple.installer+xml',
-        'mpm' => 'application/vnd.blueice.multipass',
-        'mpn' => 'application/vnd.mophun.application',
-        'mpp' => 'application/vnd.ms-project',
-        'mpt' => 'application/vnd.ms-project',
-        'mpy' => 'application/vnd.ibm.minipay',
-        'mqy' => 'application/vnd.mobius.mqy',
-        'mrc' => 'application/marc',
-        'mrcx' => 'application/marcxml+xml',
-        'ms' => 'text/troff',
-        'mscml' => 'application/mediaservercontrol+xml',
-        'mseed' => 'application/vnd.fdsn.mseed',
-        'mseq' => 'application/vnd.mseq',
-        'msf' => 'application/vnd.epson.msf',
-        'msh' => 'model/mesh',
-        'msi' => 'application/x-msdownload',
-        'msl' => 'application/vnd.mobius.msl',
-        'msty' => 'application/vnd.muvee.style',
-        'mts' => 'model/vnd.mts',
-        'mus' => 'application/vnd.musician',
-        'musicxml' => 'application/vnd.recordare.musicxml+xml',
-        'mvb' => 'application/x-msmediaview',
-        'mwf' => 'application/vnd.mfer',
-        'mxf' => 'application/mxf',
-        'mxl' => 'application/vnd.recordare.musicxml',
-        'mxml' => 'application/xv+xml',
-        'mxs' => 'application/vnd.triscape.mxs',
-        'mxu' => 'video/vnd.mpegurl',
-        'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
-        'n3' => 'text/n3',
-        'nb' => 'application/mathematica',
-        'nbp' => 'application/vnd.wolfram.player',
-        'nc' => 'application/x-netcdf',
-        'ncx' => 'application/x-dtbncx+xml',
-        'ngdat' => 'application/vnd.nokia.n-gage.data',
-        'nlu' => 'application/vnd.neurolanguage.nlu',
-        'nml' => 'application/vnd.enliven',
-        'nnd' => 'application/vnd.noblenet-directory',
-        'nns' => 'application/vnd.noblenet-sealer',
-        'nnw' => 'application/vnd.noblenet-web',
-        'npx' => 'image/vnd.net-fpx',
-        'nsf' => 'application/vnd.lotus-notes',
-        'oa2' => 'application/vnd.fujitsu.oasys2',
-        'oa3' => 'application/vnd.fujitsu.oasys3',
-        'oas' => 'application/vnd.fujitsu.oasys',
-        'obd' => 'application/x-msbinder',
-        'oda' => 'application/oda',
-        'odb' => 'application/vnd.oasis.opendocument.database',
-        'odc' => 'application/vnd.oasis.opendocument.chart',
-        'odf' => 'application/vnd.oasis.opendocument.formula',
-        'odft' => 'application/vnd.oasis.opendocument.formula-template',
-        'odg' => 'application/vnd.oasis.opendocument.graphics',
-        'odi' => 'application/vnd.oasis.opendocument.image',
-        'odm' => 'application/vnd.oasis.opendocument.text-master',
-        'odp' => 'application/vnd.oasis.opendocument.presentation',
-        'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
-        'odt' => 'application/vnd.oasis.opendocument.text',
-        'oga' => 'audio/ogg',
-        'ogg' => 'audio/ogg',
-        'ogv' => 'video/ogg',
-        'ogx' => 'application/ogg',
-        'onepkg' => 'application/onenote',
-        'onetmp' => 'application/onenote',
-        'onetoc' => 'application/onenote',
-        'onetoc2' => 'application/onenote',
-        'opf' => 'application/oebps-package+xml',
-        'oprc' => 'application/vnd.palm',
-        'org' => 'application/vnd.lotus-organizer',
-        'osf' => 'application/vnd.yamaha.openscoreformat',
-        'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
-        'otc' => 'application/vnd.oasis.opendocument.chart-template',
-        'otf' => 'application/x-font-otf',
-        'otg' => 'application/vnd.oasis.opendocument.graphics-template',
-        'oth' => 'application/vnd.oasis.opendocument.text-web',
-        'oti' => 'application/vnd.oasis.opendocument.image-template',
-        'otp' => 'application/vnd.oasis.opendocument.presentation-template',
-        'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
-        'ott' => 'application/vnd.oasis.opendocument.text-template',
-        'oxt' => 'application/vnd.openofficeorg.extension',
-        'p' => 'text/x-pascal',
-        'p10' => 'application/pkcs10',
-        'p12' => 'application/x-pkcs12',
-        'p7b' => 'application/x-pkcs7-certificates',
-        'p7c' => 'application/pkcs7-mime',
-        'p7m' => 'application/pkcs7-mime',
-        'p7r' => 'application/x-pkcs7-certreqresp',
-        'p7s' => 'application/pkcs7-signature',
-        'p8' => 'application/pkcs8',
-        'pas' => 'text/x-pascal',
-        'paw' => 'application/vnd.pawaafile',
-        'pbd' => 'application/vnd.powerbuilder6',
-        'pbm' => 'image/x-portable-bitmap',
-        'pcf' => 'application/x-font-pcf',
-        'pcl' => 'application/vnd.hp-pcl',
-        'pclxl' => 'application/vnd.hp-pclxl',
-        'pct' => 'image/x-pict',
-        'pcurl' => 'application/vnd.curl.pcurl',
-        'pcx' => 'image/x-pcx',
-        'pdb' => 'application/vnd.palm',
-        'pdf' => 'application/pdf',
-        'pfa' => 'application/x-font-type1',
-        'pfb' => 'application/x-font-type1',
-        'pfm' => 'application/x-font-type1',
-        'pfr' => 'application/font-tdpfr',
-        'pfx' => 'application/x-pkcs12',
-        'pgm' => 'image/x-portable-graymap',
-        'pgn' => 'application/x-chess-pgn',
-        'pgp' => 'application/pgp-encrypted',
-        'php' => 'text/x-php',
-        'phps' => 'application/x-httpd-phps',
-        'pic' => 'image/x-pict',
-        'pkg' => 'application/octet-stream',
-        'pki' => 'application/pkixcmp',
-        'pkipath' => 'application/pkix-pkipath',
-        'plb' => 'application/vnd.3gpp.pic-bw-large',
-        'plc' => 'application/vnd.mobius.plc',
-        'plf' => 'application/vnd.pocketlearn',
-        'pls' => 'application/pls+xml',
-        'pml' => 'application/vnd.ctc-posml',
-        'png' => 'image/png',
-        'pnm' => 'image/x-portable-anymap',
-        'portpkg' => 'application/vnd.macports.portpkg',
-        'pot' => 'application/vnd.ms-powerpoint',
-        'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12',
-        'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
-        'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
-        'ppd' => 'application/vnd.cups-ppd',
-        'ppm' => 'image/x-portable-pixmap',
-        'pps' => 'application/vnd.ms-powerpoint',
-        'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
-        'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
-        'ppt' => 'application/vnd.ms-powerpoint',
-        'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
-        'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
-        'pqa' => 'application/vnd.palm',
-        'prc' => 'application/x-mobipocket-ebook',
-        'pre' => 'application/vnd.lotus-freelance',
-        'prf' => 'application/pics-rules',
-        'ps' => 'application/postscript',
-        'psb' => 'application/vnd.3gpp.pic-bw-small',
-        'psd' => 'image/vnd.adobe.photoshop',
-        'psf' => 'application/x-font-linux-psf',
-        'pskcxml' => 'application/pskc+xml',
-        'ptid' => 'application/vnd.pvi.ptid1',
-        'pub' => 'application/x-mspublisher',
-        'pvb' => 'application/vnd.3gpp.pic-bw-var',
-        'pwn' => 'application/vnd.3m.post-it-notes',
-        'pya' => 'audio/vnd.ms-playready.media.pya',
-        'pyv' => 'video/vnd.ms-playready.media.pyv',
-        'qam' => 'application/vnd.epson.quickanime',
-        'qbo' => 'application/vnd.intu.qbo',
-        'qfx' => 'application/vnd.intu.qfx',
-        'qps' => 'application/vnd.publishare-delta-tree',
-        'qt' => 'video/quicktime',
-        'qwd' => 'application/vnd.quark.quarkxpress',
-        'qwt' => 'application/vnd.quark.quarkxpress',
-        'qxb' => 'application/vnd.quark.quarkxpress',
-        'qxd' => 'application/vnd.quark.quarkxpress',
-        'qxl' => 'application/vnd.quark.quarkxpress',
-        'qxt' => 'application/vnd.quark.quarkxpress',
-        'ra' => 'audio/x-pn-realaudio',
-        'ram' => 'audio/x-pn-realaudio',
-        'rar' => 'application/x-rar-compressed',
-        'ras' => 'image/x-cmu-raster',
-        'rb' => 'text/plain',
-        'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
-        'rdf' => 'application/rdf+xml',
-        'rdz' => 'application/vnd.data-vision.rdz',
-        'rep' => 'application/vnd.businessobjects',
-        'res' => 'application/x-dtbresource+xml',
-        'resx' => 'text/xml',
-        'rgb' => 'image/x-rgb',
-        'rif' => 'application/reginfo+xml',
-        'rip' => 'audio/vnd.rip',
-        'rl' => 'application/resource-lists+xml',
-        'rlc' => 'image/vnd.fujixerox.edmics-rlc',
-        'rld' => 'application/resource-lists-diff+xml',
-        'rm' => 'application/vnd.rn-realmedia',
-        'rmi' => 'audio/midi',
-        'rmp' => 'audio/x-pn-realaudio-plugin',
-        'rms' => 'application/vnd.jcp.javame.midlet-rms',
-        'rnc' => 'application/relax-ng-compact-syntax',
-        'roff' => 'text/troff',
-        'rp9' => 'application/vnd.cloanto.rp9',
-        'rpss' => 'application/vnd.nokia.radio-presets',
-        'rpst' => 'application/vnd.nokia.radio-preset',
-        'rq' => 'application/sparql-query',
-        'rs' => 'application/rls-services+xml',
-        'rsd' => 'application/rsd+xml',
-        'rss' => 'application/rss+xml',
-        'rtf' => 'application/rtf',
-        'rtx' => 'text/richtext',
-        's' => 'text/x-asm',
-        'saf' => 'application/vnd.yamaha.smaf-audio',
-        'sbml' => 'application/sbml+xml',
-        'sc' => 'application/vnd.ibm.secure-container',
-        'scd' => 'application/x-msschedule',
-        'scm' => 'application/vnd.lotus-screencam',
-        'scq' => 'application/scvp-cv-request',
-        'scs' => 'application/scvp-cv-response',
-        'scurl' => 'text/vnd.curl.scurl',
-        'sda' => 'application/vnd.stardivision.draw',
-        'sdc' => 'application/vnd.stardivision.calc',
-        'sdd' => 'application/vnd.stardivision.impress',
-        'sdkd' => 'application/vnd.solent.sdkm+xml',
-        'sdkm' => 'application/vnd.solent.sdkm+xml',
-        'sdp' => 'application/sdp',
-        'sdw' => 'application/vnd.stardivision.writer',
-        'see' => 'application/vnd.seemail',
-        'seed' => 'application/vnd.fdsn.seed',
-        'sema' => 'application/vnd.sema',
-        'semd' => 'application/vnd.semd',
-        'semf' => 'application/vnd.semf',
-        'ser' => 'application/java-serialized-object',
-        'setpay' => 'application/set-payment-initiation',
-        'setreg' => 'application/set-registration-initiation',
-        'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',
-        'sfs' => 'application/vnd.spotfire.sfs',
-        'sgl' => 'application/vnd.stardivision.writer-global',
-        'sgm' => 'text/sgml',
-        'sgml' => 'text/sgml',
-        'sh' => 'application/x-sh',
-        'shar' => 'application/x-shar',
-        'shf' => 'application/shf+xml',
-        'sig' => 'application/pgp-signature',
-        'silo' => 'model/mesh',
-        'sis' => 'application/vnd.symbian.install',
-        'sisx' => 'application/vnd.symbian.install',
-        'sit' => 'application/x-stuffit',
-        'sitx' => 'application/x-stuffitx',
-        'skd' => 'application/vnd.koan',
-        'skm' => 'application/vnd.koan',
-        'skp' => 'application/vnd.koan',
-        'skt' => 'application/vnd.koan',
-        'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
-        'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
-        'slt' => 'application/vnd.epson.salt',
-        'sm' => 'application/vnd.stepmania.stepchart',
-        'smf' => 'application/vnd.stardivision.math',
-        'smi' => 'application/smil+xml',
-        'smil' => 'application/smil+xml',
-        'snd' => 'audio/basic',
-        'snf' => 'application/x-font-snf',
-        'so' => 'application/octet-stream',
-        'spc' => 'application/x-pkcs7-certificates',
-        'spf' => 'application/vnd.yamaha.smaf-phrase',
-        'spl' => 'application/x-futuresplash',
-        'spot' => 'text/vnd.in3d.spot',
-        'spp' => 'application/scvp-vp-response',
-        'spq' => 'application/scvp-vp-request',
-        'spx' => 'audio/ogg',
-        'src' => 'application/x-wais-source',
-        'sru' => 'application/sru+xml',
-        'srx' => 'application/sparql-results+xml',
-        'sse' => 'application/vnd.kodak-descriptor',
-        'ssf' => 'application/vnd.epson.ssf',
-        'ssml' => 'application/ssml+xml',
-        'st' => 'application/vnd.sailingtracker.track',
-        'stc' => 'application/vnd.sun.xml.calc.template',
-        'std' => 'application/vnd.sun.xml.draw.template',
-        'stf' => 'application/vnd.wt.stf',
-        'sti' => 'application/vnd.sun.xml.impress.template',
-        'stk' => 'application/hyperstudio',
-        'stl' => 'application/vnd.ms-pki.stl',
-        'str' => 'application/vnd.pg.format',
-        'stw' => 'application/vnd.sun.xml.writer.template',
-        'sub' => 'image/vnd.dvb.subtitle',
-        'sus' => 'application/vnd.sus-calendar',
-        'susp' => 'application/vnd.sus-calendar',
-        'sv4cpio' => 'application/x-sv4cpio',
-        'sv4crc' => 'application/x-sv4crc',
-        'svc' => 'application/vnd.dvb.service',
-        'svd' => 'application/vnd.svd',
-        'svg' => 'image/svg+xml',
-        'svgz' => 'image/svg+xml',
-        'swa' => 'application/x-director',
-        'swf' => 'application/x-shockwave-flash',
-        'swi' => 'application/vnd.aristanetworks.swi',
-        'sxc' => 'application/vnd.sun.xml.calc',
-        'sxd' => 'application/vnd.sun.xml.draw',
-        'sxg' => 'application/vnd.sun.xml.writer.global',
-        'sxi' => 'application/vnd.sun.xml.impress',
-        'sxm' => 'application/vnd.sun.xml.math',
-        'sxw' => 'application/vnd.sun.xml.writer',
-        't' => 'text/troff',
-        'tao' => 'application/vnd.tao.intent-module-archive',
-        'tar' => 'application/x-tar',
-        'tcap' => 'application/vnd.3gpp2.tcap',
-        'tcl' => 'application/x-tcl',
-        'teacher' => 'application/vnd.smart.teacher',
-        'tei' => 'application/tei+xml',
-        'teicorpus' => 'application/tei+xml',
-        'tex' => 'application/x-tex',
-        'texi' => 'application/x-texinfo',
-        'texinfo' => 'application/x-texinfo',
-        'text' => 'text/plain',
-        'tfi' => 'application/thraud+xml',
-        'tfm' => 'application/x-tex-tfm',
-        'thmx' => 'application/vnd.ms-officetheme',
-        'tif' => 'image/tiff',
-        'tiff' => 'image/tiff',
-        'tmo' => 'application/vnd.tmobile-livetv',
-        'torrent' => 'application/x-bittorrent',
-        'tpl' => 'application/vnd.groove-tool-template',
-        'tpt' => 'application/vnd.trid.tpt',
-        'tr' => 'text/troff',
-        'tra' => 'application/vnd.trueapp',
-        'trm' => 'application/x-msterminal',
-        'tsd' => 'application/timestamped-data',
-        'tsv' => 'text/tab-separated-values',
-        'ttc' => 'application/x-font-ttf',
-        'ttf' => 'application/x-font-ttf',
-        'ttl' => 'text/turtle',
-        'twd' => 'application/vnd.simtech-mindmapper',
-        'twds' => 'application/vnd.simtech-mindmapper',
-        'txd' => 'application/vnd.genomatix.tuxedo',
-        'txf' => 'application/vnd.mobius.txf',
-        'txt' => 'text/plain',
-        'u32' => 'application/x-authorware-bin',
-        'udeb' => 'application/x-debian-package',
-        'ufd' => 'application/vnd.ufdl',
-        'ufdl' => 'application/vnd.ufdl',
-        'umj' => 'application/vnd.umajin',
-        'unityweb' => 'application/vnd.unity',
-        'uoml' => 'application/vnd.uoml+xml',
-        'uri' => 'text/uri-list',
-        'uris' => 'text/uri-list',
-        'urls' => 'text/uri-list',
-        'ustar' => 'application/x-ustar',
-        'utz' => 'application/vnd.uiq.theme',
-        'uu' => 'text/x-uuencode',
-        'uva' => 'audio/vnd.dece.audio',
-        'uvd' => 'application/vnd.dece.data',
-        'uvf' => 'application/vnd.dece.data',
-        'uvg' => 'image/vnd.dece.graphic',
-        'uvh' => 'video/vnd.dece.hd',
-        'uvi' => 'image/vnd.dece.graphic',
-        'uvm' => 'video/vnd.dece.mobile',
-        'uvp' => 'video/vnd.dece.pd',
-        'uvs' => 'video/vnd.dece.sd',
-        'uvt' => 'application/vnd.dece.ttml+xml',
-        'uvu' => 'video/vnd.uvvu.mp4',
-        'uvv' => 'video/vnd.dece.video',
-        'uvva' => 'audio/vnd.dece.audio',
-        'uvvd' => 'application/vnd.dece.data',
-        'uvvf' => 'application/vnd.dece.data',
-        'uvvg' => 'image/vnd.dece.graphic',
-        'uvvh' => 'video/vnd.dece.hd',
-        'uvvi' => 'image/vnd.dece.graphic',
-        'uvvm' => 'video/vnd.dece.mobile',
-        'uvvp' => 'video/vnd.dece.pd',
-        'uvvs' => 'video/vnd.dece.sd',
-        'uvvt' => 'application/vnd.dece.ttml+xml',
-        'uvvu' => 'video/vnd.uvvu.mp4',
-        'uvvv' => 'video/vnd.dece.video',
-        'uvvx' => 'application/vnd.dece.unspecified',
-        'uvx' => 'application/vnd.dece.unspecified',
-        'vcd' => 'application/x-cdlink',
-        'vcf' => 'text/x-vcard',
-        'vcg' => 'application/vnd.groove-vcard',
-        'vcs' => 'text/x-vcalendar',
-        'vcx' => 'application/vnd.vcx',
-        'vis' => 'application/vnd.visionary',
-        'viv' => 'video/vnd.vivo',
-        'vor' => 'application/vnd.stardivision.writer',
-        'vox' => 'application/x-authorware-bin',
-        'vrml' => 'model/vrml',
-        'vsd' => 'application/vnd.visio',
-        'vsf' => 'application/vnd.vsf',
-        'vss' => 'application/vnd.visio',
-        'vst' => 'application/vnd.visio',
-        'vsw' => 'application/vnd.visio',
-        'vtu' => 'model/vnd.vtu',
-        'vxml' => 'application/voicexml+xml',
-        'w3d' => 'application/x-director',
-        'wad' => 'application/x-doom',
-        'wav' => 'audio/x-wav',
-        'wax' => 'audio/x-ms-wax',
-        'wbmp' => 'image/vnd.wap.wbmp',
-        'wbs' => 'application/vnd.criticaltools.wbs+xml',
-        'wbxml' => 'application/vnd.wap.wbxml',
-        'wcm' => 'application/vnd.ms-works',
-        'wdb' => 'application/vnd.ms-works',
-        'weba' => 'audio/webm',
-        'webm' => 'video/webm',
-        'webp' => 'image/webp',
-        'wg' => 'application/vnd.pmi.widget',
-        'wgt' => 'application/widget',
-        'wks' => 'application/vnd.ms-works',
-        'wm' => 'video/x-ms-wm',
-        'wma' => 'audio/x-ms-wma',
-        'wmd' => 'application/x-ms-wmd',
-        'wmf' => 'application/x-msmetafile',
-        'wml' => 'text/vnd.wap.wml',
-        'wmlc' => 'application/vnd.wap.wmlc',
-        'wmls' => 'text/vnd.wap.wmlscript',
-        'wmlsc' => 'application/vnd.wap.wmlscriptc',
-        'wmv' => 'video/x-ms-wmv',
-        'wmx' => 'video/x-ms-wmx',
-        'wmz' => 'application/x-ms-wmz',
-        'woff' => 'application/x-font-woff',
-        'wpd' => 'application/vnd.wordperfect',
-        'wpl' => 'application/vnd.ms-wpl',
-        'wps' => 'application/vnd.ms-works',
-        'wqd' => 'application/vnd.wqd',
-        'wri' => 'application/x-mswrite',
-        'wrl' => 'model/vrml',
-        'wsdl' => 'application/wsdl+xml',
-        'wspolicy' => 'application/wspolicy+xml',
-        'wtb' => 'application/vnd.webturbo',
-        'wvx' => 'video/x-ms-wvx',
-        'x32' => 'application/x-authorware-bin',
-        'x3d' => 'application/vnd.hzn-3d-crossword',
-        'xap' => 'application/x-silverlight-app',
-        'xar' => 'application/vnd.xara',
-        'xbap' => 'application/x-ms-xbap',
-        'xbd' => 'application/vnd.fujixerox.docuworks.binder',
-        'xbm' => 'image/x-xbitmap',
-        'xdf' => 'application/xcap-diff+xml',
-        'xdm' => 'application/vnd.syncml.dm+xml',
-        'xdp' => 'application/vnd.adobe.xdp+xml',
-        'xdssc' => 'application/dssc+xml',
-        'xdw' => 'application/vnd.fujixerox.docuworks',
-        'xenc' => 'application/xenc+xml',
-        'xer' => 'application/patch-ops-error+xml',
-        'xfdf' => 'application/vnd.adobe.xfdf',
-        'xfdl' => 'application/vnd.xfdl',
-        'xht' => 'application/xhtml+xml',
-        'xhtml' => 'application/xhtml+xml',
-        'xhvml' => 'application/xv+xml',
-        'xif' => 'image/vnd.xiff',
-        'xla' => 'application/vnd.ms-excel',
-        'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12',
-        'xlc' => 'application/vnd.ms-excel',
-        'xlm' => 'application/vnd.ms-excel',
-        'xls' => 'application/vnd.ms-excel',
-        'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
-        'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12',
-        'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
-        'xlt' => 'application/vnd.ms-excel',
-        'xltm' => 'application/vnd.ms-excel.template.macroenabled.12',
-        'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
-        'xlw' => 'application/vnd.ms-excel',
-        'xml' => 'application/xml',
-        'xo' => 'application/vnd.olpc-sugar',
-        'xop' => 'application/xop+xml',
-        'xpi' => 'application/x-xpinstall',
-        'xpm' => 'image/x-xpixmap',
-        'xpr' => 'application/vnd.is-xpr',
-        'xps' => 'application/vnd.ms-xpsdocument',
-        'xpw' => 'application/vnd.intercon.formnet',
-        'xpx' => 'application/vnd.intercon.formnet',
-        'xsl' => 'application/xml',
-        'xslt' => 'application/xslt+xml',
-        'xsm' => 'application/vnd.syncml+xml',
-        'xspf' => 'application/xspf+xml',
-        'xul' => 'application/vnd.mozilla.xul+xml',
-        'xvm' => 'application/xv+xml',
-        'xvml' => 'application/xv+xml',
-        'xwd' => 'image/x-xwindowdump',
-        'xyz' => 'chemical/x-xyz',
-        'yaml' => 'text/yaml',
-        'yang' => 'application/yang',
-        'yin' => 'application/yin+xml',
-        'yml' => 'text/yaml',
-        'zaz' => 'application/vnd.zzazz.deck+xml',
-        'zip' => 'application/zip',
-        'zir' => 'application/vnd.zul',
-        'zirz' => 'application/vnd.zul',
-        'zmm' => 'application/vnd.handheld-entertainment+xml'
-    );
-
-    /**
-     * Get a singleton instance of the class
-     *
-     * @return self
-     * @codeCoverageIgnore
-     */
-    public static function getInstance()
-    {
-        if (!self::$instance) {
-            self::$instance = new self();
-        }
-
-        return self::$instance;
-    }
-
-    /**
-     * Get a mimetype value from a file extension
-     *
-     * @param string $extension File extension
-     *
-     * @return string|null
-     *
-     */
-    public function fromExtension($extension)
-    {
-        $extension = strtolower($extension);
-
-        return isset($this->mimetypes[$extension])
-            ? $this->mimetypes[$extension]
-            : null;
-    }
-
-    /**
-     * Get a mimetype from a filename
-     *
-     * @param string $filename Filename to generate a mimetype from
-     *
-     * @return string|null
-     */
-    public function fromFilename($filename)
-    {
-        return $this->fromExtension(pathinfo($filename, PATHINFO_EXTENSION));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Pool.php b/core/vendor/guzzlehttp/guzzle/src/Pool.php
index 49d9940..bc41d6e 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Pool.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Pool.php
@@ -1,97 +1,81 @@
 <?php
 namespace GuzzleHttp;
 
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Ring\Future\FutureInterface;
-use GuzzleHttp\Event\ListenerAttacherTrait;
-use GuzzleHttp\Event\EndEvent;
-use React\Promise\Deferred;
-use React\Promise\FulfilledPromise;
-use React\Promise\PromiseInterface;
-use React\Promise\RejectedPromise;
+use GuzzleHttp\Promise\PromisorInterface;
+use Psr\Http\Message\RequestInterface;
+use GuzzleHttp\Promise\EachPromise;
 
 /**
  * Sends and iterator of requests concurrently using a capped pool size.
  *
- * The Pool object implements FutureInterface, meaning it can be used later
- * when necessary, the requests provided to the pool can be cancelled, and
- * you can check the state of the pool to know if it has been dereferenced
- * (sent) or has been cancelled.
+ * The pool will read from an iterator until it is cancelled or until the
+ * iterator is consumed. When a request is yielded, the request is sent after
+ * applying the "request_options" request options (if provided in the ctor).
  *
- * When sending the pool, keep in mind that no results are returned: callers
- * are expected to handle results asynchronously using Guzzle's event system.
- * When requests complete, more are added to the pool to ensure that the
- * requested pool size is always filled as much as possible.
- *
- * IMPORTANT: Do not provide a pool size greater that what the utilized
- * underlying RingPHP handler can support. This will result is extremely poor
- * performance.
+ * When a function is yielded by the iterator, the function is provided the
+ * "request_options" array that should be merged on top of any existing
+ * options, and the function MUST then return a wait-able promise.
  */
-class Pool implements FutureInterface
+class Pool implements PromisorInterface
 {
-    use ListenerAttacherTrait;
-
-    /** @var \GuzzleHttp\ClientInterface */
-    private $client;
-
-    /** @var \Iterator Yields requests */
-    private $iter;
-
-    /** @var Deferred */
-    private $deferred;
-
-    /** @var PromiseInterface */
-    private $promise;
-
-    private $waitQueue = [];
-    private $eventListeners = [];
-    private $poolSize;
-    private $isRealized = false;
+    /** @var EachPromise */
+    private $each;
 
     /**
-     * The option values for 'before', 'complete', 'error' and 'end' can be a
-     * callable, an associative array containing event data, or an array of
-     * event data arrays. Event data arrays contain the following keys:
-     *
-     * - fn: callable to invoke that receives the event
-     * - priority: Optional event priority (defaults to 0)
-     * - once: Set to true so that the event is removed after it is triggered
-     *
      * @param ClientInterface $client   Client used to send the requests.
-     * @param array|\Iterator $requests Requests to send in parallel
-     * @param array           $options  Associative array of options
-     *     - pool_size: (callable|int)   Maximum number of requests to send
-     *                                   concurrently, or a callback that receives
-     *                                   the current queue size and returns the
-     *                                   number of new requests to send
-     *     - before:    (callable|array) Receives a BeforeEvent
-     *     - complete:  (callable|array) Receives a CompleteEvent
-     *     - error:     (callable|array) Receives a ErrorEvent
-     *     - end:       (callable|array) Receives an EndEvent
+     * @param array|\Iterator $requests Requests or functions that return
+     *                                  requests to send concurrently.
+     * @param array           $config   Associative array of options
+     *     - concurrency: (int) Maximum number of requests to send concurrently
+     *     - options: Array of request options to apply to each request.
+     *     - fulfilled: (callable) Function to invoke when a request completes.
+     *     - rejected: (callable) Function to invoke when a request is rejected.
      */
     public function __construct(
         ClientInterface $client,
         $requests,
-        array $options = []
+        array $config = []
     ) {
-        $this->client = $client;
-        $this->iter = $this->coerceIterable($requests);
-        $this->deferred = new Deferred();
-        $this->promise = $this->deferred->promise();
-        $this->poolSize = isset($options['pool_size'])
-            ? $options['pool_size'] : 25;
-        $this->eventListeners = $this->prepareListeners(
-            $options,
-            ['before', 'complete', 'error', 'end']
-        );
+        // Backwards compatibility.
+        if (isset($config['pool_size'])) {
+            $config['concurrency'] = $config['pool_size'];
+        } elseif (!isset($config['concurrency'])) {
+            $config['concurrency'] = 25;
+        }
+
+        if (isset($config['options'])) {
+            $opts = $config['options'];
+            unset($config['options']);
+        } else {
+            $opts = [];
+        }
+
+        $iterable = \GuzzleHttp\Promise\iter_for($requests);
+        $requests = function () use ($iterable, $client, $opts) {
+            foreach ($iterable as $rfn) {
+                if ($rfn instanceof RequestInterface) {
+                    yield $client->sendAsync($rfn, $opts);
+                } elseif (is_callable($rfn)) {
+                    yield $rfn($opts);
+                } else {
+                    throw new \InvalidArgumentException('Each value yielded by '
+                        . 'the iterator must be a Psr7\Http\Message\RequestInterface '
+                        . 'or a callable that returns a promise that fulfills '
+                        . 'with a Psr7\Message\Http\ResponseInterface object.');
+                }
+            }
+        };
+
+        $this->each = new EachPromise($requests(), $config);
+    }
+
+    public function promise()
+    {
+        return $this->each->promise();
     }
 
     /**
-     * Sends multiple requests in parallel and returns an array of responses
+     * Sends multiple requests concurrently and returns an array of responses
      * and exceptions that uses the same ordering as the provided requests.
      *
      * IMPORTANT: This method keeps every request and response in memory, and
@@ -99,11 +83,12 @@ public function __construct(
      * indeterminate number of requests concurrently.
      *
      * @param ClientInterface $client   Client used to send the requests
-     * @param array|\Iterator $requests Requests to send in parallel
+     * @param array|\Iterator $requests Requests to send concurrently.
      * @param array           $options  Passes through the options available in
      *                                  {@see GuzzleHttp\Pool::__construct}
      *
-     * @return BatchResults Returns a container for the results.
+     * @return array Returns an array containing the response or an exception
+     *               in the same order that the requests were sent.
      * @throws \InvalidArgumentException if the event format is incorrect.
      */
     public static function batch(
@@ -111,223 +96,28 @@ public static function batch(
         $requests,
         array $options = []
     ) {
-        $hash = new \SplObjectStorage();
-        foreach ($requests as $request) {
-            $hash->attach($request);
-        }
-
-        // In addition to the normally run events when requests complete, add
-        // and event to continuously track the results of transfers in the hash.
-        (new self($client, $requests, RequestEvents::convertEventArray(
-            $options,
-            ['end'],
-            [
-                'priority' => RequestEvents::LATE,
-                'fn'       => function (EndEvent $e) use ($hash) {
-                    $hash[$e->getRequest()] = $e->getException()
-                        ? $e->getException()
-                        : $e->getResponse();
-                }
-            ]
-        )))->wait();
-
-        return new BatchResults($hash);
-    }
-
-    /**
-     * Creates a Pool and immediately sends the requests.
-     *
-     * @param ClientInterface $client   Client used to send the requests
-     * @param array|\Iterator $requests Requests to send in parallel
-     * @param array           $options  Passes through the options available in
-     *                                  {@see GuzzleHttp\Pool::__construct}
-     */
-    public static function send(
-        ClientInterface $client,
-        $requests,
-        array $options = []
-    ) {
-        $pool = new self($client, $requests, $options);
-        $pool->wait();
+        $res = [];
+        self::cmpCallback($options, 'fulfilled', $res);
+        self::cmpCallback($options, 'rejected', $res);
+        $pool = new static($client, $requests, $options);
+        $pool->promise()->wait();
+        ksort($res);
+
+        return $res;
     }
 
-    private function getPoolSize()
+    private static function cmpCallback(array &$options, $name, array &$results)
     {
-        return is_callable($this->poolSize)
-            ? call_user_func($this->poolSize, count($this->waitQueue))
-            : $this->poolSize;
-    }
-
-    /**
-     * Add as many requests as possible up to the current pool limit.
-     */
-    private function addNextRequests()
-    {
-        $limit = max($this->getPoolSize() - count($this->waitQueue), 0);
-        while ($limit--) {
-            if (!$this->addNextRequest()) {
-                break;
-            }
+        if (!isset($options[$name])) {
+            $options[$name] = function ($v, $k) use (&$results) {
+                $results[$k] = $v;
+            };
+        } else {
+            $currentFn = $options[$name];
+            $options[$name] = function ($v, $k) use (&$results, $currentFn) {
+                $currentFn($v, $k);
+                $results[$k] = $v;
+            };
         }
     }
-
-    public function wait()
-    {
-        if ($this->isRealized) {
-            return false;
-        }
-
-        // Seed the pool with N number of requests.
-        $this->addNextRequests();
-
-        // Stop if the pool was cancelled while transferring requests.
-        if ($this->isRealized) {
-            return false;
-        }
-
-        // Wait on any outstanding FutureResponse objects.
-        while ($response = array_pop($this->waitQueue)) {
-            try {
-                $response->wait();
-            } catch (\Exception $e) {
-                // Eat exceptions because they should be handled asynchronously
-            }
-            $this->addNextRequests();
-        }
-
-        // Clean up no longer needed state.
-        $this->isRealized = true;
-        $this->waitQueue = $this->eventListeners = [];
-        $this->client = $this->iter = null;
-        $this->deferred->resolve(true);
-
-        return true;
-    }
-
-    /**
-     * {@inheritdoc}
-     *
-     * Attempt to cancel all outstanding requests (requests that are queued for
-     * dereferencing). Returns true if all outstanding requests can be
-     * cancelled.
-     *
-     * @return bool
-     */
-    public function cancel()
-    {
-        if ($this->isRealized) {
-            return false;
-        }
-
-        $success = $this->isRealized = true;
-        foreach ($this->waitQueue as $response) {
-            if (!$response->cancel()) {
-                $success = false;
-            }
-        }
-
-        return $success;
-    }
-
-    /**
-     * Returns a promise that is invoked when the pool completed. There will be
-     * no passed value.
-     *
-     * {@inheritdoc}
-     */
-    public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null,
-        callable $onProgress = null
-    ) {
-        return $this->promise->then($onFulfilled, $onRejected, $onProgress);
-    }
-
-    public function promise()
-    {
-        return $this->promise;
-    }
-
-    private function coerceIterable($requests)
-    {
-        if ($requests instanceof \Iterator) {
-            return $requests;
-        } elseif (is_array($requests)) {
-            return new \ArrayIterator($requests);
-        }
-
-        throw new \InvalidArgumentException('Expected Iterator or array. '
-            . 'Found ' . Core::describeType($requests));
-    }
-
-    /**
-     * Adds the next request to pool and tracks what requests need to be
-     * dereferenced when completing the pool.
-     */
-    private function addNextRequest()
-    {
-        add_next:
-
-        if ($this->isRealized || !$this->iter || !$this->iter->valid()) {
-            return false;
-        }
-
-        $request = $this->iter->current();
-        $this->iter->next();
-
-        if (!($request instanceof RequestInterface)) {
-            throw new \InvalidArgumentException(sprintf(
-                'All requests in the provided iterator must implement '
-                . 'RequestInterface. Found %s',
-                Core::describeType($request)
-            ));
-        }
-
-        // Be sure to use "lazy" futures, meaning they do not send right away.
-        $request->getConfig()->set('future', 'lazy');
-        $hash = spl_object_hash($request);
-        $this->attachListeners($request, $this->eventListeners);
-        $request->getEmitter()->on('before', [$this, '_trackRetries'], RequestEvents::EARLY);
-        $response = $this->client->send($request);
-        $this->waitQueue[$hash] = $response;
-        $promise = $response->promise();
-
-        // Don't recursively call itself for completed or rejected responses.
-        if ($promise instanceof FulfilledPromise
-            || $promise instanceof RejectedPromise
-        ) {
-            try {
-                $this->finishResponse($request, $response->wait(), $hash);
-            } catch (\Exception $e) {
-                $this->finishResponse($request, $e, $hash);
-            }
-            goto add_next;
-        }
-
-        // Use this function for both resolution and rejection.
-        $thenFn = function ($value) use ($request, $hash) {
-            $this->finishResponse($request, $value, $hash);
-            if (!$request->getConfig()->get('_pool_retries')) {
-                $this->addNextRequests();
-            }
-        };
-
-        $promise->then($thenFn, $thenFn);
-
-        return true;
-    }
-
-    public function _trackRetries(BeforeEvent $e)
-    {
-        $e->getRequest()->getConfig()->set('_pool_retries', $e->getRetryCount());
-    }
-
-    private function finishResponse($request, $value, $hash)
-    {
-        unset($this->waitQueue[$hash]);
-        $result = $value instanceof ResponseInterface
-            ? ['request' => $request, 'response' => $value, 'error' => null]
-            : ['request' => $request, 'response' => null, 'error' => $value];
-        $this->deferred->progress($result);
-    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php b/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
deleted file mode 100644
index 1149e62..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-namespace GuzzleHttp\Post;
-
-use GuzzleHttp\Stream\AppendStream;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\StreamDecoratorTrait;
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Stream that when read returns bytes for a streaming multipart/form-data body
- */
-class MultipartBody implements StreamInterface
-{
-    use StreamDecoratorTrait;
-
-    private $boundary;
-
-    /**
-     * @param array  $fields   Associative array of field names to values where
-     *                         each value is a string or array of strings.
-     * @param array  $files    Associative array of PostFileInterface objects
-     * @param string $boundary You can optionally provide a specific boundary
-     * @throws \InvalidArgumentException
-     */
-    public function __construct(
-        array $fields = [],
-        array $files = [],
-        $boundary = null
-    ) {
-        $this->boundary = $boundary ?: uniqid();
-        $this->stream = $this->createStream($fields, $files);
-    }
-
-    /**
-     * Get the boundary
-     *
-     * @return string
-     */
-    public function getBoundary()
-    {
-        return $this->boundary;
-    }
-
-    public function isWritable()
-    {
-        return false;
-    }
-
-    /**
-     * Get the string needed to transfer a POST field
-     */
-    private function getFieldString($name, $value)
-    {
-        return sprintf(
-            "--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s\r\n",
-            $this->boundary,
-            $name,
-            $value
-        );
-    }
-
-    /**
-     * Get the headers needed before transferring the content of a POST file
-     */
-    private function getFileHeaders(PostFileInterface $file)
-    {
-        $headers = '';
-        foreach ($file->getHeaders() as $key => $value) {
-            $headers .= "{$key}: {$value}\r\n";
-        }
-
-        return "--{$this->boundary}\r\n" . trim($headers) . "\r\n\r\n";
-    }
-
-    /**
-     * Create the aggregate stream that will be used to upload the POST data
-     */
-    protected function createStream(array $fields, array $files)
-    {
-        $stream = new AppendStream();
-
-        foreach ($fields as $name => $fieldValues) {
-            foreach ((array) $fieldValues as $value) {
-                $stream->addStream(
-                    Stream::factory($this->getFieldString($name, $value))
-                );
-            }
-        }
-
-        foreach ($files as $file) {
-
-            if (!$file instanceof PostFileInterface) {
-                throw new \InvalidArgumentException('All POST fields must '
-                    . 'implement PostFieldInterface');
-            }
-
-            $stream->addStream(
-                Stream::factory($this->getFileHeaders($file))
-            );
-            $stream->addStream($file->getContent());
-            $stream->addStream(Stream::factory("\r\n"));
-        }
-
-        // Add the trailing boundary with CRLF
-        $stream->addStream(Stream::factory("--{$this->boundary}--\r\n"));
-
-        return $stream;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
deleted file mode 100644
index ed14d1f..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-namespace GuzzleHttp\Post;
-
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Stream\Exception\CannotAttachException;
-use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Query;
-
-/**
- * Holds POST fields and files and creates a streaming body when read methods
- * are called on the object.
- */
-class PostBody implements PostBodyInterface
-{
-    /** @var StreamInterface */
-    private $body;
-
-    /** @var callable */
-    private $aggregator;
-
-    private $fields = [];
-
-    /** @var PostFileInterface[] */
-    private $files = [];
-    private $forceMultipart = false;
-    private $detached = false;
-
-    /**
-     * Applies request headers to a request based on the POST state
-     *
-     * @param RequestInterface $request Request to update
-     */
-    public function applyRequestHeaders(RequestInterface $request)
-    {
-        if ($this->files || $this->forceMultipart) {
-            $request->setHeader(
-                'Content-Type',
-                'multipart/form-data; boundary=' . $this->getBody()->getBoundary()
-            );
-        } elseif ($this->fields && !$request->hasHeader('Content-Type')) {
-            $request->setHeader(
-                'Content-Type',
-                'application/x-www-form-urlencoded'
-            );
-        }
-
-        if ($size = $this->getSize()) {
-            $request->setHeader('Content-Length', $size);
-        }
-    }
-
-    public function forceMultipartUpload($force)
-    {
-        $this->forceMultipart = $force;
-    }
-
-    public function setAggregator(callable $aggregator)
-    {
-        $this->aggregator = $aggregator;
-    }
-
-    public function setField($name, $value)
-    {
-        $this->fields[$name] = $value;
-        $this->mutate();
-    }
-
-    public function replaceFields(array $fields)
-    {
-        $this->fields = $fields;
-        $this->mutate();
-    }
-
-    public function getField($name)
-    {
-        return isset($this->fields[$name]) ? $this->fields[$name] : null;
-    }
-
-    public function removeField($name)
-    {
-        unset($this->fields[$name]);
-        $this->mutate();
-    }
-
-    public function getFields($asString = false)
-    {
-        if (!$asString) {
-            return $this->fields;
-        }
-
-        $query = new Query($this->fields);
-        $query->setEncodingType(Query::RFC1738);
-        $query->setAggregator($this->getAggregator());
-
-        return (string) $query;
-    }
-
-    public function hasField($name)
-    {
-        return isset($this->fields[$name]);
-    }
-
-    public function getFile($name)
-    {
-        foreach ($this->files as $file) {
-            if ($file->getName() == $name) {
-                return $file;
-            }
-        }
-
-        return null;
-    }
-
-    public function getFiles()
-    {
-        return $this->files;
-    }
-
-    public function addFile(PostFileInterface $file)
-    {
-        $this->files[] = $file;
-        $this->mutate();
-    }
-
-    public function clearFiles()
-    {
-        $this->files = [];
-        $this->mutate();
-    }
-
-    /**
-     * Returns the numbers of fields + files
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->files) + count($this->fields);
-    }
-
-    public function __toString()
-    {
-        return (string) $this->getBody();
-    }
-
-    public function getContents($maxLength = -1)
-    {
-        return $this->getBody()->getContents();
-    }
-
-    public function close()
-    {
-        $this->detach();
-    }
-
-    public function detach()
-    {
-        $this->detached = true;
-        $this->fields = $this->files = [];
-
-        if ($this->body) {
-            $this->body->close();
-            $this->body = null;
-        }
-    }
-
-    public function attach($stream)
-    {
-        throw new CannotAttachException();
-    }
-
-    public function eof()
-    {
-        return $this->getBody()->eof();
-    }
-
-    public function tell()
-    {
-        return $this->body ? $this->body->tell() : 0;
-    }
-
-    public function isSeekable()
-    {
-        return true;
-    }
-
-    public function isReadable()
-    {
-        return true;
-    }
-
-    public function isWritable()
-    {
-        return false;
-    }
-
-    public function getSize()
-    {
-        return $this->getBody()->getSize();
-    }
-
-    public function seek($offset, $whence = SEEK_SET)
-    {
-        return $this->getBody()->seek($offset, $whence);
-    }
-
-    public function read($length)
-    {
-        return $this->getBody()->read($length);
-    }
-
-    public function write($string)
-    {
-        return false;
-    }
-
-    public function getMetadata($key = null)
-    {
-        return $key ? null : [];
-    }
-
-    /**
-     * Return a stream object that is built from the POST fields and files.
-     *
-     * If one has already been created, the previously created stream will be
-     * returned.
-     */
-    private function getBody()
-    {
-        if ($this->body) {
-            return $this->body;
-        } elseif ($this->files || $this->forceMultipart) {
-            return $this->body = $this->createMultipart();
-        } elseif ($this->fields) {
-            return $this->body = $this->createUrlEncoded();
-        } else {
-            return $this->body = Stream::factory();
-        }
-    }
-
-    /**
-     * Get the aggregator used to join multi-valued field parameters
-     *
-     * @return callable
-     */
-    final protected function getAggregator()
-    {
-        if (!$this->aggregator) {
-            $this->aggregator = Query::phpAggregator();
-        }
-
-        return $this->aggregator;
-    }
-
-    /**
-     * Creates a multipart/form-data body stream
-     *
-     * @return MultipartBody
-     */
-    private function createMultipart()
-    {
-        // Flatten the nested query string values using the correct aggregator
-        return new MultipartBody(
-            call_user_func($this->getAggregator(), $this->fields),
-            $this->files
-        );
-    }
-
-    /**
-     * Creates an application/x-www-form-urlencoded stream body
-     *
-     * @return StreamInterface
-     */
-    private function createUrlEncoded()
-    {
-        return Stream::factory($this->getFields(true));
-    }
-
-    /**
-     * Get rid of any cached data
-     */
-    private function mutate()
-    {
-        $this->body = null;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
deleted file mode 100644
index c2ec9a6..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-namespace GuzzleHttp\Post;
-
-use GuzzleHttp\Message\AppliesHeadersInterface;
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Represents a POST body that is sent as either a multipart/form-data stream
- * or application/x-www-urlencoded stream.
- */
-interface PostBodyInterface extends StreamInterface, \Countable, AppliesHeadersInterface
-{
-    /**
-     * Set a specific field
-     *
-     * @param string       $name  Name of the field to set
-     * @param string|array $value Value to set
-     */
-    public function setField($name, $value);
-
-    /**
-     * Set the aggregation strategy that will be used to turn multi-valued
-     * fields into a string.
-     *
-     * The aggregation function accepts a deeply nested array of query string
-     * values and returns a flattened associative array of key value pairs.
-     *
-     * @param callable $aggregator
-     */
-    public function setAggregator(callable $aggregator);
-
-    /**
-     * Set to true to force a multipart upload even if there are no files.
-     *
-     * @param bool $force Set to true to force multipart uploads or false to
-     *     remove this flag.
-     */
-    public function forceMultipartUpload($force);
-
-    /**
-     * Replace all existing form fields with an array of fields
-     *
-     * @param array $fields Associative array of fields to set
-     */
-    public function replaceFields(array $fields);
-
-    /**
-     * Get a specific field by name
-     *
-     * @param string $name Name of the POST field to retrieve
-     *
-     * @return string|null
-     */
-    public function getField($name);
-
-    /**
-     * Remove a field by name
-     *
-     * @param string $name Name of the field to remove
-     */
-    public function removeField($name);
-
-    /**
-     * Returns an associative array of names to values or a query string.
-     *
-     * @param bool $asString Set to true to retrieve the fields as a query
-     *     string.
-     *
-     * @return array|string
-     */
-    public function getFields($asString = false);
-
-    /**
-     * Returns true if a field is set
-     *
-     * @param string $name Name of the field to set
-     *
-     * @return bool
-     */
-    public function hasField($name);
-
-    /**
-     * Get all of the files
-     *
-     * @return array Returns an array of PostFileInterface objects
-     */
-    public function getFiles();
-
-    /**
-     * Get a POST file by name.
-     *
-     * @param string $name Name of the POST file to retrieve
-     *
-     * @return PostFileInterface|null
-     */
-    public function getFile($name);
-
-    /**
-     * Add a file to the POST
-     *
-     * @param PostFileInterface $file File to add
-     */
-    public function addFile(PostFileInterface $file);
-
-    /**
-     * Remove all files from the collection
-     */
-    public function clearFiles();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
deleted file mode 100644
index e102c02..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-namespace GuzzleHttp\Post;
-
-use GuzzleHttp\Mimetypes;
-use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Stream\Stream;
-
-/**
- * Post file upload
- */
-class PostFile implements PostFileInterface
-{
-    private $name;
-    private $filename;
-    private $content;
-    private $headers = [];
-
-    /**
-     * @param string          $name     Name of the form field
-     * @param mixed           $content  Data to send
-     * @param string|null     $filename Filename content-disposition attribute
-     * @param array           $headers  Array of headers to set on the file
-     *                                  (can override any default headers)
-     * @throws \RuntimeException when filename is not passed or can't be determined
-     */
-    public function __construct(
-        $name,
-        $content,
-        $filename = null,
-        array $headers = []
-    ) {
-        $this->headers = $headers;
-        $this->name = $name;
-        $this->prepareContent($content);
-        $this->prepareFilename($filename);
-        $this->prepareDefaultHeaders();
-    }
-
-    public function getName()
-    {
-        return $this->name;
-    }
-
-    public function getFilename()
-    {
-        return $this->filename;
-    }
-
-    public function getContent()
-    {
-        return $this->content;
-    }
-
-    public function getHeaders()
-    {
-        return $this->headers;
-    }
-
-    /**
-     * Prepares the contents of a POST file.
-     *
-     * @param mixed $content Content of the POST file
-     */
-    private function prepareContent($content)
-    {
-        $this->content = $content;
-
-        if (!($this->content instanceof StreamInterface)) {
-            $this->content = Stream::factory($this->content);
-        } elseif ($this->content instanceof MultipartBody) {
-            if (!$this->hasHeader('Content-Disposition')) {
-                $disposition = 'form-data; name="' . $this->name .'"';
-                $this->headers['Content-Disposition'] = $disposition;
-            }
-
-            if (!$this->hasHeader('Content-Type')) {
-                $this->headers['Content-Type'] = sprintf(
-                    "multipart/form-data; boundary=%s",
-                    $this->content->getBoundary()
-                );
-            }
-        }
-    }
-
-    /**
-     * Applies a file name to the POST file based on various checks.
-     *
-     * @param string|null $filename Filename to apply (or null to guess)
-     */
-    private function prepareFilename($filename)
-    {
-        $this->filename = $filename;
-
-        if (!$this->filename) {
-            $this->filename = $this->content->getMetadata('uri');
-        }
-
-        if (!$this->filename || substr($this->filename, 0, 6) === 'php://') {
-            $this->filename = $this->name;
-        }
-    }
-
-    /**
-     * Applies default Content-Disposition and Content-Type headers if needed.
-     */
-    private function prepareDefaultHeaders()
-    {
-        // Set a default content-disposition header if one was no provided
-        if (!$this->hasHeader('Content-Disposition')) {
-            $this->headers['Content-Disposition'] = sprintf(
-                'form-data; name="%s"; filename="%s"',
-                $this->name,
-                basename($this->filename)
-            );
-        }
-
-        // Set a default Content-Type if one was not supplied
-        if (!$this->hasHeader('Content-Type')) {
-            $this->headers['Content-Type'] = Mimetypes::getInstance()
-                ->fromFilename($this->filename) ?: 'text/plain';
-        }
-    }
-
-    /**
-     * Check if a specific header exists on the POST file by name.
-     *
-     * @param string $name Case-insensitive header to check
-     *
-     * @return bool
-     */
-    private function hasHeader($name)
-    {
-        return isset(array_change_key_case($this->headers)[strtolower($name)]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
deleted file mode 100644
index 2e816c0..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-namespace GuzzleHttp\Post;
-
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Post file upload interface
- */
-interface PostFileInterface
-{
-    /**
-     * Get the name of the form field
-     *
-     * @return string
-     */
-    public function getName();
-
-    /**
-     * Get the full path to the file
-     *
-     * @return string
-     */
-    public function getFilename();
-
-    /**
-     * Get the content
-     *
-     * @return StreamInterface
-     */
-    public function getContent();
-
-    /**
-     * Gets all POST file headers.
-     *
-     * The keys represent the header name as it will be sent over the wire, and
-     * each value is a string.
-     *
-     * @return array Returns an associative array of the file's headers.
-     */
-    public function getHeaders();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/core/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
new file mode 100644
index 0000000..e6d176b
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
@@ -0,0 +1,112 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Promise\PromiseInterface;
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * Prepares requests that contain a body, adding the Content-Length,
+ * Content-Type, and Expect headers.
+ */
+class PrepareBodyMiddleware
+{
+    /** @var callable  */
+    private $nextHandler;
+
+    /** @var array */
+    private static $skipMethods = ['GET' => true, 'HEAD' => true];
+
+    /**
+     * @param callable $nextHandler Next handler to invoke.
+     */
+    public function __construct(callable $nextHandler)
+    {
+        $this->nextHandler = $nextHandler;
+    }
+
+    /**
+     * @param RequestInterface $request
+     * @param array            $options
+     *
+     * @return PromiseInterface
+     */
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        $fn = $this->nextHandler;
+
+        // Don't do anything if the request has no body.
+        if (isset(self::$skipMethods[$request->getMethod()])
+            || $request->getBody()->getSize() === 0
+        ) {
+            return $fn($request, $options);
+        }
+
+        $modify = [];
+
+        // Add a default content-type if possible.
+        if (!$request->hasHeader('Content-Type')) {
+            if ($uri = $request->getBody()->getMetadata('uri')) {
+                if ($type = Psr7\mimetype_from_filename($uri)) {
+                    $modify['set_headers']['Content-Type'] = $type;
+                }
+            }
+        }
+
+        // Add a default content-length or transfer-encoding header.
+        if (!isset(self::$skipMethods[$request->getMethod()])
+            && !$request->hasHeader('Content-Length')
+            && !$request->hasHeader('Transfer-Encoding')
+        ) {
+            $size = $request->getBody()->getSize();
+            if ($size !== null) {
+                $modify['set_headers']['Content-Length'] = $size;
+            } else {
+                $modify['set_headers']['Transfer-Encoding'] = 'chunked';
+            }
+        }
+
+        // Add the expect header if needed.
+        $this->addExpectHeader($request, $options, $modify);
+
+        return $fn(Psr7\modify_request($request, $modify), $options);
+    }
+
+    private function addExpectHeader(
+        RequestInterface $request,
+        array $options,
+        array &$modify
+    ) {
+        // Determine if the Expect header should be used
+        if ($request->hasHeader('Expect')) {
+            return;
+        }
+
+        $expect = isset($options['expect']) ? $options['expect'] : null;
+
+        // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0
+        if ($expect === false || $request->getProtocolVersion() < 1.1) {
+            return;
+        }
+
+        // The expect header is unconditionally enabled
+        if ($expect === true) {
+            $modify['set_headers']['Expect'] = '100-Continue';
+            return;
+        }
+
+        // By default, send the expect header when the payload is > 1mb
+        if ($expect === null) {
+            $expect = 1048576;
+        }
+
+        // Always add if the body cannot be rewound, the size cannot be
+        // determined, or the size is greater than the cutoff threshold
+        $body = $request->getBody();
+        $size = $body->getSize();
+
+        if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
+            $modify['set_headers']['Expect'] = '100-Continue';
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Query.php b/core/vendor/guzzlehttp/guzzle/src/Query.php
deleted file mode 100644
index d053def..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Query.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Manages query string variables and can aggregate them into a string
- */
-class Query extends Collection
-{
-    const RFC3986 = 'RFC3986';
-    const RFC1738 = 'RFC1738';
-
-    /** @var callable Encoding function */
-    private $encoding = 'rawurlencode';
-    /** @var callable */
-    private $aggregator;
-
-    /**
-     * Parse a query string into a Query object
-     *
-     * $urlEncoding is used to control how the query string is parsed and how
-     * it is ultimately serialized. The value can be set to one of the
-     * following:
-     *
-     * - true: (default) Parse query strings using RFC 3986 while still
-     *   converting "+" to " ".
-     * - false: Disables URL decoding of the input string and URL encoding when
-     *   the query string is serialized.
-     * - 'RFC3986': Use RFC 3986 URL encoding/decoding
-     * - 'RFC1738': Use RFC 1738 URL encoding/decoding
-     *
-     * @param string      $query       Query string to parse
-     * @param bool|string $urlEncoding Controls how the input string is decoded
-     *                                 and encoded.
-     * @return self
-     */
-    public static function fromString($query, $urlEncoding = true)
-    {
-        static $qp;
-        if (!$qp) {
-            $qp = new QueryParser();
-        }
-
-        $q = new static();
-
-        if ($urlEncoding !== true) {
-            $q->setEncodingType($urlEncoding);
-        }
-
-        $qp->parseInto($q, $query, $urlEncoding);
-
-        return $q;
-    }
-
-    /**
-     * Convert the query string parameters to a query string string
-     *
-     * @return string
-     */
-    public function __toString()
-    {
-        if (!$this->data) {
-            return '';
-        }
-
-        // The default aggregator is statically cached
-        static $defaultAggregator;
-
-        if (!$this->aggregator) {
-            if (!$defaultAggregator) {
-                $defaultAggregator = self::phpAggregator();
-            }
-            $this->aggregator = $defaultAggregator;
-        }
-
-        $result = '';
-        $aggregator = $this->aggregator;
-        $encoder = $this->encoding;
-
-        foreach ($aggregator($this->data) as $key => $values) {
-            foreach ($values as $value) {
-                if ($result) {
-                    $result .= '&';
-                }
-                $result .= $encoder($key);
-                if ($value !== null) {
-                    $result .= '=' . $encoder($value);
-                }
-            }
-        }
-
-        return $result;
-    }
-
-    /**
-     * Controls how multi-valued query string parameters are aggregated into a
-     * string.
-     *
-     *     $query->setAggregator($query::duplicateAggregator());
-     *
-     * @param callable $aggregator Callable used to convert a deeply nested
-     *     array of query string variables into a flattened array of key value
-     *     pairs. The callable accepts an array of query data and returns a
-     *     flattened array of key value pairs where each value is an array of
-     *     strings.
-     */
-    public function setAggregator(callable $aggregator)
-    {
-        $this->aggregator = $aggregator;
-    }
-
-    /**
-     * Specify how values are URL encoded
-     *
-     * @param string|bool $type One of 'RFC1738', 'RFC3986', or false to disable encoding
-     *
-     * @throws \InvalidArgumentException
-     */
-    public function setEncodingType($type)
-    {
-        switch ($type) {
-            case self::RFC3986:
-                $this->encoding = 'rawurlencode';
-                break;
-            case self::RFC1738:
-                $this->encoding = 'urlencode';
-                break;
-            case false:
-                $this->encoding = function ($v) { return $v; };
-                break;
-            default:
-                throw new \InvalidArgumentException('Invalid URL encoding type');
-        }
-    }
-
-    /**
-     * Query string aggregator that does not aggregate nested query string
-     * values and allows duplicates in the resulting array.
-     *
-     * Example: http://test.com?q=1&q=2
-     *
-     * @return callable
-     */
-    public static function duplicateAggregator()
-    {
-        return function (array $data) {
-            return self::walkQuery($data, '', function ($key, $prefix) {
-                return is_int($key) ? $prefix : "{$prefix}[{$key}]";
-            });
-        };
-    }
-
-    /**
-     * Aggregates nested query string variables using the same technique as
-     * ``http_build_query()``.
-     *
-     * @param bool $numericIndices Pass false to not include numeric indices
-     *     when multi-values query string parameters are present.
-     *
-     * @return callable
-     */
-    public static function phpAggregator($numericIndices = true)
-    {
-        return function (array $data) use ($numericIndices) {
-            return self::walkQuery(
-                $data,
-                '',
-                function ($key, $prefix) use ($numericIndices) {
-                    return !$numericIndices && is_int($key)
-                        ? "{$prefix}[]"
-                        : "{$prefix}[{$key}]";
-                }
-            );
-        };
-    }
-
-    /**
-     * Easily create query aggregation functions by providing a key prefix
-     * function to this query string array walker.
-     *
-     * @param array    $query     Query string to walk
-     * @param string   $keyPrefix Key prefix (start with '')
-     * @param callable $prefixer  Function used to create a key prefix
-     *
-     * @return array
-     */
-    public static function walkQuery(array $query, $keyPrefix, callable $prefixer)
-    {
-        $result = [];
-        foreach ($query as $key => $value) {
-            if ($keyPrefix) {
-                $key = $prefixer($key, $keyPrefix);
-            }
-            if (is_array($value)) {
-                $result += self::walkQuery($value, $key, $prefixer);
-            } elseif (isset($result[$key])) {
-                $result[$key][] = $value;
-            } else {
-                $result[$key] = array($value);
-            }
-        }
-
-        return $result;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/QueryParser.php b/core/vendor/guzzlehttp/guzzle/src/QueryParser.php
deleted file mode 100644
index 90727cc..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/QueryParser.php
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Parses query strings into a Query object.
- *
- * While parsing, the parser will attempt to determine the most appropriate
- * query string aggregator to use when serializing the parsed query string
- * object back into a string. The hope is that parsing then serializing a
- * query string should be a lossless operation.
- *
- * @internal Use Query::fromString()
- */
-class QueryParser
-{
-    private $duplicates;
-    private $numericIndices;
-
-    /**
-     * Parse a query string into a Query object.
-     *
-     * @param Query       $query       Query object to populate
-     * @param string      $str         Query string to parse
-     * @param bool|string $urlEncoding How the query string is encoded
-     */
-    public function parseInto(Query $query, $str, $urlEncoding = true)
-    {
-        if ($str === '') {
-            return;
-        }
-
-        $result = [];
-        $this->duplicates = false;
-        $this->numericIndices = true;
-        $decoder = self::getDecoder($urlEncoding);
-
-        foreach (explode('&', $str) as $kvp) {
-
-            $parts = explode('=', $kvp, 2);
-            $key = $decoder($parts[0]);
-            $value = isset($parts[1]) ? $decoder($parts[1]) : null;
-
-            // Special handling needs to be taken for PHP nested array syntax
-            if (strpos($key, '[') !== false) {
-                $this->parsePhpValue($key, $value, $result);
-                continue;
-            }
-
-            if (!isset($result[$key])) {
-                $result[$key] = $value;
-            } else {
-                $this->duplicates = true;
-                if (!is_array($result[$key])) {
-                    $result[$key] = [$result[$key]];
-                }
-                $result[$key][] = $value;
-            }
-        }
-
-        $query->replace($result);
-
-        if (!$this->numericIndices) {
-            $query->setAggregator(Query::phpAggregator(false));
-        } elseif ($this->duplicates) {
-            $query->setAggregator(Query::duplicateAggregator());
-        }
-    }
-
-    /**
-     * Returns a callable that is used to URL decode query keys and values.
-     *
-     * @param string|bool $type One of true, false, RFC3986, and RFC1738
-     *
-     * @return callable|string
-     */
-    private static function getDecoder($type)
-    {
-        if ($type === true) {
-            return function ($value) {
-                return rawurldecode(str_replace('+', ' ', $value));
-            };
-        } elseif ($type == Query::RFC3986) {
-            return 'rawurldecode';
-        } elseif ($type == Query::RFC1738) {
-            return 'urldecode';
-        } else {
-            return function ($str) { return $str; };
-        }
-    }
-
-    /**
-     * Parses a PHP style key value pair.
-     *
-     * @param string      $key    Key to parse (e.g., "foo[a][b]")
-     * @param string|null $value  Value to set
-     * @param array       $result Result to modify by reference
-     */
-    private function parsePhpValue($key, $value, array &$result)
-    {
-        $node =& $result;
-        $keyBuffer = '';
-
-        for ($i = 0, $t = strlen($key); $i < $t; $i++) {
-            switch ($key[$i]) {
-                case '[':
-                    if ($keyBuffer) {
-                        $this->prepareNode($node, $keyBuffer);
-                        $node =& $node[$keyBuffer];
-                        $keyBuffer = '';
-                    }
-                    break;
-                case ']':
-                    $k = $this->cleanKey($node, $keyBuffer);
-                    $this->prepareNode($node, $k);
-                    $node =& $node[$k];
-                    $keyBuffer = '';
-                    break;
-                default:
-                    $keyBuffer .= $key[$i];
-                    break;
-            }
-        }
-
-        if (isset($node)) {
-            $this->duplicates = true;
-            $node[] = $value;
-        } else {
-            $node = $value;
-        }
-    }
-
-    /**
-     * Prepares a value in the array at the given key.
-     *
-     * If the key already exists, the key value is converted into an array.
-     *
-     * @param array  $node Result node to modify
-     * @param string $key  Key to add or modify in the node
-     */
-    private function prepareNode(&$node, $key)
-    {
-        if (!isset($node[$key])) {
-            $node[$key] = null;
-        } elseif (!is_array($node[$key])) {
-            $node[$key] = [$node[$key]];
-        }
-    }
-
-    /**
-     * Returns the appropriate key based on the node and key.
-     */
-    private function cleanKey($node, $key)
-    {
-        if ($key === '') {
-            $key = $node ? (string) count($node) : 0;
-            // Found a [] key, so track this to ensure that we disable numeric
-            // indexing of keys in the resolved query aggregator.
-            $this->numericIndices = false;
-        }
-
-        return $key;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/core/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
new file mode 100644
index 0000000..99d9e7e
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
@@ -0,0 +1,189 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Exception\BadResponseException;
+use GuzzleHttp\Exception\TooManyRedirectsException;
+use GuzzleHttp\Promise\PromiseInterface;
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\UriInterface;
+
+/**
+ * Request redirect middleware.
+ *
+ * Apply this middleware like other middleware using
+ * {@see GuzzleHttp\Middleware::redirect()}.
+ */
+class RedirectMiddleware
+{
+    public static $defaultSettings = [
+        'max'       => 5,
+        'protocols' => ['http', 'https'],
+        'strict'    => false,
+        'referer'   => false
+    ];
+
+    /** @var callable  */
+    private $nextHandler;
+
+    /**
+     * @param callable $nextHandler Next handler to invoke.
+     */
+    public function __construct(callable $nextHandler)
+    {
+        $this->nextHandler = $nextHandler;
+    }
+
+    /**
+     * @param RequestInterface $request
+     * @param array            $options
+     *
+     * @return PromiseInterface
+     */
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        $fn = $this->nextHandler;
+
+        if (empty($options['allow_redirects'])) {
+            return $fn($request, $options);
+        }
+
+        if ($options['allow_redirects'] === true) {
+            $options['allow_redirects'] = self::$defaultSettings;
+        } elseif (!is_array($options['allow_redirects'])) {
+            throw new \InvalidArgumentException('allow_redirects must be true, false, or array');
+        } else {
+            // Merge the default settings with the provided settings
+            $options['allow_redirects'] += self::$defaultSettings;
+        }
+
+        if (empty($options['allow_redirects']['max'])) {
+            return $fn($request, $options);
+        }
+
+        return $fn($request, $options)
+            ->then(function (ResponseInterface $response) use ($request, $options) {
+                return $this->checkRedirect($request, $options, $response);
+            });
+    }
+
+    /**
+     * @param RequestInterface  $request
+     * @param array             $options
+     * @param ResponseInterface|PromiseInterface $response
+     *
+     * @return ResponseInterface|PromiseInterface
+     */
+    public function checkRedirect(
+        RequestInterface $request,
+        array $options,
+        ResponseInterface $response
+    ) {
+        if (substr($response->getStatusCode(), 0, 1) != '3'
+            || !$response->hasHeader('Location')
+        ) {
+            return $response;
+        }
+
+        $this->guardMax($request, $options);
+        $nextRequest = $this->modifyRequest($request, $options, $response);
+
+        return $this($nextRequest, $options);
+    }
+
+    private function guardMax(RequestInterface $request, array &$options)
+    {
+        $current = isset($options['__redirect_count'])
+            ? $options['__redirect_count']
+            : 0;
+        $options['__redirect_count'] = $current + 1;
+        $max = $options['allow_redirects']['max'];
+
+        if ($options['__redirect_count'] > $max) {
+            throw new TooManyRedirectsException(
+                "Will not follow more than {$max} redirects",
+                $request
+            );
+        }
+    }
+
+    /**
+     * @param RequestInterface  $request
+     * @param array             $options
+     * @param ResponseInterface $response
+     *
+     * @return RequestInterface
+     */
+    public function modifyRequest(
+        RequestInterface $request,
+        array $options,
+        ResponseInterface $response
+    ) {
+        // Request modifications to apply.
+        $modify = [];
+        $protocols = $options['allow_redirects']['protocols'];
+
+        // Use a GET request if this is an entity enclosing request and we are
+        // not forcing RFC compliance, but rather emulating what all browsers
+        // would do.
+        $statusCode = $response->getStatusCode();
+        if ($statusCode == 303 ||
+            ($statusCode <= 302 && $request->getBody() && !$options['allow_redirects']['strict'])
+        ) {
+            $modify['method'] = 'GET';
+            $modify['body'] = '';
+        }
+
+        $modify['uri'] = $this->redirectUri($request, $response, $protocols);
+        Psr7\rewind_body($request);
+
+        // Add the Referer header if it is told to do so and only
+        // add the header if we are not redirecting from https to http.
+        if ($options['allow_redirects']['referer']
+            && $modify['uri']->getScheme() === $request->getUri()->getScheme()
+        ) {
+            $uri = $request->getUri()->withUserInfo('', '');
+            $modify['set_headers']['Referer'] = (string) $uri;
+        } else {
+            $modify['remove_headers'][] = 'Referer';
+        }
+
+        return Psr7\modify_request($request, $modify);
+    }
+
+    /**
+     * Set the appropriate URL on the request based on the location header
+     *
+     * @param RequestInterface  $request
+     * @param ResponseInterface $response
+     * @param array             $protocols
+     *
+     * @return UriInterface
+     */
+    private function redirectUri(
+        RequestInterface $request,
+        ResponseInterface $response,
+        array $protocols
+    ) {
+        $location = Psr7\Uri::resolve(
+            $request->getUri(),
+            $response->getHeaderLine('Location')
+        );
+
+        // Ensure that the redirect URI is allowed based on the protocols.
+        if (!in_array($location->getScheme(), $protocols)) {
+            throw new BadResponseException(
+                sprintf(
+                    'Redirect URI, %s, does not use one of the allowed redirect protocols: %s',
+                    $location,
+                    implode(', ', $protocols)
+                ),
+                $request,
+                $response
+            );
+        }
+
+        return $location;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php b/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php
deleted file mode 100644
index b37c190..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\EndEvent;
-use GuzzleHttp\Exception\StateException;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\FutureResponse;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Ring\Future\FutureInterface;
-
-/**
- * Responsible for transitioning requests through lifecycle events.
- */
-class RequestFsm
-{
-    private $handler;
-    private $mf;
-    private $maxTransitions;
-
-    public function __construct(
-        callable $handler,
-        MessageFactoryInterface $messageFactory,
-        $maxTransitions = 200
-    ) {
-        $this->mf = $messageFactory;
-        $this->maxTransitions = $maxTransitions;
-        $this->handler = $handler;
-    }
-
-    /**
-     * Runs the state machine until a terminal state is entered or the
-     * optionally supplied $finalState is entered.
-     *
-     * @param Transaction $trans      Transaction being transitioned.
-     *
-     * @throws \Exception if a terminal state throws an exception.
-     */
-    public function __invoke(Transaction $trans)
-    {
-        $trans->_transitionCount = 0;
-
-        if (!$trans->state) {
-            $trans->state = 'before';
-        }
-
-        transition:
-
-        if (++$trans->_transitionCount > $this->maxTransitions) {
-            throw new StateException("Too many state transitions were "
-                . "encountered ({$trans->_transitionCount}). This likely "
-                . "means that a combination of event listeners are in an "
-                . "infinite loop.");
-        }
-
-        switch ($trans->state) {
-            case 'before': goto before;
-            case 'complete': goto complete;
-            case 'error': goto error;
-            case 'retry': goto retry;
-            case 'send': goto send;
-            case 'end': goto end;
-            default: throw new StateException("Invalid state: {$trans->state}");
-        }
-
-        before: {
-            try {
-                $trans->request->getEmitter()->emit('before', new BeforeEvent($trans));
-                $trans->state = 'send';
-                if ((bool) $trans->response) {
-                    $trans->state = 'complete';
-                }
-            } catch (\Exception $e) {
-                $trans->state = 'error';
-                $trans->exception = $e;
-            }
-            goto transition;
-        }
-
-        complete: {
-            try {
-                if ($trans->response instanceof FutureInterface) {
-                    // Futures will have their own end events emitted when
-                    // dereferenced.
-                    return;
-                }
-                $trans->state = 'end';
-                $trans->response->setEffectiveUrl($trans->request->getUrl());
-                $trans->request->getEmitter()->emit('complete', new CompleteEvent($trans));
-            } catch (\Exception $e) {
-                $trans->state = 'error';
-                $trans->exception = $e;
-            }
-            goto transition;
-        }
-
-        error: {
-            try {
-                // Convert non-request exception to a wrapped exception
-                $trans->exception = RequestException::wrapException(
-                    $trans->request, $trans->exception
-                );
-                $trans->state = 'end';
-                $trans->request->getEmitter()->emit('error', new ErrorEvent($trans));
-                // An intercepted request (not retried) transitions to complete
-                if (!$trans->exception && $trans->state !== 'retry') {
-                    $trans->state = 'complete';
-                }
-            } catch (\Exception $e) {
-                $trans->state = 'end';
-                $trans->exception = $e;
-            }
-            goto transition;
-        }
-
-        retry: {
-            $trans->retries++;
-            $trans->response = null;
-            $trans->exception = null;
-            $trans->state = 'before';
-            goto transition;
-        }
-
-        send: {
-            $fn = $this->handler;
-            $trans->response = FutureResponse::proxy(
-                $fn(RingBridge::prepareRingRequest($trans)),
-                function ($value) use ($trans) {
-                    RingBridge::completeRingResponse($trans, $value, $this->mf, $this);
-                    $this($trans);
-                    return $trans->response;
-                }
-            );
-            return;
-        }
-
-        end: {
-            $trans->request->getEmitter()->emit('end', new EndEvent($trans));
-            // Throw exceptions in the terminal event if the exception
-            // was not handled by an "end" event listener.
-            if ($trans->exception) {
-                if (!($trans->exception instanceof RequestException)) {
-                    $trans->exception = RequestException::wrapException(
-                        $trans->request, $trans->exception
-                    );
-                }
-                throw $trans->exception;
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/core/vendor/guzzlehttp/guzzle/src/RequestOptions.php
new file mode 100644
index 0000000..6f4f159
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/RequestOptions.php
@@ -0,0 +1,211 @@
+<?php
+namespace GuzzleHttp;
+
+/**
+ * This class contains a list of built-in Guzzle request options.
+ *
+ * More documentation for each option can be found at http://guzzlephp.org/.
+ *
+ * @link http://docs.guzzlephp.org/en/v6/request-options.html
+ */
+final class RequestOptions
+{
+    /**
+     * allow_redirects: (bool|array) Controls redirect behavior. Pass false
+     * to disable redirects, pass true to enable redirects, pass an
+     * associative to provide custom redirect settings. Defaults to "false".
+     * This option only works if your handler has the RedirectMiddleware.
+     */
+    const ALLOW_REDIRECTS = 'allow_redirects';
+
+    /**
+     * auth: (array) Pass an array of HTTP authentication parameters to use
+     * with the request. The array must contain the username in index [0],
+     * the password in index [1], and you can optionally provide a built-in
+     * authentication type in index [2]. Pass null to disable authentication
+     * for a request.
+     */
+    const AUTH = 'auth';
+
+    /**
+     * body: (string|null|callable|iterator|object) Body to send in the
+     * request.
+     */
+    const BODY = 'body';
+
+    /**
+     * cert: (string|array) Set to a string to specify the path to a file
+     * containing a PEM formatted SSL client side certificate. If a password
+     * is required, then set cert to an array containing the path to the PEM
+     * file in the first array element followed by the certificate password
+     * in the second array element.
+     */
+    const CERT = 'cert';
+
+    /**
+     * cookies: (bool|GuzzleHttp\Cookie\CookieJarInterface, default=false)
+     * Specifies whether or not cookies are used in a request or what cookie
+     * jar to use or what cookies to send. This option only works if your
+     * handler has the `cookie` middleware. Valid values are `false` and
+     * an instance of {@see GuzzleHttp\Cookie\CookieJarInterface}.
+     */
+    const COOKIES = 'cookies';
+
+    /**
+     * connect_timeout: (float, default=0) Float describing the number of
+     * seconds to wait while trying to connect to a server. Use 0 to wait
+     * indefinitely (the default behavior).
+     */
+    const CONNECT_TIMEOUT = 'connect_timeout';
+
+    /**
+     * debug: (bool|resource) Set to true or set to a PHP stream returned by
+     * fopen()  enable debug output with the HTTP handler used to send a
+     * request.
+     */
+    const DEBUG = 'debug';
+
+    /**
+     * decode_content: (bool, default=true) Specify whether or not
+     * Content-Encoding responses (gzip, deflate, etc.) are automatically
+     * decoded.
+     */
+    const DECODE_CONTENT = 'decode_content';
+
+    /**
+     * delay: (int) The amount of time to delay before sending in milliseconds.
+     */
+    const DELAY = 'delay';
+
+    /**
+     * expect: (bool|integer) Controls the behavior of the
+     * "Expect: 100-Continue" header.
+     *
+     * Set to `true` to enable the "Expect: 100-Continue" header for all
+     * requests that sends a body. Set to `false` to disable the
+     * "Expect: 100-Continue" header for all requests. Set to a number so that
+     * the size of the payload must be greater than the number in order to send
+     * the Expect header. Setting to a number will send the Expect header for
+     * all requests in which the size of the payload cannot be determined or
+     * where the body is not rewindable.
+     *
+     * By default, Guzzle will add the "Expect: 100-Continue" header when the
+     * size of the body of a request is greater than 1 MB and a request is
+     * using HTTP/1.1.
+     */
+    const EXPECT = 'expect';
+
+    /**
+     * form_params: (array) Associative array of form field names to values
+     * where each value is a string or array of strings. Sets the Content-Type
+     * header to application/x-www-form-urlencoded when no Content-Type header
+     * is already present.
+     */
+    const FORM_PARAMS = 'form_params';
+
+    /**
+     * headers: (array) Associative array of HTTP headers. Each value MUST be
+     * a string or array of strings.
+     */
+    const HEADERS = 'headers';
+
+    /**
+     * http_errors: (bool, default=true) Set to false to disable exceptions
+     * when a non- successful HTTP response is received. By default,
+     * exceptions will be thrown for 4xx and 5xx responses. This option only
+     * works if your handler has the `httpErrors` middleware.
+     */
+    const HTTP_ERRORS = 'http_errors';
+
+    /**
+     * json: (mixed) Adds JSON data to a request. The provided value is JSON
+     * encoded and a Content-Type header of application/json will be added to
+     * the request if no Content-Type header is already present.
+     */
+    const JSON = 'json';
+
+    /**
+     * multipart: (array) Array of associative arrays, each containing a
+     * required "name" key mapping to the form field, name, a required
+     * "contents" key mapping to a StreamInterface|resource|string, an
+     * optional "headers" associative array of custom headers, and an
+     * optional "filename" key mapping to a string to send as the filename in
+     * the part. If no "filename" key is present, then no "filename" attribute
+     * will be added to the part.
+     */
+    const MULTIPART = 'multipart';
+
+    /**
+     * progress: (callable) Defines a function to invoke when transfer
+     * progress is made. The function accepts the following positional
+     * arguments: the total number of bytes expected to be downloaded, the
+     * number of bytes downloaded so far, the number of bytes expected to be
+     * uploaded, the number of bytes uploaded so far.
+     */
+    const PROGRESS = 'progress';
+
+    /**
+     * proxy: (string|array) Pass a string to specify an HTTP proxy, or an
+     * array to specify different proxies for different protocols (where the
+     * key is the protocol and the value is a proxy string).
+     */
+    const PROXY = 'proxy';
+
+    /**
+     * query: (array|string) Associative array of query string values to add
+     * to the request. This option uses PHP's http_build_query() to create
+     * the string representation. Pass a string value if you need more
+     * control than what this method provides
+     */
+    const QUERY = 'query';
+
+    /**
+     * sink: (resource|string|StreamInterface) Where the data of the
+     * response is written to. Defaults to a PHP temp stream. Providing a
+     * string will write data to a file by the given name.
+     */
+    const SINK = 'sink';
+
+    /**
+     * synchronous: (bool) Set to true to inform HTTP handlers that you intend
+     * on waiting on the response. This can be useful for optimizations. Note
+     * that a promise is still returned if you are using one of the async
+     * client methods.
+     */
+    const SYNCHRONOUS = 'synchronous';
+
+    /**
+     * ssl_key: (array|string) Specify the path to a file containing a private
+     * SSL key in PEM format. If a password is required, then set to an array
+     * containing the path to the SSL key in the first array element followed
+     * by the password required for the certificate in the second element.
+     */
+    const SSL_KEY = 'ssl_key';
+
+    /**
+     * stream: Set to true to attempt to stream a response rather than
+     * download it all up-front.
+     */
+    const STREAM = 'stream';
+
+    /**
+     * verify: (bool|string, default=true) Describes the SSL certificate
+     * verification behavior of a request. Set to true to enable SSL
+     * certificate verification using the system CA bundle when available
+     * (the default). Set to false to disable certificate verification (this
+     * is insecure!). Set to a string to provide the path to a CA bundle on
+     * disk to enable verification using a custom certificate.
+     */
+    const VERIFY = 'verify';
+
+    /**
+     * timeout: (float, default=0) Float describing the timeout of the
+     * request in seconds. Use 0 to wait indefinitely (the default behavior).
+     */
+    const TIMEOUT = 'timeout';
+
+    /**
+     * version: (float) Specifies the HTTP protocol version to attempt to use.
+     */
+    const VERSION = 'version';
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/core/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
new file mode 100644
index 0000000..4b95a14
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
@@ -0,0 +1,111 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Promise\PromiseInterface;
+use GuzzleHttp\Promise\RejectedPromise;
+use GuzzleHttp\Psr7;
+use Psr\Http\Message\RequestInterface;
+
+/**
+ * Middleware that retries requests based on the boolean result of
+ * invoking the provided "decider" function.
+ */
+class RetryMiddleware
+{
+    /** @var callable  */
+    private $nextHandler;
+
+    /** @var callable */
+    private $decider;
+
+    /**
+     * @param callable $decider     Function that accepts the number of retries,
+     *                              a request, [response], and [exception] and
+     *                              returns true if the request is to be
+     *                              retried.
+     * @param callable $nextHandler Next handler to invoke.
+     * @param callable $delay       Function that accepts the number of retries
+     *                              and returns the number of milliseconds to
+     *                              delay.
+     */
+    public function __construct(
+        callable $decider,
+        callable $nextHandler,
+        callable $delay = null
+    ) {
+        $this->decider = $decider;
+        $this->nextHandler = $nextHandler;
+        $this->delay = $delay ?: __CLASS__ . '::exponentialDelay';
+    }
+
+    /**
+     * Default exponential backoff delay function.
+     *
+     * @param $retries
+     *
+     * @return int
+     */
+    public static function exponentialDelay($retries)
+    {
+        return (int) pow(2, $retries - 1);
+    }
+
+    /**
+     * @param RequestInterface $request
+     * @param array            $options
+     *
+     * @return PromiseInterface
+     */
+    public function __invoke(RequestInterface $request, array $options)
+    {
+        if (!isset($options['retries'])) {
+            $options['retries'] = 0;
+        }
+
+        $fn = $this->nextHandler;
+        return $fn($request, $options)
+            ->then(
+                $this->onFulfilled($request, $options),
+                $this->onRejected($request, $options)
+            );
+    }
+
+    private function onFulfilled(RequestInterface $req, array $options)
+    {
+        return function ($value) use ($req, $options) {
+            if (!call_user_func(
+                $this->decider,
+                $options['retries'],
+                $req,
+                $value,
+                null
+            )) {
+                return $value;
+            }
+            return $this->doRetry($req, $options);
+        };
+    }
+
+    private function onRejected(RequestInterface $req, array $options)
+    {
+        return function ($reason) use ($req, $options) {
+            if (!call_user_func(
+                $this->decider,
+                $options['retries'],
+                $req,
+                null,
+                $reason
+            )) {
+                return new RejectedPromise($reason);
+            }
+            return $this->doRetry($req, $options);
+        };
+    }
+
+    private function doRetry(RequestInterface $request, array $options)
+    {
+        $options['delay'] = call_user_func($this->delay, ++$options['retries']);
+
+        return $this($request, $options);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/RingBridge.php b/core/vendor/guzzlehttp/guzzle/src/RingBridge.php
deleted file mode 100644
index bc6841d..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/RingBridge.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Event\ProgressEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Exception\RequestException;
-
-/**
- * Provides the bridge between Guzzle requests and responses and Guzzle Ring.
- */
-class RingBridge
-{
-    /**
-     * Creates a Ring request from a request object.
-     *
-     * This function does not hook up the "then" and "progress" events that
-     * would be required for actually sending a Guzzle request through a
-     * RingPHP handler.
-     *
-     * @param RequestInterface $request Request to convert.
-     *
-     * @return array Converted Guzzle Ring request.
-     */
-    public static function createRingRequest(RequestInterface $request)
-    {
-        $options = $request->getConfig()->toArray();
-        $url = $request->getUrl();
-        // No need to calculate the query string twice (in URL and query).
-        $qs = ($pos = strpos($url, '?')) ? substr($url, $pos + 1) : null;
-
-        return [
-            'scheme'       => $request->getScheme(),
-            'http_method'  => $request->getMethod(),
-            'url'          => $url,
-            'uri'          => $request->getPath(),
-            'headers'      => $request->getHeaders(),
-            'body'         => $request->getBody(),
-            'version'      => $request->getProtocolVersion(),
-            'client'       => $options,
-            'query_string' => $qs,
-            'future'       => isset($options['future']) ? $options['future'] : false
-        ];
-    }
-
-    /**
-     * Creates a Ring request from a request object AND prepares the callbacks.
-     *
-     * @param Transaction $trans Transaction to update.
-     *
-     * @return array Converted Guzzle Ring request.
-     */
-    public static function prepareRingRequest(Transaction $trans)
-    {
-        // Clear out the transaction state when initiating.
-        $trans->exception = null;
-        $request = self::createRingRequest($trans->request);
-
-        // Emit progress events if any progress listeners are registered.
-        if ($trans->request->getEmitter()->hasListeners('progress')) {
-            $emitter = $trans->request->getEmitter();
-            $request['client']['progress'] = function ($a, $b, $c, $d) use ($trans, $emitter) {
-                $emitter->emit('progress', new ProgressEvent($trans, $a, $b, $c, $d));
-            };
-        }
-
-        return $request;
-    }
-
-    /**
-     * Handles the process of processing a response received from a ring
-     * handler. The created response is added to the transaction, and the
-     * transaction stat is set appropriately.
-     *
-     * @param Transaction             $trans          Owns request and response.
-     * @param array                   $response       Ring response array
-     * @param MessageFactoryInterface $messageFactory Creates response objects.
-     */
-    public static function completeRingResponse(
-        Transaction $trans,
-        array $response,
-        MessageFactoryInterface $messageFactory
-    ) {
-        $trans->state = 'complete';
-        $trans->transferInfo = isset($response['transfer_stats'])
-            ? $response['transfer_stats'] : [];
-
-        if (!empty($response['status'])) {
-            $options = [];
-            if (isset($response['version'])) {
-                $options['protocol_version'] = $response['version'];
-            }
-            if (isset($response['reason'])) {
-                $options['reason_phrase'] = $response['reason'];
-            }
-            $trans->response = $messageFactory->createResponse(
-                $response['status'],
-                isset($response['headers']) ? $response['headers'] : [],
-                isset($response['body']) ? $response['body'] : null,
-                $options
-            );
-            if (isset($response['effective_url'])) {
-                $trans->response->setEffectiveUrl($response['effective_url']);
-            }
-        } elseif (empty($response['error'])) {
-            // When nothing was returned, then we need to add an error.
-            $response['error'] = self::getNoRingResponseException($trans->request);
-        }
-
-        if (isset($response['error'])) {
-            $trans->state = 'error';
-            $trans->exception = $response['error'];
-        }
-    }
-
-    /**
-     * Creates a Guzzle request object using a ring request array.
-     *
-     * @param array $request Ring request
-     *
-     * @return Request
-     * @throws \InvalidArgumentException for incomplete requests.
-     */
-    public static function fromRingRequest(array $request)
-    {
-        $options = [];
-        if (isset($request['version'])) {
-            $options['protocol_version'] = $request['version'];
-        }
-
-        if (!isset($request['http_method'])) {
-            throw new \InvalidArgumentException('No http_method');
-        }
-
-        return new Request(
-            $request['http_method'],
-            Core::url($request),
-            isset($request['headers']) ? $request['headers'] : [],
-            isset($request['body']) ? Stream::factory($request['body']) : null,
-            $options
-        );
-    }
-
-    /**
-     * Get an exception that can be used when a RingPHP handler does not
-     * populate a response.
-     *
-     * @param RequestInterface $request
-     *
-     * @return RequestException
-     */
-    public static function getNoRingResponseException(RequestInterface $request)
-    {
-        $message = <<<EOT
-Sending the request did not return a response, exception, or populate the
-transaction with a response. This is most likely due to an incorrectly
-implemented RingPHP handler. If you are simply trying to mock responses,
-then it is recommended to use the GuzzleHttp\Ring\Client\MockHandler.
-EOT;
-        return new RequestException($message, $request);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php
deleted file mode 100644
index cacabb6..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-namespace GuzzleHttp\Subscriber;
-
-use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Cookie\CookieJarInterface;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
-
-/**
- * Adds, extracts, and persists cookies between HTTP requests
- */
-class Cookie implements SubscriberInterface
-{
-    /** @var CookieJarInterface */
-    private $cookieJar;
-
-    /**
-     * @param CookieJarInterface $cookieJar Cookie jar used to hold cookies
-     */
-    public function __construct(CookieJarInterface $cookieJar = null)
-    {
-        $this->cookieJar = $cookieJar ?: new CookieJar();
-    }
-
-    public function getEvents()
-    {
-        // Fire the cookie plugin complete event before redirecting
-        return [
-            'before'   => ['onBefore'],
-            'complete' => ['onComplete', RequestEvents::REDIRECT_RESPONSE + 10]
-        ];
-    }
-
-    /**
-     * Get the cookie cookieJar
-     *
-     * @return CookieJarInterface
-     */
-    public function getCookieJar()
-    {
-        return $this->cookieJar;
-    }
-
-    public function onBefore(BeforeEvent $event)
-    {
-        $this->cookieJar->addCookieHeader($event->getRequest());
-    }
-
-    public function onComplete(CompleteEvent $event)
-    {
-        $this->cookieJar->extractCookies(
-            $event->getRequest(),
-            $event->getResponse()
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
deleted file mode 100644
index 5cf0611..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php
-namespace GuzzleHttp\Subscriber;
-
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Maintains a list of requests and responses sent using a request or client
- */
-class History implements SubscriberInterface, \IteratorAggregate, \Countable
-{
-    /** @var int The maximum number of requests to maintain in the history */
-    private $limit;
-
-    /** @var array Requests and responses that have passed through the plugin */
-    private $transactions = [];
-
-    public function __construct($limit = 10)
-    {
-        $this->limit = $limit;
-    }
-
-    public function getEvents()
-    {
-        return [
-            'complete' => ['onComplete', RequestEvents::EARLY],
-            'error'    => ['onError', RequestEvents::EARLY],
-        ];
-    }
-
-    /**
-     * Convert to a string that contains all request and response headers
-     *
-     * @return string
-     */
-    public function __toString()
-    {
-        $lines = array();
-        foreach ($this->transactions as $entry) {
-            $response = isset($entry['response']) ? $entry['response'] : '';
-            $lines[] = '> ' . trim($entry['sent_request'])
-                . "\n\n< " . trim($response) . "\n";
-        }
-
-        return implode("\n", $lines);
-    }
-
-    public function onComplete(CompleteEvent $event)
-    {
-        $this->add($event->getRequest(), $event->getResponse());
-    }
-
-    public function onError(ErrorEvent $event)
-    {
-        // Only track when no response is present, meaning this didn't ever
-        // emit a complete event
-        if (!$event->getResponse()) {
-            $this->add($event->getRequest());
-        }
-    }
-
-    /**
-     * Returns an Iterator that yields associative array values where each
-     * associative array contains the following key value pairs:
-     *
-     * - request: Representing the actual request that was received.
-     * - sent_request: A clone of the request that will not be mutated.
-     * - response: The response that was received (if available).
-     *
-     * @return \Iterator
-     */
-    public function getIterator()
-    {
-        return new \ArrayIterator($this->transactions);
-    }
-
-    /**
-     * Get all of the requests sent through the plugin.
-     *
-     * Requests can be modified after they are logged by the history
-     * subscriber. By default this method will return the actual request
-     * instances that were received. Pass true to this method if you wish to
-     * get copies of the requests that represent the request state when it was
-     * initially logged by the history subscriber.
-     *
-     * @param bool $asSent Set to true to get clones of the requests that have
-     *                     not been mutated since the request was received by
-     *                     the history subscriber.
-     *
-     * @return RequestInterface[]
-     */
-    public function getRequests($asSent = false)
-    {
-        return array_map(function ($t) use ($asSent) {
-            return $asSent ? $t['sent_request'] : $t['request'];
-        }, $this->transactions);
-    }
-
-    /**
-     * Get the number of requests in the history
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->transactions);
-    }
-
-    /**
-     * Get the last request sent.
-     *
-     * Requests can be modified after they are logged by the history
-     * subscriber. By default this method will return the actual request
-     * instance that was received. Pass true to this method if you wish to get
-     * a copy of the request that represents the request state when it was
-     * initially logged by the history subscriber.
-     *
-     * @param bool $asSent Set to true to get a clone of the last request that
-     *                     has not been mutated since the request was received
-     *                     by the history subscriber.
-     *
-     * @return RequestInterface
-     */
-    public function getLastRequest($asSent = false)
-    {
-        return $asSent
-            ? end($this->transactions)['sent_request']
-            : end($this->transactions)['request'];
-    }
-
-    /**
-     * Get the last response in the history
-     *
-     * @return ResponseInterface|null
-     */
-    public function getLastResponse()
-    {
-        return end($this->transactions)['response'];
-    }
-
-    /**
-     * Clears the history
-     */
-    public function clear()
-    {
-        $this->transactions = array();
-    }
-
-    /**
-     * Add a request to the history
-     *
-     * @param RequestInterface  $request  Request to add
-     * @param ResponseInterface $response Response of the request
-     */
-    private function add(
-        RequestInterface $request,
-        ResponseInterface $response = null
-    ) {
-        $this->transactions[] = [
-            'request'      => $request,
-            'sent_request' => clone $request,
-            'response'     => $response
-        ];
-        if (count($this->transactions) > $this->limit) {
-            array_shift($this->transactions);
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php
deleted file mode 100644
index ed9de5b..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-namespace GuzzleHttp\Subscriber;
-
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Exception\RequestException;
-
-/**
- * Throws exceptions when a 4xx or 5xx response is received
- */
-class HttpError implements SubscriberInterface
-{
-    public function getEvents()
-    {
-        return ['complete' => ['onComplete', RequestEvents::VERIFY_RESPONSE]];
-    }
-
-    /**
-     * Throw a RequestException on an HTTP protocol error
-     *
-     * @param CompleteEvent $event Emitted event
-     * @throws RequestException
-     */
-    public function onComplete(CompleteEvent $event)
-    {
-        $code = (string) $event->getResponse()->getStatusCode();
-        // Throw an exception for an unsuccessful response
-        if ($code[0] >= 4) {
-            throw RequestException::create(
-                $event->getRequest(),
-                $event->getResponse()
-            );
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php
deleted file mode 100644
index 39a3c44..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-namespace GuzzleHttp\Subscriber;
-
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Queues mock responses or exceptions and delivers mock responses or
- * exceptions in a fifo order.
- */
-class Mock implements SubscriberInterface, \Countable
-{
-    /** @var array Array of mock responses / exceptions */
-    private $queue = [];
-
-    /** @var bool Whether or not to consume an entity body when mocking */
-    private $readBodies;
-
-    /** @var MessageFactory */
-    private $factory;
-
-    /**
-     * @param array $items      Array of responses or exceptions to queue
-     * @param bool  $readBodies Set to false to not consume the entity body of
-     *                          a request when a mock is served.
-     */
-    public function __construct(array $items = [], $readBodies = true)
-    {
-        $this->factory = new MessageFactory();
-        $this->readBodies = $readBodies;
-        $this->addMultiple($items);
-    }
-
-    public function getEvents()
-    {
-        // Fire the event last, after signing
-        return ['before' => ['onBefore', RequestEvents::SIGN_REQUEST - 10]];
-    }
-
-    /**
-     * @throws \OutOfBoundsException|\Exception
-     */
-    public function onBefore(BeforeEvent $event)
-    {
-        if (!$item = array_shift($this->queue)) {
-            throw new \OutOfBoundsException('Mock queue is empty');
-        } elseif ($item instanceof RequestException) {
-            throw $item;
-        }
-
-        // Emulate reading a response body
-        $request = $event->getRequest();
-        if ($this->readBodies && $request->getBody()) {
-            while (!$request->getBody()->eof()) {
-                $request->getBody()->read(8096);
-            }
-        }
-
-        $event->intercept($item);
-    }
-
-    public function count()
-    {
-        return count($this->queue);
-    }
-
-    /**
-     * Add a response to the end of the queue
-     *
-     * @param string|ResponseInterface $response Response or path to response file
-     *
-     * @return self
-     * @throws \InvalidArgumentException if a string or Response is not passed
-     */
-    public function addResponse($response)
-    {
-        if (is_string($response)) {
-            $response = file_exists($response)
-                ? $this->factory->fromMessage(file_get_contents($response))
-                : $this->factory->fromMessage($response);
-        } elseif (!($response instanceof ResponseInterface)) {
-            throw new \InvalidArgumentException('Response must a message '
-                . 'string, response object, or path to a file');
-        }
-
-        $this->queue[] = $response;
-
-        return $this;
-    }
-
-    /**
-     * Add an exception to the end of the queue
-     *
-     * @param RequestException $e Exception to throw when the request is executed
-     *
-     * @return self
-     */
-    public function addException(RequestException $e)
-    {
-        $this->queue[] = $e;
-
-        return $this;
-    }
-
-    /**
-     * Add multiple items to the queue
-     *
-     * @param array $items Items to add
-     */
-    public function addMultiple(array $items)
-    {
-        foreach ($items as $item) {
-            if ($item instanceof RequestException) {
-                $this->addException($item);
-            } else {
-                $this->addResponse($item);
-            }
-        }
-    }
-
-    /**
-     * Clear the queue
-     */
-    public function clearQueue()
-    {
-        $this->queue = [];
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
deleted file mode 100644
index b5ed4e2..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-namespace GuzzleHttp\Subscriber;
-
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Message\AppliesHeadersInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Mimetypes;
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Prepares requests with a body before sending
- *
- * **Request Options**
- *
- * - expect: Set to true to enable the "Expect: 100-Continue" header for a
- *   request that send a body. Set to false to disable "Expect: 100-Continue".
- *   Set to a number so that the size of the payload must be greater than the
- *   number in order to send the Expect header. Setting to a number will send
- *   the Expect header for all requests in which the size of the payload cannot
- *   be determined or where the body is not rewindable.
- */
-class Prepare implements SubscriberInterface
-{
-    public function getEvents()
-    {
-        return ['before' => ['onBefore', RequestEvents::PREPARE_REQUEST]];
-    }
-
-    public function onBefore(BeforeEvent $event)
-    {
-        $request = $event->getRequest();
-
-        // Set the appropriate Content-Type for a request if one is not set and
-        // there are form fields
-        if (!($body = $request->getBody())) {
-            return;
-        }
-
-        $this->addContentLength($request, $body);
-
-        if ($body instanceof AppliesHeadersInterface) {
-            // Synchronize the body with the request headers
-            $body->applyRequestHeaders($request);
-        } elseif (!$request->hasHeader('Content-Type')) {
-            $this->addContentType($request, $body);
-        }
-
-        $this->addExpectHeader($request, $body);
-    }
-
-    private function addContentType(
-        RequestInterface $request,
-        StreamInterface $body
-    ) {
-        if (!($uri = $body->getMetadata('uri'))) {
-            return;
-        }
-
-        // Guess the content-type based on the stream's "uri" metadata value.
-        // The file extension is used to determine the appropriate mime-type.
-        if ($contentType = Mimetypes::getInstance()->fromFilename($uri)) {
-            $request->setHeader('Content-Type', $contentType);
-        }
-    }
-
-    private function addContentLength(
-        RequestInterface $request,
-        StreamInterface $body
-    ) {
-        // Set the Content-Length header if it can be determined, and never
-        // send a Transfer-Encoding: chunked and Content-Length header in
-        // the same request.
-        if ($request->hasHeader('Content-Length')) {
-            // Remove transfer-encoding if content-length is set.
-            $request->removeHeader('Transfer-Encoding');
-            return;
-        }
-
-        if ($request->hasHeader('Transfer-Encoding')) {
-            return;
-        }
-
-        if (null !== ($size = $body->getSize())) {
-            $request->setHeader('Content-Length', $size);
-            $request->removeHeader('Transfer-Encoding');
-        } elseif ('1.1' == $request->getProtocolVersion()) {
-            // Use chunked Transfer-Encoding if there is no determinable
-            // content-length header and we're using HTTP/1.1.
-            $request->setHeader('Transfer-Encoding', 'chunked');
-            $request->removeHeader('Content-Length');
-        }
-    }
-
-    private function addExpectHeader(
-        RequestInterface $request,
-        StreamInterface $body
-    ) {
-        // Determine if the Expect header should be used
-        if ($request->hasHeader('Expect')) {
-            return;
-        }
-
-        $expect = $request->getConfig()['expect'];
-
-        // Return if disabled or if you're not using HTTP/1.1
-        if ($expect === false || $request->getProtocolVersion() !== '1.1') {
-            return;
-        }
-
-        // The expect header is unconditionally enabled
-        if ($expect === true) {
-            $request->setHeader('Expect', '100-Continue');
-            return;
-        }
-
-        // By default, send the expect header when the payload is > 1mb
-        if ($expect === null) {
-            $expect = 1048576;
-        }
-
-        // Always add if the body cannot be rewound, the size cannot be
-        // determined, or the size is greater than the cutoff threshold
-        $size = $body->getSize();
-        if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
-            $request->setHeader('Expect', '100-Continue');
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
deleted file mode 100644
index ff99226..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-namespace GuzzleHttp\Subscriber;
-
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Exception\BadResponseException;
-use GuzzleHttp\Exception\CouldNotRewindStreamException;
-use GuzzleHttp\Exception\TooManyRedirectsException;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Url;
-
-/**
- * Subscriber used to implement HTTP redirects.
- *
- * **Request options**
- *
- * - redirect: Associative array containing the 'max', 'strict', and 'referer'
- *   keys.
- *
- *   - max: Maximum number of redirects allowed per-request
- *   - strict: You can use strict redirects by setting this value to ``true``.
- *     Strict redirects adhere to strict RFC compliant redirection (e.g.,
- *     redirect POST with POST) vs doing what most clients do (e.g., redirect
- *     POST request with a GET request).
- *   - referer: Set to true to automatically add the "Referer" header when a
- *     redirect request is sent.
- *   - protocols: Array of allowed protocols. Defaults to 'http' and 'https'.
- *     When a redirect attempts to utilize a protocol that is not white listed,
- *     an exception is thrown.
- */
-class Redirect implements SubscriberInterface
-{
-    public function getEvents()
-    {
-        return ['complete' => ['onComplete', RequestEvents::REDIRECT_RESPONSE]];
-    }
-
-    /**
-     * Rewind the entity body of the request if needed
-     *
-     * @param RequestInterface $redirectRequest
-     * @throws CouldNotRewindStreamException
-     */
-    public static function rewindEntityBody(RequestInterface $redirectRequest)
-    {
-        // Rewind the entity body of the request if needed
-        if ($body = $redirectRequest->getBody()) {
-            // Only rewind the body if some of it has been read already, and
-            // throw an exception if the rewind fails
-            if ($body->tell() && !$body->seek(0)) {
-                throw new CouldNotRewindStreamException(
-                    'Unable to rewind the non-seekable request body after redirecting',
-                    $redirectRequest
-                );
-            }
-        }
-    }
-
-    /**
-     * Called when a request receives a redirect response
-     *
-     * @param CompleteEvent $event Event emitted
-     * @throws TooManyRedirectsException
-     */
-    public function onComplete(CompleteEvent $event)
-    {
-        $response = $event->getResponse();
-
-        if (substr($response->getStatusCode(), 0, 1) != '3'
-            || !$response->hasHeader('Location')
-        ) {
-            return;
-        }
-
-        $request = $event->getRequest();
-        $config = $request->getConfig();
-
-        // Increment the redirect and initialize the redirect state.
-        if ($redirectCount = $config['redirect_count']) {
-            $config['redirect_count'] = ++$redirectCount;
-        } else {
-            $config['redirect_scheme'] = $request->getScheme();
-            $config['redirect_count'] = $redirectCount = 1;
-        }
-
-        $max = $config->getPath('redirect/max') ?: 5;
-
-        if ($redirectCount > $max) {
-            throw new TooManyRedirectsException(
-                "Will not follow more than {$redirectCount} redirects",
-                $request
-            );
-        }
-
-        $this->modifyRedirectRequest($request, $response);
-        $event->retry();
-    }
-
-    private function modifyRedirectRequest(
-        RequestInterface $request,
-        ResponseInterface $response
-    ) {
-        $config = $request->getConfig();
-        $protocols = $config->getPath('redirect/protocols') ?: ['http', 'https'];
-
-        // Use a GET request if this is an entity enclosing request and we are
-        // not forcing RFC compliance, but rather emulating what all browsers
-        // would do.
-        $statusCode = $response->getStatusCode();
-        if ($statusCode == 303 ||
-            ($statusCode <= 302 && $request->getBody() && !$config->getPath('redirect/strict'))
-        ) {
-            $request->setMethod('GET');
-            $request->setBody(null);
-        }
-
-        $previousUrl = $request->getUrl();
-        $this->setRedirectUrl($request, $response, $protocols);
-        $this->rewindEntityBody($request);
-
-        // Add the Referer header if it is told to do so and only
-        // add the header if we are not redirecting from https to http.
-        if ($config->getPath('redirect/referer')
-            && ($request->getScheme() == 'https' || $request->getScheme() == $config['redirect_scheme'])
-        ) {
-            $url = Url::fromString($previousUrl);
-            $url->setUsername(null);
-            $url->setPassword(null);
-            $request->setHeader('Referer', (string) $url);
-        } else {
-            $request->removeHeader('Referer');
-        }
-    }
-
-    /**
-     * Set the appropriate URL on the request based on the location header
-     *
-     * @param RequestInterface  $request
-     * @param ResponseInterface $response
-     * @param array             $protocols
-     */
-    private function setRedirectUrl(
-        RequestInterface $request,
-        ResponseInterface $response,
-        array $protocols
-    ) {
-        $location = $response->getHeader('Location');
-        $location = Url::fromString($location);
-
-        // Combine location with the original URL if it is not absolute.
-        if (!$location->isAbsolute()) {
-            $originalUrl = Url::fromString($request->getUrl());
-            // Remove query string parameters and just take what is present on
-            // the redirect Location header
-            $originalUrl->getQuery()->clear();
-            $location = $originalUrl->combine($location);
-        }
-
-        // Ensure that the redirect URL is allowed based on the protocols.
-        if (!in_array($location->getScheme(), $protocols)) {
-            throw new BadResponseException(
-                sprintf(
-                    'Redirect URL, %s, does not use one of the allowed redirect protocols: %s',
-                    $location,
-                    implode(', ', $protocols)
-                ),
-                $request,
-                $response
-            );
-        }
-
-        $request->setUrl($location);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php b/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
deleted file mode 100644
index d57c022..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * An object that can be represented as an array
- */
-interface ToArrayInterface
-{
-    /**
-     * Get the array representation of an object
-     *
-     * @return array
-     */
-    public function toArray();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Transaction.php b/core/vendor/guzzlehttp/guzzle/src/Transaction.php
deleted file mode 100644
index 30a3f94..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Transaction.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Represents the relationship between a client, request, and response.
- *
- * You can access the request, response, and client using their corresponding
- * public properties.
- */
-class Transaction
-{
-    /**
-     * HTTP client used to transfer the request.
-     *
-     * @var ClientInterface
-     */
-    public $client;
-
-    /**
-     * The request that is being sent.
-     *
-     * @var RequestInterface
-     */
-    public $request;
-
-    /**
-     * The response associated with the transaction. A response will not be
-     * present when a networking error occurs or an error occurs before sending
-     * the request.
-     *
-     * @var ResponseInterface|null
-     */
-    public $response;
-
-    /**
-     * Exception associated with the transaction. If this exception is present
-     * when processing synchronous or future commands, then it is thrown. When
-     * intercepting a failed transaction, you MUST set this value to null in
-     * order to prevent the exception from being thrown.
-     *
-     * @var \Exception
-     */
-    public $exception;
-
-    /**
-     * Associative array of handler specific transfer statistics and custom
-     * key value pair information. When providing similar information, handlers
-     * should follow the same key value pair naming conventions as PHP's
-     * curl_getinfo() (http://php.net/manual/en/function.curl-getinfo.php).
-     *
-     * @var array
-     */
-    public $transferInfo = [];
-
-    /**
-     * The number of transaction retries.
-     *
-     * @var int
-     */
-    public $retries = 0;
-
-    /**
-     * The transaction's current state.
-     *
-     * @var string
-     */
-    public $state;
-
-    /**
-     * Whether or not this is a future transaction. This value should not be
-     * changed after the future is constructed.
-     *
-     * @var bool
-     */
-    public $future;
-
-    /**
-     * The number of state transitions that this transaction has been through.
-     *
-     * @var int
-     * @internal This is for internal use only. If you modify this, then you
-     *           are asking for trouble.
-     */
-    public $_transitionCount = 0;
-
-    /**
-     * @param ClientInterface  $client  Client that is used to send the requests
-     * @param RequestInterface $request Request to send
-     * @param bool             $future  Whether or not this is a future request.
-     */
-    public function __construct(
-        ClientInterface $client,
-        RequestInterface $request,
-        $future = false
-    ) {
-        $this->client = $client;
-        $this->request = $request;
-        $this->_future = $future;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Url.php b/core/vendor/guzzlehttp/guzzle/src/Url.php
deleted file mode 100644
index a81bad2..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Url.php
+++ /dev/null
@@ -1,595 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Ring\Core;
-
-/**
- * Parses and generates URLs based on URL parts
- */
-class Url
-{
-    private $scheme;
-    private $host;
-    private $port;
-    private $username;
-    private $password;
-    private $path = '';
-    private $fragment;
-    private static $defaultPorts = ['http' => 80, 'https' => 443, 'ftp' => 21];
-    private static $pathPattern = '/[^a-zA-Z0-9\-\._~!\$&\'\(\)\*\+,;=%:@\/]+|%(?![A-Fa-f0-9]{2})/';
-    private static $queryPattern = '/[^a-zA-Z0-9\-\._~!\$\'\(\)\*\+,;%:@\/\?=&]+|%(?![A-Fa-f0-9]{2})/';
-    /** @var Query|string Query part of the URL */
-    private $query;
-
-    /**
-     * Factory method to create a new URL from a URL string
-     *
-     * @param string $url Full URL used to create a Url object
-     *
-     * @return Url
-     * @throws \InvalidArgumentException
-     */
-    public static function fromString($url)
-    {
-        static $defaults = ['scheme' => null, 'host' => null,
-            'path' => null, 'port' => null, 'query' => null,
-            'user' => null, 'pass' => null, 'fragment' => null];
-
-        if (false === ($parts = parse_url($url))) {
-            throw new \InvalidArgumentException('Unable to parse malformed '
-                . 'url: ' . $url);
-        }
-
-        $parts += $defaults;
-
-        // Convert the query string into a Query object
-        if ($parts['query'] || 0 !== strlen($parts['query'])) {
-            $parts['query'] = Query::fromString($parts['query']);
-        }
-
-        return new static($parts['scheme'], $parts['host'], $parts['user'],
-            $parts['pass'], $parts['port'], $parts['path'], $parts['query'],
-            $parts['fragment']);
-    }
-
-    /**
-     * Build a URL from parse_url parts. The generated URL will be a relative
-     * URL if a scheme or host are not provided.
-     *
-     * @param array $parts Array of parse_url parts
-     *
-     * @return string
-     */
-    public static function buildUrl(array $parts)
-    {
-        $url = $scheme = '';
-
-        if (!empty($parts['scheme'])) {
-            $scheme = $parts['scheme'];
-            $url .= $scheme . ':';
-        }
-
-        if (!empty($parts['host'])) {
-            $url .= '//';
-            if (isset($parts['user'])) {
-                $url .= $parts['user'];
-                if (isset($parts['pass'])) {
-                    $url .= ':' . $parts['pass'];
-                }
-                $url .=  '@';
-            }
-
-            $url .= $parts['host'];
-
-            // Only include the port if it is not the default port of the scheme
-            if (isset($parts['port']) &&
-                (!isset(self::$defaultPorts[$scheme]) ||
-                 $parts['port'] != self::$defaultPorts[$scheme])
-            ) {
-                $url .= ':' . $parts['port'];
-            }
-        }
-
-        // Add the path component if present
-        if (isset($parts['path']) && strlen($parts['path'])) {
-            // Always ensure that the path begins with '/' if set and something
-            // is before the path
-            if (!empty($parts['host']) && $parts['path'][0] != '/') {
-                $url .= '/';
-            }
-            $url .= $parts['path'];
-        }
-
-        // Add the query string if present
-        if (isset($parts['query'])) {
-            $queryStr = (string) $parts['query'];
-            if ($queryStr || $queryStr === '0') {
-                $url .= '?' . $queryStr;
-            }
-        }
-
-        // Ensure that # is only added to the url if fragment contains anything.
-        if (isset($parts['fragment'])) {
-            $url .= '#' . $parts['fragment'];
-        }
-
-        return $url;
-    }
-
-    /**
-     * Create a new URL from URL parts
-     *
-     * @param string             $scheme   Scheme of the URL
-     * @param string             $host     Host of the URL
-     * @param string             $username Username of the URL
-     * @param string             $password Password of the URL
-     * @param int                $port     Port of the URL
-     * @param string             $path     Path of the URL
-     * @param Query|array|string $query    Query string of the URL
-     * @param string             $fragment Fragment of the URL
-     */
-    public function __construct(
-        $scheme,
-        $host,
-        $username = null,
-        $password = null,
-        $port = null,
-        $path = null,
-        $query = null,
-        $fragment = null
-    ) {
-        $this->scheme = $scheme;
-        $this->host = $host;
-        $this->port = $port;
-        $this->username = $username;
-        $this->password = $password;
-        $this->fragment = $fragment;
-
-        if ($query) {
-            $this->setQuery($query);
-        }
-
-        $this->setPath($path);
-    }
-
-    /**
-     * Clone the URL
-     */
-    public function __clone()
-    {
-        if ($this->query instanceof Query) {
-            $this->query = clone $this->query;
-        }
-    }
-
-    /**
-     * Returns the URL as a URL string
-     *
-     * @return string
-     */
-    public function __toString()
-    {
-        return static::buildUrl($this->getParts());
-    }
-
-    /**
-     * Get the parts of the URL as an array
-     *
-     * @return array
-     */
-    public function getParts()
-    {
-        return array(
-            'scheme'   => $this->scheme,
-            'user'     => $this->username,
-            'pass'     => $this->password,
-            'host'     => $this->host,
-            'port'     => $this->port,
-            'path'     => $this->path,
-            'query'    => $this->query,
-            'fragment' => $this->fragment,
-        );
-    }
-
-    /**
-     * Set the host of the request.
-     *
-     * @param string $host Host to set (e.g. www.yahoo.com, yahoo.com)
-     *
-     * @return Url
-     */
-    public function setHost($host)
-    {
-        if (strpos($host, ':') === false) {
-            $this->host = $host;
-        } else {
-            list($host, $port) = explode(':', $host);
-            $this->host = $host;
-            $this->setPort($port);
-        }
-    }
-
-    /**
-     * Get the host part of the URL
-     *
-     * @return string
-     */
-    public function getHost()
-    {
-        return $this->host;
-    }
-
-    /**
-     * Set the scheme part of the URL (http, https, ftp, etc.)
-     *
-     * @param string $scheme Scheme to set
-     */
-    public function setScheme($scheme)
-    {
-        // Remove the default port if one is specified
-        if ($this->port
-            && isset(self::$defaultPorts[$this->scheme])
-            && self::$defaultPorts[$this->scheme] == $this->port
-        ) {
-            $this->port = null;
-        }
-
-        $this->scheme = $scheme;
-    }
-
-    /**
-     * Get the scheme part of the URL
-     *
-     * @return string
-     */
-    public function getScheme()
-    {
-        return $this->scheme;
-    }
-
-    /**
-     * Set the port part of the URL
-     *
-     * @param int $port Port to set
-     */
-    public function setPort($port)
-    {
-        $this->port = $port;
-    }
-
-    /**
-     * Get the port part of the URl.
-     *
-     * If no port was set, this method will return the default port for the
-     * scheme of the URI.
-     *
-     * @return int|null
-     */
-    public function getPort()
-    {
-        if ($this->port) {
-            return $this->port;
-        } elseif (isset(self::$defaultPorts[$this->scheme])) {
-            return self::$defaultPorts[$this->scheme];
-        }
-
-        return null;
-    }
-
-    /**
-     * Set the path part of the URL.
-     *
-     * The provided URL is URL encoded as necessary.
-     *
-     * @param string $path Path string to set
-     */
-    public function setPath($path)
-    {
-        $this->path = self::encodePath($path);
-    }
-
-    /**
-     * Removes dot segments from a URL
-     * @link http://tools.ietf.org/html/rfc3986#section-5.2.4
-     */
-    public function removeDotSegments()
-    {
-        static $noopPaths = ['' => true, '/' => true, '*' => true];
-        static $ignoreSegments = ['.' => true, '..' => true];
-
-        if (isset($noopPaths[$this->path])) {
-            return;
-        }
-
-        $results = [];
-        $segments = $this->getPathSegments();
-        foreach ($segments as $segment) {
-            if ($segment == '..') {
-                array_pop($results);
-            } elseif (!isset($ignoreSegments[$segment])) {
-                $results[] = $segment;
-            }
-        }
-
-        $newPath = implode('/', $results);
-
-        // Add the leading slash if necessary
-        if (substr($this->path, 0, 1) === '/' &&
-            substr($newPath, 0, 1) !== '/'
-        ) {
-            $newPath = '/' . $newPath;
-        }
-
-        // Add the trailing slash if necessary
-        if ($newPath != '/' && isset($ignoreSegments[end($segments)])) {
-            $newPath .= '/';
-        }
-
-        $this->path = $newPath;
-    }
-
-    /**
-     * Add a relative path to the currently set path.
-     *
-     * @param string $relativePath Relative path to add
-     */
-    public function addPath($relativePath)
-    {
-        if ($relativePath != '/' &&
-            is_string($relativePath) &&
-            strlen($relativePath) > 0
-        ) {
-            // Add a leading slash if needed
-            if ($relativePath[0] !== '/' &&
-                substr($this->path, -1, 1) !== '/'
-            ) {
-                $relativePath = '/' . $relativePath;
-            }
-
-            $this->setPath($this->path . $relativePath);
-        }
-    }
-
-    /**
-     * Get the path part of the URL
-     *
-     * @return string
-     */
-    public function getPath()
-    {
-        return $this->path;
-    }
-
-    /**
-     * Get the path segments of the URL as an array
-     *
-     * @return array
-     */
-    public function getPathSegments()
-    {
-        return explode('/', $this->path);
-    }
-
-    /**
-     * Set the password part of the URL
-     *
-     * @param string $password Password to set
-     */
-    public function setPassword($password)
-    {
-        $this->password = $password;
-    }
-
-    /**
-     * Get the password part of the URL
-     *
-     * @return null|string
-     */
-    public function getPassword()
-    {
-        return $this->password;
-    }
-
-    /**
-     * Set the username part of the URL
-     *
-     * @param string $username Username to set
-     */
-    public function setUsername($username)
-    {
-        $this->username = $username;
-    }
-
-    /**
-     * Get the username part of the URl
-     *
-     * @return null|string
-     */
-    public function getUsername()
-    {
-        return $this->username;
-    }
-
-    /**
-     * Get the query part of the URL as a Query object
-     *
-     * @return Query
-     */
-    public function getQuery()
-    {
-        // Convert the query string to a query object if not already done.
-        if (!$this->query instanceof Query) {
-            $this->query = $this->query === null
-                ? new Query()
-                : Query::fromString($this->query);
-        }
-
-        return $this->query;
-    }
-
-    /**
-     * Set the query part of the URL.
-     *
-     * You may provide a query string as a string and pass $rawString as true
-     * to provide a query string that is not parsed until a call to getQuery()
-     * is made. Setting a raw query string will still encode invalid characters
-     * in a query string.
-     *
-     * @param Query|string|array $query Query string value to set. Can
-     *     be a string that will be parsed into a Query object, an array
-     *     of key value pairs, or a Query object.
-     * @param bool $rawString Set to true when providing a raw query string.
-     *
-     * @throws \InvalidArgumentException
-     */
-    public function setQuery($query, $rawString = false)
-    {
-        if ($query instanceof Query) {
-            $this->query = $query;
-        } elseif (is_string($query)) {
-            if (!$rawString) {
-                $this->query = Query::fromString($query);
-            } else {
-                // Ensure the query does not have illegal characters.
-                $this->query = preg_replace_callback(
-                    self::$queryPattern,
-                    [__CLASS__, 'encodeMatch'],
-                    $query
-                );
-            }
-
-        } elseif (is_array($query)) {
-            $this->query = new Query($query);
-        } else {
-            throw new \InvalidArgumentException('Query must be a Query, '
-                . 'array, or string. Got ' . Core::describeType($query));
-        }
-    }
-
-    /**
-     * Get the fragment part of the URL
-     *
-     * @return null|string
-     */
-    public function getFragment()
-    {
-        return $this->fragment;
-    }
-
-    /**
-     * Set the fragment part of the URL
-     *
-     * @param string $fragment Fragment to set
-     */
-    public function setFragment($fragment)
-    {
-        $this->fragment = $fragment;
-    }
-
-    /**
-     * Check if this is an absolute URL
-     *
-     * @return bool
-     */
-    public function isAbsolute()
-    {
-        return $this->scheme && $this->host;
-    }
-
-    /**
-     * Combine the URL with another URL and return a new URL instance.
-     *
-     * Follows the rules specific in RFC 3986 section 5.4.
-     *
-     * @param string $url Relative URL to combine with
-     *
-     * @return Url
-     * @throws \InvalidArgumentException
-     * @link http://tools.ietf.org/html/rfc3986#section-5.4
-     */
-    public function combine($url)
-    {
-        $url = static::fromString($url);
-
-        // Use the more absolute URL as the base URL
-        if (!$this->isAbsolute() && $url->isAbsolute()) {
-            $url = $url->combine($this);
-        }
-
-        $parts = $url->getParts();
-
-        // Passing a URL with a scheme overrides everything
-        if ($parts['scheme']) {
-            return clone $url;
-        }
-
-        // Setting a host overrides the entire rest of the URL
-        if ($parts['host']) {
-            return new static(
-                $this->scheme,
-                $parts['host'],
-                $parts['user'],
-                $parts['pass'],
-                $parts['port'],
-                $parts['path'],
-                $parts['query'] instanceof Query
-                    ? clone $parts['query']
-                    : $parts['query'],
-                $parts['fragment']
-            );
-        }
-
-        if (!$parts['path'] && $parts['path'] !== '0') {
-            // The relative URL has no path, so check if it is just a query
-            $path = $this->path ?: '';
-            $query = $parts['query'] ?: $this->query;
-        } else {
-            $query = $parts['query'];
-            if ($parts['path'][0] == '/' || !$this->path) {
-                // Overwrite the existing path if the rel path starts with "/"
-                $path = $parts['path'];
-            } else {
-                // If the relative URL does not have a path or the base URL
-                // path does not end in a "/" then overwrite the existing path
-                // up to the last "/"
-                $path = substr($this->path, 0, strrpos($this->path, '/') + 1) . $parts['path'];
-            }
-        }
-
-        $result = new self(
-            $this->scheme,
-            $this->host,
-            $this->username,
-            $this->password,
-            $this->port,
-            $path,
-            $query instanceof Query ? clone $query : $query,
-            $parts['fragment']
-        );
-
-        if ($path) {
-            $result->removeDotSegments();
-        }
-
-        return $result;
-    }
-
-    /**
-     * Encodes the path part of a URL without double-encoding percent-encoded
-     * key value pairs.
-     *
-     * @param string $path Path to encode
-     *
-     * @return string
-     */
-    public static function encodePath($path)
-    {
-        static $cb = [__CLASS__, 'encodeMatch'];
-        return preg_replace_callback(self::$pathPattern, $cb, $path);
-    }
-
-    private static function encodeMatch(array $match)
-    {
-        return rawurlencode($match[0]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Utils.php b/core/vendor/guzzlehttp/guzzle/src/Utils.php
deleted file mode 100644
index 285fe30..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Utils.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Utility methods used throughout Guzzle.
- */
-final class Utils
-{
-    /**
-     * Gets a value from an array using a path syntax to retrieve nested data.
-     *
-     * This method does not allow for keys that contain "/". You must traverse
-     * the array manually or using something more advanced like JMESPath to
-     * work with keys that contain "/".
-     *
-     *     // Get the bar key of a set of nested arrays.
-     *     // This is equivalent to $collection['foo']['baz']['bar'] but won't
-     *     // throw warnings for missing keys.
-     *     GuzzleHttp\get_path($data, 'foo/baz/bar');
-     *
-     * @param array  $data Data to retrieve values from
-     * @param string $path Path to traverse and retrieve a value from
-     *
-     * @return mixed|null
-     */
-    public static function getPath($data, $path)
-    {
-        $path = explode('/', $path);
-
-        while (null !== ($part = array_shift($path))) {
-            if (!is_array($data) || !isset($data[$part])) {
-                return null;
-            }
-            $data = $data[$part];
-        }
-
-        return $data;
-    }
-
-    /**
-     * Set a value in a nested array key. Keys will be created as needed to set
-     * the value.
-     *
-     * This function does not support keys that contain "/" or "[]" characters
-     * because these are special tokens used when traversing the data structure.
-     * A value may be prepended to an existing array by using "[]" as the final
-     * key of a path.
-     *
-     *     GuzzleHttp\get_path($data, 'foo/baz'); // null
-     *     GuzzleHttp\set_path($data, 'foo/baz/[]', 'a');
-     *     GuzzleHttp\set_path($data, 'foo/baz/[]', 'b');
-     *     GuzzleHttp\get_path($data, 'foo/baz');
-     *     // Returns ['a', 'b']
-     *
-     * @param array  $data  Data to modify by reference
-     * @param string $path  Path to set
-     * @param mixed  $value Value to set at the key
-     *
-     * @throws \RuntimeException when trying to setPath using a nested path
-     *     that travels through a scalar value.
-     */
-    public static function setPath(&$data, $path, $value)
-    {
-        $current =& $data;
-        $queue = explode('/', $path);
-        while (null !== ($key = array_shift($queue))) {
-            if (!is_array($current)) {
-                throw new \RuntimeException("Trying to setPath {$path}, but "
-                    . "{$key} is set and is not an array");
-            } elseif (!$queue) {
-                if ($key == '[]') {
-                    $current[] = $value;
-                } else {
-                    $current[$key] = $value;
-                }
-            } elseif (isset($current[$key])) {
-                $current =& $current[$key];
-            } else {
-                $current[$key] = [];
-                $current =& $current[$key];
-            }
-        }
-    }
-
-    /**
-     * Expands a URI template
-     *
-     * @param string $template  URI template
-     * @param array  $variables Template variables
-     *
-     * @return string
-     */
-    public static function uriTemplate($template, array $variables)
-    {
-        if (function_exists('\\uri_template')) {
-            return \uri_template($template, $variables);
-        }
-
-        static $uriTemplate;
-        if (!$uriTemplate) {
-            $uriTemplate = new UriTemplate();
-        }
-
-        return $uriTemplate->expand($template, $variables);
-    }
-
-    /**
-     * Wrapper for JSON decode that implements error detection with helpful
-     * error messages.
-     *
-     * @param string $json    JSON data to parse
-     * @param bool $assoc     When true, returned objects will be converted
-     *                        into associative arrays.
-     * @param int    $depth   User specified recursion depth.
-     * @param int    $options Bitmask of JSON decode options.
-     *
-     * @return mixed
-     * @throws \InvalidArgumentException if the JSON cannot be parsed.
-     * @link http://www.php.net/manual/en/function.json-decode.php
-     */
-    public static function jsonDecode($json, $assoc = false, $depth = 512, $options = 0)
-    {
-        static $jsonErrors = [
-            JSON_ERROR_DEPTH => 'JSON_ERROR_DEPTH - Maximum stack depth exceeded',
-            JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH - Underflow or the modes mismatch',
-            JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR - Unexpected control character found',
-            JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX - Syntax error, malformed JSON',
-            JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8 - Malformed UTF-8 characters, possibly incorrectly encoded'
-        ];
-
-        $data = \json_decode($json, $assoc, $depth, $options);
-
-        if (JSON_ERROR_NONE !== json_last_error()) {
-            $last = json_last_error();
-            throw new \InvalidArgumentException(
-                'Unable to parse JSON data: '
-                . (isset($jsonErrors[$last])
-                    ? $jsonErrors[$last]
-                    : 'Unknown error')
-            );
-        }
-
-        return $data;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/functions.php b/core/vendor/guzzlehttp/guzzle/src/functions.php
new file mode 100644
index 0000000..70f4881
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/functions.php
@@ -0,0 +1,206 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Handler\CurlHandler;
+use GuzzleHttp\Handler\CurlMultiHandler;
+use GuzzleHttp\Handler\Proxy;
+use GuzzleHttp\Handler\StreamHandler;
+
+/**
+ * Expands a URI template
+ *
+ * @param string $template  URI template
+ * @param array  $variables Template variables
+ *
+ * @return string
+ */
+function uri_template($template, array $variables)
+{
+    if (extension_loaded('uri_template')) {
+        // @codeCoverageIgnoreStart
+        return \uri_template($template, $variables);
+        // @codeCoverageIgnoreEnd
+    }
+
+    static $uriTemplate;
+    if (!$uriTemplate) {
+        $uriTemplate = new UriTemplate();
+    }
+
+    return $uriTemplate->expand($template, $variables);
+}
+
+/**
+ * Debug function used to describe the provided value type and class.
+ *
+ * @param mixed $input
+ *
+ * @return string Returns a string containing the type of the variable and
+ *                if a class is provided, the class name.
+ */
+function describe_type($input)
+{
+    switch (gettype($input)) {
+        case 'object':
+            return 'object(' . get_class($input) . ')';
+        case 'array':
+            return 'array(' . count($input) . ')';
+        default:
+            ob_start();
+            var_dump($input);
+            // normalize float vs double
+            return str_replace('double(', 'float(', rtrim(ob_get_clean()));
+    }
+}
+
+/**
+ * Parses an array of header lines into an associative array of headers.
+ *
+ * @param array $lines Header lines array of strings in the following
+ *                     format: "Name: Value"
+ * @return array
+ */
+function headers_from_lines($lines)
+{
+    $headers = [];
+
+    foreach ($lines as $line) {
+        $parts = explode(':', $line, 2);
+        $headers[trim($parts[0])][] = isset($parts[1])
+            ? trim($parts[1])
+            : null;
+    }
+
+    return $headers;
+}
+
+/**
+ * Returns a debug stream based on the provided variable.
+ *
+ * @param mixed $value Optional value
+ *
+ * @return resource
+ */
+function debug_resource($value = null)
+{
+    if (is_resource($value)) {
+        return $value;
+    } elseif (defined('STDOUT')) {
+        return STDOUT;
+    }
+
+    return fopen('php://output', 'w');
+}
+
+/**
+ * Chooses and creates a default handler to use based on the environment.
+ *
+ * The returned handler is not wrapped by any default middlewares.
+ *
+ * @throws \RuntimeException if no viable Handler is available.
+ * @return callable Returns the best handler for the given system.
+ */
+function choose_handler()
+{
+    $handler = null;
+    if (extension_loaded('curl')) {
+        $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());
+    }
+
+    if (ini_get('allow_url_fopen')) {
+        $handler = $handler
+            ? Proxy::wrapStreaming($handler, new StreamHandler())
+            : new StreamHandler();
+    } elseif (!$handler) {
+        throw new \RuntimeException('GuzzleHttp requires cURL, the '
+            . 'allow_url_fopen ini setting, or a custom HTTP handler.');
+    }
+
+    return $handler;
+}
+
+/**
+ * Get the default User-Agent string to use with Guzzle
+ *
+ * @return string
+ */
+function default_user_agent()
+{
+    static $defaultAgent = '';
+
+    if (!$defaultAgent) {
+        $defaultAgent = 'GuzzleHttp/' . Client::VERSION;
+        if (extension_loaded('curl')) {
+            $defaultAgent .= ' curl/' . \curl_version()['version'];
+        }
+        $defaultAgent .= ' PHP/' . PHP_VERSION;
+    }
+
+    return $defaultAgent;
+}
+
+/**
+ * Returns the default cacert bundle for the current system.
+ *
+ * First, the openssl.cafile and curl.cainfo php.ini settings are checked.
+ * If those settings are not configured, then the common locations for
+ * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X
+ * and Windows are checked. If any of these file locations are found on
+ * disk, they will be utilized.
+ *
+ * Note: the result of this function is cached for subsequent calls.
+ *
+ * @return string
+ * @throws \RuntimeException if no bundle can be found.
+ */
+function default_ca_bundle()
+{
+    static $cached = null;
+    static $cafiles = [
+        // Red Hat, CentOS, Fedora (provided by the ca-certificates package)
+        '/etc/pki/tls/certs/ca-bundle.crt',
+        // Ubuntu, Debian (provided by the ca-certificates package)
+        '/etc/ssl/certs/ca-certificates.crt',
+        // FreeBSD (provided by the ca_root_nss package)
+        '/usr/local/share/certs/ca-root-nss.crt',
+        // OS X provided by homebrew (using the default path)
+        '/usr/local/etc/openssl/cert.pem',
+        // Windows?
+        'C:\\windows\\system32\\curl-ca-bundle.crt',
+        'C:\\windows\\curl-ca-bundle.crt',
+    ];
+
+    if ($cached) {
+        return $cached;
+    }
+
+    if ($ca = ini_get('openssl.cafile')) {
+        return $cached = $ca;
+    }
+
+    if ($ca = ini_get('curl.cainfo')) {
+        return $cached = $ca;
+    }
+
+    foreach ($cafiles as $filename) {
+        if (file_exists($filename)) {
+            return $cached = $filename;
+        }
+    }
+
+    throw new \RuntimeException(<<< EOT
+No system CA bundle could be found in any of the the common system locations.
+PHP versions earlier than 5.6 are not properly configured to use the system's
+CA bundle by default. In order to verify peer certificates, you will need to
+supply the path on disk to a certificate bundle to the 'verify' request
+option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not
+need a specific certificate bundle, then Mozilla provides a commonly used CA
+bundle which can be downloaded here (provided by the maintainer of cURL):
+https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once
+you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP
+ini setting to point to the path to the file, allowing you to omit the 'verify'
+request option. See http://curl.haxx.se/docs/sslcerts.html for more
+information.
+EOT
+    );
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php b/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php
deleted file mode 100644
index 080d44c..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\BatchResults;
-
-/**
- * @covers \GuzzleHttp\BatchResults
- */
-class BatchResultsTest extends \PHPUnit_Framework_TestCase
-{
-    public function testExposesResults()
-    {
-        $a = new \stdClass();
-        $b = new \stdClass();
-        $c = new \stdClass();
-        $hash = new \SplObjectStorage();
-        $hash[$a] = '1';
-        $hash[$b] = '2';
-        $hash[$c] = new \Exception('foo');
-
-        $batch = new BatchResults($hash);
-        $this->assertCount(3, $batch);
-        $this->assertEquals([$a, $b, $c], $batch->getKeys());
-        $this->assertEquals([$hash[$c]], $batch->getFailures());
-        $this->assertEquals(['1', '2'], $batch->getSuccessful());
-        $this->assertEquals('1', $batch->getResult($a));
-        $this->assertNull($batch->getResult(new \stdClass()));
-        $this->assertTrue(isset($batch[0]));
-        $this->assertFalse(isset($batch[10]));
-        $this->assertEquals('1', $batch[0]);
-        $this->assertEquals('2', $batch[1]);
-        $this->assertNull($batch[100]);
-        $this->assertInstanceOf('Exception', $batch[2]);
-
-        $results = iterator_to_array($batch);
-        $this->assertEquals(['1', '2', $hash[$c]], $results);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testCannotSetByIndex()
-    {
-        $hash = new \SplObjectStorage();
-        $batch = new BatchResults($hash);
-        $batch[10] = 'foo';
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testCannotUnsetByIndex()
-    {
-        $hash = new \SplObjectStorage();
-        $batch = new BatchResults($hash);
-        unset($batch[10]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php b/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php
deleted file mode 100644
index 913e535..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php
+++ /dev/null
@@ -1,624 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Query;
-use GuzzleHttp\Ring\Client\MockHandler;
-use GuzzleHttp\Ring\Future\FutureArray;
-use GuzzleHttp\Subscriber\History;
-use GuzzleHttp\Subscriber\Mock;
-use GuzzleHttp\Url;
-use React\Promise\Deferred;
-
-/**
- * @covers GuzzleHttp\Client
- */
-class ClientTest extends \PHPUnit_Framework_TestCase
-{
-    /** @callable */
-    private $ma;
-
-    public function setup()
-    {
-        $this->ma = function () {
-            throw new \RuntimeException('Should not have been called.');
-        };
-    }
-
-    public function testProvidesDefaultUserAgent()
-    {
-        $ua = Client::getDefaultUserAgent();
-        $this->assertEquals(1, preg_match('#^Guzzle/.+ curl/.+ PHP/.+$#', $ua));
-    }
-
-    public function testUsesDefaultDefaultOptions()
-    {
-        $client = new Client();
-        $this->assertTrue($client->getDefaultOption('allow_redirects'));
-        $this->assertTrue($client->getDefaultOption('exceptions'));
-        $this->assertTrue($client->getDefaultOption('verify'));
-    }
-
-    public function testUsesProvidedDefaultOptions()
-    {
-        $client = new Client([
-            'defaults' => [
-                'allow_redirects' => false,
-                'query' => ['foo' => 'bar']
-            ]
-        ]);
-        $this->assertFalse($client->getDefaultOption('allow_redirects'));
-        $this->assertTrue($client->getDefaultOption('exceptions'));
-        $this->assertTrue($client->getDefaultOption('verify'));
-        $this->assertEquals(['foo' => 'bar'], $client->getDefaultOption('query'));
-    }
-
-    public function testCanSpecifyBaseUrl()
-    {
-        $this->assertSame('', (new Client())->getBaseUrl());
-        $this->assertEquals('http://foo', (new Client([
-            'base_url' => 'http://foo'
-        ]))->getBaseUrl());
-    }
-
-    public function testCanSpecifyBaseUrlUriTemplate()
-    {
-        $client = new Client(['base_url' => ['http://foo.com/{var}/', ['var' => 'baz']]]);
-        $this->assertEquals('http://foo.com/baz/', $client->getBaseUrl());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesUriTemplateValue()
-    {
-        new Client(['base_url' => ['http://foo.com/']]);
-    }
-
-    /**
-     * @expectedException \Exception
-     * @expectedExceptionMessage Foo
-     */
-    public function testCanSpecifyHandler()
-    {
-        $client = new Client(['handler' => function () {
-                throw new \Exception('Foo');
-            }]);
-        $client->get('http://httpbin.org');
-    }
-
-    /**
-     * @expectedException \Exception
-     * @expectedExceptionMessage Foo
-     */
-    public function testCanSpecifyHandlerAsAdapter()
-    {
-        $client = new Client(['adapter' => function () {
-            throw new \Exception('Foo');
-        }]);
-        $client->get('http://httpbin.org');
-    }
-
-    /**
-     * @expectedException \Exception
-     * @expectedExceptionMessage Foo
-     */
-    public function testCanSpecifyMessageFactory()
-    {
-        $factory = $this->getMockBuilder('GuzzleHttp\Message\MessageFactoryInterface')
-            ->setMethods(['createRequest'])
-            ->getMockForAbstractClass();
-        $factory->expects($this->once())
-            ->method('createRequest')
-            ->will($this->throwException(new \Exception('Foo')));
-        $client = new Client(['message_factory' => $factory]);
-        $client->get();
-    }
-
-    public function testCanSpecifyEmitter()
-    {
-        $emitter = $this->getMockBuilder('GuzzleHttp\Event\EmitterInterface')
-            ->setMethods(['listeners'])
-            ->getMockForAbstractClass();
-        $emitter->expects($this->once())
-            ->method('listeners')
-            ->will($this->returnValue('foo'));
-
-        $client = new Client(['emitter' => $emitter]);
-        $this->assertEquals('foo', $client->getEmitter()->listeners());
-    }
-
-    public function testAddsDefaultUserAgentHeaderWithDefaultOptions()
-    {
-        $client = new Client(['defaults' => ['allow_redirects' => false]]);
-        $this->assertFalse($client->getDefaultOption('allow_redirects'));
-        $this->assertEquals(
-            ['User-Agent' => Client::getDefaultUserAgent()],
-            $client->getDefaultOption('headers')
-        );
-    }
-
-    public function testAddsDefaultUserAgentHeaderWithoutDefaultOptions()
-    {
-        $client = new Client();
-        $this->assertEquals(
-            ['User-Agent' => Client::getDefaultUserAgent()],
-            $client->getDefaultOption('headers')
-        );
-    }
-
-    private function getRequestClient()
-    {
-        $client = $this->getMockBuilder('GuzzleHttp\Client')
-            ->setMethods(['send'])
-            ->getMock();
-        $client->expects($this->once())
-            ->method('send')
-            ->will($this->returnArgument(0));
-
-        return $client;
-    }
-
-    public function requestMethodProvider()
-    {
-        return [
-            ['GET', false],
-            ['HEAD', false],
-            ['DELETE', false],
-            ['OPTIONS', false],
-            ['POST', 'foo'],
-            ['PUT', 'foo'],
-            ['PATCH', 'foo']
-        ];
-    }
-
-    /**
-     * @dataProvider requestMethodProvider
-     */
-    public function testClientProvidesMethodShortcut($method, $body)
-    {
-        $client = $this->getRequestClient();
-        if ($body) {
-            $request = $client->{$method}('http://foo.com', [
-                'headers' => ['X-Baz' => 'Bar'],
-                'body' => $body,
-                'query' => ['a' => 'b']
-            ]);
-        } else {
-            $request = $client->{$method}('http://foo.com', [
-                'headers' => ['X-Baz' => 'Bar'],
-                'query' => ['a' => 'b']
-            ]);
-        }
-        $this->assertEquals($method, $request->getMethod());
-        $this->assertEquals('Bar', $request->getHeader('X-Baz'));
-        $this->assertEquals('a=b', $request->getQuery());
-        if ($body) {
-            $this->assertEquals($body, $request->getBody());
-        }
-    }
-
-    public function testClientMergesDefaultOptionsWithRequestOptions()
-    {
-        $f = $this->getMockBuilder('GuzzleHttp\Message\MessageFactoryInterface')
-            ->setMethods(array('createRequest'))
-            ->getMockForAbstractClass();
-
-        $o = null;
-        // Intercept the creation
-        $f->expects($this->once())
-            ->method('createRequest')
-            ->will($this->returnCallback(
-                function ($method, $url, array $options = []) use (&$o) {
-                    $o = $options;
-                    return (new MessageFactory())->createRequest($method, $url, $options);
-                }
-            ));
-
-        $client = new Client([
-            'message_factory' => $f,
-            'defaults' => [
-                'headers' => ['Foo' => 'Bar'],
-                'query' => ['baz' => 'bam'],
-                'exceptions' => false
-            ]
-        ]);
-
-        $request = $client->createRequest('GET', 'http://foo.com?a=b', [
-            'headers' => ['Hi' => 'there', '1' => 'one'],
-            'allow_redirects' => false,
-            'query' => ['t' => 1]
-        ]);
-
-        $this->assertFalse($o['allow_redirects']);
-        $this->assertFalse($o['exceptions']);
-        $this->assertEquals('Bar', $request->getHeader('Foo'));
-        $this->assertEquals('there', $request->getHeader('Hi'));
-        $this->assertEquals('one', $request->getHeader('1'));
-        $this->assertEquals('a=b&baz=bam&t=1', $request->getQuery());
-    }
-
-    public function testClientMergesDefaultHeadersCaseInsensitively()
-    {
-        $client = new Client(['defaults' => ['headers' => ['Foo' => 'Bar']]]);
-        $request = $client->createRequest('GET', 'http://foo.com?a=b', [
-            'headers' => ['foo' => 'custom', 'user-agent' => 'test']
-        ]);
-        $this->assertEquals('test', $request->getHeader('User-Agent'));
-        $this->assertEquals('custom', $request->getHeader('Foo'));
-    }
-
-    public function testCanOverrideDefaultOptionWithNull()
-    {
-        $client = new Client(['defaults' => ['proxy' => 'invalid!']]);
-        $request = $client->createRequest('GET', 'http://foo.com?a=b', [
-            'proxy' => null
-        ]);
-        $this->assertFalse($request->getConfig()->hasKey('proxy'));
-    }
-
-    public function testDoesNotOverwriteExistingUA()
-    {
-        $client = new Client(['defaults' => [
-            'headers' => ['User-Agent' => 'test']
-        ]]);
-        $this->assertEquals(
-            ['User-Agent' => 'test'],
-            $client->getDefaultOption('headers')
-        );
-    }
-
-    public function testUsesBaseUrlWhenNoUrlIsSet()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com/baz?bam=bar']);
-        $this->assertEquals(
-            'http://www.foo.com/baz?bam=bar',
-            $client->createRequest('GET')->getUrl()
-        );
-    }
-
-    public function testUsesBaseUrlCombinedWithProvidedUrl()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com/baz?bam=bar']);
-        $this->assertEquals(
-            'http://www.foo.com/bar/bam',
-            $client->createRequest('GET', 'bar/bam')->getUrl()
-        );
-    }
-
-    public function testFalsyPathsAreCombinedWithBaseUrl()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com/baz?bam=bar']);
-        $this->assertEquals(
-            'http://www.foo.com/0',
-            $client->createRequest('GET', '0')->getUrl()
-        );
-    }
-
-    public function testUsesBaseUrlCombinedWithProvidedUrlViaUriTemplate()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com/baz?bam=bar']);
-        $this->assertEquals(
-            'http://www.foo.com/bar/123',
-            $client->createRequest('GET', ['bar/{bam}', ['bam' => '123']])->getUrl()
-        );
-    }
-
-    public function testSettingAbsoluteUrlOverridesBaseUrl()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com/baz?bam=bar']);
-        $this->assertEquals(
-            'http://www.foo.com/foo',
-            $client->createRequest('GET', '/foo')->getUrl()
-        );
-    }
-
-    public function testSettingAbsoluteUriTemplateOverridesBaseUrl()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com/baz?bam=bar']);
-        $this->assertEquals(
-            'http://goo.com/1',
-            $client->createRequest(
-                'GET',
-                ['http://goo.com/{bar}', ['bar' => '1']]
-            )->getUrl()
-        );
-    }
-
-    public function testCanSetRelativeUrlStartingWithHttp()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com']);
-        $this->assertEquals(
-            'http://www.foo.com/httpfoo',
-            $client->createRequest('GET', 'httpfoo')->getUrl()
-        );
-    }
-
-    public function testClientSendsRequests()
-    {
-        $mock = new MockHandler(['status' => 200, 'headers' => []]);
-        $client = new Client(['handler' => $mock]);
-        $response = $client->get('http://test.com');
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('http://test.com', $response->getEffectiveUrl());
-    }
-
-    public function testSendingRequestCanBeIntercepted()
-    {
-        $response = new Response(200);
-        $client = new Client(['handler' => $this->ma]);
-        $client->getEmitter()->on(
-            'before',
-            function (BeforeEvent $e) use ($response) {
-                $e->intercept($response);
-            }
-        );
-        $this->assertSame($response, $client->get('http://test.com'));
-        $this->assertEquals('http://test.com', $response->getEffectiveUrl());
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage Argument 1 passed to GuzzleHttp\Message\FutureResponse::proxy() must implement interface GuzzleHttp\Ring\Future\FutureInterface
-     */
-    public function testEnsuresResponseIsPresentAfterSending()
-    {
-        $handler = function () {};
-        $client = new Client(['handler' => $handler]);
-        $client->get('http://httpbin.org');
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage Waiting did not resolve future
-     */
-    public function testEnsuresResponseIsPresentAfterDereferencing()
-    {
-        $deferred = new Deferred();
-        $handler = new MockHandler(function () use ($deferred) {
-            return new FutureArray(
-                $deferred->promise(),
-                function () {}
-            );
-        });
-        $client = new Client(['handler' => $handler]);
-        $response = $client->get('http://httpbin.org');
-        $response->wait();
-    }
-
-    public function testClientHandlesErrorsDuringBeforeSend()
-    {
-        $client = new Client();
-        $client->getEmitter()->on('before', function ($e) {
-            throw new \Exception('foo');
-        });
-        $client->getEmitter()->on('error', function (ErrorEvent $e) {
-            $e->intercept(new Response(200));
-        });
-        $this->assertEquals(
-            200,
-            $client->get('http://test.com')->getStatusCode()
-        );
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage foo
-     */
-    public function testClientHandlesErrorsDuringBeforeSendAndThrowsIfUnhandled()
-    {
-        $client = new Client();
-        $client->getEmitter()->on('before', function (BeforeEvent $e) {
-            throw new RequestException('foo', $e->getRequest());
-        });
-        $client->get('http://httpbin.org');
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage foo
-     */
-    public function testClientWrapsExceptions()
-    {
-        $client = new Client();
-        $client->getEmitter()->on('before', function (BeforeEvent $e) {
-            throw new \Exception('foo');
-        });
-        $client->get('http://httpbin.org');
-    }
-
-    public function testCanInjectResponseForFutureError()
-    {
-        $calledFuture = false;
-        $deferred = new Deferred();
-        $future = new FutureArray(
-            $deferred->promise(),
-            function () use ($deferred, &$calledFuture) {
-                $calledFuture = true;
-                $deferred->resolve(['error' => new \Exception('Noo!')]);
-            }
-        );
-        $mock = new MockHandler($future);
-        $client = new Client(['handler' => $mock]);
-        $called = 0;
-        $response = $client->get('http://localhost:123/foo', [
-            'future' => true,
-            'events' => [
-                'error' => function (ErrorEvent $e) use (&$called) {
-                    $called++;
-                    $e->intercept(new Response(200));
-                }
-            ]
-        ]);
-        $this->assertEquals(0, $called);
-        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $response);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertTrue($calledFuture);
-        $this->assertEquals(1, $called);
-    }
-
-    public function testCanReturnFutureResults()
-    {
-        $called = false;
-        $deferred = new Deferred();
-        $future = new FutureArray(
-            $deferred->promise(),
-            function () use ($deferred, &$called) {
-                $called = true;
-                $deferred->resolve(['status' => 201, 'headers' => []]);
-            }
-        );
-        $mock = new MockHandler($future);
-        $client = new Client(['handler' => $mock]);
-        $response = $client->get('http://localhost:123/foo', ['future' => true]);
-        $this->assertFalse($called);
-        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $response);
-        $this->assertEquals(201, $response->getStatusCode());
-        $this->assertTrue($called);
-    }
-
-    public function testThrowsExceptionsWhenDereferenced()
-    {
-        $calledFuture = false;
-        $deferred = new Deferred();
-        $future = new FutureArray(
-            $deferred->promise(),
-            function () use ($deferred, &$calledFuture) {
-                $calledFuture = true;
-                $deferred->resolve(['error' => new \Exception('Noop!')]);
-            }
-        );
-        $client = new Client(['handler' => new MockHandler($future)]);
-        try {
-            $res = $client->get('http://localhost:123/foo', ['future' => true]);
-            $res->wait();
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertEquals(1, $calledFuture);
-        }
-    }
-
-    /**
-     * @expectedExceptionMessage Noo!
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     */
-    public function testThrowsExceptionsSynchronously()
-    {
-        $client = new Client([
-            'handler' => new MockHandler(['error' => new \Exception('Noo!')])
-        ]);
-        $client->get('http://localhost:123/foo');
-    }
-
-    public function testCanSetDefaultValues()
-    {
-        $client = new Client(['foo' => 'bar']);
-        $client->setDefaultOption('headers/foo', 'bar');
-        $this->assertNull($client->getDefaultOption('foo'));
-        $this->assertEquals('bar', $client->getDefaultOption('headers/foo'));
-    }
-
-    public function testSendsAllInParallel()
-    {
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock([
-            new Response(200),
-            new Response(201),
-            new Response(202),
-        ]));
-        $history = new History();
-        $client->getEmitter()->attach($history);
-
-        $requests = [
-            $client->createRequest('GET', 'http://test.com'),
-            $client->createRequest('POST', 'http://test.com'),
-            $client->createRequest('PUT', 'http://test.com')
-        ];
-
-        $client->sendAll($requests);
-        $requests = array_map(function($r) {
-            return $r->getMethod();
-        }, $history->getRequests());
-        $this->assertContains('GET', $requests);
-        $this->assertContains('POST', $requests);
-        $this->assertContains('PUT', $requests);
-    }
-
-    public function testCanDisableAuthPerRequest()
-    {
-        $client = new Client(['defaults' => ['auth' => 'foo']]);
-        $request = $client->createRequest('GET', 'http://test.com');
-        $this->assertEquals('foo', $request->getConfig()['auth']);
-        $request = $client->createRequest('GET', 'http://test.com', ['auth' => null]);
-        $this->assertFalse($request->getConfig()->hasKey('auth'));
-    }
-
-    public function testUsesProxyEnvironmentVariables()
-    {
-        $http = getenv('HTTP_PROXY');
-        $https = getenv('HTTPS_PROXY');
-
-        $client = new Client();
-        $this->assertNull($client->getDefaultOption('proxy'));
-
-        putenv('HTTP_PROXY=127.0.0.1');
-        $client = new Client();
-        $this->assertEquals(
-            ['http' => '127.0.0.1'],
-            $client->getDefaultOption('proxy')
-        );
-
-        putenv('HTTPS_PROXY=127.0.0.2');
-        $client = new Client();
-        $this->assertEquals(
-            ['http' => '127.0.0.1', 'https' => '127.0.0.2'],
-            $client->getDefaultOption('proxy')
-        );
-
-        putenv("HTTP_PROXY=$http");
-        putenv("HTTPS_PROXY=$https");
-    }
-
-    public function testReturnsFutureForErrorWhenRequested()
-    {
-        $client = new Client(['handler' => new MockHandler(['status' => 404])]);
-        $request = $client->createRequest('GET', 'http://localhost:123/foo', [
-            'future' => true
-        ]);
-        $res = $client->send($request);
-        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $res);
-        try {
-            $res->wait();
-            $this->fail('did not throw');
-        } catch (RequestException $e) {
-            $this->assertContains('404', $e->getMessage());
-        }
-    }
-
-    public function testReturnsFutureForResponseWhenRequested()
-    {
-        $client = new Client(['handler' => new MockHandler(['status' => 200])]);
-        $request = $client->createRequest('GET', 'http://localhost:123/foo', [
-            'future' => true
-        ]);
-        $res = $client->send($request);
-        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $res);
-        $this->assertEquals(200, $res->getStatusCode());
-    }
-
-    public function testCanUseUrlWithCustomQuery()
-    {
-        $client = new Client();
-        $url = Url::fromString('http://foo.com/bar');
-        $query = new Query(['baz' => '123%20']);
-        $query->setEncodingType(false);
-        $url->setQuery($query);
-        $r = $client->createRequest('GET', $url);
-        $this->assertEquals('http://foo.com/bar?baz=123%20', $r->getUrl());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php b/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
deleted file mode 100644
index d137947..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
+++ /dev/null
@@ -1,416 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Collection;
-
-class CollectionTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var Collection */
-    protected $coll;
-
-    protected function setUp()
-    {
-        $this->coll = new Collection();
-    }
-
-    public function testConstructorCanBeCalledWithNoParams()
-    {
-        $this->coll = new Collection();
-        $p = $this->coll->toArray();
-        $this->assertEmpty($p, '-> Collection must be empty when no data is passed');
-    }
-
-    public function testConstructorCanBeCalledWithParams()
-    {
-        $testData = array(
-            'test' => 'value',
-            'test_2' => 'value2'
-        );
-        $this->coll = new Collection($testData);
-        $this->assertEquals($this->coll->toArray(), $testData);
-        $this->assertEquals($this->coll->toArray(), $this->coll->toArray());
-    }
-
-    public function testImplementsIteratorAggregate()
-    {
-        $this->coll->set('key', 'value');
-        $this->assertInstanceOf('ArrayIterator', $this->coll->getIterator());
-        $this->assertEquals(1, count($this->coll));
-        $total = 0;
-        foreach ($this->coll as $key => $value) {
-            $this->assertEquals('key', $key);
-            $this->assertEquals('value', $value);
-            $total++;
-        }
-        $this->assertEquals(1, $total);
-    }
-
-    public function testCanAddValuesToExistingKeysByUsingArray()
-    {
-        $this->coll->add('test', 'value1');
-        $this->assertEquals($this->coll->toArray(), array('test' => 'value1'));
-        $this->coll->add('test', 'value2');
-        $this->assertEquals($this->coll->toArray(), array('test' => array('value1', 'value2')));
-        $this->coll->add('test', 'value3');
-        $this->assertEquals($this->coll->toArray(), array('test' => array('value1', 'value2', 'value3')));
-    }
-
-    public function testHandlesMergingInDisparateDataSources()
-    {
-        $params = array(
-            'test' => 'value1',
-            'test2' => 'value2',
-            'test3' => array('value3', 'value4')
-        );
-        $this->coll->merge($params);
-        $this->assertEquals($this->coll->toArray(), $params);
-        $this->coll->merge(new Collection(['test4' => 'hi']));
-        $this->assertEquals(
-            $this->coll->toArray(),
-            $params + ['test4' => 'hi']
-        );
-    }
-
-    public function testCanClearAllDataOrSpecificKeys()
-    {
-        $this->coll->merge(array(
-            'test' => 'value1',
-            'test2' => 'value2'
-        ));
-
-        // Clear a specific parameter by name
-        $this->coll->remove('test');
-
-        $this->assertEquals($this->coll->toArray(), array(
-            'test2' => 'value2'
-        ));
-
-        // Clear all parameters
-        $this->coll->clear();
-
-        $this->assertEquals($this->coll->toArray(), array());
-    }
-
-    public function testProvidesKeys()
-    {
-        $this->assertEquals(array(), $this->coll->getKeys());
-        $this->coll->merge(array(
-            'test1' => 'value1',
-            'test2' => 'value2'
-        ));
-        $this->assertEquals(array('test1', 'test2'), $this->coll->getKeys());
-        // Returns the cached array previously returned
-        $this->assertEquals(array('test1', 'test2'), $this->coll->getKeys());
-        $this->coll->remove('test1');
-        $this->assertEquals(array('test2'), $this->coll->getKeys());
-        $this->coll->add('test3', 'value3');
-        $this->assertEquals(array('test2', 'test3'), $this->coll->getKeys());
-    }
-
-    public function testChecksIfHasKey()
-    {
-        $this->assertFalse($this->coll->hasKey('test'));
-        $this->coll->add('test', 'value');
-        $this->assertEquals(true, $this->coll->hasKey('test'));
-        $this->coll->add('test2', 'value2');
-        $this->assertEquals(true, $this->coll->hasKey('test'));
-        $this->assertEquals(true, $this->coll->hasKey('test2'));
-        $this->assertFalse($this->coll->hasKey('testing'));
-        $this->assertEquals(false, $this->coll->hasKey('AB-C', 'junk'));
-    }
-
-    public function testChecksIfHasValue()
-    {
-        $this->assertFalse($this->coll->hasValue('value'));
-        $this->coll->add('test', 'value');
-        $this->assertEquals('test', $this->coll->hasValue('value'));
-        $this->coll->add('test2', 'value2');
-        $this->assertEquals('test', $this->coll->hasValue('value'));
-        $this->assertEquals('test2', $this->coll->hasValue('value2'));
-        $this->assertFalse($this->coll->hasValue('val'));
-    }
-
-    public function testImplementsCount()
-    {
-        $data = new Collection();
-        $this->assertEquals(0, $data->count());
-        $data->add('key', 'value');
-        $this->assertEquals(1, count($data));
-        $data->add('key', 'value2');
-        $this->assertEquals(1, count($data));
-        $data->add('key_2', 'value3');
-        $this->assertEquals(2, count($data));
-    }
-
-    public function testAddParamsByMerging()
-    {
-        $params = array(
-            'test' => 'value1',
-            'test2' => 'value2',
-            'test3' => array('value3', 'value4')
-        );
-
-        // Add some parameters
-        $this->coll->merge($params);
-
-        // Add more parameters by merging them in
-        $this->coll->merge(array(
-            'test' => 'another',
-            'different_key' => 'new value'
-        ));
-
-        $this->assertEquals(array(
-            'test' => array('value1', 'another'),
-            'test2' => 'value2',
-            'test3' => array('value3', 'value4'),
-            'different_key' => 'new value'
-        ), $this->coll->toArray());
-    }
-
-    public function testAllowsFunctionalFilter()
-    {
-        $this->coll->merge(array(
-            'fruit' => 'apple',
-            'number' => 'ten',
-            'prepositions' => array('about', 'above', 'across', 'after'),
-            'same_number' => 'ten'
-        ));
-
-        $filtered = $this->coll->filter(function ($key, $value) {
-            return $value == 'ten';
-        });
-
-        $this->assertNotSame($filtered, $this->coll);
-
-        $this->assertEquals(array(
-            'number' => 'ten',
-            'same_number' => 'ten'
-        ), $filtered->toArray());
-    }
-
-    public function testAllowsFunctionalMapping()
-    {
-        $this->coll->merge(array(
-            'number_1' => 1,
-            'number_2' => 2,
-            'number_3' => 3
-        ));
-
-        $mapped = $this->coll->map(function ($key, $value) {
-            return $value * $value;
-        });
-
-        $this->assertNotSame($mapped, $this->coll);
-
-        $this->assertEquals(array(
-            'number_1' => 1,
-            'number_2' => 4,
-            'number_3' => 9
-        ), $mapped->toArray());
-    }
-
-    public function testImplementsArrayAccess()
-    {
-        $this->coll->merge(array(
-            'k1' => 'v1',
-            'k2' => 'v2'
-        ));
-
-        $this->assertTrue($this->coll->offsetExists('k1'));
-        $this->assertFalse($this->coll->offsetExists('Krull'));
-
-        $this->coll->offsetSet('k3', 'v3');
-        $this->assertEquals('v3', $this->coll->offsetGet('k3'));
-        $this->assertEquals('v3', $this->coll->get('k3'));
-
-        $this->coll->offsetUnset('k1');
-        $this->assertFalse($this->coll->offsetExists('k1'));
-    }
-
-    public function testCanReplaceAllData()
-    {
-        $this->coll->replace(array('a' => '123'));
-        $this->assertEquals(array('a' => '123'), $this->coll->toArray());
-    }
-
-    public function testPreparesFromConfig()
-    {
-        $c = Collection::fromConfig(array(
-            'a' => '123',
-            'base_url' => 'http://www.test.com/'
-        ), array(
-            'a' => 'xyz',
-            'b' => 'lol'
-        ), array('a'));
-
-        $this->assertInstanceOf('GuzzleHttp\Collection', $c);
-        $this->assertEquals(array(
-            'a' => '123',
-            'b' => 'lol',
-            'base_url' => 'http://www.test.com/'
-        ), $c->toArray());
-
-        try {
-            $c = Collection::fromConfig(array(), array(), array('a'));
-            $this->fail('Exception not throw when missing config');
-        } catch (\InvalidArgumentException $e) {
-        }
-    }
-
-    function falseyDataProvider()
-    {
-        return array(
-            array(false, false),
-            array(null, null),
-            array('', ''),
-            array(array(), array()),
-            array(0, 0),
-        );
-    }
-
-    /**
-     * @dataProvider falseyDataProvider
-     */
-    public function testReturnsCorrectData($a, $b)
-    {
-        $c = new Collection(array('value' => $a));
-        $this->assertSame($b, $c->get('value'));
-    }
-
-    public function testRetrievesNestedKeysUsingPath()
-    {
-        $data = array(
-            'foo' => 'bar',
-            'baz' => array(
-                'mesa' => array(
-                    'jar' => 'jar'
-                )
-            )
-        );
-        $collection = new Collection($data);
-        $this->assertEquals('bar', $collection->getPath('foo'));
-        $this->assertEquals('jar', $collection->getPath('baz/mesa/jar'));
-        $this->assertNull($collection->getPath('wewewf'));
-        $this->assertNull($collection->getPath('baz/mesa/jar/jar'));
-    }
-
-    public function testFalseyKeysStillDescend()
-    {
-        $collection = new Collection(array(
-            '0' => array(
-                'a' => 'jar'
-            ),
-            1 => 'other'
-        ));
-        $this->assertEquals('jar', $collection->getPath('0/a'));
-        $this->assertEquals('other', $collection->getPath('1'));
-    }
-
-    public function getPathProvider()
-    {
-        $data = array(
-            'foo' => 'bar',
-            'baz' => array(
-                'mesa' => array(
-                    'jar' => 'jar',
-                    'array' => array('a', 'b', 'c')
-                ),
-                'bar' => array(
-                    'baz' => 'bam',
-                    'array' => array('d', 'e', 'f')
-                )
-            ),
-            'bam' => array(
-                array('foo' => 1),
-                array('foo' => 2),
-                array('array' => array('h', 'i'))
-            )
-        );
-        $c = new Collection($data);
-
-        return array(
-            // Simple path selectors
-            array($c, 'foo', 'bar'),
-            array($c, 'baz', $data['baz']),
-            array($c, 'bam', $data['bam']),
-            array($c, 'baz/mesa', $data['baz']['mesa']),
-            array($c, 'baz/mesa/jar', 'jar'),
-            // Does not barf on missing keys
-            array($c, 'fefwfw', null),
-            array($c, 'baz/mesa/array', $data['baz']['mesa']['array'])
-        );
-    }
-
-    /**
-     * @dataProvider getPathProvider
-     */
-    public function testGetPath(Collection $c, $path, $expected, $separator = '/')
-    {
-        $this->assertEquals($expected, $c->getPath($path, $separator));
-    }
-
-    public function testOverridesSettings()
-    {
-        $c = new Collection(array('foo' => 1, 'baz' => 2, 'bar' => 3));
-        $c->overwriteWith(array('foo' => 10, 'bar' => 300));
-        $this->assertEquals(array('foo' => 10, 'baz' => 2, 'bar' => 300), $c->toArray());
-    }
-
-    public function testOverwriteWithCollection()
-    {
-        $c = new Collection(array('foo' => 1, 'baz' => 2, 'bar' => 3));
-        $b = new Collection(array('foo' => 10, 'bar' => 300));
-        $c->overwriteWith($b);
-        $this->assertEquals(array('foo' => 10, 'baz' => 2, 'bar' => 300), $c->toArray());
-    }
-
-    public function testOverwriteWithTraversable()
-    {
-        $c = new Collection(array('foo' => 1, 'baz' => 2, 'bar' => 3));
-        $b = new Collection(array('foo' => 10, 'bar' => 300));
-        $c->overwriteWith($b->getIterator());
-        $this->assertEquals(array('foo' => 10, 'baz' => 2, 'bar' => 300), $c->toArray());
-    }
-
-    public function testCanSetNestedPathValueThatDoesNotExist()
-    {
-        $c = new Collection(array());
-        $c->setPath('foo/bar/baz/123', 'hi');
-        $this->assertEquals('hi', $c['foo']['bar']['baz']['123']);
-    }
-
-    public function testCanSetNestedPathValueThatExists()
-    {
-        $c = new Collection(array('foo' => array('bar' => 'test')));
-        $c->setPath('foo/bar', 'hi');
-        $this->assertEquals('hi', $c['foo']['bar']);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testVerifiesNestedPathIsValidAtExactLevel()
-    {
-        $c = new Collection(array('foo' => 'bar'));
-        $c->setPath('foo/bar', 'hi');
-        $this->assertEquals('hi', $c['foo']['bar']);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testVerifiesThatNestedPathIsValidAtAnyLevel()
-    {
-        $c = new Collection(array('foo' => 'bar'));
-        $c->setPath('foo/bar/baz', 'test');
-    }
-
-    public function testCanAppendToNestedPathValues()
-    {
-        $c = new Collection();
-        $c->setPath('foo/bar/[]', 'a');
-        $c->setPath('foo/bar/[]', 'b');
-        $this->assertEquals(['a', 'b'], $c['foo']['bar']);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/CookieJarTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/CookieJarTest.php
deleted file mode 100644
index 1360419..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/CookieJarTest.php
+++ /dev/null
@@ -1,339 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\CookieJar;
-
-use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Cookie\SetCookie;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Cookie\CookieJar
- */
-class CookieJarTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var CookieJar */
-    private $jar;
-
-    public function setUp()
-    {
-        $this->jar = new CookieJar();
-    }
-
-    protected function getTestCookies()
-    {
-        return [
-            new SetCookie(['Name' => 'foo',  'Value' => 'bar', 'Domain' => 'foo.com', 'Path' => '/',    'Discard' => true]),
-            new SetCookie(['Name' => 'test', 'Value' => '123', 'Domain' => 'baz.com', 'Path' => '/foo', 'Expires' => 2]),
-            new SetCookie(['Name' => 'you',  'Value' => '123', 'Domain' => 'bar.com', 'Path' => '/boo', 'Expires' => time() + 1000])
-        ];
-    }
-
-    public function testQuotesBadCookieValues()
-    {
-        $this->assertEquals('foo', CookieJar::getCookieValue('foo'));
-        $this->assertEquals('"foo,bar"', CookieJar::getCookieValue('foo,bar'));
-    }
-
-    public function testCreatesFromArray()
-    {
-        $jar = CookieJar::fromArray([
-            'foo' => 'bar',
-            'baz' => 'bam'
-        ], 'example.com');
-        $this->assertCount(2, $jar);
-    }
-
-    /**
-     * Provides test data for cookie cookieJar retrieval
-     */
-    public function getCookiesDataProvider()
-    {
-        return [
-            [['foo', 'baz', 'test', 'muppet', 'googoo'], '', '', '', false],
-            [['foo', 'baz', 'muppet', 'googoo'], '', '', '', true],
-            [['googoo'], 'www.example.com', '', '', false],
-            [['muppet', 'googoo'], 'test.y.example.com', '', '', false],
-            [['foo', 'baz'], 'example.com', '', '', false],
-            [['muppet'], 'x.y.example.com', '/acme/', '', false],
-            [['muppet'], 'x.y.example.com', '/acme/test/', '', false],
-            [['googoo'], 'x.y.example.com', '/test/acme/test/', '', false],
-            [['foo', 'baz'], 'example.com', '', '', false],
-            [['baz'], 'example.com', '', 'baz', false],
-        ];
-    }
-
-    public function testStoresAndRetrievesCookies()
-    {
-        $cookies = $this->getTestCookies();
-        foreach ($cookies as $cookie) {
-            $this->assertTrue($this->jar->setCookie($cookie));
-        }
-
-        $this->assertEquals(3, count($this->jar));
-        $this->assertEquals(3, count($this->jar->getIterator()));
-        $this->assertEquals($cookies, $this->jar->getIterator()->getArrayCopy());
-    }
-
-    public function testRemovesTemporaryCookies()
-    {
-        $cookies = $this->getTestCookies();
-        foreach ($this->getTestCookies() as $cookie) {
-            $this->jar->setCookie($cookie);
-        }
-        $this->jar->clearSessionCookies();
-        $this->assertEquals(
-            [$cookies[1], $cookies[2]],
-            $this->jar->getIterator()->getArrayCopy()
-        );
-    }
-
-    public function testRemovesSelectively()
-    {
-        foreach ($this->getTestCookies() as $cookie) {
-            $this->jar->setCookie($cookie);
-        }
-
-        // Remove foo.com cookies
-        $this->jar->clear('foo.com');
-        $this->assertEquals(2, count($this->jar));
-        // Try again, removing no further cookies
-        $this->jar->clear('foo.com');
-        $this->assertEquals(2, count($this->jar));
-
-        // Remove bar.com cookies with path of /boo
-        $this->jar->clear('bar.com', '/boo');
-        $this->assertEquals(1, count($this->jar));
-
-        // Remove cookie by name
-        $this->jar->clear(null, null, 'test');
-        $this->assertEquals(0, count($this->jar));
-    }
-
-    public function testDoesNotAddIncompleteCookies()
-    {
-        $this->assertEquals(false, $this->jar->setCookie(new SetCookie()));
-        $this->assertFalse($this->jar->setCookie(new SetCookie(array(
-            'Name' => 'foo'
-        ))));
-        $this->assertFalse($this->jar->setCookie(new SetCookie(array(
-            'Name' => false
-        ))));
-        $this->assertFalse($this->jar->setCookie(new SetCookie(array(
-            'Name' => true
-        ))));
-        $this->assertFalse($this->jar->setCookie(new SetCookie(array(
-            'Name'   => 'foo',
-            'Domain' => 'foo.com'
-        ))));
-    }
-
-    public function testDoesAddValidCookies()
-    {
-        $this->assertTrue($this->jar->setCookie(new SetCookie(array(
-            'Name'   => 'foo',
-            'Domain' => 'foo.com',
-            'Value'  => 0
-        ))));
-        $this->assertTrue($this->jar->setCookie(new SetCookie(array(
-            'Name'   => 'foo',
-            'Domain' => 'foo.com',
-            'Value'  => 0.0
-        ))));
-        $this->assertTrue($this->jar->setCookie(new SetCookie(array(
-            'Name'   => 'foo',
-            'Domain' => 'foo.com',
-            'Value'  => '0'
-        ))));
-    }
-
-    public function testOverwritesCookiesThatAreOlderOrDiscardable()
-    {
-        $t = time() + 1000;
-        $data = array(
-            'Name'    => 'foo',
-            'Value'   => 'bar',
-            'Domain'  => '.example.com',
-            'Path'    => '/',
-            'Max-Age' => '86400',
-            'Secure'  => true,
-            'Discard' => true,
-            'Expires' => $t
-        );
-
-        // Make sure that the discard cookie is overridden with the non-discard
-        $this->assertTrue($this->jar->setCookie(new SetCookie($data)));
-        $this->assertEquals(1, count($this->jar));
-
-        $data['Discard'] = false;
-        $this->assertTrue($this->jar->setCookie(new SetCookie($data)));
-        $this->assertEquals(1, count($this->jar));
-
-        $c = $this->jar->getIterator()->getArrayCopy();
-        $this->assertEquals(false, $c[0]->getDiscard());
-
-        // Make sure it doesn't duplicate the cookie
-        $this->jar->setCookie(new SetCookie($data));
-        $this->assertEquals(1, count($this->jar));
-
-        // Make sure the more future-ful expiration date supersede the other
-        $data['Expires'] = time() + 2000;
-        $this->assertTrue($this->jar->setCookie(new SetCookie($data)));
-        $this->assertEquals(1, count($this->jar));
-        $c = $this->jar->getIterator()->getArrayCopy();
-        $this->assertNotEquals($t, $c[0]->getExpires());
-    }
-
-    public function testOverwritesCookiesThatHaveChanged()
-    {
-        $t = time() + 1000;
-        $data = array(
-            'Name'    => 'foo',
-            'Value'   => 'bar',
-            'Domain'  => '.example.com',
-            'Path'    => '/',
-            'Max-Age' => '86400',
-            'Secure'  => true,
-            'Discard' => true,
-            'Expires' => $t
-        );
-
-        // Make sure that the discard cookie is overridden with the non-discard
-        $this->assertTrue($this->jar->setCookie(new SetCookie($data)));
-
-        $data['Value'] = 'boo';
-        $this->assertTrue($this->jar->setCookie(new SetCookie($data)));
-        $this->assertEquals(1, count($this->jar));
-
-        // Changing the value plus a parameter also must overwrite the existing one
-        $data['Value'] = 'zoo';
-        $data['Secure'] = false;
-        $this->assertTrue($this->jar->setCookie(new SetCookie($data)));
-        $this->assertEquals(1, count($this->jar));
-
-        $c = $this->jar->getIterator()->getArrayCopy();
-        $this->assertEquals('zoo', $c[0]->getValue());
-    }
-
-    public function testAddsCookiesFromResponseWithRequest()
-    {
-        $response = new Response(200, array(
-            'Set-Cookie' => "fpc=d=.Hm.yh4.1XmJWjJfs4orLQzKzPImxklQoxXSHOZATHUSEFciRueW_7704iYUtsXNEXq0M92Px2glMdWypmJ7HIQl6XIUvrZimWjQ3vIdeuRbI.FNQMAfcxu_XN1zSx7l.AcPdKL6guHc2V7hIQFhnjRW0rxm2oHY1P4bGQxFNz7f.tHm12ZD3DbdMDiDy7TBXsuP4DM-&v=2; expires=Fri, 02-Mar-2019 02:17:40 GMT;"
-        ));
-        $request = new Request('GET', 'http://www.example.com');
-        $this->jar->extractCookies($request, $response);
-        $this->assertEquals(1, count($this->jar));
-    }
-
-    public function getMatchingCookiesDataProvider()
-    {
-        return array(
-            array('https://example.com', 'foo=bar; baz=foobar'),
-            array('http://example.com', ''),
-            array('https://example.com:8912', 'foo=bar; baz=foobar'),
-            array('https://foo.example.com', 'foo=bar; baz=foobar'),
-            array('http://foo.example.com/test/acme/', 'googoo=gaga')
-        );
-    }
-
-    /**
-     * @dataProvider getMatchingCookiesDataProvider
-     */
-    public function testReturnsCookiesMatchingRequests($url, $cookies)
-    {
-        $bag = [
-            new SetCookie([
-                'Name'    => 'foo',
-                'Value'   => 'bar',
-                'Domain'  => 'example.com',
-                'Path'    => '/',
-                'Max-Age' => '86400',
-                'Secure'  => true
-            ]),
-            new SetCookie([
-                'Name'    => 'baz',
-                'Value'   => 'foobar',
-                'Domain'  => 'example.com',
-                'Path'    => '/',
-                'Max-Age' => '86400',
-                'Secure'  => true
-            ]),
-            new SetCookie([
-                'Name'    => 'test',
-                'Value'   => '123',
-                'Domain'  => 'www.foobar.com',
-                'Path'    => '/path/',
-                'Discard' => true
-            ]),
-            new SetCookie([
-                'Name'    => 'muppet',
-                'Value'   => 'cookie_monster',
-                'Domain'  => '.y.example.com',
-                'Path'    => '/acme/',
-                'Expires' => time() + 86400
-            ]),
-            new SetCookie([
-                'Name'    => 'googoo',
-                'Value'   => 'gaga',
-                'Domain'  => '.example.com',
-                'Path'    => '/test/acme/',
-                'Max-Age' => 1500
-            ])
-        ];
-
-        foreach ($bag as $cookie) {
-            $this->jar->setCookie($cookie);
-        }
-
-        $request = new Request('GET', $url);
-        $this->jar->addCookieHeader($request);
-        $this->assertEquals($cookies, $request->getHeader('Cookie'));
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Invalid cookie: Cookie name must not cannot invalid characters:
-     */
-    public function testThrowsExceptionWithStrictMode()
-    {
-        $a = new CookieJar(true);
-        $a->setCookie(new SetCookie(['Name' => "abc\n", 'Value' => 'foo', 'Domain' => 'bar']));
-    }
-
-    public function testDeletesCookiesByName()
-    {
-        $cookies = $this->getTestCookies();
-        $cookies[] = new SetCookie([
-            'Name' => 'other',
-            'Value' => '123',
-            'Domain' => 'bar.com',
-            'Path' => '/boo',
-            'Expires' => time() + 1000
-        ]);
-        $jar = new CookieJar();
-        foreach ($cookies as $cookie) {
-            $jar->setCookie($cookie);
-        }
-        $this->assertCount(4, $jar);
-        $jar->clear('bar.com', '/boo', 'other');
-        $this->assertCount(3, $jar);
-        $names = array_map(function (SetCookie $c) {
-            return $c->getName();
-        }, $jar->getIterator()->getArrayCopy());
-        $this->assertEquals(['foo', 'test', 'you'], $names);
-    }
-
-    public function testCanConvertToAndLoadFromArray()
-    {
-        $jar = new CookieJar(true);
-        foreach ($this->getTestCookies() as $cookie) {
-            $jar->setCookie($cookie);
-        }
-        $this->assertCount(3, $jar);
-        $arr = $jar->toArray();
-        $this->assertCount(3, $arr);
-        $newCookieJar = new CookieJar(false, $arr);
-        $this->assertCount(3, $newCookieJar);
-        $this->assertSame($jar->toArray(), $newCookieJar->toArray());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
deleted file mode 100644
index 1d11337..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\CookieJar;
-
-use GuzzleHttp\Cookie\FileCookieJar;
-use GuzzleHttp\Cookie\SetCookie;
-
-/**
- * @covers GuzzleHttp\Cookie\FileCookieJar
- */
-class FileCookieJarTest extends \PHPUnit_Framework_TestCase
-{
-    private $file;
-
-    public function setUp()
-    {
-        $this->file = tempnam('/tmp', 'file-cookies');
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testValidatesCookieFile()
-    {
-        file_put_contents($this->file, 'true');
-        new FileCookieJar($this->file);
-    }
-
-    public function testLoadsFromFileFile()
-    {
-        $jar = new FileCookieJar($this->file);
-        $this->assertEquals([], $jar->getIterator()->getArrayCopy());
-        unlink($this->file);
-    }
-
-    public function testPersistsToFileFile()
-    {
-        $jar = new FileCookieJar($this->file);
-        $jar->setCookie(new SetCookie([
-            'Name'    => 'foo',
-            'Value'   => 'bar',
-            'Domain'  => 'foo.com',
-            'Expires' => time() + 1000
-        ]));
-        $jar->setCookie(new SetCookie([
-            'Name'    => 'baz',
-            'Value'   => 'bar',
-            'Domain'  => 'foo.com',
-            'Expires' => time() + 1000
-        ]));
-        $jar->setCookie(new SetCookie([
-            'Name'    => 'boo',
-            'Value'   => 'bar',
-            'Domain'  => 'foo.com',
-        ]));
-
-        $this->assertEquals(3, count($jar));
-        unset($jar);
-
-        // Make sure it wrote to the file
-        $contents = file_get_contents($this->file);
-        $this->assertNotEmpty($contents);
-
-        // Load the cookieJar from the file
-        $jar = new FileCookieJar($this->file);
-
-        // Weeds out temporary and session cookies
-        $this->assertEquals(2, count($jar));
-        unset($jar);
-        unlink($this->file);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SessionCookieJarTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/SessionCookieJarTest.php
deleted file mode 100644
index ccc6d4e..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SessionCookieJarTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\CookieJar;
-
-use GuzzleHttp\Cookie\SessionCookieJar;
-use GuzzleHttp\Cookie\SetCookie;
-
-/**
- * @covers GuzzleHttp\Cookie\SessionCookieJar
- */
-class SessionCookieJarTest extends \PHPUnit_Framework_TestCase
-{
-    private $sessionVar;
-
-    public function setUp()
-    {
-        $this->sessionVar = 'sessionKey';
-
-        if (!isset($_SESSION)) {
-            $_SESSION = array();
-        }
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testValidatesCookieSession()
-    {
-        $_SESSION[$this->sessionVar] = 'true';
-        new SessionCookieJar($this->sessionVar);
-    }
-
-    public function testLoadsFromSession()
-    {
-        $jar = new SessionCookieJar($this->sessionVar);
-        $this->assertEquals([], $jar->getIterator()->getArrayCopy());
-        unset($_SESSION[$this->sessionVar]);
-    }
-
-    public function testPersistsToSession()
-    {
-        $jar = new SessionCookieJar($this->sessionVar);
-        $jar->setCookie(new SetCookie([
-            'Name'    => 'foo',
-            'Value'   => 'bar',
-            'Domain'  => 'foo.com',
-            'Expires' => time() + 1000
-        ]));
-        $jar->setCookie(new SetCookie([
-            'Name'    => 'baz',
-            'Value'   => 'bar',
-            'Domain'  => 'foo.com',
-            'Expires' => time() + 1000
-        ]));
-        $jar->setCookie(new SetCookie([
-            'Name'    => 'boo',
-            'Value'   => 'bar',
-            'Domain'  => 'foo.com',
-        ]));
-
-        $this->assertEquals(3, count($jar));
-        unset($jar);
-
-        // Make sure it wrote to the sessionVar in $_SESSION
-        $contents = $_SESSION[$this->sessionVar];
-        $this->assertNotEmpty($contents);
-
-        // Load the cookieJar from the file
-        $jar = new SessionCookieJar($this->sessionVar);
-
-        // Weeds out temporary and session cookies
-        $this->assertEquals(2, count($jar));
-        unset($jar);
-        unset($_SESSION[$this->sessionVar]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
deleted file mode 100644
index 3ddd082..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
+++ /dev/null
@@ -1,364 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\CookieJar;
-
-use GuzzleHttp\Cookie\SetCookie;
-
-/**
- * @covers GuzzleHttp\Cookie\SetCookie
- */
-class SetCookieTest extends \PHPUnit_Framework_TestCase
-{
-    public function testInitializesDefaultValues()
-    {
-        $cookie = new SetCookie();
-        $this->assertEquals('/', $cookie->getPath());
-    }
-
-    public function testConvertsDateTimeMaxAgeToUnixTimestamp()
-    {
-        $cookie = new SetCookie(['Expires' => 'November 20, 1984']);
-        $this->assertInternalType('integer', $cookie->getExpires());
-    }
-
-    public function testAddsExpiresBasedOnMaxAge()
-    {
-        $t = time();
-        $cookie = new SetCookie(['Max-Age' => 100]);
-        $this->assertEquals($t + 100, $cookie->getExpires());
-    }
-
-    public function testHoldsValues()
-    {
-        $t = time();
-        $data = array(
-            'Name'     => 'foo',
-            'Value'    => 'baz',
-            'Path'     => '/bar',
-            'Domain'   => 'baz.com',
-            'Expires'  => $t,
-            'Max-Age'  => 100,
-            'Secure'   => true,
-            'Discard'  => true,
-            'HttpOnly' => true,
-            'foo'      => 'baz',
-            'bar'      => 'bam'
-        );
-
-        $cookie = new SetCookie($data);
-        $this->assertEquals($data, $cookie->toArray());
-
-        $this->assertEquals('foo', $cookie->getName());
-        $this->assertEquals('baz', $cookie->getValue());
-        $this->assertEquals('baz.com', $cookie->getDomain());
-        $this->assertEquals('/bar', $cookie->getPath());
-        $this->assertEquals($t, $cookie->getExpires());
-        $this->assertEquals(100, $cookie->getMaxAge());
-        $this->assertTrue($cookie->getSecure());
-        $this->assertTrue($cookie->getDiscard());
-        $this->assertTrue($cookie->getHttpOnly());
-        $this->assertEquals('baz', $cookie->toArray()['foo']);
-        $this->assertEquals('bam', $cookie->toArray()['bar']);
-
-        $cookie->setName('a');
-        $cookie->setValue('b');
-        $cookie->setPath('c');
-        $cookie->setDomain('bar.com');
-        $cookie->setExpires(10);
-        $cookie->setMaxAge(200);
-        $cookie->setSecure(false);
-        $cookie->setHttpOnly(false);
-        $cookie->setDiscard(false);
-
-        $this->assertEquals('a', $cookie->getName());
-        $this->assertEquals('b', $cookie->getValue());
-        $this->assertEquals('c', $cookie->getPath());
-        $this->assertEquals('bar.com', $cookie->getDomain());
-        $this->assertEquals(10, $cookie->getExpires());
-        $this->assertEquals(200, $cookie->getMaxAge());
-        $this->assertFalse($cookie->getSecure());
-        $this->assertFalse($cookie->getDiscard());
-        $this->assertFalse($cookie->getHttpOnly());
-    }
-
-    public function testDeterminesIfExpired()
-    {
-        $c = new SetCookie();
-        $c->setExpires(10);
-        $this->assertTrue($c->isExpired());
-        $c->setExpires(time() + 10000);
-        $this->assertFalse($c->isExpired());
-    }
-
-    public function testMatchesDomain()
-    {
-        $cookie = new SetCookie();
-        $this->assertTrue($cookie->matchesDomain('baz.com'));
-
-        $cookie->setDomain('baz.com');
-        $this->assertTrue($cookie->matchesDomain('baz.com'));
-        $this->assertFalse($cookie->matchesDomain('bar.com'));
-
-        $cookie->setDomain('.baz.com');
-        $this->assertTrue($cookie->matchesDomain('.baz.com'));
-        $this->assertTrue($cookie->matchesDomain('foo.baz.com'));
-        $this->assertFalse($cookie->matchesDomain('baz.bar.com'));
-        $this->assertTrue($cookie->matchesDomain('baz.com'));
-
-        $cookie->setDomain('.127.0.0.1');
-        $this->assertTrue($cookie->matchesDomain('127.0.0.1'));
-
-        $cookie->setDomain('127.0.0.1');
-        $this->assertTrue($cookie->matchesDomain('127.0.0.1'));
-
-        $cookie->setDomain('.com.');
-        $this->assertFalse($cookie->matchesDomain('baz.com'));
-
-        $cookie->setDomain('.local');
-        $this->assertTrue($cookie->matchesDomain('example.local'));
-    }
-
-    public function testMatchesPath()
-    {
-        $cookie = new SetCookie();
-        $this->assertTrue($cookie->matchesPath('/foo'));
-
-        $cookie->setPath('/foo');
-        $this->assertTrue($cookie->matchesPath('/foo'));
-        $this->assertTrue($cookie->matchesPath('/foo/bar'));
-        $this->assertFalse($cookie->matchesPath('/bar'));
-    }
-
-    public function cookieValidateProvider()
-    {
-        return array(
-            array('foo', 'baz', 'bar', true),
-            array('0', '0', '0', true),
-            array('', 'baz', 'bar', 'The cookie name must not be empty'),
-            array('foo', '', 'bar', 'The cookie value must not be empty'),
-            array('foo', 'baz', '', 'The cookie domain must not be empty'),
-            array("foo\r", 'baz', '0', 'Cookie name must not cannot invalid characters: =,; \t\r\n\013\014'),
-        );
-    }
-
-    /**
-     * @dataProvider cookieValidateProvider
-     */
-    public function testValidatesCookies($name, $value, $domain, $result)
-    {
-        $cookie = new SetCookie(array(
-            'Name'   => $name,
-            'Value'  => $value,
-            'Domain' => $domain
-        ));
-        $this->assertSame($result, $cookie->validate());
-    }
-
-    public function testDoesNotMatchIp()
-    {
-        $cookie = new SetCookie(['Domain' => '192.168.16.']);
-        $this->assertFalse($cookie->matchesDomain('192.168.16.121'));
-    }
-
-    public function testConvertsToString()
-    {
-        $t = 1382916008;
-        $cookie = new SetCookie([
-            'Name' => 'test',
-            'Value' => '123',
-            'Domain' => 'foo.com',
-            'Expires' => $t,
-            'Path' => '/abc',
-            'HttpOnly' => true,
-            'Secure' => true
-        ]);
-        $this->assertEquals(
-            'test=123; Domain=foo.com; Path=/abc; Expires=Sun, 27 Oct 2013 23:20:08 GMT; Secure; HttpOnly',
-            (string) $cookie
-        );
-    }
-
-    /**
-     * Provides the parsed information from a cookie
-     *
-     * @return array
-     */
-    public function cookieParserDataProvider()
-    {
-        return array(
-            array(
-                'ASIHTTPRequestTestCookie=This+is+the+value; expires=Sat, 26-Jul-2008 17:00:42 GMT; path=/tests; domain=allseeing-i.com; PHPSESSID=6c951590e7a9359bcedde25cda73e43c; path=/";',
-                array(
-                    'Domain' => 'allseeing-i.com',
-                    'Path' => '/',
-                    'PHPSESSID' => '6c951590e7a9359bcedde25cda73e43c',
-                    'Max-Age' => NULL,
-                    'Expires' => 'Sat, 26-Jul-2008 17:00:42 GMT',
-                    'Secure' => NULL,
-                    'Discard' => NULL,
-                    'Name' => 'ASIHTTPRequestTestCookie',
-                    'Value' => 'This+is+the+value',
-                    'HttpOnly' => false
-                )
-            ),
-            array('', []),
-            array('foo', []),
-            // Test setting a blank value for a cookie
-            array(array(
-                'foo=', 'foo =', 'foo =;', 'foo= ;', 'foo =', 'foo= '),
-                array(
-                    'Name' => 'foo',
-                    'Value' => '',
-                    'Discard' => null,
-                    'Domain' => null,
-                    'Expires' => null,
-                    'Max-Age' => null,
-                    'Path' => '/',
-                    'Secure' => null,
-                    'HttpOnly' => false
-                )
-            ),
-            // Test setting a value and removing quotes
-            array(array(
-                'foo=1', 'foo =1', 'foo =1;', 'foo=1 ;', 'foo =1', 'foo= 1', 'foo = 1 ;', 'foo="1"', 'foo="1";', 'foo= "1";'),
-                array(
-                    'Name' => 'foo',
-                    'Value' => '1',
-                    'Discard' => null,
-                    'Domain' => null,
-                    'Expires' => null,
-                    'Max-Age' => null,
-                    'Path' => '/',
-                    'Secure' => null,
-                    'HttpOnly' => false
-                )
-            ),
-            // Some of the following tests are based on http://framework.zend.com/svn/framework/standard/trunk/tests/Zend/Http/CookieTest.php
-            array(
-                'justacookie=foo; domain=example.com',
-                array(
-                    'Name' => 'justacookie',
-                    'Value' => 'foo',
-                    'Domain' => 'example.com',
-                    'Discard' => null,
-                    'Expires' => null,
-                    'Max-Age' => null,
-                    'Path' => '/',
-                    'Secure' => null,
-                    'HttpOnly' => false
-                )
-            ),
-            array(
-                'expires=tomorrow; secure; path=/Space Out/; expires=Tue, 21-Nov-2006 08:33:44 GMT; domain=.example.com',
-                array(
-                    'Name' => 'expires',
-                    'Value' => 'tomorrow',
-                    'Domain' => '.example.com',
-                    'Path' => '/Space Out/',
-                    'Expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
-                    'Discard' => null,
-                    'Secure' => true,
-                    'Max-Age' => null,
-                    'HttpOnly' => false
-                )
-            ),
-            array(
-                'domain=unittests; expires=Tue, 21-Nov-2006 08:33:44 GMT; domain=example.com; path=/some value/',
-                array(
-                    'Name' => 'domain',
-                    'Value' => 'unittests',
-                    'Domain' => 'example.com',
-                    'Path' => '/some value/',
-                    'Expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
-                    'Secure' => false,
-                    'Discard' => null,
-                    'Max-Age' => null,
-                    'HttpOnly' => false
-                )
-            ),
-            array(
-                'path=indexAction; path=/; domain=.foo.com; expires=Tue, 21-Nov-2006 08:33:44 GMT',
-                array(
-                    'Name' => 'path',
-                    'Value' => 'indexAction',
-                    'Domain' => '.foo.com',
-                    'Path' => '/',
-                    'Expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
-                    'Secure' => false,
-                    'Discard' => null,
-                    'Max-Age' => null,
-                    'HttpOnly' => false
-                )
-            ),
-            array(
-                'secure=sha1; secure; SECURE; domain=some.really.deep.domain.com; version=1; Max-Age=86400',
-                array(
-                    'Name' => 'secure',
-                    'Value' => 'sha1',
-                    'Domain' => 'some.really.deep.domain.com',
-                    'Path' => '/',
-                    'Secure' => true,
-                    'Discard' => null,
-                    'Expires' => time() + 86400,
-                    'Max-Age' => 86400,
-                    'HttpOnly' => false,
-                    'version' => '1'
-                )
-            ),
-            array(
-                'PHPSESSID=123456789+abcd%2Cef; secure; discard; domain=.localdomain; path=/foo/baz; expires=Tue, 21-Nov-2006 08:33:44 GMT;',
-                array(
-                    'Name' => 'PHPSESSID',
-                    'Value' => '123456789+abcd%2Cef',
-                    'Domain' => '.localdomain',
-                    'Path' => '/foo/baz',
-                    'Expires' => 'Tue, 21-Nov-2006 08:33:44 GMT',
-                    'Secure' => true,
-                    'Discard' => true,
-                    'Max-Age' => null,
-                    'HttpOnly' => false
-                )
-            ),
-        );
-    }
-
-    /**
-     * @dataProvider cookieParserDataProvider
-     */
-    public function testParseCookie($cookie, $parsed)
-    {
-        foreach ((array) $cookie as $v) {
-            $c = SetCookie::fromString($v);
-            $p = $c->toArray();
-
-            if (isset($p['Expires'])) {
-                // Remove expires values from the assertion if they are relatively equal
-                if (abs($p['Expires'] != strtotime($parsed['Expires'])) < 40) {
-                    unset($p['Expires']);
-                    unset($parsed['Expires']);
-                }
-            }
-
-            if (!empty($parsed)) {
-                foreach ($parsed as $key => $value) {
-                    $this->assertEquals($parsed[$key], $p[$key], 'Comparing ' . $key . ' ' . var_export($value, true) . ' : ' . var_export($parsed, true) . ' | ' . var_export($p, true));
-                }
-                foreach ($p as $key => $value) {
-                    $this->assertEquals($p[$key], $parsed[$key], 'Comparing ' . $key . ' ' . var_export($value, true) . ' : ' . var_export($parsed, true) . ' | ' . var_export($p, true));
-                }
-            } else {
-                $this->assertEquals([
-                    'Name' => null,
-                    'Value' => null,
-                    'Domain' => null,
-                    'Path' => '/',
-                    'Max-Age' => null,
-                    'Expires' => null,
-                    'Secure' => false,
-                    'Discard' => false,
-                    'HttpOnly' => false,
-                ], $p);
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
deleted file mode 100644
index b8c06f1..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-class AbstractEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testStopsPropagation()
-    {
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractEvent')
-            ->getMockForAbstractClass();
-        $this->assertFalse($e->isPropagationStopped());
-        $e->stopPropagation();
-        $this->assertTrue($e->isPropagationStopped());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
deleted file mode 100644
index 50536c5..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Message\Request;
-
-/**
- * @covers GuzzleHttp\Event\AbstractRequestEvent
- */
-class AbstractRequestEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasTransactionMethods()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRequestEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $this->assertSame($t->client, $e->getClient());
-        $this->assertSame($t->request, $e->getRequest());
-    }
-
-    public function testHasTransaction()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRequestEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $r = new \ReflectionMethod($e, 'getTransaction');
-        $r->setAccessible(true);
-        $this->assertSame($t, $r->invoke($e));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php
deleted file mode 100644
index 6a39d8b..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Message\Request;
-
-/**
- * @covers GuzzleHttp\Event\AbstractRetryableEvent
- */
-class AbstractRetryableEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCanRetry()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->transferInfo = ['foo' => 'bar'];
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRetryableEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $e->retry();
-        $this->assertTrue($e->isPropagationStopped());
-        $this->assertEquals('retry', $t->state);
-    }
-
-    public function testCanRetryAfterDelay()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->transferInfo = ['foo' => 'bar'];
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRetryableEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $e->retry(10);
-        $this->assertTrue($e->isPropagationStopped());
-        $this->assertEquals('retry', $t->state);
-        $this->assertEquals(10, $t->request->getConfig()->get('delay'));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php
deleted file mode 100644
index 5313c8e..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Message\Request;
-
-/**
- * @covers GuzzleHttp\Event\AbstractTransferEvent
- */
-class AbstractTransferEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasStats()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->transferInfo = ['foo' => 'bar'];
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $this->assertNull($e->getTransferInfo('baz'));
-        $this->assertEquals('bar', $e->getTransferInfo('foo'));
-        $this->assertEquals($t->transferInfo, $e->getTransferInfo());
-    }
-
-    public function testHasResponse()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->response = new Response(200);
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $this->assertTrue($e->hasResponse());
-        $this->assertSame($t->response, $e->getResponse());
-    }
-
-    public function testCanInterceptWithResponse()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $r = new Response(200);
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $e->intercept($r);
-        $this->assertSame($t->response, $r);
-        $this->assertSame($t->response, $e->getResponse());
-        $this->assertTrue($e->isPropagationStopped());
-    }
-
-    public function testReturnsNumberOfRetries()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->retries = 2;
-        $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
-            ->setConstructorArgs([$t])
-            ->getMockForAbstractClass();
-        $this->assertEquals(2, $e->getRetryCount());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
deleted file mode 100644
index 469e4e2..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Event\BeforeEvent
- */
-class BeforeEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testInterceptsWithEvent()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->exception = new \Exception('foo');
-        $e = new BeforeEvent($t);
-        $response = new Response(200);
-        $e->intercept($response);
-        $this->assertTrue($e->isPropagationStopped());
-        $this->assertSame($t->response, $response);
-        $this->assertNull($t->exception);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php
deleted file mode 100644
index 5b7061b..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php
+++ /dev/null
@@ -1,363 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Event\Emitter;
-use GuzzleHttp\Event\EventInterface;
-use GuzzleHttp\Event\SubscriberInterface;
-
-/**
- * @link https://github.com/symfony/symfony/blob/master/src/Symfony/Component/EventDispatcher/Tests/EventDispatcherTest.php Based on this test.
- */
-class EmitterTest extends \PHPUnit_Framework_TestCase
-{
-    /* Some pseudo events */
-    const preFoo = 'pre.foo';
-    const postFoo = 'post.foo';
-    const preBar = 'pre.bar';
-    const postBar = 'post.bar';
-
-    /** @var Emitter */
-    private $emitter;
-    private $listener;
-
-    protected function setUp()
-    {
-        $this->emitter = new Emitter();
-        $this->listener = new TestEventListener();
-    }
-
-    protected function tearDown()
-    {
-        $this->emitter = null;
-        $this->listener = null;
-    }
-
-    public function testInitialState()
-    {
-        $this->assertEquals(array(), $this->emitter->listeners());
-    }
-
-    public function testAddListener()
-    {
-        $this->emitter->on('pre.foo', array($this->listener, 'preFoo'));
-        $this->emitter->on('post.foo', array($this->listener, 'postFoo'));
-        $this->assertTrue($this->emitter->hasListeners(self::preFoo));
-        $this->assertTrue($this->emitter->hasListeners(self::preFoo));
-        $this->assertCount(1, $this->emitter->listeners(self::postFoo));
-        $this->assertCount(1, $this->emitter->listeners(self::postFoo));
-        $this->assertCount(2, $this->emitter->listeners());
-    }
-
-    public function testGetListenersSortsByPriority()
-    {
-        $listener1 = new TestEventListener();
-        $listener2 = new TestEventListener();
-        $listener3 = new TestEventListener();
-        $listener1->name = '1';
-        $listener2->name = '2';
-        $listener3->name = '3';
-
-        $this->emitter->on('pre.foo', array($listener1, 'preFoo'), -10);
-        $this->emitter->on('pre.foo', array($listener2, 'preFoo'), 10);
-        $this->emitter->on('pre.foo', array($listener3, 'preFoo'));
-
-        $expected = array(
-            array($listener2, 'preFoo'),
-            array($listener3, 'preFoo'),
-            array($listener1, 'preFoo'),
-        );
-
-        $this->assertSame($expected, $this->emitter->listeners('pre.foo'));
-    }
-
-    public function testGetAllListenersSortsByPriority()
-    {
-        $listener1 = new TestEventListener();
-        $listener2 = new TestEventListener();
-        $listener3 = new TestEventListener();
-        $listener4 = new TestEventListener();
-        $listener5 = new TestEventListener();
-        $listener6 = new TestEventListener();
-
-        $this->emitter->on('pre.foo', [$listener1, 'preFoo'], -10);
-        $this->emitter->on('pre.foo', [$listener2, 'preFoo']);
-        $this->emitter->on('pre.foo', [$listener3, 'preFoo'], 10);
-        $this->emitter->on('post.foo', [$listener4, 'preFoo'], -10);
-        $this->emitter->on('post.foo', [$listener5, 'preFoo']);
-        $this->emitter->on('post.foo', [$listener6, 'preFoo'], 10);
-
-        $expected = [
-            'pre.foo'  => [[$listener3, 'preFoo'], [$listener2, 'preFoo'], [$listener1, 'preFoo']],
-            'post.foo' => [[$listener6, 'preFoo'], [$listener5, 'preFoo'], [$listener4, 'preFoo']],
-        ];
-
-        $this->assertSame($expected, $this->emitter->listeners());
-    }
-
-    public function testDispatch()
-    {
-        $this->emitter->on('pre.foo', array($this->listener, 'preFoo'));
-        $this->emitter->on('post.foo', array($this->listener, 'postFoo'));
-        $this->emitter->emit(self::preFoo, $this->getEvent());
-        $this->assertTrue($this->listener->preFooInvoked);
-        $this->assertFalse($this->listener->postFooInvoked);
-        $this->assertInstanceOf('GuzzleHttp\Event\EventInterface', $this->emitter->emit(self::preFoo, $this->getEvent()));
-        $event = $this->getEvent();
-        $return = $this->emitter->emit(self::preFoo, $event);
-        $this->assertSame($event, $return);
-    }
-
-    public function testDispatchForClosure()
-    {
-        $invoked = 0;
-        $listener = function () use (&$invoked) {
-            $invoked++;
-        };
-        $this->emitter->on('pre.foo', $listener);
-        $this->emitter->on('post.foo', $listener);
-        $this->emitter->emit(self::preFoo, $this->getEvent());
-        $this->assertEquals(1, $invoked);
-    }
-
-    public function testStopEventPropagation()
-    {
-        $otherListener = new TestEventListener();
-
-        // postFoo() stops the propagation, so only one listener should
-        // be executed
-        // Manually set priority to enforce $this->listener to be called first
-        $this->emitter->on('post.foo', array($this->listener, 'postFoo'), 10);
-        $this->emitter->on('post.foo', array($otherListener, 'preFoo'));
-        $this->emitter->emit(self::postFoo, $this->getEvent());
-        $this->assertTrue($this->listener->postFooInvoked);
-        $this->assertFalse($otherListener->postFooInvoked);
-    }
-
-    public function testDispatchByPriority()
-    {
-        $invoked = array();
-        $listener1 = function () use (&$invoked) {
-            $invoked[] = '1';
-        };
-        $listener2 = function () use (&$invoked) {
-            $invoked[] = '2';
-        };
-        $listener3 = function () use (&$invoked) {
-            $invoked[] = '3';
-        };
-        $this->emitter->on('pre.foo', $listener1, -10);
-        $this->emitter->on('pre.foo', $listener2);
-        $this->emitter->on('pre.foo', $listener3, 10);
-        $this->emitter->emit(self::preFoo, $this->getEvent());
-        $this->assertEquals(array('3', '2', '1'), $invoked);
-    }
-
-    public function testRemoveListener()
-    {
-        $this->emitter->on('pre.bar', [$this->listener, 'preFoo']);
-        $this->assertNotEmpty($this->emitter->listeners(self::preBar));
-        $this->emitter->removeListener('pre.bar', [$this->listener, 'preFoo']);
-        $this->assertEmpty($this->emitter->listeners(self::preBar));
-        $this->emitter->removeListener('notExists', [$this->listener, 'preFoo']);
-    }
-
-    public function testAddSubscriber()
-    {
-        $eventSubscriber = new TestEventSubscriber();
-        $this->emitter->attach($eventSubscriber);
-        $this->assertNotEmpty($this->emitter->listeners(self::preFoo));
-        $this->assertNotEmpty($this->emitter->listeners(self::postFoo));
-    }
-
-    public function testAddSubscriberWithMultiple()
-    {
-        $eventSubscriber = new TestEventSubscriberWithMultiple();
-        $this->emitter->attach($eventSubscriber);
-        $listeners = $this->emitter->listeners('pre.foo');
-        $this->assertNotEmpty($this->emitter->listeners(self::preFoo));
-        $this->assertCount(2, $listeners);
-    }
-
-    public function testAddSubscriberWithPriorities()
-    {
-        $eventSubscriber = new TestEventSubscriber();
-        $this->emitter->attach($eventSubscriber);
-
-        $eventSubscriber = new TestEventSubscriberWithPriorities();
-        $this->emitter->attach($eventSubscriber);
-
-        $listeners = $this->emitter->listeners('pre.foo');
-        $this->assertNotEmpty($this->emitter->listeners(self::preFoo));
-        $this->assertCount(2, $listeners);
-        $this->assertInstanceOf('GuzzleHttp\Tests\Event\TestEventSubscriberWithPriorities', $listeners[0][0]);
-    }
-
-    public function testdetach()
-    {
-        $eventSubscriber = new TestEventSubscriber();
-        $this->emitter->attach($eventSubscriber);
-        $this->assertNotEmpty($this->emitter->listeners(self::preFoo));
-        $this->assertNotEmpty($this->emitter->listeners(self::postFoo));
-        $this->emitter->detach($eventSubscriber);
-        $this->assertEmpty($this->emitter->listeners(self::preFoo));
-        $this->assertEmpty($this->emitter->listeners(self::postFoo));
-    }
-
-    public function testdetachWithPriorities()
-    {
-        $eventSubscriber = new TestEventSubscriberWithPriorities();
-        $this->emitter->attach($eventSubscriber);
-        $this->assertNotEmpty($this->emitter->listeners(self::preFoo));
-        $this->assertNotEmpty($this->emitter->listeners(self::postFoo));
-        $this->emitter->detach($eventSubscriber);
-        $this->assertEmpty($this->emitter->listeners(self::preFoo));
-        $this->assertEmpty($this->emitter->listeners(self::postFoo));
-    }
-
-    public function testEventReceivesEventNameAsArgument()
-    {
-        $listener = new TestWithDispatcher();
-        $this->emitter->on('test', array($listener, 'foo'));
-        $this->assertNull($listener->name);
-        $this->emitter->emit('test', $this->getEvent());
-        $this->assertEquals('test', $listener->name);
-    }
-
-    /**
-     * @see https://bugs.php.net/bug.php?id=62976
-     *
-     * This bug affects:
-     *  - The PHP 5.3 branch for versions < 5.3.18
-     *  - The PHP 5.4 branch for versions < 5.4.8
-     *  - The PHP 5.5 branch is not affected
-     */
-    public function testWorkaroundForPhpBug62976()
-    {
-        $dispatcher = new Emitter();
-        $dispatcher->on('bug.62976', new CallableClass());
-        $dispatcher->removeListener('bug.62976', function () {});
-        $this->assertNotEmpty($dispatcher->listeners('bug.62976'));
-    }
-
-    public function testRegistersEventsOnce()
-    {
-        $this->emitter->once('pre.foo', array($this->listener, 'preFoo'));
-        $this->emitter->on('pre.foo', array($this->listener, 'preFoo'));
-        $this->assertCount(2, $this->emitter->listeners(self::preFoo));
-        $this->emitter->emit(self::preFoo, $this->getEvent());
-        $this->assertTrue($this->listener->preFooInvoked);
-        $this->assertCount(1, $this->emitter->listeners(self::preFoo));
-    }
-
-    public function testReturnsEmptyArrayForNonExistentEvent()
-    {
-        $this->assertEquals([], $this->emitter->listeners('doesnotexist'));
-    }
-
-    public function testCanAddFirstAndLastListeners()
-    {
-        $b = '';
-        $this->emitter->on('foo', function () use (&$b) { $b .= 'a'; }, 'first'); // 1
-        $this->emitter->on('foo', function () use (&$b) { $b .= 'b'; }, 'last');  // 0
-        $this->emitter->on('foo', function () use (&$b) { $b .= 'c'; }, 'first'); // 2
-        $this->emitter->on('foo', function () use (&$b) { $b .= 'd'; }, 'first'); // 3
-        $this->emitter->on('foo', function () use (&$b) { $b .= 'e'; }, 'first'); // 4
-        $this->emitter->on('foo', function () use (&$b) { $b .= 'f'; });          // 0
-        $this->emitter->emit('foo', $this->getEvent());
-        $this->assertEquals('edcabf', $b);
-    }
-
-    /**
-     * @return \GuzzleHttp\Event\EventInterface
-     */
-    private function getEvent()
-    {
-        return $this->getMockBuilder('GuzzleHttp\Event\AbstractEvent')
-            ->getMockForAbstractClass();
-    }
-}
-
-class CallableClass
-{
-    public function __invoke()
-    {
-    }
-}
-
-class TestEventListener
-{
-    public $preFooInvoked = false;
-    public $postFooInvoked = false;
-
-    /* Listener methods */
-
-    public function preFoo(EventInterface $e)
-    {
-        $this->preFooInvoked = true;
-    }
-
-    public function postFoo(EventInterface $e)
-    {
-        $this->postFooInvoked = true;
-
-        $e->stopPropagation();
-    }
-
-    /**
-     * @expectedException \PHPUnit_Framework_Error_Deprecated
-     */
-    public function testHasDeprecatedAddListener()
-    {
-        $emitter = new Emitter();
-        $emitter->addListener('foo', function () {});
-    }
-
-    /**
-     * @expectedException \PHPUnit_Framework_Error_Deprecated
-     */
-    public function testHasDeprecatedAddSubscriber()
-    {
-        $emitter = new Emitter();
-        $emitter->addSubscriber('foo', new TestEventSubscriber());
-    }
-}
-
-class TestWithDispatcher
-{
-    public $name;
-
-    public function foo(EventInterface $e, $name)
-    {
-        $this->name = $name;
-    }
-}
-
-class TestEventSubscriber extends TestEventListener implements SubscriberInterface
-{
-    public function getEvents()
-    {
-        return [
-            'pre.foo' => ['preFoo'],
-            'post.foo' => ['postFoo']
-        ];
-    }
-}
-
-class TestEventSubscriberWithPriorities extends TestEventListener implements SubscriberInterface
-{
-    public function getEvents()
-    {
-        return [
-            'pre.foo' => ['preFoo', 10],
-            'post.foo' => ['postFoo']
-        ];
-    }
-}
-
-class TestEventSubscriberWithMultiple extends TestEventListener implements SubscriberInterface
-{
-    public function getEvents()
-    {
-        return ['pre.foo' => [['preFoo', 10],['preFoo', 20]]];
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php
deleted file mode 100644
index e91b7f0..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-
-/**
- * @covers GuzzleHttp\Event\ErrorEvent
- */
-class ErrorEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testInterceptsWithEvent()
-    {
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $except = new RequestException('foo', $t->request);
-        $t->exception = $except;
-        $e = new ErrorEvent($t);
-        $this->assertSame($e->getException(), $t->exception);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php
deleted file mode 100644
index 4709918..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Event\HasEmitterInterface;
-use GuzzleHttp\Event\HasEmitterTrait;
-
-class AbstractHasEmitter implements HasEmitterInterface
-{
-    use HasEmitterTrait;
-}
-
-/**
- * @covers GuzzleHttp\Event\HasEmitterTrait
- */
-class HasEmitterTraitTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHelperAttachesSubscribers()
-    {
-        $mock = $this->getMockBuilder('GuzzleHttp\Tests\Event\AbstractHasEmitter')
-            ->getMockForAbstractClass();
-
-        $result = $mock->getEmitter();
-        $this->assertInstanceOf('GuzzleHttp\Event\EmitterInterface', $result);
-        $result2 = $mock->getEmitter();
-        $this->assertSame($result, $result2);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
deleted file mode 100644
index c066788..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Event\HasEmitterInterface;
-use GuzzleHttp\Event\HasEmitterTrait;
-use GuzzleHttp\Event\ListenerAttacherTrait;
-
-class ObjectWithEvents implements HasEmitterInterface
-{
-    use HasEmitterTrait, ListenerAttacherTrait;
-
-    public $listeners = [];
-
-    public function __construct(array $args = [])
-    {
-        $this->listeners = $this->prepareListeners($args, ['foo', 'bar']);
-        $this->attachListeners($this, $this->listeners);
-    }
-}
-
-class ListenerAttacherTraitTest extends \PHPUnit_Framework_TestCase
-{
-    public function testRegistersEvents()
-    {
-        $fn = function () {};
-        $o = new ObjectWithEvents([
-            'foo' => $fn,
-            'bar' => $fn,
-        ]);
-
-        $this->assertEquals([
-            ['name' => 'foo', 'fn' => $fn, 'priority' => 0, 'once' => false],
-            ['name' => 'bar', 'fn' => $fn, 'priority' => 0, 'once' => false],
-        ], $o->listeners);
-
-        $this->assertCount(1, $o->getEmitter()->listeners('foo'));
-        $this->assertCount(1, $o->getEmitter()->listeners('bar'));
-    }
-
-    public function testRegistersEventsWithPriorities()
-    {
-        $fn = function () {};
-        $o = new ObjectWithEvents([
-            'foo' => ['fn' => $fn, 'priority' => 99, 'once' => true],
-            'bar' => ['fn' => $fn, 'priority' => 50],
-        ]);
-
-        $this->assertEquals([
-            ['name' => 'foo', 'fn' => $fn, 'priority' => 99, 'once' => true],
-            ['name' => 'bar', 'fn' => $fn, 'priority' => 50, 'once' => false],
-        ], $o->listeners);
-    }
-
-    public function testRegistersMultipleEvents()
-    {
-        $fn = function () {};
-        $eventArray = [['fn' => $fn], ['fn' => $fn]];
-        $o = new ObjectWithEvents([
-            'foo' => $eventArray,
-            'bar' => $eventArray,
-        ]);
-
-        $this->assertEquals([
-            ['name' => 'foo', 'fn' => $fn, 'priority' => 0, 'once' => false],
-            ['name' => 'foo', 'fn' => $fn, 'priority' => 0, 'once' => false],
-            ['name' => 'bar', 'fn' => $fn, 'priority' => 0, 'once' => false],
-            ['name' => 'bar', 'fn' => $fn, 'priority' => 0, 'once' => false],
-        ], $o->listeners);
-
-        $this->assertCount(2, $o->getEmitter()->listeners('foo'));
-        $this->assertCount(2, $o->getEmitter()->listeners('bar'));
-    }
-
-    public function testRegistersEventsWithOnce()
-    {
-        $called = 0;
-        $fn = function () use (&$called) { $called++; };
-        $o = new ObjectWithEvents(['foo' => ['fn' => $fn, 'once' => true]]);
-        $ev = $this->getMock('GuzzleHttp\Event\EventInterface');
-        $o->getEmitter()->emit('foo', $ev);
-        $o->getEmitter()->emit('foo', $ev);
-        $this->assertEquals(1, $called);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesEvents()
-    {
-        $o = new ObjectWithEvents(['foo' => 'bar']);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php
deleted file mode 100644
index 664f8b6..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ProgressEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Transaction;
-
-/**
- * @covers GuzzleHttp\Event\ProgressEvent
- */
-class ProgressEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testContainsNumbers()
-    {
-        $t = new Transaction(new Client(), new Request('GET', 'http://a.com'));
-        $p = new ProgressEvent($t, 2, 1, 3, 0);
-        $this->assertSame($t->request, $p->getRequest());
-        $this->assertSame($t->client, $p->getClient());
-        $this->assertEquals(2, $p->downloadSize);
-        $this->assertEquals(1, $p->downloaded);
-        $this->assertEquals(3, $p->uploadSize);
-        $this->assertEquals(0, $p->uploaded);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
deleted file mode 100644
index b3b9666..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Event\RequestEvents;
-
-/**
- * @covers GuzzleHttp\Event\RequestEvents
- */
-class RequestEventsTest extends \PHPUnit_Framework_TestCase
-{
-    public function prepareEventProvider()
-    {
-        $cb = function () {};
-
-        return [
-            [[], ['complete'], $cb, ['complete' => [$cb]]],
-            [
-                ['complete' => $cb],
-                ['complete'],
-                $cb,
-                ['complete' => [$cb, $cb]]
-            ],
-            [
-                ['prepare' => []],
-                ['error', 'foo'],
-                $cb,
-                [
-                    'prepare' => [],
-                    'error'   => [$cb],
-                    'foo'     => [$cb]
-                ]
-            ],
-            [
-                ['prepare' => []],
-                ['prepare'],
-                $cb,
-                [
-                    'prepare' => [$cb]
-                ]
-            ],
-            [
-                ['prepare' => ['fn' => $cb]],
-                ['prepare'], $cb,
-                [
-                    'prepare' => [
-                        ['fn' => $cb],
-                        $cb
-                    ]
-                ]
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider prepareEventProvider
-     */
-    public function testConvertsEventArrays(
-        array $in,
-        array $events,
-        $add,
-        array $out
-    ) {
-        $result = RequestEvents::convertEventArray($in, $events, $add);
-        $this->assertEquals($out, $result);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesEventFormat()
-    {
-        RequestEvents::convertEventArray(['foo' => false], ['foo'], []);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Exception/ParseExceptionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Exception/ParseExceptionTest.php
deleted file mode 100644
index 4ff9bfb..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Exception/ParseExceptionTest.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Exception\ParseException;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Exception\ParseException
- */
-class ParseExceptionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasResponse()
-    {
-        $res = new Response(200);
-        $e = new ParseException('foo', $res);
-        $this->assertSame($res, $e->getResponse());
-        $this->assertEquals('foo', $e->getMessage());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
deleted file mode 100644
index bea9077..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Ring\Exception\ConnectException;
-
-/**
- * @covers GuzzleHttp\Exception\RequestException
- */
-class RequestExceptionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasRequestAndResponse()
-    {
-        $req = new Request('GET', '/');
-        $res = new Response(200);
-        $e = new RequestException('foo', $req, $res);
-        $this->assertSame($req, $e->getRequest());
-        $this->assertSame($res, $e->getResponse());
-        $this->assertTrue($e->hasResponse());
-        $this->assertEquals('foo', $e->getMessage());
-    }
-
-    public function testCreatesGenerateException()
-    {
-        $e = RequestException::create(new Request('GET', '/'));
-        $this->assertEquals('Error completing request', $e->getMessage());
-        $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e);
-    }
-
-    public function testCreatesClientErrorResponseException()
-    {
-        $e = RequestException::create(new Request('GET', '/'), new Response(400));
-        $this->assertEquals(
-            'Client error response [url] / [status code] 400 [reason phrase] Bad Request',
-            $e->getMessage()
-        );
-        $this->assertInstanceOf('GuzzleHttp\Exception\ClientException', $e);
-    }
-
-    public function testCreatesServerErrorResponseException()
-    {
-        $e = RequestException::create(new Request('GET', '/'), new Response(500));
-        $this->assertEquals(
-            'Server error response [url] / [status code] 500 [reason phrase] Internal Server Error',
-            $e->getMessage()
-        );
-        $this->assertInstanceOf('GuzzleHttp\Exception\ServerException', $e);
-    }
-
-    public function testCreatesGenericErrorResponseException()
-    {
-        $e = RequestException::create(new Request('GET', '/'), new Response(600));
-        $this->assertEquals(
-            'Unsuccessful response [url] / [status code] 600 [reason phrase] ',
-            $e->getMessage()
-        );
-        $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e);
-    }
-
-    public function testHasStatusCodeAsExceptionCode() {
-        $e = RequestException::create(new Request('GET', '/'), new Response(442));
-        $this->assertEquals(442, $e->getCode());
-    }
-
-    public function testWrapsRequestExceptions()
-    {
-        $e = new \Exception('foo');
-        $r = new Request('GET', 'http://www.oo.com');
-        $ex = RequestException::wrapException($r, $e);
-        $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $ex);
-        $this->assertSame($e, $ex->getPrevious());
-    }
-
-    public function testWrapsConnectExceptions()
-    {
-        $e = new ConnectException('foo');
-        $r = new Request('GET', 'http://www.oo.com');
-        $ex = RequestException::wrapException($r, $e);
-        $this->assertInstanceOf('GuzzleHttp\Exception\ConnectException', $ex);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Exception/XmlParseExceptionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Exception/XmlParseExceptionTest.php
deleted file mode 100644
index 51b9742..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Exception/XmlParseExceptionTest.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace GuzzleHttp\tests\Exception;
-
-use GuzzleHttp\Exception\XmlParseException;
-
-/**
- * @covers GuzzleHttp\Exception\XmlParseException
- */
-class XmlParseExceptionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasError()
-    {
-        $error = new \LibXMLError();
-        $e = new XmlParseException('foo', null, null, $error);
-        $this->assertSame($error, $e->getError());
-        $this->assertEquals('foo', $e->getMessage());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/IntegrationTest.php b/core/vendor/guzzlehttp/guzzle/tests/IntegrationTest.php
deleted file mode 100644
index e26c64d..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/IntegrationTest.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\AbstractTransferEvent;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\EndEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Pool;
-
-class IntegrationTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @issue https://github.com/guzzle/guzzle/issues/867
-     */
-    public function testDoesNotFailInEventSystemForNetworkError()
-    {
-        $c = new Client();
-        $r = $c->createRequest(
-            'GET',
-            Server::$url,
-            [
-                'timeout'         => 1,
-                'connect_timeout' => 1,
-                'proxy'           => 'http://127.0.0.1:123/foo'
-            ]
-        );
-
-        $events = [];
-        $fn = function(AbstractTransferEvent $event) use (&$events) {
-            $events[] = [
-                get_class($event),
-                $event->hasResponse(),
-                $event->getResponse()
-            ];
-        };
-
-        $pool = new Pool($c, [$r], [
-            'error'    => $fn,
-            'end'      => $fn
-        ]);
-
-        $pool->wait();
-
-        $this->assertCount(2, $events);
-        $this->assertEquals('GuzzleHttp\Event\ErrorEvent', $events[0][0]);
-        $this->assertFalse($events[0][1]);
-        $this->assertNull($events[0][2]);
-
-        $this->assertEquals('GuzzleHttp\Event\EndEvent', $events[1][0]);
-        $this->assertFalse($events[1][1]);
-        $this->assertNull($events[1][2]);
-    }
-
-    /**
-     * @issue https://github.com/guzzle/guzzle/issues/866
-     */
-    public function testProperyGetsTransferStats()
-    {
-        $transfer = [];
-        Server::enqueue([new Response(200)]);
-        $c = new Client();
-        $response = $c->get(Server::$url . '/foo', [
-            'events' => [
-                'end' => function (EndEvent $e) use (&$transfer) {
-                    $transfer = $e->getTransferInfo();
-                }
-            ]
-        ]);
-        $this->assertEquals(Server::$url . '/foo', $response->getEffectiveUrl());
-        $this->assertNotEmpty($transfer);
-        $this->assertArrayHasKey('url', $transfer);
-    }
-
-    public function testNestedFutureResponsesAreResolvedWhenSending()
-    {
-        $c = new Client();
-        $total = 3;
-        Server::enqueue([
-            new Response(200),
-            new Response(201),
-            new Response(202)
-        ]);
-        $c->getEmitter()->on(
-            'complete',
-            function (CompleteEvent $e) use (&$total) {
-                if (--$total) {
-                    $e->retry();
-                }
-            }
-        );
-        $response = $c->get(Server::$url);
-        $this->assertEquals(202, $response->getStatusCode());
-        $this->assertEquals('GuzzleHttp\Message\Response', get_class($response));
-    }
-
-    public function testNestedFutureErrorsAreResolvedWhenSending()
-    {
-        $c = new Client();
-        $total = 3;
-        Server::enqueue([
-            new Response(500),
-            new Response(501),
-            new Response(502)
-        ]);
-        $c->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$total) {
-                if (--$total) {
-                    $e->retry();
-                }
-            }
-        );
-        try {
-            $c->get(Server::$url);
-            $this->fail('Did not throw!');
-        } catch (RequestException $e) {
-            $this->assertEquals(502, $e->getResponse()->getStatusCode());
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
deleted file mode 100644
index f02a576..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Message\AbstractMessage;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\Stream;
-
-/**
- * @covers \GuzzleHttp\Message\AbstractMessage
- */
-class AbstractMessageTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasProtocolVersion()
-    {
-        $m = new Request('GET', '/');
-        $this->assertEquals(1.1, $m->getProtocolVersion());
-    }
-
-    public function testHasHeaders()
-    {
-        $m = new Request('GET', 'http://foo.com');
-        $this->assertFalse($m->hasHeader('foo'));
-        $m->addHeader('foo', 'bar');
-        $this->assertTrue($m->hasHeader('foo'));
-    }
-
-    public function testInitializesMessageWithProtocolVersionOption()
-    {
-        $m = new Request('GET', '/', [], null, [
-            'protocol_version' => '10'
-        ]);
-        $this->assertEquals(10, $m->getProtocolVersion());
-    }
-
-    public function testHasBody()
-    {
-        $m = new Request('GET', 'http://foo.com');
-        $this->assertNull($m->getBody());
-        $s = Stream::factory('test');
-        $m->setBody($s);
-        $this->assertSame($s, $m->getBody());
-        $this->assertFalse($m->hasHeader('Content-Length'));
-    }
-
-    public function testCanRemoveBodyBySettingToNullAndRemovesCommonBodyHeaders()
-    {
-        $m = new Request('GET', 'http://foo.com');
-        $m->setBody(Stream::factory('foo'));
-        $m->setHeader('Content-Length', 3);
-        $m->setHeader('Transfer-Encoding', 'chunked');
-        $m->setBody(null);
-        $this->assertNull($m->getBody());
-        $this->assertFalse($m->hasHeader('Content-Length'));
-        $this->assertFalse($m->hasHeader('Transfer-Encoding'));
-    }
-
-    public function testCastsToString()
-    {
-        $m = new Request('GET', 'http://foo.com');
-        $m->setHeader('foo', 'bar');
-        $m->setBody(Stream::factory('baz'));
-        $this->assertEquals("GET / HTTP/1.1\r\nHost: foo.com\r\nfoo: bar\r\n\r\nbaz", (string) $m);
-    }
-
-    public function parseParamsProvider()
-    {
-        $res1 = array(
-            array(
-                '<http:/.../front.jpeg>',
-                'rel' => 'front',
-                'type' => 'image/jpeg',
-            ),
-            array(
-                '<http://.../back.jpeg>',
-                'rel' => 'back',
-                'type' => 'image/jpeg',
-            ),
-        );
-
-        return array(
-            array(
-                '<http:/.../front.jpeg>; rel="front"; type="image/jpeg", <http://.../back.jpeg>; rel=back; type="image/jpeg"',
-                $res1
-            ),
-            array(
-                '<http:/.../front.jpeg>; rel="front"; type="image/jpeg",<http://.../back.jpeg>; rel=back; type="image/jpeg"',
-                $res1
-            ),
-            array(
-                'foo="baz"; bar=123, boo, test="123", foobar="foo;bar"',
-                array(
-                    array('foo' => 'baz', 'bar' => '123'),
-                    array('boo'),
-                    array('test' => '123'),
-                    array('foobar' => 'foo;bar')
-                )
-            ),
-            array(
-                '<http://.../side.jpeg?test=1>; rel="side"; type="image/jpeg",<http://.../side.jpeg?test=2>; rel=side; type="image/jpeg"',
-                array(
-                    array('<http://.../side.jpeg?test=1>', 'rel' => 'side', 'type' => 'image/jpeg'),
-                    array('<http://.../side.jpeg?test=2>', 'rel' => 'side', 'type' => 'image/jpeg')
-                )
-            ),
-            array(
-                '',
-                array()
-            )
-        );
-    }
-
-    /**
-     * @dataProvider parseParamsProvider
-     */
-    public function testParseParams($header, $result)
-    {
-        $request = new Request('GET', '/', ['foo' => $header]);
-        $this->assertEquals($result, Request::parseHeader($request, 'foo'));
-    }
-
-    public function testAddsHeadersWhenNotPresent()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('foo', 'bar');
-        $this->assertInternalType('string', $h->getHeader('foo'));
-        $this->assertEquals('bar', $h->getHeader('foo'));
-    }
-
-    public function testAddsHeadersWhenPresentSameCase()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('foo', 'bar');
-        $h->addHeader('foo', 'baz');
-        $this->assertEquals('bar, baz', $h->getHeader('foo'));
-        $this->assertEquals(['bar', 'baz'], $h->getHeaderAsArray('foo'));
-    }
-
-    public function testAddsMultipleHeaders()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->addHeaders([
-            'foo' => ' bar',
-            'baz' => [' bam ', 'boo']
-        ]);
-        $this->assertEquals([
-            'foo' => ['bar'],
-            'baz' => ['bam', 'boo'],
-            'Host' => ['foo.com']
-        ], $h->getHeaders());
-    }
-
-    public function testAddsHeadersWhenPresentDifferentCase()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('Foo', 'bar');
-        $h->addHeader('fOO', 'baz');
-        $this->assertEquals('bar, baz', $h->getHeader('foo'));
-    }
-
-    public function testAddsHeadersWithArray()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('Foo', ['bar', 'baz']);
-        $this->assertEquals('bar, baz', $h->getHeader('foo'));
-    }
-
-    public function testGetHeadersReturnsAnArrayOfOverTheWireHeaderValues()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('foo', 'bar');
-        $h->addHeader('Foo', 'baz');
-        $h->addHeader('boO', 'test');
-        $result = $h->getHeaders();
-        $this->assertInternalType('array', $result);
-        $this->assertArrayHasKey('Foo', $result);
-        $this->assertArrayNotHasKey('foo', $result);
-        $this->assertArrayHasKey('boO', $result);
-        $this->assertEquals(['bar', 'baz'], $result['Foo']);
-        $this->assertEquals(['test'], $result['boO']);
-    }
-
-    public function testSetHeaderOverwritesExistingValues()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->setHeader('foo', 'bar');
-        $this->assertEquals('bar', $h->getHeader('foo'));
-        $h->setHeader('Foo', 'baz');
-        $this->assertEquals('baz', $h->getHeader('foo'));
-        $this->assertArrayHasKey('Foo', $h->getHeaders());
-    }
-
-    public function testSetHeaderOverwritesExistingValuesUsingHeaderArray()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->setHeader('foo', ['bar']);
-        $this->assertEquals('bar', $h->getHeader('foo'));
-    }
-
-    public function testSetHeaderOverwritesExistingValuesUsingArray()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->setHeader('foo', ['bar']);
-        $this->assertEquals('bar', $h->getHeader('foo'));
-    }
-
-    public function testSetHeadersOverwritesAllHeaders()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->setHeader('foo', 'bar');
-        $h->setHeaders(['foo' => 'a', 'boo' => 'b']);
-        $this->assertEquals(['foo' => ['a'], 'boo' => ['b']], $h->getHeaders());
-    }
-
-    public function testChecksIfCaseInsensitiveHeaderIsPresent()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->setHeader('foo', 'bar');
-        $this->assertTrue($h->hasHeader('foo'));
-        $this->assertTrue($h->hasHeader('Foo'));
-        $h->setHeader('fOo', 'bar');
-        $this->assertTrue($h->hasHeader('Foo'));
-    }
-
-    public function testRemovesHeaders()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->setHeader('foo', 'bar');
-        $h->removeHeader('foo');
-        $this->assertFalse($h->hasHeader('foo'));
-        $h->setHeader('Foo', 'bar');
-        $h->removeHeader('FOO');
-        $this->assertFalse($h->hasHeader('foo'));
-    }
-
-    public function testReturnsCorrectTypeWhenMissing()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $this->assertInternalType('string', $h->getHeader('foo'));
-        $this->assertInternalType('array', $h->getHeaderAsArray('foo'));
-    }
-
-    public function testSetsIntegersAndFloatsAsHeaders()
-    {
-        $h = new Request('GET', 'http://foo.com');
-        $h->setHeader('foo', 10);
-        $h->setHeader('bar', 10.5);
-        $h->addHeader('foo', 10);
-        $h->addHeader('bar', 10.5);
-        $this->assertSame('10, 10', $h->getHeader('foo'));
-        $this->assertSame('10.5, 10.5', $h->getHeader('bar'));
-    }
-
-    public function testGetsResponseStartLine()
-    {
-        $m = new Response(200);
-        $this->assertEquals('HTTP/1.1 200 OK', Response::getStartLine($m));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsWhenMessageIsUnknown()
-    {
-        $m = $this->getMockBuilder('GuzzleHttp\Message\AbstractMessage')
-            ->getMockForAbstractClass();
-        AbstractMessage::getStartLine($m);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php
deleted file mode 100644
index 771631d..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Message\FutureResponse;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\Stream;
-use React\Promise\Deferred;
-use GuzzleHttp\Tests\Subscriber\MockTest;
-
-class FutureResponseTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Class has no foo property
-     */
-    public function testValidatesMagicMethod()
-    {
-        $f = MockTest::createFuture(function () {});
-        $f->foo;
-    }
-
-    public function testDoesTheSameAsResponseWhenDereferenced()
-    {
-        $str = Stream::factory('foo');
-        $response = new Response(200, ['Foo' => 'bar'], $str);
-        $future = MockTest::createFuture(function () use ($response) {
-            return $response;
-        });
-        $this->assertFalse($this->readAttribute($future, 'isRealized'));
-        $this->assertEquals(200, $future->getStatusCode());
-        $this->assertTrue($this->readAttribute($future, 'isRealized'));
-        // Deref again does nothing.
-        $future->wait();
-        $this->assertTrue($this->readAttribute($future, 'isRealized'));
-        $this->assertEquals('bar', $future->getHeader('Foo'));
-        $this->assertEquals(['bar'], $future->getHeaderAsarray('Foo'));
-        $this->assertSame($response->getHeaders(), $future->getHeaders());
-        $this->assertSame(
-            $response->getBody(),
-            $future->getBody()
-        );
-        $this->assertSame(
-            $response->getProtocolVersion(),
-            $future->getProtocolVersion()
-        );
-        $this->assertSame(
-            $response->getEffectiveUrl(),
-            $future->getEffectiveUrl()
-        );
-        $future->setEffectiveUrl('foo');
-        $this->assertEquals('foo', $response->getEffectiveUrl());
-        $this->assertSame(
-            $response->getReasonPhrase(),
-            $future->getReasonPhrase()
-        );
-
-        $this->assertTrue($future->hasHeader('foo'));
-
-        $future->removeHeader('Foo');
-        $this->assertFalse($future->hasHeader('foo'));
-        $this->assertFalse($response->hasHeader('foo'));
-
-        $future->setBody(Stream::factory('true'));
-        $this->assertEquals('true', (string) $response->getBody());
-        $this->assertTrue($future->json());
-        $this->assertSame((string) $response, (string) $future);
-
-        $future->setBody(Stream::factory('<a><b>c</b></a>'));
-        $this->assertEquals('c', (string) $future->xml()->b);
-
-        $future->addHeader('a', 'b');
-        $this->assertEquals('b', $future->getHeader('a'));
-
-        $future->addHeaders(['a' => '2']);
-        $this->assertEquals('b, 2', $future->getHeader('a'));
-
-        $future->setHeader('a', '2');
-        $this->assertEquals('2', $future->getHeader('a'));
-
-        $future->setHeaders(['a' => '3']);
-        $this->assertEquals(['a' => ['3']], $future->getHeaders());
-    }
-
-    public function testCanDereferenceManually()
-    {
-        $response = new Response(200, ['Foo' => 'bar']);
-        $future = MockTest::createFuture(function () use ($response) {
-            return $response;
-        });
-        $this->assertSame($response, $future->wait());
-        $this->assertTrue($this->readAttribute($future, 'isRealized'));
-    }
-
-    public function testCanCancel()
-    {
-        $c = false;
-        $deferred = new Deferred();
-        $future = new FutureResponse(
-            $deferred->promise(),
-            function () {},
-            function () use (&$c) {
-                $c = true;
-                return true;
-            }
-        );
-
-        $this->assertFalse($this->readAttribute($future, 'isRealized'));
-        $future->cancel();
-        $this->assertTrue($this->readAttribute($future, 'isRealized'));
-        $future->cancel();
-    }
-
-    public function testCanCancelButReturnsFalseForNoCancelFunction()
-    {
-        $future = MockTest::createFuture(function () {});
-        $future->cancel();
-        $this->assertTrue($this->readAttribute($future, 'isRealized'));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
-     */
-    public function testAccessingCancelledResponseThrows()
-    {
-        $future = MockTest::createFuture(function () {});
-        $future->cancel();
-        $future->getStatusCode();
-    }
-
-    public function testExceptionInToStringTriggersError()
-    {
-        $future = MockTest::createFuture(function () {
-            throw new \Exception('foo');
-        });
-        $err = '';
-        set_error_handler(function () use (&$err) {
-            $err = func_get_args()[1];
-        });
-        echo $future;
-        restore_error_handler();
-        $this->assertContains('foo', $err);
-    }
-
-    public function testProxiesSetters()
-    {
-        $str = Stream::factory('foo');
-        $response = new Response(200, ['Foo' => 'bar'], $str);
-        $future = MockTest::createFuture(function () use ($response) {
-            return $response;
-        });
-
-        $future->setStatusCode(202);
-        $this->assertEquals(202, $future->getStatusCode());
-        $this->assertEquals(202, $response->getStatusCode());
-
-        $future->setReasonPhrase('foo');
-        $this->assertEquals('foo', $future->getReasonPhrase());
-        $this->assertEquals('foo', $response->getReasonPhrase());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
deleted file mode 100644
index aa2e45e..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
+++ /dev/null
@@ -1,601 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Post\PostFile;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Subscriber\Cookie;
-use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Query;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Subscriber\History;
-use GuzzleHttp\Subscriber\Mock;
-
-/**
- * @covers GuzzleHttp\Message\MessageFactory
- */
-class MessageFactoryTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCreatesResponses()
-    {
-        $f = new MessageFactory();
-        $response = $f->createResponse(200, ['foo' => 'bar'], 'test', [
-            'protocol_version' => 1.0
-        ]);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals(['foo' => ['bar']], $response->getHeaders());
-        $this->assertEquals('test', $response->getBody());
-        $this->assertEquals(1.0, $response->getProtocolVersion());
-    }
-
-    public function testCreatesRequestFromMessage()
-    {
-        $f = new MessageFactory();
-        $req = $f->fromMessage("GET / HTTP/1.1\r\nBaz: foo\r\n\r\n");
-        $this->assertEquals('GET', $req->getMethod());
-        $this->assertEquals('/', $req->getPath());
-        $this->assertEquals('foo', $req->getHeader('Baz'));
-        $this->assertNull($req->getBody());
-    }
-
-    public function testCreatesRequestFromMessageWithBody()
-    {
-        $req = (new MessageFactory())->fromMessage("GET / HTTP/1.1\r\nBaz: foo\r\n\r\ntest");
-        $this->assertEquals('test', $req->getBody());
-    }
-
-    public function testCreatesRequestWithPostBody()
-    {
-        $req = (new MessageFactory())->createRequest('GET', 'http://www.foo.com', ['body' => ['abc' => '123']]);
-        $this->assertEquals('abc=123', $req->getBody());
-    }
-
-    public function testCreatesRequestWithPostBodyScalars()
-    {
-        $req = (new MessageFactory())->createRequest(
-            'GET',
-            'http://www.foo.com',
-            ['body' => [
-                'abc' => true,
-                '123' => false,
-                'foo' => null,
-                'baz' => 10,
-                'bam' => 1.5,
-                'boo' => [1]]
-            ]
-        );
-        $this->assertEquals(
-            'abc=1&123=&foo&baz=10&bam=1.5&boo%5B0%5D=1',
-            (string) $req->getBody()
-        );
-    }
-
-    public function testCreatesRequestWithPostBodyAndPostFiles()
-    {
-        $pf = fopen(__FILE__, 'r');
-        $pfi = new PostFile('ghi', 'abc', __FILE__);
-        $req = (new MessageFactory())->createRequest('GET', 'http://www.foo.com', [
-            'body' => [
-                'abc' => '123',
-                'def' => $pf,
-                'ghi' => $pfi
-            ]
-        ]);
-        $this->assertInstanceOf('GuzzleHttp\Post\PostBody', $req->getBody());
-        $s = (string) $req;
-        $this->assertContains('testCreatesRequestWithPostBodyAndPostFiles', $s);
-        $this->assertContains('multipart/form-data', $s);
-        $this->assertTrue(in_array($pfi, $req->getBody()->getFiles(), true));
-    }
-
-    public function testCreatesResponseFromMessage()
-    {
-        $response = (new MessageFactory())->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest");
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('OK', $response->getReasonPhrase());
-        $this->assertEquals('4', $response->getHeader('Content-Length'));
-        $this->assertEquals('test', $response->getBody(true));
-    }
-
-    public function testCanCreateHeadResponses()
-    {
-        $response = (new MessageFactory())->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\n");
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('OK', $response->getReasonPhrase());
-        $this->assertEquals(null, $response->getBody());
-        $this->assertEquals('4', $response->getHeader('Content-Length'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testFactoryRequiresMessageForRequest()
-    {
-        (new MessageFactory())->fromMessage('');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage foo
-     */
-    public function testValidatesOptionsAreImplemented()
-    {
-        (new MessageFactory())->createRequest('GET', 'http://test.com', ['foo' => 'bar']);
-    }
-
-    public function testOptionsAddsRequestOptions()
-    {
-        $request = (new MessageFactory())->createRequest(
-            'GET', 'http://test.com', ['config' => ['baz' => 'bar']]
-        );
-        $this->assertEquals('bar', $request->getConfig()->get('baz'));
-    }
-
-    public function testCanDisableRedirects()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['allow_redirects' => false]);
-        $this->assertEmpty($request->getEmitter()->listeners('complete'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesRedirects()
-    {
-        (new MessageFactory())->createRequest('GET', '/', ['allow_redirects' => 'foo']);
-    }
-
-    public function testCanEnableStrictRedirectsAndSpecifyMax()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', [
-            'allow_redirects' => ['max' => 10, 'strict' => true]
-        ]);
-        $this->assertTrue($request->getConfig()['redirect']['strict']);
-        $this->assertEquals(10, $request->getConfig()['redirect']['max']);
-    }
-
-    public function testCanAddCookiesFromHash()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://www.test.com/', [
-            'cookies' => ['Foo' => 'Bar']
-        ]);
-        $cookies = null;
-        foreach ($request->getEmitter()->listeners('before') as $l) {
-            if ($l[0] instanceof Cookie) {
-                $cookies = $l[0];
-                break;
-            }
-        }
-        if (!$cookies) {
-            $this->fail('Did not add cookie listener');
-        } else {
-            $this->assertCount(1, $cookies->getCookieJar());
-        }
-    }
-
-    public function testAddsCookieUsingTrue()
-    {
-        $factory = new MessageFactory();
-        $request1 = $factory->createRequest('GET', '/', ['cookies' => true]);
-        $request2 = $factory->createRequest('GET', '/', ['cookies' => true]);
-        $listeners = function ($r) {
-            return array_filter($r->getEmitter()->listeners('before'), function ($l) {
-                return $l[0] instanceof Cookie;
-            });
-        };
-        $this->assertSame($listeners($request1), $listeners($request2));
-    }
-
-    public function testAddsCookieFromCookieJar()
-    {
-        $jar = new CookieJar();
-        $request = (new MessageFactory())->createRequest('GET', '/', ['cookies' => $jar]);
-        foreach ($request->getEmitter()->listeners('before') as $l) {
-            if ($l[0] instanceof Cookie) {
-                $this->assertSame($jar, $l[0]->getCookieJar());
-            }
-        }
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesCookies()
-    {
-        (new MessageFactory())->createRequest('GET', '/', ['cookies' => 'baz']);
-    }
-
-    public function testCanAddQuery()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
-            'query' => ['Foo' => 'Bar']
-        ]);
-        $this->assertEquals('Bar', $request->getQuery()->get('Foo'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesQuery()
-    {
-        (new MessageFactory())->createRequest('GET', 'http://foo.com', [
-            'query' => 'foo'
-        ]);
-    }
-
-    public function testCanSetDefaultQuery()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com?test=abc', [
-            'query' => ['Foo' => 'Bar', 'test' => 'def']
-        ]);
-        $this->assertEquals('Bar', $request->getQuery()->get('Foo'));
-        $this->assertEquals('abc', $request->getQuery()->get('test'));
-    }
-
-    public function testCanSetDefaultQueryWithObject()
-    {
-        $request = (new MessageFactory)->createRequest(
-            'GET',
-            'http://foo.com?test=abc', [
-                'query' => new Query(['Foo' => 'Bar', 'test' => 'def'])
-            ]
-        );
-        $this->assertEquals('Bar', $request->getQuery()->get('Foo'));
-        $this->assertEquals('abc', $request->getQuery()->get('test'));
-    }
-
-    public function testCanAddBasicAuth()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
-            'auth' => ['michael', 'test']
-        ]);
-        $this->assertTrue($request->hasHeader('Authorization'));
-    }
-
-    public function testCanAddDigestAuth()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
-            'auth' => ['michael', 'test', 'digest']
-        ]);
-        $this->assertEquals('michael:test', $request->getConfig()->getPath('curl/' . CURLOPT_USERPWD));
-        $this->assertEquals(CURLAUTH_DIGEST, $request->getConfig()->getPath('curl/' . CURLOPT_HTTPAUTH));
-    }
-
-    public function testCanDisableAuth()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
-            'auth' => false
-        ]);
-        $this->assertFalse($request->hasHeader('Authorization'));
-    }
-
-    public function testCanSetCustomAuth()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://foo.com', [
-            'auth' => 'foo'
-        ]);
-        $this->assertEquals('foo', $request->getConfig()['auth']);
-    }
-
-    public function testCanAddEvents()
-    {
-        $foo = null;
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock([new Response(200)]));
-        $client->get('http://test.com', [
-            'events' => [
-                'before' => function () use (&$foo) { $foo = true; }
-            ]
-        ]);
-        $this->assertTrue($foo);
-    }
-
-    public function testCanAddEventsWithPriority()
-    {
-        $foo = null;
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock(array(new Response(200))));
-        $request = $client->createRequest('GET', 'http://test.com', [
-            'events' => [
-                'before' => [
-                    'fn' => function () use (&$foo) { $foo = true; },
-                    'priority' => 123
-                ]
-            ]
-        ]);
-        $client->send($request);
-        $this->assertTrue($foo);
-        $l = $this->readAttribute($request->getEmitter(), 'listeners');
-        $this->assertArrayHasKey(123, $l['before']);
-    }
-
-    public function testCanAddEventsOnce()
-    {
-        $foo = 0;
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock([
-            new Response(200),
-            new Response(200),
-        ]));
-        $fn = function () use (&$foo) { ++$foo; };
-        $request = $client->createRequest('GET', 'http://test.com', [
-            'events' => ['before' => ['fn' => $fn, 'once' => true]]
-        ]);
-        $client->send($request);
-        $this->assertEquals(1, $foo);
-        $client->send($request);
-        $this->assertEquals(1, $foo);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesEventContainsFn()
-    {
-        $client = new Client(['base_url' => 'http://test.com']);
-        $client->createRequest('GET', '/', ['events' => ['before' => ['foo' => 'bar']]]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesEventIsArray()
-    {
-        $client = new Client(['base_url' => 'http://test.com']);
-        $client->createRequest('GET', '/', ['events' => ['before' => '123']]);
-    }
-
-    public function testCanAddSubscribers()
-    {
-        $mock = new Mock([new Response(200)]);
-        $client = new Client();
-        $client->getEmitter()->attach($mock);
-        $request = $client->get('http://test.com', ['subscribers' => [$mock]]);
-    }
-
-    public function testCanDisableExceptions()
-    {
-        $client = new Client();
-        $this->assertEquals(500, $client->get('http://test.com', [
-            'subscribers' => [new Mock([new Response(500)])],
-            'exceptions' => false
-        ])->getStatusCode());
-    }
-
-    public function testCanChangeSaveToLocation()
-    {
-        $saveTo = Stream::factory();
-        $request = (new MessageFactory())->createRequest('GET', '/', ['save_to' => $saveTo]);
-        $this->assertSame($saveTo, $request->getConfig()->get('save_to'));
-    }
-
-    public function testCanSetProxy()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['proxy' => '192.168.16.121']);
-        $this->assertEquals('192.168.16.121', $request->getConfig()->get('proxy'));
-    }
-
-    public function testCanSetHeadersOption()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['headers' => ['Foo' => 'Bar']]);
-        $this->assertEquals('Bar', (string) $request->getHeader('Foo'));
-    }
-
-    public function testCanSetHeaders()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', [
-            'headers' => ['Foo' => ['Baz', 'Bar'], 'Test' => '123']
-        ]);
-        $this->assertEquals('Baz, Bar', $request->getHeader('Foo'));
-        $this->assertEquals('123', $request->getHeader('Test'));
-    }
-
-    public function testCanSetTimeoutOption()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['timeout' => 1.5]);
-        $this->assertEquals(1.5, $request->getConfig()->get('timeout'));
-    }
-
-    public function testCanSetConnectTimeoutOption()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['connect_timeout' => 1.5]);
-        $this->assertEquals(1.5, $request->getConfig()->get('connect_timeout'));
-    }
-
-    public function testCanSetDebug()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['debug' => true]);
-        $this->assertTrue($request->getConfig()->get('debug'));
-    }
-
-    public function testCanSetVerifyToOff()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['verify' => false]);
-        $this->assertFalse($request->getConfig()->get('verify'));
-    }
-
-    public function testCanSetVerifyToOn()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['verify' => true]);
-        $this->assertTrue($request->getConfig()->get('verify'));
-    }
-
-    public function testCanSetVerifyToPath()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['verify' => '/foo.pem']);
-        $this->assertEquals('/foo.pem', $request->getConfig()->get('verify'));
-    }
-
-    public function inputValidation()
-    {
-        return array_map(function ($option) { return array($option); }, array(
-            'headers', 'events', 'subscribers', 'params'
-        ));
-    }
-
-    /**
-     * @dataProvider inputValidation
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesInput($option)
-    {
-        (new MessageFactory())->createRequest('GET', '/', [$option => 'foo']);
-    }
-
-    public function testCanAddSslKey()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['ssl_key' => '/foo.pem']);
-        $this->assertEquals('/foo.pem', $request->getConfig()->get('ssl_key'));
-    }
-
-    public function testCanAddSslKeyPassword()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['ssl_key' => ['/foo.pem', 'bar']]);
-        $this->assertEquals(['/foo.pem', 'bar'], $request->getConfig()->get('ssl_key'));
-    }
-
-    public function testCanAddSslCert()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['cert' => '/foo.pem']);
-        $this->assertEquals('/foo.pem', $request->getConfig()->get('cert'));
-    }
-
-    public function testCanAddSslCertPassword()
-    {
-        $request = (new MessageFactory())->createRequest('GET', '/', ['cert' => ['/foo.pem', 'bar']]);
-        $this->assertEquals(['/foo.pem', 'bar'], $request->getConfig()->get('cert'));
-    }
-
-    public function testCreatesBodyWithoutZeroString()
-    {
-        $request = (new MessageFactory())->createRequest('PUT', 'http://test.com', ['body' => '0']);
-        $this->assertSame('0', (string) $request->getBody());
-    }
-
-    public function testCanSetProtocolVersion()
-    {
-        $request = (new MessageFactory())->createRequest('GET', 'http://t.com', ['version' => 1.0]);
-        $this->assertEquals(1.0, $request->getProtocolVersion());
-    }
-
-    public function testCanAddJsonData()
-    {
-        $request = (new MessageFactory())->createRequest('PUT', 'http://f.com', [
-            'json' => ['foo' => 'bar']
-        ]);
-        $this->assertEquals(
-            'application/json',
-            $request->getHeader('Content-Type')
-        );
-        $this->assertEquals('{"foo":"bar"}', (string) $request->getBody());
-    }
-
-    public function testCanAddJsonDataToAPostRequest()
-    {
-        $request = (new MessageFactory())->createRequest('POST', 'http://f.com', [
-            'json' => ['foo' => 'bar']
-        ]);
-        $this->assertEquals(
-            'application/json',
-            $request->getHeader('Content-Type')
-        );
-        $this->assertEquals('{"foo":"bar"}', (string) $request->getBody());
-    }
-
-    public function testCanAddJsonDataAndNotOverwriteContentType()
-    {
-        $request = (new MessageFactory())->createRequest('PUT', 'http://f.com', [
-            'headers' => ['Content-Type' => 'foo'],
-            'json' => null
-        ]);
-        $this->assertEquals('foo', $request->getHeader('Content-Type'));
-        $this->assertEquals('null', (string) $request->getBody());
-    }
-
-    public function testCanUseCustomRequestOptions()
-    {
-        $c = false;
-        $f = new MessageFactory([
-            'foo' => function (RequestInterface $request, $value) use (&$c) {
-                $c = true;
-                $this->assertEquals('bar', $value);
-            }
-        ]);
-
-        $f->createRequest('PUT', 'http://f.com', [
-            'headers' => ['Content-Type' => 'foo'],
-            'foo' => 'bar'
-        ]);
-
-        $this->assertTrue($c);
-    }
-
-    /**
-     * @ticket https://github.com/guzzle/guzzle/issues/706
-     */
-    public function testDoesNotApplyPostBodyRightAway()
-    {
-        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
-            'body' => ['foo' => ['bar', 'baz']]
-        ]);
-        $this->assertEquals('', $request->getHeader('Content-Type'));
-        $this->assertEquals('', $request->getHeader('Content-Length'));
-        $request->getBody()->setAggregator(Query::duplicateAggregator());
-        $request->getBody()->applyRequestHeaders($request);
-        $this->assertEquals('foo=bar&foo=baz', $request->getBody());
-    }
-
-    public function testCanForceMultipartUploadWithContentType()
-    {
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock([new Response(200)]));
-        $history = new History();
-        $client->getEmitter()->attach($history);
-        $client->post('http://foo.com', [
-            'headers' => ['Content-Type' => 'multipart/form-data'],
-            'body'    => ['foo' => 'bar']
-        ]);
-        $this->assertContains(
-            'multipart/form-data; boundary=',
-            $history->getLastRequest()->getHeader('Content-Type')
-        );
-        $this->assertContains(
-            "Content-Disposition: form-data; name=\"foo\"\r\n\r\nbar",
-            (string) $history->getLastRequest()->getBody()
-        );
-    }
-
-    public function testDecodeDoesNotForceAcceptHeader()
-    {
-        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
-            'decode_content' => true
-        ]);
-        $this->assertEquals('', $request->getHeader('Accept-Encoding'));
-        $this->assertTrue($request->getConfig()->get('decode_content'));
-    }
-
-    public function testDecodeCanAddAcceptHeader()
-    {
-        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
-            'decode_content' => 'gzip'
-        ]);
-        $this->assertEquals('gzip', $request->getHeader('Accept-Encoding'));
-        $this->assertTrue($request->getConfig()->get('decode_content'));
-    }
-
-    public function testCanDisableDecoding()
-    {
-        $request = (new MessageFactory())->createRequest('POST', 'http://f.cn', [
-            'decode_content' => false
-        ]);
-        $this->assertEquals('', $request->getHeader('Accept-Encoding'));
-        $this->assertNull($request->getConfig()->get('decode_content'));
-    }
-}
-
-class ExtendedFactory extends MessageFactory
-{
-    protected function add_foo() {}
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageParserTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/MessageParserTest.php
deleted file mode 100644
index 0bcc943..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageParserTest.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Message\MessageParser;
-
-/**
- * @covers \GuzzleHttp\Message\MessageParser
- */
-class MessageParserTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @dataProvider requestProvider
-     */
-    public function testParsesRequests($message, $parts)
-    {
-        $parser = new MessageParser();
-        $this->compareRequestResults($parts, $parser->parseRequest($message));
-    }
-
-    /**
-     * @dataProvider responseProvider
-     */
-    public function testParsesResponses($message, $parts)
-    {
-        $parser = new MessageParser();
-        $this->compareResponseResults($parts, $parser->parseResponse($message));
-    }
-
-    public function testParsesRequestsWithMissingProtocol()
-    {
-        $parser = new MessageParser();
-        $parts = $parser->parseRequest("GET /\r\nHost: Foo.com\r\n\r\n");
-        $this->assertEquals('GET', $parts['method']);
-        $this->assertEquals('HTTP', $parts['protocol']);
-        $this->assertEquals('1.1', $parts['protocol_version']);
-    }
-
-    public function testParsesRequestsWithMissingVersion()
-    {
-        $parser = new MessageParser();
-        $parts = $parser->parseRequest("GET / HTTP\r\nHost: Foo.com\r\n\r\n");
-        $this->assertEquals('GET', $parts['method']);
-        $this->assertEquals('HTTP', $parts['protocol']);
-        $this->assertEquals('1.1', $parts['protocol_version']);
-    }
-
-    public function testParsesResponsesWithMissingReasonPhrase()
-    {
-        $parser = new MessageParser();
-        $parts = $parser->parseResponse("HTTP/1.1 200\r\n\r\n");
-        $this->assertEquals('200', $parts['code']);
-        $this->assertEquals('', $parts['reason_phrase']);
-        $this->assertEquals('HTTP', $parts['protocol']);
-        $this->assertEquals('1.1', $parts['protocol_version']);
-    }
-
-    public function requestProvider()
-    {
-        $auth = base64_encode('michael:foo');
-
-        return array(
-
-            // Empty request
-            array('', false),
-
-            // Converts casing of request. Does not require host header.
-            array("GET / HTTP/1.1\r\n\r\n", array(
-                'method'   => 'GET',
-                'protocol' => 'HTTP',
-                'protocol_version' => '1.1',
-                'request_url' => array(
-                    'scheme' => 'http',
-                    'host'   => '',
-                    'port'   => '',
-                    'path'   => '/',
-                    'query'  => ''
-                ),
-                'headers' => array(),
-                'body'    => ''
-            )),
-            // Path and query string, multiple header values per header and case sensitive storage
-            array("HEAD /path?query=foo HTTP/1.0\r\nHost: example.com\r\nX-Foo: foo\r\nx-foo: Bar\r\nX-Foo: foo\r\nX-Foo: Baz\r\n\r\n", array(
-                'method'   => 'HEAD',
-                'protocol' => 'HTTP',
-                'protocol_version' => '1.0',
-                'request_url' => array(
-                    'scheme' => 'http',
-                    'host'   => 'example.com',
-                    'port'   => '',
-                    'path'   => '/path',
-                    'query'  => 'query=foo'
-                ),
-                'headers' => array(
-                    'Host'  => 'example.com',
-                    'X-Foo' => array('foo', 'foo', 'Baz'),
-                    'x-foo' => 'Bar'
-                ),
-                'body'    => ''
-            )),
-            // Includes a body
-            array("PUT / HTTP/1.0\r\nhost: example.com:443\r\nContent-Length: 4\r\n\r\ntest", array(
-                'method'   => 'PUT',
-                'protocol' => 'HTTP',
-                'protocol_version' => '1.0',
-                'request_url' => array(
-                    'scheme' => 'https',
-                    'host'   => 'example.com',
-                    'port'   => '443',
-                    'path'   => '/',
-                    'query'  => ''
-                ),
-                'headers' => array(
-                    'host'           => 'example.com:443',
-                    'Content-Length' => '4'
-                ),
-                'body' => 'test'
-            )),
-            // Includes Authorization headers
-            array("GET / HTTP/1.1\r\nHost: example.com:8080\r\nAuthorization: Basic {$auth}\r\n\r\n", array(
-                'method'   => 'GET',
-                'protocol' => 'HTTP',
-                'protocol_version' => '1.1',
-                'request_url' => array(
-                    'scheme' => 'http',
-                    'host'   => 'example.com',
-                    'port'   => '8080',
-                    'path'   => '/',
-                    'query'  => ''
-                ),
-                'headers' => array(
-                    'Host'           => 'example.com:8080',
-                    'Authorization' => "Basic {$auth}"
-                ),
-                'body' => ''
-            )),
-            // Include authorization header
-            array("GET / HTTP/1.1\r\nHost: example.com:8080\r\nauthorization: Basic {$auth}\r\n\r\n", array(
-                'method'   => 'GET',
-                'protocol' => 'HTTP',
-                'protocol_version' => '1.1',
-                'request_url' => array(
-                    'scheme' => 'http',
-                    'host'   => 'example.com',
-                    'port'   => '8080',
-                    'path'   => '/',
-                    'query'  => ''
-                ),
-                'headers' => array(
-                    'Host'           => 'example.com:8080',
-                    'authorization' => "Basic {$auth}"
-                ),
-                'body' => ''
-            )),
-        );
-    }
-
-    public function responseProvider()
-    {
-        return array(
-            // Empty request
-            array('', false),
-
-            array("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", array(
-                'protocol'      => 'HTTP',
-                'protocol_version'       => '1.1',
-                'code'          => '200',
-                'reason_phrase' => 'OK',
-                'headers'       => array(
-                    'Content-Length' => 0
-                ),
-                'body'          => ''
-            )),
-            array("HTTP/1.0 400 Bad Request\r\nContent-Length: 0\r\n\r\n", array(
-                'protocol'      => 'HTTP',
-                'protocol_version'       => '1.0',
-                'code'          => '400',
-                'reason_phrase' => 'Bad Request',
-                'headers'       => array(
-                    'Content-Length' => 0
-                ),
-                'body'          => ''
-            )),
-            array("HTTP/1.0 100 Continue\r\n\r\n", array(
-                'protocol'      => 'HTTP',
-                'protocol_version'       => '1.0',
-                'code'          => '100',
-                'reason_phrase' => 'Continue',
-                'headers'       => array(),
-                'body'          => ''
-            )),
-            array("HTTP/1.1 204 No Content\r\nX-Foo: foo\r\nx-foo: Bar\r\nX-Foo: foo\r\n\r\n", array(
-                'protocol'      => 'HTTP',
-                'protocol_version'       => '1.1',
-                'code'          => '204',
-                'reason_phrase' => 'No Content',
-                'headers'       => array(
-                    'X-Foo' => array('foo', 'foo'),
-                    'x-foo' => 'Bar'
-                ),
-                'body'          => ''
-            )),
-            array("HTTP/1.1 200 Ok that is great!\r\nContent-Length: 4\r\n\r\nTest", array(
-                'protocol'      => 'HTTP',
-                'protocol_version'       => '1.1',
-                'code'          => '200',
-                'reason_phrase' => 'Ok that is great!',
-                'headers'       => array(
-                    'Content-Length' => 4
-                ),
-                'body'          => 'Test'
-            )),
-        );
-    }
-
-    public function compareRequestResults($result, $expected)
-    {
-        if (!$result) {
-            $this->assertFalse($expected);
-            return;
-        }
-
-        $this->assertEquals($result['method'], $expected['method']);
-        $this->assertEquals($result['protocol'], $expected['protocol']);
-        $this->assertEquals($result['protocol_version'], $expected['protocol_version']);
-        $this->assertEquals($result['request_url'], $expected['request_url']);
-        $this->assertEquals($result['body'], $expected['body']);
-        $this->compareHttpHeaders($result['headers'], $expected['headers']);
-    }
-
-    public function compareResponseResults($result, $expected)
-    {
-        if (!$result) {
-            $this->assertFalse($expected);
-            return;
-        }
-
-        $this->assertEquals($result['protocol'], $expected['protocol']);
-        $this->assertEquals($result['protocol_version'], $expected['protocol_version']);
-        $this->assertEquals($result['code'], $expected['code']);
-        $this->assertEquals($result['reason_phrase'], $expected['reason_phrase']);
-        $this->assertEquals($result['body'], $expected['body']);
-        $this->compareHttpHeaders($result['headers'], $expected['headers']);
-    }
-
-    protected function normalizeHeaders($headers)
-    {
-        $normalized = array();
-        foreach ($headers as $key => $value) {
-            $key = strtolower($key);
-            if (!isset($normalized[$key])) {
-                $normalized[$key] = $value;
-            } elseif (!is_array($normalized[$key])) {
-                $normalized[$key] = array($value);
-            } else {
-                $normalized[$key][] = $value;
-            }
-        }
-
-        foreach ($normalized as $key => &$value) {
-            if (is_array($value)) {
-                sort($value);
-            }
-        }
-
-        return $normalized;
-    }
-
-    public function compareHttpHeaders($result, $expected)
-    {
-        // Aggregate all headers case-insensitively
-        $result = $this->normalizeHeaders($result);
-        $expected = $this->normalizeHeaders($expected);
-        $this->assertEquals($result, $expected);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/RequestTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/RequestTest.php
deleted file mode 100644
index a6241a4..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/RequestTest.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Event\Emitter;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Query;
-use GuzzleHttp\Stream\Stream;
-
-/**
- * @covers GuzzleHttp\Message\Request
- */
-class RequestTest extends \PHPUnit_Framework_TestCase
-{
-    public function testConstructorInitializesMessage()
-    {
-        $r = new Request('PUT', '/test', ['test' => '123'], Stream::factory('foo'));
-        $this->assertEquals('PUT', $r->getMethod());
-        $this->assertEquals('/test', $r->getUrl());
-        $this->assertEquals('123', $r->getHeader('test'));
-        $this->assertEquals('foo', $r->getBody());
-    }
-
-    public function testConstructorInitializesMessageWithProtocolVersion()
-    {
-        $r = new Request('GET', '', [], null, ['protocol_version' => 10]);
-        $this->assertEquals(10, $r->getProtocolVersion());
-    }
-
-    public function testConstructorInitializesMessageWithEmitter()
-    {
-        $e = new Emitter();
-        $r = new Request('GET', '', [], null, ['emitter' => $e]);
-        $this->assertSame($r->getEmitter(), $e);
-    }
-
-    public function testCloneIsDeep()
-    {
-        $r = new Request('GET', '/test', ['foo' => 'baz'], Stream::factory('foo'));
-        $r2 = clone $r;
-
-        $this->assertNotSame($r->getEmitter(), $r2->getEmitter());
-        $this->assertEquals('foo', $r2->getBody());
-
-        $r->getConfig()->set('test', 123);
-        $this->assertFalse($r2->getConfig()->hasKey('test'));
-
-        $r->setPath('/abc');
-        $this->assertEquals('/test', $r2->getPath());
-    }
-
-    public function testCastsToString()
-    {
-        $r = new Request('GET', 'http://test.com/test', ['foo' => 'baz'], Stream::factory('body'));
-        $s = explode("\r\n", (string) $r);
-        $this->assertEquals("GET /test HTTP/1.1", $s[0]);
-        $this->assertContains('Host: test.com', $s);
-        $this->assertContains('foo: baz', $s);
-        $this->assertContains('', $s);
-        $this->assertContains('body', $s);
-    }
-
-    public function testSettingUrlOverridesHostHeaders()
-    {
-        $r = new Request('GET', 'http://test.com/test');
-        $r->setUrl('https://baz.com/bar');
-        $this->assertEquals('baz.com', $r->getHost());
-        $this->assertEquals('baz.com', $r->getHeader('Host'));
-        $this->assertEquals('/bar', $r->getPath());
-        $this->assertEquals('https', $r->getScheme());
-    }
-
-    public function testQueryIsMutable()
-    {
-        $r = new Request('GET', 'http://www.foo.com?baz=bar');
-        $this->assertEquals('baz=bar', $r->getQuery());
-        $this->assertInstanceOf('GuzzleHttp\Query', $r->getQuery());
-        $r->getQuery()->set('hi', 'there');
-        $this->assertEquals('/?baz=bar&hi=there', $r->getResource());
-    }
-
-    public function testQueryCanChange()
-    {
-        $r = new Request('GET', 'http://www.foo.com?baz=bar');
-        $r->setQuery(new Query(['foo' => 'bar']));
-        $this->assertEquals('foo=bar', $r->getQuery());
-    }
-
-    public function testCanChangeMethod()
-    {
-        $r = new Request('GET', 'http://www.foo.com');
-        $r->setMethod('put');
-        $this->assertEquals('PUT', $r->getMethod());
-    }
-
-    public function testCanChangeSchemeWithPort()
-    {
-        $r = new Request('GET', 'http://www.foo.com:80');
-        $r->setScheme('https');
-        $this->assertEquals('https://www.foo.com', $r->getUrl());
-    }
-
-    public function testCanChangeScheme()
-    {
-        $r = new Request('GET', 'http://www.foo.com');
-        $r->setScheme('https');
-        $this->assertEquals('https://www.foo.com', $r->getUrl());
-    }
-
-    public function testCanChangeHost()
-    {
-        $r = new Request('GET', 'http://www.foo.com:222');
-        $r->setHost('goo');
-        $this->assertEquals('http://goo:222', $r->getUrl());
-        $this->assertEquals('goo:222', $r->getHeader('host'));
-        $r->setHost('goo:80');
-        $this->assertEquals('http://goo', $r->getUrl());
-        $this->assertEquals('goo', $r->getHeader('host'));
-    }
-
-    public function testCanChangePort()
-    {
-        $r = new Request('GET', 'http://www.foo.com:222');
-        $this->assertSame(222, $r->getPort());
-        $this->assertEquals('www.foo.com', $r->getHost());
-        $this->assertEquals('www.foo.com:222', $r->getHeader('host'));
-        $r->setPort(80);
-        $this->assertSame(80, $r->getPort());
-        $this->assertEquals('www.foo.com', $r->getHost());
-        $this->assertEquals('www.foo.com', $r->getHeader('host'));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/ResponseTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/ResponseTest.php
deleted file mode 100644
index bbae24a..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/ResponseTest.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Exception\XmlParseException;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\Stream;
-
-/**
- * @covers GuzzleHttp\Message\Response
- */
-class ResponseTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCanProvideCustomStatusCodeAndReasonPhrase()
-    {
-        $response = new Response(999, [], null, ['reason_phrase' => 'hi!']);
-        $this->assertEquals(999, $response->getStatusCode());
-        $this->assertEquals('hi!', $response->getReasonPhrase());
-    }
-
-    public function testConvertsToString()
-    {
-        $response = new Response(200);
-        $this->assertEquals("HTTP/1.1 200 OK\r\n\r\n", (string) $response);
-        // Add another header
-        $response = new Response(200, ['X-Test' => 'Guzzle']);
-        $this->assertEquals("HTTP/1.1 200 OK\r\nX-Test: Guzzle\r\n\r\n", (string) $response);
-        $response = new Response(200, ['Content-Length' => 4], Stream::factory('test'));
-        $this->assertEquals("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest", (string) $response);
-    }
-
-    public function testConvertsToStringAndSeeksToByteZero()
-    {
-        $response = new Response(200);
-        $s = Stream::factory('foo');
-        $s->read(1);
-        $response->setBody($s);
-        $this->assertEquals("HTTP/1.1 200 OK\r\n\r\nfoo", (string) $response);
-    }
-
-    public function testParsesJsonResponses()
-    {
-        $json = '{"foo": "bar"}';
-        $response = new Response(200, [], Stream::factory($json));
-        $this->assertEquals(['foo' => 'bar'], $response->json());
-        $this->assertEquals(json_decode($json), $response->json(['object' => true]));
-
-        $response = new Response(200);
-        $this->assertEquals(null, $response->json());
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\ParseException
-     * @expectedExceptionMessage Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON
-     */
-    public function testThrowsExceptionWhenFailsToParseJsonResponse()
-    {
-        $response = new Response(200, [], Stream::factory('{"foo": "'));
-        $response->json();
-    }
-
-    public function testParsesXmlResponses()
-    {
-        $response = new Response(200, [], Stream::factory('<abc><foo>bar</foo></abc>'));
-        $this->assertEquals('bar', (string) $response->xml()->foo);
-        // Always return a SimpleXMLElement from the xml method
-        $response = new Response(200);
-        $this->assertEmpty((string) $response->xml()->foo);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\XmlParseException
-     * @expectedExceptionMessage Unable to parse response body into XML: String could not be parsed as XML
-     */
-    public function testThrowsExceptionWhenFailsToParseXmlResponse()
-    {
-        $response = new Response(200, [], Stream::factory('<abc'));
-        try {
-            $response->xml();
-        } catch (XmlParseException $e) {
-            $xmlParseError = $e->getError();
-            $this->assertInstanceOf('\LibXMLError', $xmlParseError);
-            $this->assertContains("Couldn't find end of Start Tag abc line 1", $xmlParseError->message);
-            throw $e;
-        }
-    }
-
-    public function testHasEffectiveUrl()
-    {
-        $r = new Response(200);
-        $this->assertNull($r->getEffectiveUrl());
-        $r->setEffectiveUrl('http://www.test.com');
-        $this->assertEquals('http://www.test.com', $r->getEffectiveUrl());
-    }
-
-    public function testPreventsComplexExternalEntities()
-    {
-        $xml = '<?xml version="1.0"?><!DOCTYPE scan[<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=ResponseTest.php">]><scan>&test;</scan>';
-        $response = new Response(200, [], Stream::factory($xml));
-
-        $oldCwd = getcwd();
-        chdir(__DIR__);
-        try {
-            $xml = $response->xml();
-            chdir($oldCwd);
-            $this->markTestIncomplete('Did not throw the expected exception! XML resolved as: ' . $xml->asXML());
-        } catch (\Exception $e) {
-            chdir($oldCwd);
-        }
-    }
-
-    public function testStatusAndReasonAreMutable()
-    {
-        $response = new Response(200);
-        $response->setStatusCode(201);
-        $this->assertEquals(201, $response->getStatusCode());
-        $response->setReasonPhrase('Foo');
-        $this->assertEquals('Foo', $response->getReasonPhrase());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/MimetypesTest.php b/core/vendor/guzzlehttp/guzzle/tests/MimetypesTest.php
deleted file mode 100644
index a18ec38..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/MimetypesTest.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Mimetypes;
-
-/**
- * @covers GuzzleHttp\Mimetypes
- */
-class MimetypesTest extends \PHPUnit_Framework_TestCase
-{
-    public function testGetsFromExtension()
-    {
-        $this->assertEquals('text/x-php', Mimetypes::getInstance()->fromExtension('php'));
-    }
-
-    public function testGetsFromFilename()
-    {
-        $this->assertEquals('text/x-php', Mimetypes::getInstance()->fromFilename(__FILE__));
-    }
-
-    public function testGetsFromCaseInsensitiveFilename()
-    {
-        $this->assertEquals('text/x-php', Mimetypes::getInstance()->fromFilename(strtoupper(__FILE__)));
-    }
-
-    public function testReturnsNullWhenNoMatchFound()
-    {
-        $this->assertNull(Mimetypes::getInstance()->fromExtension('foobar'));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php b/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php
deleted file mode 100644
index b5f02ad..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php
+++ /dev/null
@@ -1,319 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Pool;
-use GuzzleHttp\Ring\Client\MockHandler;
-use GuzzleHttp\Ring\Future\FutureArray;
-use GuzzleHttp\Subscriber\History;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\EndEvent;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Subscriber\Mock;
-use React\Promise\Deferred;
-
-class PoolTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesIterable()
-    {
-        new Pool(new Client(), 'foo');
-    }
-
-    public function testCanControlPoolSizeAndClient()
-    {
-        $c = new Client();
-        $p = new Pool($c, [], ['pool_size' => 10]);
-        $this->assertSame($c, $this->readAttribute($p, 'client'));
-        $this->assertEquals(10, $this->readAttribute($p, 'poolSize'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesEachElement()
-    {
-        $c = new Client();
-        $requests = ['foo'];
-        $p = new Pool($c, new \ArrayIterator($requests));
-        $p->wait();
-    }
-
-    public function testSendsAndRealizesFuture()
-    {
-        $c = $this->getClient();
-        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
-        $this->assertTrue($p->wait());
-        $this->assertFalse($p->wait());
-        $this->assertTrue($this->readAttribute($p, 'isRealized'));
-        $this->assertFalse($p->cancel());
-    }
-
-    public function testSendsManyRequestsInCappedPool()
-    {
-        $c = $this->getClient();
-        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
-        $this->assertTrue($p->wait());
-        $this->assertFalse($p->wait());
-    }
-
-    public function testSendsRequestsThatHaveNotBeenRealized()
-    {
-        $c = $this->getClient();
-        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
-        $this->assertTrue($p->wait());
-        $this->assertFalse($p->wait());
-        $this->assertFalse($p->cancel());
-    }
-
-    public function testCancelsInFlightRequests()
-    {
-        $c = $this->getClient();
-        $h = new History();
-        $c->getEmitter()->attach($h);
-        $p = new Pool($c, [
-            $c->createRequest('GET', 'http://foo.com'),
-            $c->createRequest('GET', 'http://foo.com', [
-                'events' => [
-                    'before' => [
-                        'fn' => function () use (&$p) {
-                            $this->assertTrue($p->cancel());
-                        },
-                        'priority' => RequestEvents::EARLY
-                    ]
-                ]
-            ])
-        ]);
-        ob_start();
-        $p->wait();
-        $contents = ob_get_clean();
-        $this->assertEquals(1, count($h));
-        $this->assertEquals('Cancelling', $contents);
-    }
-
-    private function getClient()
-    {
-        $deferred = new Deferred();
-        $future = new FutureArray(
-            $deferred->promise(),
-            function() use ($deferred) {
-                $deferred->resolve(['status' => 200, 'headers' => []]);
-            }, function () {
-                echo 'Cancelling';
-            }
-        );
-
-        return new Client(['handler' => new MockHandler($future)]);
-    }
-
-    public function testBatchesRequests()
-    {
-        $client = new Client(['handler' => function () {
-            throw new \RuntimeException('No network access');
-        }]);
-
-        $responses = [
-            new Response(301, ['Location' => 'http://foo.com/bar']),
-            new Response(200),
-            new Response(200),
-            new Response(404)
-        ];
-
-        $client->getEmitter()->attach(new Mock($responses));
-        $requests = [
-            $client->createRequest('GET', 'http://foo.com/baz'),
-            $client->createRequest('HEAD', 'http://httpbin.org/get'),
-            $client->createRequest('PUT', 'http://httpbin.org/put'),
-        ];
-
-        $a = $b = $c = $d = 0;
-        $result = Pool::batch($client, $requests, [
-            'before'   => function (BeforeEvent $e) use (&$a) { $a++; },
-            'complete' => function (CompleteEvent $e) use (&$b) { $b++; },
-            'error'    => function (ErrorEvent $e) use (&$c) { $c++; },
-            'end'      => function (EndEvent $e) use (&$d) { $d++; }
-        ]);
-
-        $this->assertEquals(4, $a);
-        $this->assertEquals(2, $b);
-        $this->assertEquals(1, $c);
-        $this->assertEquals(3, $d);
-        $this->assertCount(3, $result);
-        $this->assertInstanceOf('GuzzleHttp\BatchResults', $result);
-
-        // The first result is actually the second (redirect) response.
-        $this->assertSame($responses[1], $result[0]);
-        // The second result is a 1:1 request:response map
-        $this->assertSame($responses[2], $result[1]);
-        // The third entry is the 404 RequestException
-        $this->assertSame($responses[3], $result[2]->getResponse());
-    }
-
-    public function testBatchesRequestsWithDynamicPoolSize()
-    {
-        $client = new Client(['handler' => function () {
-            throw new \RuntimeException('No network access');
-        }]);
-
-        $responses = [
-            new Response(301, ['Location' => 'http://foo.com/bar']),
-            new Response(200),
-            new Response(200),
-            new Response(404)
-        ];
-
-        $client->getEmitter()->attach(new Mock($responses));
-        $requests = [
-            $client->createRequest('GET', 'http://foo.com/baz'),
-            $client->createRequest('HEAD', 'http://httpbin.org/get'),
-            $client->createRequest('PUT', 'http://httpbin.org/put'),
-        ];
-
-        $a = $b = $c = $d = 0;
-        $result = Pool::batch($client, $requests, [
-            'before'    => function (BeforeEvent $e) use (&$a) { $a++; },
-            'complete'  => function (CompleteEvent $e) use (&$b) { $b++; },
-            'error'     => function (ErrorEvent $e) use (&$c) { $c++; },
-            'end'       => function (EndEvent $e) use (&$d) { $d++; },
-            'pool_size' => function ($queueSize) {
-                static $options = [1, 2, 1];
-                static $queued  = 0;
-
-                $this->assertEquals(
-                    $queued,
-                    $queueSize,
-                    'The number of queued requests should be equal to the sum of pool sizes so far.'
-                );
-
-                $next    = array_shift($options);
-                $queued += $next;
-
-                return $next;
-            }
-        ]);
-
-        $this->assertEquals(4, $a);
-        $this->assertEquals(2, $b);
-        $this->assertEquals(1, $c);
-        $this->assertEquals(3, $d);
-        $this->assertCount(3, $result);
-        $this->assertInstanceOf('GuzzleHttp\BatchResults', $result);
-
-        // The first result is actually the second (redirect) response.
-        $this->assertSame($responses[1], $result[0]);
-        // The second result is a 1:1 request:response map
-        $this->assertSame($responses[2], $result[1]);
-        // The third entry is the 404 RequestException
-        $this->assertSame($responses[3], $result[2]->getResponse());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Each event listener must be a callable or
-     */
-    public function testBatchValidatesTheEventFormat()
-    {
-        $client = new Client();
-        $requests = [$client->createRequest('GET', 'http://foo.com/baz')];
-        Pool::batch($client, $requests, ['complete' => 'foo']);
-    }
-
-    public function testEmitsProgress()
-    {
-        $client = new Client(['handler' => function () {
-            throw new \RuntimeException('No network access');
-        }]);
-
-        $responses = [new Response(200), new Response(404)];
-        $client->getEmitter()->attach(new Mock($responses));
-        $requests = [
-            $client->createRequest('GET', 'http://foo.com/baz'),
-            $client->createRequest('HEAD', 'http://httpbin.org/get')
-        ];
-
-        $pool = new Pool($client, $requests);
-        $count = 0;
-        $thenned = null;
-        $pool->then(
-            function ($value) use (&$thenned) {
-                $thenned = $value;
-            },
-            null,
-            function ($result) use (&$count, $requests) {
-                $this->assertSame($requests[$count], $result['request']);
-                if ($count == 0) {
-                    $this->assertNull($result['error']);
-                    $this->assertEquals(200, $result['response']->getStatusCode());
-                } else {
-                    $this->assertInstanceOf(
-                        'GuzzleHttp\Exception\ClientException',
-                        $result['error']
-                    );
-                }
-                $count++;
-            }
-        );
-
-        $pool->wait();
-        $this->assertEquals(2, $count);
-        $this->assertEquals(true, $thenned);
-    }
-
-    public function testDoesNotThrowInErrorEvent()
-    {
-        $client = new Client();
-        $responses = [new Response(404)];
-        $client->getEmitter()->attach(new Mock($responses));
-        $requests = [$client->createRequest('GET', 'http://foo.com/baz')];
-        $result = Pool::batch($client, $requests);
-        $this->assertCount(1, $result);
-        $this->assertInstanceOf('GuzzleHttp\Exception\ClientException', $result[0]);
-    }
-
-    public function testHasSendMethod()
-    {
-        $client = new Client();
-        $responses = [new Response(404)];
-        $history = new History();
-        $client->getEmitter()->attach($history);
-        $client->getEmitter()->attach(new Mock($responses));
-        $requests = [$client->createRequest('GET', 'http://foo.com/baz')];
-        Pool::send($client, $requests);
-        $this->assertCount(1, $history);
-    }
-
-    public function testDoesNotInfinitelyRecurse()
-    {
-        $client = new Client(['handler' => function () {
-            throw new \RuntimeException('No network access');
-        }]);
-
-        $last = null;
-        $client->getEmitter()->on(
-            'before',
-            function (BeforeEvent $e) use (&$last) {
-                $e->intercept(new Response(200));
-                if (function_exists('xdebug_get_stack_depth')) {
-                    if ($last) {
-                        $this->assertEquals($last, xdebug_get_stack_depth());
-                    } else {
-                        $last = xdebug_get_stack_depth();
-                    }
-                }
-            }
-        );
-
-        $requests = [];
-        for ($i = 0; $i < 100; $i++) {
-            $requests[] = $client->createRequest('GET', 'http://foo.com');
-        }
-
-        $pool = new Pool($client, $requests);
-        $pool->wait();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
deleted file mode 100644
index 4b3b391..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Post;
-
-use GuzzleHttp\Post\MultipartBody;
-use GuzzleHttp\Post\PostFile;
-
-/**
- * @covers GuzzleHttp\Post\MultipartBody
- */
-class MultipartBodyTest extends \PHPUnit_Framework_TestCase
-{
-    protected function getTestBody()
-    {
-        return new MultipartBody(['foo' => 'bar'], [
-            new PostFile('foo', 'abc', 'foo.txt')
-        ], 'abcdef');
-    }
-
-    public function testConstructorAddsFieldsAndFiles()
-    {
-        $b = $this->getTestBody();
-        $this->assertEquals('abcdef', $b->getBoundary());
-        $c = (string) $b;
-        $this->assertContains("--abcdef\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n", $c);
-        $this->assertContains("--abcdef\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"foo.txt\"\r\n"
-            . "Content-Type: text/plain\r\n\r\nabc\r\n--abcdef--", $c);
-    }
-
-    public function testDoesNotModifyFieldFormat()
-    {
-        $m = new MultipartBody(['foo+baz' => 'bar+bam %20 boo'], [
-            new PostFile('foo+bar', 'abc %20 123', 'foo.txt')
-        ], 'abcdef');
-        $this->assertContains('name="foo+baz"', (string) $m);
-        $this->assertContains('name="foo+bar"', (string) $m);
-        $this->assertContains('bar+bam %20 boo', (string) $m);
-        $this->assertContains('abc %20 123', (string) $m);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testConstructorValidatesFiles()
-    {
-        new MultipartBody([], ['bar']);
-    }
-
-    public function testConstructorCanCreateBoundary()
-    {
-        $b = new MultipartBody();
-        $this->assertNotNull($b->getBoundary());
-    }
-
-    public function testWrapsStreamMethods()
-    {
-        $b = $this->getTestBody();
-        $this->assertFalse($b->write('foo'));
-        $this->assertFalse($b->isWritable());
-        $this->assertTrue($b->isReadable());
-        $this->assertTrue($b->isSeekable());
-        $this->assertEquals(0, $b->tell());
-    }
-
-    public function testCanDetachFieldsAndFiles()
-    {
-        $b = $this->getTestBody();
-        $b->detach();
-        $b->close();
-        $this->assertEquals('', (string) $b);
-    }
-
-    public function testIsSeekableReturnsTrueIfAllAreSeekable()
-    {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['isSeekable', 'isReadable'])
-            ->getMockForAbstractClass();
-        $s->expects($this->once())
-            ->method('isSeekable')
-            ->will($this->returnValue(false));
-        $s->expects($this->once())
-            ->method('isReadable')
-            ->will($this->returnValue(true));
-        $p = new PostFile('foo', $s, 'foo.php');
-        $b = new MultipartBody([], [$p]);
-        $this->assertFalse($b->isSeekable());
-        $this->assertFalse($b->seek(10));
-    }
-
-    public function testReadsFromBuffer()
-    {
-        $b = $this->getTestBody();
-        $c = $b->read(1);
-        $c .= $b->read(1);
-        $c .= $b->read(1);
-        $c .= $b->read(1);
-        $c .= $b->read(1);
-        $this->assertEquals('--abc', $c);
-    }
-
-    public function testCalculatesSize()
-    {
-        $b = $this->getTestBody();
-        $this->assertEquals(strlen($b), $b->getSize());
-    }
-
-    public function testCalculatesSizeAndReturnsNullForUnknown()
-    {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['getSize', 'isReadable'])
-            ->getMockForAbstractClass();
-        $s->expects($this->once())
-            ->method('getSize')
-            ->will($this->returnValue(null));
-        $s->expects($this->once())
-            ->method('isReadable')
-            ->will($this->returnValue(true));
-        $b = new MultipartBody([], [new PostFile('foo', $s, 'foo.php')]);
-        $this->assertNull($b->getSize());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
deleted file mode 100644
index 0283a5e..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
+++ /dev/null
@@ -1,255 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Post;
-
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Post\PostBody;
-use GuzzleHttp\Post\PostFile;
-use GuzzleHttp\Query;
-
-/**
- * @covers GuzzleHttp\Post\PostBody
- */
-class PostBodyTest extends \PHPUnit_Framework_TestCase
-{
-    public function testWrapsBasicStreamFunctionality()
-    {
-        $b = new PostBody();
-        $this->assertTrue($b->isSeekable());
-        $this->assertTrue($b->isReadable());
-        $this->assertFalse($b->isWritable());
-        $this->assertFalse($b->write('foo'));
-    }
-
-    public function testApplyingWithNothingDoesNothing()
-    {
-        $b = new PostBody();
-        $m = new Request('POST', '/');
-        $b->applyRequestHeaders($m);
-        $this->assertFalse($m->hasHeader('Content-Length'));
-        $this->assertFalse($m->hasHeader('Content-Type'));
-    }
-
-    public function testCanForceMultipartUploadsWhenApplying()
-    {
-        $b = new PostBody();
-        $b->forceMultipartUpload(true);
-        $m = new Request('POST', '/');
-        $b->applyRequestHeaders($m);
-        $this->assertContains(
-            'multipart/form-data',
-            $m->getHeader('Content-Type')
-        );
-    }
-
-    public function testApplyingWithFilesAddsMultipartUpload()
-    {
-        $b = new PostBody();
-        $p = new PostFile('foo', fopen(__FILE__, 'r'));
-        $b->addFile($p);
-        $this->assertEquals([$p], $b->getFiles());
-        $this->assertNull($b->getFile('missing'));
-        $this->assertSame($p, $b->getFile('foo'));
-        $m = new Request('POST', '/');
-        $b->applyRequestHeaders($m);
-        $this->assertContains(
-            'multipart/form-data',
-            $m->getHeader('Content-Type')
-        );
-        $this->assertTrue($m->hasHeader('Content-Length'));
-    }
-
-    public function testApplyingWithFieldsAddsMultipartUpload()
-    {
-        $b = new PostBody();
-        $b->setField('foo', 'bar');
-        $this->assertEquals(['foo' => 'bar'], $b->getFields());
-        $m = new Request('POST', '/');
-        $b->applyRequestHeaders($m);
-        $this->assertContains(
-            'application/x-www-form',
-            $m->getHeader('Content-Type')
-        );
-        $this->assertTrue($m->hasHeader('Content-Length'));
-    }
-
-    public function testMultipartWithNestedFields()
-    {
-        $b = new PostBody();
-        $b->setField('foo', ['bar' => 'baz']);
-        $b->forceMultipartUpload(true);
-        $this->assertEquals(['foo' => ['bar' => 'baz']], $b->getFields());
-        $m = new Request('POST', '/');
-        $b->applyRequestHeaders($m);
-        $this->assertContains(
-            'multipart/form-data',
-            $m->getHeader('Content-Type')
-        );
-        $this->assertTrue($m->hasHeader('Content-Length'));
-        $contents = $b->getContents();
-        $this->assertContains('name="foo[bar]"', $contents);
-        $this->assertNotContains('name="foo"', $contents);
-    }
-
-    public function testCountProvidesFieldsAndFiles()
-    {
-        $b = new PostBody();
-        $b->setField('foo', 'bar');
-        $b->addFile(new PostFile('foo', fopen(__FILE__, 'r')));
-        $this->assertEquals(2, count($b));
-        $b->clearFiles();
-        $b->removeField('foo');
-        $this->assertEquals(0, count($b));
-        $this->assertEquals([], $b->getFiles());
-        $this->assertEquals([], $b->getFields());
-    }
-
-    public function testHasFields()
-    {
-        $b = new PostBody();
-        $b->setField('foo', 'bar');
-        $b->setField('baz', '123');
-        $this->assertEquals('bar', $b->getField('foo'));
-        $this->assertEquals('123', $b->getField('baz'));
-        $this->assertNull($b->getField('ahh'));
-        $this->assertTrue($b->hasField('foo'));
-        $this->assertFalse($b->hasField('test'));
-        $b->replaceFields(['abc' => '123']);
-        $this->assertFalse($b->hasField('foo'));
-        $this->assertTrue($b->hasField('abc'));
-    }
-
-    public function testConvertsFieldsToQueryStyleBody()
-    {
-        $b = new PostBody();
-        $b->setField('foo', 'bar');
-        $b->setField('baz', '123');
-        $this->assertEquals('foo=bar&baz=123', $b);
-        $this->assertEquals(15, $b->getSize());
-        $b->seek(0);
-        $this->assertEquals('foo=bar&baz=123', $b->getContents());
-        $b->seek(0);
-        $this->assertEquals('foo=bar&baz=123', $b->read(1000));
-        $this->assertEquals(15, $b->tell());
-    }
-
-    public function testCanSpecifyQueryAggregator()
-    {
-        $b = new PostBody();
-        $b->setField('foo', ['baz', 'bar']);
-        $this->assertEquals('foo%5B0%5D=baz&foo%5B1%5D=bar', (string) $b);
-        $b = new PostBody();
-        $b->setField('foo', ['baz', 'bar']);
-        $agg = Query::duplicateAggregator();
-        $b->setAggregator($agg);
-        $this->assertEquals('foo=baz&foo=bar', (string) $b);
-    }
-
-    public function testDetachesAndCloses()
-    {
-        $b = new PostBody();
-        $b->setField('foo', 'bar');
-        $b->detach();
-        $b->close();
-        $this->assertEquals('', $b->read(10));
-    }
-
-    public function testDetachesWhenBodyIsPresent()
-    {
-        $b = new PostBody();
-        $b->setField('foo', 'bar');
-        $b->getContents();
-        $b->detach();
-    }
-
-    public function testFlushAndMetadataPlaceholders()
-    {
-        $b = new PostBody();
-        $this->assertEquals([], $b->getMetadata());
-        $this->assertNull($b->getMetadata('foo'));
-    }
-
-    public function testCreatesMultipartUploadWithMultiFields()
-    {
-        $b = new PostBody();
-        $b->setField('testing', ['baz', 'bar']);
-        $b->setField('other', 'hi');
-        $b->setField('third', 'there');
-        $b->addFile(new PostFile('foo', fopen(__FILE__, 'r')));
-        $s = (string) $b;
-        $this->assertContains(file_get_contents(__FILE__), $s);
-        $this->assertContains('testing=bar', $s);
-        $this->assertContains(
-            'Content-Disposition: form-data; name="third"',
-            $s
-        );
-        $this->assertContains(
-            'Content-Disposition: form-data; name="other"',
-            $s
-        );
-    }
-
-    public function testMultipartWithBase64Fields()
-    {
-        $b = new PostBody();
-        $b->setField('foo64', '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc=');
-        $b->forceMultipartUpload(true);
-        $this->assertEquals(
-            ['foo64' => '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc='],
-            $b->getFields()
-        );
-        $m = new Request('POST', '/');
-        $b->applyRequestHeaders($m);
-        $this->assertContains(
-            'multipart/form-data',
-            $m->getHeader('Content-Type')
-        );
-        $this->assertTrue($m->hasHeader('Content-Length'));
-        $contents = $b->getContents();
-        $this->assertContains('name="foo64"', $contents);
-        $this->assertContains(
-            '/xA2JhWEqPcgyLRDdir9WSRi/khpb2Lh3ooqv+5VYoc=',
-            $contents
-        );
-    }
-
-    public function testMultipartWithAmpersandInValue()
-    {
-        $b = new PostBody();
-        $b->setField('a', 'b&c=d');
-        $b->forceMultipartUpload(true);
-        $this->assertEquals(['a' => 'b&c=d'], $b->getFields());
-        $m = new Request('POST', '/');
-        $b->applyRequestHeaders($m);
-        $this->assertContains(
-            'multipart/form-data',
-            $m->getHeader('Content-Type')
-        );
-        $this->assertTrue($m->hasHeader('Content-Length'));
-        $contents = $b->getContents();
-        $this->assertContains('name="a"', $contents);
-        $this->assertContains('b&c=d', $contents);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
-     */
-    public function testCannotAttach()
-    {
-        $b = new PostBody();
-        $b->attach('foo');
-    }
-
-    public function testDoesNotOverwriteExistingHeaderForUrlencoded()
-    {
-        $m = new Request('POST', 'http://foo.com', [
-            'content-type' => 'application/x-www-form-urlencoded; charset=utf-8'
-        ]);
-        $b = new PostBody();
-        $b->setField('foo', 'bar');
-        $b->applyRequestHeaders($m);
-        $this->assertEquals(
-            'application/x-www-form-urlencoded; charset=utf-8',
-            $m->getHeader('Content-Type')
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
deleted file mode 100644
index 800cee5..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Post;
-
-use GuzzleHttp\Post\MultipartBody;
-use GuzzleHttp\Post\PostFile;
-use GuzzleHttp\Stream\Stream;
-
-/**
- * @covers GuzzleHttp\Post\PostFile
- */
-class PostFileTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCreatesFromString()
-    {
-        $p = new PostFile('foo', 'hi', '/path/to/test.php');
-        $this->assertInstanceOf('GuzzleHttp\Post\PostFileInterface', $p);
-        $this->assertEquals('hi', $p->getContent());
-        $this->assertEquals('foo', $p->getName());
-        $this->assertEquals('/path/to/test.php', $p->getFilename());
-        $this->assertEquals(
-            'form-data; name="foo"; filename="test.php"',
-            $p->getHeaders()['Content-Disposition']
-        );
-    }
-
-    public function testGetsFilenameFromMetadata()
-    {
-        $p = new PostFile('foo', fopen(__FILE__, 'r'));
-        $this->assertEquals(__FILE__, $p->getFilename());
-    }
-
-    public function testDefaultsToNameWhenNoFilenameExists()
-    {
-        $p = new PostFile('foo', 'bar');
-        $this->assertEquals('foo', $p->getFilename());
-    }
-
-    public function testCreatesFromMultipartFormData()
-    {
-        $mp = new MultipartBody([], [], 'baz');
-        $p = new PostFile('foo', $mp);
-        $this->assertEquals(
-            'form-data; name="foo"',
-            $p->getHeaders()['Content-Disposition']
-        );
-        $this->assertEquals(
-            'multipart/form-data; boundary=baz',
-            $p->getHeaders()['Content-Type']
-        );
-    }
-
-    public function testCanAddHeaders()
-    {
-        $p = new PostFile('foo', Stream::factory('hi'), 'test.php', [
-            'X-Foo' => '123',
-            'Content-Disposition' => 'bar'
-        ]);
-        $this->assertEquals('bar', $p->getHeaders()['Content-Disposition']);
-        $this->assertEquals('123', $p->getHeaders()['X-Foo']);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/QueryParserTest.php b/core/vendor/guzzlehttp/guzzle/tests/QueryParserTest.php
deleted file mode 100644
index e9075a8..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/QueryParserTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Query;
-use GuzzleHttp\QueryParser;
-
-class QueryParserTest extends \PHPUnit_Framework_TestCase
-{
-    public function parseQueryProvider()
-    {
-        return [
-            // Does not need to parse when the string is empty
-            ['', []],
-            // Can parse mult-values items
-            ['q=a&q=b', ['q' => ['a', 'b']]],
-            // Can parse multi-valued items that use numeric indices
-            ['q[0]=a&q[1]=b', ['q' => ['a', 'b']]],
-            // Can parse duplicates and does not include numeric indices
-            ['q[]=a&q[]=b', ['q' => ['a', 'b']]],
-            // Ensures that the value of "q" is an array even though one value
-            ['q[]=a', ['q' => ['a']]],
-            // Does not modify "." to "_" like PHP's parse_str()
-            ['q.a=a&q.b=b', ['q.a' => 'a', 'q.b' => 'b']],
-            // Can decode %20 to " "
-            ['q%20a=a%20b', ['q a' => 'a b']],
-            // Can parse funky strings with no values by assigning each to null
-            ['q&a', ['q' => null, 'a' => null]],
-            // Does not strip trailing equal signs
-            ['data=abc=', ['data' => 'abc=']],
-            // Can store duplicates without affecting other values
-            ['foo=a&foo=b&?Âµ=c', ['foo' => ['a', 'b'], '?Âµ' => 'c']],
-            // Sets value to null when no "=" is present
-            ['foo', ['foo' => null]],
-            // Preserves "0" keys.
-            ['0', ['0' => null]],
-            // Sets the value to an empty string when "=" is present
-            ['0=', ['0' => '']],
-            // Preserves falsey keys
-            ['var=0', ['var' => '0']],
-            // Can deeply nest and store duplicate PHP values
-            ['a[b][c]=1&a[b][c]=2', [
-                'a' => ['b' => ['c' => ['1', '2']]]
-            ]],
-            // Can parse PHP style arrays
-            ['a[b]=c&a[d]=e', ['a' => ['b' => 'c', 'd' => 'e']]],
-            // Ensure it doesn't leave things behind with repeated values
-            // Can parse mult-values items
-            ['q=a&q=b&q=c', ['q' => ['a', 'b', 'c']]],
-        ];
-    }
-
-    /**
-     * @dataProvider parseQueryProvider
-     */
-    public function testParsesQueries($input, $output)
-    {
-        $query = Query::fromString($input);
-        $this->assertEquals($output, $query->toArray());
-        // Normalize the input and output
-        $query->setEncodingType(false);
-        $this->assertEquals(rawurldecode($input), (string) $query);
-    }
-
-    public function testConvertsPlusSymbolsToSpacesByDefault()
-    {
-        $query = Query::fromString('var=foo+bar', true);
-        $this->assertEquals('foo bar', $query->get('var'));
-    }
-
-    public function testCanControlDecodingType()
-    {
-        $qp = new QueryParser();
-        $q = new Query();
-        $qp->parseInto($q, 'var=foo+bar', Query::RFC3986);
-        $this->assertEquals('foo+bar', $q->get('var'));
-        $qp->parseInto($q, 'var=foo+bar', Query::RFC1738);
-        $this->assertEquals('foo bar', $q->get('var'));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/QueryTest.php b/core/vendor/guzzlehttp/guzzle/tests/QueryTest.php
deleted file mode 100644
index 8b9d344..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/QueryTest.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Query;
-
-class QueryTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCanCastToString()
-    {
-        $q = new Query(['foo' => 'baz', 'bar' => 'bam boozle']);
-        $this->assertEquals('foo=baz&bar=bam%20boozle', (string) $q);
-    }
-
-    public function testCanDisableUrlEncoding()
-    {
-        $q = new Query(['bar' => 'bam boozle']);
-        $q->setEncodingType(false);
-        $this->assertEquals('bar=bam boozle', (string) $q);
-    }
-
-    public function testCanSpecifyRfc1783UrlEncodingType()
-    {
-        $q = new Query(['bar abc' => 'bam boozle']);
-        $q->setEncodingType(Query::RFC1738);
-        $this->assertEquals('bar+abc=bam+boozle', (string) $q);
-    }
-
-    public function testCanSpecifyRfc3986UrlEncodingType()
-    {
-        $q = new Query(['bar abc' => 'bam boozle', 'áˆ´' => 'hi']);
-        $q->setEncodingType(Query::RFC3986);
-        $this->assertEquals('bar%20abc=bam%20boozle&%E1%88%B4=hi', (string) $q);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesEncodingType()
-    {
-        (new Query(['bar' => 'bam boozle']))->setEncodingType('foo');
-    }
-
-    public function testAggregatesMultipleValues()
-    {
-        $q = new Query(['foo' => ['bar', 'baz']]);
-        $this->assertEquals('foo%5B0%5D=bar&foo%5B1%5D=baz', (string) $q);
-    }
-
-    public function testCanSetAggregator()
-    {
-        $q = new Query(['foo' => ['bar', 'baz']]);
-        $q->setAggregator(function (array $data) {
-            return ['foo' => ['barANDbaz']];
-        });
-        $this->assertEquals('foo=barANDbaz', (string) $q);
-    }
-
-    public function testAllowsMultipleValuesPerKey()
-    {
-        $q = new Query();
-        $q->add('facet', 'size');
-        $q->add('facet', 'width');
-        $q->add('facet.field', 'foo');
-        // Use the duplicate aggregator
-        $q->setAggregator($q::duplicateAggregator());
-        $this->assertEquals('facet=size&facet=width&facet.field=foo', (string) $q);
-    }
-
-    public function testAllowsZeroValues()
-    {
-        $query = new Query(array(
-            'foo' => 0,
-            'baz' => '0',
-            'bar' => null,
-            'boo' => false
-        ));
-        $this->assertEquals('foo=0&baz=0&bar&boo=', (string) $query);
-    }
-
-    private $encodeData = [
-        't' => [
-            'v1' => ['a', '1'],
-            'v2' => 'b',
-            'v3' => ['v4' => 'c', 'v5' => 'd']
-        ]
-    ];
-
-    public function testEncodesDuplicateAggregator()
-    {
-        $agg = Query::duplicateAggregator();
-        $result = $agg($this->encodeData);
-        $this->assertEquals(array(
-            't[v1]' => ['a', '1'],
-            't[v2]' => ['b'],
-            't[v3][v4]' => ['c'],
-            't[v3][v5]' => ['d'],
-        ), $result);
-    }
-
-    public function testDuplicateEncodesNoNumericIndices()
-    {
-        $agg = Query::duplicateAggregator();
-        $result = $agg($this->encodeData);
-        $this->assertEquals(array(
-            't[v1]' => ['a', '1'],
-            't[v2]' => ['b'],
-            't[v3][v4]' => ['c'],
-            't[v3][v5]' => ['d'],
-        ), $result);
-    }
-
-    public function testEncodesPhpAggregator()
-    {
-        $agg = Query::phpAggregator();
-        $result = $agg($this->encodeData);
-        $this->assertEquals(array(
-            't[v1][0]' => ['a'],
-            't[v1][1]' => ['1'],
-            't[v2]' => ['b'],
-            't[v3][v4]' => ['c'],
-            't[v3][v5]' => ['d'],
-        ), $result);
-    }
-
-    public function testPhpEncodesNoNumericIndices()
-    {
-        $agg = Query::phpAggregator(false);
-        $result = $agg($this->encodeData);
-        $this->assertEquals(array(
-            't[v1][]' => ['a', '1'],
-            't[v2]' => ['b'],
-            't[v3][v4]' => ['c'],
-            't[v3][v5]' => ['d'],
-        ), $result);
-    }
-
-    public function testCanDisableUrlEncodingDecoding()
-    {
-        $q = Query::fromString('foo=bar+baz boo%20', false);
-        $this->assertEquals('bar+baz boo%20', $q['foo']);
-        $this->assertEquals('foo=bar+baz boo%20', (string) $q);
-    }
-
-    public function testCanChangeUrlEncodingDecodingToRfc1738()
-    {
-        $q = Query::fromString('foo=bar+baz', Query::RFC1738);
-        $this->assertEquals('bar baz', $q['foo']);
-        $this->assertEquals('foo=bar+baz', (string) $q);
-    }
-
-    public function testCanChangeUrlEncodingDecodingToRfc3986()
-    {
-        $q = Query::fromString('foo=bar%20baz', Query::RFC3986);
-        $this->assertEquals('bar baz', $q['foo']);
-        $this->assertEquals('foo=bar%20baz', (string) $q);
-    }
-
-    public function testQueryStringsAllowSlashButDoesNotDecodeWhenDisable()
-    {
-        $q = Query::fromString('foo=bar%2Fbaz&bam=boo%20boo', Query::RFC3986);
-        $q->setEncodingType(false);
-        $this->assertEquals('foo=bar/baz&bam=boo boo', (string) $q);
-    }
-
-    public function testQueryStringsAllowDecodingEncodingCompletelyDisabled()
-    {
-        $q = Query::fromString('foo=bar%2Fbaz&bam=boo boo!', false);
-        $this->assertEquals('foo=bar%2Fbaz&bam=boo boo!', (string) $q);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php b/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php
deleted file mode 100644
index dd67684..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\RequestFsm;
-use GuzzleHttp\Ring\Future\CompletedFutureArray;
-use GuzzleHttp\Subscriber\Mock;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\EndEvent;
-use GuzzleHttp\Message\FutureResponse;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Event\RequestEvents;
-use React\Promise\Deferred;
-
-class RequestFsmTest extends \PHPUnit_Framework_TestCase
-{
-    private $mf;
-
-    public function setup()
-    {
-        $this->mf = new MessageFactory();
-    }
-
-    public function testEmitsBeforeEventInTransition()
-    {
-        $fsm = new RequestFsm(function () {
-            return new CompletedFutureArray(['status' => 200]);
-        }, $this->mf);
-        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
-        $c = false;
-        $t->request->getEmitter()->on('before', function (BeforeEvent $e) use (&$c) {
-            $c = true;
-        });
-        $fsm($t);
-        $this->assertTrue($c);
-    }
-
-    public function testEmitsCompleteEventInTransition()
-    {
-        $fsm = new RequestFsm(function () {
-            return new CompletedFutureArray(['status' => 200]);
-        }, $this->mf);
-        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
-        $t->response = new Response(200);
-        $t->state = 'complete';
-        $c = false;
-        $t->request->getEmitter()->on('complete', function (CompleteEvent $e) use (&$c) {
-            $c = true;
-        });
-        $fsm($t);
-        $this->assertTrue($c);
-    }
-
-    public function testDoesNotEmitCompleteForFuture()
-    {
-        $fsm = new RequestFsm(function () {
-            return new CompletedFutureArray(['status' => 200]);
-        }, $this->mf);
-        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
-        $deferred = new Deferred();
-        $t->response = new FutureResponse($deferred->promise());
-        $t->state = 'complete';
-        $c = false;
-        $t->request->getEmitter()->on('complete', function (CompleteEvent $e) use (&$c) {
-            $c = true;
-        });
-        $fsm($t);
-        $this->assertFalse($c);
-    }
-
-    public function testTransitionsThroughSuccessfulTransfer()
-    {
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock([new Response(200)]));
-        $request = $client->createRequest('GET', 'http://ewfewwef.com');
-        $this->addListeners($request, $calls);
-        $client->send($request);
-        $this->assertEquals(['before', 'complete', 'end'], $calls);
-    }
-
-    public function testTransitionsThroughErrorsInBefore()
-    {
-        $fsm = new RequestFsm(function () {
-            return new CompletedFutureArray(['status' => 200]);
-        }, $this->mf);
-        $client = new Client();
-        $request = $client->createRequest('GET', 'http://ewfewwef.com');
-        $t = new Transaction($client, $request);
-        $calls = [];
-        $this->addListeners($t->request, $calls);
-        $t->request->getEmitter()->on('before', function (BeforeEvent $e) {
-            throw new \Exception('foo');
-        });
-        try {
-            $fsm($t);
-            $this->fail('did not throw');
-        } catch (RequestException $e) {
-            $this->assertContains('foo', $t->exception->getMessage());
-            $this->assertEquals(['before', 'error', 'end'], $calls);
-        }
-    }
-
-    public function testTransitionsThroughErrorsInComplete()
-    {
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock([new Response(200)]));
-        $request = $client->createRequest('GET', 'http://ewfewwef.com');
-        $this->addListeners($request, $calls);
-        $request->getEmitter()->once('complete', function (CompleteEvent $e) {
-            throw new \Exception('foo');
-        });
-        try {
-            $client->send($request);
-            $this->fail('did not throw');
-        } catch (RequestException $e) {
-            $this->assertContains('foo', $e->getMessage());
-            $this->assertEquals(['before', 'complete', 'error', 'end'], $calls);
-        }
-    }
-
-    public function testTransitionsThroughErrorInterception()
-    {
-        $fsm = new RequestFsm(function () {
-            return new CompletedFutureArray(['status' => 404]);
-        }, $this->mf);
-        $client = new Client();
-        $request = $client->createRequest('GET', 'http://ewfewwef.com');
-        $t = new Transaction($client, $request);
-        $calls = [];
-        $this->addListeners($t->request, $calls);
-        $t->request->getEmitter()->on('error', function (ErrorEvent $e) {
-            $e->intercept(new Response(200));
-        });
-        $fsm($t);
-        $this->assertEquals(200, $t->response->getStatusCode());
-        $this->assertNull($t->exception);
-        $this->assertEquals(['before', 'complete', 'error', 'complete', 'end'], $calls);
-    }
-
-    private function addListeners(RequestInterface $request, &$calls)
-    {
-        $request->getEmitter()->on('before', function (BeforeEvent $e) use (&$calls) {
-            $calls[] = 'before';
-        }, RequestEvents::EARLY);
-        $request->getEmitter()->on('complete', function (CompleteEvent $e) use (&$calls) {
-            $calls[] = 'complete';
-        }, RequestEvents::EARLY);
-        $request->getEmitter()->on('error', function (ErrorEvent $e) use (&$calls) {
-            $calls[] = 'error';
-        }, RequestEvents::EARLY);
-        $request->getEmitter()->on('end', function (EndEvent $e) use (&$calls) {
-            $calls[] = 'end';
-        }, RequestEvents::EARLY);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage Too many state transitions
-     */
-    public function testDetectsInfiniteLoops()
-    {
-        $client = new Client([
-            'fsm' => $fsm = new RequestFsm(
-                function () {
-                    return new CompletedFutureArray(['status' => 200]);
-                },
-                new MessageFactory(),
-                3
-            )
-        ]);
-        $request = $client->createRequest('GET', 'http://foo.com:123');
-        $request->getEmitter()->on('before', function () {
-            throw new \Exception('foo');
-        });
-        $request->getEmitter()->on('error', function ($e) {
-            $e->retry();
-        });
-        $client->send($request);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php b/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php
deleted file mode 100644
index dc26a42..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ProgressEvent;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\RingBridge;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Ring\Client\MockHandler;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\RequestFsm;
-
-class RingBridgeTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCreatesRingRequests()
-    {
-        $stream = Stream::factory('test');
-        $request = new Request('GET', 'http://httpbin.org/get?a=b', [
-            'test' => 'hello'
-        ], $stream);
-        $request->getConfig()->set('foo', 'bar');
-        $trans = new Transaction(new Client(), $request);
-        $factory = new MessageFactory();
-        $fsm = new RequestFsm(function () {}, new MessageFactory());
-        $r = RingBridge::prepareRingRequest($trans, $factory, $fsm);
-        $this->assertEquals('http', $r['scheme']);
-        $this->assertEquals('1.1', $r['version']);
-        $this->assertEquals('GET', $r['http_method']);
-        $this->assertEquals('http://httpbin.org/get?a=b', $r['url']);
-        $this->assertEquals('/get', $r['uri']);
-        $this->assertEquals('a=b', $r['query_string']);
-        $this->assertEquals([
-            'Host' => ['httpbin.org'],
-            'test' => ['hello']
-        ], $r['headers']);
-        $this->assertSame($stream, $r['body']);
-        $this->assertEquals(['foo' => 'bar'], $r['client']);
-        $this->assertFalse($r['future']);
-    }
-
-    public function testCreatesRingRequestsWithNullQueryString()
-    {
-        $request = new Request('GET', 'http://httpbin.org');
-        $trans = new Transaction(new Client(), $request);
-        $factory = new MessageFactory();
-        $fsm = new RequestFsm(function () {}, new MessageFactory());
-        $r = RingBridge::prepareRingRequest($trans, $factory, $fsm);
-        $this->assertNull($r['query_string']);
-        $this->assertEquals('/', $r['uri']);
-        $this->assertEquals(['Host' => ['httpbin.org']], $r['headers']);
-        $this->assertNull($r['body']);
-        $this->assertEquals([], $r['client']);
-    }
-
-    public function testAddsProgress()
-    {
-        Server::enqueue([new Response(200)]);
-        $client = new Client(['base_url' => Server::$url]);
-        $request = $client->createRequest('GET');
-        $called = false;
-        $request->getEmitter()->on(
-            'progress',
-            function (ProgressEvent $e) use (&$called) {
-                $called = true;
-            }
-        );
-        $this->assertEquals(200, $client->send($request)->getStatusCode());
-        $this->assertTrue($called);
-    }
-
-    public function testGetsResponseProtocolVersionAndEffectiveUrlAndReason()
-    {
-        $client = new Client([
-            'handler' => new MockHandler([
-                'status'  => 200,
-                'reason' => 'test',
-                'headers' => [],
-                'version' => '1.0',
-                'effective_url' => 'http://foo.com'
-            ])
-        ]);
-        $request = $client->createRequest('GET', 'http://foo.com');
-        $response = $client->send($request);
-        $this->assertEquals('1.0', $response->getProtocolVersion());
-        $this->assertEquals('http://foo.com', $response->getEffectiveUrl());
-        $this->assertEquals('test', $response->getReasonPhrase());
-    }
-
-    public function testGetsStreamFromResponse()
-    {
-        $res = fopen('php://temp', 'r+');
-        fwrite($res, 'foo');
-        rewind($res);
-        $client = new Client([
-            'handler' => new MockHandler([
-                'status'  => 200,
-                'headers' => [],
-                'body' => $res
-            ])
-        ]);
-        $request = $client->createRequest('GET', 'http://foo.com');
-        $response = $client->send($request);
-        $this->assertEquals('foo', (string) $response->getBody());
-    }
-
-    public function testEmitsErrorEventOnError()
-    {
-        $client = new Client(['base_url' => 'http://127.0.0.1:123']);
-        $request = $client->createRequest('GET');
-        $called = false;
-        $request->getEmitter()->on('error', function () use (&$called) {
-            $called = true;
-        });
-        $request->getConfig()['timeout'] = 0.001;
-        $request->getConfig()['connect_timeout'] = 0.001;
-        try {
-            $client->send($request);
-            $this->fail('did not throw');
-        } catch (RequestException $e) {
-            $this->assertSame($request, $e->getRequest());
-            $this->assertContains('cURL error', $e->getMessage());
-            $this->assertTrue($called);
-        }
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesRingRequest()
-    {
-        RingBridge::fromRingRequest([]);
-    }
-
-    public function testCreatesRequestFromRing()
-    {
-        $request = RingBridge::fromRingRequest([
-            'http_method' => 'GET',
-            'uri' => '/',
-            'headers' => [
-                'foo' => ['bar'],
-                'host' => ['foo.com']
-            ],
-            'body' => 'test',
-            'version' => '1.0'
-        ]);
-        $this->assertEquals('GET', $request->getMethod());
-        $this->assertEquals('http://foo.com/', $request->getUrl());
-        $this->assertEquals('1.0', $request->getProtocolVersion());
-        $this->assertEquals('test', (string) $request->getBody());
-        $this->assertEquals('bar', $request->getHeader('foo'));
-    }
-
-    public function testCanInterceptException()
-    {
-        $client = new Client(['base_url' => 'http://127.0.0.1:123']);
-        $request = $client->createRequest('GET');
-        $called = false;
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$called) {
-                $called = true;
-                $e->intercept(new Response(200));
-            }
-        );
-        $request->getConfig()['timeout'] = 0.001;
-        $request->getConfig()['connect_timeout'] = 0.001;
-        $this->assertEquals(200, $client->send($request)->getStatusCode());
-        $this->assertTrue($called);
-    }
-
-    public function testCreatesLongException()
-    {
-        $r = new Request('GET', 'http://www.google.com');
-        $e = RingBridge::getNoRingResponseException($r);
-        $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e);
-        $this->assertSame($r, $e->getRequest());
-    }
-
-    public function testEnsuresResponseOrExceptionWhenCompletingResponse()
-    {
-        $trans = new Transaction(new Client(), new Request('GET', 'http://f.co'));
-        $f = new MessageFactory();
-        $fsm = new RequestFsm(function () {}, new MessageFactory());
-        try {
-            RingBridge::completeRingResponse($trans, [], $f, $fsm);
-        } catch (RequestException $e) {
-            $this->assertSame($trans->request, $e->getRequest());
-            $this->assertContains('RingPHP', $e->getMessage());
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Server.php b/core/vendor/guzzlehttp/guzzle/tests/Server.php
deleted file mode 100644
index 1de20e3..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Server.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\RingBridge;
-use GuzzleHttp\Tests\Ring\Client\Server as TestServer;
-
-/**
- * Placeholder for the RingPHP-Client server that makes it easier to use.
- */
-class Server
-{
-    public static $url = 'http://127.0.0.1:8125/';
-    public static $port = 8125;
-
-    /**
-     * Queue an array of responses or a single response on the server.
-     *
-     * Any currently queued responses will be overwritten.  Subsequent requests
-     * on the server will return queued responses in FIFO order.
-     *
-     * @param array $responses Responses to queue.
-     * @throws \Exception
-     */
-    public static function enqueue(array $responses)
-    {
-        static $factory;
-        if (!$factory) {
-            $factory = new MessageFactory();
-        }
-
-        $data = [];
-        foreach ($responses as $response) {
-            // Create the response object from a string
-            if (is_string($response)) {
-                $response = $factory->fromMessage($response);
-            } elseif (!($response instanceof ResponseInterface)) {
-                throw new \Exception('Responses must be strings or Responses');
-            }
-            $data[] = self::convertResponse($response);
-        }
-
-        TestServer::enqueue($data);
-    }
-
-    /**
-     * Get all of the received requests
-     *
-     * @param bool $hydrate Set to TRUE to turn the messages into
-     *      actual {@see RequestInterface} objects.  If $hydrate is FALSE,
-     *      requests will be returned as strings.
-     *
-     * @return array
-     * @throws \RuntimeException
-     */
-    public static function received($hydrate = false)
-    {
-        $response = TestServer::received();
-
-        if ($hydrate) {
-            $c = new Client();
-            $factory = new MessageFactory();
-            $response = array_map(function($message) use ($factory, $c) {
-                return RingBridge::fromRingRequest($message);
-            }, $response);
-        }
-
-        return $response;
-    }
-
-    public static function flush()
-    {
-        TestServer::flush();
-    }
-
-    public static function stop()
-    {
-        TestServer::stop();
-    }
-
-    public static function wait($maxTries = 5)
-    {
-        TestServer::wait($maxTries);
-    }
-
-    public static function start()
-    {
-        TestServer::start();
-    }
-
-    private static function convertResponse(Response $response)
-    {
-        $headers = array_map(function ($h) {
-            return implode(', ', $h);
-        }, $response->getHeaders());
-
-        return [
-            'status'  => $response->getStatusCode(),
-            'reason'  => $response->getReasonPhrase(),
-            'headers' => $headers,
-            'body'    => base64_encode((string) $response->getBody())
-        ];
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php
deleted file mode 100644
index bc17e2d..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Subscriber;
-
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Subscriber\Cookie;
-use GuzzleHttp\Subscriber\History;
-use GuzzleHttp\Subscriber\Mock;
-
-/**
- * @covers GuzzleHttp\Subscriber\Cookie
- */
-class CookieTest extends \PHPUnit_Framework_TestCase
-{
-    public function testExtractsAndStoresCookies()
-    {
-        $request = new Request('GET', '/');
-        $response = new Response(200);
-        $mock = $this->getMockBuilder('GuzzleHttp\Cookie\CookieJar')
-            ->setMethods(array('extractCookies'))
-            ->getMock();
-
-        $mock->expects($this->exactly(1))
-            ->method('extractCookies')
-            ->with($request, $response);
-
-        $plugin = new Cookie($mock);
-        $t = new Transaction(new Client(), $request);
-        $t->response = $response;
-        $plugin->onComplete(new CompleteEvent($t));
-    }
-
-    public function testProvidesCookieJar()
-    {
-        $jar = new CookieJar();
-        $plugin = new Cookie($jar);
-        $this->assertSame($jar, $plugin->getCookieJar());
-    }
-
-    public function testCookiesAreExtractedFromRedirectResponses()
-    {
-        $jar = new CookieJar();
-        $cookie = new Cookie($jar);
-        $history = new History();
-        $mock = new Mock([
-            "HTTP/1.1 302 Moved Temporarily\r\n" .
-            "Set-Cookie: test=583551; Domain=www.foo.com; Expires=Wednesday, 23-Mar-2050 19:49:45 GMT; Path=/\r\n" .
-            "Location: /redirect\r\n\r\n",
-            "HTTP/1.1 200 OK\r\n" .
-            "Content-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\n" .
-            "Content-Length: 0\r\n\r\n"
-        ]);
-        $client = new Client(['base_url' => 'http://www.foo.com']);
-        $client->getEmitter()->attach($cookie);
-        $client->getEmitter()->attach($mock);
-        $client->getEmitter()->attach($history);
-
-        $client->get();
-        $request = $client->createRequest('GET', '/');
-        $client->send($request);
-
-        $this->assertEquals('test=583551', $request->getHeader('Cookie'));
-        $requests = $history->getRequests();
-        // Confirm subsequent requests have the cookie.
-        $this->assertEquals('test=583551', $requests[2]->getHeader('Cookie'));
-        // Confirm the redirected request has the cookie.
-        $this->assertEquals('test=583551', $requests[1]->getHeader('Cookie'));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
deleted file mode 100644
index d28e301..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Subscriber;
-
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Subscriber\History;
-use GuzzleHttp\Subscriber\Mock;
-
-/**
- * @covers GuzzleHttp\Subscriber\History
- */
-class HistoryTest extends \PHPUnit_Framework_TestCase
-{
-    public function testAddsForErrorEvent()
-    {
-        $request = new Request('GET', '/');
-        $response = new Response(400);
-        $t = new Transaction(new Client(), $request);
-        $t->response = $response;
-        $e = new RequestException('foo', $request, $response);
-        $ev = new ErrorEvent($t, $e);
-        $h = new History(2);
-        $h->onError($ev);
-        // Only tracks when no response is present
-        $this->assertEquals([], $h->getRequests());
-    }
-
-    public function testLogsConnectionErrors()
-    {
-        $request = new Request('GET', '/');
-        $t = new Transaction(new Client(), $request);
-        $e = new RequestException('foo', $request);
-        $ev = new ErrorEvent($t, $e);
-        $h = new History();
-        $h->onError($ev);
-        $this->assertEquals([$request], $h->getRequests());
-    }
-
-    public function testMaintainsLimitValue()
-    {
-        $request = new Request('GET', '/');
-        $response = new Response(200);
-        $t = new Transaction(new Client(), $request);
-        $t->response = $response;
-        $ev = new CompleteEvent($t);
-        $h = new History(2);
-        $h->onComplete($ev);
-        $h->onComplete($ev);
-        $h->onComplete($ev);
-        $this->assertEquals(2, count($h));
-        $this->assertSame($request, $h->getLastRequest());
-        $this->assertSame($response, $h->getLastResponse());
-        foreach ($h as $trans) {
-            $this->assertInstanceOf('GuzzleHttp\Message\RequestInterface', $trans['request']);
-            $this->assertInstanceOf('GuzzleHttp\Message\ResponseInterface', $trans['response']);
-        }
-        return $h;
-    }
-
-    /**
-     * @depends testMaintainsLimitValue
-     */
-    public function testClearsHistory($h)
-    {
-        $this->assertEquals(2, count($h));
-        $h->clear();
-        $this->assertEquals(0, count($h));
-    }
-
-    public function testWorksWithMock()
-    {
-        $client = new Client(['base_url' => 'http://localhost/']);
-        $h = new History();
-        $client->getEmitter()->attach($h);
-        $mock = new Mock([new Response(200), new Response(201), new Response(202)]);
-        $client->getEmitter()->attach($mock);
-        $request = $client->createRequest('GET', '/');
-        $client->send($request);
-        $request->setMethod('PUT');
-        $client->send($request);
-        $request->setMethod('POST');
-        $client->send($request);
-        $this->assertEquals(3, count($h));
-
-        $result = implode("\n", array_map(function ($line) {
-            return strpos($line, 'User-Agent') === 0
-                ? 'User-Agent:'
-                : trim($line);
-        }, explode("\n", $h)));
-
-        $this->assertEquals("> GET / HTTP/1.1
-Host: localhost
-User-Agent:
-
-< HTTP/1.1 200 OK
-
-> PUT / HTTP/1.1
-Host: localhost
-User-Agent:
-
-< HTTP/1.1 201 Created
-
-> POST / HTTP/1.1
-Host: localhost
-User-Agent:
-
-< HTTP/1.1 202 Accepted
-", $result);
-    }
-
-    public function testCanCastToString()
-    {
-        $client = new Client(['base_url' => 'http://localhost/']);
-        $h = new History();
-        $client->getEmitter()->attach($h);
-
-        $mock = new Mock(array(
-            new Response(301, array('Location' => '/redirect1', 'Content-Length' => 0)),
-            new Response(307, array('Location' => '/redirect2', 'Content-Length' => 0)),
-            new Response(200, array('Content-Length' => '2'), Stream::factory('HI'))
-        ));
-
-        $client->getEmitter()->attach($mock);
-        $request = $client->createRequest('GET', '/');
-        $client->send($request);
-        $this->assertEquals(3, count($h));
-
-        $h = str_replace("\r", '', $h);
-        $this->assertContains("> GET / HTTP/1.1\nHost: localhost\nUser-Agent:", $h);
-        $this->assertContains("< HTTP/1.1 301 Moved Permanently\nLocation: /redirect1", $h);
-        $this->assertContains("< HTTP/1.1 307 Temporary Redirect\nLocation: /redirect2", $h);
-        $this->assertContains("< HTTP/1.1 200 OK\nContent-Length: 2\n\nHI", $h);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
deleted file mode 100644
index b026634..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Subscriber\HttpError;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Subscriber\Mock;
-
-/**
- * @covers GuzzleHttp\Subscriber\HttpError
- */
-class HttpErrorTest extends \PHPUnit_Framework_TestCase
-{
-    public function testIgnoreSuccessfulRequests()
-    {
-        $event = $this->getEvent();
-        $event->intercept(new Response(200));
-        (new HttpError())->onComplete($event);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\ClientException
-     */
-    public function testThrowsClientExceptionOnFailure()
-    {
-        $event = $this->getEvent();
-        $event->intercept(new Response(403));
-        (new HttpError())->onComplete($event);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\ServerException
-     */
-    public function testThrowsServerExceptionOnFailure()
-    {
-        $event = $this->getEvent();
-        $event->intercept(new Response(500));
-        (new HttpError())->onComplete($event);
-    }
-
-    private function getEvent()
-    {
-        return new CompleteEvent(new Transaction(new Client(), new Request('PUT', '/')));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\ClientException
-     */
-    public function testFullTransaction()
-    {
-        $client = new Client();
-        $client->getEmitter()->attach(new Mock([
-            new Response(403)
-        ]));
-        $client->get('http://httpbin.org');
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
deleted file mode 100644
index 5e82093..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Subscriber;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Subscriber\Mock;
-use GuzzleHttp\Message\FutureResponse;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\Stream;
-use React\Promise\Deferred;
-
-/**
- * @covers GuzzleHttp\Subscriber\Mock
- */
-class MockTest extends \PHPUnit_Framework_TestCase
-{
-    public static function createFuture(
-        callable $wait,
-        callable $cancel = null
-    ) {
-        $deferred = new Deferred();
-        return new FutureResponse(
-            $deferred->promise(),
-            function () use ($deferred, $wait) {
-                $deferred->resolve($wait());
-            },
-            $cancel
-        );
-    }
-
-    public function testDescribesSubscribedEvents()
-    {
-        $mock = new Mock();
-        $this->assertInternalType('array', $mock->getEvents());
-    }
-
-    public function testIsCountable()
-    {
-        $plugin = new Mock();
-        $plugin->addResponse((new MessageFactory())->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"));
-        $this->assertEquals(1, count($plugin));
-    }
-
-    public function testCanClearQueue()
-    {
-        $plugin = new Mock();
-        $plugin->addResponse((new MessageFactory())->fromMessage("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"));
-        $plugin->clearQueue();
-        $this->assertEquals(0, count($plugin));
-    }
-
-    public function testRetrievesResponsesFromFiles()
-    {
-        $tmp = tempnam('/tmp', 'tfile');
-        file_put_contents($tmp, "HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
-        $plugin = new Mock();
-        $plugin->addResponse($tmp);
-        unlink($tmp);
-        $this->assertEquals(1, count($plugin));
-        $q = $this->readAttribute($plugin, 'queue');
-        $this->assertEquals(201, $q[0]->getStatusCode());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionWhenInvalidResponse()
-    {
-        (new Mock())->addResponse(false);
-    }
-
-    public function testAddsMockResponseToRequestFromClient()
-    {
-        $response = new Response(200);
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $m = new Mock([$response]);
-        $ev = new BeforeEvent($t);
-        $m->onBefore($ev);
-        $this->assertSame($response, $t->response);
-    }
-
-    /**
-     * @expectedException \OutOfBoundsException
-     */
-    public function testUpdateThrowsExceptionWhenEmpty()
-    {
-        $p = new Mock();
-        $ev = new BeforeEvent(new Transaction(new Client(), new Request('GET', '/')));
-        $p->onBefore($ev);
-    }
-
-    public function testReadsBodiesFromMockedRequests()
-    {
-        $m = new Mock([new Response(200)]);
-        $client = new Client(['base_url' => 'http://test.com']);
-        $client->getEmitter()->attach($m);
-        $body = Stream::factory('foo');
-        $client->put('/', ['body' => $body]);
-        $this->assertEquals(3, $body->tell());
-    }
-
-    public function testCanMockBadRequestExceptions()
-    {
-        $client = new Client(['base_url' => 'http://test.com']);
-        $request = $client->createRequest('GET', '/');
-        $ex = new RequestException('foo', $request);
-        $mock = new Mock([$ex]);
-        $this->assertCount(1, $mock);
-        $request->getEmitter()->attach($mock);
-
-        try {
-            $client->send($request);
-            $this->fail('Did not dequeue an exception');
-        } catch (RequestException $e) {
-            $this->assertSame($e, $ex);
-            $this->assertSame($request, $ex->getRequest());
-        }
-    }
-
-    public function testCanMockFutureResponses()
-    {
-        $client = new Client(['base_url' => 'http://test.com']);
-        $request = $client->createRequest('GET', '/', ['future' => true]);
-        $response = new Response(200);
-        $future = self::createFuture(function () use ($response) {
-            return $response;
-        });
-        $mock = new Mock([$future]);
-        $this->assertCount(1, $mock);
-        $request->getEmitter()->attach($mock);
-        $res = $client->send($request);
-        $this->assertSame($future, $res);
-        $this->assertFalse($this->readAttribute($res, 'isRealized'));
-        $this->assertSame($response, $res->wait());
-    }
-
-    public function testCanMockExceptionFutureResponses()
-    {
-        $client = new Client(['base_url' => 'http://test.com']);
-        $request = $client->createRequest('GET', '/', ['future' => true]);
-        $future = self::createFuture(function () use ($request) {
-            throw new RequestException('foo', $request);
-        });
-
-        $mock = new Mock([$future]);
-        $request->getEmitter()->attach($mock);
-        $response = $client->send($request);
-        $this->assertSame($future, $response);
-        $this->assertFalse($this->readAttribute($response, 'isRealized'));
-
-        try {
-            $response->wait();
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertContains('foo', $e->getMessage());
-        }
-    }
-
-    public function testCanMockFailedFutureResponses()
-    {
-        $client = new Client(['base_url' => 'http://test.com']);
-        $request = $client->createRequest('GET', '/', ['future' => true]);
-
-        // The first mock will be a mocked future response.
-        $future = self::createFuture(function () use ($client) {
-            // When dereferenced, we will set a mocked response and send
-            // another request.
-            $client->get('http://httpbin.org', ['events' => [
-                'before' => function (BeforeEvent $e) {
-                    $e->intercept(new Response(404));
-                }
-            ]]);
-        });
-
-        $mock = new Mock([$future]);
-        $request->getEmitter()->attach($mock);
-        $response = $client->send($request);
-        $this->assertSame($future, $response);
-        $this->assertFalse($this->readAttribute($response, 'isRealized'));
-
-        try {
-            $response->wait();
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertEquals(404, $e->getResponse()->getStatusCode());
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php
deleted file mode 100644
index d07fdb4..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Message;
-
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Tests\Server;
-use GuzzleHttp\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Stream\NoSeekStream;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Subscriber\Prepare;
-
-/**
- * @covers GuzzleHttp\Subscriber\Prepare
- */
-class PrepareTest extends \PHPUnit_Framework_TestCase
-{
-    public function testIgnoresRequestsWithNoBody()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->request->hasHeader('Expect'));
-    }
-
-    public function testAppliesPostBody()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $p = $this->getMockBuilder('GuzzleHttp\Post\PostBody')
-            ->setMethods(['applyRequestHeaders'])
-            ->getMockForAbstractClass();
-        $p->expects($this->once())
-            ->method('applyRequestHeaders');
-        $t->request->setBody($p);
-        $s->onBefore(new BeforeEvent($t));
-    }
-
-    public function testAddsExpectHeaderWithTrue()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->getConfig()->set('expect', true);
-        $t->request->setBody(Stream::factory('foo'));
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals('100-Continue', $t->request->getHeader('Expect'));
-    }
-
-    public function testAddsExpectHeaderBySize()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->getConfig()->set('expect', 2);
-        $t->request->setBody(Stream::factory('foo'));
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertTrue($t->request->hasHeader('Expect'));
-    }
-
-    public function testDoesNotModifyExpectHeaderIfPresent()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->setHeader('Expect', 'foo');
-        $t->request->setBody(Stream::factory('foo'));
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals('foo', $t->request->getHeader('Expect'));
-    }
-
-    public function testDoesAddExpectHeaderWhenSetToFalse()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->getConfig()->set('expect', false);
-        $t->request->setBody(Stream::factory('foo'));
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->request->hasHeader('Expect'));
-    }
-
-    public function testDoesNotAddExpectHeaderBySize()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->getConfig()->set('expect', 10);
-        $t->request->setBody(Stream::factory('foo'));
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->request->hasHeader('Expect'));
-    }
-
-    public function testAddsExpectHeaderForNonSeekable()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->setBody(new NoSeekStream(Stream::factory('foo')));
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertTrue($t->request->hasHeader('Expect'));
-    }
-
-    public function testRemovesContentLengthWhenSendingWithChunked()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->setBody(Stream::factory('foo'));
-        $t->request->setHeader('Transfer-Encoding', 'chunked');
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->request->hasHeader('Content-Length'));
-    }
-
-    public function testUsesProvidedContentLengthAndRemovesXferEncoding()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->setBody(Stream::factory('foo'));
-        $t->request->setHeader('Content-Length', '3');
-        $t->request->setHeader('Transfer-Encoding', 'chunked');
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals(3, $t->request->getHeader('Content-Length'));
-        $this->assertFalse($t->request->hasHeader('Transfer-Encoding'));
-    }
-
-    public function testSetsContentTypeIfPossibleFromStream()
-    {
-        $body = $this->getMockBody();
-        $sub = new Prepare();
-        $t = $this->getTrans();
-        $t->request->setBody($body);
-        $sub->onBefore(new BeforeEvent($t));
-        $this->assertEquals(
-            'image/jpeg',
-            $t->request->getHeader('Content-Type')
-        );
-        $this->assertEquals(4, $t->request->getHeader('Content-Length'));
-    }
-
-    public function testDoesNotOverwriteExistingContentType()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->setBody($this->getMockBody());
-        $t->request->setHeader('Content-Type', 'foo/baz');
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals(
-            'foo/baz',
-            $t->request->getHeader('Content-Type')
-        );
-    }
-
-    public function testSetsContentLengthIfPossible()
-    {
-        $s = new Prepare();
-        $t = $this->getTrans();
-        $t->request->setBody($this->getMockBody());
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals(4, $t->request->getHeader('Content-Length'));
-    }
-
-    public function testSetsTransferEncodingChunkedIfNeeded()
-    {
-        $r = new Request('PUT', '/');
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['getSize'])
-            ->getMockForAbstractClass();
-        $s->expects($this->exactly(2))
-            ->method('getSize')
-            ->will($this->returnValue(null));
-        $r->setBody($s);
-        $t = $this->getTrans($r);
-        $s = new Prepare();
-        $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals('chunked', $r->getHeader('Transfer-Encoding'));
-    }
-
-    public function testContentLengthIntegrationTest()
-    {
-        Server::flush();
-        Server::enqueue([new Response(200)]);
-        $client = new Client(['base_url' => Server::$url]);
-        $this->assertEquals(200, $client->put('/', [
-            'body' => 'test'
-        ])->getStatusCode());
-        $request = Server::received(true)[0];
-        $this->assertEquals('PUT', $request->getMethod());
-        $this->assertEquals('4', $request->getHeader('Content-Length'));
-        $this->assertEquals('test', (string) $request->getBody());
-    }
-
-    private function getTrans($request = null)
-    {
-        return new Transaction(
-            new Client(),
-            $request ?: new Request('PUT', '/')
-        );
-    }
-
-    /**
-     * @return \GuzzleHttp\Stream\StreamInterface
-     */
-    private function getMockBody()
-    {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\MetadataStreamInterface')
-            ->setMethods(['getMetadata', 'getSize'])
-            ->getMockForAbstractClass();
-        $s->expects($this->any())
-            ->method('getMetadata')
-            ->with('uri')
-            ->will($this->returnValue('/foo/baz/bar.jpg'));
-        $s->expects($this->exactly(2))
-            ->method('getSize')
-            ->will($this->returnValue(4));
-
-        return $s;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
deleted file mode 100644
index 293cfc2..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
+++ /dev/null
@@ -1,288 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Plugin\Redirect;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Subscriber\History;
-use GuzzleHttp\Subscriber\Mock;
-
-/**
- * @covers GuzzleHttp\Subscriber\Redirect
- */
-class RedirectTest extends \PHPUnit_Framework_TestCase
-{
-    public function testRedirectsRequests()
-    {
-        $mock = new Mock();
-        $history = new History();
-        $mock->addMultiple([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect1\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect2\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-
-        $client = new Client(['base_url' => 'http://test.com']);
-        $client->getEmitter()->attach($history);
-        $client->getEmitter()->attach($mock);
-
-        $request = $client->createRequest('GET', '/foo');
-        // Ensure "end" is called only once
-        $called = 0;
-        $request->getEmitter()->on('end', function () use (&$called) {
-            $called++;
-        });
-        $response = $client->send($request);
-
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertContains('/redirect2', $response->getEffectiveUrl());
-
-        // Ensure that two requests were sent
-        $requests = $history->getRequests(true);
-
-        $this->assertEquals('/foo', $requests[0]->getPath());
-        $this->assertEquals('GET', $requests[0]->getMethod());
-        $this->assertEquals('/redirect1', $requests[1]->getPath());
-        $this->assertEquals('GET', $requests[1]->getMethod());
-        $this->assertEquals('/redirect2', $requests[2]->getPath());
-        $this->assertEquals('GET', $requests[2]->getMethod());
-
-        $this->assertEquals(1, $called);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\TooManyRedirectsException
-     * @expectedExceptionMessage Will not follow more than
-     */
-    public function testCanLimitNumberOfRedirects()
-    {
-        $mock = new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect1\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect2\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect3\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect4\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect5\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect6\r\nContent-Length: 0\r\n\r\n"
-        ]);
-        $client = new Client();
-        $client->getEmitter()->attach($mock);
-        $client->get('http://www.example.com/foo');
-    }
-
-    public function testDefaultBehaviorIsToRedirectWithGetForEntityEnclosingRequests()
-    {
-        $h = new History();
-        $mock = new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-        $client = new Client();
-        $client->getEmitter()->attach($mock);
-        $client->getEmitter()->attach($h);
-        $client->post('http://test.com/foo', [
-            'headers' => ['X-Baz' => 'bar'],
-            'body' => 'testing'
-        ]);
-
-        $requests = $h->getRequests(true);
-        $this->assertEquals('POST', $requests[0]->getMethod());
-        $this->assertEquals('GET', $requests[1]->getMethod());
-        $this->assertEquals('bar', (string) $requests[1]->getHeader('X-Baz'));
-        $this->assertEquals('GET', $requests[2]->getMethod());
-    }
-
-    public function testCanRedirectWithStrictRfcCompliance()
-    {
-        $h = new History();
-        $mock = new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-        $client = new Client(['base_url' => 'http://test.com']);
-        $client->getEmitter()->attach($mock);
-        $client->getEmitter()->attach($h);
-        $client->post('/foo', [
-            'headers' => ['X-Baz' => 'bar'],
-            'body' => 'testing',
-            'allow_redirects' => ['max' => 10, 'strict' => true]
-        ]);
-
-        $requests = $h->getRequests(true);
-        $this->assertEquals('POST', $requests[0]->getMethod());
-        $this->assertEquals('POST', $requests[1]->getMethod());
-        $this->assertEquals('bar', (string) $requests[1]->getHeader('X-Baz'));
-        $this->assertEquals('POST', $requests[2]->getMethod());
-    }
-
-    public function testRewindsStreamWhenRedirectingIfNeeded()
-    {
-        $h = new History();
-        $mock = new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-        $client = new Client(['base_url' => 'http://test.com']);
-        $client->getEmitter()->attach($mock);
-        $client->getEmitter()->attach($h);
-
-        $body = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['seek', 'read', 'eof', 'tell'])
-            ->getMockForAbstractClass();
-        $body->expects($this->once())->method('tell')->will($this->returnValue(1));
-        $body->expects($this->once())->method('seek')->will($this->returnValue(true));
-        $body->expects($this->any())->method('eof')->will($this->returnValue(true));
-        $body->expects($this->any())->method('read')->will($this->returnValue('foo'));
-        $client->post('/foo', [
-            'body' => $body,
-            'allow_redirects' => ['max' => 5, 'strict' => true]
-        ]);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\CouldNotRewindStreamException
-     * @expectedExceptionMessage Unable to rewind the non-seekable request body after redirecting
-     */
-    public function testThrowsExceptionWhenStreamCannotBeRewound()
-    {
-        $h = new History();
-        $mock = new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-        $client = new Client();
-        $client->getEmitter()->attach($mock);
-        $client->getEmitter()->attach($h);
-
-        $body = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['seek', 'read', 'eof', 'tell'])
-            ->getMockForAbstractClass();
-        $body->expects($this->once())->method('tell')->will($this->returnValue(1));
-        $body->expects($this->once())->method('seek')->will($this->returnValue(false));
-        $body->expects($this->any())->method('eof')->will($this->returnValue(true));
-        $body->expects($this->any())->method('read')->will($this->returnValue('foo'));
-        $client->post('http://example.com/foo', [
-            'body' => $body,
-            'allow_redirects' => ['max' => 10, 'strict' => true]
-        ]);
-    }
-
-    public function testRedirectsCanBeDisabledPerRequest()
-    {
-        $client = new Client(['base_url' => 'http://test.com']);
-        $client->getEmitter()->attach(new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]));
-        $response = $client->put('/', ['body' => 'test', 'allow_redirects' => false]);
-        $this->assertEquals(301, $response->getStatusCode());
-    }
-
-    public function testCanRedirectWithNoLeadingSlashAndQuery()
-    {
-        $h = new History();
-        $client = new Client(['base_url' => 'http://www.foo.com']);
-        $client->getEmitter()->attach(new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect?foo=bar\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]));
-        $client->getEmitter()->attach($h);
-        $client->get('?foo=bar');
-        $requests = $h->getRequests(true);
-        $this->assertEquals('http://www.foo.com?foo=bar', $requests[0]->getUrl());
-        $this->assertEquals('http://www.foo.com/redirect?foo=bar', $requests[1]->getUrl());
-    }
-
-    public function testHandlesRedirectsWithSpacesProperly()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com']);
-        $client->getEmitter()->attach(new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect 1\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]));
-        $h = new History();
-        $client->getEmitter()->attach($h);
-        $client->get('/foo');
-        $reqs = $h->getRequests(true);
-        $this->assertEquals('/redirect%201', $reqs[1]->getResource());
-    }
-
-    public function testAddsRefererWhenPossible()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com']);
-        $client->getEmitter()->attach(new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /bar\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]));
-        $h = new History();
-        $client->getEmitter()->attach($h);
-        $client->get('/foo', ['allow_redirects' => ['max' => 5, 'referer' => true]]);
-        $reqs = $h->getRequests(true);
-        $this->assertEquals('http://www.foo.com/foo', $reqs[1]->getHeader('Referer'));
-    }
-
-    public function testDoesNotAddRefererWhenChangingProtocols()
-    {
-        $client = new Client(['base_url' => 'https://www.foo.com']);
-        $client->getEmitter()->attach(new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\n"
-            . "Location: http://www.foo.com/foo\r\n"
-            . "Content-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]));
-        $h = new History();
-        $client->getEmitter()->attach($h);
-        $client->get('/foo', ['allow_redirects' => ['max' => 5, 'referer' => true]]);
-        $reqs = $h->getRequests(true);
-        $this->assertFalse($reqs[1]->hasHeader('Referer'));
-    }
-
-    public function testRedirectsWithGetOn303()
-    {
-        $h = new History();
-        $mock = new Mock([
-            "HTTP/1.1 303 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-        $client = new Client();
-        $client->getEmitter()->attach($mock);
-        $client->getEmitter()->attach($h);
-        $client->post('http://test.com/foo', ['body' => 'testing']);
-        $requests = $h->getRequests(true);
-        $this->assertEquals('POST', $requests[0]->getMethod());
-        $this->assertEquals('GET', $requests[1]->getMethod());
-    }
-
-    public function testRelativeLinkBasedLatestRequest()
-    {
-        $client = new Client(['base_url' => 'http://www.foo.com']);
-        $client->getEmitter()->attach(new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: http://www.bar.com\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]));
-        $response = $client->get('/');
-        $this->assertEquals(
-            'http://www.bar.com/redirect',
-            $response->getEffectiveUrl()
-        );
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\BadResponseException
-     * @expectedExceptionMessage Redirect URL, https://foo.com/redirect2, does not use one of the allowed redirect protocols: http
-     */
-    public function testThrowsWhenRedirectingToInvalidUrlProtocol()
-    {
-        $mock = new Mock([
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: /redirect1\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 301 Moved Permanently\r\nLocation: https://foo.com/redirect2\r\nContent-Length: 0\r\n\r\n"
-        ]);
-        $client = new Client();
-        $client->getEmitter()->attach($mock);
-        $client->get('http://www.example.com/foo', [
-            'allow_redirects' => [
-                'protocols' => ['http']
-            ]
-        ]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php b/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php
deleted file mode 100644
index 42965b1..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Transaction;
-
-class TransactionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHoldsData()
-    {
-        $client = new Client();
-        $request = new Request('GET', 'http://www.foo.com');
-        $t = new Transaction($client, $request);
-        $this->assertSame($client, $t->client);
-        $this->assertSame($request, $t->request);
-        $response = new Response(200);
-        $t->response = $response;
-        $this->assertSame($response, $t->response);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/UriTemplateTest.php b/core/vendor/guzzlehttp/guzzle/tests/UriTemplateTest.php
deleted file mode 100644
index 3f7a7f0..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/UriTemplateTest.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\UriTemplate;
-
-/**
- * @covers GuzzleHttp\UriTemplate
- */
-class UriTemplateTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @return array
-     */
-    public function templateProvider()
-    {
-        $params = array(
-            'var'   => 'value',
-            'hello' => 'Hello World!',
-            'empty' => '',
-            'path'  => '/foo/bar',
-            'x'     => '1024',
-            'y'     => '768',
-            'null'  => null,
-            'list'  => array('red', 'green', 'blue'),
-            'keys'  => array(
-                "semi"  => ';',
-                "dot"   => '.',
-                "comma" => ','
-            ),
-            'empty_keys' => array(),
-        );
-
-        return array_map(function ($t) use ($params) {
-            $t[] = $params;
-            return $t;
-        }, array(
-            array('foo',                 'foo'),
-            array('{var}',               'value'),
-            array('{hello}',             'Hello%20World%21'),
-            array('{+var}',              'value'),
-            array('{+hello}',            'Hello%20World!'),
-            array('{+path}/here',        '/foo/bar/here'),
-            array('here?ref={+path}',    'here?ref=/foo/bar'),
-            array('X{#var}',             'X#value'),
-            array('X{#hello}',           'X#Hello%20World!'),
-            array('map?{x,y}',           'map?1024,768'),
-            array('{x,hello,y}',         '1024,Hello%20World%21,768'),
-            array('{+x,hello,y}',        '1024,Hello%20World!,768'),
-            array('{+path,x}/here',      '/foo/bar,1024/here'),
-            array('{#x,hello,y}',        '#1024,Hello%20World!,768'),
-            array('{#path,x}/here',      '#/foo/bar,1024/here'),
-            array('X{.var}',             'X.value'),
-            array('X{.x,y}',             'X.1024.768'),
-            array('{/var}',              '/value'),
-            array('{/var,x}/here',       '/value/1024/here'),
-            array('{;x,y}',              ';x=1024;y=768'),
-            array('{;x,y,empty}',        ';x=1024;y=768;empty'),
-            array('{?x,y}',              '?x=1024&y=768'),
-            array('{?x,y,empty}',        '?x=1024&y=768&empty='),
-            array('?fixed=yes{&x}',      '?fixed=yes&x=1024'),
-            array('{&x,y,empty}',        '&x=1024&y=768&empty='),
-            array('{var:3}',             'val'),
-            array('{var:30}',            'value'),
-            array('{list}',              'red,green,blue'),
-            array('{list*}',             'red,green,blue'),
-            array('{keys}',              'semi,%3B,dot,.,comma,%2C'),
-            array('{keys*}',             'semi=%3B,dot=.,comma=%2C'),
-            array('{+path:6}/here',      '/foo/b/here'),
-            array('{+list}',             'red,green,blue'),
-            array('{+list*}',            'red,green,blue'),
-            array('{+keys}',             'semi,;,dot,.,comma,,'),
-            array('{+keys*}',            'semi=;,dot=.,comma=,'),
-            array('{#path:6}/here',      '#/foo/b/here'),
-            array('{#list}',             '#red,green,blue'),
-            array('{#list*}',            '#red,green,blue'),
-            array('{#keys}',             '#semi,;,dot,.,comma,,'),
-            array('{#keys*}',            '#semi=;,dot=.,comma=,'),
-            array('X{.var:3}',           'X.val'),
-            array('X{.list}',            'X.red,green,blue'),
-            array('X{.list*}',           'X.red.green.blue'),
-            array('X{.keys}',            'X.semi,%3B,dot,.,comma,%2C'),
-            array('X{.keys*}',           'X.semi=%3B.dot=..comma=%2C'),
-            array('{/var:1,var}',        '/v/value'),
-            array('{/list}',             '/red,green,blue'),
-            array('{/list*}',            '/red/green/blue'),
-            array('{/list*,path:4}',     '/red/green/blue/%2Ffoo'),
-            array('{/keys}',             '/semi,%3B,dot,.,comma,%2C'),
-            array('{/keys*}',            '/semi=%3B/dot=./comma=%2C'),
-            array('{;hello:5}',          ';hello=Hello'),
-            array('{;list}',             ';list=red,green,blue'),
-            array('{;list*}',            ';list=red;list=green;list=blue'),
-            array('{;keys}',             ';keys=semi,%3B,dot,.,comma,%2C'),
-            array('{;keys*}',            ';semi=%3B;dot=.;comma=%2C'),
-            array('{?var:3}',            '?var=val'),
-            array('{?list}',             '?list=red,green,blue'),
-            array('{?list*}',            '?list=red&list=green&list=blue'),
-            array('{?keys}',             '?keys=semi,%3B,dot,.,comma,%2C'),
-            array('{?keys*}',            '?semi=%3B&dot=.&comma=%2C'),
-            array('{&var:3}',            '&var=val'),
-            array('{&list}',             '&list=red,green,blue'),
-            array('{&list*}',            '&list=red&list=green&list=blue'),
-            array('{&keys}',             '&keys=semi,%3B,dot,.,comma,%2C'),
-            array('{&keys*}',            '&semi=%3B&dot=.&comma=%2C'),
-            array('{.null}',            ''),
-            array('{.null,var}',        '.value'),
-            array('X{.empty_keys*}',     'X'),
-            array('X{.empty_keys}',      'X'),
-            // Test that missing expansions are skipped
-            array('test{&missing*}',     'test'),
-            // Test that multiple expansions can be set
-            array('http://{var}/{var:2}{?keys*}', 'http://value/va?semi=%3B&dot=.&comma=%2C'),
-            // Test more complex query string stuff
-            array('http://www.test.com{+path}{?var,keys*}', 'http://www.test.com/foo/bar?var=value&semi=%3B&dot=.&comma=%2C')
-        ));
-    }
-
-    /**
-     * @dataProvider templateProvider
-     */
-    public function testExpandsUriTemplates($template, $expansion, $params)
-    {
-        $uri = new UriTemplate($template);
-        $this->assertEquals($expansion, $uri->expand($template, $params));
-    }
-
-    public function expressionProvider()
-    {
-        return array(
-            array(
-                '{+var*}', array(
-                'operator' => '+',
-                'values'   => array(
-                    array('value' => 'var', 'modifier' => '*')
-                )
-            ),
-            ),
-            array(
-                '{?keys,var,val}', array(
-                'operator' => '?',
-                'values'   => array(
-                    array('value' => 'keys', 'modifier' => ''),
-                    array('value' => 'var', 'modifier' => ''),
-                    array('value' => 'val', 'modifier' => '')
-                )
-            ),
-            ),
-            array(
-                '{+x,hello,y}', array(
-                'operator' => '+',
-                'values'   => array(
-                    array('value' => 'x', 'modifier' => ''),
-                    array('value' => 'hello', 'modifier' => ''),
-                    array('value' => 'y', 'modifier' => '')
-                )
-            )
-            )
-        );
-    }
-
-    /**
-     * @dataProvider expressionProvider
-     */
-    public function testParsesExpressions($exp, $data)
-    {
-        $template = new UriTemplate($exp);
-
-        // Access the config object
-        $class = new \ReflectionClass($template);
-        $method = $class->getMethod('parseExpression');
-        $method->setAccessible(true);
-
-        $exp = substr($exp, 1, -1);
-        $this->assertEquals($data, $method->invokeArgs($template, array($exp)));
-    }
-
-    /**
-     * @ticket https://github.com/guzzle/guzzle/issues/90
-     */
-    public function testAllowsNestedArrayExpansion()
-    {
-        $template = new UriTemplate();
-
-        $result = $template->expand('http://example.com{+path}{/segments}{?query,data*,foo*}', array(
-            'path'     => '/foo/bar',
-            'segments' => array('one', 'two'),
-            'query'    => 'test',
-            'data'     => array(
-                'more' => array('fun', 'ice cream')
-            ),
-            'foo' => array(
-                'baz' => array(
-                    'bar'  => 'fizz',
-                    'test' => 'buzz'
-                ),
-                'bam' => 'boo'
-            )
-        ));
-
-        $this->assertEquals('http://example.com/foo/bar/one,two?query=test&more%5B0%5D=fun&more%5B1%5D=ice%20cream&baz%5Bbar%5D=fizz&baz%5Btest%5D=buzz&bam=boo', $result);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php b/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
deleted file mode 100644
index efd374c..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
+++ /dev/null
@@ -1,356 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Query;
-use GuzzleHttp\Url;
-
-/**
- * @covers GuzzleHttp\Url
- */
-class UrlTest extends \PHPUnit_Framework_TestCase
-{
-    const RFC3986_BASE = "http://a/b/c/d;p?q";
-
-    public function testEmptyUrl()
-    {
-        $url = Url::fromString('');
-        $this->assertEquals('', (string) $url);
-    }
-
-    public function testPortIsDeterminedFromScheme()
-    {
-        $this->assertEquals(80, Url::fromString('http://www.test.com/')->getPort());
-        $this->assertEquals(443, Url::fromString('https://www.test.com/')->getPort());
-        $this->assertEquals(21, Url::fromString('ftp://www.test.com/')->getPort());
-        $this->assertEquals(8192, Url::fromString('http://www.test.com:8192/')->getPort());
-        $this->assertEquals(null, Url::fromString('foo://www.test.com/')->getPort());
-    }
-
-    public function testRemovesDefaultPortWhenSettingScheme()
-    {
-        $url = Url::fromString('http://www.test.com/');
-        $url->setPort(80);
-        $url->setScheme('https');
-        $this->assertEquals(443, $url->getPort());
-    }
-
-    public function testCloneCreatesNewInternalObjects()
-    {
-        $u1 = Url::fromString('http://www.test.com/');
-        $u2 = clone $u1;
-        $this->assertNotSame($u1->getQuery(), $u2->getQuery());
-    }
-
-    public function testValidatesUrlPartsInFactory()
-    {
-        $url = Url::fromString('/index.php');
-        $this->assertEquals('/index.php', (string) $url);
-        $this->assertFalse($url->isAbsolute());
-
-        $url = 'http://michael:test@test.com:80/path/123?q=abc#test';
-        $u = Url::fromString($url);
-        $this->assertEquals('http://michael:test@test.com/path/123?q=abc#test', (string) $u);
-        $this->assertTrue($u->isAbsolute());
-    }
-
-    public function testAllowsFalsyUrlParts()
-    {
-        $url = Url::fromString('http://a:50/0?0#0');
-        $this->assertSame('a', $url->getHost());
-        $this->assertEquals(50, $url->getPort());
-        $this->assertSame('/0', $url->getPath());
-        $this->assertEquals('0', (string) $url->getQuery());
-        $this->assertSame('0', $url->getFragment());
-        $this->assertEquals('http://a:50/0?0#0', (string) $url);
-
-        $url = Url::fromString('');
-        $this->assertSame('', (string) $url);
-
-        $url = Url::fromString('0');
-        $this->assertSame('0', (string) $url);
-    }
-
-    public function testBuildsRelativeUrlsWithFalsyParts()
-    {
-        $url = Url::buildUrl(['path' => '/0']);
-        $this->assertSame('/0', $url);
-
-        $url = Url::buildUrl(['path' => '0']);
-        $this->assertSame('0', $url);
-
-        $url = Url::buildUrl(['host' => '', 'path' => '0']);
-        $this->assertSame('0', $url);
-    }
-
-    public function testUrlStoresParts()
-    {
-        $url = Url::fromString('http://test:pass@www.test.com:8081/path/path2/?a=1&b=2#fragment');
-        $this->assertEquals('http', $url->getScheme());
-        $this->assertEquals('test', $url->getUsername());
-        $this->assertEquals('pass', $url->getPassword());
-        $this->assertEquals('www.test.com', $url->getHost());
-        $this->assertEquals(8081, $url->getPort());
-        $this->assertEquals('/path/path2/', $url->getPath());
-        $this->assertEquals('fragment', $url->getFragment());
-        $this->assertEquals('a=1&b=2', (string) $url->getQuery());
-
-        $this->assertEquals(array(
-            'fragment' => 'fragment',
-            'host' => 'www.test.com',
-            'pass' => 'pass',
-            'path' => '/path/path2/',
-            'port' => 8081,
-            'query' => 'a=1&b=2',
-            'scheme' => 'http',
-            'user' => 'test'
-        ), $url->getParts());
-    }
-
-    public function testHandlesPathsCorrectly()
-    {
-        $url = Url::fromString('http://www.test.com');
-        $this->assertEquals('', $url->getPath());
-        $url->setPath('test');
-        $this->assertEquals('test', $url->getPath());
-
-        $url->setPath('/test/123/abc');
-        $this->assertEquals(array('', 'test', '123', 'abc'), $url->getPathSegments());
-
-        $parts = parse_url('http://www.test.com/test');
-        $parts['path'] = '';
-        $this->assertEquals('http://www.test.com', Url::buildUrl($parts));
-        $parts['path'] = 'test';
-        $this->assertEquals('http://www.test.com/test', Url::buildUrl($parts));
-    }
-
-    public function testAddsQueryIfPresent()
-    {
-        $this->assertEquals('?foo=bar', Url::buildUrl(array(
-            'query' => 'foo=bar'
-        )));
-    }
-
-    public function testAddsToPath()
-    {
-        // Does nothing here
-        $url = Url::fromString('http://e.com/base?a=1');
-        $url->addPath(false);
-        $this->assertEquals('http://e.com/base?a=1', $url);
-        $url = Url::fromString('http://e.com/base?a=1');
-        $url->addPath('');
-        $this->assertEquals('http://e.com/base?a=1', $url);
-        $url = Url::fromString('http://e.com/base?a=1');
-        $url->addPath('/');
-        $this->assertEquals('http://e.com/base?a=1', $url);
-        $url = Url::fromString('http://e.com/base');
-        $url->addPath('0');
-        $this->assertEquals('http://e.com/base/0', $url);
-
-        $url = Url::fromString('http://e.com/base?a=1');
-        $url->addPath('relative');
-        $this->assertEquals('http://e.com/base/relative?a=1', $url);
-        $url = Url::fromString('http://e.com/base?a=1');
-        $url->addPath('/relative');
-        $this->assertEquals('http://e.com/base/relative?a=1', $url);
-    }
-
-    /**
-     * URL combination data provider
-     *
-     * @return array
-     */
-    public function urlCombineDataProvider()
-    {
-        return [
-            // Specific test cases
-            ['http://www.example.com/',           'http://www.example.com/', 'http://www.example.com/'],
-            ['http://www.example.com/path',       '/absolute', 'http://www.example.com/absolute'],
-            ['http://www.example.com/path',       '/absolute?q=2', 'http://www.example.com/absolute?q=2'],
-            ['http://www.example.com/',           '?q=1', 'http://www.example.com/?q=1'],
-            ['http://www.example.com/path',       'http://test.com', 'http://test.com'],
-            ['http://www.example.com:8080/path',  'http://test.com', 'http://test.com'],
-            ['http://www.example.com:8080/path',  '?q=2#abc', 'http://www.example.com:8080/path?q=2#abc'],
-            ['http://www.example.com/path',       'http://u:a@www.example.com/', 'http://u:a@www.example.com/'],
-            ['/path?q=2', 'http://www.test.com/', 'http://www.test.com/path?q=2'],
-            ['http://api.flickr.com/services/',   'http://www.flickr.com/services/oauth/access_token', 'http://www.flickr.com/services/oauth/access_token'],
-            ['https://www.example.com/path',      '//foo.com/abc', 'https://foo.com/abc'],
-            ['https://www.example.com/0/',        'relative/foo', 'https://www.example.com/0/relative/foo'],
-            ['',                                  '0', '0'],
-            // RFC 3986 test cases
-            [self::RFC3986_BASE, 'g:h',           'g:h'],
-            [self::RFC3986_BASE, 'g',             'http://a/b/c/g'],
-            [self::RFC3986_BASE, './g',           'http://a/b/c/g'],
-            [self::RFC3986_BASE, 'g/',            'http://a/b/c/g/'],
-            [self::RFC3986_BASE, '/g',            'http://a/g'],
-            [self::RFC3986_BASE, '//g',           'http://g'],
-            [self::RFC3986_BASE, '?y',            'http://a/b/c/d;p?y'],
-            [self::RFC3986_BASE, 'g?y',           'http://a/b/c/g?y'],
-            [self::RFC3986_BASE, '#s',            'http://a/b/c/d;p?q#s'],
-            [self::RFC3986_BASE, 'g#s',           'http://a/b/c/g#s'],
-            [self::RFC3986_BASE, 'g?y#s',         'http://a/b/c/g?y#s'],
-            [self::RFC3986_BASE, ';x',            'http://a/b/c/;x'],
-            [self::RFC3986_BASE, 'g;x',           'http://a/b/c/g;x'],
-            [self::RFC3986_BASE, 'g;x?y#s',       'http://a/b/c/g;x?y#s'],
-            [self::RFC3986_BASE, '',              self::RFC3986_BASE],
-            [self::RFC3986_BASE, '.',             'http://a/b/c/'],
-            [self::RFC3986_BASE, './',            'http://a/b/c/'],
-            [self::RFC3986_BASE, '..',            'http://a/b/'],
-            [self::RFC3986_BASE, '../',           'http://a/b/'],
-            [self::RFC3986_BASE, '../g',          'http://a/b/g'],
-            [self::RFC3986_BASE, '../..',         'http://a/'],
-            [self::RFC3986_BASE, '../../',        'http://a/'],
-            [self::RFC3986_BASE, '../../g',       'http://a/g'],
-            [self::RFC3986_BASE, '../../../g',    'http://a/g'],
-            [self::RFC3986_BASE, '../../../../g', 'http://a/g'],
-            [self::RFC3986_BASE, '/./g',          'http://a/g'],
-            [self::RFC3986_BASE, '/../g',         'http://a/g'],
-            [self::RFC3986_BASE, 'g.',            'http://a/b/c/g.'],
-            [self::RFC3986_BASE, '.g',            'http://a/b/c/.g'],
-            [self::RFC3986_BASE, 'g..',           'http://a/b/c/g..'],
-            [self::RFC3986_BASE, '..g',           'http://a/b/c/..g'],
-            [self::RFC3986_BASE, './../g',        'http://a/b/g'],
-            [self::RFC3986_BASE, 'foo////g',      'http://a/b/c/foo////g'],
-            [self::RFC3986_BASE, './g/.',         'http://a/b/c/g/'],
-            [self::RFC3986_BASE, 'g/./h',         'http://a/b/c/g/h'],
-            [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'],
-            [self::RFC3986_BASE, 'http:g',        'http:g'],
-        ];
-    }
-
-    /**
-     * @dataProvider urlCombineDataProvider
-     */
-    public function testCombinesUrls($a, $b, $c)
-    {
-        $this->assertEquals($c, (string) Url::fromString($a)->combine($b));
-    }
-
-    public function testHasGettersAndSetters()
-    {
-        $url = Url::fromString('http://www.test.com/');
-        $url->setHost('example.com');
-        $this->assertEquals('example.com', $url->getHost());
-        $url->setPort(8080);
-        $this->assertEquals('8080', $url->getPort());
-        $url->setPath('/foo/bar');
-        $this->assertEquals('/foo/bar', $url->getPath());
-        $url->setPassword('a');
-        $this->assertEquals('a', $url->getPassword());
-        $url->setUsername('b');
-        $this->assertEquals('b', $url->getUsername());
-        $url->setFragment('abc');
-        $this->assertEquals('abc', $url->getFragment());
-        $url->setScheme('https');
-        $this->assertEquals('https', $url->getScheme());
-        $url->setQuery('a=123');
-        $this->assertEquals('a=123', (string) $url->getQuery());
-        $this->assertEquals(
-            'https://b:a@example.com:8080/foo/bar?a=123#abc',
-            (string) $url
-        );
-        $url->setQuery(new Query(['b' => 'boo']));
-        $this->assertEquals('b=boo', $url->getQuery());
-        $this->assertEquals(
-            'https://b:a@example.com:8080/foo/bar?b=boo#abc',
-            (string) $url
-        );
-
-        $url->setQuery('a%20=bar!', true);
-        $this->assertEquals(
-            'https://b:a@example.com:8080/foo/bar?a%20=bar!#abc',
-            (string) $url
-        );
-    }
-
-    public function testSetQueryAcceptsArray()
-    {
-        $url = Url::fromString('http://www.test.com');
-        $url->setQuery(array('a' => 'b'));
-        $this->assertEquals('http://www.test.com?a=b', (string) $url);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testQueryMustBeValid()
-    {
-        $url = Url::fromString('http://www.test.com');
-        $url->setQuery(false);
-    }
-
-    public function testDefersParsingAndEncodingQueryUntilNecessary()
-    {
-        $url = Url::fromString('http://www.test.com');
-        // Note that invalid characters are encoded.
-        $url->setQuery('foo#bar/', true);
-        $this->assertEquals('http://www.test.com?foo%23bar/', (string) $url);
-        $this->assertInternalType('string', $this->readAttribute($url, 'query'));
-        $this->assertEquals('foo%23bar%2F', (string) $url->getQuery());
-        $this->assertInstanceOf('GuzzleHttp\Query', $this->readAttribute($url, 'query'));
-    }
-
-    public function urlProvider()
-    {
-        return array(
-            array('/foo/..', '/'),
-            array('//foo//..', '//foo/'),
-            array('/foo//', '/foo//'),
-            array('/foo/../..', '/'),
-            array('/foo/../.', '/'),
-            array('/./foo/..', '/'),
-            array('/./foo', '/foo'),
-            array('/./foo/', '/foo/'),
-            array('*', '*'),
-            array('/foo', '/foo'),
-            array('/abc/123/../foo/', '/abc/foo/'),
-            array('/a/b/c/./../../g', '/a/g'),
-            array('/b/c/./../../g', '/g'),
-            array('/b/c/./../../g', '/g'),
-            array('/c/./../../g', '/g'),
-            array('/./../../g', '/g'),
-            array('foo', 'foo'),
-        );
-    }
-
-    /**
-     * @dataProvider urlProvider
-     */
-    public function testRemoveDotSegments($path, $result)
-    {
-        $url = Url::fromString('http://www.example.com');
-        $url->setPath($path);
-        $url->removeDotSegments();
-        $this->assertEquals($result, $url->getPath());
-    }
-
-    public function testSettingHostWithPortModifiesPort()
-    {
-        $url = Url::fromString('http://www.example.com');
-        $url->setHost('foo:8983');
-        $this->assertEquals('foo', $url->getHost());
-        $this->assertEquals(8983, $url->getPort());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesUrlCanBeParsed()
-    {
-        Url::fromString('foo:////');
-    }
-
-    public function testConvertsSpecialCharsInPathWhenCastingToString()
-    {
-        $url = Url::fromString('http://foo.com/baz bar?a=b');
-        $url->addPath('?');
-        $this->assertEquals('http://foo.com/baz%20bar/%3F?a=b', (string) $url);
-    }
-
-    public function testCorrectlyEncodesPathWithoutDoubleEncoding()
-    {
-        $url = Url::fromString('http://foo.com/baz%20 bar:boo/baz!');
-        $this->assertEquals('/baz%20%20bar:boo/baz!', $url->getPath());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php b/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php
deleted file mode 100644
index d9bdc07..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Utils;
-
-class UtilsTest extends \PHPUnit_Framework_TestCase
-{
-    public function testExpandsTemplate()
-    {
-        $this->assertEquals(
-            'foo/123',
-            Utils::uriTemplate('foo/{bar}', ['bar' => '123'])
-        );
-    }
-
-    public function noBodyProvider()
-    {
-        return [['get'], ['head'], ['delete']];
-    }
-
-    public function testJsonDecodes()
-    {
-        $this->assertTrue(Utils::jsonDecode('true'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON
-     */
-    public function testJsonDecodesWithErrorMessages()
-    {
-        Utils::jsonDecode('!narf!');
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php b/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php
deleted file mode 100644
index 8713f96..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-require __DIR__ . '/../vendor/autoload.php';
-require __DIR__ . '/../vendor/guzzlehttp/ringphp/tests/Client/Server.php';
-
-use GuzzleHttp\Tests\Server;
-
-Server::start();
-
-register_shutdown_function(function () {
-    Server::stop();
-});
diff --git a/core/vendor/guzzlehttp/guzzle/tests/perf.php b/core/vendor/guzzlehttp/guzzle/tests/perf.php
deleted file mode 100644
index 6de89c2..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/perf.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-/*
- * Runs a performance test against the node.js server for both serial and
- * parallel requests. Requires PHP 5.5 or greater.
- *
- *     # Basic usage
- *     make perf
- *     # With custom options
- *     REQUESTS=100 PARALLEL=5000 make perf
- */
-
-require __DIR__ . '/bootstrap.php';
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Tests\Server;
-use GuzzleHttp\Ring\Client\CurlMultiHandler;
-use GuzzleHttp\Pool;
-
-// Wait until the server is responding
-Server::wait();
-
-// Get custom make variables
-$total = isset($_SERVER['REQUESTS']) ? $_SERVER['REQUESTS'] : 1000;
-$parallel = isset($_SERVER['PARALLEL']) ? $_SERVER['PARALLEL'] : 100;
-
-$client = new Client(['base_url' => Server::$url]);
-
-$t = microtime(true);
-for ($i = 0; $i < $total; $i++) {
-    $client->get('/guzzle-server/perf');
-}
-$totalTime = microtime(true) - $t;
-$perRequest = ($totalTime / $total) * 1000;
-printf("Serial: %f (%f ms / request) %d total\n",
-    $totalTime, $perRequest, $total);
-
-// Create a generator used to yield batches of requests
-$reqs = function () use ($client, $total) {
-    for ($i = 0; $i < $total; $i++) {
-        yield $client->createRequest('GET', '/guzzle-server/perf');
-    }
-};
-
-$t = microtime(true);
-Pool::send($client, $reqs(), ['parallel' => $parallel]);
-$totalTime = microtime(true) - $t;
-$perRequest = ($totalTime / $total) * 1000;
-printf("Batch:  %f (%f ms / request) %d total with %d in parallel\n",
-    $totalTime, $perRequest, $total, $parallel);
-
-$handler = new CurlMultiHandler(['max_handles' => $parallel]);
-$client = new Client(['handler' => $handler, 'base_url' => Server::$url]);
-$t = microtime(true);
-for ($i = 0; $i < $total; $i++) {
-    $client->get('/guzzle-server/perf');
-}
-unset($client);
-$totalTime = microtime(true) - $t;
-$perRequest = ($totalTime / $total) * 1000;
-printf("Future: %f (%f ms / request) %d total\n",
-    $totalTime, $perRequest, $total);
diff --git a/core/vendor/guzzlehttp/guzzle/.gitignore b/core/vendor/guzzlehttp/promises/.gitignore
similarity index 100%
rename from core/vendor/guzzlehttp/guzzle/.gitignore
rename to core/vendor/guzzlehttp/promises/.gitignore
diff --git a/core/vendor/guzzlehttp/promises/.travis.yml b/core/vendor/guzzlehttp/promises/.travis.yml
new file mode 100644
index 0000000..4f4d2b8
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/.travis.yml
@@ -0,0 +1,19 @@
+language: php
+
+php:
+  - 5.5
+  - 5.6
+  - 7.0
+  - hhvm
+
+sudo: false
+
+install:
+  - travis_retry composer install --no-interaction --prefer-source
+
+script: make test
+
+matrix:
+  allow_failures:
+    - php: hhvm
+  fast_finish: true
diff --git a/core/vendor/guzzlehttp/promises/CHANGELOG.md b/core/vendor/guzzlehttp/promises/CHANGELOG.md
new file mode 100644
index 0000000..2376c05
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/CHANGELOG.md
@@ -0,0 +1,11 @@
+# CHANGELOG
+
+## 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
diff --git a/core/vendor/guzzlehttp/streams/LICENSE b/core/vendor/guzzlehttp/promises/LICENSE
similarity index 94%
rename from core/vendor/guzzlehttp/streams/LICENSE
rename to core/vendor/guzzlehttp/promises/LICENSE
index 71d3b78..581d95f 100644
--- a/core/vendor/guzzlehttp/streams/LICENSE
+++ b/core/vendor/guzzlehttp/promises/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
+Copyright (c) 2015 Michael Dowling, https://github.com/mtdowling <mtdowling@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
diff --git a/core/vendor/guzzlehttp/streams/Makefile b/core/vendor/guzzlehttp/promises/Makefile
similarity index 62%
rename from core/vendor/guzzlehttp/streams/Makefile
rename to core/vendor/guzzlehttp/promises/Makefile
index f4d4284..8d5b3ef 100644
--- a/core/vendor/guzzlehttp/streams/Makefile
+++ b/core/vendor/guzzlehttp/promises/Makefile
@@ -1,10 +1,4 @@
-all: clean coverage
-
-release: tag
-	git push origin --tags
-
-tag:
-	chag tag --sign --debug CHANGELOG.rst
+all: clean test
 
 test:
 	vendor/bin/phpunit
diff --git a/core/vendor/guzzlehttp/promises/README.md b/core/vendor/guzzlehttp/promises/README.md
new file mode 100644
index 0000000..c6780ab
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/README.md
@@ -0,0 +1,501 @@
+# Guzzle Promises
+
+[Promises/A+](https://promisesaplus.com/) implementation that handles promise
+chaining and resolution iteratively, allowing for "infinite" promise chaining
+while keeping the stack size constant. Read [this blog post](https://blog.domenic.me/youre-missing-the-point-of-promises/)
+for a general introduction to promises.
+
+- [Features](#features)
+- [Quick start](#quick-start)
+- [Synchronous wait](#synchronous-wait)
+- [Cancellation](#cancellation)
+- [API](#api)
+  - [Promise](#promise)
+  - [FulfilledPromise](#fulfilledpromise)
+  - [RejectedPromise](#rejectedpromise)
+- [Promise interop](#promise-interop)
+- [Implementation notes](#implementation-notes)
+
+
+# Features
+
+- [Promises/A+](https://promisesaplus.com/) implementation.
+- Promise resolution and chaining is handled iteratively, allowing for
+  "infinite" promise chaining.
+- Promises have a synchronous `wait` method.
+- Promises can be cancelled.
+- Works with any object that has a `then` function.
+- C# style async/await coroutine promises using
+  `GuzzleHttp\Promise\coroutine()`.
+
+
+# Quick start
+
+A *promise* represents the eventual result of an asynchronous operation. The
+primary way of interacting with a promise is through its `then` method, which
+registers callbacks to receive either a promise's eventual value or the reason
+why the promise cannot be fulfilled.
+
+
+## Callbacks
+
+Callbacks are registered with the `then` method by providing an optional 
+`$onFulfilled` followed by an optional `$onRejected` function.
+
+
+```php
+use GuzzleHttp\Promise\Promise;
+
+$promise = new Promise();
+$promise->then(
+    // $onFulfilled
+    function ($value) {
+        echo 'The promise was fulfilled.';
+    },
+    // $onRejected
+    function ($reason) {
+        echo 'The promise was rejected.';
+    }
+);
+```
+
+*Resolving* a promise means that you either fulfill a promise with a *value* or
+reject a promise with a *reason*. Resolving a promises triggers callbacks
+registered with the promises's `then` method. These callbacks are triggered
+only once and in the order in which they were added.
+
+
+## Resolving a promise
+
+Promises are fulfilled using the `resolve($value)` method. Resolving a promise
+with any value other than a `GuzzleHttp\Promise\RejectedPromise` will trigger
+all of the onFulfilled callbacks (resolving a promise with a rejected promise
+will reject the promise and trigger the `$onRejected` callbacks).
+
+```php
+use GuzzleHttp\Promise\Promise;
+
+$promise = new Promise();
+$promise
+    ->then(function ($value) {
+        // Return a value and don't break the chain
+        return "Hello, " . $value;
+    })
+    // This then is executed after the first then and receives the value
+    // returned from the first then.
+    ->then(function ($value) {
+        echo $value;
+    });
+
+// Resolving the promise triggers the $onFulfilled callbacks and outputs
+// "Hello, reader".
+$promise->resolve('reader.');
+```
+
+
+## Promise forwarding
+
+Promises can be chained one after the other. Each then in the chain is a new
+promise. The return value of of a promise is what's forwarded to the next
+promise in the chain. Returning a promise in a `then` callback will cause the
+subsequent promises in the chain to only be fulfilled when the returned promise
+has been fulfilled. The next promise in the chain will be invoked with the
+resolved value of the promise.
+
+```php
+use GuzzleHttp\Promise\Promise;
+
+$promise = new Promise();
+$nextPromise = new Promise();
+
+$promise
+    ->then(function ($value) use ($nextPromise) {
+        echo $value;
+        return $nextPromise;
+    })
+    ->then(function ($value) {
+        echo $value;
+    });
+
+// Triggers the first callback and outputs "A"
+$promise->resolve('A');
+// Triggers the second callback and outputs "B"
+$nextPromise->resolve('B');
+```
+
+## Promise rejection
+
+When a promise is rejected, the `$onRejected` callbacks are invoked with the
+rejection reason.
+
+```php
+use GuzzleHttp\Promise\Promise;
+
+$promise = new Promise();
+$promise->then(null, function ($reason) {
+    echo $reason;
+});
+
+$promise->reject('Error!');
+// Outputs "Error!"
+```
+
+## Rejection forwarding
+
+If an exception is thrown in an `$onRejected` callback, subsequent
+`$onRejected` callbacks are invoked with the thrown exception as the reason.
+
+```php
+use GuzzleHttp\Promise\Promise;
+
+$promise = new Promise();
+$promise->then(null, function ($reason) {
+    throw new \Exception($reason);
+})->then(null, function ($reason) {
+    assert($reason->getMessage() === 'Error!');
+});
+
+$promise->reject('Error!');
+```
+
+You can also forward a rejection down the promise chain by returning a
+`GuzzleHttp\Promise\RejectedPromise` in either an `$onFulfilled` or
+`$onRejected` callback.
+
+```php
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\RejectedPromise;
+
+$promise = new Promise();
+$promise->then(null, function ($reason) {
+    return new RejectedPromise($reason);
+})->then(null, function ($reason) {
+    assert($reason === 'Error!');
+});
+
+$promise->reject('Error!');
+```
+
+If an exception is not thrown in a `$onRejected` callback and the callback
+does not return a rejected promise, downstream `$onFulfilled` callbacks are
+invoked using the value returned from the `$onRejected` callback.
+
+```php
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\RejectedPromise;
+
+$promise = new Promise();
+$promise
+    ->then(null, function ($reason) {
+        return "It's ok";
+    })
+    ->then(function ($value) {
+        assert($value === "It's ok");
+    });
+
+$promise->reject('Error!');
+```
+
+# Synchronous wait
+
+You can synchronously force promises to complete using a promise's `wait`
+method. When creating a promise, you can provide a wait function that is used
+to synchronously force a promise to complete. When a wait function is invoked
+it is expected to deliver a value to the promise or reject the promise. If the
+wait function does not deliver a value, then an exception is thrown. The wait
+function provided to a promise constructor is invoked when the `wait` function
+of the promise is called.
+
+```php
+$promise = new Promise(function () use (&$promise) {
+    $promise->deliver('foo');
+});
+
+// Calling wait will return the value of the promise.
+echo $promise->wait(); // outputs "foo"
+```
+
+If an exception is encountered while invoking the wait function of a promise,
+the promise is rejected with the exception and the exception is thrown.
+
+```php
+$promise = new Promise(function () use (&$promise) {
+    throw new \Exception('foo');
+});
+
+$promise->wait(); // throws the exception.
+```
+
+Calling `wait` on a promise that has been fulfilled will not trigger the wait
+function. It will simply return the previously delivered value.
+
+```php
+$promise = new Promise(function () { die('this is not called!'); });
+$promise->deliver('foo');
+echo $promise->wait(); // outputs "foo"
+```
+
+Calling `wait` on a promise that has been rejected will throw an exception. If
+the rejection reason is an instance of `\Exception` the reason is thrown.
+Otherwise, a `GuzzleHttp\Promise\RejectionException` is thrown and the reason
+can be obtained by calling the `getReason` method of the exception.
+
+```php
+$promise = new Promise();
+$promise->reject('foo');
+$promise->wait();
+```
+
+> PHP Fatal error:  Uncaught exception 'GuzzleHttp\Promise\RejectionException' with message 'The promise was rejected with value: foo'
+
+
+## Unwrapping a promise
+
+When synchronously waiting on a promise, you are joining the state of the
+promise into the current state of execution (i.e., return the value of the
+promise if it was fulfilled or throw an exception if it was rejected). This is
+called "unwrapping" the promise. Waiting on a promise will by default unwrap
+the promise state.
+
+You can force a promise to resolve and *not* unwrap the state of the promise
+by passing `false` to the first argument of the `wait` function:
+
+```php
+$promise = new Promise();
+$promise->reject('foo');
+// This will not throw an exception. It simply ensures the promise has
+// been resolved.
+$promise->wait(false);
+```
+
+When unwrapping a promise, the delivered value of the promise will be waited
+upon until the unwrapped value is not a promise. This means that if you resolve
+promise A with a promise B and unwrap promise A, the value returned by the
+wait function will be the value delivered to promise B.
+
+**Note**: when you do not unwrap the promise, no value is returned.
+
+
+# Cancellation
+
+You can cancel a promise that has not yet been fulfilled using the `cancel()`
+method of a promise. When creating a promise you can provide an optional
+cancel function that when invoked cancels the action of computing a resolution
+of the promise.
+
+
+# API
+
+
+## Promise
+
+When creating a promise object, you can provide an optional `$waitFn` and
+`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is
+expected to resolve the promise. `$cancelFn` is a function with no arguments
+that is expected to cancel the computation of a promise. It is invoked when the
+`cancel()` method of a promise is called.
+
+```php
+use GuzzleHttp\Promise\Promise;
+
+$promise = new Promise(
+    function () use (&$promise) {
+        $promise->resolve('waited');
+    },
+    function () {
+        // do something that will cancel the promise computation (e.g., close
+        // a socket, cancel a database query, etc...)
+    }
+);
+
+assert('waited' === $promise->wait());
+```
+
+A promise has the following methods:
+
+- `then(callable $onFulfilled, callable $onRejected) : PromiseInterface`
+  
+  Creates a new promise that is fulfilled or rejected when the promise is
+  resolved.
+
+- `wait($unwrap = true) : mixed`
+
+  Synchronously waits on the promise to complete.
+  
+  `$unwrap` controls whether or not the value of the promise is returned for a
+  fulfilled promise or if an exception is thrown if the promise is rejected.
+  This is set to `true` by default.
+
+- `cancel()`
+
+  Attempts to cancel the promise if possible. The promise being cancelled and
+  the parent most ancestor that has not yet been resolved will also be
+  cancelled. Any promises waiting on the cancelled promise to resolve will also
+  be cancelled.
+
+- `getState() : string`
+
+  Returns the state of the promise. One of `pending`, `fulfilled`, or
+  `rejected`.
+
+- `resolve($value)`
+
+  Fulfills the promise with the given `$value`.
+
+- `reject($reason)`
+
+  Rejects the promise with the given `$reason`.
+
+
+## FulfilledPromise
+
+A fulfilled promise can be created to represent a promise that has been
+fulfilled.
+
+```php
+use GuzzleHttp\Promise\FulfilledPromise;
+
+$promise = new FulfilledPromise('value');
+
+// Fulfilled callbacks are immediately invoked.
+$promise->then(function ($value) {
+    echo $value;
+});
+```
+
+
+## RejectedPromise
+
+A rejected promise can be created to represent a promise that has been
+rejected.
+
+```php
+use GuzzleHttp\Promise\RejectedPromise;
+
+$promise = new RejectedPromise('Error');
+
+// Rejected callbacks are immediately invoked.
+$promise->then(null, function ($reason) {
+    echo $reason;
+});
+```
+
+
+# Promise interop
+
+This library works with foreign promises that have a `then` method. This means
+you can use Guzzle promises with [React promises](https://github.com/reactphp/promise)
+for example. When a foreign promise is returned inside of a then method
+callback, promise resolution will occur recursively.
+
+```php
+// Create a React promise
+$deferred = new React\Promise\Deferred();
+$reactPromise = $deferred->promise();
+
+// Create a Guzzle promise that is fulfilled with a React promise.
+$guzzlePromise = new \GuzzleHttp\Promise\Promise();
+$guzzlePromise->then(function ($value) use ($reactPromise) {
+    // Do something something with the value...
+    // Return the React promise
+    return $reactPromise;
+});
+```
+
+Please note that wait and cancel chaining is no longer possible when forwarding
+a foreign promise. You will need to wrap a third-party promise with a Guzzle
+promise in order to utilize wait and cancel functions with foreign promises.
+
+
+## Event Loop Integration
+
+In order to keep the stack size constant, Guzzle promises are resolved
+asynchronously using a task queue. When waiting on promises synchronously, the
+task queue will be automatically run to ensure that the blocking promise and
+any forwarded promises are resolved. When using promises asynchronously in an
+event loop, you will need to run the task queue on each tick of the loop. If
+you do not run the task queue, then promises will not be resolved.
+
+You can run the task queue using the `run()` method of the global task queue
+instance.
+
+```php
+// Get the global task queue
+$queue = \GuzzleHttp\Promise\queue();
+$queue->run();
+```
+
+For example, you could use Guzzle promises with React using a periodic timer:
+
+```php
+$loop = React\EventLoop\Factory::create();
+$loop->addPeriodicTimer(0, [$queue, 'run']);
+```
+
+*TODO*: Perhaps adding a `futureTick()` on each tick would be faster?
+
+
+# Implementation notes
+
+
+## Promise resolution and chaining is handled iteratively
+
+By shuffling pending handlers from one owner to another, promises are
+resolved iteratively, allowing for "infinite" then chaining.
+
+```php
+<?php
+require 'vendor/autoload.php';
+
+use GuzzleHttp\Promise\Promise;
+
+$parent = new Promise();
+$p = $parent;
+
+for ($i = 0; $i < 1000; $i++) {
+    $p = $p->then(function ($v) {
+        // The stack size remains constant (a good thing)
+        echo xdebug_get_stack_depth() . ', ';
+        return $v + 1;
+    });
+}
+
+$parent->resolve(0);
+var_dump($p->wait()); // int(1000)
+
+```
+
+When a promise is fulfilled or rejected with a non-promise value, the promise
+then takes ownership of the handlers of each child promise and delivers values
+down the chain without using recursion.
+
+When a promise is resolved with another promise, the original promise transfers
+all of its pending handlers to the new promise. When the new promise is
+eventually resolved, all of the pending handlers are delivered the forwarded
+value.
+
+
+## A promise is the deferred.
+
+Some promise libraries implement promises using a deferred object to represent
+a computation and a promise object to represent the delivery of the result of
+the computation. This is a nice separation of computation and delivery because
+consumers of the promise cannot modify the value that will be eventually
+delivered.
+
+One side effect of being able to implement promise resolution and chaining
+iteratively is that you need to be able for one promise to reach into the state
+of another promise to shuffle around ownership of handlers. In order to achieve
+this without making the handlers of a promise publicly mutable, a promise is
+also the deferred value, allowing promises of the same parent class to reach
+into and modify the private properties of promises of the same type. While this
+does allow consumers of the value to modify the resolution or rejection of the
+deferred, it is a small price to pay for keeping the stack size constant.
+
+```php
+$promise = new Promise();
+$promise->then(function ($value) { echo $value; });
+// The promise is the deferred value, so you can deliver a value to it.
+$promise->deliver('foo');
+// prints "foo"
+```
diff --git a/core/vendor/guzzlehttp/streams/composer.json b/core/vendor/guzzlehttp/promises/composer.json
similarity index 55%
rename from core/vendor/guzzlehttp/streams/composer.json
rename to core/vendor/guzzlehttp/promises/composer.json
index 6d70343..e1bad38 100644
--- a/core/vendor/guzzlehttp/streams/composer.json
+++ b/core/vendor/guzzlehttp/promises/composer.json
@@ -1,8 +1,8 @@
 {
-    "name": "guzzlehttp/streams",
-    "description": "Provides a simple abstraction over streams of data",
-    "homepage": "http://guzzlephp.org/",
-    "keywords": ["stream", "guzzle"],
+    "name": "guzzlehttp/promises",
+    "type": "library",
+    "description": "Guzzle promises library",
+    "keywords": ["promise"],
     "license": "MIT",
     "authors": [
         {
@@ -12,17 +12,20 @@
         }
     ],
     "require": {
-        "php": ">=5.4.0"
+        "php": ">=5.5.0"
     },
     "require-dev": {
         "phpunit/phpunit": "~4.0"
     },
     "autoload": {
-        "psr-4": { "GuzzleHttp\\Stream\\": "src/" }
+        "psr-4": {
+            "GuzzleHttp\\Promise\\": "src/"
+        },
+        "files": ["src/functions.php"]
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "3.0-dev"
+            "dev-master": "1.0-dev"
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist b/core/vendor/guzzlehttp/promises/phpunit.xml.dist
similarity index 100%
rename from core/vendor/guzzlehttp/guzzle/phpunit.xml.dist
rename to core/vendor/guzzlehttp/promises/phpunit.xml.dist
diff --git a/core/vendor/guzzlehttp/promises/src/AggregateException.php b/core/vendor/guzzlehttp/promises/src/AggregateException.php
new file mode 100644
index 0000000..6a5690c
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/AggregateException.php
@@ -0,0 +1,16 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * Exception thrown when too many errors occur in the some() or any() methods.
+ */
+class AggregateException extends RejectionException
+{
+    public function __construct($msg, array $reasons)
+    {
+        parent::__construct(
+            $reasons,
+            sprintf('%s; %d rejected promises', $msg, count($reasons))
+        );
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/src/CancellationException.php b/core/vendor/guzzlehttp/promises/src/CancellationException.php
new file mode 100644
index 0000000..cb360b8
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/CancellationException.php
@@ -0,0 +1,9 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * Exception that is set as the reason for a promise that has been cancelled.
+ */
+class CancellationException extends RejectionException
+{
+}
diff --git a/core/vendor/guzzlehttp/promises/src/EachPromise.php b/core/vendor/guzzlehttp/promises/src/EachPromise.php
new file mode 100644
index 0000000..855d833
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/EachPromise.php
@@ -0,0 +1,202 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * Represents a promise that iterates over many promises and invokes
+ * side-effect functions in the process.
+ */
+class EachPromise implements PromisorInterface
+{
+    private $pending = [];
+
+    /** @var \Iterator */
+    private $iterable;
+
+    /** @var callable|int */
+    private $concurrency;
+
+    /** @var callable */
+    private $onFulfilled;
+
+    /** @var callable */
+    private $onRejected;
+
+    /** @var Promise */
+    private $aggregate;
+
+    /**
+     * Configuration hash can include the following key value pairs:
+     *
+     * - fulfilled: (callable) Invoked when a promise fulfills. The function
+     *   is invoked with three arguments: the fulfillment value, the index
+     *   position from the iterable list of the promise, and the aggregate
+     *   promise that manages all of the promises. The aggregate promise may
+     *   be resolved from within the callback to short-circuit the promise.
+     * - rejected: (callable) Invoked when a promise is rejected. The
+     *   function is invoked with three arguments: the rejection reason, the
+     *   index position from the iterable list of the promise, and the
+     *   aggregate promise that manages all of the promises. The aggregate
+     *   promise may be resolved from within the callback to short-circuit
+     *   the promise.
+     * - concurrency: (integer) Pass this configuration option to limit the
+     *   allowed number of outstanding concurrently executing promises,
+     *   creating a capped pool of promises. There is no limit by default.
+     *
+     * @param mixed    $iterable Promises or values to iterate.
+     * @param array    $config   Configuration options
+     */
+    public function __construct($iterable, array $config = [])
+    {
+        $this->iterable = iter_for($iterable);
+
+        if (isset($config['concurrency'])) {
+            $this->concurrency = $config['concurrency'];
+        }
+
+        if (isset($config['fulfilled'])) {
+            $this->onFulfilled = $config['fulfilled'];
+        }
+
+        if (isset($config['rejected'])) {
+            $this->onRejected = $config['rejected'];
+        }
+    }
+
+    public function promise()
+    {
+        if ($this->aggregate) {
+            return $this->aggregate;
+        }
+
+        try {
+            $this->createPromise();
+            $this->iterable->rewind();
+            $this->refillPending();
+        } catch (\Exception $e) {
+            $this->aggregate->reject($e);
+        }
+
+        return $this->aggregate;
+    }
+
+    private function createPromise()
+    {
+        $this->aggregate = new Promise(function () {
+            reset($this->pending);
+            // Consume a potentially fluctuating list of promises while
+            // ensuring that indexes are maintained (precluding array_shift).
+            while ($promise = current($this->pending)) {
+                next($this->pending);
+                $promise->wait();
+                if ($this->aggregate->getState() !== PromiseInterface::PENDING) {
+                    return;
+                }
+            }
+        });
+
+        // Clear the references when the promise is resolved.
+        $clearFn = function () {
+            $this->iterable = $this->concurrency = $this->pending = null;
+            $this->onFulfilled = $this->onRejected = null;
+        };
+
+        $this->aggregate->then($clearFn, $clearFn);
+    }
+
+    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;
+        }
+        // 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()
+    {
+        if (!$this->iterable || !$this->iterable->valid()) {
+            return false;
+        }
+
+        $promise = promise_for($this->iterable->current());
+        $idx = $this->iterable->key();
+
+        $this->pending[$idx] = $promise->then(
+            function ($value) use ($idx) {
+                if ($this->onFulfilled) {
+                    call_user_func(
+                        $this->onFulfilled, $value, $idx, $this->aggregate
+                    );
+                }
+                $this->step($idx);
+            },
+            function ($reason) use ($idx) {
+                if ($this->onRejected) {
+                    call_user_func(
+                        $this->onRejected, $reason, $idx, $this->aggregate
+                    );
+                }
+                $this->step($idx);
+            }
+        );
+
+        return true;
+    }
+
+    private function advanceIterator()
+    {
+        try {
+            $this->iterable->next();
+            return true;
+        } catch (\Exception $e) {
+            $this->aggregate->reject($e);
+            return false;
+        }
+    }
+
+    private function step($idx)
+    {
+        // If the promise was already resolved, then ignore this step.
+        if ($this->aggregate->getState() !== PromiseInterface::PENDING) {
+            return;
+        }
+
+        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/FulfilledPromise.php b/core/vendor/guzzlehttp/promises/src/FulfilledPromise.php
new file mode 100644
index 0000000..5596296
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/FulfilledPromise.php
@@ -0,0 +1,80 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * A promise that has been fulfilled.
+ *
+ * Thenning off of this promise will invoke the onFulfilled callback
+ * immediately and ignore other callbacks.
+ */
+class FulfilledPromise implements PromiseInterface
+{
+    private $value;
+
+    public function __construct($value)
+    {
+        if (method_exists($value, 'then')) {
+            throw new \InvalidArgumentException(
+                'You cannot create a FulfilledPromise with a promise.');
+        }
+
+        $this->value = $value;
+    }
+
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null
+    ) {
+        // Return itself if there is no onFulfilled function.
+        if (!$onFulfilled) {
+            return $this;
+        }
+
+        $queue = queue();
+        $p = new Promise([$queue, 'run']);
+        $value = $this->value;
+        $queue->add(static function () use ($p, $value, $onFulfilled) {
+            if ($p->getState() === self::PENDING) {
+                try {
+                    $p->resolve($onFulfilled($value));
+                } catch (\Exception $e) {
+                    $p->reject($e);
+                }
+            }
+        });
+
+        return $p;
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        return $this->then(null, $onRejected);
+    }
+
+    public function wait($unwrap = true, $defaultDelivery = null)
+    {
+        return $unwrap ? $this->value : null;
+    }
+
+    public function getState()
+    {
+        return self::FULFILLED;
+    }
+
+    public function resolve($value)
+    {
+        if ($value !== $this->value) {
+            throw new \LogicException("Cannot resolve a fulfilled promise");
+        }
+    }
+
+    public function reject($reason)
+    {
+        throw new \LogicException("Cannot reject a fulfilled promise");
+    }
+
+    public function cancel()
+    {
+        // pass
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/src/Promise.php b/core/vendor/guzzlehttp/promises/src/Promise.php
new file mode 100644
index 0000000..c2cf969
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/Promise.php
@@ -0,0 +1,268 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * Promises/A+ implementation that avoids recursion when possible.
+ *
+ * @link https://promisesaplus.com/
+ */
+class Promise implements PromiseInterface
+{
+    private $state = self::PENDING;
+    private $result;
+    private $cancelFn;
+    private $waitFn;
+    private $waitList;
+    private $handlers = [];
+
+    /**
+     * @param callable $waitFn   Fn that when invoked resolves the promise.
+     * @param callable $cancelFn Fn that when invoked cancels the promise.
+     */
+    public function __construct(
+        callable $waitFn = null,
+        callable $cancelFn = null
+    ) {
+        $this->waitFn = $waitFn;
+        $this->cancelFn = $cancelFn;
+    }
+
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null
+    ) {
+        if ($this->state === self::PENDING) {
+            $p = new Promise(null, [$this, 'cancel']);
+            $this->handlers[] = [$p, $onFulfilled, $onRejected];
+            $p->waitList = $this->waitList;
+            $p->waitList[] = $this;
+            return $p;
+        }
+
+        // Return a fulfilled promise and immediately invoke any callbacks.
+        if ($this->state === self::FULFILLED) {
+            return $onFulfilled
+                ? promise_for($this->result)->then($onFulfilled)
+                : promise_for($this->result);
+        }
+
+        // It's either cancelled or rejected, so return a rejected promise
+        // and immediately invoke any callbacks.
+        $rejection = rejection_for($this->result);
+        return $onRejected ? $rejection->then(null, $onRejected) : $rejection;
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        return $this->then(null, $onRejected);
+    }
+
+    public function wait($unwrap = true)
+    {
+        $this->waitIfPending();
+
+        if (!$unwrap) {
+            return null;
+        }
+
+        if ($this->result instanceof PromiseInterface) {
+            return $this->result->wait($unwrap);
+        } elseif ($this->state === self::FULFILLED) {
+            return $this->result;
+        } else {
+            // It's rejected so "unwrap" and throw an exception.
+            throw exception_for($this->result);
+        }
+    }
+
+    public function getState()
+    {
+        return $this->state;
+    }
+
+    public function cancel()
+    {
+        if ($this->state !== self::PENDING) {
+            return;
+        }
+
+        $this->waitFn = $this->waitList = null;
+
+        if ($this->cancelFn) {
+            $fn = $this->cancelFn;
+            $this->cancelFn = null;
+            try {
+                $fn();
+            } catch (\Exception $e) {
+                $this->reject($e);
+            }
+        }
+
+        // Reject the promise only if it wasn't rejected in a then callback.
+        if ($this->state === self::PENDING) {
+            $this->reject(new CancellationException('Promise has been cancelled'));
+        }
+    }
+
+    public function resolve($value)
+    {
+        $this->settle(self::FULFILLED, $value);
+    }
+
+    public function reject($reason)
+    {
+        $this->settle(self::REJECTED, $reason);
+    }
+
+    private function settle($state, $value)
+    {
+        if ($this->state !== self::PENDING) {
+            // Ignore calls with the same resolution.
+            if ($state === $this->state && $value === $this->result) {
+                return;
+            }
+            throw $this->state === $state
+                ? new \LogicException("The promise is already {$state}.")
+                : new \LogicException("Cannot change a {$this->state} promise to {$state}");
+        }
+
+        if ($value === $this) {
+            throw new \LogicException('Cannot fulfill or reject a promise with itself');
+        }
+
+        // Clear out the state of the promise but stash the handlers.
+        $this->state = $state;
+        $this->result = $value;
+        $handlers = $this->handlers;
+        $this->handlers = null;
+        $this->waitList = $this->waitFn = null;
+        $this->cancelFn = null;
+
+        if (!$handlers) {
+            return;
+        }
+
+        // If the value was not a settled promise or a thenable, then resolve
+        // it in the task queue using the correct ID.
+        if (!method_exists($value, 'then')) {
+            $id = $state === self::FULFILLED ? 1 : 2;
+            // It's a success, so resolve the handlers in the queue.
+            queue()->add(static function () use ($id, $value, $handlers) {
+                foreach ($handlers as $handler) {
+                    self::callHandler($id, $value, $handler);
+                }
+            });
+        } elseif ($value instanceof Promise
+            && $value->getState() === self::PENDING
+        ) {
+            // We can just merge our handlers onto the next promise.
+            $value->handlers = array_merge($value->handlers, $handlers);
+        } else {
+            // Resolve the handlers when the forwarded promise is resolved.
+            $value->then(
+                static function ($value) use ($handlers) {
+                    foreach ($handlers as $handler) {
+                        self::callHandler(1, $value, $handler);
+                    }
+                },
+                static function ($reason) use ($handlers) {
+                    foreach ($handlers as $handler) {
+                        self::callHandler(2, $reason, $handler);
+                    }
+                }
+            );
+        }
+    }
+
+    /**
+     * Call a stack of handlers using a specific callback index and value.
+     *
+     * @param int   $index   1 (resolve) or 2 (reject).
+     * @param mixed $value   Value to pass to the callback.
+     * @param array $handler Array of handler data (promise and callbacks).
+     *
+     * @return array Returns the next group to resolve.
+     */
+    private static function callHandler($index, $value, array $handler)
+    {
+        /** @var PromiseInterface $promise */
+        $promise = $handler[0];
+
+        // The promise may have been cancelled or resolved before placing
+        // this thunk in the queue.
+        if ($promise->getState() !== self::PENDING) {
+            return;
+        }
+
+        try {
+            if (isset($handler[$index])) {
+                $promise->resolve($handler[$index]($value));
+            } elseif ($index === 1) {
+                // Forward resolution values as-is.
+                $promise->resolve($value);
+            } else {
+                // Forward rejections down the chain.
+                $promise->reject($value);
+            }
+        } catch (\Exception $reason) {
+            $promise->reject($reason);
+        }
+    }
+
+    private function waitIfPending()
+    {
+        if ($this->state !== self::PENDING) {
+            return;
+        } elseif ($this->waitFn) {
+            $this->invokeWaitFn();
+        } elseif ($this->waitList) {
+            $this->invokeWaitList();
+        } else {
+            // If there's not wait function, then reject the promise.
+            $this->reject('Cannot wait on a promise that has '
+                . 'no internal wait function. You must provide a wait '
+                . 'function when constructing the promise to be able to '
+                . 'wait on a promise.');
+        }
+
+        queue()->run();
+
+        if ($this->state === self::PENDING) {
+            $this->reject('Invoking the wait callback did not resolve the promise');
+        }
+    }
+
+    private function invokeWaitFn()
+    {
+        try {
+            $wfn = $this->waitFn;
+            $this->waitFn = null;
+            $wfn(true);
+        } catch (\Exception $reason) {
+            if ($this->state === self::PENDING) {
+                // The promise has not been resolved yet, so reject the promise
+                // with the exception.
+                $this->reject($reason);
+            } else {
+                // The promise was already resolved, so there's a problem in
+                // the application.
+                throw $reason;
+            }
+        }
+    }
+
+    private function invokeWaitList()
+    {
+        $waitList = $this->waitList;
+        $this->waitList = null;
+
+        foreach ($waitList as $result) {
+            descend:
+            $result->waitIfPending();
+            if ($result->result instanceof Promise) {
+                $result = $result->result;
+                goto descend;
+            }
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/src/PromiseInterface.php b/core/vendor/guzzlehttp/promises/src/PromiseInterface.php
new file mode 100644
index 0000000..8f5f4b9
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/PromiseInterface.php
@@ -0,0 +1,93 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * A promise represents the eventual result of an asynchronous operation.
+ *
+ * The primary way of interacting with a promise is through its then method,
+ * which registers callbacks to receive either a promiseâ€™s eventual value or
+ * the reason why the promise cannot be fulfilled.
+ *
+ * @link https://promisesaplus.com/
+ */
+interface PromiseInterface
+{
+    const PENDING = 'pending';
+    const FULFILLED = 'fulfilled';
+    const REJECTED = 'rejected';
+
+    /**
+     * Appends fulfillment and rejection handlers to the promise, and returns
+     * a new promise resolving to the return value of the called handler.
+     *
+     * @param callable $onFulfilled Invoked when the promise fulfills.
+     * @param callable $onRejected  Invoked when the promise is rejected.
+     *
+     * @return PromiseInterface
+     */
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null
+    );
+
+    /**
+     * Appends a rejection handler callback to the promise, and returns a new
+     * promise resolving to the return value of the callback if it is called,
+     * or to its original fulfillment value if the promise is instead
+     * fulfilled.
+     *
+     * @param callable $onRejected Invoked when the promise is rejected.
+     *
+     * @return PromiseInterface
+     */
+    public function otherwise(callable $onRejected);
+
+    /**
+     * Get the state of the promise ("pending", "rejected", or "fulfilled").
+     *
+     * The three states can be checked against the constants defined on
+     * PromiseInterface: PENDING, FULFILLED, and REJECTED.
+     *
+     * @return string
+     */
+    public function getState();
+
+    /**
+     * Resolve the promise with the given value.
+     *
+     * @param mixed $value
+     * @throws \RuntimeException if the promise is already resolved.
+     */
+    public function resolve($value);
+
+    /**
+     * Reject the promise with the given reason.
+     *
+     * @param mixed $reason
+     * @throws \RuntimeException if the promise is already resolved.
+     */
+    public function reject($reason);
+
+    /**
+     * Cancels the promise if possible.
+     *
+     * @link https://github.com/promises-aplus/cancellation-spec/issues/7
+     */
+    public function cancel();
+
+    /**
+     * Waits until the promise completes if possible.
+     *
+     * Pass $unwrap as true to unwrap the result of the promise, either
+     * returning the resolved value or throwing the rejected exception.
+     *
+     * If the promise cannot be waited on, then the promise will be rejected.
+     *
+     * @param bool $unwrap
+     *
+     * @return mixed
+     * @throws \LogicException if the promise has no wait function or if the
+     *                         promise does not settle after waiting.
+     */
+    public function wait($unwrap = true);
+}
diff --git a/core/vendor/guzzlehttp/promises/src/PromisorInterface.php b/core/vendor/guzzlehttp/promises/src/PromisorInterface.php
new file mode 100644
index 0000000..b07fe32
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/PromisorInterface.php
@@ -0,0 +1,15 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * Interface used with classes that return a promise.
+ */
+interface PromisorInterface
+{
+    /**
+     * Returns a promise.
+     *
+     * @return PromiseInterface
+     */
+    public function promise();
+}
diff --git a/core/vendor/guzzlehttp/promises/src/RejectedPromise.php b/core/vendor/guzzlehttp/promises/src/RejectedPromise.php
new file mode 100644
index 0000000..bd499e6
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/RejectedPromise.php
@@ -0,0 +1,84 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * A promise that has been rejected.
+ *
+ * Thenning off of this promise will invoke the onRejected callback
+ * immediately and ignore other callbacks.
+ */
+class RejectedPromise implements PromiseInterface
+{
+    private $reason;
+
+    public function __construct($reason)
+    {
+        if (method_exists($reason, 'then')) {
+            throw new \InvalidArgumentException(
+                'You cannot create a RejectedPromise with a promise.');
+        }
+
+        $this->reason = $reason;
+    }
+
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null
+    ) {
+        // If there's no onRejected callback then just return self.
+        if (!$onRejected) {
+            return $this;
+        }
+
+        $queue = queue();
+        $reason = $this->reason;
+        $p = new Promise([$queue, 'run']);
+        $queue->add(static function () use ($p, $reason, $onRejected) {
+            if ($p->getState() === self::PENDING) {
+                try {
+                    // Return a resolved promise if onRejected does not throw.
+                    $p->resolve($onRejected($reason));
+                } catch (\Exception $e) {
+                    // onRejected threw, so return a rejected promise.
+                    $p->reject($e);
+                }
+            }
+        });
+
+        return $p;
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        return $this->then(null, $onRejected);
+    }
+
+    public function wait($unwrap = true, $defaultDelivery = null)
+    {
+        if ($unwrap) {
+            throw exception_for($this->reason);
+        }
+    }
+
+    public function getState()
+    {
+        return self::REJECTED;
+    }
+
+    public function resolve($value)
+    {
+        throw new \LogicException("Cannot resolve a rejected promise");
+    }
+
+    public function reject($reason)
+    {
+        if ($reason !== $this->reason) {
+            throw new \LogicException("Cannot reject a rejected promise");
+        }
+    }
+
+    public function cancel()
+    {
+        // pass
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/src/RejectionException.php b/core/vendor/guzzlehttp/promises/src/RejectionException.php
new file mode 100644
index 0000000..07c1136
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/RejectionException.php
@@ -0,0 +1,47 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * A special exception that is thrown when waiting on a rejected promise.
+ *
+ * The reason value is available via the getReason() method.
+ */
+class RejectionException extends \RuntimeException
+{
+    /** @var mixed Rejection reason. */
+    private $reason;
+
+    /**
+     * @param mixed $reason       Rejection reason.
+     * @param string $description Optional description
+     */
+    public function __construct($reason, $description = null)
+    {
+        $this->reason = $reason;
+
+        $message = 'The promise was rejected';
+
+        if ($description) {
+            $message .= ' with reason: ' . $description;
+        } elseif (is_string($reason)
+            || (is_object($reason) && method_exists($reason, '__toString'))
+        ) {
+            $message .= ' with reason: ' . $this->reason;
+        } elseif ($reason instanceof \JsonSerializable) {
+            $message .= ' with reason: '
+                . json_encode($this->reason, JSON_PRETTY_PRINT);
+        }
+
+        parent::__construct($message);
+    }
+
+    /**
+     * Returns the rejection reason.
+     *
+     * @return mixed
+     */
+    public function getReason()
+    {
+        return $this->reason;
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/src/TaskQueue.php b/core/vendor/guzzlehttp/promises/src/TaskQueue.php
new file mode 100644
index 0000000..5026363
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/TaskQueue.php
@@ -0,0 +1,79 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * A task queue that executes tasks in a FIFO order.
+ *
+ * This task queue class is used to settle promises asynchronously and
+ * maintains a constant stack size. You can use the task queue asynchronously
+ * by calling the `run()` function of the global task queue in an event loop.
+ *
+ *     GuzzleHttp\Promise\queue()->run();
+ */
+class TaskQueue
+{
+    private $enableShutdown = true;
+    private $queue = [];
+
+    public function __construct($withShutdown = true)
+    {
+        if ($withShutdown) {
+            register_shutdown_function(function () {
+                if ($this->enableShutdown) {
+                    // Only run the tasks if an E_ERROR didn't occur.
+                    $err = error_get_last();
+                    if (!$err || ($err['type'] ^ E_ERROR)) {
+                        $this->run();
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * Returns true if the queue is empty.
+     *
+     * @return bool
+     */
+    public function isEmpty()
+    {
+        return !$this->queue;
+    }
+
+    /**
+     * Adds a task to the queue that will be executed the next time run is
+     * called.
+     *
+     * @param callable $task
+     */
+    public function add(callable $task)
+    {
+        $this->queue[] = $task;
+    }
+
+    /**
+     * Execute all of the pending task in the queue.
+     */
+    public function run()
+    {
+        while ($task = array_shift($this->queue)) {
+            $task();
+        }
+    }
+
+    /**
+     * The task queue will be run and exhausted by default when the process
+     * exits IFF the exit is not the result of a PHP E_ERROR error.
+     *
+     * You can disable running the automatic shutdown of the queue by calling
+     * this function. If you disable the task queue shutdown process, then you
+     * MUST either run the task queue (as a result of running your event loop
+     * or manually using the run() method) or wait on each outstanding promise.
+     *
+     * Note: This shutdown will occur before any destructors are triggered.
+     */
+    public function disableShutdown()
+    {
+        $this->enableShutdown = false;
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/src/functions.php b/core/vendor/guzzlehttp/promises/src/functions.php
new file mode 100644
index 0000000..eca27b2
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/src/functions.php
@@ -0,0 +1,500 @@
+<?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.
+ *
+ * This task queue MUST be run in an event loop in order for promises to be
+ * settled asynchronously. It will be automatically run when synchronously
+ * waiting on a promise.
+ *
+ * <code>
+ * while ($eventLoop->isRunning()) {
+ *     GuzzleHttp\Promise\queue()->run();
+ * }
+ * </code>
+ *
+ * @return TaskQueue
+ */
+function queue()
+{
+    static $queue;
+
+    if (!$queue) {
+        $queue = new TaskQueue();
+    }
+
+    return $queue;
+}
+
+/**
+ * Adds a function to run in the task queue when it is next `run()` and returns
+ * a promise that is fulfilled or rejected with the result.
+ *
+ * @param callable $task Task function to run.
+ *
+ * @return PromiseInterface
+ */
+function task(callable $task)
+{
+    $queue = queue();
+    $promise = new Promise([$queue, 'run']);
+    $queue->add(function () use ($task, $promise) {
+        try {
+            $promise->resolve($task());
+        } catch (\Exception $e) {
+            $promise->reject($e);
+        }
+    });
+
+    return $promise;
+}
+
+/**
+ * Creates a promise for a value if the value is not a promise.
+ *
+ * @param mixed $value Promise or value.
+ *
+ * @return PromiseInterface
+ */
+function promise_for($value)
+{
+    if ($value instanceof PromiseInterface) {
+        return $value;
+    }
+
+    // Return a Guzzle promise that shadows the given promise.
+    if (method_exists($value, 'then')) {
+        $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null;
+        $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;
+        $promise = new Promise($wfn, $cfn);
+        $value->then([$promise, 'resolve'], [$promise, 'reject']);
+        return $promise;
+    }
+
+    return new FulfilledPromise($value);
+}
+
+/**
+ * Creates a rejected promise for a reason if the reason is not a promise. If
+ * the provided reason is a promise, then it is returned as-is.
+ *
+ * @param mixed $reason Promise or reason.
+ *
+ * @return PromiseInterface
+ */
+function rejection_for($reason)
+{
+    if ($reason instanceof PromiseInterface) {
+        return $reason;
+    }
+
+    return new RejectedPromise($reason);
+}
+
+/**
+ * Create an exception for a rejected promise value.
+ *
+ * @param mixed $reason
+ *
+ * @return \Exception
+ */
+function exception_for($reason)
+{
+    return $reason instanceof \Exception
+        ? $reason
+        : new RejectionException($reason);
+}
+
+/**
+ * Returns an iterator for the given value.
+ *
+ * @param mixed $value
+ *
+ * @return \Iterator
+ */
+function iter_for($value)
+{
+    if ($value instanceof \Iterator) {
+        return $value;
+    } elseif (is_array($value)) {
+        return new \ArrayIterator($value);
+    } else {
+        return new \ArrayIterator([$value]);
+    }
+}
+
+/**
+ * Synchronously waits on a promise to resolve and returns an inspection state
+ * array.
+ *
+ * Returns a state associative array containing a "state" key mapping to a
+ * valid promise state. If the state of the promise is "fulfilled", the array
+ * will contain a "value" key mapping to the fulfilled value of the promise. If
+ * the promise is rejected, the array will contain a "reason" key mapping to
+ * the rejection reason of the promise.
+ *
+ * @param PromiseInterface $promise Promise or value.
+ *
+ * @return array
+ */
+function inspect(PromiseInterface $promise)
+{
+    try {
+        return [
+            'state' => PromiseInterface::FULFILLED,
+            'value' => $promise->wait()
+        ];
+    } catch (RejectionException $e) {
+        return ['state' => 'rejected', 'reason' => $e->getReason()];
+    } catch (\Exception $e) {
+        return ['state' => 'rejected', 'reason' => $e];
+    }
+}
+
+/**
+ * Waits on all of the provided promises, but does not unwrap rejected promises
+ * as thrown exception.
+ *
+ * Returns an array of inspection state arrays.
+ *
+ * @param PromiseInterface[] $promises Traversable of promises to wait upon.
+ *
+ * @return array
+ * @see GuzzleHttp\Promise\inspect for the inspection state array format.
+ */
+function inspect_all($promises)
+{
+    $results = [];
+    foreach ($promises as $key => $promise) {
+        $results[$key] = inspect($promise);
+    }
+
+    return $results;
+}
+
+/**
+ * Waits on all of the provided promises and returns the fulfilled values.
+ *
+ * Returns an array that contains the value of each promise (in the same order
+ * the promises were provided). An exception is thrown if any of the promises
+ * are rejected.
+ *
+ * @param mixed $promises Iterable of PromiseInterface objects to wait on.
+ *
+ * @return array
+ * @throws \Exception on error
+ */
+function unwrap($promises)
+{
+    $results = [];
+    foreach ($promises as $key => $promise) {
+        $results[$key] = $promise->wait();
+    }
+
+    return $results;
+}
+
+/**
+ * Given an array of promises, return a promise that is fulfilled when all the
+ * items in the array are fulfilled.
+ *
+ * The promise's fulfillment value is an array with fulfillment values at
+ * respective positions to the original array. If any promise in the array
+ * rejects, the returned promise is rejected with the rejection reason.
+ *
+ * @param mixed $promises Promises or values.
+ *
+ * @return Promise
+ */
+function all($promises)
+{
+    $results = [];
+    return each(
+        $promises,
+        function ($value, $idx) use (&$results) {
+            $results[$idx] = $value;
+        },
+        function ($reason, $idx, Promise $aggregate) {
+            $aggregate->reject($reason);
+        }
+    )->then(function () use (&$results) {
+        ksort($results);
+        return $results;
+    });
+}
+
+/**
+ * Initiate a competitive race between multiple promises or values (values will
+ * become immediately fulfilled promises).
+ *
+ * When count amount of promises have been fulfilled, the returned promise is
+ * fulfilled with an array that contains the fulfillment values of the winners
+ * in order of resolution.
+ *
+ * This prommise is rejected with a {@see GuzzleHttp\Promise\AggregateException}
+ * if the number of fulfilled promises is less than the desired $count.
+ *
+ * @param int   $count    Total number of promises.
+ * @param mixed $promises Promises or values.
+ *
+ * @return Promise
+ */
+function some($count, $promises)
+{
+    $results = [];
+    $rejections = [];
+
+    return each(
+        $promises,
+        function ($value, $idx, PromiseInterface $p) use (&$results, $count) {
+            if ($p->getState() !== PromiseInterface::PENDING) {
+                return;
+            }
+            $results[$idx] = $value;
+            if (count($results) >= $count) {
+                $p->resolve(null);
+            }
+        },
+        function ($reason) use (&$rejections) {
+            $rejections[] = $reason;
+        }
+    )->then(
+        function () use (&$results, &$rejections, $count) {
+            if (count($results) !== $count) {
+                throw new AggregateException(
+                    'Not enough promises to fulfill count',
+                    $rejections
+                );
+            }
+            ksort($results);
+            return array_values($results);
+        }
+    );
+}
+
+/**
+ * Like some(), with 1 as count. However, if the promise fulfills, the
+ * fulfillment value is not an array of 1 but the value directly.
+ *
+ * @param mixed $promises Promises or values.
+ *
+ * @return PromiseInterface
+ */
+function any($promises)
+{
+    return some(1, $promises)->then(function ($values) { return $values[0]; });
+}
+
+/**
+ * Returns a promise that is fulfilled when all of the provided promises have
+ * been fulfilled or rejected.
+ *
+ * The returned promise is fulfilled with an array of inspection state arrays.
+ *
+ * @param mixed $promises Promises or values.
+ *
+ * @return Promise
+ * @see GuzzleHttp\Promise\inspect for the inspection state array format.
+ */
+function settle($promises)
+{
+    $results = [];
+
+    return each(
+        $promises,
+        function ($value, $idx) use (&$results) {
+            $results[$idx] = ['state' => 'fulfilled', 'value' => $value];
+        },
+        function ($reason, $idx) use (&$results) {
+            $results[$idx] = ['state' => 'rejected', 'reason' => $reason];
+        }
+    )->then(function () use (&$results) {
+        ksort($results);
+        return $results;
+    });
+}
+
+/**
+ * Given an iterator that yields promises or values, returns a promise that is
+ * fulfilled with a null value when the iterator has been consumed or the
+ * aggregate promise has been fulfilled or rejected.
+ *
+ * $onFulfilled is a function that accepts the fulfilled value, iterator
+ * index, and the aggregate promise. The callback can invoke any necessary side
+ * effects and choose to resolve or reject the aggregate promise if needed.
+ *
+ * $onRejected is a function that accepts the rejection reason, iterator
+ * index, and the aggregate promise. The callback can invoke any necessary side
+ * effects and choose to resolve or reject the aggregate promise if needed.
+ *
+ * @param mixed    $iterable    Iterator or array to iterate over.
+ * @param callable $onFulfilled
+ * @param callable $onRejected
+ *
+ * @return Promise
+ */
+function each(
+    $iterable,
+    callable $onFulfilled = null,
+    callable $onRejected = null
+) {
+    return (new EachPromise($iterable, [
+        'fulfilled' => $onFulfilled,
+        'rejected'  => $onRejected
+    ]))->promise();
+}
+
+/**
+ * Like each, but only allows a certain number of outstanding promises at any
+ * given time.
+ *
+ * $concurrency may be an integer or a function that accepts the number of
+ * pending promises and returns a numeric concurrency limit value to allow for
+ * dynamic a concurrency size.
+ *
+ * @param mixed        $iterable
+ * @param int|callable $concurrency
+ * @param callable     $onFulfilled
+ * @param callable     $onRejected
+ *
+ * @return mixed
+ */
+function each_limit(
+    $iterable,
+    $concurrency,
+    callable $onFulfilled = null,
+    callable $onRejected = null
+) {
+    return (new EachPromise($iterable, [
+        'fulfilled'   => $onFulfilled,
+        'rejected'    => $onRejected,
+        'concurrency' => $concurrency
+    ]))->promise();
+}
+
+/**
+ * Like each_limit, but ensures that no promise in the given $iterable argument
+ * is rejected. If any promise is rejected, then the aggregate promise is
+ * rejected with the encountered rejection.
+ *
+ * @param mixed        $iterable
+ * @param int|callable $concurrency
+ * @param callable     $onFulfilled
+ *
+ * @return mixed
+ */
+function each_limit_all(
+    $iterable,
+    $concurrency,
+    callable $onFulfilled = null
+) {
+    return each_limit(
+        $iterable,
+        $concurrency,
+        $onFulfilled,
+        function ($reason, $idx, PromiseInterface $aggregate) {
+            $aggregate->reject($reason);
+        }
+    );
+}
+
+/**
+ * Returns true if a promise is fulfilled.
+ *
+ * @param PromiseInterface $promise
+ *
+ * @return bool
+ */
+function is_fulfilled(PromiseInterface $promise)
+{
+    return $promise->getState() === PromiseInterface::FULFILLED;
+}
+
+/**
+ * Returns true if a promise is rejected.
+ *
+ * @param PromiseInterface $promise
+ *
+ * @return bool
+ */
+function is_rejected(PromiseInterface $promise)
+{
+    return $promise->getState() === PromiseInterface::REJECTED;
+}
+
+/**
+ * Returns true if a promise is fulfilled or rejected.
+ *
+ * @param PromiseInterface $promise
+ *
+ * @return bool
+ */
+function is_settled(PromiseInterface $promise)
+{
+    return $promise->getState() !== PromiseInterface::PENDING;
+}
+
+/**
+ * Creates a promise that is resolved using a generator that yields values or
+ * promises (somewhat similar to C#'s async keyword).
+ *
+ * When called, the coroutine function will start an instance of the generator
+ * and returns a promise that is fulfilled with its final yielded value.
+ *
+ * Control is returned back to the generator when the yielded promise settles.
+ * This can lead to less verbose code when doing lots of sequential async calls
+ * with minimal processing in between.
+ *
+ *     use GuzzleHttp\Promise;
+ *
+ *     function createPromise($value) {
+ *         return new Promise\FulfilledPromise($value);
+ *     }
+ *
+ *     $promise = Promise\coroutine(function () {
+ *         $value = (yield createPromise('a'));
+ *         try {
+ *             $value = (yield createPromise($value . 'b'));
+ *         } catch (\Exception $e) {
+ *             // The promise was rejected.
+ *         }
+ *         yield $value . 'c';
+ *     });
+ *
+ *     // Outputs "abc"
+ *     $promise->then(function ($v) { echo $v; });
+ *
+ * @param callable $generatorFn Generator function to wrap into a promise.
+ *
+ * @return Promise
+ * @link https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration
+ */
+function coroutine(callable $generatorFn)
+{
+    $generator = $generatorFn();
+    return __next_coroutine($generator->current(), $generator)->then();
+}
+
+/** @internal */
+function __next_coroutine($yielded, \Generator $generator)
+{
+    return promise_for($yielded)->then(
+        function ($value) use ($generator) {
+            $nextYield = $generator->send($value);
+            return $generator->valid()
+                ? __next_coroutine($nextYield, $generator)
+                : $value;
+        },
+        function ($reason) use ($generator) {
+            $nextYield = $generator->throw(exception_for($reason));
+            // The throw was caught, so keep iterating on the coroutine
+            return __next_coroutine($nextYield, $generator);
+        }
+    );
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/AggregateExceptionTest.php b/core/vendor/guzzlehttp/promises/tests/AggregateExceptionTest.php
new file mode 100644
index 0000000..eaa7703
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/AggregateExceptionTest.php
@@ -0,0 +1,14 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise\AggregateException;
+
+class AggregateExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasReason()
+    {
+        $e = new AggregateException('foo', ['baz', 'bar']);
+        $this->assertContains('foo', $e->getMessage());
+        $this->assertEquals(['baz', 'bar'], $e->getReason());
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/EachPromiseTest.php b/core/vendor/guzzlehttp/promises/tests/EachPromiseTest.php
new file mode 100644
index 0000000..b913b3a
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/EachPromiseTest.php
@@ -0,0 +1,288 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise\RejectedPromise;
+use GuzzleHttp\Promise\FulfilledPromise;
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\PromiseInterface;
+use GuzzleHttp\Promise\EachPromise;
+use GuzzleHttp\Promise as P;
+
+/**
+ * @covers GuzzleHttp\Promise\EachPromise
+ */
+class EachPromiseTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsSameInstance()
+    {
+        $each = new EachPromise([], ['concurrency' => 100]);
+        $this->assertSame($each->promise(), $each->promise());
+    }
+
+    public function testInvokesAllPromises()
+    {
+        $promises = [new Promise(), new Promise(), new Promise()];
+        $called = [];
+        $each = new EachPromise($promises, [
+            'fulfilled' => function ($value) use (&$called) {
+                $called[] = $value;
+            }
+        ]);
+        $p = $each->promise();
+        $promises[0]->resolve('a');
+        $promises[1]->resolve('c');
+        $promises[2]->resolve('b');
+        P\queue()->run();
+        $this->assertEquals(['a', 'c', 'b'], $called);
+        $this->assertEquals(PromiseInterface::FULFILLED, $p->getState());
+    }
+
+    public function testIsWaitable()
+    {
+        $a = new Promise(function () use (&$a) { $a->resolve('a'); });
+        $b = new Promise(function () use (&$b) { $b->resolve('b'); });
+        $called = [];
+        $each = new EachPromise([$a, $b], [
+            'fulfilled' => function ($value) use (&$called) { $called[] = $value; }
+        ]);
+        $p = $each->promise();
+        $this->assertNull($p->wait());
+        $this->assertEquals(PromiseInterface::FULFILLED, $p->getState());
+        $this->assertEquals(['a', 'b'], $called);
+    }
+
+    public function testCanResolveBeforeConsumingAll()
+    {
+        $called = 0;
+        $a = new Promise(function () use (&$a) { $a->resolve('a'); });
+        $b = new Promise(function () { $this->fail(); });
+        $each = new EachPromise([$a, $b], [
+            'fulfilled' => function ($value, $idx, Promise $aggregate) use (&$called) {
+                $this->assertSame($idx, 0);
+                $this->assertEquals('a', $value);
+                $aggregate->resolve(null);
+                $called++;
+            },
+            'rejected' => function (\Exception $reason) {
+                $this->fail($reason->getMessage());
+            }
+        ]);
+        $p = $each->promise();
+        $p->wait();
+        $this->assertNull($p->wait());
+        $this->assertEquals(1, $called);
+        $this->assertEquals(PromiseInterface::FULFILLED, $a->getState());
+        $this->assertEquals(PromiseInterface::PENDING, $b->getState());
+        // Resolving $b has no effect on the aggregate promise.
+        $b->resolve('foo');
+        $this->assertEquals(1, $called);
+    }
+
+    public function testLimitsPendingPromises()
+    {
+        $pending = [new Promise(), new Promise(), new Promise(), new Promise()];
+        $promises = new \ArrayIterator($pending);
+        $each = new EachPromise($promises, ['concurrency' => 2]);
+        $p = $each->promise();
+        $this->assertCount(2, $this->readAttribute($each, 'pending'));
+        $pending[0]->resolve('a');
+        $this->assertCount(2, $this->readAttribute($each, 'pending'));
+        $this->assertTrue($promises->valid());
+        $pending[1]->resolve('b');
+        P\queue()->run();
+        $this->assertCount(2, $this->readAttribute($each, 'pending'));
+        $this->assertTrue($promises->valid());
+        $promises[2]->resolve('c');
+        P\queue()->run();
+        $this->assertCount(1, $this->readAttribute($each, 'pending'));
+        $this->assertEquals(PromiseInterface::PENDING, $p->getState());
+        $promises[3]->resolve('d');
+        P\queue()->run();
+        $this->assertNull($this->readAttribute($each, 'pending'));
+        $this->assertEquals(PromiseInterface::FULFILLED, $p->getState());
+        $this->assertFalse($promises->valid());
+    }
+
+    public function testDynamicallyLimitsPendingPromises()
+    {
+        $calls = [];
+        $pendingFn = function ($count) use (&$calls) {
+            $calls[] = $count;
+            return 2;
+        };
+        $pending = [new Promise(), new Promise(), new Promise(), new Promise()];
+        $promises = new \ArrayIterator($pending);
+        $each = new EachPromise($promises, ['concurrency' => $pendingFn]);
+        $p = $each->promise();
+        $this->assertCount(2, $this->readAttribute($each, 'pending'));
+        $pending[0]->resolve('a');
+        $this->assertCount(2, $this->readAttribute($each, 'pending'));
+        $this->assertTrue($promises->valid());
+        $pending[1]->resolve('b');
+        $this->assertCount(2, $this->readAttribute($each, 'pending'));
+        P\queue()->run();
+        $this->assertTrue($promises->valid());
+        $promises[2]->resolve('c');
+        P\queue()->run();
+        $this->assertCount(1, $this->readAttribute($each, 'pending'));
+        $this->assertEquals(PromiseInterface::PENDING, $p->getState());
+        $promises[3]->resolve('d');
+        P\queue()->run();
+        $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()
+    {
+        $called = false;
+        $a = new Promise(function () use (&$a, &$called) {
+            $a->resolve('a');
+            $called = true;
+        });
+        $each = new EachPromise([$a], [
+            'concurrency'       => function () { return 1; },
+            'fulfilled' => function () {},
+            'rejected'  => function () {}
+        ]);
+        $each->promise()->wait();
+        $this->assertNull($this->readAttribute($each, 'onFulfilled'));
+        $this->assertNull($this->readAttribute($each, 'onRejected'));
+        $this->assertNull($this->readAttribute($each, 'iterable'));
+        $this->assertNull($this->readAttribute($each, 'pending'));
+        $this->assertNull($this->readAttribute($each, 'concurrency'));
+        $this->assertTrue($called);
+    }
+
+    public function testCanBeCancelled()
+    {
+        $this->markTestIncomplete();
+    }
+
+    public function testDoesNotBlowStackWithFulfilledPromises()
+    {
+        $pending = [];
+        for ($i = 0; $i < 100; $i++) {
+            $pending[] = new FulfilledPromise($i);
+        }
+        $values = [];
+        $each = new EachPromise($pending, [
+            'fulfilled' => function ($value) use (&$values) {
+                $values[] = $value;
+            }
+        ]);
+        $called = false;
+        $each->promise()->then(function () use (&$called) {
+            $called = true;
+        });
+        $this->assertFalse($called);
+        P\queue()->run();
+        $this->assertTrue($called);
+        $this->assertEquals(range(0, 99), $values);
+    }
+
+    public function testDoesNotBlowStackWithRejectedPromises()
+    {
+        $pending = [];
+        for ($i = 0; $i < 100; $i++) {
+            $pending[] = new RejectedPromise($i);
+        }
+        $values = [];
+        $each = new EachPromise($pending, [
+            'rejected' => function ($value) use (&$values) {
+                $values[] = $value;
+            }
+        ]);
+        $called = false;
+        $each->promise()->then(
+            function () use (&$called) { $called = true; },
+            function () { $this->fail('Should not have rejected.'); }
+        );
+        $this->assertFalse($called);
+        P\queue()->run();
+        $this->assertTrue($called);
+        $this->assertEquals(range(0, 99), $values);
+    }
+
+    public function testReturnsPromiseForWhatever()
+    {
+        $called = [];
+        $arr = ['a', 'b'];
+        $each = new EachPromise($arr, [
+            'fulfilled' => function ($v) use (&$called) { $called[] = $v; }
+        ]);
+        $p = $each->promise();
+        $this->assertNull($p->wait());
+        $this->assertEquals(['a', 'b'], $called);
+    }
+
+    public function testRejectsAggregateWhenNextThrows()
+    {
+        $iter = function () {
+            yield 'a';
+            throw new \Exception('Failure');
+        };
+        $each = new EachPromise($iter());
+        $p = $each->promise();
+        $e = null;
+        $received = null;
+        $p->then(null, function ($reason) use (&$e) { $e = $reason; });
+        P\queue()->run();
+        $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/promises/tests/FulfilledPromiseTest.php b/core/vendor/guzzlehttp/promises/tests/FulfilledPromiseTest.php
new file mode 100644
index 0000000..554c150
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/FulfilledPromiseTest.php
@@ -0,0 +1,108 @@
+<?php
+namespace GuzzleHttp\Tests\Promise;
+
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\FulfilledPromise;
+
+/**
+ * @covers GuzzleHttp\Promise\FulfilledPromise
+ */
+class FulfilledPromiseTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsValueWhenWaitedUpon()
+    {
+        $p = new FulfilledPromise('foo');
+        $this->assertEquals('fulfilled', $p->getState());
+        $this->assertEquals('foo', $p->wait(true));
+    }
+
+    public function testCannotCancel()
+    {
+        $p = new FulfilledPromise('foo');
+        $this->assertEquals('fulfilled', $p->getState());
+        $p->cancel();
+        $this->assertEquals('foo', $p->wait());
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @exepctedExceptionMessage Cannot resolve a fulfilled promise
+     */
+    public function testCannotResolve()
+    {
+        $p = new FulfilledPromise('foo');
+        $p->resolve('bar');
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @exepctedExceptionMessage Cannot reject a fulfilled promise
+     */
+    public function testCannotReject()
+    {
+        $p = new FulfilledPromise('foo');
+        $p->reject('bar');
+    }
+
+    public function testCanResolveWithSameValue()
+    {
+        $p = new FulfilledPromise('foo');
+        $p->resolve('foo');
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testCannotResolveWithPromise()
+    {
+        new FulfilledPromise(new Promise());
+    }
+
+    public function testReturnsSelfWhenNoOnFulfilled()
+    {
+        $p = new FulfilledPromise('a');
+        $this->assertSame($p, $p->then());
+    }
+
+    public function testAsynchronouslyInvokesOnFulfilled()
+    {
+        $p = new FulfilledPromise('a');
+        $r = null;
+        $f = function ($d) use (&$r) { $r = $d; };
+        $p2 = $p->then($f);
+        $this->assertNotSame($p, $p2);
+        $this->assertNull($r);
+        \GuzzleHttp\Promise\queue()->run();
+        $this->assertEquals('a', $r);
+    }
+
+    public function testReturnsNewRejectedWhenOnFulfilledFails()
+    {
+        $p = new FulfilledPromise('a');
+        $f = function () { throw new \Exception('b'); };
+        $p2 = $p->then($f);
+        $this->assertNotSame($p, $p2);
+        try {
+            $p2->wait();
+            $this->fail();
+        } catch (\Exception $e) {
+            $this->assertEquals('b', $e->getMessage());
+        }
+    }
+
+    public function testOtherwiseIsSugarForRejections()
+    {
+        $c = null;
+        $p = new FulfilledPromise('foo');
+        $p->otherwise(function ($v) use (&$c) { $c = $v; });
+        $this->assertNull($c);
+    }
+
+    public function testDoesNotTryToFulfillTwiceDuringTrampoline()
+    {
+        $fp = new FulfilledPromise('a');
+        $t1 = $fp->then(function ($v) { return $v . ' b'; });
+        $t1->resolve('why!');
+        $this->assertEquals('why!', $t1->wait());
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/NotPromiseInstance.php b/core/vendor/guzzlehttp/promises/tests/NotPromiseInstance.php
new file mode 100644
index 0000000..6288aa8
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/NotPromiseInstance.php
@@ -0,0 +1,50 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\PromiseInterface;
+
+class NotPromiseInstance extends Thennable implements PromiseInterface
+{
+    private $nextPromise = null;
+
+    public function __construct()
+    {
+        $this->nextPromise = new Promise();
+    }
+
+    public function then(callable $res = null, callable $rej = null)
+    {
+        return $this->nextPromise->then($res, $rej);
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        return $this->then($onRejected);
+    }
+
+    public function resolve($value)
+    {
+        $this->nextPromise->resolve($value);
+    }
+
+    public function reject($reason)
+    {
+        $this->nextPromise->reject($reason);
+    }
+
+    public function wait($unwrap = true, $defaultResolution = null)
+    {
+
+    }
+
+    public function cancel()
+    {
+
+    }
+
+    public function getState()
+    {
+        return $this->nextPromise->getState();
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/PromiseTest.php b/core/vendor/guzzlehttp/promises/tests/PromiseTest.php
new file mode 100644
index 0000000..946c627
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/PromiseTest.php
@@ -0,0 +1,579 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise\CancellationException;
+use GuzzleHttp\Promise as P;
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\RejectedPromise;
+use GuzzleHttp\Promise\RejectionException;
+
+/**
+ * @covers GuzzleHttp\Promise\Promise
+ */
+class PromiseTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage The promise is already fulfilled
+     */
+    public function testCannotResolveNonPendingPromise()
+    {
+        $p = new Promise();
+        $p->resolve('foo');
+        $p->resolve('bar');
+        $this->assertEquals('foo', $p->wait());
+    }
+
+    public function testCanResolveWithSameValue()
+    {
+        $p = new Promise();
+        $p->resolve('foo');
+        $p->resolve('foo');
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Cannot change a fulfilled promise to rejected
+     */
+    public function testCannotRejectNonPendingPromise()
+    {
+        $p = new Promise();
+        $p->resolve('foo');
+        $p->reject('bar');
+        $this->assertEquals('foo', $p->wait());
+    }
+
+    public function testCanRejectWithSameValue()
+    {
+        $p = new Promise();
+        $p->reject('foo');
+        $p->reject('foo');
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Cannot change a fulfilled promise to rejected
+     */
+    public function testCannotRejectResolveWithSameValue()
+    {
+        $p = new Promise();
+        $p->resolve('foo');
+        $p->reject('foo');
+    }
+
+    public function testInvokesWaitFunction()
+    {
+        $p = new Promise(function () use (&$p) { $p->resolve('10'); });
+        $this->assertEquals('10', $p->wait());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Promise\RejectionException
+     */
+    public function testRejectsAndThrowsWhenWaitFailsToResolve()
+    {
+        $p = new Promise(function () {});
+        $p->wait();
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Promise\RejectionException
+     * @expectedExceptionMessage The promise was rejected with reason: foo
+     */
+    public function testThrowsWhenUnwrapIsRejectedWithNonException()
+    {
+        $p = new Promise(function () use (&$p) { $p->reject('foo'); });
+        $p->wait();
+    }
+
+    /**
+     * @expectedException \UnexpectedValueException
+     * @expectedExceptionMessage foo
+     */
+    public function testThrowsWhenUnwrapIsRejectedWithException()
+    {
+        $e = new \UnexpectedValueException('foo');
+        $p = new Promise(function () use (&$p, $e) { $p->reject($e); });
+        $p->wait();
+    }
+
+    public function testDoesNotUnwrapExceptionsWhenDisabled()
+    {
+        $p = new Promise(function () use (&$p) { $p->reject('foo'); });
+        $this->assertEquals('pending', $p->getState());
+        $p->wait(false);
+        $this->assertEquals('rejected', $p->getState());
+    }
+
+    public function testRejectsSelfWhenWaitThrows()
+    {
+        $e = new \UnexpectedValueException('foo');
+        $p = new Promise(function () use ($e) { throw $e; });
+        try {
+            $p->wait();
+            $this->fail();
+        } catch (\UnexpectedValueException $e) {
+            $this->assertEquals('rejected', $p->getState());
+        }
+    }
+
+    public function testWaitsOnNestedPromises()
+    {
+        $p = new Promise(function () use (&$p) { $p->resolve('_'); });
+        $p2 = new Promise(function () use (&$p2) { $p2->resolve('foo'); });
+        $p3 = $p->then(function () use ($p2) { return $p2; });
+        $this->assertSame('foo', $p3->wait());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Promise\RejectionException
+     */
+    public function testThrowsWhenWaitingOnPromiseWithNoWaitFunction()
+    {
+        $p = new Promise();
+        $p->wait();
+    }
+
+    public function testThrowsWaitExceptionAfterPromiseIsResolved()
+    {
+        $p = new Promise(function () use (&$p) {
+            $p->reject('Foo!');
+            throw new \Exception('Bar?');
+        });
+
+        try {
+            $p->wait();
+            $this->fail();
+        } catch (\Exception $e) {
+            $this->assertEquals('Bar?', $e->getMessage());
+        }
+    }
+
+    public function testGetsActualWaitValueFromThen()
+    {
+        $p = new Promise(function () use (&$p) { $p->reject('Foo!'); });
+        $p2 = $p->then(null, function ($reason) {
+            return new RejectedPromise([$reason]);
+        });
+
+        try {
+            $p2->wait();
+            $this->fail('Should have thrown');
+        } catch (RejectionException $e) {
+            $this->assertEquals(['Foo!'], $e->getReason());
+        }
+    }
+
+    public function testWaitBehaviorIsBasedOnLastPromiseInChain()
+    {
+        $p3 = new Promise(function () use (&$p3) { $p3->resolve('Whoop'); });
+        $p2 = new Promise(function () use (&$p2, $p3) { $p2->reject($p3); });
+        $p = new Promise(function () use (&$p, $p2) { $p->reject($p2); });
+        $this->assertEquals('Whoop', $p->wait());
+    }
+
+    public function testCannotCancelNonPending()
+    {
+        $p = new Promise();
+        $p->resolve('foo');
+        $p->cancel();
+        $this->assertEquals('fulfilled', $p->getState());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Promise\CancellationException
+     */
+    public function testCancelsPromiseWhenNoCancelFunction()
+    {
+        $p = new Promise();
+        $p->cancel();
+        $this->assertEquals('rejected', $p->getState());
+        $p->wait();
+    }
+
+    public function testCancelsPromiseWithCancelFunction()
+    {
+        $called = false;
+        $p = new Promise(null, function () use (&$called) { $called = true; });
+        $p->cancel();
+        $this->assertEquals('rejected', $p->getState());
+        $this->assertTrue($called);
+    }
+
+    public function testCancelsUppermostPendingPromise()
+    {
+        $called = false;
+        $p1 = new Promise(null, function () use (&$called) { $called = true; });
+        $p2 = $p1->then(function () {});
+        $p3 = $p2->then(function () {});
+        $p4 = $p3->then(function () {});
+        $p3->cancel();
+        $this->assertEquals('rejected', $p1->getState());
+        $this->assertEquals('rejected', $p2->getState());
+        $this->assertEquals('rejected', $p3->getState());
+        $this->assertEquals('pending', $p4->getState());
+        $this->assertTrue($called);
+
+        try {
+            $p3->wait();
+            $this->fail();
+        } catch (CancellationException $e) {
+            $this->assertContains('cancelled', $e->getMessage());
+        }
+
+        try {
+            $p4->wait();
+            $this->fail();
+        } catch (CancellationException $e) {
+            $this->assertContains('cancelled', $e->getMessage());
+        }
+
+        $this->assertEquals('rejected', $p4->getState());
+    }
+
+    public function testCancelsChildPromises()
+    {
+        $called1 = $called2 = $called3 = false;
+        $p1 = new Promise(null, function () use (&$called1) { $called1 = true; });
+        $p2 = new Promise(null, function () use (&$called2) { $called2 = true; });
+        $p3 = new Promise(null, function () use (&$called3) { $called3 = true; });
+        $p4 = $p2->then(function () use ($p3) { return $p3; });
+        $p5 = $p4->then(function () { $this->fail(); });
+        $p4->cancel();
+        $this->assertEquals('pending', $p1->getState());
+        $this->assertEquals('rejected', $p2->getState());
+        $this->assertEquals('rejected', $p4->getState());
+        $this->assertEquals('pending', $p5->getState());
+        $this->assertFalse($called1);
+        $this->assertTrue($called2);
+        $this->assertFalse($called3);
+    }
+
+    public function testRejectsPromiseWhenCancelFails()
+    {
+        $called = false;
+        $p = new Promise(null, function () use (&$called) {
+            $called = true;
+            throw new \Exception('e');
+        });
+        $p->cancel();
+        $this->assertEquals('rejected', $p->getState());
+        $this->assertTrue($called);
+        try {
+            $p->wait();
+            $this->fail();
+        } catch (\Exception $e) {
+            $this->assertEquals('e', $e->getMessage());
+        }
+    }
+
+    public function testCreatesPromiseWhenFulfilledAfterThen()
+    {
+        $p = new Promise();
+        $carry = null;
+        $p2 = $p->then(function ($v) use (&$carry) { $carry = $v; });
+        $this->assertNotSame($p, $p2);
+        $p->resolve('foo');
+        P\queue()->run();
+
+        $this->assertEquals('foo', $carry);
+    }
+
+    public function testCreatesPromiseWhenFulfilledBeforeThen()
+    {
+        $p = new Promise();
+        $p->resolve('foo');
+        $carry = null;
+        $p2 = $p->then(function ($v) use (&$carry) { $carry = $v; });
+        $this->assertNotSame($p, $p2);
+        $this->assertNull($carry);
+        \GuzzleHttp\Promise\queue()->run();
+        $this->assertEquals('foo', $carry);
+    }
+
+    public function testCreatesPromiseWhenFulfilledWithNoCallback()
+    {
+        $p = new Promise();
+        $p->resolve('foo');
+        $p2 = $p->then();
+        $this->assertNotSame($p, $p2);
+        $this->assertInstanceOf('GuzzleHttp\Promise\FulfilledPromise', $p2);
+    }
+
+    public function testCreatesPromiseWhenRejectedAfterThen()
+    {
+        $p = new Promise();
+        $carry = null;
+        $p2 = $p->then(null, function ($v) use (&$carry) { $carry = $v; });
+        $this->assertNotSame($p, $p2);
+        $p->reject('foo');
+        P\queue()->run();
+        $this->assertEquals('foo', $carry);
+    }
+
+    public function testCreatesPromiseWhenRejectedBeforeThen()
+    {
+        $p = new Promise();
+        $p->reject('foo');
+        $carry = null;
+        $p2 = $p->then(null, function ($v) use (&$carry) { $carry = $v; });
+        $this->assertNotSame($p, $p2);
+        $this->assertNull($carry);
+        P\queue()->run();
+        $this->assertEquals('foo', $carry);
+    }
+
+    public function testCreatesPromiseWhenRejectedWithNoCallback()
+    {
+        $p = new Promise();
+        $p->reject('foo');
+        $p2 = $p->then();
+        $this->assertNotSame($p, $p2);
+        $this->assertInstanceOf('GuzzleHttp\Promise\RejectedPromise', $p2);
+    }
+
+    public function testInvokesWaitFnsForThens()
+    {
+        $p = new Promise(function () use (&$p) { $p->resolve('a'); });
+        $p2 = $p
+            ->then(function ($v) { return $v . '-1-'; })
+            ->then(function ($v) { return $v . '2'; });
+        $this->assertEquals('a-1-2', $p2->wait());
+    }
+
+    public function testStacksThenWaitFunctions()
+    {
+        $p1 = new Promise(function () use (&$p1) { $p1->resolve('a'); });
+        $p2 = new Promise(function () use (&$p2) { $p2->resolve('b'); });
+        $p3 = new Promise(function () use (&$p3) { $p3->resolve('c'); });
+        $p4 = $p1
+            ->then(function () use ($p2) { return $p2; })
+            ->then(function () use ($p3) { return $p3; });
+        $this->assertEquals('c', $p4->wait());
+    }
+
+    public function testForwardsFulfilledDownChainBetweenGaps()
+    {
+        $p = new Promise();
+        $r = $r2 = null;
+        $p->then(null, null)
+            ->then(function ($v) use (&$r) { $r = $v; return $v . '2'; })
+            ->then(function ($v) use (&$r2) { $r2 = $v; });
+        $p->resolve('foo');
+        P\queue()->run();
+        $this->assertEquals('foo', $r);
+        $this->assertEquals('foo2', $r2);
+    }
+
+    public function testForwardsRejectedPromisesDownChainBetweenGaps()
+    {
+        $p = new Promise();
+        $r = $r2 = null;
+        $p->then(null, null)
+            ->then(null, function ($v) use (&$r) { $r = $v; return $v . '2'; })
+            ->then(function ($v) use (&$r2) { $r2 = $v; });
+        $p->reject('foo');
+        P\queue()->run();
+        $this->assertEquals('foo', $r);
+        $this->assertEquals('foo2', $r2);
+    }
+
+    public function testForwardsThrownPromisesDownChainBetweenGaps()
+    {
+        $e = new \Exception();
+        $p = new Promise();
+        $r = $r2 = null;
+        $p->then(null, null)
+            ->then(null, function ($v) use (&$r, $e) {
+                $r = $v;
+                throw $e;
+            })
+            ->then(
+                null,
+                function ($v) use (&$r2) { $r2 = $v; }
+            );
+        $p->reject('foo');
+        P\queue()->run();
+        $this->assertEquals('foo', $r);
+        $this->assertSame($e, $r2);
+    }
+
+    public function testForwardsReturnedRejectedPromisesDownChainBetweenGaps()
+    {
+        $p = new Promise();
+        $rejected = new RejectedPromise('bar');
+        $r = $r2 = null;
+        $p->then(null, null)
+            ->then(null, function ($v) use (&$r, $rejected) {
+                $r = $v;
+                return $rejected;
+            })
+            ->then(
+                null,
+                function ($v) use (&$r2) { $r2 = $v; }
+            );
+        $p->reject('foo');
+        P\queue()->run();
+        $this->assertEquals('foo', $r);
+        $this->assertEquals('bar', $r2);
+        try {
+            $p->wait();
+        } catch (RejectionException $e) {
+            $this->assertEquals('foo', $e->getReason());
+        }
+    }
+
+    public function testForwardsHandlersToNextPromise()
+    {
+        $p = new Promise();
+        $p2 = new Promise();
+        $resolved = null;
+        $p
+            ->then(function ($v) use ($p2) { return $p2; })
+            ->then(function ($value) use (&$resolved) { $resolved = $value; });
+        $p->resolve('a');
+        $p2->resolve('b');
+        P\queue()->run();
+        $this->assertEquals('b', $resolved);
+    }
+
+    public function testRemovesReferenceFromChildWhenParentWaitedUpon()
+    {
+        $r = null;
+        $p = new Promise(function () use (&$p) { $p->resolve('a'); });
+        $p2 = new Promise(function () use (&$p2) { $p2->resolve('b'); });
+        $pb = $p->then(
+            function ($v) use ($p2, &$r) {
+                $r = $v;
+                return $p2;
+            })
+            ->then(function ($v) { return $v . '.'; });
+        $this->assertEquals('a', $p->wait());
+        $this->assertEquals('b', $p2->wait());
+        $this->assertEquals('b.', $pb->wait());
+        $this->assertEquals('a', $r);
+    }
+
+    public function testForwardsHandlersWhenFulfilledPromiseIsReturned()
+    {
+        $res = [];
+        $p = new Promise();
+        $p2 = new Promise();
+        $p2->resolve('foo');
+        $p2->then(function ($v) use (&$res) { $res[] = 'A:' . $v; });
+        // $res is A:foo
+        $p
+            ->then(function () use ($p2, &$res) { $res[] = 'B'; return $p2; })
+            ->then(function ($v) use (&$res) { $res[] = 'C:' . $v; });
+        $p->resolve('a');
+        $p->then(function ($v) use (&$res) { $res[] = 'D:' . $v; });
+        P\queue()->run();
+        $this->assertEquals(['A:foo', 'B', 'D:a', 'C:foo'], $res);
+    }
+
+    public function testForwardsHandlersWhenRejectedPromiseIsReturned()
+    {
+        $res = [];
+        $p = new Promise();
+        $p2 = new Promise();
+        $p2->reject('foo');
+        $p2->then(null, function ($v) use (&$res) { $res[] = 'A:' . $v; });
+        $p->then(null, function () use ($p2, &$res) { $res[] = 'B'; return $p2; })
+            ->then(null, function ($v) use (&$res) { $res[] = 'C:' . $v; });
+        $p->reject('a');
+        $p->then(null, function ($v) use (&$res) { $res[] = 'D:' . $v; });
+        P\queue()->run();
+        $this->assertEquals(['A:foo', 'B', 'D:a', 'C:foo'], $res);
+    }
+
+    public function testDoesNotForwardRejectedPromise()
+    {
+        $res = [];
+        $p = new Promise();
+        $p2 = new Promise();
+        $p2->cancel();
+        $p2->then(function ($v) use (&$res) { $res[] = "B:$v"; return $v; });
+        $p->then(function ($v) use ($p2, &$res) { $res[] = "B:$v"; return $p2; })
+            ->then(function ($v) use (&$res) { $res[] = 'C:' . $v; });
+        $p->resolve('a');
+        $p->then(function ($v) use (&$res) { $res[] = 'D:' . $v; });
+        P\queue()->run();
+        $this->assertEquals(['B:a', 'D:a'], $res);
+    }
+
+    public function testRecursivelyForwardsWhenOnlyThennable()
+    {
+        $res = [];
+        $p = new Promise();
+        $p2 = new Thennable();
+        $p2->resolve('foo');
+        $p2->then(function ($v) use (&$res) { $res[] = 'A:' . $v; });
+        $p->then(function () use ($p2, &$res) { $res[] = 'B'; return $p2; })
+            ->then(function ($v) use (&$res) { $res[] = 'C:' . $v; });
+        $p->resolve('a');
+        $p->then(function ($v) use (&$res) { $res[] = 'D:' . $v; });
+        P\queue()->run();
+        $this->assertEquals(['A:foo', 'B', 'D:a', 'C:foo'], $res);
+    }
+
+    public function testRecursivelyForwardsWhenNotInstanceOfPromise()
+    {
+        $res = [];
+        $p = new Promise();
+        $p2 = new NotPromiseInstance();
+        $p2->then(function ($v) use (&$res) { $res[] = 'A:' . $v; });
+        $p->then(function () use ($p2, &$res) { $res[] = 'B'; return $p2; })
+            ->then(function ($v) use (&$res) { $res[] = 'C:' . $v; });
+        $p->resolve('a');
+        $p->then(function ($v) use (&$res) { $res[] = 'D:' . $v; });
+        P\queue()->run();
+        $this->assertEquals(['B', 'D:a'], $res);
+        $p2->resolve('foo');
+        P\queue()->run();
+        $this->assertEquals(['B', 'D:a', 'A:foo', 'C:foo'], $res);
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Cannot fulfill or reject a promise with itself
+     */
+    public function testCannotResolveWithSelf()
+    {
+        $p = new Promise();
+        $p->resolve($p);
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Cannot fulfill or reject a promise with itself
+     */
+    public function testCannotRejectWithSelf()
+    {
+        $p = new Promise();
+        $p->reject($p);
+    }
+
+    public function testDoesNotBlowStackWhenWaitingOnNestedThens()
+    {
+        $inner = new Promise(function () use (&$inner) { $inner->resolve(0); });
+        $prev = $inner;
+        for ($i = 1; $i < 100; $i++) {
+            $prev = $prev->then(function ($i) { return $i + 1; });
+        }
+
+        $parent = new Promise(function () use (&$parent, $prev) {
+            $parent->resolve($prev);
+        });
+
+        $this->assertEquals(99, $parent->wait());
+    }
+
+    public function testOtherwiseIsSugarForRejections()
+    {
+        $p = new Promise();
+        $p->reject('foo');
+        $p->otherwise(function ($v) use (&$c) { $c = $v; });
+        P\queue()->run();
+        $this->assertEquals($c, 'foo');
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/RejectedPromiseTest.php b/core/vendor/guzzlehttp/promises/tests/RejectedPromiseTest.php
new file mode 100644
index 0000000..60f926e
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/RejectedPromiseTest.php
@@ -0,0 +1,143 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\RejectedPromise;
+
+/**
+ * @covers GuzzleHttp\Promise\RejectedPromise
+ */
+class RejectedPromiseTest extends \PHPUnit_Framework_TestCase
+{
+    public function testThrowsReasonWhenWaitedUpon()
+    {
+        $p = new RejectedPromise('foo');
+        $this->assertEquals('rejected', $p->getState());
+        try {
+            $p->wait(true);
+            $this->fail();
+        } catch (\Exception $e) {
+            $this->assertEquals('rejected', $p->getState());
+            $this->assertContains('foo', $e->getMessage());
+        }
+    }
+
+    public function testCannotCancel()
+    {
+        $p = new RejectedPromise('foo');
+        $p->cancel();
+        $this->assertEquals('rejected', $p->getState());
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @exepctedExceptionMessage Cannot resolve a rejected promise
+     */
+    public function testCannotResolve()
+    {
+        $p = new RejectedPromise('foo');
+        $p->resolve('bar');
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @exepctedExceptionMessage Cannot reject a rejected promise
+     */
+    public function testCannotReject()
+    {
+        $p = new RejectedPromise('foo');
+        $p->reject('bar');
+    }
+
+    public function testCanRejectWithSameValue()
+    {
+        $p = new RejectedPromise('foo');
+        $p->reject('foo');
+    }
+
+    public function testThrowsSpecificException()
+    {
+        $e = new \Exception();
+        $p = new RejectedPromise($e);
+        try {
+            $p->wait(true);
+            $this->fail();
+        } catch (\Exception $e2) {
+            $this->assertSame($e, $e2);
+        }
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testCannotResolveWithPromise()
+    {
+        new RejectedPromise(new Promise());
+    }
+
+    public function testReturnsSelfWhenNoOnReject()
+    {
+        $p = new RejectedPromise('a');
+        $this->assertSame($p, $p->then());
+    }
+
+    public function testInvokesOnRejectedAsynchronously()
+    {
+        $p = new RejectedPromise('a');
+        $r = null;
+        $f = function ($reason) use (&$r) { $r = $reason; };
+        $p->then(null, $f);
+        $this->assertNull($r);
+        \GuzzleHttp\Promise\queue()->run();
+        $this->assertEquals('a', $r);
+    }
+
+    public function testReturnsNewRejectedWhenOnRejectedFails()
+    {
+        $p = new RejectedPromise('a');
+        $f = function () { throw new \Exception('b'); };
+        $p2 = $p->then(null, $f);
+        $this->assertNotSame($p, $p2);
+        try {
+            $p2->wait();
+            $this->fail();
+        } catch (\Exception $e) {
+            $this->assertEquals('b', $e->getMessage());
+        }
+    }
+
+    public function testWaitingIsNoOp()
+    {
+        $p = new RejectedPromise('a');
+        $p->wait(false);
+    }
+
+    public function testOtherwiseIsSugarForRejections()
+    {
+        $p = new RejectedPromise('foo');
+        $p->otherwise(function ($v) use (&$c) { $c = $v; });
+        \GuzzleHttp\Promise\queue()->run();
+        $this->assertSame('foo', $c);
+    }
+
+    public function testCanResolveThenWithSuccess()
+    {
+        $actual = null;
+        $p = new RejectedPromise('foo');
+        $p->otherwise(function ($v) {
+            return $v . ' bar';
+        })->then(function ($v) use (&$actual) {
+            $actual = $v;
+        });
+        \GuzzleHttp\Promise\queue()->run();
+        $this->assertEquals('foo bar', $actual);
+    }
+
+    public function testDoesNotTryToRejectTwiceDuringTrampoline()
+    {
+        $fp = new RejectedPromise('a');
+        $t1 = $fp->then(null, function ($v) { return $v . ' b'; });
+        $t1->resolve('why!');
+        $this->assertEquals('why!', $t1->wait());
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/RejectionExceptionTest.php b/core/vendor/guzzlehttp/promises/tests/RejectionExceptionTest.php
new file mode 100644
index 0000000..36c6a88
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/RejectionExceptionTest.php
@@ -0,0 +1,47 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise\RejectionException;
+
+class Thing1
+{
+    public function __construct($message)
+    {
+        $this->message = $message;
+    }
+
+    public function __toString()
+    {
+        return $this->message;
+    }
+}
+
+class Thing2 implements \JsonSerializable
+{
+    public function jsonSerialize()
+    {
+        return '{}';
+    }
+}
+
+/**
+ * @covers GuzzleHttp\Promise\RejectionException
+ */
+class RejectionExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCanGetReasonFromException()
+    {
+        $thing = new Thing1('foo');
+        $e = new RejectionException($thing);
+
+        $this->assertSame($thing, $e->getReason());
+        $this->assertEquals('The promise was rejected with reason: foo', $e->getMessage());
+    }
+
+    public function testCanGetReasonMessageFromJson()
+    {
+        $reason = new Thing2();
+        $e = new RejectionException($reason);
+        $this->assertContains("{}", $e->getMessage());
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/TaskQueueTest.php b/core/vendor/guzzlehttp/promises/tests/TaskQueueTest.php
new file mode 100644
index 0000000..845b263
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/TaskQueueTest.php
@@ -0,0 +1,31 @@
+<?php
+namespace GuzzleHttp\Promise\Test;
+
+use GuzzleHttp\Promise\TaskQueue;
+
+class TaskQueueTest extends \PHPUnit_Framework_TestCase
+{
+    public function testKnowsIfEmpty()
+    {
+        $tq = new TaskQueue(false);
+        $this->assertTrue($tq->isEmpty());
+    }
+
+    public function testKnowsIfFull()
+    {
+        $tq = new TaskQueue(false);
+        $tq->add(function () {});
+        $this->assertFalse($tq->isEmpty());
+    }
+
+    public function testExecutesTasksInOrder()
+    {
+        $tq = new TaskQueue(false);
+        $called = [];
+        $tq->add(function () use (&$called) { $called[] = 'a'; });
+        $tq->add(function () use (&$called) { $called[] = 'b'; });
+        $tq->add(function () use (&$called) { $called[] = 'c'; });
+        $tq->run();
+        $this->assertEquals(['a', 'b', 'c'], $called);
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/Thennable.php b/core/vendor/guzzlehttp/promises/tests/Thennable.php
new file mode 100644
index 0000000..398954d
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/Thennable.php
@@ -0,0 +1,24 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise\Promise;
+
+class Thennable
+{
+    private $nextPromise = null;
+
+    public function __construct()
+    {
+        $this->nextPromise = new Promise();
+    }
+
+    public function then(callable $res = null, callable $rej = null)
+    {
+        return $this->nextPromise->then($res, $rej);
+    }
+
+    public function resolve($value)
+    {
+        $this->nextPromise->resolve($value);
+    }
+}
diff --git a/core/vendor/guzzlehttp/promises/tests/bootstrap.php b/core/vendor/guzzlehttp/promises/tests/bootstrap.php
new file mode 100644
index 0000000..a63d264
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/bootstrap.php
@@ -0,0 +1,4 @@
+<?php
+require __DIR__ . '/../vendor/autoload.php';
+require __DIR__ . '/Thennable.php';
+require __DIR__ . '/NotPromiseInstance.php';
diff --git a/core/vendor/guzzlehttp/promises/tests/functionsTest.php b/core/vendor/guzzlehttp/promises/tests/functionsTest.php
new file mode 100644
index 0000000..8e6fcf4
--- /dev/null
+++ b/core/vendor/guzzlehttp/promises/tests/functionsTest.php
@@ -0,0 +1,694 @@
+<?php
+namespace GuzzleHttp\Promise\Tests;
+
+use GuzzleHttp\Promise as P;
+use GuzzleHttp\Promise\FulfilledPromise;
+use GuzzleHttp\Promise\Promise;
+use GuzzleHttp\Promise\RejectedPromise;
+
+class FunctionsTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCreatesPromiseForValue()
+    {
+        $p = \GuzzleHttp\Promise\promise_for('foo');
+        $this->assertInstanceOf('GuzzleHttp\Promise\FulfilledPromise', $p);
+    }
+
+    public function testReturnsPromiseForPromise()
+    {
+        $p = new Promise();
+        $this->assertSame($p, \GuzzleHttp\Promise\promise_for($p));
+    }
+
+    public function testReturnsPromiseForThennable()
+    {
+        $p = new Thennable();
+        $wrapped = \GuzzleHttp\Promise\promise_for($p);
+        $this->assertNotSame($p, $wrapped);
+        $this->assertInstanceOf('GuzzleHttp\Promise\PromiseInterface', $wrapped);
+        $p->resolve('foo');
+        P\queue()->run();
+        $this->assertEquals('foo', $wrapped->wait());
+    }
+
+    public function testReturnsRejection()
+    {
+        $p = \GuzzleHttp\Promise\rejection_for('fail');
+        $this->assertInstanceOf('GuzzleHttp\Promise\RejectedPromise', $p);
+        $this->assertEquals('fail', $this->readAttribute($p, 'reason'));
+    }
+
+    public function testReturnsPromisesAsIsInRejectionFor()
+    {
+        $a = new Promise();
+        $b = \GuzzleHttp\Promise\rejection_for($a);
+        $this->assertSame($a, $b);
+    }
+
+    public function testWaitsOnAllPromisesIntoArray()
+    {
+        $e = new \Exception();
+        $a = new Promise(function () use (&$a) { $a->resolve('a'); });
+        $b = new Promise(function () use (&$b) { $b->reject('b'); });
+        $c = new Promise(function () use (&$c, $e) { $c->reject($e); });
+        $results = \GuzzleHttp\Promise\inspect_all([$a, $b, $c]);
+        $this->assertEquals([
+            ['state' => 'fulfilled', 'value' => 'a'],
+            ['state' => 'rejected', 'reason' => 'b'],
+            ['state' => 'rejected', 'reason' => $e]
+        ], $results);
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Promise\RejectionException
+     */
+    public function testUnwrapsPromisesWithNoDefaultAndFailure()
+    {
+        $promises = [new FulfilledPromise('a'), new Promise()];
+        \GuzzleHttp\Promise\unwrap($promises);
+    }
+
+    public function testUnwrapsPromisesWithNoDefault()
+    {
+        $promises = [new FulfilledPromise('a')];
+        $this->assertEquals(['a'], \GuzzleHttp\Promise\unwrap($promises));
+    }
+
+    public function testUnwrapsPromisesWithKeys()
+    {
+        $promises = [
+            'foo' => new FulfilledPromise('a'),
+            'bar' => new FulfilledPromise('b'),
+        ];
+        $this->assertEquals([
+            'foo' => 'a',
+            'bar' => 'b'
+        ], \GuzzleHttp\Promise\unwrap($promises));
+    }
+
+    public function testAllAggregatesSortedArray()
+    {
+        $a = new Promise();
+        $b = new Promise();
+        $c = new Promise();
+        $d = \GuzzleHttp\Promise\all([$a, $b, $c]);
+        $b->resolve('b');
+        $a->resolve('a');
+        $c->resolve('c');
+        $d->then(
+            function ($value) use (&$result) { $result = $value; },
+            function ($reason) use (&$result) { $result = $reason; }
+        );
+        P\queue()->run();
+        $this->assertEquals(['a', 'b', 'c'], $result);
+    }
+
+    public function testAllThrowsWhenAnyRejected()
+    {
+        $a = new Promise();
+        $b = new Promise();
+        $c = new Promise();
+        $d = \GuzzleHttp\Promise\all([$a, $b, $c]);
+        $b->resolve('b');
+        $a->reject('fail');
+        $c->resolve('c');
+        $d->then(
+            function ($value) use (&$result) { $result = $value; },
+            function ($reason) use (&$result) { $result = $reason; }
+        );
+        P\queue()->run();
+        $this->assertEquals('fail', $result);
+    }
+
+    public function testSomeAggregatesSortedArrayWithMax()
+    {
+        $a = new Promise();
+        $b = new Promise();
+        $c = new Promise();
+        $d = \GuzzleHttp\Promise\some(2, [$a, $b, $c]);
+        $b->resolve('b');
+        $c->resolve('c');
+        $a->resolve('a');
+        $d->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals(['b', 'c'], $result);
+    }
+
+    public function testSomeRejectsWhenTooManyRejections()
+    {
+        $a = new Promise();
+        $b = new Promise();
+        $d = \GuzzleHttp\Promise\some(2, [$a, $b]);
+        $a->reject('bad');
+        $b->resolve('good');
+        P\queue()->run();
+        $this->assertEquals($a::REJECTED, $d->getState());
+        $d->then(null, function ($reason) use (&$called) {
+            $called = $reason;
+        });
+        P\queue()->run();
+        $this->assertInstanceOf('GuzzleHttp\Promise\AggregateException', $called);
+        $this->assertContains('bad', $called->getReason());
+    }
+
+    public function testCanWaitUntilSomeCountIsSatisfied()
+    {
+        $a = new Promise(function () use (&$a) { $a->resolve('a'); });
+        $b = new Promise(function () use (&$b) { $b->resolve('b'); });
+        $c = new Promise(function () use (&$c) { $c->resolve('c'); });
+        $d = \GuzzleHttp\Promise\some(2, [$a, $b, $c]);
+        $this->assertEquals(['a', 'b'], $d->wait());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Promise\AggregateException
+     * @expectedExceptionMessage Not enough promises to fulfill count
+     */
+    public function testThrowsIfImpossibleToWaitForSomeCount()
+    {
+        $a = new Promise(function () use (&$a) { $a->resolve('a'); });
+        $d = \GuzzleHttp\Promise\some(2, [$a]);
+        $d->wait();
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Promise\AggregateException
+     * @expectedExceptionMessage Not enough promises to fulfill count
+     */
+    public function testThrowsIfResolvedWithoutCountTotalResults()
+    {
+        $a = new Promise();
+        $b = new Promise();
+        $d = \GuzzleHttp\Promise\some(3, [$a, $b]);
+        $a->resolve('a');
+        $b->resolve('b');
+        $d->wait();
+    }
+
+    public function testAnyReturnsFirstMatch()
+    {
+        $a = new Promise();
+        $b = new Promise();
+        $c = \GuzzleHttp\Promise\any([$a, $b]);
+        $b->resolve('b');
+        $a->resolve('a');
+        //P\queue()->run();
+        //$this->assertEquals('fulfilled', $c->getState());
+        $c->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals('b', $result);
+    }
+
+    public function testSettleFulfillsWithFulfilledAndRejected()
+    {
+        $a = new Promise();
+        $b = new Promise();
+        $c = new Promise();
+        $d = \GuzzleHttp\Promise\settle([$a, $b, $c]);
+        $b->resolve('b');
+        $c->resolve('c');
+        $a->reject('a');
+        P\queue()->run();
+        $this->assertEquals('fulfilled', $d->getState());
+        $d->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals([
+            ['state' => 'rejected', 'reason' => 'a'],
+            ['state' => 'fulfilled', 'value' => 'b'],
+            ['state' => 'fulfilled', 'value' => 'c']
+        ], $result);
+    }
+
+    public function testCanInspectFulfilledPromise()
+    {
+        $p = new FulfilledPromise('foo');
+        $this->assertEquals([
+            'state' => 'fulfilled',
+            'value' => 'foo'
+        ], \GuzzleHttp\Promise\inspect($p));
+    }
+
+    public function testCanInspectRejectedPromise()
+    {
+        $p = new RejectedPromise('foo');
+        $this->assertEquals([
+            'state'  => 'rejected',
+            'reason' => 'foo'
+        ], \GuzzleHttp\Promise\inspect($p));
+    }
+
+    public function testCanInspectRejectedPromiseWithNormalException()
+    {
+        $e = new \Exception('foo');
+        $p = new RejectedPromise($e);
+        $this->assertEquals([
+            'state'  => 'rejected',
+            'reason' => $e
+        ], \GuzzleHttp\Promise\inspect($p));
+    }
+
+    public function testCallsEachLimit()
+    {
+        $p = new Promise();
+        $aggregate = \GuzzleHttp\Promise\each_limit($p, 2);
+        $p->resolve('a');
+        P\queue()->run();
+        $this->assertEquals($p::FULFILLED, $aggregate->getState());
+    }
+
+    public function testEachLimitAllRejectsOnFailure()
+    {
+        $p = [new FulfilledPromise('a'), new RejectedPromise('b')];
+        $aggregate = \GuzzleHttp\Promise\each_limit_all($p, 2);
+        P\queue()->run();
+        $this->assertEquals(P\PromiseInterface::REJECTED, $aggregate->getState());
+        $result = \GuzzleHttp\Promise\inspect($aggregate);
+        $this->assertEquals('b', $result['reason']);
+    }
+
+    public function testIterForReturnsIterator()
+    {
+        $iter = new \ArrayIterator();
+        $this->assertSame($iter, \GuzzleHttp\Promise\iter_for($iter));
+    }
+
+    public function testKnowsIfFulfilled()
+    {
+        $p = new FulfilledPromise(null);
+        $this->assertTrue(P\is_fulfilled($p));
+        $this->assertFalse(P\is_rejected($p));
+    }
+
+    public function testKnowsIfRejected()
+    {
+        $p = new RejectedPromise(null);
+        $this->assertTrue(P\is_rejected($p));
+        $this->assertFalse(P\is_fulfilled($p));
+    }
+
+    public function testKnowsIfSettled()
+    {
+        $p = new RejectedPromise(null);
+        $this->assertTrue(P\is_settled($p));
+        $p = new Promise();
+        $this->assertFalse(P\is_settled($p));
+    }
+
+    public function testReturnsTrampoline()
+    {
+        $this->assertInstanceOf('GuzzleHttp\Promise\TaskQueue', P\queue());
+        $this->assertSame(P\queue(), P\queue());
+    }
+
+    public function testCanScheduleThunk()
+    {
+        $tramp = P\queue();
+        $promise = P\task(function () { return 'Hi!'; });
+        $c = null;
+        $promise->then(function ($v) use (&$c) { $c = $v; });
+        $this->assertNull($c);
+        $tramp->run();
+        $this->assertEquals('Hi!', $c);
+    }
+
+    public function testCanScheduleThunkWithRejection()
+    {
+        $tramp = P\queue();
+        $promise = P\task(function () { throw new \Exception('Hi!'); });
+        $c = null;
+        $promise->otherwise(function ($v) use (&$c) { $c = $v; });
+        $this->assertNull($c);
+        $tramp->run();
+        $this->assertEquals('Hi!', $c->getMessage());
+    }
+
+    public function testCanScheduleThunkWithWait()
+    {
+        $tramp = P\queue();
+        $promise = P\task(function () { return 'a'; });
+        $this->assertEquals('a', $promise->wait());
+        $tramp->run();
+    }
+
+    public function testYieldsFromCoroutine()
+    {
+        $promise = P\coroutine(function () {
+            $value = (yield new P\FulfilledPromise('a'));
+            yield  $value . 'b';
+        });
+        $promise->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals('ab', $result);
+    }
+
+    public function testCanCatchExceptionsInCoroutine()
+    {
+        $promise = P\coroutine(function () {
+            try {
+                yield new P\RejectedPromise('a');
+                $this->fail('Should have thrown into the coroutine!');
+            } catch (P\RejectionException $e) {
+                $value = (yield new P\FulfilledPromise($e->getReason()));
+                yield  $value . 'b';
+            }
+        });
+        $promise->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals(P\PromiseInterface::FULFILLED, $promise->getState());
+        $this->assertEquals('ab', $result);
+    }
+
+    public function testRejectsParentExceptionWhenException()
+    {
+        $promise = P\coroutine(function () {
+            yield new P\FulfilledPromise(0);
+            throw new \Exception('a');
+        });
+        $promise->then(
+            function () { $this->fail(); },
+            function ($reason) use (&$result) { $result = $reason; }
+        );
+        P\queue()->run();
+        $this->assertInstanceOf('Exception', $result);
+        $this->assertEquals('a', $result->getMessage());
+    }
+
+    public function testCanRejectFromRejectionCallback()
+    {
+        $promise = P\coroutine(function () {
+            yield new P\FulfilledPromise(0);
+            yield new P\RejectedPromise('no!');
+        });
+        $promise->then(
+            function () { $this->fail(); },
+            function ($reason) use (&$result) { $result = $reason; }
+        );
+        P\queue()->run();
+        $this->assertInstanceOf('GuzzleHttp\Promise\RejectionException', $result);
+        $this->assertEquals('no!', $result->getReason());
+    }
+
+    public function testCanAsyncReject()
+    {
+        $rej = new P\Promise();
+        $promise = P\coroutine(function () use ($rej) {
+            yield new P\FulfilledPromise(0);
+            yield $rej;
+        });
+        $promise->then(
+            function () { $this->fail(); },
+            function ($reason) use (&$result) { $result = $reason; }
+        );
+        $rej->reject('no!');
+        P\queue()->run();
+        $this->assertInstanceOf('GuzzleHttp\Promise\RejectionException', $result);
+        $this->assertEquals('no!', $result->getReason());
+    }
+
+    public function testCanCatchAndThrowOtherException()
+    {
+        $promise = P\coroutine(function () {
+            try {
+                yield new P\RejectedPromise('a');
+                $this->fail('Should have thrown into the coroutine!');
+            } catch (P\RejectionException $e) {
+                throw new \Exception('foo');
+            }
+        });
+        $promise->otherwise(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals(P\PromiseInterface::REJECTED, $promise->getState());
+        $this->assertContains('foo', $result->getMessage());
+    }
+
+    public function testCanCatchAndYieldOtherException()
+    {
+        $promise = P\coroutine(function () {
+            try {
+                yield new P\RejectedPromise('a');
+                $this->fail('Should have thrown into the coroutine!');
+            } catch (P\RejectionException $e) {
+                yield new P\RejectedPromise('foo');
+            }
+        });
+        $promise->otherwise(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals(P\PromiseInterface::REJECTED, $promise->getState());
+        $this->assertContains('foo', $result->getMessage());
+    }
+
+    public function createLotsOfSynchronousPromise()
+    {
+        return P\coroutine(function () {
+            $value = 0;
+            for ($i = 0; $i < 1000; $i++) {
+                $value = (yield new P\FulfilledPromise($i));
+            }
+            yield $value;
+        });
+    }
+
+    public function testLotsOfSynchronousDoesNotBlowStack()
+    {
+        $promise = $this->createLotsOfSynchronousPromise();
+        $promise->then(function ($v) use (&$r) { $r = $v; });
+        P\queue()->run();
+        $this->assertEquals(999, $r);
+    }
+
+    public function testLotsOfSynchronousWaitDoesNotBlowStack()
+    {
+        $promise = $this->createLotsOfSynchronousPromise();
+        $promise->then(function ($v) use (&$r) { $r = $v; });
+        $this->assertEquals(999, $promise->wait());
+        $this->assertEquals(999, $r);
+    }
+
+    private function createLotsOfFlappingPromise()
+    {
+        return P\coroutine(function () {
+            $value = 0;
+            for ($i = 0; $i < 1000; $i++) {
+                try {
+                    if ($i % 2) {
+                        $value = (yield new P\FulfilledPromise($i));
+                    } else {
+                        $value = (yield new P\RejectedPromise($i));
+                    }
+                } catch (\Exception $e) {
+                    $value = (yield new P\FulfilledPromise($i));
+                }
+            }
+            yield $value;
+        });
+    }
+
+    public function testLotsOfTryCatchingDoesNotBlowStack()
+    {
+        $promise = $this->createLotsOfFlappingPromise();
+        $promise->then(function ($v) use (&$r) { $r = $v; });
+        P\queue()->run();
+        $this->assertEquals(999, $r);
+    }
+
+    public function testLotsOfTryCatchingWaitingDoesNotBlowStack()
+    {
+        $promise = $this->createLotsOfFlappingPromise();
+        $promise->then(function ($v) use (&$r) { $r = $v; });
+        $this->assertEquals(999, $promise->wait());
+        $this->assertEquals(999, $r);
+    }
+
+    public function testAsyncPromisesWithCorrectlyYieldedValues()
+    {
+        $promises = [
+            new P\Promise(),
+            new P\Promise(),
+            new P\Promise()
+        ];
+
+        $promise = P\coroutine(function () use ($promises) {
+            $value = null;
+            $this->assertEquals('skip', (yield new P\FulfilledPromise('skip')));
+            foreach ($promises as $idx => $p) {
+                $value = (yield $p);
+                $this->assertEquals($value, $idx);
+                $this->assertEquals('skip', (yield new P\FulfilledPromise('skip')));
+            }
+            $this->assertEquals('skip', (yield new P\FulfilledPromise('skip')));
+            yield $value;
+        });
+
+        $promises[0]->resolve(0);
+        $promises[1]->resolve(1);
+        $promises[2]->resolve(2);
+
+        $promise->then(function ($v) use (&$r) { $r = $v; });
+        P\queue()->run();
+        $this->assertEquals(2, $r);
+    }
+
+    public function testYieldFinalWaitablePromise()
+    {
+        $p1 = new P\Promise(function () use (&$p1) {
+            $p1->resolve('skip me');
+        });
+        $p2 = new P\Promise(function () use (&$p2) {
+            $p2->resolve('hello!');
+        });
+        $co = P\coroutine(function() use ($p1, $p2) {
+            yield $p1;
+            yield $p2;
+        });
+        P\queue()->run();
+        $this->assertEquals('hello!', $co->wait());
+    }
+
+    public function testCanYieldFinalPendingPromise()
+    {
+        $p1 = new P\Promise();
+        $p2 = new P\Promise();
+        $co = P\coroutine(function() use ($p1, $p2) {
+            yield $p1;
+            yield $p2;
+        });
+        $p1->resolve('a');
+        $p2->resolve('b');
+        $co->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals('b', $result);
+    }
+
+    public function testCanNestYieldsAndFailures()
+    {
+        $p1 = new P\Promise();
+        $p2 = new P\Promise();
+        $p3 = new P\Promise();
+        $p4 = new P\Promise();
+        $p5 = new P\Promise();
+        $co = P\coroutine(function() use ($p1, $p2, $p3, $p4, $p5) {
+            try {
+                yield $p1;
+            } catch (\Exception $e) {
+                yield $p2;
+                try {
+                    yield $p3;
+                    yield $p4;
+                } catch (\Exception $e) {
+                    yield $p5;
+                }
+            }
+        });
+        $p1->reject('a');
+        $p2->resolve('b');
+        $p3->resolve('c');
+        $p4->reject('d');
+        $p5->resolve('e');
+        $co->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals('e', $result);
+    }
+
+    public function testCanYieldErrorsAndSuccessesWithoutRecursion()
+    {
+        $promises = [];
+        for ($i = 0; $i < 20; $i++) {
+            $promises[] = new P\Promise();
+        }
+
+        $co = P\coroutine(function() use ($promises) {
+            for ($i = 0; $i < 20; $i += 4) {
+                try {
+                    yield $promises[$i];
+                    yield $promises[$i + 1];
+                } catch (\Exception $e) {
+                    yield $promises[$i + 2];
+                    yield $promises[$i + 3];
+                }
+            }
+        });
+
+        for ($i = 0; $i < 20; $i += 4) {
+            $promises[$i]->resolve($i);
+            $promises[$i + 1]->reject($i + 1);
+            $promises[$i + 2]->resolve($i + 2);
+            $promises[$i + 3]->resolve($i + 3);
+        }
+
+        $co->then(function ($value) use (&$result) { $result = $value; });
+        P\queue()->run();
+        $this->assertEquals('19', $result);
+    }
+
+    public function testCanWaitOnPromiseAfterFulfilled()
+    {
+        $f = function () {
+            static $i = 0;
+            $i++;
+            return $p = new P\Promise(function () use (&$p, $i) {
+                $p->resolve($i . '-bar');
+            });
+        };
+
+        $promises = [];
+        for ($i = 0; $i < 20; $i++) {
+            $promises[] = $f();
+        }
+
+        $p = P\coroutine(function () use ($promises) {
+            yield new P\FulfilledPromise('foo!');
+            foreach ($promises as $promise) {
+                yield $promise;
+            }
+        });
+
+        $this->assertEquals('20-bar', $p->wait());
+    }
+
+    public function testCanWaitOnErroredPromises()
+    {
+        $p1 = new P\Promise(function () use (&$p1) { $p1->reject('a'); });
+        $p2 = new P\Promise(function () use (&$p2) { $p2->resolve('b'); });
+        $p3 = new P\Promise(function () use (&$p3) { $p3->resolve('c'); });
+        $p4 = new P\Promise(function () use (&$p4) { $p4->reject('d'); });
+        $p5 = new P\Promise(function () use (&$p5) { $p5->resolve('e'); });
+        $p6 = new P\Promise(function () use (&$p6) { $p6->reject('f'); });
+
+        $co = P\coroutine(function() use ($p1, $p2, $p3, $p4, $p5, $p6) {
+            try {
+                yield $p1;
+            } catch (\Exception $e) {
+                yield $p2;
+                try {
+                    yield $p3;
+                    yield $p4;
+                } catch (\Exception $e) {
+                    yield $p5;
+                    yield $p6;
+                }
+            }
+        });
+
+        $res = P\inspect($co);
+        $this->assertEquals('f', $res['reason']);
+    }
+
+    public function testCoroutineOtherwiseIntegrationTest()
+    {
+        $a = new P\Promise();
+        $b = new P\Promise();
+        $promise = P\coroutine(function () use ($a, $b) {
+            // Execute the pool of commands concurrently, and process errors.
+            yield $a;
+            yield $b;
+        })->otherwise(function (\Exception $e) {
+            // Throw errors from the operations as a specific Multipart error.
+            throw new \OutOfBoundsException('a', 0, $e);
+        });
+        $a->resolve('a');
+        $b->reject('b');
+        $reason = P\inspect($promise)['reason'];
+        $this->assertInstanceOf('OutOfBoundsException', $reason);
+        $this->assertInstanceOf('GuzzleHttp\Promise\RejectionException', $reason->getPrevious());
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/.gitignore b/core/vendor/guzzlehttp/psr7/.gitignore
new file mode 100644
index 0000000..83ec41e
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/.gitignore
@@ -0,0 +1,11 @@
+phpunit.xml
+composer.phar
+composer.lock
+composer-test.lock
+vendor/
+build/artifacts/
+artifacts/
+docs/_build
+docs/*.pyc
+.idea
+.DS_STORE
diff --git a/core/vendor/guzzlehttp/psr7/.travis.yml b/core/vendor/guzzlehttp/psr7/.travis.yml
new file mode 100644
index 0000000..b88f8da
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/.travis.yml
@@ -0,0 +1,20 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - hhvm
+
+sudo: false
+
+install:
+  - travis_retry composer install --no-interaction --prefer-source
+
+script: make test
+
+matrix:
+  allow_failures:
+    - php: hhvm
+  fast_finish: true
diff --git a/core/vendor/guzzlehttp/psr7/CHANGELOG.md b/core/vendor/guzzlehttp/psr7/CHANGELOG.md
new file mode 100644
index 0000000..8f6d8b2
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/CHANGELOG.md
@@ -0,0 +1,19 @@
+# CHANGELOG
+
+## 1.1.0 - 2015-06-24
+
+* URIs can now be relative.
+* `multipart/form-data` headers are now overridden case-insensitively.
+* URI paths no longer encode the following characters because they are allowed
+  in URIs: "(", ")", "*", "!", "'"
+* A port is no longer added to a URI when the scheme is missing and no port is
+  present.
+
+## 1.0.0 - 2015-05-19
+
+Initial release.
+
+Currently unsupported:
+
+- `Psr\Http\Message\ServerRequestInterface`
+- `Psr\Http\Message\UploadedFileInterface`
diff --git a/core/vendor/guzzlehttp/ringphp/LICENSE b/core/vendor/guzzlehttp/psr7/LICENSE
similarity index 94%
rename from core/vendor/guzzlehttp/ringphp/LICENSE
rename to core/vendor/guzzlehttp/psr7/LICENSE
index 71d3b78..581d95f 100644
--- a/core/vendor/guzzlehttp/ringphp/LICENSE
+++ b/core/vendor/guzzlehttp/psr7/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
+Copyright (c) 2015 Michael Dowling, https://github.com/mtdowling <mtdowling@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
diff --git a/core/vendor/guzzlehttp/psr7/Makefile b/core/vendor/guzzlehttp/psr7/Makefile
new file mode 100644
index 0000000..9c21096
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/Makefile
@@ -0,0 +1,13 @@
+all: clean test
+
+test:
+	vendor/bin/phpunit $(TEST)
+
+coverage:
+	vendor/bin/phpunit --coverage-html=artifacts/coverage $(TEST)
+
+view-coverage:
+	open artifacts/coverage/index.html
+
+clean:
+	rm -rf artifacts/*
diff --git a/core/vendor/guzzlehttp/psr7/README.md b/core/vendor/guzzlehttp/psr7/README.md
new file mode 100644
index 0000000..0b30d5a
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/README.md
@@ -0,0 +1,580 @@
+# PSR-7 Message Implementation
+
+This repository contains a partial [PSR-7](http://www.php-fig.org/psr/psr-7/)
+message implementation, several stream decorators, and some helpful
+functionality like query string parsing.  Currently missing
+ServerRequestInterface and UploadedFileInterface; a pull request for these features is welcome.
+
+
+# Stream implementation
+
+This package comes with a number of stream implementations and stream
+decorators.
+
+
+## AppendStream
+
+`GuzzleHttp\Psr7\AppendStream`
+
+Reads from multiple streams, one after the other.
+
+```php
+use GuzzleHttp\Psr7;
+
+$a = Psr7\stream_for('abc, ');
+$b = Psr7\stream_for('123.');
+$composed = new Psr7\AppendStream([$a, $b]);
+
+$composed->addStream(Psr7\stream_for(' Above all listen to me').
+
+echo $composed(); // abc, 123. Above all listen to me.
+```
+
+
+## BufferStream
+
+`GuzzleHttp\Psr7\BufferStream`
+
+Provides a buffer stream that can be written to to fill a buffer, and read
+from to remove bytes from the buffer.
+
+This stream returns a "hwm" metadata value that tells upstream consumers
+what the configured high water mark of the stream is, or the maximum
+preferred size of the buffer.
+
+```php
+use GuzzleHttp\Psr7;
+
+// When more than 1024 bytes are in the buffer, it will begin returning
+// false to writes. This is an indication that writers should slow down.
+$buffer = new Psr7\BufferStream(1024);
+```
+
+
+## CachingStream
+
+The CachingStream is used to allow seeking over previously read bytes on
+non-seekable streams. This can be useful when transferring a non-seekable
+entity body fails due to needing to rewind the stream (for example, resulting
+from a redirect). Data that is read from the remote stream will be buffered in
+a PHP temp stream so that previously read bytes are cached first in memory,
+then on disk.
+
+```php
+use GuzzleHttp\Psr7;
+
+$original = Psr7\stream_for(fopen('http://www.google.com', 'r'));
+$stream = new Psr7\CachingStream($original);
+
+$stream->read(1024);
+echo $stream->tell();
+// 1024
+
+$stream->seek(0);
+echo $stream->tell();
+// 0
+```
+
+
+## DroppingStream
+
+`GuzzleHttp\Psr7\DroppingStream`
+
+Stream decorator that begins dropping data once the size of the underlying
+stream becomes too full.
+
+```php
+use GuzzleHttp\Psr7;
+
+// Create an empty stream
+$stream = Psr7\stream_for();
+
+// Start dropping data when the stream has more than 10 bytes
+$dropping = new Psr7\DroppingStream($stream, 10);
+
+$stream->write('01234567890123456789');
+echo $stream; // 0123456789
+```
+
+
+## FnStream
+
+`GuzzleHttp\Psr7\FnStream`
+
+Compose stream implementations based on a hash of functions.
+
+Allows for easy testing and extension of a provided stream without needing to
+to create a concrete class for a simple extension point.
+
+```php
+
+use GuzzleHttp\Psr7;
+
+$stream = Psr7\stream_for('hi');
+$fnStream = Psr7\FnStream::decorate($stream, [
+    'rewind' => function () use ($stream) {
+        echo 'About to rewind - ';
+        $stream->rewind();
+        echo 'rewound!';
+    }
+]);
+
+$fnStream->rewind();
+// Outputs: About to rewind - rewound!
+```
+
+
+## InflateStream
+
+`GuzzleHttp\Psr7\InflateStream`
+
+Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
+
+This stream decorator skips the first 10 bytes of the given stream to remove
+the gzip header, converts the provided stream to a PHP stream resource,
+then appends the zlib.inflate filter. The stream is then converted back
+to a Guzzle stream resource to be used as a Guzzle stream.
+
+
+## LazyOpenStream
+
+`GuzzleHttp\Psr7\LazyOpenStream`
+
+Lazily reads or writes to a file that is opened only after an IO operation
+take place on the stream.
+
+```php
+use GuzzleHttp\Psr7;
+
+$stream = new Psr7\LazyOpenStream('/path/to/file', 'r');
+// The file has not yet been opened...
+
+echo $stream->read(10);
+// The file is opened and read from only when needed.
+```
+
+
+## LimitStream
+
+`GuzzleHttp\Psr7\LimitStream`
+
+LimitStream can be used to read a subset or slice of an existing stream object.
+This can be useful for breaking a large file into smaller pieces to be sent in
+chunks (e.g. Amazon S3's multipart upload API).
+
+```php
+use GuzzleHttp\Psr7;
+
+$original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+'));
+echo $original->getSize();
+// >>> 1048576
+
+// Limit the size of the body to 1024 bytes and start reading from byte 2048
+$stream = new Psr7\LimitStream($original, 1024, 2048);
+echo $stream->getSize();
+// >>> 1024
+echo $stream->tell();
+// >>> 0
+```
+
+
+## MultipartStream
+
+`GuzzleHttp\Psr7\MultipartStream`
+
+Stream that when read returns bytes for a streaming multipart or
+multipart/form-data stream.
+
+
+## NoSeekStream
+
+`GuzzleHttp\Psr7\NoSeekStream`
+
+NoSeekStream wraps a stream and does not allow seeking.
+
+```php
+use GuzzleHttp\Psr7;
+
+$original = Psr7\stream_for('foo');
+$noSeek = new Psr7\NoSeekStream($original);
+
+echo $noSeek->read(3);
+// foo
+var_export($noSeek->isSeekable());
+// false
+$noSeek->seek(0);
+var_export($noSeek->read(3));
+// NULL
+```
+
+
+## PumpStream
+
+`GuzzleHttp\Psr7\PumpStream`
+
+Provides a read only stream that pumps data from a PHP callable.
+
+When invoking the provided callable, the PumpStream will pass the amount of
+data requested to read to the callable. The callable can choose to ignore
+this value and return fewer or more bytes than requested. Any extra data
+returned by the provided callable is buffered internally until drained using
+the read() function of the PumpStream. The provided callable MUST return
+false when there is no more data to read.
+
+
+## Implementing stream decorators
+
+Creating a stream decorator is very easy thanks to the
+`GuzzleHttp\Psr7\StreamDecoratorTrait`. This trait provides methods that
+implement `Psr\Http\Message\StreamInterface` by proxying to an underlying
+stream. Just `use` the `StreamDecoratorTrait` and implement your custom
+methods.
+
+For example, let's say we wanted to call a specific function each time the last
+byte is read from a stream. This could be implemented by overriding the
+`read()` method.
+
+```php
+use Psr\Http\Message\StreamInterface;
+use GuzzleHttp\Psr7\StreamDecoratorTrait;
+
+class EofCallbackStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    private $callback;
+
+    public function __construct(StreamInterface $stream, callable $cb)
+    {
+        $this->stream = $stream;
+        $this->callback = $cb;
+    }
+
+    public function read($length)
+    {
+        $result = $this->stream->read($length);
+
+        // Invoke the callback when EOF is hit.
+        if ($this->eof()) {
+            call_user_func($this->callback);
+        }
+
+        return $result;
+    }
+}
+```
+
+This decorator could be added to any existing stream and used like so:
+
+```php
+use GuzzleHttp\Psr7;
+
+$original = Psr7\stream_for('foo');
+
+$eofStream = new EofCallbackStream($original, function () {
+    echo 'EOF!';
+});
+
+$eofStream->read(2);
+$eofStream->read(1);
+// echoes "EOF!"
+$eofStream->seek(0);
+$eofStream->read(3);
+// echoes "EOF!"
+```
+
+
+## PHP StreamWrapper
+
+You can use the `GuzzleHttp\Psr7\StreamWrapper` class if you need to use a
+PSR-7 stream as a PHP stream resource.
+
+Use the `GuzzleHttp\Psr7\StreamWrapper::getResource()` method to create a PHP
+stream from a PSR-7 stream.
+
+```php
+use GuzzleHttp\Psr7\StreamWrapper;
+
+$stream = GuzzleHttp\Psr7\stream_for('hello!');
+$resource = StreamWrapper::getResource($stream);
+echo fread($resource, 6); // outputs hello!
+```
+
+
+# Function API
+
+There are various functions available under the `GuzzleHttp\Psr7` namespace.
+
+
+## `function str`
+
+`function str(MessageInterface $message)`
+
+Returns the string representation of an HTTP message.
+
+```php
+$request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com');
+echo GuzzleHttp\Psr7\str($request);
+```
+
+
+## `function uri_for`
+
+`function uri_for($uri)`
+
+This function accepts a string or `Psr\Http\Message\UriInterface` and returns a
+UriInterface for the given value. If the value is already a `UriInterface`, it
+is returned as-is.
+
+```php
+$uri = GuzzleHttp\Psr7\uri_for('http://example.com');
+assert($uri === GuzzleHttp\Psr7\uri_for($uri));
+```
+
+
+## `function stream_for`
+
+`function stream_for($resource = '', array $options = [])`
+
+Create a new stream based on the input type.
+
+Options is an associative array that can contain the following keys:
+
+* - metadata: Array of custom metadata.
+* - size: Size of the stream.
+
+This method accepts the following `$resource` types:
+
+- `Psr\Http\Message\StreamInterface`: Returns the value as-is.
+- `string`: Creates a stream object that uses the given string as the contents.
+- `resource`: Creates a stream object that wraps the given PHP stream resource.
+- `Iterator`: If the provided value implements `Iterator`, then a read-only
+  stream object will be created that wraps the given iterable. Each time the
+  stream is read from, data from the iterator will fill a buffer and will be
+  continuously called until the buffer is equal to the requested read size.
+  Subsequent read calls will first read from the buffer and then call `next`
+  on the underlying iterator until it is exhausted.
+- `object` with `__toString()`: If the object has the `__toString()` method,
+  the object will be cast to a string and then a stream will be returned that
+  uses the string value.
+- `NULL`: When `null` is passed, an empty stream object is returned.
+- `callable` When a callable is passed, a read-only stream object will be
+  created that invokes the given callable. The callable is invoked with the
+  number of suggested bytes to read. The callable can return any number of
+  bytes, but MUST return `false` when there is no more data to return. The
+  stream object that wraps the callable will invoke the callable until the
+  number of requested bytes are available. Any additional bytes will be
+  buffered and used in subsequent reads.
+
+```php
+$stream = GuzzleHttp\Psr7\stream_for('foo');
+$stream = GuzzleHttp\Psr7\stream_for(fopen('/path/to/file', 'r'));
+
+$generator function ($bytes) {
+    for ($i = 0; $i < $bytes; $i++) {
+        yield ' ';
+    }
+}
+
+$stream = GuzzleHttp\Psr7\stream_for($generator(100));
+```
+
+
+## `function parse_header`
+
+`function parse_header($header)`
+
+Parse an array of header values containing ";" separated data into an array of
+associative arrays representing the header key value pair data of the header.
+When a parameter does not contain a value, but just contains a key, this
+function will inject a key with a '' string value.
+
+
+## `function normalize_header`
+
+`function normalize_header($header)`
+
+Converts an array of header values that may contain comma separated headers
+into an array of headers with no comma separated values.
+
+
+## `function modify_request`
+
+`function modify_request(RequestInterface $request, array $changes)`
+
+Clone and modify a request with the given changes. This method is useful for
+reducing the number of clones needed to mutate a message.
+
+The changes can be one of:
+
+- method: (string) Changes the HTTP method.
+- set_headers: (array) Sets the given headers.
+- remove_headers: (array) Remove the given headers.
+- body: (mixed) Sets the given body.
+- uri: (UriInterface) Set the URI.
+- query: (string) Set the query string value of the URI.
+- version: (string) Set the protocol version.
+
+
+## `function rewind_body`
+
+`function rewind_body(MessageInterface $message)`
+
+Attempts to rewind a message body and throws an exception on failure. The body
+of the message will only be rewound if a call to `tell()` returns a value other
+than `0`.
+
+
+## `function try_fopen`
+
+`function try_fopen($filename, $mode)`
+
+Safely opens a PHP stream resource using a filename.
+
+When fopen fails, PHP normally raises a warning. This function adds an error
+handler that checks for errors and throws an exception instead.
+
+
+## `function copy_to_string`
+
+`function copy_to_string(StreamInterface $stream, $maxLen = -1)`
+
+Copy the contents of a stream into a string until the given number of bytes
+have been read.
+
+
+## `function copy_to_stream`
+
+`function copy_to_stream(StreamInterface $source, StreamInterface $dest, $maxLen = -1)`
+
+Copy the contents of a stream into another stream until the given number of
+bytes have been read.
+
+
+## `function hash`
+
+`function hash(StreamInterface $stream, $algo, $rawOutput = false)`
+
+Calculate a hash of a Stream. This method reads the entire stream to calculate
+a rolling hash (based on PHP's hash_init functions).
+
+
+## `function readline`
+
+`function readline(StreamInterface $stream, $maxLength = null)`
+
+Read a line from the stream up to the maximum allowed buffer length.
+
+
+## `function parse_request`
+
+`function parse_request($message)`
+
+Parses a request message string into a request object.
+
+
+## `function parse_response`
+
+`function parse_response($message)`
+
+Parses a response message string into a response object.
+
+
+## `function parse_query`
+
+`function parse_query($str, $urlEncoding = true)`
+
+Parse a query string into an associative array.
+
+If multiple values are found for the same key, the value of that key value pair
+will become an array. This function does not parse nested PHP style arrays into
+an associative array (e.g., `foo[a]=1&foo[b]=2` will be parsed into
+`['foo[a]' => '1', 'foo[b]' => '2']`).
+
+
+## `function build_query`
+
+`function build_query(array $params, $encoding = PHP_QUERY_RFC3986)`
+
+Build a query string from an array of key value pairs.
+
+This function can use the return value of parseQuery() to build a query string.
+This function does not modify the provided keys when an array is encountered
+(like http_build_query would).
+
+
+## `function mimetype_from_filename`
+
+`function mimetype_from_filename($filename)`
+
+Determines the mimetype of a file by looking at its extension.
+
+
+## `function mimetype_from_extension`
+
+`function mimetype_from_extension($extension)`
+
+Maps a file extensions to a mimetype.
+
+
+# Static URI methods
+
+The `GuzzleHttp\Psr7\Uri` class has several static methods to manipulate URIs.
+
+
+## `GuzzleHttp\Psr7\Uri::removeDotSegments`
+
+`public static function removeDotSegments($path) -> UriInterface`
+
+Removes dot segments from a path and returns the new path.
+
+See http://tools.ietf.org/html/rfc3986#section-5.2.4
+
+
+## `GuzzleHttp\Psr7\Uri::resolve`
+
+`public static function resolve(UriInterface $base, $rel) -> UriInterface`
+
+Resolve a base URI with a relative URI and return a new URI.
+
+See http://tools.ietf.org/html/rfc3986#section-5
+
+
+## `GuzzleHttp\Psr7\Uri::withQueryValue`
+
+`public static function withQueryValue(UriInterface $uri, $key, $value) -> UriInterface`
+
+Create a new URI with a specific query string value.
+
+Any existing query string values that exactly match the provided key are
+removed and replaced with the given key value pair.
+
+Note: this function will convert "=" to "%3D" and "&" to "%26".
+
+
+## `GuzzleHttp\Psr7\Uri::withoutQueryValue`
+
+`public static function withoutQueryValue(UriInterface $uri, $key, $value) -> UriInterface`
+
+Create a new URI with a specific query string value removed.
+
+Any existing query string values that exactly match the provided key are
+removed.
+
+Note: this function will convert "=" to "%3D" and "&" to "%26".
+
+
+## `GuzzleHttp\Psr7\Uri::fromParts`
+
+`public static function fromParts(array $parts) -> UriInterface`
+
+Create a `GuzzleHttp\Psr7\Uri` object from a hash of `parse_url` parts.
+
+
+# Not Implemented
+
+A few aspects of PSR-7 are not implemented in this project. A pull request for
+any of these features is welcome:
+
+- `Psr\Http\Message\ServerRequestInterface`
+- `Psr\Http\Message\UploadedFileInterface`
diff --git a/core/vendor/guzzlehttp/psr7/composer.json b/core/vendor/guzzlehttp/psr7/composer.json
new file mode 100644
index 0000000..c1fe18f
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/composer.json
@@ -0,0 +1,35 @@
+{
+    "name": "guzzlehttp/psr7",
+    "type": "library",
+    "description": "PSR-7 message implementation",
+    "keywords": ["message", "stream", "http", "uri"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "psr/http-message": "~1.0"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~4.0"
+    },
+    "provide": {
+        "psr/http-message-implementation": "1.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "GuzzleHttp\\Psr7\\": "src/"
+        },
+        "files": ["src/functions.php"]
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0-dev"
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/phpunit.xml.dist b/core/vendor/guzzlehttp/psr7/phpunit.xml.dist
new file mode 100644
index 0000000..500cd53
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/phpunit.xml.dist
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="./tests/bootstrap.php"
+         colors="true">
+  <testsuites>
+    <testsuite>
+      <directory>tests</directory>
+    </testsuite>
+  </testsuites>
+  <filter>
+    <whitelist>
+      <directory suffix=".php">src</directory>
+      <exclude>
+        <directory suffix="Interface.php">src/</directory>
+      </exclude>
+    </whitelist>
+  </filter>
+</phpunit>
diff --git a/core/vendor/guzzlehttp/streams/src/AppendStream.php b/core/vendor/guzzlehttp/psr7/src/AppendStream.php
similarity index 74%
rename from core/vendor/guzzlehttp/streams/src/AppendStream.php
rename to core/vendor/guzzlehttp/psr7/src/AppendStream.php
index 94bda71..23039fd 100644
--- a/core/vendor/guzzlehttp/streams/src/AppendStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/AppendStream.php
@@ -1,7 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
 
-use GuzzleHttp\Stream\Exception\CannotAttachException;
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Reads from multiple streams, one after the other.
@@ -32,7 +32,7 @@ public function __construct(array $streams = [])
     public function __toString()
     {
         try {
-            $this->seek(0);
+            $this->rewind();
             return $this->getContents();
         } catch (\Exception $e) {
             return '';
@@ -62,7 +62,7 @@ public function addStream(StreamInterface $stream)
 
     public function getContents()
     {
-        return Utils::copyToString($this);
+        return copy_to_string($this);
     }
 
     /**
@@ -92,11 +92,6 @@ public function detach()
         $this->detached = true;
     }
 
-    public function attach($stream)
-    {
-        throw new CannotAttachException();
-    }
-
     public function tell()
     {
         return $this->pos;
@@ -132,6 +127,11 @@ public function eof()
              $this->streams[$this->current]->eof());
     }
 
+    public function rewind()
+    {
+        $this->seek(0);
+    }
+
     /**
      * Attempts to seek to the given position. Only supports SEEK_SET.
      *
@@ -139,30 +139,31 @@ public function eof()
      */
     public function seek($offset, $whence = SEEK_SET)
     {
-        if (!$this->seekable || $whence !== SEEK_SET) {
-            return false;
+        if (!$this->seekable) {
+            throw new \RuntimeException('This AppendStream is not seekable');
+        } elseif ($whence !== SEEK_SET) {
+            throw new \RuntimeException('The AppendStream can only seek with SEEK_SET');
         }
 
-        $success = true;
         $this->pos = $this->current = 0;
 
         // Rewind each stream
-        foreach ($this->streams as $stream) {
-            if (!$stream->seek(0)) {
-                $success = false;
+        foreach ($this->streams as $i => $stream) {
+            try {
+                $stream->rewind();
+            } catch (\Exception $e) {
+                throw new \RuntimeException('Unable to seek stream '
+                    . $i . ' of the AppendStream', 0, $e);
             }
         }
 
-        if (!$success) {
-            return false;
-        }
-
         // Seek to the actual position by reading from each stream
         while ($this->pos < $offset && !$this->eof()) {
-            $this->read(min(8096, $offset - $this->pos));
+            $result = $this->read(min(8096, $offset - $this->pos));
+            if ($result === '') {
+                break;
+            }
         }
-
-        return $this->pos == $offset;
     }
 
     /**
@@ -175,16 +176,28 @@ public function read($length)
         $buffer = '';
         $total = count($this->streams) - 1;
         $remaining = $length;
+        $progressToNext = false;
 
         while ($remaining > 0) {
+
             // Progress to the next stream if needed.
-            if ($this->streams[$this->current]->eof()) {
-                if ($this->current == $total) {
+            if ($progressToNext || $this->streams[$this->current]->eof()) {
+                $progressToNext = false;
+                if ($this->current === $total) {
                     break;
                 }
                 $this->current++;
             }
-            $buffer .= $this->streams[$this->current]->read($remaining);
+
+            $result = $this->streams[$this->current]->read($remaining);
+
+            // Using a loose comparison here to match on '', false, and null
+            if ($result == null) {
+                $progressToNext = true;
+                continue;
+            }
+
+            $buffer .= $result;
             $remaining = $length - strlen($buffer);
         }
 
@@ -210,7 +223,7 @@ public function isSeekable()
 
     public function write($string)
     {
-        return false;
+        throw new \RuntimeException('Cannot write to an AppendStream');
     }
 
     public function getMetadata($key = null)
diff --git a/core/vendor/guzzlehttp/streams/src/BufferStream.php b/core/vendor/guzzlehttp/psr7/src/BufferStream.php
similarity index 89%
rename from core/vendor/guzzlehttp/streams/src/BufferStream.php
rename to core/vendor/guzzlehttp/psr7/src/BufferStream.php
index 0fffbd6..af4d4c2 100644
--- a/core/vendor/guzzlehttp/streams/src/BufferStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/BufferStream.php
@@ -1,7 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
 
-use GuzzleHttp\Stream\Exception\CannotAttachException;
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Provides a buffer stream that can be written to to fill a buffer, and read
@@ -10,8 +10,6 @@
  * This stream returns a "hwm" metadata value that tells upstream consumers
  * what the configured high water mark of the stream is, or the maximum
  * preferred size of the buffer.
- *
- * @package GuzzleHttp\Stream
  */
 class BufferStream implements StreamInterface
 {
@@ -53,11 +51,6 @@ public function detach()
         $this->close();
     }
 
-    public function attach($stream)
-    {
-        throw new CannotAttachException();
-    }
-
     public function getSize()
     {
         return strlen($this->buffer);
@@ -78,9 +71,14 @@ public function isSeekable()
         return false;
     }
 
+    public function rewind()
+    {
+        $this->seek(0);
+    }
+
     public function seek($offset, $whence = SEEK_SET)
     {
-        return false;
+        throw new \RuntimeException('Cannot seek a BufferStream');
     }
 
     public function eof()
@@ -90,7 +88,7 @@ public function eof()
 
     public function tell()
     {
-        return false;
+        throw new \RuntimeException('Cannot determine the position of a BufferStream');
     }
 
     /**
@@ -120,6 +118,7 @@ public function write($string)
     {
         $this->buffer .= $string;
 
+        // TODO: What should happen here?
         if (strlen($this->buffer) >= $this->hwm) {
             return false;
         }
diff --git a/core/vendor/guzzlehttp/streams/src/CachingStream.php b/core/vendor/guzzlehttp/psr7/src/CachingStream.php
similarity index 90%
rename from core/vendor/guzzlehttp/streams/src/CachingStream.php
rename to core/vendor/guzzlehttp/psr7/src/CachingStream.php
index 60bb905..8fc9d2a 100644
--- a/core/vendor/guzzlehttp/streams/src/CachingStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/CachingStream.php
@@ -1,7 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
 
-use GuzzleHttp\Stream\Exception\SeekException;
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Stream decorator that can cache previously read bytes from a sequentially
@@ -36,9 +36,14 @@ public function getSize()
         return max($this->stream->getSize(), $this->remoteStream->getSize());
     }
 
+    public function rewind()
+    {
+        $this->seek(0);
+    }
+
     /**
      * {@inheritdoc}
-     * @throws SeekException When seeking with SEEK_END or when seeking
+     * @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)
@@ -48,20 +53,18 @@ public function seek($offset, $whence = SEEK_SET)
         } elseif ($whence == SEEK_CUR) {
             $byte = $offset + $this->tell();
         } else {
-            return false;
+            throw new \RuntimeException('CachingStream::seek() supports SEEK_SET and SEEK_CUR');
         }
 
         // You cannot skip ahead past where you've read from the remote stream
         if ($byte > $this->stream->getSize()) {
-            throw new SeekException(
-                $this,
-                $byte,
+            throw new \RuntimeException(
                 sprintf('Cannot seek to byte %d when the buffered stream only'
                     . ' contains %d bytes', $byte, $this->stream->getSize())
             );
         }
 
-        return $this->stream->seek($byte);
+        $this->stream->seek($byte);
     }
 
     public function read($length)
diff --git a/core/vendor/guzzlehttp/streams/src/DroppingStream.php b/core/vendor/guzzlehttp/psr7/src/DroppingStream.php
similarity index 79%
rename from core/vendor/guzzlehttp/streams/src/DroppingStream.php
rename to core/vendor/guzzlehttp/psr7/src/DroppingStream.php
index 56ee80c..8935c80 100644
--- a/core/vendor/guzzlehttp/streams/src/DroppingStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/DroppingStream.php
@@ -1,5 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Stream decorator that begins dropping data once the size of the underlying
@@ -25,9 +27,9 @@ public function write($string)
     {
         $diff = $this->maxLength - $this->stream->getSize();
 
-        // Begin returning false when the underlying stream is too large.
+        // Begin returning 0 when the underlying stream is too large.
         if ($diff <= 0) {
-            return false;
+            return 0;
         }
 
         // Write the stream or a subset of the stream if needed.
@@ -35,8 +37,6 @@ public function write($string)
             return $this->stream->write($string);
         }
 
-        $this->stream->write(substr($string, 0, $diff));
-
-        return false;
+        return $this->stream->write(substr($string, 0, $diff));
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/FnStream.php b/core/vendor/guzzlehttp/psr7/src/FnStream.php
similarity index 92%
rename from core/vendor/guzzlehttp/streams/src/FnStream.php
rename to core/vendor/guzzlehttp/psr7/src/FnStream.php
index 6b5872d..cc9b445 100644
--- a/core/vendor/guzzlehttp/streams/src/FnStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/FnStream.php
@@ -1,5 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Compose stream implementations based on a hash of functions.
@@ -13,7 +15,7 @@ class FnStream implements StreamInterface
     private $methods;
 
     /** @var array Methods that must be implemented in the given array */
-    private static $slots = ['__toString', 'close', 'detach', 'attach',
+    private static $slots = ['__toString', 'close', 'detach', 'rewind',
         'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
         'isReadable', 'read', 'getContents', 'getMetadata'];
 
@@ -85,11 +87,6 @@ public function detach()
         return call_user_func($this->_fn_detach);
     }
 
-    public function attach($stream)
-    {
-        return call_user_func($this->_fn_attach, $stream);
-    }
-
     public function getSize()
     {
         return call_user_func($this->_fn_getSize);
@@ -110,9 +107,14 @@ public function isSeekable()
         return call_user_func($this->_fn_isSeekable);
     }
 
+    public function rewind()
+    {
+        call_user_func($this->_fn_rewind);
+    }
+
     public function seek($offset, $whence = SEEK_SET)
     {
-        return call_user_func($this->_fn_seek, $offset, $whence);
+        call_user_func($this->_fn_seek, $offset, $whence);
     }
 
     public function isWritable()
diff --git a/core/vendor/guzzlehttp/streams/src/InflateStream.php b/core/vendor/guzzlehttp/psr7/src/InflateStream.php
similarity index 87%
rename from core/vendor/guzzlehttp/streams/src/InflateStream.php
rename to core/vendor/guzzlehttp/psr7/src/InflateStream.php
index 978af21..2c8628b 100644
--- a/core/vendor/guzzlehttp/streams/src/InflateStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/InflateStream.php
@@ -1,5 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
@@ -20,7 +22,7 @@ public function __construct(StreamInterface $stream)
     {
         // Skip the first 10 bytes
         $stream = new LimitStream($stream, -1, 10);
-        $resource = GuzzleStreamWrapper::getResource($stream);
+        $resource = StreamWrapper::getResource($stream);
         stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
         $this->stream = new Stream($resource);
     }
diff --git a/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php b/core/vendor/guzzlehttp/psr7/src/LazyOpenStream.php
similarity index 84%
rename from core/vendor/guzzlehttp/streams/src/LazyOpenStream.php
rename to core/vendor/guzzlehttp/psr7/src/LazyOpenStream.php
index 6242ee7..02cec3a 100644
--- a/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/LazyOpenStream.php
@@ -1,5 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Lazily reads or writes to a file that is opened only after an IO operation
@@ -32,6 +34,6 @@ public function __construct($filename, $mode)
      */
     protected function createStream()
     {
-        return Stream::factory(Utils::open($this->filename, $this->mode));
+        return stream_for(try_fopen($this->filename, $this->mode));
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/LimitStream.php b/core/vendor/guzzlehttp/psr7/src/LimitStream.php
similarity index 82%
rename from core/vendor/guzzlehttp/streams/src/LimitStream.php
rename to core/vendor/guzzlehttp/psr7/src/LimitStream.php
index e9fad98..7f2298b 100644
--- a/core/vendor/guzzlehttp/streams/src/LimitStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/LimitStream.php
@@ -1,7 +1,8 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
-use GuzzleHttp\Stream\Exception\SeekException;
 
 /**
  * Decorator used to return only a subset of a stream
@@ -45,12 +46,7 @@ public function eof()
             return false;
         }
 
-        $tell = $this->stream->tell();
-        if ($tell === false) {
-            return false;
-        }
-
-        return $tell >= $this->offset + $this->limit;
+        return $this->stream->tell() >= $this->offset + $this->limit;
     }
 
     /**
@@ -75,7 +71,11 @@ public function getSize()
     public function seek($offset, $whence = SEEK_SET)
     {
         if ($whence !== SEEK_SET || $offset < 0) {
-            return false;
+            throw new \RuntimeException(sprintf(
+                'Cannot seek to offset % with whence %s',
+                $offset,
+                $whence
+            ));
         }
 
         $offset += $this->offset;
@@ -86,7 +86,7 @@ public function seek($offset, $whence = SEEK_SET)
             }
         }
 
-        return $this->stream->seek($offset);
+        $this->stream->seek($offset);
     }
 
     /**
@@ -103,8 +103,7 @@ public function tell()
      *
      * @param int $offset Offset to seek to and begin byte limiting from
      *
-     * @return self
-     * @throws SeekException
+     * @throws \RuntimeException if the stream cannot be seeked.
      */
     public function setOffset($offset)
     {
@@ -112,18 +111,16 @@ public function setOffset($offset)
 
         if ($current !== $offset) {
             // If the stream cannot seek to the offset position, then read to it
-            if (!$this->stream->seek($offset)) {
-                if ($current > $offset) {
-                    throw new SeekException($this, $offset);
-                } else {
-                    $this->stream->read($offset - $current);
-                }
+            if ($this->stream->isSeekable()) {
+                $this->stream->seek($offset);
+            } elseif ($current > $offset) {
+                throw new \RuntimeException("Could not seek to stream offset $offset");
+            } else {
+                $this->stream->read($offset - $current);
             }
         }
 
         $this->offset = $offset;
-
-        return $this;
     }
 
     /**
@@ -132,13 +129,10 @@ public function setOffset($offset)
      *
      * @param int $limit Number of bytes to allow to be read from the stream.
      *                   Use -1 for no limit.
-     * @return self
      */
     public function setLimit($limit)
     {
         $this->limit = $limit;
-
-        return $this;
     }
 
     public function read($length)
@@ -154,8 +148,8 @@ public function read($length)
             // Only return the amount of requested data, ensuring that the byte
             // limit is not exceeded
             return $this->stream->read(min($remaining, $length));
-        } else {
-            return false;
         }
+
+        return '';
     }
 }
diff --git a/core/vendor/guzzlehttp/psr7/src/MessageTrait.php b/core/vendor/guzzlehttp/psr7/src/MessageTrait.php
new file mode 100644
index 0000000..123205c
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/src/MessageTrait.php
@@ -0,0 +1,158 @@
+<?php
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
+
+/**
+ * Trait implementing functionality common to requests and responses.
+ */
+trait MessageTrait
+{
+    /** @var array Cached HTTP header collection with lowercase key to values */
+    private $headers = [];
+
+    /** @var array Actual key to list of values per header. */
+    private $headerLines = [];
+
+    /** @var string */
+    private $protocol = '1.1';
+
+    /** @var StreamInterface */
+    private $stream;
+
+    public function getProtocolVersion()
+    {
+        return $this->protocol;
+    }
+
+    public function withProtocolVersion($version)
+    {
+        if ($this->protocol === $version) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->protocol = $version;
+        return $new;
+    }
+
+    public function getHeaders()
+    {
+        return $this->headerLines;
+    }
+
+    public function hasHeader($header)
+    {
+        return isset($this->headers[strtolower($header)]);
+    }
+
+    public function getHeader($header)
+    {
+        $name = strtolower($header);
+        return isset($this->headers[$name]) ? $this->headers[$name] : [];
+    }
+
+    public function getHeaderLine($header)
+    {
+        return implode(', ', $this->getHeader($header));
+    }
+
+    public function withHeader($header, $value)
+    {
+        $new = clone $this;
+        $header = trim($header);
+        $name = strtolower($header);
+
+        if (!is_array($value)) {
+            $new->headers[$name] = [trim($value)];
+        } else {
+            $new->headers[$name] = $value;
+            foreach ($new->headers[$name] as &$v) {
+                $v = trim($v);
+            }
+        }
+
+        // Remove the header lines.
+        foreach (array_keys($new->headerLines) as $key) {
+            if (strtolower($key) === $name) {
+                unset($new->headerLines[$key]);
+            }
+        }
+
+        // Add the header line.
+        $new->headerLines[$header] = $new->headers[$name];
+
+        return $new;
+    }
+
+    public function withAddedHeader($header, $value)
+    {
+        if (!$this->hasHeader($header)) {
+            return $this->withHeader($header, $value);
+        }
+
+        $new = clone $this;
+        $new->headers[strtolower($header)][] = $value;
+        $new->headerLines[$header][] = $value;
+        return $new;
+    }
+
+    public function withoutHeader($header)
+    {
+        if (!$this->hasHeader($header)) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $name = strtolower($header);
+        unset($new->headers[$name]);
+
+        foreach (array_keys($new->headerLines) as $key) {
+            if (strtolower($key) === $name) {
+                unset($new->headerLines[$key]);
+            }
+        }
+
+        return $new;
+    }
+
+    public function getBody()
+    {
+        if (!$this->stream) {
+            $this->stream = stream_for('');
+        }
+
+        return $this->stream;
+    }
+
+    public function withBody(StreamInterface $body)
+    {
+        if ($body === $this->stream) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->stream = $body;
+        return $new;
+    }
+
+    private function setHeaders(array $headers)
+    {
+        $this->headerLines = $this->headers = [];
+        foreach ($headers as $header => $value) {
+            $header = trim($header);
+            $name = strtolower($header);
+            if (!is_array($value)) {
+                $value = trim($value);
+                $this->headers[$name][] = $value;
+                $this->headerLines[$header][] = $value;
+            } else {
+                foreach ($value as $v) {
+                    $v = trim($v);
+                    $this->headers[$name][] = $v;
+                    $this->headerLines[$header][] = $v;
+                }
+            }
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/src/MultipartStream.php b/core/vendor/guzzlehttp/psr7/src/MultipartStream.php
new file mode 100644
index 0000000..fd006ec
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/src/MultipartStream.php
@@ -0,0 +1,153 @@
+<?php
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
+
+/**
+ * Stream that when read returns bytes for a streaming multipart or
+ * multipart/form-data stream.
+ */
+class MultipartStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    private $boundary;
+
+    /**
+     * @param array  $elements Array of associative arrays, each containing a
+     *                         required "name" key mapping to the form field,
+     *                         name, a required "contents" key mapping to a
+     *                         StreamInterface/resource/string, an optional
+     *                         "headers" associative array of custom headers,
+     *                         and an optional "filename" key mapping to a
+     *                         string to send as the filename in the part.
+     * @param string $boundary You can optionally provide a specific boundary
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function __construct(array $elements = [], $boundary = null)
+    {
+        $this->boundary = $boundary ?: uniqid();
+        $this->stream = $this->createStream($elements);
+    }
+
+    /**
+     * Get the boundary
+     *
+     * @return string
+     */
+    public function getBoundary()
+    {
+        return $this->boundary;
+    }
+
+    public function isWritable()
+    {
+        return false;
+    }
+
+    /**
+     * Get the headers needed before transferring the content of a POST file
+     */
+    private function getHeaders(array $headers)
+    {
+        $str = '';
+        foreach ($headers as $key => $value) {
+            $str .= "{$key}: {$value}\r\n";
+        }
+
+        return "--{$this->boundary}\r\n" . trim($str) . "\r\n\r\n";
+    }
+
+    /**
+     * Create the aggregate stream that will be used to upload the POST data
+     */
+    protected function createStream(array $elements)
+    {
+        $stream = new AppendStream();
+
+        foreach ($elements as $element) {
+            $this->addElement($stream, $element);
+        }
+
+        // Add the trailing boundary with CRLF
+        $stream->addStream(stream_for("--{$this->boundary}--\r\n"));
+
+        return $stream;
+    }
+
+    private function addElement(AppendStream $stream, array $element)
+    {
+        foreach (['contents', 'name'] as $key) {
+            if (!array_key_exists($key, $element)) {
+                throw new \InvalidArgumentException("A '{$key}' key is required");
+            }
+        }
+
+        $element['contents'] = stream_for($element['contents']);
+
+        if (empty($element['filename'])) {
+            $uri = $element['contents']->getMetadata('uri');
+            if (substr($uri, 0, 6) !== 'php://') {
+                $element['filename'] = $uri;
+            }
+        }
+
+        list($body, $headers) = $this->createElement(
+            $element['name'],
+            $element['contents'],
+            isset($element['filename']) ? $element['filename'] : null,
+            isset($element['headers']) ? $element['headers'] : []
+        );
+
+        $stream->addStream(stream_for($this->getHeaders($headers)));
+        $stream->addStream($body);
+        $stream->addStream(stream_for("\r\n"));
+    }
+
+    /**
+     * @return array
+     */
+    private function createElement($name, $stream, $filename, array $headers)
+    {
+        // Set a default content-disposition header if one was no provided
+        $disposition = $this->getHeader($headers, 'content-disposition');
+        if (!$disposition) {
+            $headers['Content-Disposition'] = $filename
+                ? sprintf('form-data; name="%s"; filename="%s"',
+                    $name,
+                    basename($filename))
+                : "form-data; name=\"{$name}\"";
+        }
+
+        // Set a default content-length header if one was no provided
+        $length = $this->getHeader($headers, 'content-length');
+        if (!$length) {
+            if ($length = $stream->getSize()) {
+                $headers['Content-Length'] = (string) $length;
+            }
+        }
+
+        // Set a default Content-Type if one was not supplied
+        $type = $this->getHeader($headers, 'content-type');
+        if (!$type && $filename) {
+            if ($type = mimetype_from_filename($filename)) {
+                $headers['Content-Type'] = $type;
+            }
+        }
+
+        return [$stream, $headers];
+    }
+
+    private function getHeader(array $headers, $key)
+    {
+        $lowercaseHeader = strtolower($key);
+        foreach ($headers as $k => $v) {
+            if (strtolower($k) === $lowercaseHeader) {
+                return $v;
+            }
+        }
+
+        return null;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/NoSeekStream.php b/core/vendor/guzzlehttp/psr7/src/NoSeekStream.php
similarity index 67%
rename from core/vendor/guzzlehttp/streams/src/NoSeekStream.php
rename to core/vendor/guzzlehttp/psr7/src/NoSeekStream.php
index 3d42395..2332218 100644
--- a/core/vendor/guzzlehttp/streams/src/NoSeekStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/NoSeekStream.php
@@ -1,5 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Stream decorator that prevents a stream from being seeked
@@ -10,16 +12,11 @@ class NoSeekStream implements StreamInterface
 
     public function seek($offset, $whence = SEEK_SET)
     {
-        return false;
+        throw new \RuntimeException('Cannot seek a NoSeekStream');
     }
 
     public function isSeekable()
     {
         return false;
     }
-
-    public function attach($stream)
-    {
-        $this->stream->attach($stream);
-    }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/PumpStream.php b/core/vendor/guzzlehttp/psr7/src/PumpStream.php
similarity index 90%
rename from core/vendor/guzzlehttp/streams/src/PumpStream.php
rename to core/vendor/guzzlehttp/psr7/src/PumpStream.php
index 9963207..ffb5440 100644
--- a/core/vendor/guzzlehttp/streams/src/PumpStream.php
+++ b/core/vendor/guzzlehttp/psr7/src/PumpStream.php
@@ -1,7 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
 
-use GuzzleHttp\Stream\Exception\CannotAttachException;
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Provides a read only stream that pumps data from a PHP callable.
@@ -50,7 +50,11 @@ public function __construct(callable $source, array $options = [])
 
     public function __toString()
     {
-        return Utils::copyToString($this);
+        try {
+            return copy_to_string($this);
+        } catch (\Exception $e) {
+            return '';
+        }
     }
 
     public function close()
@@ -64,11 +68,6 @@ public function detach()
         $this->source = null;
     }
 
-    public function attach($stream)
-    {
-        throw new CannotAttachException();
-    }
-
     public function getSize()
     {
         return $this->size;
@@ -89,9 +88,14 @@ public function isSeekable()
         return false;
     }
 
+    public function rewind()
+    {
+        $this->seek(0);
+    }
+
     public function seek($offset, $whence = SEEK_SET)
     {
-        return false;
+        throw new \RuntimeException('Cannot seek a PumpStream');
     }
 
     public function isWritable()
@@ -101,7 +105,7 @@ public function isWritable()
 
     public function write($string)
     {
-        return false;
+        throw new \RuntimeException('Cannot write to a PumpStream');
     }
 
     public function isReadable()
diff --git a/core/vendor/guzzlehttp/psr7/src/Request.php b/core/vendor/guzzlehttp/psr7/src/Request.php
new file mode 100644
index 0000000..0189b14
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/src/Request.php
@@ -0,0 +1,149 @@
+<?php
+namespace GuzzleHttp\Psr7;
+
+use InvalidArgumentException;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\StreamInterface;
+use Psr\Http\Message\UriInterface;
+
+/**
+ * PSR-7 request implementation.
+ */
+class Request implements RequestInterface
+{
+    use MessageTrait {
+        withHeader as protected withParentHeader;
+    }
+
+    /** @var string */
+    private $method;
+
+    /** @var null|string */
+    private $requestTarget;
+
+    /** @var null|UriInterface */
+    private $uri;
+
+    /**
+     * @param null|string $method HTTP method for the request.
+     * @param null|string $uri URI for the request.
+     * @param array  $headers Headers for the message.
+     * @param string|resource|StreamInterface $body Message body.
+     * @param string $protocolVersion HTTP protocol version.
+     *
+     * @throws InvalidArgumentException for an invalid URI
+     */
+    public function __construct(
+        $method,
+        $uri,
+        array $headers = [],
+        $body = null,
+        $protocolVersion = '1.1'
+    ) {
+        if (is_string($uri)) {
+            $uri = new Uri($uri);
+        } elseif (!($uri instanceof UriInterface)) {
+            throw new \InvalidArgumentException(
+                'URI must be a string or Psr\Http\Message\UriInterface'
+            );
+        }
+
+        $this->method = strtoupper($method);
+        $this->uri = $uri;
+        $this->setHeaders($headers);
+        $this->protocol = $protocolVersion;
+
+        $host = $uri->getHost();
+        if ($host && !$this->hasHeader('Host')) {
+            $this->updateHostFromUri($host);
+        }
+
+        if ($body) {
+            $this->stream = stream_for($body);
+        }
+    }
+
+    public function getRequestTarget()
+    {
+        if ($this->requestTarget !== null) {
+            return $this->requestTarget;
+        }
+
+        $target = $this->uri->getPath();
+        if ($target == null) {
+            $target = '/';
+        }
+        if ($this->uri->getQuery()) {
+            $target .= '?' . $this->uri->getQuery();
+        }
+
+        return $target;
+    }
+
+    public function withRequestTarget($requestTarget)
+    {
+        if (preg_match('#\s#', $requestTarget)) {
+            throw new InvalidArgumentException(
+                'Invalid request target provided; cannot contain whitespace'
+            );
+        }
+
+        $new = clone $this;
+        $new->requestTarget = $requestTarget;
+        return $new;
+    }
+
+    public function getMethod()
+    {
+        return $this->method;
+    }
+
+    public function withMethod($method)
+    {
+        $new = clone $this;
+        $new->method = strtoupper($method);
+        return $new;
+    }
+
+    public function getUri()
+    {
+        return $this->uri;
+    }
+
+    public function withUri(UriInterface $uri, $preserveHost = false)
+    {
+        if ($uri === $this->uri) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->uri = $uri;
+
+        if (!$preserveHost) {
+            if ($host = $uri->getHost()) {
+                $new->updateHostFromUri($host);
+            }
+        }
+
+        return $new;
+    }
+
+    public function withHeader($header, $value)
+    {
+        /** @var Request $newInstance */
+        $newInstance = $this->withParentHeader($header, $value);
+        return $newInstance;
+    }
+
+    private function updateHostFromUri($host)
+    {
+        // Ensure Host is the first header.
+        // See: http://tools.ietf.org/html/rfc7230#section-5.4
+        if ($port = $this->uri->getPort()) {
+            $host .= ':' . $port;
+        }
+
+        $this->headerLines = ['Host' => [$host]] + $this->headerLines;
+        $this->headers = ['host' => [$host]] + $this->headers;
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/src/Response.php b/core/vendor/guzzlehttp/psr7/src/Response.php
new file mode 100644
index 0000000..7a7a469
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/src/Response.php
@@ -0,0 +1,130 @@
+<?php
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\ResponseInterface;
+
+/**
+ * PSR-7 response implementation.
+ */
+class Response implements ResponseInterface
+{
+    use MessageTrait;
+
+    /** @var array Map of standard HTTP status code/reason phrases */
+    private static $phrases = [
+        100 => 'Continue',
+        101 => 'Switching Protocols',
+        102 => 'Processing',
+        200 => 'OK',
+        201 => 'Created',
+        202 => 'Accepted',
+        203 => 'Non-Authoritative Information',
+        204 => 'No Content',
+        205 => 'Reset Content',
+        206 => 'Partial Content',
+        207 => 'Multi-status',
+        208 => 'Already Reported',
+        300 => 'Multiple Choices',
+        301 => 'Moved Permanently',
+        302 => 'Found',
+        303 => 'See Other',
+        304 => 'Not Modified',
+        305 => 'Use Proxy',
+        306 => 'Switch Proxy',
+        307 => 'Temporary Redirect',
+        400 => 'Bad Request',
+        401 => 'Unauthorized',
+        402 => 'Payment Required',
+        403 => 'Forbidden',
+        404 => 'Not Found',
+        405 => 'Method Not Allowed',
+        406 => 'Not Acceptable',
+        407 => 'Proxy Authentication Required',
+        408 => 'Request Time-out',
+        409 => 'Conflict',
+        410 => 'Gone',
+        411 => 'Length Required',
+        412 => 'Precondition Failed',
+        413 => 'Request Entity Too Large',
+        414 => 'Request-URI Too Large',
+        415 => 'Unsupported Media Type',
+        416 => 'Requested range not satisfiable',
+        417 => 'Expectation Failed',
+        418 => 'I\'m a teapot',
+        422 => 'Unprocessable Entity',
+        423 => 'Locked',
+        424 => 'Failed Dependency',
+        425 => 'Unordered Collection',
+        426 => 'Upgrade Required',
+        428 => 'Precondition Required',
+        429 => 'Too Many Requests',
+        431 => 'Request Header Fields Too Large',
+        500 => 'Internal Server Error',
+        501 => 'Not Implemented',
+        502 => 'Bad Gateway',
+        503 => 'Service Unavailable',
+        504 => 'Gateway Time-out',
+        505 => 'HTTP Version not supported',
+        506 => 'Variant Also Negotiates',
+        507 => 'Insufficient Storage',
+        508 => 'Loop Detected',
+        511 => 'Network Authentication Required',
+    ];
+
+    /** @var null|string */
+    private $reasonPhrase = '';
+
+    /** @var int */
+    private $statusCode = 200;
+
+    /**
+     * @param int    $status  Status code for the response, if any.
+     * @param array  $headers Headers for the response, if any.
+     * @param mixed  $body    Stream body.
+     * @param string $version Protocol version.
+     * @param string $reason  Reason phrase (a default will be used if possible).
+     */
+    public function __construct(
+        $status = 200,
+        array $headers = [],
+        $body = null,
+        $version = '1.1',
+        $reason = null
+    ) {
+        $this->statusCode = (int) $status;
+
+        if ($body) {
+            $this->stream = stream_for($body);
+        }
+
+        $this->setHeaders($headers);
+        if (!$reason && isset(self::$phrases[$this->statusCode])) {
+            $this->reasonPhrase = self::$phrases[$status];
+        } else {
+            $this->reasonPhrase = (string) $reason;
+        }
+
+        $this->protocol = $version;
+    }
+
+    public function getStatusCode()
+    {
+        return $this->statusCode;
+    }
+
+    public function getReasonPhrase()
+    {
+        return $this->reasonPhrase;
+    }
+
+    public function withStatus($code, $reasonPhrase = '')
+    {
+        $new = clone $this;
+        $new->statusCode = (int) $code;
+        if (!$reasonPhrase && isset(self::$phrases[$new->statusCode])) {
+            $reasonPhrase = self::$phrases[$new->statusCode];
+        }
+        $new->reasonPhrase = $reasonPhrase;
+        return $new;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/Stream.php b/core/vendor/guzzlehttp/psr7/src/Stream.php
similarity index 63%
rename from core/vendor/guzzlehttp/streams/src/Stream.php
rename to core/vendor/guzzlehttp/psr7/src/Stream.php
index 7adbc5e..0b0db01 100644
--- a/core/vendor/guzzlehttp/streams/src/Stream.php
+++ b/core/vendor/guzzlehttp/psr7/src/Stream.php
@@ -1,8 +1,12 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
- * PHP stream implementation
+ * PHP stream implementation.
+ *
+ * @var $stream
  */
 class Stream implements StreamInterface
 {
@@ -31,61 +35,6 @@ class Stream implements StreamInterface
     ];
 
     /**
-     * Create a new stream based on the input type.
-     *
-     * This factory accepts the same associative array of options as described
-     * in the constructor.
-     *
-     * @param resource|string|StreamInterface $resource Entity body data
-     * @param array                           $options  Additional options
-     *
-     * @return Stream
-     * @throws \InvalidArgumentException if the $resource arg is not valid.
-     */
-    public static function factory($resource = '', array $options = [])
-    {
-        $type = gettype($resource);
-
-        if ($type == 'string') {
-            $stream = fopen('php://temp', 'r+');
-            if ($resource !== '') {
-                fwrite($stream, $resource);
-                fseek($stream, 0);
-            }
-            return new self($stream, $options);
-        }
-
-        if ($type == 'resource') {
-            return new self($resource, $options);
-        }
-
-        if ($resource instanceof StreamInterface) {
-            return $resource;
-        }
-
-        if ($type == 'object' && method_exists($resource, '__toString')) {
-            return self::factory((string) $resource, $options);
-        }
-
-        if (is_callable($resource)) {
-            return new PumpStream($resource, $options);
-        }
-
-        if ($resource instanceof \Iterator) {
-            return new PumpStream(function () use ($resource) {
-                if (!$resource->valid()) {
-                    return false;
-                }
-                $result = $resource->current();
-                $resource->next();
-                return $result;
-            }, $options);
-        }
-
-        throw new \InvalidArgumentException('Invalid resource type: ' . $type);
-    }
-
-    /**
      * This constructor accepts an associative array of options.
      *
      * - size: (int) If a read stream would otherwise have an indeterminate
@@ -113,7 +62,21 @@ public function __construct($stream, $options = [])
             ? $options['metadata']
             : [];
 
-        $this->attach($stream);
+        $this->stream = $stream;
+        $meta = stream_get_meta_data($this->stream);
+        $this->seekable = $meta['seekable'];
+        $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]);
+        $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]);
+        $this->uri = $this->getMetadata('uri');
+    }
+
+    public function __get($name)
+    {
+        if ($name == 'stream') {
+            throw new \RuntimeException('The stream is detached');
+        }
+
+        throw new \BadMethodCallException('No value for ' . $name);
     }
 
     /**
@@ -126,55 +89,56 @@ public function __destruct()
 
     public function __toString()
     {
-        if (!$this->stream) {
+        try {
+            $this->seek(0);
+            return (string) stream_get_contents($this->stream);
+        } catch (\Exception $e) {
             return '';
         }
-
-        $this->seek(0);
-
-        return (string) stream_get_contents($this->stream);
     }
 
     public function getContents()
     {
-        return $this->stream ? stream_get_contents($this->stream) : '';
+        $contents = stream_get_contents($this->stream);
+
+        if ($contents === false) {
+            throw new \RuntimeException('Unable to read stream contents');
+        }
+
+        return $contents;
     }
 
     public function close()
     {
-        if (is_resource($this->stream)) {
-            fclose($this->stream);
+        if (isset($this->stream)) {
+            if (is_resource($this->stream)) {
+                fclose($this->stream);
+            }
+            $this->detach();
         }
-
-        $this->detach();
     }
 
     public function detach()
     {
+        if (!isset($this->stream)) {
+            return null;
+        }
+
         $result = $this->stream;
-        $this->stream = $this->size = $this->uri = null;
+        unset($this->stream);
+        $this->size = $this->uri = null;
         $this->readable = $this->writable = $this->seekable = false;
 
         return $result;
     }
 
-    public function attach($stream)
-    {
-        $this->stream = $stream;
-        $meta = stream_get_meta_data($this->stream);
-        $this->seekable = $meta['seekable'];
-        $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]);
-        $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]);
-        $this->uri = $this->getMetadata('uri');
-    }
-
     public function getSize()
     {
         if ($this->size !== null) {
             return $this->size;
         }
 
-        if (!$this->stream) {
+        if (!isset($this->stream)) {
             return null;
         }
 
@@ -214,39 +178,59 @@ public function eof()
 
     public function tell()
     {
-        return $this->stream ? ftell($this->stream) : false;
+        $result = ftell($this->stream);
+
+        if ($result === false) {
+            throw new \RuntimeException('Unable to determine stream position');
+        }
+
+        return $result;
     }
 
-    public function setSize($size)
+    public function rewind()
     {
-        $this->size = $size;
-
-        return $this;
+        $this->seek(0);
     }
 
     public function seek($offset, $whence = SEEK_SET)
     {
-        return $this->seekable
-            ? fseek($this->stream, $offset, $whence) === 0
-            : false;
+        if (!$this->seekable) {
+            throw new \RuntimeException('Stream is not seekable');
+        } elseif (fseek($this->stream, $offset, $whence) === -1) {
+            throw new \RuntimeException('Unable to seek to stream position '
+                . $offset . ' with whence ' . var_export($whence, true));
+        }
     }
 
     public function read($length)
     {
-        return $this->readable ? fread($this->stream, $length) : false;
+        if (!$this->readable) {
+            throw new \RuntimeException('Cannot read from non-readable stream');
+        }
+
+        return fread($this->stream, $length);
     }
 
     public function write($string)
     {
+        if (!$this->writable) {
+            throw new \RuntimeException('Cannot write to a non-writable stream');
+        }
+
         // We can't know the size after writing anything
         $this->size = null;
+        $result = fwrite($this->stream, $string);
+
+        if ($result === false) {
+            throw new \RuntimeException('Unable to write to stream');
+        }
 
-        return $this->writable ? fwrite($this->stream, $string) : false;
+        return $result;
     }
 
     public function getMetadata($key = null)
     {
-        if (!$this->stream) {
+        if (!isset($this->stream)) {
             return $key ? null : [];
         } elseif (!$key) {
             return $this->customMetadata + stream_get_meta_data($this->stream);
diff --git a/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php b/core/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php
similarity index 83%
rename from core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
rename to core/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php
index 39c19c5..daec6f5 100644
--- a/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
+++ b/core/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php
@@ -1,6 +1,7 @@
 <?php
-namespace GuzzleHttp\Stream;
-use GuzzleHttp\Stream\Exception\CannotAttachException;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Stream decorator trait
@@ -19,6 +20,10 @@ public function __construct(StreamInterface $stream)
     /**
      * Magic method used to create a new stream if streams are not added in
      * the constructor of a decorator (e.g., LazyOpenStream).
+     *
+     * @param string $name Name of the property (allows "stream" only).
+     *
+     * @return StreamInterface
      */
     public function __get($name)
     {
@@ -33,7 +38,9 @@ public function __get($name)
     public function __toString()
     {
         try {
-            $this->seek(0);
+            if ($this->isSeekable()) {
+                $this->seek(0);
+            }
             return $this->getContents();
         } catch (\Exception $e) {
             // Really, PHP? https://bugs.php.net/bug.php?id=53648
@@ -45,7 +52,7 @@ public function __toString()
 
     public function getContents()
     {
-        return Utils::copyToString($this);
+        return copy_to_string($this);
     }
 
     /**
@@ -58,7 +65,7 @@ public function getContents()
      */
     public function __call($method, array $args)
     {
-        $result = call_user_func_array(array($this->stream, $method), $args);
+        $result = call_user_func_array([$this->stream, $method], $args);
 
         // Always return the wrapped object if the result is a return $this
         return $result === $this->stream ? $this : $result;
@@ -79,11 +86,6 @@ public function detach()
         return $this->stream->detach();
     }
 
-    public function attach($stream)
-    {
-        throw new CannotAttachException();
-    }
-
     public function getSize()
     {
         return $this->stream->getSize();
@@ -114,9 +116,14 @@ public function isSeekable()
         return $this->stream->isSeekable();
     }
 
+    public function rewind()
+    {
+        $this->seek(0);
+    }
+
     public function seek($offset, $whence = SEEK_SET)
     {
-        return $this->stream->seek($offset, $whence);
+        $this->stream->seek($offset, $whence);
     }
 
     public function read($length)
@@ -137,7 +144,6 @@ public function write($string)
      */
     protected function createStream()
     {
-        throw new \BadMethodCallException('createStream() not implemented in '
-            . get_class($this));
+        throw new \BadMethodCallException('Not implemented');
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php b/core/vendor/guzzlehttp/psr7/src/StreamWrapper.php
similarity index 94%
rename from core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
rename to core/vendor/guzzlehttp/psr7/src/StreamWrapper.php
index 4d049a6..cf7b223 100644
--- a/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
+++ b/core/vendor/guzzlehttp/psr7/src/StreamWrapper.php
@@ -1,10 +1,12 @@
 <?php
-namespace GuzzleHttp\Stream;
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\StreamInterface;
 
 /**
  * Converts Guzzle streams into PHP stream resources.
  */
-class GuzzleStreamWrapper
+class StreamWrapper
 {
     /** @var resource */
     public $context;
@@ -87,7 +89,9 @@ public function stream_eof()
 
     public function stream_seek($offset, $whence)
     {
-        return $this->stream->seek($offset, $whence);
+        $this->stream->seek($offset, $whence);
+
+        return true;
     }
 
     public function stream_stat()
diff --git a/core/vendor/guzzlehttp/psr7/src/Uri.php b/core/vendor/guzzlehttp/psr7/src/Uri.php
new file mode 100644
index 0000000..58c3066
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/src/Uri.php
@@ -0,0 +1,604 @@
+<?php
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\UriInterface;
+
+/**
+ * Basic PSR-7 URI implementation.
+ *
+ * @link https://github.com/phly/http This class is based upon
+ *     Matthew Weier O'Phinney's URI implementation in phly/http.
+ */
+class Uri implements UriInterface
+{
+    private static $schemes = [
+        'http'  => 80,
+        'https' => 443,
+    ];
+
+    private static $charUnreserved = 'a-zA-Z0-9_\-\.~';
+    private static $charSubDelims = '!\$&\'\(\)\*\+,;=';
+    private static $replaceQuery = ['=' => '%3D', '&' => '%26'];
+
+    /** @var string Uri scheme. */
+    private $scheme = '';
+
+    /** @var string Uri user info. */
+    private $userInfo = '';
+
+    /** @var string Uri host. */
+    private $host = '';
+
+    /** @var int|null Uri port. */
+    private $port;
+
+    /** @var string Uri path. */
+    private $path = '';
+
+    /** @var string Uri query string. */
+    private $query = '';
+
+    /** @var string Uri fragment. */
+    private $fragment = '';
+
+    /**
+     * @param string $uri URI to parse and wrap.
+     */
+    public function __construct($uri = '')
+    {
+        if ($uri != null) {
+            $parts = parse_url($uri);
+            if ($parts === false) {
+                throw new \InvalidArgumentException("Unable to parse URI: $uri");
+            }
+            $this->applyParts($parts);
+        }
+    }
+
+    public function __toString()
+    {
+        return self::createUriString(
+            $this->scheme,
+            $this->getAuthority(),
+            $this->getPath(),
+            $this->query,
+            $this->fragment
+        );
+    }
+
+    /**
+     * Removes dot segments from a path and returns the new path.
+     *
+     * @param string $path
+     *
+     * @return string
+     * @link http://tools.ietf.org/html/rfc3986#section-5.2.4
+     */
+    public static function removeDotSegments($path)
+    {
+        static $noopPaths = ['' => true, '/' => true, '*' => true];
+        static $ignoreSegments = ['.' => true, '..' => true];
+
+        if (isset($noopPaths[$path])) {
+            return $path;
+        }
+
+        $results = [];
+        $segments = explode('/', $path);
+        foreach ($segments as $segment) {
+            if ($segment == '..') {
+                array_pop($results);
+            } elseif (!isset($ignoreSegments[$segment])) {
+                $results[] = $segment;
+            }
+        }
+
+        $newPath = implode('/', $results);
+        // Add the leading slash if necessary
+        if (substr($path, 0, 1) === '/' &&
+            substr($newPath, 0, 1) !== '/'
+        ) {
+            $newPath = '/' . $newPath;
+        }
+
+        // Add the trailing slash if necessary
+        if ($newPath != '/' && isset($ignoreSegments[end($segments)])) {
+            $newPath .= '/';
+        }
+
+        return $newPath;
+    }
+
+    /**
+     * Resolve a base URI with a relative URI and return a new URI.
+     *
+     * @param UriInterface $base Base URI
+     * @param string       $rel  Relative URI
+     *
+     * @return UriInterface
+     */
+    public static function resolve(UriInterface $base, $rel)
+    {
+        if ($rel === null || $rel === '') {
+            return $base;
+        }
+
+        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' => ''
+            ];
+        }
+
+        if (!empty($relParts['scheme']) && !empty($relParts['host'])) {
+            return $rel instanceof UriInterface
+                ? $rel
+                : self::fromParts($relParts);
+        }
+
+        $parts = [
+            'scheme'   => $base->getScheme(),
+            'host'     => $base->getHost(),
+            'port'     => $base->getPort(),
+            'path'     => $base->getPath(),
+            'query'    => $base->getQuery(),
+            'fragment' => $base->getFragment()
+        ];
+
+        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'];
+        } elseif (!empty($relParts['path'])) {
+            if (substr($relParts['path'], 0, 1) == '/') {
+                $parts['path'] = self::removeDotSegments($relParts['path']);
+                $parts['query'] = $relParts['query'];
+                $parts['fragment'] = $relParts['fragment'];
+            } else {
+                if (!empty($parts['host']) && empty($parts['path'])) {
+                    $mergedPath = '/';
+                } else {
+                    $mergedPath = substr($parts['path'], 0, strrpos($parts['path'], '/') + 1);
+                }
+                $parts['path'] = self::removeDotSegments($mergedPath . $relParts['path']);
+                $parts['query'] = $relParts['query'];
+                $parts['fragment'] = $relParts['fragment'];
+            }
+        } elseif (!empty($relParts['query'])) {
+            $parts['query'] = $relParts['query'];
+        } elseif ($relParts['fragment'] != null) {
+            $parts['fragment'] = $relParts['fragment'];
+        }
+
+        return static::fromParts($parts);
+    }
+
+    /**
+     * Create a new URI with a specific query string value removed.
+     *
+     * Any existing query string values that exactly match the provided key are
+     * removed.
+     *
+     * Note: this function will convert "=" to "%3D" and "&" to "%26".
+     *
+     * @param UriInterface $uri URI to use as a base.
+     * @param string       $key Query string key value pair to remove.
+     *
+     * @return UriInterface
+     */
+    public static function withoutQueryValue(UriInterface $uri, $key)
+    {
+        $current = $uri->getQuery();
+        if (!$current) {
+            return $uri;
+        }
+
+        $result = [];
+        foreach (explode('&', $current) as $part) {
+            if (explode('=', $part)[0] !== $key) {
+                $result[] = $part;
+            };
+        }
+
+        return $uri->withQuery(implode('&', $result));
+    }
+
+    /**
+     * Create a new URI with a specific query string value.
+     *
+     * Any existing query string values that exactly match the provided key are
+     * removed and replaced with the given key value pair.
+     *
+     * Note: this function will convert "=" to "%3D" and "&" to "%26".
+     *
+     * @param UriInterface $uri URI to use as a base.
+     * @param string $key   Key to set.
+     * @param string $value Value to set.
+     *
+     * @return UriInterface
+     */
+    public static function withQueryValue(UriInterface $uri, $key, $value)
+    {
+        $current = $uri->getQuery();
+        $key = strtr($key, self::$replaceQuery);
+
+        if (!$current) {
+            $result = [];
+        } else {
+            $result = [];
+            foreach (explode('&', $current) as $part) {
+                if (explode('=', $part)[0] !== $key) {
+                    $result[] = $part;
+                };
+            }
+        }
+
+        if ($value !== null) {
+            $result[] = $key . '=' . strtr($value, self::$replaceQuery);
+        } else {
+            $result[] = $key;
+        }
+
+        return $uri->withQuery(implode('&', $result));
+    }
+
+    /**
+     * Create a URI from a hash of parse_url parts.
+     *
+     * @param array $parts
+     *
+     * @return self
+     */
+    public static function fromParts(array $parts)
+    {
+        $uri = new self();
+        $uri->applyParts($parts);
+        return $uri;
+    }
+
+    public function getScheme()
+    {
+        return $this->scheme;
+    }
+
+    public function getAuthority()
+    {
+        if (empty($this->host)) {
+            return '';
+        }
+
+        $authority = $this->host;
+        if (!empty($this->userInfo)) {
+            $authority = $this->userInfo . '@' . $authority;
+        }
+
+        if ($this->isNonStandardPort($this->scheme, $this->host, $this->port)) {
+            $authority .= ':' . $this->port;
+        }
+
+        return $authority;
+    }
+
+    public function getUserInfo()
+    {
+        return $this->userInfo;
+    }
+
+    public function getHost()
+    {
+        return $this->host;
+    }
+
+    public function getPort()
+    {
+        return $this->port;
+    }
+
+    public function getPath()
+    {
+        return $this->path == null ? '' : $this->path;
+    }
+
+    public function getQuery()
+    {
+        return $this->query;
+    }
+
+    public function getFragment()
+    {
+        return $this->fragment;
+    }
+
+    public function withScheme($scheme)
+    {
+        $scheme = $this->filterScheme($scheme);
+
+        if ($this->scheme === $scheme) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->scheme = $scheme;
+        $new->port = $new->filterPort($new->scheme, $new->host, $new->port);
+        return $new;
+    }
+
+    public function withUserInfo($user, $password = null)
+    {
+        $info = $user;
+        if ($password) {
+            $info .= ':' . $password;
+        }
+
+        if ($this->userInfo === $info) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->userInfo = $info;
+        return $new;
+    }
+
+    public function withHost($host)
+    {
+        if ($this->host === $host) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->host = $host;
+        return $new;
+    }
+
+    public function withPort($port)
+    {
+        $port = $this->filterPort($this->scheme, $this->host, $port);
+
+        if ($this->port === $port) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->port = $port;
+        return $new;
+    }
+
+    public function withPath($path)
+    {
+        if (!is_string($path)) {
+            throw new \InvalidArgumentException(
+                'Invalid path provided; must be a string'
+            );
+        }
+
+        $path = $this->filterPath($path);
+
+        if ($this->path === $path) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->path = $path;
+        return $new;
+    }
+
+    public function withQuery($query)
+    {
+        if (!is_string($query) && !method_exists($query, '__toString')) {
+            throw new \InvalidArgumentException(
+                'Query string must be a string'
+            );
+        }
+
+        $query = (string) $query;
+        if (substr($query, 0, 1) === '?') {
+            $query = substr($query, 1);
+        }
+
+        $query = $this->filterQueryAndFragment($query);
+
+        if ($this->query === $query) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->query = $query;
+        return $new;
+    }
+
+    public function withFragment($fragment)
+    {
+        if (substr($fragment, 0, 1) === '#') {
+            $fragment = substr($fragment, 1);
+        }
+
+        $fragment = $this->filterQueryAndFragment($fragment);
+
+        if ($this->fragment === $fragment) {
+            return $this;
+        }
+
+        $new = clone $this;
+        $new->fragment = $fragment;
+        return $new;
+    }
+
+    /**
+     * Apply parse_url parts to a URI.
+     *
+     * @param $parts Array of parse_url parts to apply.
+     */
+    private function applyParts(array $parts)
+    {
+        $this->scheme = isset($parts['scheme'])
+            ? $this->filterScheme($parts['scheme'])
+            : '';
+        $this->userInfo = isset($parts['user']) ? $parts['user'] : '';
+        $this->host = isset($parts['host']) ? $parts['host'] : '';
+        $this->port = !empty($parts['port'])
+            ? $this->filterPort($this->scheme, $this->host, $parts['port'])
+            : null;
+        $this->path = isset($parts['path'])
+            ? $this->filterPath($parts['path'])
+            : '';
+        $this->query = isset($parts['query'])
+            ? $this->filterQueryAndFragment($parts['query'])
+            : '';
+        $this->fragment = isset($parts['fragment'])
+            ? $this->filterQueryAndFragment($parts['fragment'])
+            : '';
+        if (isset($parts['pass'])) {
+            $this->userInfo .= ':' . $parts['pass'];
+        }
+    }
+
+    /**
+     * Create a URI string from its various parts
+     *
+     * @param string $scheme
+     * @param string $authority
+     * @param string $path
+     * @param string $query
+     * @param string $fragment
+     * @return string
+     */
+    private static function createUriString($scheme, $authority, $path, $query, $fragment)
+    {
+        $uri = '';
+
+        if (!empty($scheme)) {
+            $uri .= $scheme . '://';
+        }
+
+        if (!empty($authority)) {
+            $uri .= $authority;
+        }
+
+        if ($path != null) {
+            // Add a leading slash if necessary.
+            if ($uri && substr($path, 0, 1) !== '/') {
+                $uri .= '/';
+            }
+            $uri .= $path;
+        }
+
+        if ($query != null) {
+            $uri .= '?' . $query;
+        }
+
+        if ($fragment != null) {
+            $uri .= '#' . $fragment;
+        }
+
+        return $uri;
+    }
+
+    /**
+     * Is a given port non-standard for the current scheme?
+     *
+     * @param string $scheme
+     * @param string $host
+     * @param int $port
+     * @return bool
+     */
+    private static function isNonStandardPort($scheme, $host, $port)
+    {
+        if (!$scheme && $port) {
+            return true;
+        }
+
+        if (!$host || !$port) {
+            return false;
+        }
+
+        return !isset(static::$schemes[$scheme]) || $port !== static::$schemes[$scheme];
+    }
+
+    /**
+     * @param string $scheme
+     *
+     * @return string
+     */
+    private function filterScheme($scheme)
+    {
+        $scheme = strtolower($scheme);
+        $scheme = rtrim($scheme, ':/');
+
+        return $scheme;
+    }
+
+    /**
+     * @param string $scheme
+     * @param string $host
+     * @param int $port
+     *
+     * @return int|null
+     *
+     * @throws \InvalidArgumentException If the port is invalid.
+     */
+    private function filterPort($scheme, $host, $port)
+    {
+        if (null !== $port) {
+            $port = (int) $port;
+            if (1 > $port || 0xffff < $port) {
+                throw new \InvalidArgumentException(
+                    sprintf('Invalid port: %d. Must be between 1 and 65535', $port)
+                );
+            }
+        }
+
+        return $this->isNonStandardPort($scheme, $host, $port) ? $port : null;
+    }
+
+    /**
+     * Filters the path of a URI
+     *
+     * @param $path
+     *
+     * @return string
+     */
+    private function filterPath($path)
+    {
+        return preg_replace_callback(
+            '/(?:[^' . self::$charUnreserved . self::$charSubDelims . ':@\/%]+|%(?![A-Fa-f0-9]{2}))/',
+            [$this, 'rawurlencodeMatchZero'],
+            $path
+        );
+    }
+
+    /**
+     * Filters the query string or fragment of a URI.
+     *
+     * @param $str
+     *
+     * @return string
+     */
+    private function filterQueryAndFragment($str)
+    {
+        return preg_replace_callback(
+            '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/',
+            [$this, 'rawurlencodeMatchZero'],
+            $str
+        );
+    }
+
+    private function rawurlencodeMatchZero(array $match)
+    {
+        return rawurlencode($match[0]);
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/src/functions.php b/core/vendor/guzzlehttp/psr7/src/functions.php
new file mode 100644
index 0000000..a1cec41
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/src/functions.php
@@ -0,0 +1,799 @@
+<?php
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\MessageInterface;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\StreamInterface;
+use Psr\Http\Message\UriInterface;
+
+/**
+ * Returns the string representation of an HTTP message.
+ *
+ * @param MessageInterface $message Message to convert to a string.
+ *
+ * @return string
+ */
+function str(MessageInterface $message)
+{
+    if ($message instanceof RequestInterface) {
+        $msg = trim($message->getMethod() . ' '
+                . $message->getRequestTarget())
+            . ' HTTP/' . $message->getProtocolVersion();
+        if (!$message->hasHeader('host')) {
+            $msg .= "\r\nHost: " . $message->getUri()->getHost();
+        }
+    } elseif ($message instanceof ResponseInterface) {
+        $msg = 'HTTP/' . $message->getProtocolVersion() . ' '
+            . $message->getStatusCode() . ' '
+            . $message->getReasonPhrase();
+    } else {
+        throw new \InvalidArgumentException('Unknown message type');
+    }
+
+    foreach ($message->getHeaders() as $name => $values) {
+        $msg .= "\r\n{$name}: " . implode(', ', $values);
+    }
+
+    return "{$msg}\r\n\r\n" . $message->getBody();
+}
+
+/**
+ * Returns a UriInterface for the given value.
+ *
+ * This function accepts a string or {@see Psr\Http\Message\UriInterface} and
+ * returns a UriInterface for the given value. If the value is already a
+ * `UriInterface`, it is returned as-is.
+ *
+ * @param string|UriInterface $uri
+ *
+ * @return UriInterface
+ * @throws \InvalidArgumentException
+ */
+function uri_for($uri)
+{
+    if ($uri instanceof UriInterface) {
+        return $uri;
+    } elseif (is_string($uri)) {
+        return new Uri($uri);
+    }
+
+    throw new \InvalidArgumentException('URI must be a string or UriInterface');
+}
+
+/**
+ * Create a new stream based on the input type.
+ *
+ * Options is an associative array that can contain the following keys:
+ * - metadata: Array of custom metadata.
+ * - size: Size of the stream.
+ *
+ * @param resource|string|StreamInterface $resource Entity body data
+ * @param array                           $options  Additional options
+ *
+ * @return Stream
+ * @throws \InvalidArgumentException if the $resource arg is not valid.
+ */
+function stream_for($resource = '', array $options = [])
+{
+    switch (gettype($resource)) {
+        case 'string':
+            $stream = fopen('php://temp', 'r+');
+            if ($resource !== '') {
+                fwrite($stream, $resource);
+                fseek($stream, 0);
+            }
+            return new Stream($stream, $options);
+        case 'resource':
+            return new Stream($resource, $options);
+        case 'object':
+            if ($resource instanceof StreamInterface) {
+                return $resource;
+            } elseif ($resource instanceof \Iterator) {
+                return new PumpStream(function () use ($resource) {
+                    if (!$resource->valid()) {
+                        return false;
+                    }
+                    $result = $resource->current();
+                    $resource->next();
+                    return $result;
+                }, $options);
+            } elseif (method_exists($resource, '__toString')) {
+                return stream_for((string) $resource, $options);
+            }
+            break;
+        case 'NULL':
+            return new Stream(fopen('php://temp', 'r+'), $options);
+    }
+
+    if (is_callable($resource)) {
+        return new PumpStream($resource, $options);
+    }
+
+    throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource));
+}
+
+/**
+ * Parse an array of header values containing ";" separated data into an
+ * array of associative arrays representing the header key value pair
+ * data of the header. When a parameter does not contain a value, but just
+ * contains a key, this function will inject a key with a '' string value.
+ *
+ * @param string|array $header Header to parse into components.
+ *
+ * @return array Returns the parsed header values.
+ */
+function parse_header($header)
+{
+    static $trimmed = "\"'  \n\t\r";
+    $params = $matches = [];
+
+    foreach (normalize_header($header) as $val) {
+        $part = [];
+        foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
+            if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
+                $m = $matches[0];
+                if (isset($m[1])) {
+                    $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);
+                } else {
+                    $part[] = trim($m[0], $trimmed);
+                }
+            }
+        }
+        if ($part) {
+            $params[] = $part;
+        }
+    }
+
+    return $params;
+}
+
+/**
+ * Converts an array of header values that may contain comma separated
+ * headers into an array of headers with no comma separated values.
+ *
+ * @param string|array $header Header to normalize.
+ *
+ * @return array Returns the normalized header field values.
+ */
+function normalize_header($header)
+{
+    if (!is_array($header)) {
+        return array_map('trim', explode(',', $header));
+    }
+
+    $result = [];
+    foreach ($header as $value) {
+        foreach ((array) $value as $v) {
+            if (strpos($v, ',') === false) {
+                $result[] = $v;
+                continue;
+            }
+            foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) {
+                $result[] = trim($vv);
+            }
+        }
+    }
+
+    return $result;
+}
+
+/**
+ * Clone and modify a request with the given changes.
+ *
+ * The changes can be one of:
+ * - method: (string) Changes the HTTP method.
+ * - set_headers: (array) Sets the given headers.
+ * - remove_headers: (array) Remove the given headers.
+ * - body: (mixed) Sets the given body.
+ * - uri: (UriInterface) Set the URI.
+ * - query: (string) Set the query string value of the URI.
+ * - version: (string) Set the protocol version.
+ *
+ * @param RequestInterface $request Request to clone and modify.
+ * @param array            $changes Changes to apply.
+ *
+ * @return RequestInterface
+ */
+function modify_request(RequestInterface $request, array $changes)
+{
+    if (!$changes) {
+        return $request;
+    }
+
+    $headers = $request->getHeaders();
+
+    if (!isset($changes['uri'])) {
+        $uri = $request->getUri();
+    } else {
+        // Remove the host header if one is on the URI
+        if ($host = $changes['uri']->getHost()) {
+            $changes['set_headers']['Host'] = $host;
+        }
+        $uri = $changes['uri'];
+    }
+
+    if (!empty($changes['remove_headers'])) {
+        $headers = _caseless_remove($changes['remove_headers'], $headers);
+    }
+
+    if (!empty($changes['set_headers'])) {
+        $headers = _caseless_remove(array_keys($changes['set_headers']), $headers);
+        $headers = $changes['set_headers'] + $headers;
+    }
+
+    if (isset($changes['query'])) {
+        $uri = $uri->withQuery($changes['query']);
+    }
+
+    return new Request(
+        isset($changes['method']) ? $changes['method'] : $request->getMethod(),
+        $uri,
+        $headers,
+        isset($changes['body']) ? $changes['body'] : $request->getBody(),
+        isset($changes['version'])
+            ? $changes['version']
+            : $request->getProtocolVersion()
+    );
+}
+
+/**
+ * Attempts to rewind a message body and throws an exception on failure.
+ *
+ * The body of the message will only be rewound if a call to `tell()` returns a
+ * value other than `0`.
+ *
+ * @param MessageInterface $message Message to rewind
+ *
+ * @throws \RuntimeException
+ */
+function rewind_body(MessageInterface $message)
+{
+    $body = $message->getBody();
+
+    if ($body->tell()) {
+        $body->rewind();
+    }
+}
+
+/**
+ * Safely opens a PHP stream resource using a filename.
+ *
+ * When fopen fails, PHP normally raises a warning. This function adds an
+ * error handler that checks for errors and throws an exception instead.
+ *
+ * @param string $filename File to open
+ * @param string $mode     Mode used to open the file
+ *
+ * @return resource
+ * @throws \RuntimeException if the file cannot be opened
+ */
+function try_fopen($filename, $mode)
+{
+    $ex = null;
+    set_error_handler(function () use ($filename, $mode, &$ex) {
+        $ex = new \RuntimeException(sprintf(
+            'Unable to open %s using mode %s: %s',
+            $filename,
+            $mode,
+            func_get_args()[1]
+        ));
+    });
+
+    $handle = fopen($filename, $mode);
+    restore_error_handler();
+
+    if ($ex) {
+        /** @var $ex \RuntimeException */
+        throw $ex;
+    }
+
+    return $handle;
+}
+
+/**
+ * Copy the contents of a stream into a string until the given number of
+ * bytes have been read.
+ *
+ * @param StreamInterface $stream Stream to read
+ * @param int             $maxLen Maximum number of bytes to read. Pass -1
+ *                                to read the entire stream.
+ * @return string
+ * @throws \RuntimeException on error.
+ */
+function copy_to_string(StreamInterface $stream, $maxLen = -1)
+{
+    $buffer = '';
+
+    if ($maxLen === -1) {
+        while (!$stream->eof()) {
+            $buf = $stream->read(1048576);
+            // Using a loose equality here to match on '' and false.
+            if ($buf == null) {
+                break;
+            }
+            $buffer .= $buf;
+        }
+        return $buffer;
+    }
+
+    $len = 0;
+    while (!$stream->eof() && $len < $maxLen) {
+        $buf = $stream->read($maxLen - $len);
+        // Using a loose equality here to match on '' and false.
+        if ($buf == null) {
+            break;
+        }
+        $buffer .= $buf;
+        $len = strlen($buffer);
+    }
+
+    return $buffer;
+}
+
+/**
+ * Copy the contents of a stream into another stream until the given number
+ * of bytes have been read.
+ *
+ * @param StreamInterface $source Stream to read from
+ * @param StreamInterface $dest   Stream to write to
+ * @param int             $maxLen Maximum number of bytes to read. Pass -1
+ *                                to read the entire stream.
+ *
+ * @throws \RuntimeException on error.
+ */
+function copy_to_stream(
+    StreamInterface $source,
+    StreamInterface $dest,
+    $maxLen = -1
+) {
+    if ($maxLen === -1) {
+        while (!$source->eof()) {
+            if (!$dest->write($source->read(1048576))) {
+                break;
+            }
+        }
+        return;
+    }
+
+    $bytes = 0;
+    while (!$source->eof()) {
+        $buf = $source->read($maxLen - $bytes);
+        if (!($len = strlen($buf))) {
+            break;
+        }
+        $bytes += $len;
+        $dest->write($buf);
+        if ($bytes == $maxLen) {
+            break;
+        }
+    }
+}
+
+/**
+ * Calculate a hash of a Stream
+ *
+ * @param StreamInterface $stream    Stream to calculate the hash for
+ * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)
+ * @param bool            $rawOutput Whether or not to use raw output
+ *
+ * @return string Returns the hash of the stream
+ * @throws \RuntimeException on error.
+ */
+function hash(
+    StreamInterface $stream,
+    $algo,
+    $rawOutput = false
+) {
+    $pos = $stream->tell();
+
+    if ($pos > 0) {
+        $stream->rewind();
+    }
+
+    $ctx = hash_init($algo);
+    while (!$stream->eof()) {
+        hash_update($ctx, $stream->read(1048576));
+    }
+
+    $out = hash_final($ctx, (bool) $rawOutput);
+    $stream->seek($pos);
+
+    return $out;
+}
+
+/**
+ * Read a line from the stream up to the maximum allowed buffer length
+ *
+ * @param StreamInterface $stream    Stream to read from
+ * @param int             $maxLength Maximum buffer length
+ *
+ * @return string|bool
+ */
+function readline(StreamInterface $stream, $maxLength = null)
+{
+    $buffer = '';
+    $size = 0;
+
+    while (!$stream->eof()) {
+        // Using a loose equality here to match on '' and false.
+        if (null == ($byte = $stream->read(1))) {
+            return $buffer;
+        }
+        $buffer .= $byte;
+        // Break when a new line is found or the max length - 1 is reached
+        if ($byte == PHP_EOL || ++$size == $maxLength - 1) {
+            break;
+        }
+    }
+
+    return $buffer;
+}
+
+/**
+ * Parses a request message string into a request object.
+ *
+ * @param string $message Request message string.
+ *
+ * @return Request
+ */
+function parse_request($message)
+{
+    $data = _parse_message($message);
+    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';
+
+    return new Request(
+        $parts[0],
+        _parse_request_uri($parts[1], $data['headers']),
+        $data['headers'],
+        $data['body'],
+        $version
+    );
+}
+
+/**
+ * Parses a response message string into a response object.
+ *
+ * @param string $message Response message string.
+ *
+ * @return Response
+ */
+function parse_response($message)
+{
+    $data = _parse_message($message);
+    if (!preg_match('/^HTTP\/.* [0-9]{3} .*/', $data['start-line'])) {
+        throw new \InvalidArgumentException('Invalid response string');
+    }
+    $parts = explode(' ', $data['start-line'], 3);
+
+    return new Response(
+        $parts[1],
+        $data['headers'],
+        $data['body'],
+        explode('/', $parts[0])[1],
+        isset($parts[2]) ? $parts[2] : null
+    );
+}
+
+/**
+ * Parse a query string into an associative array.
+ *
+ * If multiple values are found for the same key, the value of that key
+ * value pair will become an array. This function does not parse nested
+ * PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will
+ * be parsed into ['foo[a]' => '1', 'foo[b]' => '2']).
+ *
+ * @param string      $str         Query string to parse
+ * @param bool|string $urlEncoding How the query string is encoded
+ *
+ * @return array
+ */
+function parse_query($str, $urlEncoding = true)
+{
+    $result = [];
+
+    if ($str === '') {
+        return $result;
+    }
+
+    if ($urlEncoding === true) {
+        $decoder = function ($value) {
+            return rawurldecode(str_replace('+', ' ', $value));
+        };
+    } elseif ($urlEncoding == PHP_QUERY_RFC3986) {
+        $decoder = 'rawurldecode';
+    } elseif ($urlEncoding == PHP_QUERY_RFC1738) {
+        $decoder = 'urldecode';
+    } else {
+        $decoder = function ($str) { return $str; };
+    }
+
+    foreach (explode('&', $str) as $kvp) {
+        $parts = explode('=', $kvp, 2);
+        $key = $decoder($parts[0]);
+        $value = isset($parts[1]) ? $decoder($parts[1]) : null;
+        if (!isset($result[$key])) {
+            $result[$key] = $value;
+        } else {
+            if (!is_array($result[$key])) {
+                $result[$key] = [$result[$key]];
+            }
+            $result[$key][] = $value;
+        }
+    }
+
+    return $result;
+}
+
+/**
+ * Build a query string from an array of key value pairs.
+ *
+ * This function can use the return value of parseQuery() to build a query
+ * string. This function does not modify the provided keys when an array is
+ * encountered (like http_build_query would).
+ *
+ * @param array     $params   Query string parameters.
+ * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986
+ *                            to encode using RFC3986, or PHP_QUERY_RFC1738
+ *                            to encode using RFC1738.
+ * @return string
+ */
+function build_query(array $params, $encoding = PHP_QUERY_RFC3986)
+{
+    if (!$params) {
+        return '';
+    }
+
+    if ($encoding === false) {
+        $encoder = function ($str) { return $str; };
+    } elseif ($encoding == PHP_QUERY_RFC3986) {
+        $encoder = 'rawurlencode';
+    } elseif ($encoding == PHP_QUERY_RFC1738) {
+        $encoder = 'urlencode';
+    } else {
+        throw new \InvalidArgumentException('Invalid type');
+    }
+
+    $qs = '';
+    foreach ($params as $k => $v) {
+        $k = $encoder($k);
+        if (!is_array($v)) {
+            $qs .= $k;
+            if ($v !== null) {
+                $qs .= '=' . $encoder($v);
+            }
+            $qs .= '&';
+        } else {
+            foreach ($v as $vv) {
+                $qs .= $k;
+                if ($vv !== null) {
+                    $qs .= '=' . $encoder($vv);
+                }
+                $qs .= '&';
+            }
+        }
+    }
+
+    return $qs ? (string) substr($qs, 0, -1) : '';
+}
+
+/**
+ * Determines the mimetype of a file by looking at its extension.
+ *
+ * @param $filename
+ *
+ * @return null|string
+ */
+function mimetype_from_filename($filename)
+{
+    return mimetype_from_extension(pathinfo($filename, PATHINFO_EXTENSION));
+}
+
+/**
+ * Maps a file extensions to a mimetype.
+ *
+ * @param $extension string The file extension.
+ *
+ * @return string|null
+ * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types
+ */
+function mimetype_from_extension($extension)
+{
+    static $mimetypes = [
+        '7z' => 'application/x-7z-compressed',
+        'aac' => 'audio/x-aac',
+        'ai' => 'application/postscript',
+        'aif' => 'audio/x-aiff',
+        'asc' => 'text/plain',
+        'asf' => 'video/x-ms-asf',
+        'atom' => 'application/atom+xml',
+        'avi' => 'video/x-msvideo',
+        'bmp' => 'image/bmp',
+        'bz2' => 'application/x-bzip2',
+        'cer' => 'application/pkix-cert',
+        'crl' => 'application/pkix-crl',
+        'crt' => 'application/x-x509-ca-cert',
+        'css' => 'text/css',
+        'csv' => 'text/csv',
+        'cu' => 'application/cu-seeme',
+        'deb' => 'application/x-debian-package',
+        'doc' => 'application/msword',
+        'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+        'dvi' => 'application/x-dvi',
+        'eot' => 'application/vnd.ms-fontobject',
+        'eps' => 'application/postscript',
+        'epub' => 'application/epub+zip',
+        'etx' => 'text/x-setext',
+        'flac' => 'audio/flac',
+        'flv' => 'video/x-flv',
+        'gif' => 'image/gif',
+        'gz' => 'application/gzip',
+        'htm' => 'text/html',
+        'html' => 'text/html',
+        'ico' => 'image/x-icon',
+        'ics' => 'text/calendar',
+        'ini' => 'text/plain',
+        'iso' => 'application/x-iso9660-image',
+        'jar' => 'application/java-archive',
+        'jpe' => 'image/jpeg',
+        'jpeg' => 'image/jpeg',
+        'jpg' => 'image/jpeg',
+        'js' => 'text/javascript',
+        'json' => 'application/json',
+        'latex' => 'application/x-latex',
+        'log' => 'text/plain',
+        'm4a' => 'audio/mp4',
+        'm4v' => 'video/mp4',
+        'mid' => 'audio/midi',
+        'midi' => 'audio/midi',
+        'mov' => 'video/quicktime',
+        'mp3' => 'audio/mpeg',
+        'mp4' => 'video/mp4',
+        'mp4a' => 'audio/mp4',
+        'mp4v' => 'video/mp4',
+        'mpe' => 'video/mpeg',
+        'mpeg' => 'video/mpeg',
+        'mpg' => 'video/mpeg',
+        'mpg4' => 'video/mp4',
+        'oga' => 'audio/ogg',
+        'ogg' => 'audio/ogg',
+        'ogv' => 'video/ogg',
+        'ogx' => 'application/ogg',
+        'pbm' => 'image/x-portable-bitmap',
+        'pdf' => 'application/pdf',
+        'pgm' => 'image/x-portable-graymap',
+        'png' => 'image/png',
+        'pnm' => 'image/x-portable-anymap',
+        'ppm' => 'image/x-portable-pixmap',
+        'ppt' => 'application/vnd.ms-powerpoint',
+        'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+        'ps' => 'application/postscript',
+        'qt' => 'video/quicktime',
+        'rar' => 'application/x-rar-compressed',
+        'ras' => 'image/x-cmu-raster',
+        'rss' => 'application/rss+xml',
+        'rtf' => 'application/rtf',
+        'sgm' => 'text/sgml',
+        'sgml' => 'text/sgml',
+        'svg' => 'image/svg+xml',
+        'swf' => 'application/x-shockwave-flash',
+        'tar' => 'application/x-tar',
+        'tif' => 'image/tiff',
+        'tiff' => 'image/tiff',
+        'torrent' => 'application/x-bittorrent',
+        'ttf' => 'application/x-font-ttf',
+        'txt' => 'text/plain',
+        'wav' => 'audio/x-wav',
+        'webm' => 'video/webm',
+        'wma' => 'audio/x-ms-wma',
+        'wmv' => 'video/x-ms-wmv',
+        'woff' => 'application/x-font-woff',
+        'wsdl' => 'application/wsdl+xml',
+        'xbm' => 'image/x-xbitmap',
+        'xls' => 'application/vnd.ms-excel',
+        'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+        'xml' => 'application/xml',
+        'xpm' => 'image/x-xpixmap',
+        'xwd' => 'image/x-xwindowdump',
+        'yaml' => 'text/yaml',
+        'yml' => 'text/yaml',
+        'zip' => 'application/zip',
+    ];
+
+    $extension = strtolower($extension);
+
+    return isset($mimetypes[$extension])
+        ? $mimetypes[$extension]
+        : null;
+}
+
+/**
+ * Parses an HTTP message into an associative array.
+ *
+ * The array contains the "start-line" key containing the start line of
+ * the message, "headers" key containing an associative array of header
+ * array values, and a "body" key containing the body of the message.
+ *
+ * @param string $message HTTP request or response to parse.
+ *
+ * @return array
+ * @internal
+ */
+function _parse_message($message)
+{
+    if (!$message) {
+        throw new \InvalidArgumentException('Invalid message');
+    }
+
+    // Iterate over each line in the message, accounting for line endings
+    $lines = preg_split('/(\\r?\\n)/', $message, -1, PREG_SPLIT_DELIM_CAPTURE);
+    $result = ['start-line' => array_shift($lines), 'headers' => [], 'body' => ''];
+    array_shift($lines);
+
+    for ($i = 0, $totalLines = count($lines); $i < $totalLines; $i += 2) {
+        $line = $lines[$i];
+        // If two line breaks were encountered, then this is the end of body
+        if (empty($line)) {
+            if ($i < $totalLines - 1) {
+                $result['body'] = implode('', array_slice($lines, $i + 2));
+            }
+            break;
+        }
+        if (strpos($line, ':')) {
+            $parts = explode(':', $line, 2);
+            $key = trim($parts[0]);
+            $value = isset($parts[1]) ? trim($parts[1]) : '';
+            $result['headers'][$key][] = $value;
+        }
+    }
+
+    return $result;
+}
+
+/**
+ * Constructs a URI for an HTTP request message.
+ *
+ * @param string $path    Path from the start-line
+ * @param array  $headers Array of headers (each value an array).
+ *
+ * @return string
+ * @internal
+ */
+function _parse_request_uri($path, array $headers)
+{
+    $hostKey = array_filter(array_keys($headers), function ($k) {
+        return strtolower($k) === 'host';
+    });
+
+    // If no host is found, then a full URI cannot be constructed.
+    if (!$hostKey) {
+        return $path;
+    }
+
+    $host = $headers[reset($hostKey)][0];
+    $scheme = substr($host, -4) === ':443' ? 'https' : 'http';
+
+    return $scheme . '://' . $host . '/' . ltrim($path, '/');
+}
+
+/** @internal */
+function _caseless_remove($keys, array $data)
+{
+    $result = [];
+
+    foreach ($keys as &$key) {
+        $key = strtolower($key);
+    }
+
+    foreach ($data as $k => $v) {
+        if (!in_array(strtolower($k), $keys)) {
+            $result[$k] = $v;
+        }
+    }
+
+    return $result;
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/AppendStreamTest.php
similarity index 69%
rename from core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/AppendStreamTest.php
index 78798d9..3c197dc 100644
--- a/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/AppendStreamTest.php
@@ -1,8 +1,8 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\AppendStream;
-use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Psr7\AppendStream;
+use GuzzleHttp\Psr7;
 
 class AppendStreamTest extends \PHPUnit_Framework_TestCase
 {
@@ -13,7 +13,7 @@ class AppendStreamTest extends \PHPUnit_Framework_TestCase
     public function testValidatesStreamsAreReadable()
     {
         $a = new AppendStream();
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+        $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
             ->setMethods(['isReadable'])
             ->getMockForAbstractClass();
         $s->expects($this->once())
@@ -22,17 +22,25 @@ public function testValidatesStreamsAreReadable()
         $a->addStream($s);
     }
 
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage The AppendStream can only seek with SEEK_SET
+     */
     public function testValidatesSeekType()
     {
         $a = new AppendStream();
-        $this->assertFalse($a->seek(100, SEEK_CUR));
+        $a->seek(100, SEEK_CUR);
     }
 
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Unable to seek stream 0 of the AppendStream
+     */
     public function testTriesToRewindOnSeek()
     {
         $a = new AppendStream();
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['isReadable', 'seek', 'isSeekable'])
+        $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
+            ->setMethods(['isReadable', 'rewind', 'isSeekable'])
             ->getMockForAbstractClass();
         $s->expects($this->once())
             ->method('isReadable')
@@ -41,23 +49,24 @@ public function testTriesToRewindOnSeek()
             ->method('isSeekable')
             ->will($this->returnValue(true));
         $s->expects($this->once())
-            ->method('seek')
-            ->will($this->returnValue(false));
+            ->method('rewind')
+            ->will($this->throwException(new \RuntimeException()));
         $a->addStream($s);
-        $this->assertFalse($a->seek(10));
+        $a->seek(10);
     }
 
     public function testSeeksToPositionByReading()
     {
         $a = new AppendStream([
-            Stream::factory('foo'),
-            Stream::factory('bar'),
-            Stream::factory('baz'),
+            Psr7\stream_for('foo'),
+            Psr7\stream_for('bar'),
+            Psr7\stream_for('baz'),
         ]);
 
-        $this->assertTrue($a->seek(3));
+        $a->seek(3);
         $this->assertEquals(3, $a->tell());
         $this->assertEquals('bar', $a->read(3));
+
         $a->seek(6);
         $this->assertEquals(6, $a->tell());
         $this->assertEquals('baz', $a->read(3));
@@ -65,10 +74,10 @@ public function testSeeksToPositionByReading()
 
     public function testDetachesEachStream()
     {
-        $s1 = Stream::factory('foo');
-        $s2 = Stream::factory('foo');
+        $s1 = Psr7\stream_for('foo');
+        $s2 = Psr7\stream_for('bar');
         $a = new AppendStream([$s1, $s2]);
-        $this->assertSame('foofoo', (string) $a);
+        $this->assertSame('foobar', (string) $a);
         $a->detach();
         $this->assertSame('', (string) $a);
         $this->assertSame(0, $a->getSize());
@@ -76,19 +85,23 @@ public function testDetachesEachStream()
 
     public function testClosesEachStream()
     {
-        $s1 = Stream::factory('foo');
+        $s1 = Psr7\stream_for('foo');
         $a = new AppendStream([$s1]);
         $a->close();
         $this->assertSame('', (string) $a);
     }
 
+    /**
+     * @expectedExceptionMessage Cannot write to an AppendStream
+     * @expectedException \RuntimeException
+     */
     public function testIsNotWritable()
     {
-        $a = new AppendStream([Stream::factory('foo')]);
+        $a = new AppendStream([Psr7\stream_for('foo')]);
         $this->assertFalse($a->isWritable());
         $this->assertTrue($a->isSeekable());
         $this->assertTrue($a->isReadable());
-        $this->assertFalse($a->write('foo'));
+        $a->write('foo');
     }
 
     public function testDoesNotNeedStreams()
@@ -100,15 +113,16 @@ public function testDoesNotNeedStreams()
     public function testCanReadFromMultipleStreams()
     {
         $a = new AppendStream([
-            Stream::factory('foo'),
-            Stream::factory('bar'),
-            Stream::factory('baz'),
+            Psr7\stream_for('foo'),
+            Psr7\stream_for('bar'),
+            Psr7\stream_for('baz'),
         ]);
         $this->assertFalse($a->eof());
         $this->assertSame(0, $a->tell());
         $this->assertEquals('foo', $a->read(3));
         $this->assertEquals('bar', $a->read(3));
         $this->assertEquals('baz', $a->read(3));
+        $this->assertSame('', $a->read(1));
         $this->assertTrue($a->eof());
         $this->assertSame(9, $a->tell());
         $this->assertEquals('foobarbaz', (string) $a);
@@ -117,12 +131,12 @@ public function testCanReadFromMultipleStreams()
     public function testCanDetermineSizeFromMultipleStreams()
     {
         $a = new AppendStream([
-            Stream::factory('foo'),
-            Stream::factory('bar')
+            Psr7\stream_for('foo'),
+            Psr7\stream_for('bar')
         ]);
         $this->assertEquals(6, $a->getSize());
 
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+        $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
             ->setMethods(['isSeekable', 'isReadable'])
             ->getMockForAbstractClass();
         $s->expects($this->once())
@@ -137,10 +151,13 @@ public function testCanDetermineSizeFromMultipleStreams()
 
     public function testCatchesExceptionsWhenCastingToString()
     {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['read', 'isReadable', 'eof'])
+        $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
+            ->setMethods(['isSeekable', 'read', 'isReadable', 'eof'])
             ->getMockForAbstractClass();
         $s->expects($this->once())
+            ->method('isSeekable')
+            ->will($this->returnValue(true));
+        $s->expects($this->once())
             ->method('read')
             ->will($this->throwException(new \RuntimeException('foo')));
         $s->expects($this->once())
@@ -166,13 +183,4 @@ public function testReturnsEmptyMetadata()
         $this->assertEquals([], $s->getMetadata());
         $this->assertNull($s->getMetadata('foo'));
     }
-
-    /**
-     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
-     */
-    public function testCannotAttach()
-    {
-        $p = new AppendStream();
-        $p->attach('a');
-    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/BufferStreamTest.php
similarity index 83%
rename from core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/BufferStreamTest.php
index f9bfea2..0a635d4 100644
--- a/core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/BufferStreamTest.php
@@ -1,7 +1,7 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\BufferStream;
+use GuzzleHttp\Psr7\BufferStream;
 
 class BufferStreamTest extends \PHPUnit_Framework_TestCase
 {
@@ -27,6 +27,10 @@ public function testRemovesReadDataFromBuffer()
         $this->assertEquals('', $b->read(10));
     }
 
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Cannot determine the position of a BufferStream
+     */
     public function testCanCastToStringOrGetContents()
     {
         $b = new BufferStream();
@@ -35,7 +39,7 @@ public function testCanCastToStringOrGetContents()
         $this->assertEquals('foo', $b->read(3));
         $b->write('bar');
         $this->assertEquals('bazbar', (string) $b);
-        $this->assertFalse($b->tell());
+        $b->tell();
     }
 
     public function testDetachClearsBuffer()
@@ -43,7 +47,6 @@ public function testDetachClearsBuffer()
         $b = new BufferStream();
         $b->write('foo');
         $b->detach();
-        $this->assertEquals(0, $b->tell());
         $this->assertTrue($b->eof());
         $this->assertEquals(3, $b->write('abc'));
         $this->assertEquals('abc', $b->read(10));
@@ -57,13 +60,4 @@ public function testExceedingHighwaterMarkReturnsFalseButStillBuffers()
         $this->assertEquals('hi hello', (string) $b);
         $this->assertEquals(4, $b->write('test'));
     }
-
-    /**
-     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
-     */
-    public function testCannotAttach()
-    {
-        $p = new BufferStream();
-        $p->attach('a');
-    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php
similarity index 73%
rename from core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php
index ea969b3..e2ed0a7 100644
--- a/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php
@@ -1,24 +1,21 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\CachingStream;
-use GuzzleHttp\Stream\Utils;
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\CachingStream;
 
 /**
- * @covers GuzzleHttp\Stream\CachingStream
+ * @covers GuzzleHttp\Psr7\CachingStream
  */
 class CachingStreamTest extends \PHPUnit_Framework_TestCase
 {
     /** @var CachingStream */
     protected $body;
-
-    /** @var Stream */
     protected $decorated;
 
     public function setUp()
     {
-        $this->decorated = Stream::factory('testing');
+        $this->decorated = Psr7\stream_for('testing');
         $this->body = new CachingStream($this->decorated);
     }
 
@@ -30,7 +27,7 @@ public function tearDown()
 
     public function testUsesRemoteSizeIfPossible()
     {
-        $body = Stream::factory('test');
+        $body = Psr7\stream_for('test');
         $caching = new CachingStream($body);
         $this->assertEquals(4, $caching->getSize());
     }
@@ -44,15 +41,19 @@ public function testCannotSeekPastWhatHasBeenRead()
         $this->body->seek(10);
     }
 
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage CachingStream::seek() supports SEEK_SET and SEEK_CUR
+     */
     public function testCannotUseSeekEnd()
     {
-        $this->assertFalse($this->body->seek(2, SEEK_END));
+        $this->body->seek(2, SEEK_END);
     }
 
     public function testRewindUsesSeek()
     {
-        $a = Stream::factory('foo');
-        $d = $this->getMockBuilder('GuzzleHttp\Stream\CachingStream')
+        $a = Psr7\stream_for('foo');
+        $d = $this->getMockBuilder('GuzzleHttp\Psr7\CachingStream')
             ->setMethods(array('seek'))
             ->setConstructorArgs(array($a))
             ->getMock();
@@ -86,7 +87,7 @@ public function testWritesToBufferStream()
 
     public function testSkipsOverwrittenBytes()
     {
-        $decorated = Stream::factory(
+        $decorated = Psr7\stream_for(
             implode("\n", array_map(function ($n) {
                 return str_pad($n, 4, '0', STR_PAD_LEFT);
             }, range(0, 25)))
@@ -94,26 +95,26 @@ public function testSkipsOverwrittenBytes()
 
         $body = new CachingStream($decorated);
 
-        $this->assertEquals("0000\n", Utils::readline($body));
-        $this->assertEquals("0001\n", Utils::readline($body));
+        $this->assertEquals("0000\n", Psr7\readline($body));
+        $this->assertEquals("0001\n", Psr7\readline($body));
         // Write over part of the body yet to be read, so skip some bytes
         $this->assertEquals(5, $body->write("TEST\n"));
         $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes'));
         // Read, which skips bytes, then reads
-        $this->assertEquals("0003\n", Utils::readline($body));
+        $this->assertEquals("0003\n", Psr7\readline($body));
         $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes'));
-        $this->assertEquals("0004\n", Utils::readline($body));
-        $this->assertEquals("0005\n", Utils::readline($body));
+        $this->assertEquals("0004\n", Psr7\readline($body));
+        $this->assertEquals("0005\n", Psr7\readline($body));
 
         // Overwrite part of the cached body (so don't skip any bytes)
         $body->seek(5);
         $this->assertEquals(5, $body->write("ABCD\n"));
         $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes'));
-        $this->assertEquals("TEST\n", Utils::readline($body));
-        $this->assertEquals("0003\n", Utils::readline($body));
-        $this->assertEquals("0004\n", Utils::readline($body));
-        $this->assertEquals("0005\n", Utils::readline($body));
-        $this->assertEquals("0006\n", Utils::readline($body));
+        $this->assertEquals("TEST\n", Psr7\readline($body));
+        $this->assertEquals("0003\n", Psr7\readline($body));
+        $this->assertEquals("0004\n", Psr7\readline($body));
+        $this->assertEquals("0005\n", Psr7\readline($body));
+        $this->assertEquals("0006\n", Psr7\readline($body));
         $this->assertEquals(5, $body->write("1234\n"));
         $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes'));
 
@@ -128,7 +129,7 @@ public function testSkipsOverwrittenBytes()
     public function testClosesBothStreams()
     {
         $s = fopen('php://temp', 'r');
-        $a = Stream::factory($s);
+        $a = Psr7\stream_for($s);
         $d = new CachingStream($a);
         $d->close();
         $this->assertFalse(is_resource($s));
diff --git a/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/DroppingStreamTest.php
similarity index 77%
rename from core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/DroppingStreamTest.php
index bb2cb22..915b215 100644
--- a/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/DroppingStreamTest.php
@@ -1,8 +1,8 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\BufferStream;
-use GuzzleHttp\Stream\DroppingStream;
+use GuzzleHttp\Psr7\BufferStream;
+use GuzzleHttp\Psr7\DroppingStream;
 
 class DroppingStreamTest extends \PHPUnit_Framework_TestCase
 {
@@ -11,7 +11,7 @@ public function testBeginsDroppingWhenSizeExceeded()
         $stream = new BufferStream();
         $drop = new DroppingStream($stream, 5);
         $this->assertEquals(3, $drop->write('hel'));
-        $this->assertFalse($drop->write('lo'));
+        $this->assertEquals(2, $drop->write('lo'));
         $this->assertEquals(5, $drop->getSize());
         $this->assertEquals('hello', $drop->read(5));
         $this->assertEquals(0, $drop->getSize());
@@ -21,6 +21,6 @@ public function testBeginsDroppingWhenSizeExceeded()
         $this->assertEquals('12345', (string) $drop);
         $this->assertEquals(0, $drop->getSize());
         $drop->write('hello');
-        $this->assertFalse($drop->write('test'));
+        $this->assertSame(0, $drop->write('test'));
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/FnStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/FnStreamTest.php
similarity index 90%
rename from core/vendor/guzzlehttp/streams/tests/FnStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/FnStreamTest.php
index 6cc336b..66ae90a 100644
--- a/core/vendor/guzzlehttp/streams/tests/FnStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/FnStreamTest.php
@@ -1,11 +1,11 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\FnStream;
 
 /**
- * @covers GuzzleHttp\Stream\FnStream
+ * @covers GuzzleHttp\Psr7\FnStream
  */
 class FnStreamTest extends \PHPUnit_Framework_TestCase
 {
@@ -50,7 +50,7 @@ public function testDoesNotRequireClose()
 
     public function testDecoratesStream()
     {
-        $a = Stream::factory('foo');
+        $a = Psr7\stream_for('foo');
         $b = FnStream::decorate($a, []);
         $this->assertEquals(3, $b->getSize());
         $this->assertEquals($b->isWritable(), true);
@@ -59,6 +59,7 @@ public function testDecoratesStream()
         $this->assertEquals($b->read(3), 'foo');
         $this->assertEquals($b->tell(), 3);
         $this->assertEquals($a->tell(), 3);
+        $this->assertSame('', $a->read(1));
         $this->assertEquals($b->eof(), true);
         $this->assertEquals($a->eof(), true);
         $b->seek(0);
@@ -76,7 +77,7 @@ public function testDecoratesStream()
     public function testDecoratesWithCustomizations()
     {
         $called = false;
-        $a = Stream::factory('foo');
+        $a = Psr7\stream_for('foo');
         $b = FnStream::decorate($a, [
             'read' => function ($len) use (&$called, $a) {
                 $called = true;
diff --git a/core/vendor/guzzlehttp/psr7/tests/FunctionsTest.php b/core/vendor/guzzlehttp/psr7/tests/FunctionsTest.php
new file mode 100644
index 0000000..6675039
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/tests/FunctionsTest.php
@@ -0,0 +1,574 @@
+<?php
+namespace GuzzleHttp\Tests\Psr7;
+
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\FnStream;
+use GuzzleHttp\Psr7\NoSeekStream;
+
+class FunctionsTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCopiesToString()
+    {
+        $s = Psr7\stream_for('foobaz');
+        $this->assertEquals('foobaz', Psr7\copy_to_string($s));
+        $s->seek(0);
+        $this->assertEquals('foo', Psr7\copy_to_string($s, 3));
+        $this->assertEquals('baz', Psr7\copy_to_string($s, 3));
+        $this->assertEquals('', Psr7\copy_to_string($s));
+    }
+
+    public function testCopiesToStringStopsWhenReadFails()
+    {
+        $s1 = Psr7\stream_for('foobaz');
+        $s1 = FnStream::decorate($s1, [
+            'read' => function () { return ''; }
+        ]);
+        $result = Psr7\copy_to_string($s1);
+        $this->assertEquals('', $result);
+    }
+
+    public function testCopiesToStream()
+    {
+        $s1 = Psr7\stream_for('foobaz');
+        $s2 = Psr7\stream_for('');
+        Psr7\copy_to_stream($s1, $s2);
+        $this->assertEquals('foobaz', (string) $s2);
+        $s2 = Psr7\stream_for('');
+        $s1->seek(0);
+        Psr7\copy_to_stream($s1, $s2, 3);
+        $this->assertEquals('foo', (string) $s2);
+        Psr7\copy_to_stream($s1, $s2, 3);
+        $this->assertEquals('foobaz', (string) $s2);
+    }
+
+    public function testStopsCopyToStreamWhenWriteFails()
+    {
+        $s1 = Psr7\stream_for('foobaz');
+        $s2 = Psr7\stream_for('');
+        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
+        Psr7\copy_to_stream($s1, $s2);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testStopsCopyToSteamWhenWriteFailsWithMaxLen()
+    {
+        $s1 = Psr7\stream_for('foobaz');
+        $s2 = Psr7\stream_for('');
+        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
+        Psr7\copy_to_stream($s1, $s2, 10);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testStopsCopyToSteamWhenReadFailsWithMaxLen()
+    {
+        $s1 = Psr7\stream_for('foobaz');
+        $s1 = FnStream::decorate($s1, ['read' => function () { return ''; }]);
+        $s2 = Psr7\stream_for('');
+        Psr7\copy_to_stream($s1, $s2, 10);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testReadsLines()
+    {
+        $s = Psr7\stream_for("foo\nbaz\nbar");
+        $this->assertEquals("foo\n", Psr7\readline($s));
+        $this->assertEquals("baz\n", Psr7\readline($s));
+        $this->assertEquals("bar", Psr7\readline($s));
+    }
+
+    public function testReadsLinesUpToMaxLength()
+    {
+        $s = Psr7\stream_for("12345\n");
+        $this->assertEquals("123", Psr7\readline($s, 4));
+        $this->assertEquals("45\n", Psr7\readline($s));
+    }
+
+    public function testReadsLineUntilFalseReturnedFromRead()
+    {
+        $s = $this->getMockBuilder('GuzzleHttp\Psr7\Stream')
+            ->setMethods(['read', 'eof'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $s->expects($this->exactly(2))
+            ->method('read')
+            ->will($this->returnCallback(function () {
+                static $c = false;
+                if ($c) {
+                    return false;
+                }
+                $c = true;
+                return 'h';
+            }));
+        $s->expects($this->exactly(2))
+            ->method('eof')
+            ->will($this->returnValue(false));
+        $this->assertEquals("h", Psr7\readline($s));
+    }
+
+    public function testCalculatesHash()
+    {
+        $s = Psr7\stream_for('foobazbar');
+        $this->assertEquals(md5('foobazbar'), Psr7\hash($s, 'md5'));
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testCalculatesHashThrowsWhenSeekFails()
+    {
+        $s = new NoSeekStream(Psr7\stream_for('foobazbar'));
+        $s->read(2);
+        Psr7\hash($s, 'md5');
+    }
+
+    public function testCalculatesHashSeeksToOriginalPosition()
+    {
+        $s = Psr7\stream_for('foobazbar');
+        $s->seek(4);
+        $this->assertEquals(md5('foobazbar'), Psr7\hash($s, 'md5'));
+        $this->assertEquals(4, $s->tell());
+    }
+
+    public function testOpensFilesSuccessfully()
+    {
+        $r = Psr7\try_fopen(__FILE__, 'r');
+        $this->assertInternalType('resource', $r);
+        fclose($r);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r
+     */
+    public function testThrowsExceptionNotWarning()
+    {
+        Psr7\try_fopen('/path/to/does/not/exist', 'r');
+    }
+
+    public function parseQueryProvider()
+    {
+        return [
+            // Does not need to parse when the string is empty
+            ['', []],
+            // Can parse mult-values items
+            ['q=a&q=b', ['q' => ['a', 'b']]],
+            // Can parse multi-valued items that use numeric indices
+            ['q[0]=a&q[1]=b', ['q[0]' => 'a', 'q[1]' => 'b']],
+            // Can parse duplicates and does not include numeric indices
+            ['q[]=a&q[]=b', ['q[]' => ['a', 'b']]],
+            // Ensures that the value of "q" is an array even though one value
+            ['q[]=a', ['q[]' => 'a']],
+            // Does not modify "." to "_" like PHP's parse_str()
+            ['q.a=a&q.b=b', ['q.a' => 'a', 'q.b' => 'b']],
+            // Can decode %20 to " "
+            ['q%20a=a%20b', ['q a' => 'a b']],
+            // Can parse funky strings with no values by assigning each to null
+            ['q&a', ['q' => null, 'a' => null]],
+            // Does not strip trailing equal signs
+            ['data=abc=', ['data' => 'abc=']],
+            // Can store duplicates without affecting other values
+            ['foo=a&foo=b&?Âµ=c', ['foo' => ['a', 'b'], '?Âµ' => 'c']],
+            // Sets value to null when no "=" is present
+            ['foo', ['foo' => null]],
+            // Preserves "0" keys.
+            ['0', ['0' => null]],
+            // Sets the value to an empty string when "=" is present
+            ['0=', ['0' => '']],
+            // Preserves falsey keys
+            ['var=0', ['var' => '0']],
+            ['a[b][c]=1&a[b][c]=2', ['a[b][c]' => ['1', '2']]],
+            ['a[b]=c&a[d]=e', ['a[b]' => 'c', 'a[d]' => 'e']],
+            // Ensure it doesn't leave things behind with repeated values
+            // Can parse mult-values items
+            ['q=a&q=b&q=c', ['q' => ['a', 'b', 'c']]],
+        ];
+    }
+
+    /**
+     * @dataProvider parseQueryProvider
+     */
+    public function testParsesQueries($input, $output)
+    {
+        $result = Psr7\parse_query($input);
+        $this->assertSame($output, $result);
+    }
+
+    public function testDoesNotDecode()
+    {
+        $str = 'foo%20=bar';
+        $data = Psr7\parse_query($str, false);
+        $this->assertEquals(['foo%20' => 'bar'], $data);
+    }
+
+    /**
+     * @dataProvider parseQueryProvider
+     */
+    public function testParsesAndBuildsQueries($input, $output)
+    {
+        $result = Psr7\parse_query($input, false);
+        $this->assertSame($input, Psr7\build_query($result, false));
+    }
+
+    public function testEncodesWithRfc1738()
+    {
+        $str = Psr7\build_query(['foo bar' => 'baz+'], PHP_QUERY_RFC1738);
+        $this->assertEquals('foo+bar=baz%2B', $str);
+    }
+
+    public function testEncodesWithRfc3986()
+    {
+        $str = Psr7\build_query(['foo bar' => 'baz+'], PHP_QUERY_RFC3986);
+        $this->assertEquals('foo%20bar=baz%2B', $str);
+    }
+
+    public function testDoesNotEncode()
+    {
+        $str = Psr7\build_query(['foo bar' => 'baz+'], false);
+        $this->assertEquals('foo bar=baz+', $str);
+    }
+
+    public function testCanControlDecodingType()
+    {
+        $result = Psr7\parse_query('var=foo+bar', PHP_QUERY_RFC3986);
+        $this->assertEquals('foo+bar', $result['var']);
+        $result = Psr7\parse_query('var=foo+bar', PHP_QUERY_RFC1738);
+        $this->assertEquals('foo bar', $result['var']);
+    }
+
+    public function testParsesRequestMessages()
+    {
+        $req = "GET /abc HTTP/1.0\r\nHost: foo.com\r\nFoo: Bar\r\nBaz: Bam\r\nBaz: Qux\r\n\r\nTest";
+        $request = Psr7\parse_request($req);
+        $this->assertEquals('GET', $request->getMethod());
+        $this->assertEquals('/abc', $request->getRequestTarget());
+        $this->assertEquals('1.0', $request->getProtocolVersion());
+        $this->assertEquals('foo.com', $request->getHeaderLine('Host'));
+        $this->assertEquals('Bar', $request->getHeaderLine('Foo'));
+        $this->assertEquals('Bam, Qux', $request->getHeaderLine('Baz'));
+        $this->assertEquals('Test', (string) $request->getBody());
+        $this->assertEquals('http://foo.com/abc', (string) $request->getUri());
+    }
+
+    public function testParsesRequestMessagesWithHttpsScheme()
+    {
+        $req = "PUT /abc?baz=bar HTTP/1.1\r\nHost: foo.com:443\r\n\r\n";
+        $request = Psr7\parse_request($req);
+        $this->assertEquals('PUT', $request->getMethod());
+        $this->assertEquals('/abc?baz=bar', $request->getRequestTarget());
+        $this->assertEquals('1.1', $request->getProtocolVersion());
+        $this->assertEquals('foo.com:443', $request->getHeaderLine('Host'));
+        $this->assertEquals('', (string) $request->getBody());
+        $this->assertEquals('https://foo.com/abc?baz=bar', (string) $request->getUri());
+    }
+
+    public function testParsesRequestMessagesWithUriWhenHostIsNotFirst()
+    {
+        $req = "PUT / HTTP/1.1\r\nFoo: Bar\r\nHost: foo.com\r\n\r\n";
+        $request = Psr7\parse_request($req);
+        $this->assertEquals('PUT', $request->getMethod());
+        $this->assertEquals('/', $request->getRequestTarget());
+        $this->assertEquals('http://foo.com/', (string) $request->getUri());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesRequestMessages()
+    {
+        Psr7\parse_request("HTTP/1.1 200 OK\r\n\r\n");
+    }
+
+    public function testParsesResponseMessages()
+    {
+        $res = "HTTP/1.0 200 OK\r\nFoo: Bar\r\nBaz: Bam\r\nBaz: Qux\r\n\r\nTest";
+        $response = Psr7\parse_response($res);
+        $this->assertEquals(200, $response->getStatusCode());
+        $this->assertEquals('OK', $response->getReasonPhrase());
+        $this->assertEquals('1.0', $response->getProtocolVersion());
+        $this->assertEquals('Bar', $response->getHeaderLine('Foo'));
+        $this->assertEquals('Bam, Qux', $response->getHeaderLine('Baz'));
+        $this->assertEquals('Test', (string) $response->getBody());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesResponseMessages()
+    {
+        Psr7\parse_response("GET / HTTP/1.1\r\n\r\n");
+    }
+
+    public function testDetermineMimetype()
+    {
+        $this->assertNull(Psr7\mimetype_from_extension('not-a-real-extension'));
+        $this->assertEquals(
+            'application/json',
+            Psr7\mimetype_from_extension('json')
+        );
+        $this->assertEquals(
+            'image/jpeg',
+            Psr7\mimetype_from_filename('/tmp/images/IMG034821.JPEG')
+        );
+    }
+
+    public function testCreatesUriForValue()
+    {
+        $this->assertInstanceOf('GuzzleHttp\Psr7\Uri', Psr7\uri_for('/foo'));
+        $this->assertInstanceOf(
+            'GuzzleHttp\Psr7\Uri',
+            Psr7\uri_for(new Psr7\Uri('/foo'))
+        );
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesUri()
+    {
+        Psr7\uri_for([]);
+    }
+
+    public function testKeepsPositionOfResource()
+    {
+        $h = fopen(__FILE__, 'r');
+        fseek($h, 10);
+        $stream = Psr7\stream_for($h);
+        $this->assertEquals(10, $stream->tell());
+        $stream->close();
+    }
+
+    public function testCreatesWithFactory()
+    {
+        $stream = Psr7\stream_for('foo');
+        $this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $stream);
+        $this->assertEquals('foo', $stream->getContents());
+        $stream->close();
+    }
+
+    public function testFactoryCreatesFromEmptyString()
+    {
+        $s = Psr7\stream_for();
+        $this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
+    }
+
+    public function testFactoryCreatesFromNull()
+    {
+        $s = Psr7\stream_for(null);
+        $this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
+    }
+
+    public function testFactoryCreatesFromResource()
+    {
+        $r = fopen(__FILE__, 'r');
+        $s = Psr7\stream_for($r);
+        $this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
+        $this->assertSame(file_get_contents(__FILE__), (string) $s);
+    }
+
+    public function testFactoryCreatesFromObjectWithToString()
+    {
+        $r = new HasToString();
+        $s = Psr7\stream_for($r);
+        $this->assertInstanceOf('GuzzleHttp\Psr7\Stream', $s);
+        $this->assertEquals('foo', (string) $s);
+    }
+
+    public function testCreatePassesThrough()
+    {
+        $s = Psr7\stream_for('foo');
+        $this->assertSame($s, Psr7\stream_for($s));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testThrowsExceptionForUnknown()
+    {
+        Psr7\stream_for(new \stdClass());
+    }
+
+    public function testReturnsCustomMetadata()
+    {
+        $s = Psr7\stream_for('foo', ['metadata' => ['hwm' => 3]]);
+        $this->assertEquals(3, $s->getMetadata('hwm'));
+        $this->assertArrayHasKey('hwm', $s->getMetadata());
+    }
+
+    public function testCanSetSize()
+    {
+        $s = Psr7\stream_for('', ['size' => 10]);
+        $this->assertEquals(10, $s->getSize());
+    }
+
+    public function testCanCreateIteratorBasedStream()
+    {
+        $a = new \ArrayIterator(['foo', 'bar', '123']);
+        $p = Psr7\stream_for($a);
+        $this->assertInstanceOf('GuzzleHttp\Psr7\PumpStream', $p);
+        $this->assertEquals('foo', $p->read(3));
+        $this->assertFalse($p->eof());
+        $this->assertEquals('b', $p->read(1));
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals('r12', $p->read(3));
+        $this->assertFalse($p->eof());
+        $this->assertEquals('3', $p->getContents());
+        $this->assertTrue($p->eof());
+        $this->assertEquals(9, $p->tell());
+    }
+
+    public function testConvertsRequestsToStrings()
+    {
+        $request = new Psr7\Request('PUT', 'http://foo.com/hi?123', [
+            'Baz' => 'bar',
+            'Qux' => ' ipsum'
+        ], 'hello', '1.0');
+        $this->assertEquals(
+            "PUT /hi?123 HTTP/1.0\r\nHost: foo.com\r\nBaz: bar\r\nQux: ipsum\r\n\r\nhello",
+            Psr7\str($request)
+        );
+    }
+
+    public function testConvertsResponsesToStrings()
+    {
+        $response = new Psr7\Response(200, [
+            'Baz' => 'bar',
+            'Qux' => ' ipsum'
+        ], 'hello', '1.0', 'FOO');
+        $this->assertEquals(
+            "HTTP/1.0 200 FOO\r\nBaz: bar\r\nQux: ipsum\r\n\r\nhello",
+            Psr7\str($response)
+        );
+    }
+
+    public function parseParamsProvider()
+    {
+        $res1 = array(
+            array(
+                '<http:/.../front.jpeg>',
+                'rel' => 'front',
+                'type' => 'image/jpeg',
+            ),
+            array(
+                '<http://.../back.jpeg>',
+                'rel' => 'back',
+                'type' => 'image/jpeg',
+            ),
+        );
+        return array(
+            array(
+                '<http:/.../front.jpeg>; rel="front"; type="image/jpeg", <http://.../back.jpeg>; rel=back; type="image/jpeg"',
+                $res1
+            ),
+            array(
+                '<http:/.../front.jpeg>; rel="front"; type="image/jpeg",<http://.../back.jpeg>; rel=back; type="image/jpeg"',
+                $res1
+            ),
+            array(
+                'foo="baz"; bar=123, boo, test="123", foobar="foo;bar"',
+                array(
+                    array('foo' => 'baz', 'bar' => '123'),
+                    array('boo'),
+                    array('test' => '123'),
+                    array('foobar' => 'foo;bar')
+                )
+            ),
+            array(
+                '<http://.../side.jpeg?test=1>; rel="side"; type="image/jpeg",<http://.../side.jpeg?test=2>; rel=side; type="image/jpeg"',
+                array(
+                    array('<http://.../side.jpeg?test=1>', 'rel' => 'side', 'type' => 'image/jpeg'),
+                    array('<http://.../side.jpeg?test=2>', 'rel' => 'side', 'type' => 'image/jpeg')
+                )
+            ),
+            array(
+                '',
+                array()
+            )
+        );
+    }
+    /**
+     * @dataProvider parseParamsProvider
+     */
+    public function testParseParams($header, $result)
+    {
+        $this->assertEquals($result, Psr7\parse_header($header));
+    }
+
+    public function testParsesArrayHeaders()
+    {
+        $header = ['a, b', 'c', 'd, e'];
+        $this->assertEquals(['a', 'b', 'c', 'd', 'e'], Psr7\normalize_header($header));
+    }
+
+    public function testRewindsBody()
+    {
+        $body = Psr7\stream_for('abc');
+        $res = new Psr7\Response(200, [], $body);
+        Psr7\rewind_body($res);
+        $this->assertEquals(0, $body->tell());
+        $body->rewind(1);
+        Psr7\rewind_body($res);
+        $this->assertEquals(0, $body->tell());
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testThrowsWhenBodyCannotBeRewound()
+    {
+        $body = Psr7\stream_for('abc');
+        $body->read(1);
+        $body = FnStream::decorate($body, [
+            'rewind' => function () { throw new \RuntimeException('a'); }
+        ]);
+        $res = new Psr7\Response(200, [], $body);
+        Psr7\rewind_body($res);
+    }
+
+    public function testCanModifyRequestWithUri()
+    {
+        $r1 = new Psr7\Request('GET', 'http://foo.com');
+        $r2 = Psr7\modify_request($r1, [
+            'uri' => new Psr7\Uri('http://www.foo.com')
+        ]);
+        $this->assertEquals('http://www.foo.com', (string) $r2->getUri());
+        $this->assertEquals('www.foo.com', (string) $r2->getHeaderLine('host'));
+    }
+
+    public function testCanModifyRequestWithCaseInsensitiveHeader()
+    {
+        $r1 = new Psr7\Request('GET', 'http://foo.com', ['User-Agent' => 'foo']);
+        $r2 = Psr7\modify_request($r1, ['set_headers' => ['User-agent' => 'bar']]);
+        $this->assertEquals('bar', $r2->getHeaderLine('User-Agent'));
+        $this->assertEquals('bar', $r2->getHeaderLine('User-agent'));
+    }
+
+    public function testReturnsAsIsWhenNoChanges()
+    {
+        $request = new Psr7\Request('GET', 'http://foo.com');
+        $this->assertSame($request, Psr7\modify_request($request, []));
+    }
+
+    public function testReturnsUriAsIsWhenNoChanges()
+    {
+        $r1 = new Psr7\Request('GET', 'http://foo.com');
+        $r2 = Psr7\modify_request($r1, ['set_headers' => ['foo' => 'bar']]);
+        $this->assertNotSame($r1, $r2);
+        $this->assertEquals('bar', $r2->getHeaderLine('foo'));
+    }
+
+    public function testRemovesHeadersFromMessage()
+    {
+        $r1 = new Psr7\Request('GET', 'http://foo.com', ['foo' => 'bar']);
+        $r2 = Psr7\modify_request($r1, ['remove_headers' => ['foo']]);
+        $this->assertNotSame($r1, $r2);
+        $this->assertFalse($r2->hasHeader('foo'));
+    }
+
+    public function testAddsQueryToUri()
+    {
+        $r1 = new Psr7\Request('GET', 'http://foo.com');
+        $r2 = Psr7\modify_request($r1, ['query' => 'foo=bar']);
+        $this->assertNotSame($r1, $r2);
+        $this->assertEquals('foo=bar', $r2->getUri()->getQuery());
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php
similarity index 63%
rename from core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php
index ead9356..927fc0b 100644
--- a/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php
@@ -1,15 +1,15 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\InflateStream;
-use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\InflateStream;
 
 class InflateStreamtest extends \PHPUnit_Framework_TestCase
 {
     public function testInflatesStreams()
     {
         $content = gzencode('test');
-        $a = Stream::factory($content);
+        $a = Psr7\stream_for($content);
         $b = new InflateStream($a);
         $this->assertEquals('test', (string) $b);
     }
diff --git a/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/LazyOpenStreamTest.php
similarity index 96%
rename from core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/LazyOpenStreamTest.php
index 79e0078..fdef142 100644
--- a/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/LazyOpenStreamTest.php
@@ -1,7 +1,7 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\LazyOpenStream;
+use GuzzleHttp\Psr7\LazyOpenStream;
 
 class LazyOpenStreamTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/LimitStreamTest.php
similarity index 61%
rename from core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/LimitStreamTest.php
index efb1dc5..2198b7a 100644
--- a/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/LimitStreamTest.php
@@ -1,13 +1,14 @@
 <?php
-namespace GuzzleHttp\Tests\Http;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\FnStream;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\LimitStream;
-use GuzzleHttp\Stream\NoSeekStream;
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\FnStream;
+use GuzzleHttp\Psr7\Stream;
+use GuzzleHttp\Psr7\LimitStream;
+use GuzzleHttp\Psr7\NoSeekStream;
 
 /**
- * @covers GuzzleHttp\Stream\LimitStream
+ * @covers GuzzleHttp\Psr7\LimitStream
  */
 class LimitStreamTest extends \PHPUnit_Framework_TestCase
 {
@@ -19,35 +20,52 @@ class LimitStreamTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->decorated = Stream::factory(fopen(__FILE__, 'r'));
+        $this->decorated = Psr7\stream_for(fopen(__FILE__, 'r'));
         $this->body = new LimitStream($this->decorated, 10, 3);
     }
 
     public function testReturnsSubset()
     {
-        $body = new LimitStream(Stream::factory('foo'), -1, 1);
+        $body = new LimitStream(Psr7\stream_for('foo'), -1, 1);
         $this->assertEquals('oo', (string) $body);
         $this->assertTrue($body->eof());
         $body->seek(0);
         $this->assertFalse($body->eof());
         $this->assertEquals('oo', $body->read(100));
+        $this->assertSame('', $body->read(1));
         $this->assertTrue($body->eof());
     }
 
     public function testReturnsSubsetWhenCastToString()
     {
-        $body = Stream::factory('foo_baz_bar');
+        $body = Psr7\stream_for('foo_baz_bar');
         $limited = new LimitStream($body, 3, 4);
         $this->assertEquals('baz', (string) $limited);
     }
 
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Unable to seek to stream position 10 with whence 0
+     */
+    public function testEnsuresPositionCanBeekSeekedTo()
+    {
+        new LimitStream(Psr7\stream_for(''), 0, 10);
+    }
+
     public function testReturnsSubsetOfEmptyBodyWhenCastToString()
     {
-        $body = Stream::factory('');
+        $body = Psr7\stream_for('01234567891234');
         $limited = new LimitStream($body, 0, 10);
         $this->assertEquals('', (string) $limited);
     }
 
+    public function testReturnsSpecificSubsetOBodyWhenCastToString()
+    {
+        $body = Psr7\stream_for('0123456789abcdef');
+        $limited = new LimitStream($body, 3, 10);
+        $this->assertEquals('abc', (string) $limited);
+    }
+
     public function testSeeksWhenConstructed()
     {
         $this->assertEquals(0, $this->body->tell());
@@ -56,26 +74,33 @@ public function testSeeksWhenConstructed()
 
     public function testAllowsBoundedSeek()
     {
-        $this->assertEquals(true, $this->body->seek(100));
+        $this->body->seek(100);
         $this->assertEquals(10, $this->body->tell());
         $this->assertEquals(13, $this->decorated->tell());
-        $this->assertEquals(true, $this->body->seek(0));
+        $this->body->seek(0);
         $this->assertEquals(0, $this->body->tell());
         $this->assertEquals(3, $this->decorated->tell());
-        $this->assertEquals(false, $this->body->seek(-10));
+        try {
+            $this->body->seek(-10);
+            $this->fail();
+        } catch (\RuntimeException $e) {}
         $this->assertEquals(0, $this->body->tell());
         $this->assertEquals(3, $this->decorated->tell());
-        $this->assertEquals(true, $this->body->seek(5));
+        $this->body->seek(5);
         $this->assertEquals(5, $this->body->tell());
         $this->assertEquals(8, $this->decorated->tell());
-        $this->assertEquals(false, $this->body->seek(1000, SEEK_END));
+        // Fail
+        try {
+            $this->body->seek(1000, SEEK_END);
+            $this->fail();
+        } catch (\RuntimeException $e) {}
     }
 
     public function testReadsOnlySubsetOfData()
     {
         $data = $this->body->read(100);
         $this->assertEquals(10, strlen($data));
-        $this->assertFalse($this->body->read(1000));
+        $this->assertSame('', $this->body->read(1000));
 
         $this->body->setOffset(10);
         $newData = $this->body->read(100);
@@ -84,18 +109,26 @@ public function testReadsOnlySubsetOfData()
     }
 
     /**
-     * @expectedException \GuzzleHttp\Stream\Exception\SeekException
-     * @expectedExceptionMessage Could not seek the stream to position 2
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Could not seek to stream offset 2
      */
     public function testThrowsWhenCurrentGreaterThanOffsetSeek()
     {
-        $a = Stream::factory('foo_bar');
+        $a = Psr7\stream_for('foo_bar');
         $b = new NoSeekStream($a);
         $c = new LimitStream($b);
         $a->getContents();
         $c->setOffset(2);
     }
 
+    public function testCanGetContentsWithoutSeeking()
+    {
+        $a = Psr7\stream_for('foo_bar');
+        $b = new NoSeekStream($a);
+        $c = new LimitStream($b);
+        $this->assertEquals('foo_bar', $c->getContents());
+    }
+
     public function testClaimsConsumedWhenReadLimitIsReached()
     {
         $this->assertFalse($this->body->eof());
@@ -110,7 +143,7 @@ public function testContentLengthIsBounded()
 
     public function testGetContentsIsBasedOnSubset()
     {
-        $body = new LimitStream(Stream::factory('foobazbar'), 3, 3);
+        $body = new LimitStream(Psr7\stream_for('foobazbar'), 3, 3);
         $this->assertEquals('baz', $body->getContents());
     }
 
@@ -126,7 +159,7 @@ public function testReturnsNullIfSizeCannotBeDetermined()
 
     public function testLengthLessOffsetWhenNoLimitSize()
     {
-        $a = Stream::factory('foo_bar');
+        $a = Psr7\stream_for('foo_bar');
         $b = new LimitStream($a, -1, 4);
         $this->assertEquals(3, $b->getSize());
     }
diff --git a/core/vendor/guzzlehttp/psr7/tests/MultipartStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/MultipartStreamTest.php
new file mode 100644
index 0000000..61edb06
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/tests/MultipartStreamTest.php
@@ -0,0 +1,214 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\MultipartStream;
+
+class MultipartStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCreatesDefaultBoundary()
+    {
+        $b = new MultipartStream();
+        $this->assertNotEmpty($b->getBoundary());
+    }
+
+    public function testCanProvideBoundary()
+    {
+        $b = new MultipartStream([], 'foo');
+        $this->assertEquals('foo', $b->getBoundary());
+    }
+
+    public function testIsNotWritable()
+    {
+        $b = new MultipartStream();
+        $this->assertFalse($b->isWritable());
+    }
+
+    public function testCanCreateEmptyStream()
+    {
+        $b = new MultipartStream();
+        $boundary = $b->getBoundary();
+        $this->assertSame("--{$boundary}--\r\n", $b->getContents());
+        $this->assertSame(strlen($boundary) + 6, $b->getSize());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesFilesArrayElement()
+    {
+        new MultipartStream([['foo' => 'bar']]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testEnsuresFileHasName()
+    {
+        new MultipartStream([['contents' => 'bar']]);
+    }
+
+    public function testSerializesFields()
+    {
+        $b = new MultipartStream([
+            [
+                'name'     => 'foo',
+                'contents' => 'bar'
+            ],
+            [
+                'name' => 'baz',
+                'contents' => 'bam'
+            ]
+        ], 'boundary');
+        $this->assertEquals(
+            "--boundary\r\nContent-Disposition: form-data; name=\"foo\"\r\nContent-Length: 3\r\n\r\n"
+            . "bar\r\n--boundary\r\nContent-Disposition: form-data; name=\"baz\"\r\nContent-Length: 3"
+            . "\r\n\r\nbam\r\n--boundary--\r\n", (string) $b);
+    }
+
+    public function testSerializesFiles()
+    {
+        $f1 = Psr7\FnStream::decorate(Psr7\stream_for('foo'), [
+            'getMetadata' => function () {
+                return '/foo/bar.txt';
+            }
+        ]);
+
+        $f2 = Psr7\FnStream::decorate(Psr7\stream_for('baz'), [
+            'getMetadata' => function () {
+                return '/foo/baz.jpg';
+            }
+        ]);
+
+        $f3 = Psr7\FnStream::decorate(Psr7\stream_for('bar'), [
+            'getMetadata' => function () {
+                return '/foo/bar.gif';
+            }
+        ]);
+
+        $b = new MultipartStream([
+            [
+                'name'     => 'foo',
+                'contents' => $f1
+            ],
+            [
+                'name' => 'qux',
+                'contents' => $f2
+            ],
+            [
+                'name'     => 'qux',
+                'contents' => $f3
+            ],
+        ], 'boundary');
+
+        $expected = <<<EOT
+--boundary
+Content-Disposition: form-data; name="foo"; filename="bar.txt"
+Content-Length: 3
+Content-Type: text/plain
+
+foo
+--boundary
+Content-Disposition: form-data; name="qux"; filename="baz.jpg"
+Content-Length: 3
+Content-Type: image/jpeg
+
+baz
+--boundary
+Content-Disposition: form-data; name="qux"; filename="bar.gif"
+Content-Length: 3
+Content-Type: image/gif
+
+bar
+--boundary--
+
+EOT;
+
+        $this->assertEquals($expected, str_replace("\r", '', $b));
+    }
+
+    public function testSerializesFilesWithCustomHeaders()
+    {
+        $f1 = Psr7\FnStream::decorate(Psr7\stream_for('foo'), [
+            'getMetadata' => function () {
+                return '/foo/bar.txt';
+            }
+        ]);
+
+        $b = new MultipartStream([
+            [
+                'name' => 'foo',
+                'contents' => $f1,
+                'headers'  => [
+                    'x-foo' => 'bar',
+                    'content-disposition' => 'custom'
+                ]
+            ]
+        ], 'boundary');
+
+        $expected = <<<EOT
+--boundary
+x-foo: bar
+content-disposition: custom
+Content-Length: 3
+Content-Type: text/plain
+
+foo
+--boundary--
+
+EOT;
+
+        $this->assertEquals($expected, str_replace("\r", '', $b));
+    }
+
+    public function testSerializesFilesWithCustomHeadersAndMultipleValues()
+    {
+        $f1 = Psr7\FnStream::decorate(Psr7\stream_for('foo'), [
+            'getMetadata' => function () {
+                return '/foo/bar.txt';
+            }
+        ]);
+
+        $f2 = Psr7\FnStream::decorate(Psr7\stream_for('baz'), [
+            'getMetadata' => function () {
+                return '/foo/baz.jpg';
+            }
+        ]);
+
+        $b = new MultipartStream([
+            [
+                'name'     => 'foo',
+                'contents' => $f1,
+                'headers'  => [
+                    'x-foo' => 'bar',
+                    'content-disposition' => 'custom'
+                ]
+            ],
+            [
+                'name'     => 'foo',
+                'contents' => $f2,
+                'headers'  => ['cOntenT-Type' => 'custom'],
+            ]
+        ], 'boundary');
+
+        $expected = <<<EOT
+--boundary
+x-foo: bar
+content-disposition: custom
+Content-Length: 3
+Content-Type: text/plain
+
+foo
+--boundary
+cOntenT-Type: custom
+Content-Disposition: form-data; name="foo"; filename="baz.jpg"
+Content-Length: 3
+
+baz
+--boundary--
+
+EOT;
+
+        $this->assertEquals($expected, str_replace("\r", '', $b));
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/tests/NoSeekStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/NoSeekStreamTest.php
new file mode 100644
index 0000000..a309317
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/tests/NoSeekStreamTest.php
@@ -0,0 +1,40 @@
+<?php
+namespace GuzzleHttp\Tests\Psr7;
+
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\NoSeekStream;
+
+/**
+ * @covers GuzzleHttp\Psr7\NoSeekStream
+ * @covers GuzzleHttp\Psr7\StreamDecoratorTrait
+ */
+class NoSeekStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Cannot seek a NoSeekStream
+     */
+    public function testCannotSeek()
+    {
+        $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
+            ->setMethods(['isSeekable', 'seek'])
+            ->getMockForAbstractClass();
+        $s->expects($this->never())->method('seek');
+        $s->expects($this->never())->method('isSeekable');
+        $wrapped = new NoSeekStream($s);
+        $this->assertFalse($wrapped->isSeekable());
+        $wrapped->seek(2);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Cannot write to a non-writable stream
+     */
+    public function testHandlesClose()
+    {
+        $s = Psr7\stream_for('foo');
+        $wrapped = new NoSeekStream($s);
+        $wrapped->close();
+        $wrapped->write('foo');
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php b/core/vendor/guzzlehttp/psr7/tests/PumpStreamTest.php
similarity index 73%
rename from core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/PumpStreamTest.php
index 2d20ce9..7358bb6 100644
--- a/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/PumpStreamTest.php
@@ -1,9 +1,9 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\LimitStream;
-use GuzzleHttp\Stream\PumpStream;
-use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Psr7\LimitStream;
+use GuzzleHttp\Psr7\PumpStream;
+use GuzzleHttp\Psr7;
 
 class PumpStreamTest extends \PHPUnit_Framework_TestCase
 {
@@ -21,7 +21,7 @@ public function testHasMetadataAndSize()
 
     public function testCanReadFromCallable()
     {
-        $p = Stream::factory(function ($size) {
+        $p = Psr7\stream_for(function ($size) {
             return 'a';
         });
         $this->assertEquals('a', $p->read(1));
@@ -33,7 +33,7 @@ public function testCanReadFromCallable()
     public function testStoresExcessDataInBuffer()
     {
         $called = [];
-        $p = Stream::factory(function ($size) use (&$called) {
+        $p = Psr7\stream_for(function ($size) use (&$called) {
             $called[] = $size;
             return 'abcdef';
         });
@@ -46,32 +46,27 @@ public function testStoresExcessDataInBuffer()
 
     public function testInifiniteStreamWrappedInLimitStream()
     {
-        $p = Stream::factory(function () { return 'a'; });
+        $p = Psr7\stream_for(function () { return 'a'; });
         $s = new LimitStream($p, 5);
         $this->assertEquals('aaaaa', (string) $s);
     }
 
     public function testDescribesCapabilities()
     {
-        $p = Stream::factory(function () {});
+        $p = Psr7\stream_for(function () {});
         $this->assertTrue($p->isReadable());
         $this->assertFalse($p->isSeekable());
         $this->assertFalse($p->isWritable());
         $this->assertNull($p->getSize());
-        $this->assertFalse($p->write('aa'));
         $this->assertEquals('', $p->getContents());
         $this->assertEquals('', (string) $p);
         $p->close();
         $this->assertEquals('', $p->read(10));
         $this->assertTrue($p->eof());
-    }
 
-    /**
-     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
-     */
-    public function testCannotAttach()
-    {
-        $p = Stream::factory(function () {});
-        $p->attach('a');
+        try {
+            $this->assertFalse($p->write('aa'));
+            $this->fail();
+        } catch (\RuntimeException $e) {}
     }
 }
diff --git a/core/vendor/guzzlehttp/psr7/tests/RequestTest.php b/core/vendor/guzzlehttp/psr7/tests/RequestTest.php
new file mode 100644
index 0000000..9defe68
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/tests/RequestTest.php
@@ -0,0 +1,157 @@
+<?php
+namespace GuzzleHttp\Tests\Psr7;
+
+use GuzzleHttp\Psr7\Request;
+use GuzzleHttp\Psr7\Uri;
+
+/**
+ * @covers GuzzleHttp\Psr7\Request
+ */
+class RequestTest extends \PHPUnit_Framework_TestCase
+{
+    public function testRequestUriMayBeString()
+    {
+        $r = new Request('GET', '/');
+        $this->assertEquals('/', (string) $r->getUri());
+    }
+
+    public function testRequestUriMayBeUri()
+    {
+        $uri = new Uri('/');
+        $r = new Request('GET', $uri);
+        $this->assertSame($uri, $r->getUri());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidateRequestUri()
+    {
+        new Request('GET', true);
+    }
+
+    public function testCanConstructWithBody()
+    {
+        $r = new Request('GET', '/', [], 'baz');
+        $this->assertEquals('baz', (string) $r->getBody());
+    }
+
+    public function testCapitalizesMethod()
+    {
+        $r = new Request('get', '/');
+        $this->assertEquals('GET', $r->getMethod());
+    }
+
+    public function testCapitalizesWithMethod()
+    {
+        $r = new Request('GET', '/');
+        $this->assertEquals('PUT', $r->withMethod('put')->getMethod());
+    }
+
+    public function testWithUri()
+    {
+        $r1 = new Request('GET', '/');
+        $u1 = $r1->getUri();
+        $u2 = new Uri('http://www.example.com');
+        $r2 = $r1->withUri($u2);
+        $this->assertNotSame($r1, $r2);
+        $this->assertSame($u2, $r2->getUri());
+        $this->assertSame($u1, $r1->getUri());
+    }
+
+    public function testSameInstanceWhenSameUri()
+    {
+        $r1 = new Request('GET', 'http://foo.com');
+        $r2 = $r1->withUri($r1->getUri());
+        $this->assertSame($r1, $r2);
+    }
+
+    public function testWithRequestTarget()
+    {
+        $r1 = new Request('GET', '/');
+        $r2 = $r1->withRequestTarget('*');
+        $this->assertEquals('*', $r2->getRequestTarget());
+        $this->assertEquals('/', $r1->getRequestTarget());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testRequestTargetDoesNotAllowSpaces()
+    {
+        $r1 = new Request('GET', '/');
+        $r1->withRequestTarget('/foo bar');
+    }
+
+    public function testRequestTargetDefaultsToSlash()
+    {
+        $r1 = new Request('GET', '');
+        $this->assertEquals('/', $r1->getRequestTarget());
+        $r2 = new Request('GET', '*');
+        $this->assertEquals('*', $r2->getRequestTarget());
+        $r3 = new Request('GET', 'http://foo.com/bar baz/');
+        $this->assertEquals('/bar%20baz/', $r3->getRequestTarget());
+    }
+
+    public function testBuildsRequestTarget()
+    {
+        $r1 = new Request('GET', 'http://foo.com/baz?bar=bam');
+        $this->assertEquals('/baz?bar=bam', $r1->getRequestTarget());
+    }
+
+    public function testHostIsAddedFirst()
+    {
+        $r = new Request('GET', 'http://foo.com/baz?bar=bam', ['Foo' => 'Bar']);
+        $this->assertEquals([
+            'Host' => ['foo.com'],
+            'Foo'  => ['Bar']
+        ], $r->getHeaders());
+    }
+
+    public function testCanGetHeaderAsCsv()
+    {
+        $r = new Request('GET', 'http://foo.com/baz?bar=bam', [
+            'Foo' => ['a', 'b', 'c']
+        ]);
+        $this->assertEquals('a, b, c', $r->getHeaderLine('Foo'));
+        $this->assertEquals('', $r->getHeaderLine('Bar'));
+    }
+
+    public function testHostIsNotOverwrittenWhenPreservingHost()
+    {
+        $r = new Request('GET', 'http://foo.com/baz?bar=bam', ['Host' => 'a.com']);
+        $this->assertEquals(['Host' => ['a.com']], $r->getHeaders());
+        $r2 = $r->withUri(new Uri('http://www.foo.com/bar'), true);
+        $this->assertEquals('a.com', $r2->getHeaderLine('Host'));
+    }
+
+    public function testOverridesHostWithUri()
+    {
+        $r = new Request('GET', 'http://foo.com/baz?bar=bam');
+        $this->assertEquals(['Host' => ['foo.com']], $r->getHeaders());
+        $r2 = $r->withUri(new Uri('http://www.baz.com/bar'));
+        $this->assertEquals('www.baz.com', $r2->getHeaderLine('Host'));
+    }
+
+    public function testAggregatesHeaders()
+    {
+        $r = new Request('GET', 'http://foo.com', [
+            'ZOO' => 'zoobar',
+            'zoo' => ['foobar', 'zoobar']
+        ]);
+        $this->assertEquals('zoobar, foobar, zoobar', $r->getHeaderLine('zoo'));
+    }
+
+    public function testAddsPortToHeader()
+    {
+        $r = new Request('GET', 'http://foo.com:8124/bar');
+        $this->assertEquals('foo.com:8124', $r->getHeaderLine('host'));
+    }
+
+    public function testAddsPortToHeaderAndReplacePreviousPort()
+    {
+        $r = new Request('GET', 'http://foo.com:8124/bar');
+        $r = $r->withUri(new Uri('http://foo.com:8125/bar'));
+        $this->assertEquals('foo.com:8125', $r->getHeaderLine('host'));
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/tests/ResponseTest.php b/core/vendor/guzzlehttp/psr7/tests/ResponseTest.php
new file mode 100644
index 0000000..e870292
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/tests/ResponseTest.php
@@ -0,0 +1,139 @@
+<?php
+namespace GuzzleHttp\Tests\Psr7;
+
+use GuzzleHttp\Psr7\Response;
+use GuzzleHttp\Psr7;
+
+/**
+ * @covers GuzzleHttp\Psr7\MessageTrait
+ * @covers GuzzleHttp\Psr7\Response
+ */
+class ResponseTest extends \PHPUnit_Framework_TestCase
+{
+    public function testAddsDefaultReason()
+    {
+        $r = new Response('200');
+        $this->assertSame(200, $r->getStatusCode());
+        $this->assertEquals('OK', $r->getReasonPhrase());
+    }
+
+    public function testCanGiveCustomReason()
+    {
+        $r = new Response(200, [], null, '1.1', 'bar');
+        $this->assertEquals('bar', $r->getReasonPhrase());
+    }
+
+    public function testCanGiveCustomProtocolVersion()
+    {
+        $r = new Response(200, [], null, '1000');
+        $this->assertEquals('1000', $r->getProtocolVersion());
+    }
+
+    public function testCanCreateNewResponseWithStatusAndNoReason()
+    {
+        $r = new Response(200);
+        $r2 = $r->withStatus(201);
+        $this->assertEquals(200, $r->getStatusCode());
+        $this->assertEquals('OK', $r->getReasonPhrase());
+        $this->assertEquals(201, $r2->getStatusCode());
+        $this->assertEquals('Created', $r2->getReasonPhrase());
+    }
+
+    public function testCanCreateNewResponseWithStatusAndReason()
+    {
+        $r = new Response(200);
+        $r2 = $r->withStatus(201, 'Foo');
+        $this->assertEquals(200, $r->getStatusCode());
+        $this->assertEquals('OK', $r->getReasonPhrase());
+        $this->assertEquals(201, $r2->getStatusCode());
+        $this->assertEquals('Foo', $r2->getReasonPhrase());
+    }
+
+    public function testCreatesResponseWithAddedHeaderArray()
+    {
+        $r = new Response();
+        $r2 = $r->withAddedHeader('foo', ['baz', 'bar']);
+        $this->assertFalse($r->hasHeader('foo'));
+        $this->assertEquals('baz, bar', $r2->getHeaderLine('foo'));
+    }
+
+    public function testReturnsIdentityWhenRemovingMissingHeader()
+    {
+        $r = new Response();
+        $this->assertSame($r, $r->withoutHeader('foo'));
+    }
+
+    public function testAlwaysReturnsBody()
+    {
+        $r = new Response();
+        $this->assertInstanceOf('Psr\Http\Message\StreamInterface', $r->getBody());
+    }
+
+    public function testCanSetHeaderAsArray()
+    {
+        $r = new Response(200, [
+            'foo' => ['baz ', ' bar ']
+        ]);
+        $this->assertEquals('baz, bar', $r->getHeaderLine('foo'));
+        $this->assertEquals(['baz', 'bar'], $r->getHeader('foo'));
+    }
+
+    public function testSameInstanceWhenSameBody()
+    {
+        $r = new Response(200, [], 'foo');
+        $b = $r->getBody();
+        $this->assertSame($r, $r->withBody($b));
+    }
+
+    public function testNewInstanceWhenNewBody()
+    {
+        $r = new Response(200, [], 'foo');
+        $b2 = Psr7\stream_for('abc');
+        $this->assertNotSame($r, $r->withBody($b2));
+    }
+
+    public function testSameInstanceWhenSameProtocol()
+    {
+        $r = new Response(200);
+        $this->assertSame($r, $r->withProtocolVersion('1.1'));
+    }
+
+    public function testNewInstanceWhenNewProtocol()
+    {
+        $r = new Response(200);
+        $this->assertNotSame($r, $r->withProtocolVersion('1.0'));
+    }
+
+    public function testNewInstanceWhenRemovingHeader()
+    {
+        $r = new Response(200, ['Foo' => 'Bar']);
+        $r2 = $r->withoutHeader('Foo');
+        $this->assertNotSame($r, $r2);
+        $this->assertFalse($r2->hasHeader('foo'));
+    }
+
+    public function testNewInstanceWhenAddingHeader()
+    {
+        $r = new Response(200, ['Foo' => 'Bar']);
+        $r2 = $r->withAddedHeader('Foo', 'Baz');
+        $this->assertNotSame($r, $r2);
+        $this->assertEquals('Bar, Baz', $r2->getHeaderLine('foo'));
+    }
+
+    public function testNewInstanceWhenAddingHeaderThatWasNotThereBefore()
+    {
+        $r = new Response(200, ['Foo' => 'Bar']);
+        $r2 = $r->withAddedHeader('Baz', 'Bam');
+        $this->assertNotSame($r, $r2);
+        $this->assertEquals('Bam', $r2->getHeaderLine('Baz'));
+        $this->assertEquals('Bar', $r2->getHeaderLine('Foo'));
+    }
+
+    public function testRemovesPreviouslyAddedHeaderOfDifferentCase()
+    {
+        $r = new Response(200, ['Foo' => 'Bar']);
+        $r2 = $r->withHeader('foo', 'Bam');
+        $this->assertNotSame($r, $r2);
+        $this->assertEquals('Bam', $r2->getHeaderLine('Foo'));
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php b/core/vendor/guzzlehttp/psr7/tests/StreamDecoratorTraitTest.php
similarity index 80%
rename from core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
rename to core/vendor/guzzlehttp/psr7/tests/StreamDecoratorTraitTest.php
index 2ba79ad..682079e 100644
--- a/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/StreamDecoratorTraitTest.php
@@ -1,9 +1,9 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\StreamDecoratorTrait;
+use Psr\Http\Message\StreamInterface;
+use GuzzleHttp\Psr7;
+use GuzzleHttp\Psr7\StreamDecoratorTrait;
 
 class Str implements StreamInterface
 {
@@ -11,7 +11,7 @@ class Str implements StreamInterface
 }
 
 /**
- * @covers GuzzleHttp\Stream\StreamDecoratorTrait
+ * @covers GuzzleHttp\Psr7\StreamDecoratorTrait
  */
 class StreamDecoratorTraitTest extends \PHPUnit_Framework_TestCase
 {
@@ -24,13 +24,13 @@ public function setUp()
         $this->c = fopen('php://temp', 'r+');
         fwrite($this->c, 'foo');
         fseek($this->c, 0);
-        $this->a = Stream::factory($this->c);
+        $this->a = Psr7\stream_for($this->c);
         $this->b = new Str($this->a);
     }
 
     public function testCatchesExceptionsWhenCastingToString()
     {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+        $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
             ->setMethods(['read'])
             ->getMockForAbstractClass();
         $s->expects($this->once())
@@ -51,8 +51,6 @@ public function testToString()
     public function testHasSize()
     {
         $this->assertEquals(3, $this->b->getSize());
-        $this->assertSame($this->b, $this->b->setSize(2));
-        $this->assertEquals(2, $this->b->getSize());
     }
 
     public function testReads()
@@ -69,13 +67,13 @@ public function testCheckMethods()
 
     public function testSeeksAndTells()
     {
-        $this->assertTrue($this->b->seek(1));
+        $this->b->seek(1);
         $this->assertEquals(1, $this->a->tell());
         $this->assertEquals(1, $this->b->tell());
-        $this->assertTrue($this->b->seek(0));
+        $this->b->seek(0);
         $this->assertEquals(0, $this->a->tell());
         $this->assertEquals(0, $this->b->tell());
-        $this->assertTrue($this->b->seek(0, SEEK_END));
+        $this->b->seek(0, SEEK_END);
         $this->assertEquals(3, $this->a->tell());
         $this->assertEquals(3, $this->b->tell());
     }
@@ -100,14 +98,6 @@ public function testDetaches()
         $this->assertFalse($this->b->isReadable());
     }
 
-    /**
-     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
-     */
-    public function testCannotAttachByDefault()
-    {
-        $this->b->attach('a');
-    }
-
     public function testWrapsMetadata()
     {
         $this->assertSame($this->b->getMetadata(), $this->a->getMetadata());
diff --git a/core/vendor/guzzlehttp/streams/tests/StreamTest.php b/core/vendor/guzzlehttp/psr7/tests/StreamTest.php
similarity index 53%
rename from core/vendor/guzzlehttp/streams/tests/StreamTest.php
rename to core/vendor/guzzlehttp/psr7/tests/StreamTest.php
index 2985bfb..4fe92cc 100644
--- a/core/vendor/guzzlehttp/streams/tests/StreamTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/StreamTest.php
@@ -1,10 +1,11 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Psr7\NoSeekStream;
+use GuzzleHttp\Psr7\Stream;
 
 /**
- * @covers GuzzleHttp\Stream\Stream
+ * @covers GuzzleHttp\Psr7\Stream
  */
 class StreamTest extends \PHPUnit_Framework_TestCase
 {
@@ -71,16 +72,6 @@ public function testChecksEof()
         $stream->close();
     }
 
-    public function testAllowsSettingManualSize()
-    {
-        $handle = fopen('php://temp', 'w+');
-        fwrite($handle, 'data');
-        $stream = new Stream($handle);
-        $stream->setSize(10);
-        $this->assertEquals(10, $stream->getSize());
-        $stream->close();
-    }
-
     public function testGetSize()
     {
         $size = filesize(__FILE__);
@@ -117,43 +108,34 @@ public function testProvidesStreamPosition()
         $stream->close();
     }
 
-    public function testKeepsPositionOfResource()
-    {
-        $h = fopen(__FILE__, 'r');
-        fseek($h, 10);
-        $stream = Stream::factory($h);
-        $this->assertEquals(10, $stream->tell());
-        $stream->close();
-    }
-
-    public function testCanDetachAndAttachStream()
+    public function testCanDetachStream()
     {
         $r = fopen('php://temp', 'w+');
         $stream = new Stream($r);
         $stream->write('foo');
         $this->assertTrue($stream->isReadable());
         $this->assertSame($r, $stream->detach());
-        $this->assertNull($stream->detach());
+        $stream->detach();
 
         $this->assertFalse($stream->isReadable());
-        $this->assertFalse($stream->read(10));
         $this->assertFalse($stream->isWritable());
-        $this->assertFalse($stream->write('bar'));
         $this->assertFalse($stream->isSeekable());
-        $this->assertFalse($stream->seek(10));
-        $this->assertFalse($stream->tell());
-        $this->assertTrue($stream->eof());
-        $this->assertNull($stream->getSize());
-        $this->assertSame('', (string) $stream);
-        $this->assertSame('', $stream->getContents());
-
-        $stream->attach($r);
-        $stream->seek(0);
-        $this->assertEquals('foo', $stream->getContents());
-        $this->assertTrue($stream->isReadable());
-        $this->assertTrue($stream->isWritable());
-        $this->assertTrue($stream->isSeekable());
 
+        $throws = function (callable $fn) use ($stream) {
+            try {
+                $fn($stream);
+                $this->fail();
+            } catch (\Exception $e) {}
+        };
+
+        $throws(function ($stream) { $stream->read(10); });
+        $throws(function ($stream) { $stream->write('bar'); });
+        $throws(function ($stream) { $stream->seek(10); });
+        $throws(function ($stream) { $stream->tell(); });
+        $throws(function ($stream) { $stream->eof(); });
+        $throws(function ($stream) { $stream->getSize(); });
+        $throws(function ($stream) { $stream->getContents(); });
+        $this->assertSame('', (string) $stream);
         $stream->close();
     }
 
@@ -163,90 +145,17 @@ public function testCloseClearProperties()
         $stream = new Stream($handle);
         $stream->close();
 
-        $this->assertEmpty($stream->getMetadata());
         $this->assertFalse($stream->isSeekable());
         $this->assertFalse($stream->isReadable());
         $this->assertFalse($stream->isWritable());
         $this->assertNull($stream->getSize());
+        $this->assertEmpty($stream->getMetadata());
     }
 
-    public function testCreatesWithFactory()
-    {
-        $stream = Stream::factory('foo');
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $stream);
-        $this->assertEquals('foo', $stream->getContents());
-        $stream->close();
-    }
-
-    public function testFactoryCreatesFromEmptyString()
-    {
-        $s = Stream::factory();
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-    }
-
-    public function testFactoryCreatesFromResource()
-    {
-        $r = fopen(__FILE__, 'r');
-        $s = Stream::factory($r);
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-        $this->assertSame(file_get_contents(__FILE__), (string) $s);
-    }
-
-    public function testFactoryCreatesFromObjectWithToString()
+    public function testDoesNotThrowInToString()
     {
-        $r = new HasToString();
-        $s = Stream::factory($r);
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
+        $s = \GuzzleHttp\Psr7\stream_for('foo');
+        $s = new NoSeekStream($s);
         $this->assertEquals('foo', (string) $s);
     }
-
-    public function testCreatePassesThrough()
-    {
-        $s = Stream::factory('foo');
-        $this->assertSame($s, Stream::factory($s));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionForUnknown()
-    {
-        Stream::factory(new \stdClass());
-    }
-
-    public function testReturnsCustomMetadata()
-    {
-        $s = Stream::factory('foo', ['metadata' => ['hwm' => 3]]);
-        $this->assertEquals(3, $s->getMetadata('hwm'));
-        $this->assertArrayHasKey('hwm', $s->getMetadata());
-    }
-
-    public function testCanSetSize()
-    {
-        $s = Stream::factory('', ['size' => 10]);
-        $this->assertEquals(10, $s->getSize());
-    }
-
-    public function testCanCreateIteratorBasedStream()
-    {
-        $a = new \ArrayIterator(['foo', 'bar', '123']);
-        $p = Stream::factory($a);
-        $this->assertInstanceOf('GuzzleHttp\Stream\PumpStream', $p);
-        $this->assertEquals('foo', $p->read(3));
-        $this->assertFalse($p->eof());
-        $this->assertEquals('b', $p->read(1));
-        $this->assertEquals('a', $p->read(1));
-        $this->assertEquals('r12', $p->read(3));
-        $this->assertFalse($p->eof());
-        $this->assertEquals('3', $p->getContents());
-        $this->assertTrue($p->eof());
-        $this->assertEquals(9, $p->tell());
-    }
-}
-
-class HasToString
-{
-    public function __toString() {
-        return 'foo';
-    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php b/core/vendor/guzzlehttp/psr7/tests/StreamWrapperTest.php
similarity index 81%
rename from core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
rename to core/vendor/guzzlehttp/psr7/tests/StreamWrapperTest.php
index 33c3ecc..0156e59 100644
--- a/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
+++ b/core/vendor/guzzlehttp/psr7/tests/StreamWrapperTest.php
@@ -1,23 +1,24 @@
 <?php
-namespace GuzzleHttp\Tests\Stream;
+namespace GuzzleHttp\Tests\Psr7;
 
-use GuzzleHttp\Stream\GuzzleStreamWrapper;
-use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Psr7\StreamWrapper;
+use GuzzleHttp\Psr7;
 
 /**
- * @covers GuzzleHttp\Stream\GuzzleStreamWrapper
+ * @covers GuzzleHttp\Psr7\StreamWrapper
  */
-class GuzzleStreamWrapperTest extends \PHPUnit_Framework_TestCase
+class StreamWrapperTest extends \PHPUnit_Framework_TestCase
 {
     public function testResource()
     {
-        $stream = Stream::factory('foo');
-        $handle = GuzzleStreamWrapper::getResource($stream);
+        $stream = Psr7\stream_for('foo');
+        $handle = StreamWrapper::getResource($stream);
         $this->assertSame('foo', fread($handle, 3));
         $this->assertSame(3, ftell($handle));
         $this->assertSame(3, fwrite($handle, 'bar'));
         $this->assertSame(0, fseek($handle, 0));
         $this->assertSame('foobar', fread($handle, 6));
+        $this->assertSame('', fread($handle, 1));
         $this->assertTrue(feof($handle));
 
         // This fails on HHVM for some reason
@@ -61,7 +62,7 @@ public function testResource()
      */
     public function testValidatesStream()
     {
-        $stream = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+        $stream = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
             ->setMethods(['isReadable', 'isWritable'])
             ->getMockForAbstractClass();
         $stream->expects($this->once())
@@ -70,7 +71,7 @@ public function testValidatesStream()
         $stream->expects($this->once())
             ->method('isWritable')
             ->will($this->returnValue(false));
-        GuzzleStreamWrapper::getResource($stream);
+        StreamWrapper::getResource($stream);
     }
 
     /**
@@ -83,7 +84,7 @@ public function testReturnsFalseWhenStreamDoesNotExist()
 
     public function testCanOpenReadonlyStream()
     {
-        $stream = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+        $stream = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
             ->setMethods(['isReadable', 'isWritable'])
             ->getMockForAbstractClass();
         $stream->expects($this->once())
@@ -92,7 +93,7 @@ public function testCanOpenReadonlyStream()
         $stream->expects($this->once())
             ->method('isWritable')
             ->will($this->returnValue(true));
-        $r = GuzzleStreamWrapper::getResource($stream);
+        $r = StreamWrapper::getResource($stream);
         $this->assertInternalType('resource', $r);
         fclose($r);
     }
diff --git a/core/vendor/guzzlehttp/psr7/tests/UriTest.php b/core/vendor/guzzlehttp/psr7/tests/UriTest.php
new file mode 100644
index 0000000..80755da
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/tests/UriTest.php
@@ -0,0 +1,245 @@
+<?php
+namespace GuzzleHttp\Tests\Psr7;
+
+use GuzzleHttp\Psr7\Uri;
+
+/**
+ * @covers GuzzleHttp\Psr7\Uri
+ */
+class UriTest extends \PHPUnit_Framework_TestCase
+{
+    const RFC3986_BASE = "http://a/b/c/d;p?q";
+
+    public function testParsesProvidedUrl()
+    {
+        $uri = new Uri('https://michael:test@test.com:443/path/123?q=abc#test');
+
+        // Standard port 443 for https gets ignored.
+        $this->assertEquals(
+            'https://michael:test@test.com/path/123?q=abc#test',
+            (string) $uri
+        );
+
+        $this->assertEquals('test', $uri->getFragment());
+        $this->assertEquals('test.com', $uri->getHost());
+        $this->assertEquals('/path/123', $uri->getPath());
+        $this->assertEquals(null, $uri->getPort());
+        $this->assertEquals('q=abc', $uri->getQuery());
+        $this->assertEquals('https', $uri->getScheme());
+        $this->assertEquals('michael:test', $uri->getUserInfo());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Unable to parse URI
+     */
+    public function testValidatesUriCanBeParsed()
+    {
+        new Uri('///');
+    }
+
+    public function testCanTransformAndRetrievePartsIndividually()
+    {
+        $uri = (new Uri(''))
+            ->withFragment('#test')
+            ->withHost('example.com')
+            ->withPath('path/123')
+            ->withPort(8080)
+            ->withQuery('?q=abc')
+            ->withScheme('http')
+            ->withUserInfo('user', 'pass');
+
+        // Test getters.
+        $this->assertEquals('user:pass@example.com:8080', $uri->getAuthority());
+        $this->assertEquals('test', $uri->getFragment());
+        $this->assertEquals('example.com', $uri->getHost());
+        $this->assertEquals('path/123', $uri->getPath());
+        $this->assertEquals(8080, $uri->getPort());
+        $this->assertEquals('q=abc', $uri->getQuery());
+        $this->assertEquals('http', $uri->getScheme());
+        $this->assertEquals('user:pass', $uri->getUserInfo());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testPortMustBeValid()
+    {
+        (new Uri(''))->withPort(100000);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testPathMustBeValid()
+    {
+        (new Uri(''))->withPath([]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testQueryMustBeValid()
+    {
+        (new Uri(''))->withQuery(new \stdClass);
+    }
+
+    public function testAllowsFalseyUrlParts()
+    {
+        $url = new Uri('http://a:1/0?0#0');
+        $this->assertSame('a', $url->getHost());
+        $this->assertEquals(1, $url->getPort());
+        $this->assertSame('/0', $url->getPath());
+        $this->assertEquals('0', (string) $url->getQuery());
+        $this->assertSame('0', $url->getFragment());
+        $this->assertEquals('http://a:1/0?0#0', (string) $url);
+        $url = new Uri('');
+        $this->assertSame('', (string) $url);
+        $url = new Uri('0');
+        $this->assertSame('0', (string) $url);
+        $url = new Uri('/');
+        $this->assertSame('/', (string) $url);
+    }
+
+    /**
+     * @dataProvider getResolveTestCases
+     */
+    public function testResolvesUris($base, $rel, $expected)
+    {
+        $uri = new Uri($base);
+        $actual = Uri::resolve($uri, $rel);
+        $this->assertEquals($expected, (string) $actual);
+    }
+
+    public function getResolveTestCases()
+    {
+        return [
+            //[self::RFC3986_BASE, 'g:h',           'g:h'],
+            [self::RFC3986_BASE, 'g',             'http://a/b/c/g'],
+            [self::RFC3986_BASE, './g',           'http://a/b/c/g'],
+            [self::RFC3986_BASE, 'g/',            'http://a/b/c/g/'],
+            [self::RFC3986_BASE, '/g',            'http://a/g'],
+            [self::RFC3986_BASE, '//g',           'http://g'],
+            [self::RFC3986_BASE, '?y',            'http://a/b/c/d;p?y'],
+            [self::RFC3986_BASE, 'g?y',           'http://a/b/c/g?y'],
+            [self::RFC3986_BASE, '#s',            'http://a/b/c/d;p?q#s'],
+            [self::RFC3986_BASE, 'g#s',           'http://a/b/c/g#s'],
+            [self::RFC3986_BASE, 'g?y#s',         'http://a/b/c/g?y#s'],
+            [self::RFC3986_BASE, ';x',            'http://a/b/c/;x'],
+            [self::RFC3986_BASE, 'g;x',           'http://a/b/c/g;x'],
+            [self::RFC3986_BASE, 'g;x?y#s',       'http://a/b/c/g;x?y#s'],
+            [self::RFC3986_BASE, '',              self::RFC3986_BASE],
+            [self::RFC3986_BASE, '.',             'http://a/b/c/'],
+            [self::RFC3986_BASE, './',            'http://a/b/c/'],
+            [self::RFC3986_BASE, '..',            'http://a/b/'],
+            [self::RFC3986_BASE, '../',           'http://a/b/'],
+            [self::RFC3986_BASE, '../g',          'http://a/b/g'],
+            [self::RFC3986_BASE, '../..',         'http://a/'],
+            [self::RFC3986_BASE, '../../',        'http://a/'],
+            [self::RFC3986_BASE, '../../g',       'http://a/g'],
+            [self::RFC3986_BASE, '../../../g',    'http://a/g'],
+            [self::RFC3986_BASE, '../../../../g', 'http://a/g'],
+            [self::RFC3986_BASE, '/./g',          'http://a/g'],
+            [self::RFC3986_BASE, '/../g',         'http://a/g'],
+            [self::RFC3986_BASE, 'g.',            'http://a/b/c/g.'],
+            [self::RFC3986_BASE, '.g',            'http://a/b/c/.g'],
+            [self::RFC3986_BASE, 'g..',           'http://a/b/c/g..'],
+            [self::RFC3986_BASE, '..g',           'http://a/b/c/..g'],
+            [self::RFC3986_BASE, './../g',        'http://a/b/g'],
+            [self::RFC3986_BASE, 'foo////g',      'http://a/b/c/foo////g'],
+            [self::RFC3986_BASE, './g/.',         'http://a/b/c/g/'],
+            [self::RFC3986_BASE, 'g/./h',         'http://a/b/c/g/h'],
+            [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'],
+            //[self::RFC3986_BASE, 'http:g',        'http:g'],
+        ];
+    }
+
+    public function testAddAndRemoveQueryValues()
+    {
+        $uri = new Uri('http://foo.com/bar');
+        $uri = Uri::withQueryValue($uri, 'a', 'b');
+        $uri = Uri::withQueryValue($uri, 'c', 'd');
+        $uri = Uri::withQueryValue($uri, 'e', null);
+        $this->assertEquals('a=b&c=d&e', $uri->getQuery());
+
+        $uri = Uri::withoutQueryValue($uri, 'c');
+        $uri = Uri::withoutQueryValue($uri, 'e');
+        $this->assertEquals('a=b', $uri->getQuery());
+        $uri = Uri::withoutQueryValue($uri, 'a');
+        $uri = Uri::withoutQueryValue($uri, 'a');
+        $this->assertEquals('', $uri->getQuery());
+    }
+
+    public function testGetAuthorityReturnsCorrectPort()
+    {
+        // HTTPS non-standard port
+        $uri = new Uri('https://foo.co:99');
+        $this->assertEquals('foo.co:99', $uri->getAuthority());
+
+        // HTTP non-standard port
+        $uri = new Uri('http://foo.co:99');
+        $this->assertEquals('foo.co:99', $uri->getAuthority());
+
+        // No scheme
+        $uri = new Uri('foo.co:99');
+        $this->assertEquals('foo.co:99', $uri->getAuthority());
+
+        // No host or port
+        $uri = new Uri('http:');
+        $this->assertEquals('', $uri->getAuthority());
+
+        // No host or port
+        $uri = new Uri('http://foo.co');
+        $this->assertEquals('foo.co', $uri->getAuthority());
+    }
+
+    public function pathTestProvider()
+    {
+        return [
+            // Percent encode spaces.
+            ['http://foo.com/baz bar', 'http://foo.com/baz%20bar'],
+            // Don't encoding something that's already encoded.
+            ['http://foo.com/baz%20bar', 'http://foo.com/baz%20bar'],
+            // Percent encode invalid percent encodings
+            ['http://foo.com/baz%2-bar', 'http://foo.com/baz%252-bar'],
+            // Don't encode path segments
+            ['http://foo.com/baz/bar/bam?a', 'http://foo.com/baz/bar/bam?a'],
+            ['http://foo.com/baz+bar', 'http://foo.com/baz+bar'],
+            ['http://foo.com/baz:bar', 'http://foo.com/baz:bar'],
+            ['http://foo.com/baz@bar', 'http://foo.com/baz@bar'],
+            ['http://foo.com/baz(bar);bam/', 'http://foo.com/baz(bar);bam/'],
+            ['http://foo.com/a-zA-Z0-9.-_~!$&\'()*+,;=:@', 'http://foo.com/a-zA-Z0-9.-_~!$&\'()*+,;=:@'],
+        ];
+    }
+
+    /**
+     * @dataProvider pathTestProvider
+     */
+    public function testUriEncodesPathProperly($input, $output)
+    {
+        $uri = new Uri($input);
+        $this->assertEquals((string) $uri, $output);
+    }
+
+    public function testDoesNotAddPortWhenNoPort()
+    {
+        $this->assertEquals('bar', new Uri('//bar'));
+        $this->assertEquals('bar', (new Uri('//bar'))->getHost());
+    }
+
+    public function testAllowsForRelativeUri()
+    {
+        $uri = (new Uri)->withPath('foo');
+        $this->assertEquals('foo', $uri->getPath());
+        $this->assertEquals('foo', (string) $uri);
+    }
+
+    public function testAddsSlashForRelativeUriStringWithHost()
+    {
+        $uri = (new Uri)->withPath('foo')->withHost('bar.com');
+        $this->assertEquals('foo', $uri->getPath());
+        $this->assertEquals('bar.com/foo', (string) $uri);
+    }
+}
diff --git a/core/vendor/guzzlehttp/psr7/tests/bootstrap.php b/core/vendor/guzzlehttp/psr7/tests/bootstrap.php
new file mode 100644
index 0000000..8601dd3
--- /dev/null
+++ b/core/vendor/guzzlehttp/psr7/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+namespace GuzzleHttp\Tests\Psr7;
+
+require __DIR__ . '/../vendor/autoload.php';
+
+class HasToString
+{
+    public function __toString() {
+        return 'foo';
+    }
+}
diff --git a/core/vendor/guzzlehttp/ringphp/.gitignore b/core/vendor/guzzlehttp/ringphp/.gitignore
deleted file mode 100644
index 290a945..0000000
--- a/core/vendor/guzzlehttp/ringphp/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-vendor
-build/artifacts/
-composer.lock
-docs/_build/
diff --git a/core/vendor/guzzlehttp/ringphp/.travis.yml b/core/vendor/guzzlehttp/ringphp/.travis.yml
deleted file mode 100644
index e43fbdd..0000000
--- a/core/vendor/guzzlehttp/ringphp/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-  - hhvm
-
-before_script:
-  - composer self-update
-  - composer install --no-interaction --prefer-source --dev
-  - ~/.nvm/nvm.sh install v0.6.14
-  - ~/.nvm/nvm.sh run v0.6.14
-
-script:
-  - make test
-
-matrix:
-  allow_failures:
-    - php: hhvm
-  fast_finish: true
diff --git a/core/vendor/guzzlehttp/ringphp/CHANGELOG.md b/core/vendor/guzzlehttp/ringphp/CHANGELOG.md
deleted file mode 100644
index 97458da..0000000
--- a/core/vendor/guzzlehttp/ringphp/CHANGELOG.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# CHANGELOG
-
-## 1.0.7 - 2015-03-29
-
-* PHP 7 fixes.
-
-## 1.0.6 - 2015-02-26
-
-* Bug fix: futures now extend from React's PromiseInterface to ensure that they
-  are properly forwarded down the promise chain.
-* The multi handle of the CurlMultiHandler is now created lazily.
-
-## 1.0.5 - 2014-12-10
-
-* Adding more error information to PHP stream wrapper exceptions.
-* Added digest auth integration test support to test server.
-
-## 1.0.4 - 2014-12-01
-
-* Added support for older versions of cURL that do not have CURLOPT_TIMEOUT_MS.
-* Setting debug to `false` does not enable debug output.
-* Added a fix to the StreamHandler to return a `FutureArrayInterface` when an
-  error occurs.
-
-## 1.0.3 - 2014-11-03
-
-* Setting the `header` stream option as a string to be compatible with GAE.
-* Header parsing now ensures that header order is maintained in the parsed
-  message.
-
-## 1.0.2 - 2014-10-28
-
-* Now correctly honoring a `version` option is supplied in a request.
-  See https://github.com/guzzle/RingPHP/pull/8
-
-## 1.0.1 - 2014-10-26
-
-* Fixed a header parsing issue with the `CurlHandler` and `CurlMultiHandler`
-  that caused cURL requests with multiple responses to merge repsonses together
-  (e.g., requests with digest authentication).
-
-## 1.0.0 - 2014-10-12
-
-* Initial release.
diff --git a/core/vendor/guzzlehttp/ringphp/Makefile b/core/vendor/guzzlehttp/ringphp/Makefile
deleted file mode 100644
index 21c812e..0000000
--- a/core/vendor/guzzlehttp/ringphp/Makefile
+++ /dev/null
@@ -1,46 +0,0 @@
-all: clean coverage docs
-
-docs:
-	cd docs && make html
-
-view-docs:
-	open docs/_build/html/index.html
-
-start-server: stop-server
-	node tests/Client/server.js &> /dev/null &
-
-stop-server:
-	@PID=$(shell ps axo pid,command \
-	  | grep 'tests/Client/server.js' \
-	  | grep -v grep \
-	  | cut -f 1 -d " "\
-	) && [ -n "$$PID" ] && kill $$PID || true
-
-test: start-server
-	vendor/bin/phpunit $(TEST)
-	$(MAKE) stop-server
-
-coverage: start-server
-	vendor/bin/phpunit --coverage-html=build/artifacts/coverage $(TEST)
-	$(MAKE) stop-server
-
-view-coverage:
-	open build/artifacts/coverage/index.html
-
-clean:
-	rm -rf build/artifacts/*
-	cd docs && make clean
-
-tag:
-	$(if $(TAG),,$(error TAG is not defined. Pass via "make tag TAG=4.2.1"))
-	@echo Tagging $(TAG)
-	chag update -m '$(TAG) ()'
-	git add -A
-	git commit -m '$(TAG) release'
-	chag tag
-
-perf: start-server
-	php tests/perf.php
-	$(MAKE) stop-server
-
-.PHONY: docs
diff --git a/core/vendor/guzzlehttp/ringphp/README.rst b/core/vendor/guzzlehttp/ringphp/README.rst
deleted file mode 100644
index 10374e8..0000000
--- a/core/vendor/guzzlehttp/ringphp/README.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-=======
-RingPHP
-=======
-
-Provides a simple API and specification that abstracts away the details of HTTP
-into a single PHP function. RingPHP be used to power HTTP clients and servers
-through a PHP function that accepts a request hash and returns a response hash
-that is fulfilled using a `promise <https://github.com/reactphp/promise>`_,
-allowing RingPHP to support both synchronous and asynchronous workflows.
-
-By abstracting the implementation details of different HTTP clients and
-servers, RingPHP allows you to utilize pluggable HTTP clients and servers
-without tying your application to a specific implementation.
-
-.. code-block:: php
-
-    <?php
-    require 'vendor/autoload.php';
-
-    use GuzzleHttp\Ring\Client\CurlHandler;
-
-    $handler = new CurlHandler();
-    $response = $handler([
-        'http_method' => 'GET',
-        'uri'         => '/',
-        'headers'     => [
-            'host'  => ['www.google.com'],
-            'x-foo' => ['baz']
-        ]
-    ]);
-
-    $response->then(function (array $response) {
-        echo $response['status'];
-    });
-
-    $response->wait();
-
-RingPHP is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
-which, in turn, was inspired by Python's WSGI and Ruby's Rack. RingPHP is
-utilized as the handler layer in `Guzzle <http://guzzlephp.org>`_ 5.0+ to send
-HTTP requests.
-
-Documentation
--------------
-
-See http://ringphp.readthedocs.org/ for the full online documentation.
diff --git a/core/vendor/guzzlehttp/ringphp/composer.json b/core/vendor/guzzlehttp/ringphp/composer.json
deleted file mode 100644
index fcca629..0000000
--- a/core/vendor/guzzlehttp/ringphp/composer.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-    "name": "guzzlehttp/ringphp",
-    "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Michael Dowling",
-            "email": "mtdowling@gmail.com",
-            "homepage": "https://github.com/mtdowling"
-        }
-    ],
-    "require": {
-        "php": ">=5.4.0",
-        "guzzlehttp/streams": "~3.0",
-        "react/promise": "~2.0"
-    },
-    "require-dev": {
-        "ext-curl": "*",
-        "phpunit/phpunit": "~4.0"
-    },
-    "suggest": {
-        "ext-curl": "Guzzle will use specific adapters if cURL is present"
-    },
-    "autoload": {
-        "psr-4": {
-            "GuzzleHttp\\Ring\\": "src/"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "GuzzleHttp\\Tests\\Ring\\": "tests/"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.0-dev"
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/docs/Makefile b/core/vendor/guzzlehttp/ringphp/docs/Makefile
deleted file mode 100644
index 51270aa..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  html       to make standalone HTML files"
-	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
-	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
-	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
-	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-
-clean:
-	-rm -rf $(BUILDDIR)/*
-
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/GuzzleRing.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/GuzzleRing.qhc"
-
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/GuzzleRing"
-	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/GuzzleRing"
-	@echo "# devhelp"
-
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make' in that directory to run these through (pdf)latex" \
-	      "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through pdflatex..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
-	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-	@echo
-	@echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo
-	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-	@echo "Run \`make' in that directory to run these through makeinfo" \
-	      "(use \`make info' here to do that automatically)."
-
-info:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo "Running Texinfo files through makeinfo..."
-	make -C $(BUILDDIR)/texinfo info
-	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
-	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-	@echo
-	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/core/vendor/guzzlehttp/ringphp/docs/client_handlers.rst b/core/vendor/guzzlehttp/ringphp/docs/client_handlers.rst
deleted file mode 100644
index 3151f00..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/client_handlers.rst
+++ /dev/null
@@ -1,173 +0,0 @@
-===============
-Client Handlers
-===============
-
-Client handlers accept a request array and return a future response array that
-can be used synchronously as an array or asynchronously using a promise.
-
-Built-In Handlers
------------------
-
-RingPHP comes with three built-in client handlers.
-
-Stream Handler
-~~~~~~~~~~~~~~
-
-The ``GuzzleHttp\Ring\Client\StreamHandler`` uses PHP's
-`http stream wrapper <http://php.net/manual/en/wrappers.http.php>`_ to send
-requests.
-
-.. note::
-
-    This handler cannot send requests concurrently.
-
-You can provide an associative array of custom stream context options to the
-StreamHandler using the ``stream_context`` key of the ``client`` request
-option.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\StreamHandler;
-
-    $response = $handler([
-        'http_method' => 'GET',
-        'uri' => '/',
-        'headers' => ['host' => ['httpbin.org']],
-        'client' => [
-            'stream_context' => [
-                'http' => [
-                    'request_fulluri' => true,
-                    'method' => 'HEAD'
-                ],
-                'socket' => [
-                    'bindto' => '127.0.0.1:0'
-                ],
-                'ssl' => [
-                    'verify_peer' => false
-                ]
-            ]
-        ]
-    ]);
-
-    // Even though it's already completed, you can still use a promise
-    $response->then(function ($response) {
-        echo $response['status']; // 200
-    });
-
-    // Or access the response using the future interface
-    echo $response['status']; // 200
-
-cURL Handler
-~~~~~~~~~~~~
-
-The ``GuzzleHttp\Ring\Client\CurlHandler`` can be used with PHP 5.5+ to send
-requests using cURL easy handles. This handler is great for sending requests
-one at a time because the execute and select loop is implemented in C code
-which executes faster and consumes less memory than using PHP's
-``curl_multi_*`` interface.
-
-.. note::
-
-    This handler cannot send requests concurrently.
-
-When using the CurlHandler, custom curl options can be specified as an
-associative array of `cURL option constants <http://php.net/manual/en/curl.constants.php>`_
-mapping to values in the ``client`` option of a requst using the **curl** key.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlHandler;
-
-    $handler = new CurlHandler();
-
-    $request = [
-        'http_method' => 'GET',
-        'headers'     => ['host' => [Server::$host]],
-        'client'      => ['curl' => [CURLOPT_LOW_SPEED_LIMIT => 10]]
-    ];
-
-    $response = $handler($request);
-
-    // The response can be used directly as an array.
-    echo $response['status']; // 200
-
-    // Or, it can be used as a promise (that has already fulfilled).
-    $response->then(function ($response) {
-        echo $response['status']; // 200
-    });
-
-cURL Multi Handler
-~~~~~~~~~~~~~~~~~~
-
-The ``GuzzleHttp\Ring\Client\CurlMultiHandler`` transfers requests using
-cURL's `multi API <http://curl.haxx.se/libcurl/c/libcurl-multi.html>`_. The
-``CurlMultiHandler`` is great for sending requests concurrently.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlMultiHandler;
-
-    $handler = new CurlMultiHandler();
-
-    $request = [
-        'http_method' => 'GET',
-        'headers'     => ['host' => [Server::$host]]
-    ];
-
-    // this call returns a future array immediately.
-    $response = $handler($request);
-
-    // Ideally, you should use the promise API to not block.
-    $response
-        ->then(function ($response) {
-            // Got the response at some point in the future
-            echo $response['status']; // 200
-            // Don't break the chain
-            return $response;
-        })->then(function ($response) {
-            // ...
-        });
-
-    // If you really need to block, then you can use the response as an
-    // associative array. This will block until it has completed.
-    echo $response['status']; // 200
-
-Just like the ``CurlHandler``, the ``CurlMultiHandler`` accepts custom curl
-option in the ``curl`` key of the ``client`` request option.
-
-Mock Handler
-~~~~~~~~~~~~
-
-The ``GuzzleHttp\Ring\Client\MockHandler`` is used to return mock responses.
-When constructed, the handler can be configured to return the same response
-array over and over, a future response, or a the evaluation of a callback
-function.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\MockHandler;
-
-    // Return a canned response.
-    $mock = new MockHandler(['status' => 200]);
-    $response = $mock([]);
-    assert(200 == $response['status']);
-    assert([] == $response['headers']);
-
-Implementing Handlers
----------------------
-
-Client handlers are just PHP callables (functions or classes that have the
-``__invoke`` magic method). The callable accepts a request array and MUST
-return an instance of ``GuzzleHttp\Ring\Future\FutureArrayInterface`` so that
-the response can be used by both blocking and non-blocking consumers.
-
-Handlers need to follow a few simple rules:
-
-1. Do not throw exceptions. If an error is encountered, return an array that
-   contains the ``error`` key that maps to an ``\Exception`` value.
-2. If the request has a ``delay`` client option, then the handler should only
-   send the request after the specified delay time in seconds. Blocking
-   handlers may find it convenient to just let the
-   ``GuzzleHttp\Ring\Core::doSleep($request)`` function handle this for them.
-3. Always return an instance of ``GuzzleHttp\Ring\Future\FutureArrayInterface``.
-4. Complete any outstanding requests when the handler is destructed.
diff --git a/core/vendor/guzzlehttp/ringphp/docs/client_middleware.rst b/core/vendor/guzzlehttp/ringphp/docs/client_middleware.rst
deleted file mode 100644
index 7c52c8a..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/client_middleware.rst
+++ /dev/null
@@ -1,165 +0,0 @@
-=================
-Client Middleware
-=================
-
-Middleware intercepts requests before they are sent over the wire and can be
-used to add functionality to handlers.
-
-Modifying Requests
-------------------
-
-Let's say you wanted to modify requests before they are sent over the wire
-so that they always add specific headers. This can be accomplished by creating
-a function that accepts a handler and returns a new function that adds the
-composed behavior.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlHandler;
-
-    $handler = new CurlHandler();
-
-    $addHeaderHandler = function (callable $handler, array $headers = []) {
-        return function (array $request) use ($handler, $headers) {
-            // Add our custom headers
-            foreach ($headers as $key => $value) {
-                $request['headers'][$key] = $value;
-            }
-
-            // Send the request using the handler and return the response.
-            return $handler($request);
-        }
-    };
-
-    // Create a new handler that adds headers to each request.
-    $handler = $addHeaderHandler($handler, [
-        'X-AddMe'       => 'hello',
-        'Authorization' => 'Basic xyz'
-    ]);
-
-    $response = $handler([
-        'http_method' => 'GET',
-        'headers'     => ['Host' => ['httpbin.org']
-    ]);
-
-Modifying Responses
--------------------
-
-You can change a response as it's returned from a middleware. Remember that
-responses returned from an handler (including middleware) must implement
-``GuzzleHttp\Ring\Future\FutureArrayInterface``. In order to be a good citizen,
-you should not expect that the responses returned through your middleware will
-be completed synchronously. Instead, you should use the
-``GuzzleHttp\Ring\Core::proxy()`` function to modify the response when the
-underlying promise is resolved. This function is a helper function that makes it
-easy to create a new instance of ``FutureArrayInterface`` that wraps an existing
-``FutureArrayInterface`` object.
-
-Let's say you wanted to add headers to a response as they are returned from
-your middleware, but you want to make sure you aren't causing future
-responses to be dereferenced right away. You can achieve this by modifying the
-incoming request and using the ``Core::proxy`` function.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Core;
-    use GuzzleHttp\Ring\Client\CurlHandler;
-
-    $handler = new CurlHandler();
-
-    $responseHeaderHandler = function (callable $handler, array $headers) {
-        return function (array $request) use ($handler, $headers) {
-            // Send the request using the wrapped handler.
-            return Core::proxy($handler($request), function ($response) use ($headers) {
-                // Add the headers to the response when it is available.
-                foreach ($headers as $key => $value) {
-                    $response['headers'][$key] = (array) $value;
-                }
-                // Note that you can return a regular response array when using
-                // the proxy method.
-                return $response;
-            });
-        }
-    };
-
-    // Create a new handler that adds headers to each response.
-    $handler = $responseHeaderHandler($handler, ['X-Header' => 'hello!']);
-
-    $response = $handler([
-        'http_method' => 'GET',
-        'headers'     => ['Host' => ['httpbin.org']
-    ]);
-
-    assert($response['headers']['X-Header'] == 'hello!');
-
-Built-In Middleware
--------------------
-
-RingPHP comes with a few basic client middlewares that modify requests
-and responses.
-
-Streaming Middleware
-~~~~~~~~~~~~~~~~~~~~
-
-If you want to send all requests with the ``streaming`` option to a specific
-handler but other requests to a different handler, then use the streaming
-middleware.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlHandler;
-    use GuzzleHttp\Ring\Client\StreamHandler;
-    use GuzzleHttp\Ring\Client\Middleware;
-
-    $defaultHandler = new CurlHandler();
-    $streamingHandler = new StreamHandler();
-    $streamingHandler = Middleware::wrapStreaming(
-        $defaultHandler,
-        $streamingHandler
-    );
-
-    // Send the request using the streaming handler.
-    $response = $streamingHandler([
-        'http_method' => 'GET',
-        'headers'     => ['Host' => ['www.google.com'],
-        'stream'      => true
-    ]);
-
-    // Send the request using the default handler.
-    $response = $streamingHandler([
-        'http_method' => 'GET',
-        'headers'     => ['Host' => ['www.google.com']
-    ]);
-
-Future Middleware
-~~~~~~~~~~~~~~~~~
-
-If you want to send all requests with the ``future`` option to a specific
-handler but other requests to a different handler, then use the future
-middleware.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlHandler;
-    use GuzzleHttp\Ring\Client\CurlMultiHandler;
-    use GuzzleHttp\Ring\Client\Middleware;
-
-    $defaultHandler = new CurlHandler();
-    $futureHandler = new CurlMultiHandler();
-    $futureHandler = Middleware::wrapFuture(
-        $defaultHandler,
-        $futureHandler
-    );
-
-    // Send the request using the blocking CurlHandler.
-    $response = $futureHandler([
-        'http_method' => 'GET',
-        'headers'     => ['Host' => ['www.google.com']
-    ]);
-
-    // Send the request using the non-blocking CurlMultiHandler.
-    $response = $futureHandler([
-        'http_method' => 'GET',
-        'headers'     => ['Host' => ['www.google.com'],
-        'future'      => true
-    ]);
diff --git a/core/vendor/guzzlehttp/ringphp/docs/conf.py b/core/vendor/guzzlehttp/ringphp/docs/conf.py
deleted file mode 100644
index c6404aa..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/conf.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import sys, os
-import sphinx_rtd_theme
-from sphinx.highlighting import lexers
-from pygments.lexers.web import PhpLexer
-
-
-lexers['php'] = PhpLexer(startinline=True, linenos=1)
-lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
-primary_domain = 'php'
-
-extensions = []
-templates_path = ['_templates']
-source_suffix = '.rst'
-master_doc = 'index'
-project = u'RingPHP'
-copyright = u'2014, Michael Dowling'
-version = '1.0.0-alpha'
-exclude_patterns = ['_build']
-
-html_title = "RingPHP"
-html_short_title = "RingPHP"
-html_theme = "sphinx_rtd_theme"
-html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
diff --git a/core/vendor/guzzlehttp/ringphp/docs/futures.rst b/core/vendor/guzzlehttp/ringphp/docs/futures.rst
deleted file mode 100644
index af29cb3..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/futures.rst
+++ /dev/null
@@ -1,164 +0,0 @@
-=======
-Futures
-=======
-
-Futures represent a computation that may have not yet completed. RingPHP
-uses hybrid of futures and promises to provide a consistent API that can be
-used for both blocking and non-blocking consumers.
-
-Promises
---------
-
-You can get the result of a future when it is ready using the promise interface
-of a future. Futures expose a promise API via a ``then()`` method that utilizes
-`React's promise library <https://github.com/reactphp/promise>`_. You should
-use this API when you do not wish to block.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlMultiHandler;
-
-    $request = [
-        'http_method' => 'GET',
-        'uri'         => '/',
-        'headers'     => ['host' => ['httpbin.org']]
-    ];
-
-    $response = $handler($request);
-
-    // Use the then() method to use the promise API of the future.
-    $response->then(function ($response) {
-        echo $response['status'];
-    });
-
-You can get the promise used by a future, an instance of
-``React\Promise\PromiseInterface``, by calling the ``promise()`` method.
-
-.. code-block:: php
-
-    $response = $handler($request);
-    $promise = $response->promise();
-    $promise->then(function ($response) {
-        echo $response['status'];
-    });
-
-This promise value can be used with React's
-`aggregate promise functions <https://github.com/reactphp/promise#functions>`_.
-
-Waiting
--------
-
-You can wait on a future to complete and retrieve the value, or *dereference*
-the future, using the ``wait()`` method. Calling the ``wait()`` method of a
-future will block until the result is available. The result is then returned or
-an exception is thrown if and exception was encountered while waiting on the
-the result. Subsequent calls to dereference a future will return the previously
-completed result or throw the previously encountered exception. Futures can be
-cancelled, which stops the computation if possible.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlMultiHandler;
-
-    $response = $handler([
-        'http_method' => 'GET',
-        'uri'         => '/',
-        'headers'     => ['host' => ['httpbin.org']]
-    ]);
-
-    // You can explicitly call block to wait on a result.
-    $realizedResponse = $response->wait();
-
-    // Future responses can be used like a regular PHP array.
-    echo $response['status'];
-
-In addition to explicitly calling the ``wait()`` function, using a future like
-a normal value will implicitly trigger the ``wait()`` function.
-
-Future Responses
-----------------
-
-RingPHP uses futures to return asynchronous responses immediately. Client
-handlers always return future responses that implement
-``GuzzleHttp\Ring\Future\ArrayFutureInterface``. These future responses act
-just like normal PHP associative arrays for blocking access and provide a
-promise interface for non-blocking access.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlMultiHandler;
-
-    $handler = new CurlMultiHandler();
-
-    $request = [
-        'http_method'  => 'GET',
-        'uri'          => '/',
-        'headers'      => ['Host' => ['www.google.com']]
-    ];
-
-    $response = $handler($request);
-
-    // Use the promise API for non-blocking access to the response. The actual
-    // response value will be delivered to the promise.
-    $response->then(function ($response) {
-        echo $response['status'];
-    });
-
-    // You can wait (block) until the future is completed.
-    $response->wait();
-
-    // This will implicitly call wait(), and will block too!
-    $response['status'];
-
-.. important::
-
-    Futures that are not completed by the time the underlying handler is
-    destructed will be completed when the handler is shutting down.
-
-Cancelling
-----------
-
-Futures can be cancelled if they have not already been dereferenced.
-
-RingPHP futures are typically implemented with the
-``GuzzleHttp\Ring\Future\BaseFutureTrait``. This trait provides the cancellation
-functionality that should be common to most implementations. Cancelling a
-future response will try to prevent the request from sending over the wire.
-
-When a future is cancelled, the cancellation function is invoked and performs
-the actual work needed to cancel the request from sending if possible
-(e.g., telling an event loop to stop sending a request or to close a socket).
-If no cancellation function is provided, then a request cannot be cancelled. If
-a cancel function is provided, then it should accept the future as an argument
-and return true if the future was successfully cancelled or false if it could
-not be cancelled.
-
-Wrapping an existing Promise
-----------------------------
-
-You can easily create a future from any existing promise using the
-``GuzzleHttp\Ring\Future\FutureValue`` class. This class's constructor
-accepts a promise as the first argument, a wait function as the second
-argument, and a cancellation function as the third argument. The dereference
-function is used to force the promise to resolve (for example, manually ticking
-an event loop). The cancel function is optional and is used to tell the thing
-that created the promise that it can stop computing the result (for example,
-telling an event loop to stop transferring a request).
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Future\FutureValue;
-    use React\Promise\Deferred;
-
-    $deferred = new Deferred();
-    $promise = $deferred->promise();
-
-    $f = new FutureValue(
-        $promise,
-        function () use ($deferred) {
-            // This function is responsible for blocking and resolving the
-            // promise. Here we pass in a reference to the deferred so that
-            // it can be resolved or rejected.
-            $deferred->resolve('foo');
-        }
-    );
diff --git a/core/vendor/guzzlehttp/ringphp/docs/index.rst b/core/vendor/guzzlehttp/ringphp/docs/index.rst
deleted file mode 100644
index 4bbce63..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/index.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-=======
-RingPHP
-=======
-
-Provides a simple API and specification that abstracts away the details of HTTP
-into a single PHP function. RingPHP be used to power HTTP clients and servers
-through a PHP function that accepts a request hash and returns a response hash
-that is fulfilled using a `promise <https://github.com/reactphp/promise>`_,
-allowing RingPHP to support both synchronous and asynchronous workflows.
-
-By abstracting the implementation details of different HTTP clients and
-servers, RingPHP allows you to utilize pluggable HTTP clients and servers
-without tying your application to a specific implementation.
-
-.. toctree::
-   :maxdepth: 2
-
-   spec
-   futures
-   client_middleware
-   client_handlers
-   testing
-
-.. code-block:: php
-
-    <?php
-    require 'vendor/autoload.php';
-
-    use GuzzleHttp\Ring\Client\CurlHandler;
-
-    $handler = new CurlHandler();
-    $response = $handler([
-        'http_method' => 'GET',
-        'uri'         => '/',
-        'headers'     => [
-            'host'  => ['www.google.com'],
-            'x-foo' => ['baz']
-        ]
-    ]);
-
-    $response->then(function (array $response) {
-        echo $response['status'];
-    });
-
-    $response->wait();
-
-RingPHP is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
-which, in turn, was inspired by Python's WSGI and Ruby's Rack. RingPHP is
-utilized as the handler layer in `Guzzle <http://guzzlephp.org>`_ 5.0+ to send
-HTTP requests.
diff --git a/core/vendor/guzzlehttp/ringphp/docs/requirements.txt b/core/vendor/guzzlehttp/ringphp/docs/requirements.txt
deleted file mode 100644
index 483a4e9..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-sphinx_rtd_theme
diff --git a/core/vendor/guzzlehttp/ringphp/docs/spec.rst b/core/vendor/guzzlehttp/ringphp/docs/spec.rst
deleted file mode 100644
index bc91078..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/spec.rst
+++ /dev/null
@@ -1,311 +0,0 @@
-=============
-Specification
-=============
-
-RingPHP applications consist of handlers, requests, responses, and
-middleware.
-
-Handlers
---------
-
-Handlers are implemented as a PHP ``callable`` that accept a request array 
-and return a response array (``GuzzleHttp\Ring\Future\FutureArrayInterface``).
-
-For example:
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Future\CompletedFutureArray;
-
-    $mockHandler = function (array $request) {
-        return new CompletedFutureArray([
-            'status'  => 200,
-            'headers' => ['X-Foo' => ['Bar']],
-            'body'    => 'Hello!'
-         ]);
-    };
-
-This handler returns the same response each time it is invoked. All RingPHP
-handlers must return a ``GuzzleHttp\Ring\Future\FutureArrayInterface``. Use
-``GuzzleHttp\Ring\Future\CompletedFutureArray`` when returning a response that
-has already completed.
-
-Requests
---------
-
-A request array is a PHP associative array that contains the configuration
-settings need to send a request.
-
-.. code-block:: php
-
-    $request = [
-        'http_method' => 'GET',
-        'scheme'      => 'http',
-        'uri'         => '/',
-        'body'        => 'hello!',
-        'client'      => ['timeout' => 1.0],
-        'headers'     => [
-            'host'  => ['httpbin.org'],
-            'X-Foo' => ['baz', 'bar']
-        ]
-    ];
-
-The request array contains the following key value pairs:
-
-request_method
-    (string, required) The HTTP request method, must be all caps corresponding
-    to a HTTP request method, such as ``GET`` or ``POST``.
-
-scheme
-    (string) The transport protocol, must be one of ``http`` or ``https``.
-    Defaults to ``http``.
-
-uri
-    (string, required) The request URI excluding the query string. Must
-    start with "/".
-
-query_string
-    (string) The query string, if present (e.g., ``foo=bar``).
-
-version
-    (string) HTTP protocol version. Defaults to ``1.1``.
-
-headers
-    (required, array) Associative array of headers. Each key represents the
-    header name. Each value contains an array of strings where each entry of
-    the array SHOULD be sent over the wire on a separate header line.
-
-body
-    (string, fopen resource, ``Iterator``, ``GuzzleHttp\Stream\StreamInterface``)
-    The body of the request, if present. Can be a string, resource returned
-    from fopen, an ``Iterator`` that yields chunks of data, an object that
-    implemented ``__toString``, or a ``GuzzleHttp\Stream\StreamInterface``.
-
-future
-    (bool, string) Controls the asynchronous behavior of a response.
-
-    Set to ``true`` or omit the ``future`` option to *request* that a request
-    will be completed asynchronously. Keep in mind that your request might not
-    necessarily be completed asynchronously based on the handler you are using.
-    Set the ``future`` option to ``false`` to request that a synchronous
-    response be provided.
-
-    You can provide a string value to specify fine-tuned future behaviors that
-    may be specific to the underlying handlers you are using. There are,
-    however, some common future options that handlers should implement if
-    possible.
-
-    lazy
-        Requests that the handler does not open and send the request
-        immediately, but rather only opens and sends the request once the
-        future is dereferenced. This option is often useful for sending a large
-        number of requests concurrently to allow handlers to take better
-        advantage of non-blocking transfers by first building up a pool of
-        requests.
-
-    If an handler does not implement or understand a provided string value,
-    then the request MUST be treated as if the user provided ``true`` rather
-    than the string value.
-
-    Future responses created by asynchronous handlers MUST attempt to complete
-    any outstanding future responses when they are destructed. Asynchronous
-    handlers MAY choose to automatically complete responses when the number
-    of outstanding requests reaches an handler-specific threshold.
-
-Client Specific Options
-~~~~~~~~~~~~~~~~~~~~~~~
-
-The following options are only used in ring client handlers.
-
-.. _client-options:
-
-client
-    (array) Associative array of client specific transfer options. The
-    ``client`` request key value pair can contain the following keys:
-
-    cert
-        (string, array) Set to a string to specify the path to a file
-        containing a PEM formatted SSL client side certificate. If a password
-        is required, then set ``cert`` to an array containing the path to the
-        PEM file in the first array element followed by the certificate
-        password in the second array element.
-
-    connect_timeout
-        (float) Float describing the number of seconds to wait while trying to
-        connect to a server. Use ``0`` to wait indefinitely (the default
-        behavior).
-
-    debug
-        (bool, fopen() resource) Set to true or set to a PHP stream returned by
-        fopen() to enable debug output with the handler used to send a request.
-        If set to ``true``, the output is written to PHP's STDOUT. If a PHP
-        ``fopen`` resource handle is provided, the output is written to the
-        stream.
-
-        "Debug output" is handler specific: different handlers will yield
-        different output and various various level of detail. For example, when
-        using cURL to transfer requests, cURL's `CURLOPT_VERBOSE <http://curl.haxx.se/libcurl/c/CURLOPT_VERBOSE.html>`_
-        will be used. When using the PHP stream wrapper, `stream notifications <http://php.net/manual/en/function.stream-notification-callback.php>`_
-        will be emitted.
-
-    decode_content
-        (bool) Specify whether or not ``Content-Encoding`` responses
-        (gzip, deflate, etc.) are automatically decoded. Set to ``true`` to
-        automatically decode encoded responses. Set to ``false`` to not decode
-        responses. By default, content is *not* decoded automatically.
-
-    delay
-        (int) The number of milliseconds to delay before sending the request.
-        This is often used for delaying before retrying a request. Handlers
-        SHOULD implement this if possible, but it is not a strict requirement.
-
-    progress
-        (function) Defines a function to invoke when transfer progress is made.
-        The function accepts the following arguments:
-
-        1. The total number of bytes expected to be downloaded
-        2. The number of bytes downloaded so far
-        3. The number of bytes expected to be uploaded
-        4. The number of bytes uploaded so far
-
-    proxy
-        (string, array) Pass a string to specify an HTTP proxy, or an
-        associative array to specify different proxies for different protocols
-        where the scheme is the key and the value is the proxy address.
-
-        .. code-block:: php
-
-            $request = [
-                'http_method' => 'GET',
-                'headers'     => ['host' => ['httpbin.org']],
-                'client'      => [
-                    // Use different proxies for different URI schemes.
-                    'proxy' => [
-                        'http'  => 'http://proxy.example.com:5100',
-                        'https' => 'https://proxy.example.com:6100'
-                    ]
-                ]
-            ];
-
-    ssl_key
-        (string, array) Specify the path to a file containing a private SSL key
-        in PEM format. If a password is required, then set to an array
-        containing the path to the SSL key in the first array element followed
-        by the password required for the certificate in the second element.
-
-    save_to
-        (string, fopen resource, ``GuzzleHttp\Stream\StreamInterface``)
-        Specifies where the body of the response is downloaded. Pass a string to
-        open a local file on disk and save the output to the file. Pass an fopen
-        resource to save the output to a PHP stream resource. Pass a
-        ``GuzzleHttp\Stream\StreamInterface`` to save the output to a Guzzle
-        StreamInterface. Omitting this option will typically save the body of a
-        response to a PHP temp stream.
-
-    stream
-        (bool) Set to true to stream a response rather than download it all
-        up-front. This option will only be utilized when the corresponding
-        handler supports it.
-
-    timeout
-        (float) Float describing the timeout of the request in seconds. Use 0 to
-        wait indefinitely (the default behavior).
-
-    verify
-        (bool, string) Describes the SSL certificate verification behavior of a
-        request. Set to true to enable SSL certificate verification using the
-        system CA bundle when available (the default). Set to false to disable
-        certificate verification (this is insecure!). Set to a string to provide
-        the path to a CA bundle on disk to enable verification using a custom
-        certificate.
-
-    version
-        (string) HTTP protocol version to use with the request.
-
-Server Specific Options
-~~~~~~~~~~~~~~~~~~~~~~~
-
-The following options are only used in ring server handlers.
-
-server_port
-    (integer) The port on which the request is being handled. This is only
-    used with ring servers, and is required.
-
-server_name
-    (string) The resolved server name, or the server IP address. Required when
-    using a Ring server.
-
-remote_addr
-    (string) The IP address of the client or the last proxy that sent the
-    request. Required when using a Ring server.
-
-Responses
----------
-
-A response is an array-like object that implements
-``GuzzleHttp\Ring\Future\FutureArrayInterface``. Responses contain the
-following key value pairs:
-
-body
-    (string, fopen resource, ``Iterator``, ``GuzzleHttp\Stream\StreamInterface``)
-    The body of the response, if present. Can be a string, resource returned
-    from fopen, an ``Iterator`` that yields chunks of data, an object that
-    implemented ``__toString``, or a ``GuzzleHttp\Stream\StreamInterface``.
-
-effective_url
-    (string) The URL that returned the resulting response.
-
-error
-    (``\Exception``) Contains an exception describing any errors that were
-    encountered during the transfer.
-
-headers
-    (Required, array) Associative array of headers. Each key represents the
-    header name. Each value contains an array of strings where each entry of
-    the array is a header line. The headers array MAY be an empty array in the
-    event an error occurred before a response was received.
-
-reason
-    (string) Optional reason phrase. This option should be provided when the
-    reason phrase does not match the typical reason phrase associated with the
-    ``status`` code. See `RFC 7231 <http://tools.ietf.org/html/rfc7231#section-6.1>`_
-    for a list of HTTP reason phrases mapped to status codes.
-
-status
-    (Required, integer) The HTTP status code. The status code MAY be set to
-    ``null`` in the event an error occurred before a response was received
-    (e.g., a networking error).
-
-transfer_stats
-    (array) Provides an associative array of arbitrary transfer statistics if
-    provided by the underlying handler.
-
-version
-    (string) HTTP protocol version. Defaults to ``1.1``.
-
-Middleware
-----------
-
-Ring middleware augments the functionality of handlers by invoking them in the
-process of generating responses. Middleware is typically implemented as a
-higher-order function that takes one or more handlers as arguments followed by
-an optional associative array of options as the last argument, returning a new
-handler with the desired compound behavior.
-
-Here's an example of a middleware that adds a Content-Type header to each
-request.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\CurlHandler;
-    use GuzzleHttp\Ring\Core;
-
-    $contentTypeHandler = function(callable $handler, $contentType) {
-        return function (array $request) use ($handler, $contentType) {
-            return $handler(Core::setHeader('Content-Type', $contentType));
-        };
-    };
-
-    $baseHandler = new CurlHandler();
-    $wrappedHandler = $contentTypeHandler($baseHandler, 'text/html');
-    $response = $wrappedHandler([/** request hash **/]);
diff --git a/core/vendor/guzzlehttp/ringphp/docs/testing.rst b/core/vendor/guzzlehttp/ringphp/docs/testing.rst
deleted file mode 100644
index 9df2562..0000000
--- a/core/vendor/guzzlehttp/ringphp/docs/testing.rst
+++ /dev/null
@@ -1,74 +0,0 @@
-=======
-Testing
-=======
-
-RingPHP tests client handlers using `PHPUnit <https://phpunit.de/>`_ and a
-built-in node.js web server.
-
-Running Tests
--------------
-
-First, install the dependencies using `Composer <https://getcomposer.org>`_.
-
-    composer.phar install
-
-Next, run the unit tests using ``Make``.
-
-    make test
-
-The tests are also run on Travis-CI on each commit: https://travis-ci.org/guzzle/guzzle-ring
-
-Test Server
------------
-
-Testing client handlers usually involves actually sending HTTP requests.
-RingPHP provides a node.js web server that returns canned responses and
-keep a list of the requests that have been received. The server can then
-be queried to get a list of the requests that were sent by the client so that
-you can ensure that the client serialized and transferred requests as intended.
-
-The server keeps a list of queued responses and returns responses that are
-popped off of the queue as HTTP requests are received. When there are not
-more responses to serve, the server returns a 500 error response.
-
-The test server uses the ``GuzzleHttp\Tests\Ring\Client\Server`` class to
-control the server.
-
-.. code-block:: php
-
-    use GuzzleHttp\Ring\Client\StreamHandler;
-    use GuzzleHttp\Tests\Ring\Client\Server;
-
-    // First return a 200 followed by a 404 response.
-    Server::enqueue([
-        ['status' => 200],
-        ['status' => 404]
-    ]);
-
-    $handler = new StreamHandler();
-
-    $response = $handler([
-        'http_method' => 'GET',
-        'headers'     => ['host' => [Server::$host]],
-        'uri'         => '/'
-    ]);
-
-    assert(200 == $response['status']);
-
-    $response = $handler([
-        'http_method' => 'HEAD',
-        'headers'     => ['host' => [Server::$host]],
-        'uri'         => '/'
-    ]);
-
-    assert(404 == $response['status']);
-
-After requests have been sent, you can get a list of the requests as they
-were sent over the wire to ensure they were sent correctly.
-
-.. code-block:: php
-
-    $received = Server::received();
-
-    assert('GET' == $received[0]['http_method']);
-    assert('HEAD' == $received[1]['http_method']);
diff --git a/core/vendor/guzzlehttp/ringphp/phpunit.xml.dist b/core/vendor/guzzlehttp/ringphp/phpunit.xml.dist
deleted file mode 100644
index 1d19290..0000000
--- a/core/vendor/guzzlehttp/ringphp/phpunit.xml.dist
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit bootstrap="./tests/bootstrap.php"
-         colors="true">
-    <testsuites>
-        <testsuite>
-            <directory>tests</directory>
-        </testsuite>
-    </testsuites>
-    <filter>
-        <whitelist>
-            <directory suffix=".php">src</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php b/core/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php
deleted file mode 100644
index 2acf92e..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Client;
-
-/**
- * Client specific utility functions.
- */
-class ClientUtils
-{
-    /**
-     * Returns the default cacert bundle for the current system.
-     *
-     * First, the openssl.cafile and curl.cainfo php.ini settings are checked.
-     * If those settings are not configured, then the common locations for
-     * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X
-     * and Windows are checked. If any of these file locations are found on
-     * disk, they will be utilized.
-     *
-     * Note: the result of this function is cached for subsequent calls.
-     *
-     * @return string
-     * @throws \RuntimeException if no bundle can be found.
-     */
-    public static function getDefaultCaBundle()
-    {
-        static $cached = null;
-        static $cafiles = [
-            // Red Hat, CentOS, Fedora (provided by the ca-certificates package)
-            '/etc/pki/tls/certs/ca-bundle.crt',
-            // Ubuntu, Debian (provided by the ca-certificates package)
-            '/etc/ssl/certs/ca-certificates.crt',
-            // FreeBSD (provided by the ca_root_nss package)
-            '/usr/local/share/certs/ca-root-nss.crt',
-            // OS X provided by homebrew (using the default path)
-            '/usr/local/etc/openssl/cert.pem',
-            // Windows?
-            'C:\\windows\\system32\\curl-ca-bundle.crt',
-            'C:\\windows\\curl-ca-bundle.crt',
-        ];
-
-        if ($cached) {
-            return $cached;
-        }
-
-        if ($ca = ini_get('openssl.cafile')) {
-            return $cached = $ca;
-        }
-
-        if ($ca = ini_get('curl.cainfo')) {
-            return $cached = $ca;
-        }
-
-        foreach ($cafiles as $filename) {
-            if (file_exists($filename)) {
-                return $cached = $filename;
-            }
-        }
-
-        throw new \RuntimeException(self::CA_ERR);
-    }
-
-    const CA_ERR = "
-No system CA bundle could be found in any of the the common system locations.
-PHP versions earlier than 5.6 are not properly configured to use the system's
-CA bundle by default. In order to verify peer certificates, you will need to
-supply the path on disk to a certificate bundle to the 'verify' request
-option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not
-need a specific certificate bundle, then Mozilla provides a commonly used CA
-bundle which can be downloaded here (provided by the maintainer of cURL):
-https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once
-you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP
-ini setting to point to the path to the file, allowing you to omit the 'verify'
-request option. See http://curl.haxx.se/docs/sslcerts.html for more
-information.";
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php b/core/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php
deleted file mode 100644
index 0377ec2..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php
+++ /dev/null
@@ -1,546 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Client;
-
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Ring\Exception\ConnectException;
-use GuzzleHttp\Ring\Exception\RingException;
-use GuzzleHttp\Stream\LazyOpenStream;
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Creates curl resources from a request
- */
-class CurlFactory
-{
-    /**
-     * Creates a cURL handle, header resource, and body resource based on a
-     * transaction.
-     *
-     * @param array         $request Request hash
-     * @param null|resource $handle  Optionally provide a curl handle to modify
-     *
-     * @return array Returns an array of the curl handle, headers array, and
-     *               response body handle.
-     * @throws \RuntimeException when an option cannot be applied
-     */
-    public function __invoke(array $request, $handle = null)
-    {
-        $headers = [];
-        $options = $this->getDefaultOptions($request, $headers);
-        $this->applyMethod($request, $options);
-
-        if (isset($request['client'])) {
-            $this->applyHandlerOptions($request, $options);
-        }
-
-        $this->applyHeaders($request, $options);
-        unset($options['_headers']);
-
-        // Add handler options from the request's configuration options
-        if (isset($request['client']['curl'])) {
-            $options = $this->applyCustomCurlOptions(
-                $request['client']['curl'],
-                $options
-            );
-        }
-
-        if (!$handle) {
-            $handle = curl_init();
-        }
-
-        $body = $this->getOutputBody($request, $options);
-        curl_setopt_array($handle, $options);
-
-        return [$handle, &$headers, $body];
-    }
-
-    /**
-     * Creates a response hash from a cURL result.
-     *
-     * @param callable $handler  Handler that was used.
-     * @param array    $request  Request that sent.
-     * @param array    $response Response hash to update.
-     * @param array    $headers  Headers received during transfer.
-     * @param resource $body     Body fopen response.
-     *
-     * @return array
-     */
-    public static function createResponse(
-        callable $handler,
-        array $request,
-        array $response,
-        array $headers,
-        $body
-    ) {
-        if (isset($response['transfer_stats']['url'])) {
-            $response['effective_url'] = $response['transfer_stats']['url'];
-        }
-
-        if (!empty($headers)) {
-            $startLine = explode(' ', array_shift($headers), 3);
-            $headerList = Core::headersFromLines($headers);
-            $response['headers'] = $headerList;
-            $response['status'] = isset($startLine[1]) ? (int) $startLine[1] : null;
-            $response['reason'] = isset($startLine[2]) ? $startLine[2] : null;
-            $response['body'] = $body;
-            Core::rewindBody($response);
-        }
-
-        return !empty($response['curl']['errno']) || !isset($response['status'])
-            ? self::createErrorResponse($handler, $request, $response)
-            : $response;
-    }
-
-    private static function createErrorResponse(
-        callable $handler,
-        array $request,
-        array $response
-    ) {
-        static $connectionErrors = [
-            CURLE_OPERATION_TIMEOUTED  => true,
-            CURLE_COULDNT_RESOLVE_HOST => true,
-            CURLE_COULDNT_CONNECT      => true,
-            CURLE_SSL_CONNECT_ERROR    => true,
-            CURLE_GOT_NOTHING          => true,
-        ];
-
-        // Retry when nothing is present or when curl failed to rewind.
-        if (!isset($response['err_message'])
-            && (empty($response['curl']['errno'])
-                || $response['curl']['errno'] == 65)
-        ) {
-            return self::retryFailedRewind($handler, $request, $response);
-        }
-
-        $message = isset($response['err_message'])
-            ? $response['err_message']
-            : sprintf('cURL error %s: %s',
-                $response['curl']['errno'],
-                isset($response['curl']['error'])
-                    ? $response['curl']['error']
-                    : 'See http://curl.haxx.se/libcurl/c/libcurl-errors.html');
-
-        $error = isset($response['curl']['errno'])
-            && isset($connectionErrors[$response['curl']['errno']])
-            ? new ConnectException($message)
-            : new RingException($message);
-
-        return $response + [
-            'status'  => null,
-            'reason'  => null,
-            'body'    => null,
-            'headers' => [],
-            'error'   => $error,
-        ];
-    }
-
-    private function getOutputBody(array $request, array &$options)
-    {
-        // Determine where the body of the response (if any) will be streamed.
-        if (isset($options[CURLOPT_WRITEFUNCTION])) {
-            return $request['client']['save_to'];
-        }
-
-        if (isset($options[CURLOPT_FILE])) {
-            return $options[CURLOPT_FILE];
-        }
-
-        if ($request['http_method'] != 'HEAD') {
-            // Create a default body if one was not provided
-            return $options[CURLOPT_FILE] = fopen('php://temp', 'w+');
-        }
-
-        return null;
-    }
-
-    private function getDefaultOptions(array $request, array &$headers)
-    {
-        $url = Core::url($request);
-        $startingResponse = false;
-
-        $options = [
-            '_headers'             => $request['headers'],
-            CURLOPT_CUSTOMREQUEST  => $request['http_method'],
-            CURLOPT_URL            => $url,
-            CURLOPT_RETURNTRANSFER => false,
-            CURLOPT_HEADER         => false,
-            CURLOPT_CONNECTTIMEOUT => 150,
-            CURLOPT_HEADERFUNCTION => function ($ch, $h) use (&$headers, &$startingResponse) {
-                $value = trim($h);
-                if ($value === '') {
-                    $startingResponse = true;
-                } elseif ($startingResponse) {
-                    $startingResponse = false;
-                    $headers = [$value];
-                } else {
-                    $headers[] = $value;
-                }
-                return strlen($h);
-            },
-        ];
-
-        if (isset($request['version'])) {
-            $options[CURLOPT_HTTP_VERSION] = $request['version'] == 1.1 ? CURL_HTTP_VERSION_1_1 : CURL_HTTP_VERSION_1_0;
-        }
-
-        if (defined('CURLOPT_PROTOCOLS')) {
-            $options[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
-        }
-
-        return $options;
-    }
-
-    private function applyMethod(array $request, array &$options)
-    {
-        if (isset($request['body'])) {
-            $this->applyBody($request, $options);
-            return;
-        }
-
-        switch ($request['http_method']) {
-            case 'PUT':
-            case 'POST':
-                // See http://tools.ietf.org/html/rfc7230#section-3.3.2
-                if (!Core::hasHeader($request, 'Content-Length')) {
-                    $options[CURLOPT_HTTPHEADER][] = 'Content-Length: 0';
-                }
-                break;
-            case 'HEAD':
-                $options[CURLOPT_NOBODY] = true;
-                unset(
-                    $options[CURLOPT_WRITEFUNCTION],
-                    $options[CURLOPT_READFUNCTION],
-                    $options[CURLOPT_FILE],
-                    $options[CURLOPT_INFILE]
-                );
-        }
-    }
-
-    private function applyBody(array $request, array &$options)
-    {
-        $contentLength = Core::firstHeader($request, 'Content-Length');
-        $size = $contentLength !== null ? (int) $contentLength : null;
-
-        // Send the body as a string if the size is less than 1MB OR if the
-        // [client][curl][body_as_string] request value is set.
-        if (($size !== null && $size < 1000000) ||
-            isset($request['client']['curl']['body_as_string']) ||
-            is_string($request['body'])
-        ) {
-            $options[CURLOPT_POSTFIELDS] = Core::body($request);
-            // Don't duplicate the Content-Length header
-            $this->removeHeader('Content-Length', $options);
-            $this->removeHeader('Transfer-Encoding', $options);
-        } else {
-            $options[CURLOPT_UPLOAD] = true;
-            if ($size !== null) {
-                // Let cURL handle setting the Content-Length header
-                $options[CURLOPT_INFILESIZE] = $size;
-                $this->removeHeader('Content-Length', $options);
-            }
-            $this->addStreamingBody($request, $options);
-        }
-
-        // If the Expect header is not present, prevent curl from adding it
-        if (!Core::hasHeader($request, 'Expect')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Expect:';
-        }
-
-        // cURL sometimes adds a content-type by default. Prevent this.
-        if (!Core::hasHeader($request, 'Content-Type')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Content-Type:';
-        }
-    }
-
-    private function addStreamingBody(array $request, array &$options)
-    {
-        $body = $request['body'];
-
-        if ($body instanceof StreamInterface) {
-            $options[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) {
-                return (string) $body->read($length);
-            };
-            if (!isset($options[CURLOPT_INFILESIZE])) {
-                if ($size = $body->getSize()) {
-                    $options[CURLOPT_INFILESIZE] = $size;
-                }
-            }
-        } elseif (is_resource($body)) {
-            $options[CURLOPT_INFILE] = $body;
-        } elseif ($body instanceof \Iterator) {
-            $buf = '';
-            $options[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body, &$buf) {
-                if ($body->valid()) {
-                    $buf .= $body->current();
-                    $body->next();
-                }
-                $result = (string) substr($buf, 0, $length);
-                $buf = substr($buf, $length);
-                return $result;
-            };
-        } else {
-            throw new \InvalidArgumentException('Invalid request body provided');
-        }
-    }
-
-    private function applyHeaders(array $request, array &$options)
-    {
-        foreach ($options['_headers'] as $name => $values) {
-            foreach ($values as $value) {
-                $options[CURLOPT_HTTPHEADER][] = "$name: $value";
-            }
-        }
-
-        // Remove the Accept header if one was not set
-        if (!Core::hasHeader($request, 'Accept')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Accept:';
-        }
-    }
-
-    /**
-     * Takes an array of curl options specified in the 'curl' option of a
-     * request's configuration array and maps them to CURLOPT_* options.
-     *
-     * This method is only called when a  request has a 'curl' config setting.
-     *
-     * @param array $config  Configuration array of custom curl option
-     * @param array $options Array of existing curl options
-     *
-     * @return array Returns a new array of curl options
-     */
-    private function applyCustomCurlOptions(array $config, array $options)
-    {
-        $curlOptions = [];
-        foreach ($config as $key => $value) {
-            if (is_int($key)) {
-                $curlOptions[$key] = $value;
-            }
-        }
-
-        return $curlOptions + $options;
-    }
-
-    /**
-     * Remove a header from the options array.
-     *
-     * @param string $name    Case-insensitive header to remove
-     * @param array  $options Array of options to modify
-     */
-    private function removeHeader($name, array &$options)
-    {
-        foreach (array_keys($options['_headers']) as $key) {
-            if (!strcasecmp($key, $name)) {
-                unset($options['_headers'][$key]);
-                return;
-            }
-        }
-    }
-
-    /**
-     * Applies an array of request client options to a the options array.
-     *
-     * This method uses a large switch rather than double-dispatch to save on
-     * high overhead of calling functions in PHP.
-     */
-    private function applyHandlerOptions(array $request, array &$options)
-    {
-        foreach ($request['client'] as $key => $value) {
-            switch ($key) {
-            // Violating PSR-4 to provide more room.
-            case 'verify':
-
-                if ($value === false) {
-                    unset($options[CURLOPT_CAINFO]);
-                    $options[CURLOPT_SSL_VERIFYHOST] = 0;
-                    $options[CURLOPT_SSL_VERIFYPEER] = false;
-                    continue;
-                }
-
-                $options[CURLOPT_SSL_VERIFYHOST] = 2;
-                $options[CURLOPT_SSL_VERIFYPEER] = true;
-
-                if (is_string($value)) {
-                    $options[CURLOPT_CAINFO] = $value;
-                    if (!file_exists($value)) {
-                        throw new \InvalidArgumentException(
-                            "SSL CA bundle not found: $value"
-                        );
-                    }
-                }
-                break;
-
-            case 'decode_content':
-
-                if ($value === false) {
-                    continue;
-                }
-
-                $accept = Core::firstHeader($request, 'Accept-Encoding');
-                if ($accept) {
-                    $options[CURLOPT_ENCODING] = $accept;
-                } else {
-                    $options[CURLOPT_ENCODING] = '';
-                    // Don't let curl send the header over the wire
-                    $options[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
-                }
-                break;
-
-            case 'save_to':
-
-                if (is_string($value)) {
-                    $value = new LazyOpenStream($value, 'w+');
-                }
-
-                if ($value instanceof StreamInterface) {
-                    $options[CURLOPT_WRITEFUNCTION] =
-                        function ($ch, $write) use ($value) {
-                            return $value->write($write);
-                        };
-                } elseif (is_resource($value)) {
-                    $options[CURLOPT_FILE] = $value;
-                } else {
-                    throw new \InvalidArgumentException('save_to must be a '
-                        . 'GuzzleHttp\Stream\StreamInterface or resource');
-                }
-                break;
-
-            case 'timeout':
-
-                if (defined('CURLOPT_TIMEOUT_MS')) {
-                    $options[CURLOPT_TIMEOUT_MS] = $value * 1000;
-                } else {
-                    $options[CURLOPT_TIMEOUT] = $value;
-                }
-                break;
-
-            case 'connect_timeout':
-
-                if (defined('CURLOPT_CONNECTTIMEOUT_MS')) {
-                    $options[CURLOPT_CONNECTTIMEOUT_MS] = $value * 1000;
-                } else {
-                    $options[CURLOPT_CONNECTTIMEOUT] = $value;
-                }
-                break;
-
-            case 'proxy':
-
-                if (!is_array($value)) {
-                    $options[CURLOPT_PROXY] = $value;
-                } elseif (isset($request['scheme'])) {
-                    $scheme = $request['scheme'];
-                    if (isset($value[$scheme])) {
-                        $options[CURLOPT_PROXY] = $value[$scheme];
-                    }
-                }
-                break;
-
-            case 'cert':
-
-                if (is_array($value)) {
-                    $options[CURLOPT_SSLCERTPASSWD] = $value[1];
-                    $value = $value[0];
-                }
-
-                if (!file_exists($value)) {
-                    throw new \InvalidArgumentException(
-                        "SSL certificate not found: {$value}"
-                    );
-                }
-
-                $options[CURLOPT_SSLCERT] = $value;
-                break;
-
-            case 'ssl_key':
-
-                if (is_array($value)) {
-                    $options[CURLOPT_SSLKEYPASSWD] = $value[1];
-                    $value = $value[0];
-                }
-
-                if (!file_exists($value)) {
-                    throw new \InvalidArgumentException(
-                        "SSL private key not found: {$value}"
-                    );
-                }
-
-                $options[CURLOPT_SSLKEY] = $value;
-                break;
-
-            case 'progress':
-
-                if (!is_callable($value)) {
-                    throw new \InvalidArgumentException(
-                        'progress client option must be callable'
-                    );
-                }
-
-                $options[CURLOPT_NOPROGRESS] = false;
-                $options[CURLOPT_PROGRESSFUNCTION] =
-                    function () use ($value) {
-                        $args = func_get_args();
-                        // PHP 5.5 pushed the handle onto the start of the args
-                        if (is_resource($args[0])) {
-                            array_shift($args);
-                        }
-                        call_user_func_array($value, $args);
-                    };
-                break;
-
-            case 'debug':
-
-                if ($value) {
-                    $options[CURLOPT_STDERR] = Core::getDebugResource($value);
-                    $options[CURLOPT_VERBOSE] = true;
-                }
-                break;
-            }
-        }
-    }
-
-    /**
-     * This function ensures that a response was set on a transaction. If one
-     * was not set, then the request is retried if possible. This error
-     * typically means you are sending a payload, curl encountered a
-     * "Connection died, retrying a fresh connect" error, tried to rewind the
-     * stream, and then encountered a "necessary data rewind wasn't possible"
-     * error, causing the request to be sent through curl_multi_info_read()
-     * without an error status.
-     */
-    private static function retryFailedRewind(
-        callable $handler,
-        array $request,
-        array $response
-    ) {
-        // If there is no body, then there is some other kind of issue. This
-        // is weird and should probably never happen.
-        if (!isset($request['body'])) {
-            $response['err_message'] = 'No response was received for a request '
-                . 'with no body. This could mean that you are saturating your '
-                . 'network.';
-            return self::createErrorResponse($handler, $request, $response);
-        }
-
-        if (!Core::rewindBody($request)) {
-            $response['err_message'] = 'The connection unexpectedly failed '
-                . 'without providing an error. The request would have been '
-                . 'retried, but attempting to rewind the request body failed.';
-            return self::createErrorResponse($handler, $request, $response);
-        }
-
-        // Retry no more than 3 times before giving up.
-        if (!isset($request['curl']['retries'])) {
-            $request['curl']['retries'] = 1;
-        } elseif ($request['curl']['retries'] == 2) {
-            $response['err_message'] = 'The cURL request was retried 3 times '
-                . 'and did no succeed. cURL was unable to rewind the body of '
-                . 'the request and subsequent retries resulted in the same '
-                . 'error. Turn on the debug option to see what went wrong. '
-                . 'See https://bugs.php.net/bug.php?id=47204 for more information.';
-            return self::createErrorResponse($handler, $request, $response);
-        } else {
-            $request['curl']['retries']++;
-        }
-
-        return $handler($request);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php
deleted file mode 100644
index d8215c5..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Client;
-
-use GuzzleHttp\Ring\Future\CompletedFutureArray;
-use GuzzleHttp\Ring\Core;
-
-/**
- * HTTP handler that uses cURL easy handles as a transport layer.
- *
- * Requires PHP 5.5+
- *
- * When using the CurlHandler, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of the "client" key of the request.
- */
-class CurlHandler
-{
-    /** @var callable */
-    private $factory;
-
-    /** @var array Array of curl easy handles */
-    private $handles = [];
-
-    /** @var array Array of owned curl easy handles */
-    private $ownedHandles = [];
-
-    /** @var int Total number of idle handles to keep in cache */
-    private $maxHandles;
-
-    /**
-     * Accepts an associative array of options:
-     *
-     * - factory: Optional callable factory used to create cURL handles.
-     *   The callable is passed a request hash when invoked, and returns an
-     *   array of the curl handle, headers resource, and body resource.
-     * - max_handles: Maximum number of idle handles (defaults to 5).
-     *
-     * @param array $options Array of options to use with the handler
-     */
-    public function __construct(array $options = [])
-    {
-        $this->handles = $this->ownedHandles = [];
-        $this->factory = isset($options['handle_factory'])
-            ? $options['handle_factory']
-            : new CurlFactory();
-        $this->maxHandles = isset($options['max_handles'])
-            ? $options['max_handles']
-            : 5;
-    }
-
-    public function __destruct()
-    {
-        foreach ($this->handles as $handle) {
-            if (is_resource($handle)) {
-                curl_close($handle);
-            }
-        }
-    }
-
-    public function __invoke(array $request)
-    {
-        $factory = $this->factory;
-
-        // Ensure headers are by reference. They're updated elsewhere.
-        $result = $factory($request, $this->checkoutEasyHandle());
-        $h = $result[0];
-        $hd =& $result[1];
-        $bd = $result[2];
-        Core::doSleep($request);
-        curl_exec($h);
-        $response = ['transfer_stats' => curl_getinfo($h)];
-        $response['curl']['error'] = curl_error($h);
-        $response['curl']['errno'] = curl_errno($h);
-        $response['transfer_stats'] = array_merge($response['transfer_stats'], $response['curl']);
-        $this->releaseEasyHandle($h);
-
-        return new CompletedFutureArray(
-            CurlFactory::createResponse($this, $request, $response, $hd, $bd)
-        );
-    }
-
-    private function checkoutEasyHandle()
-    {
-        // Find an unused handle in the cache
-        if (false !== ($key = array_search(false, $this->ownedHandles, true))) {
-            $this->ownedHandles[$key] = true;
-            return $this->handles[$key];
-        }
-
-        // Add a new handle
-        $handle = curl_init();
-        $id = (int) $handle;
-        $this->handles[$id] = $handle;
-        $this->ownedHandles[$id] = true;
-
-        return $handle;
-    }
-
-    private function releaseEasyHandle($handle)
-    {
-        $id = (int) $handle;
-        if (count($this->ownedHandles) > $this->maxHandles) {
-            curl_close($this->handles[$id]);
-            unset($this->handles[$id], $this->ownedHandles[$id]);
-        } else {
-            // curl_reset doesn't clear these out for some reason
-            static $unsetValues = [
-                CURLOPT_HEADERFUNCTION   => null,
-                CURLOPT_WRITEFUNCTION    => null,
-                CURLOPT_READFUNCTION     => null,
-                CURLOPT_PROGRESSFUNCTION => null,
-            ];
-            curl_setopt_array($handle, $unsetValues);
-            curl_reset($handle);
-            $this->ownedHandles[$id] = false;
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php
deleted file mode 100644
index b45f6c3..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Client;
-
-use GuzzleHttp\Ring\Future\FutureArray;
-use React\Promise\Deferred;
-
-/**
- * Returns an asynchronous response using curl_multi_* functions.
- *
- * This handler supports future responses and the "delay" request client
- * option that can be used to delay before sending a request.
- *
- * When using the CurlMultiHandler, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of the "client" key of the request.
- *
- * @property resource $_mh Internal use only. Lazy loaded multi-handle.
- */
-class CurlMultiHandler
-{
-    /** @var callable */
-    private $factory;
-    private $selectTimeout;
-    private $active;
-    private $handles = [];
-    private $delays = [];
-    private $maxHandles;
-
-    /**
-     * This handler accepts the following options:
-     *
-     * - mh: An optional curl_multi resource
-     * - handle_factory: An optional callable used to generate curl handle
-     *   resources. the callable accepts a request hash and returns an array
-     *   of the handle, headers file resource, and the body resource.
-     * - select_timeout: Optional timeout (in seconds) to block before timing
-     *   out while selecting curl handles. Defaults to 1 second.
-     * - max_handles: Optional integer representing the maximum number of
-     *   open requests. When this number is reached, the queued futures are
-     *   flushed.
-     *
-     * @param array $options
-     */
-    public function __construct(array $options = [])
-    {
-        if (isset($options['mh'])) {
-            $this->_mh = $options['mh'];
-        }
-        $this->factory = isset($options['handle_factory'])
-            ? $options['handle_factory'] : new CurlFactory();
-        $this->selectTimeout = isset($options['select_timeout'])
-            ? $options['select_timeout'] : 1;
-        $this->maxHandles = isset($options['max_handles'])
-            ? $options['max_handles'] : 100;
-    }
-
-    public function __get($name)
-    {
-        if ($name === '_mh') {
-            return $this->_mh = curl_multi_init();
-        }
-
-        throw new \BadMethodCallException();
-    }
-
-    public function __destruct()
-    {
-        // Finish any open connections before terminating the script.
-        if ($this->handles) {
-            $this->execute();
-        }
-
-        if (isset($this->_mh)) {
-            curl_multi_close($this->_mh);
-            unset($this->_mh);
-        }
-    }
-
-    public function __invoke(array $request)
-    {
-        $factory = $this->factory;
-        $result = $factory($request);
-        $entry = [
-            'request'  => $request,
-            'response' => [],
-            'handle'   => $result[0],
-            'headers'  => &$result[1],
-            'body'     => $result[2],
-            'deferred' => new Deferred(),
-        ];
-
-        $id = (int) $result[0];
-
-        $future = new FutureArray(
-            $entry['deferred']->promise(),
-            [$this, 'execute'],
-            function () use ($id) {
-                return $this->cancel($id);
-            }
-        );
-
-        $this->addRequest($entry);
-
-        // Transfer outstanding requests if there are too many open handles.
-        if (count($this->handles) >= $this->maxHandles) {
-            $this->execute();
-        }
-
-        return $future;
-    }
-
-    /**
-     * Runs until all outstanding connections have completed.
-     */
-    public function execute()
-    {
-        do {
-
-            if ($this->active &&
-                curl_multi_select($this->_mh, $this->selectTimeout) === -1
-            ) {
-                // Perform a usleep if a select returns -1.
-                // See: https://bugs.php.net/bug.php?id=61141
-                usleep(250);
-            }
-
-            // Add any delayed futures if needed.
-            if ($this->delays) {
-                $this->addDelays();
-            }
-
-            do {
-                $mrc = curl_multi_exec($this->_mh, $this->active);
-            } while ($mrc === CURLM_CALL_MULTI_PERFORM);
-
-            $this->processMessages();
-
-            // If there are delays but no transfers, then sleep for a bit.
-            if (!$this->active && $this->delays) {
-                usleep(500);
-            }
-
-        } while ($this->active || $this->handles);
-    }
-
-    private function addRequest(array &$entry)
-    {
-        $id = (int) $entry['handle'];
-        $this->handles[$id] = $entry;
-
-        // If the request is a delay, then add the reques to the curl multi
-        // pool only after the specified delay.
-        if (isset($entry['request']['client']['delay'])) {
-            $this->delays[$id] = microtime(true) + ($entry['request']['client']['delay'] / 1000);
-        } elseif (empty($entry['request']['future'])) {
-            curl_multi_add_handle($this->_mh, $entry['handle']);
-        } else {
-            curl_multi_add_handle($this->_mh, $entry['handle']);
-            // "lazy" futures are only sent once the pool has many requests.
-            if ($entry['request']['future'] !== 'lazy') {
-                do {
-                    $mrc = curl_multi_exec($this->_mh, $this->active);
-                } while ($mrc === CURLM_CALL_MULTI_PERFORM);
-                $this->processMessages();
-            }
-        }
-    }
-
-    private function removeProcessed($id)
-    {
-        if (isset($this->handles[$id])) {
-            curl_multi_remove_handle(
-                $this->_mh,
-                $this->handles[$id]['handle']
-            );
-            curl_close($this->handles[$id]['handle']);
-            unset($this->handles[$id], $this->delays[$id]);
-        }
-    }
-
-    /**
-     * Cancels a handle from sending and removes references to it.
-     *
-     * @param int $id Handle ID to cancel and remove.
-     *
-     * @return bool True on success, false on failure.
-     */
-    private function cancel($id)
-    {
-        // Cannot cancel if it has been processed.
-        if (!isset($this->handles[$id])) {
-            return false;
-        }
-
-        $handle = $this->handles[$id]['handle'];
-        unset($this->delays[$id], $this->handles[$id]);
-        curl_multi_remove_handle($this->_mh, $handle);
-        curl_close($handle);
-
-        return true;
-    }
-
-    private function addDelays()
-    {
-        $currentTime = microtime(true);
-
-        foreach ($this->delays as $id => $delay) {
-            if ($currentTime >= $delay) {
-                unset($this->delays[$id]);
-                curl_multi_add_handle(
-                    $this->_mh,
-                    $this->handles[$id]['handle']
-                );
-            }
-        }
-    }
-
-    private function processMessages()
-    {
-        while ($done = curl_multi_info_read($this->_mh)) {
-            $id = (int) $done['handle'];
-
-            if (!isset($this->handles[$id])) {
-                // Probably was cancelled.
-                continue;
-            }
-
-            $entry = $this->handles[$id];
-            $entry['response']['transfer_stats'] = curl_getinfo($done['handle']);
-
-            if ($done['result'] !== CURLM_OK) {
-                $entry['response']['curl']['errno'] = $done['result'];
-                if (function_exists('curl_strerror')) {
-                    $entry['response']['curl']['error'] = curl_strerror($done['result']);
-                }
-            }
-
-            $result = CurlFactory::createResponse(
-                $this,
-                $entry['request'],
-                $entry['response'],
-                $entry['headers'],
-                $entry['body']
-            );
-
-            $this->removeProcessed($id);
-            $entry['deferred']->resolve($result);
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/Middleware.php b/core/vendor/guzzlehttp/ringphp/src/Client/Middleware.php
deleted file mode 100644
index 6fa7318..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Client/Middleware.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Client;
-
-/**
- * Provides basic middleware wrappers.
- *
- * If a middleware is more complex than a few lines of code, then it should
- * be implemented in a class rather than a static method.
- */
-class Middleware
-{
-    /**
-     * Sends future requests to a future compatible handler while sending all
-     * other requests to a default handler.
-     *
-     * When the "future" option is not provided on a request, any future responses
-     * are automatically converted to synchronous responses and block.
-     *
-     * @param callable $default Handler used for non-streaming responses
-     * @param callable $future  Handler used for future responses
-     *
-     * @return callable Returns the composed handler.
-     */
-    public static function wrapFuture(
-        callable $default,
-        callable $future
-    ) {
-        return function (array $request) use ($default, $future) {
-            return empty($request['client']['future'])
-                ? $default($request)
-                : $future($request);
-        };
-    }
-
-    /**
-     * Sends streaming requests to a streaming compatible handler while sendin
-     * all other requests to a default handler.
-     *
-     * This, for example, could be useful for taking advantage of the
-     * performance benefits of curl while still supporting true streaming
-     * through the StreamHandler.
-     *
-     * @param callable $default   Handler used for non-streaming responses
-     * @param callable $streaming Handler used for streaming responses
-     *
-     * @return callable Returns the composed handler.
-     */
-    public static function wrapStreaming(
-        callable $default,
-        callable $streaming
-    ) {
-        return function (array $request) use ($default, $streaming) {
-            return empty($request['client']['stream'])
-                ? $default($request)
-                : $streaming($request);
-        };
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php
deleted file mode 100644
index 56cc32d..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Client;
-
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Ring\Future\CompletedFutureArray;
-use GuzzleHttp\Ring\Future\FutureArrayInterface;
-
-/**
- * Ring handler that returns a canned response or evaluated function result.
- */
-class MockHandler
-{
-    /** @var callable|array|FutureArrayInterface */
-    private $result;
-
-    /**
-     * Provide an array or future to always return the same value. Provide a
-     * callable that accepts a request object and returns an array or future
-     * to dynamically create a response.
-     *
-     * @param array|FutureArrayInterface|callable $result Mock return value.
-     */
-    public function __construct($result)
-    {
-        $this->result = $result;
-    }
-
-    public function __invoke(array $request)
-    {
-        Core::doSleep($request);
-        $response = is_callable($this->result)
-            ? call_user_func($this->result, $request)
-            : $this->result;
-
-        if (is_array($response)) {
-            $response = new CompletedFutureArray($response + [
-                'status'        => null,
-                'body'          => null,
-                'headers'       => [],
-                'reason'        => null,
-                'effective_url' => null,
-            ]);
-        } elseif (!$response instanceof FutureArrayInterface) {
-            throw new \InvalidArgumentException(
-                'Response must be an array or FutureArrayInterface. Found '
-                . Core::describeType($request)
-            );
-        }
-
-        return $response;
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php b/core/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php
deleted file mode 100644
index 855aad7..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php
+++ /dev/null
@@ -1,412 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Client;
-
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Ring\Exception\ConnectException;
-use GuzzleHttp\Ring\Exception\RingException;
-use GuzzleHttp\Ring\Future\CompletedFutureArray;
-use GuzzleHttp\Stream\InflateStream;
-use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\Utils;
-
-/**
- * RingPHP client handler that uses PHP's HTTP stream wrapper.
- */
-class StreamHandler
-{
-    private $options;
-    private $lastHeaders;
-
-    public function __construct(array $options = [])
-    {
-        $this->options = $options;
-    }
-
-    public function __invoke(array $request)
-    {
-        $url = Core::url($request);
-        Core::doSleep($request);
-
-        try {
-            // Does not support the expect header.
-            $request = Core::removeHeader($request, 'Expect');
-            $stream = $this->createStream($url, $request);
-            return $this->createResponse($request, $url, $stream);
-        } catch (RingException $e) {
-            return $this->createErrorResponse($url, $e);
-        }
-    }
-
-    private function createResponse(array $request, $url, $stream)
-    {
-        $hdrs = $this->lastHeaders;
-        $this->lastHeaders = null;
-        $parts = explode(' ', array_shift($hdrs), 3);
-        $response = [
-            'status'         => $parts[1],
-            'reason'         => isset($parts[2]) ? $parts[2] : null,
-            'headers'        => Core::headersFromLines($hdrs),
-            'effective_url'  => $url,
-        ];
-
-        $stream = $this->checkDecode($request, $response, $stream);
-
-        // If not streaming, then drain the response into a stream.
-        if (empty($request['client']['stream'])) {
-            $dest = isset($request['client']['save_to'])
-                ? $request['client']['save_to']
-                : fopen('php://temp', 'r+');
-            $stream = $this->drain($stream, $dest);
-        }
-
-        $response['body'] = $stream;
-
-        return new CompletedFutureArray($response);
-    }
-
-    private function checkDecode(array $request, array $response, $stream)
-    {
-        // Automatically decode responses when instructed.
-        if (!empty($request['client']['decode_content'])) {
-            switch (Core::firstHeader($response, 'Content-Encoding', true)) {
-                case 'gzip':
-                case 'deflate':
-                    $stream = new InflateStream(Stream::factory($stream));
-                    break;
-            }
-        }
-
-        return $stream;
-    }
-
-    /**
-     * Drains the stream into the "save_to" client option.
-     *
-     * @param resource                        $stream
-     * @param string|resource|StreamInterface $dest
-     *
-     * @return Stream
-     * @throws \RuntimeException when the save_to option is invalid.
-     */
-    private function drain($stream, $dest)
-    {
-        if (is_resource($stream)) {
-            if (!is_resource($dest)) {
-                $stream = Stream::factory($stream);
-            } else {
-                stream_copy_to_stream($stream, $dest);
-                fclose($stream);
-                rewind($dest);
-                return $dest;
-            }
-        }
-
-        // Stream the response into the destination stream
-        $dest = is_string($dest)
-            ? new Stream(Utils::open($dest, 'r+'))
-            : Stream::factory($dest);
-
-        Utils::copyToStream($stream, $dest);
-        $dest->seek(0);
-        $stream->close();
-
-        return $dest;
-    }
-
-    /**
-     * Creates an error response for the given stream.
-     *
-     * @param string        $url
-     * @param RingException $e
-     *
-     * @return array
-     */
-    private function createErrorResponse($url, RingException $e)
-    {
-        // Determine if the error was a networking error.
-        $message = $e->getMessage();
-
-        // This list can probably get more comprehensive.
-        if (strpos($message, 'getaddrinfo') // DNS lookup failed
-            || strpos($message, 'Connection refused')
-        ) {
-            $e = new ConnectException($e->getMessage(), 0, $e);
-        }
-
-        return new CompletedFutureArray([
-            'status'        => null,
-            'body'          => null,
-            'headers'       => [],
-            'effective_url' => $url,
-            'error'         => $e
-        ]);
-    }
-
-    /**
-     * Create a resource and check to ensure it was created successfully
-     *
-     * @param callable $callback Callable that returns stream resource
-     *
-     * @return resource
-     * @throws \RuntimeException on error
-     */
-    private function createResource(callable $callback)
-    {
-        $errors = null;
-        set_error_handler(function ($_, $msg, $file, $line) use (&$errors) {
-            $errors[] = [
-                'message' => $msg,
-                'file'    => $file,
-                'line'    => $line
-            ];
-            return true;
-        });
-
-        $resource = $callback();
-        restore_error_handler();
-
-        if (!$resource) {
-            $message = 'Error creating resource: ';
-            foreach ($errors as $err) {
-                foreach ($err as $key => $value) {
-                    $message .= "[$key] $value" . PHP_EOL;
-                }
-            }
-            throw new RingException(trim($message));
-        }
-
-        return $resource;
-    }
-
-    private function createStream($url, array $request)
-    {
-        static $methods;
-        if (!$methods) {
-            $methods = array_flip(get_class_methods(__CLASS__));
-        }
-
-        // HTTP/1.1 streams using the PHP stream wrapper require a
-        // Connection: close header
-        if ((!isset($request['version']) || $request['version'] == '1.1')
-            && !Core::hasHeader($request, 'Connection')
-        ) {
-            $request['headers']['Connection'] = ['close'];
-        }
-
-        // Ensure SSL is verified by default
-        if (!isset($request['client']['verify'])) {
-            $request['client']['verify'] = true;
-        }
-
-        $params = [];
-        $options = $this->getDefaultOptions($request);
-
-        if (isset($request['client'])) {
-            foreach ($request['client'] as $key => $value) {
-                $method = "add_{$key}";
-                if (isset($methods[$method])) {
-                    $this->{$method}($request, $options, $value, $params);
-                }
-            }
-        }
-
-        return $this->createStreamResource(
-            $url,
-            $request,
-            $options,
-            $this->createContext($request, $options, $params)
-        );
-    }
-
-    private function getDefaultOptions(array $request)
-    {
-        $headers = "";
-        foreach ($request['headers'] as $name => $value) {
-            foreach ((array) $value as $val) {
-                $headers .= "$name: $val\r\n";
-            }
-        }
-
-        $context = [
-            'http' => [
-                'method'           => $request['http_method'],
-                'header'           => $headers,
-                'protocol_version' => isset($request['version']) ? $request['version'] : 1.1,
-                'ignore_errors'    => true,
-                'follow_location'  => 0,
-            ],
-        ];
-
-        $body = Core::body($request);
-        if (isset($body)) {
-            $context['http']['content'] = $body;
-            // Prevent the HTTP handler from adding a Content-Type header.
-            if (!Core::hasHeader($request, 'Content-Type')) {
-                $context['http']['header'] .= "Content-Type:\r\n";
-            }
-        }
-
-        $context['http']['header'] = rtrim($context['http']['header']);
-
-        return $context;
-    }
-
-    private function add_proxy(array $request, &$options, $value, &$params)
-    {
-        if (!is_array($value)) {
-            $options['http']['proxy'] = $value;
-        } else {
-            $scheme = isset($request['scheme']) ? $request['scheme'] : 'http';
-            if (isset($value[$scheme])) {
-                $options['http']['proxy'] = $value[$scheme];
-            }
-        }
-    }
-
-    private function add_timeout(array $request, &$options, $value, &$params)
-    {
-        $options['http']['timeout'] = $value;
-    }
-
-    private function add_verify(array $request, &$options, $value, &$params)
-    {
-        if ($value === true) {
-            // PHP 5.6 or greater will find the system cert by default. When
-            // < 5.6, use the Guzzle bundled cacert.
-            if (PHP_VERSION_ID < 50600) {
-                $options['ssl']['cafile'] = ClientUtils::getDefaultCaBundle();
-            }
-        } elseif (is_string($value)) {
-            $options['ssl']['cafile'] = $value;
-            if (!file_exists($value)) {
-                throw new RingException("SSL CA bundle not found: $value");
-            }
-        } elseif ($value === false) {
-            $options['ssl']['verify_peer'] = false;
-            return;
-        } else {
-            throw new RingException('Invalid verify request option');
-        }
-
-        $options['ssl']['verify_peer'] = true;
-        $options['ssl']['allow_self_signed'] = true;
-    }
-
-    private function add_cert(array $request, &$options, $value, &$params)
-    {
-        if (is_array($value)) {
-            $options['ssl']['passphrase'] = $value[1];
-            $value = $value[0];
-        }
-
-        if (!file_exists($value)) {
-            throw new RingException("SSL certificate not found: {$value}");
-        }
-
-        $options['ssl']['local_cert'] = $value;
-    }
-
-    private function add_progress(array $request, &$options, $value, &$params)
-    {
-        $fn = function ($code, $_1, $_2, $_3, $transferred, $total) use ($value) {
-            if ($code == STREAM_NOTIFY_PROGRESS) {
-                $value($total, $transferred, null, null);
-            }
-        };
-
-        // Wrap the existing function if needed.
-        $params['notification'] = isset($params['notification'])
-            ? Core::callArray([$params['notification'], $fn])
-            : $fn;
-    }
-
-    private function add_debug(array $request, &$options, $value, &$params)
-    {
-        if ($value === false) {
-            return;
-        }
-
-        static $map = [
-            STREAM_NOTIFY_CONNECT       => 'CONNECT',
-            STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
-            STREAM_NOTIFY_AUTH_RESULT   => 'AUTH_RESULT',
-            STREAM_NOTIFY_MIME_TYPE_IS  => 'MIME_TYPE_IS',
-            STREAM_NOTIFY_FILE_SIZE_IS  => 'FILE_SIZE_IS',
-            STREAM_NOTIFY_REDIRECTED    => 'REDIRECTED',
-            STREAM_NOTIFY_PROGRESS      => 'PROGRESS',
-            STREAM_NOTIFY_FAILURE       => 'FAILURE',
-            STREAM_NOTIFY_COMPLETED     => 'COMPLETED',
-            STREAM_NOTIFY_RESOLVE       => 'RESOLVE',
-        ];
-
-        static $args = ['severity', 'message', 'message_code',
-            'bytes_transferred', 'bytes_max'];
-
-        $value = Core::getDebugResource($value);
-        $ident = $request['http_method'] . ' ' . Core::url($request);
-        $fn = function () use ($ident, $value, $map, $args) {
-            $passed = func_get_args();
-            $code = array_shift($passed);
-            fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
-            foreach (array_filter($passed) as $i => $v) {
-                fwrite($value, $args[$i] . ': "' . $v . '" ');
-            }
-            fwrite($value, "\n");
-        };
-
-        // Wrap the existing function if needed.
-        $params['notification'] = isset($params['notification'])
-            ? Core::callArray([$params['notification'], $fn])
-            : $fn;
-    }
-
-    private function applyCustomOptions(array $request, array &$options)
-    {
-        if (!isset($request['client']['stream_context'])) {
-            return;
-        }
-
-        if (!is_array($request['client']['stream_context'])) {
-            throw new RingException('stream_context must be an array');
-        }
-
-        $options = array_replace_recursive(
-            $options,
-            $request['client']['stream_context']
-        );
-    }
-
-    private function createContext(array $request, array $options, array $params)
-    {
-        $this->applyCustomOptions($request, $options);
-        return $this->createResource(
-            function () use ($request, $options, $params) {
-                return stream_context_create($options, $params);
-            },
-            $request,
-            $options
-        );
-    }
-
-    private function createStreamResource(
-        $url,
-        array $request,
-        array $options,
-        $context
-    ) {
-        return $this->createResource(
-            function () use ($url, $context) {
-                if (false === strpos($url, 'http')) {
-                    trigger_error("URL is invalid: {$url}", E_USER_WARNING);
-                    return null;
-                }
-                $resource = fopen($url, 'r', null, $context);
-                $this->lastHeaders = $http_response_header;
-                return $resource;
-            },
-            $request,
-            $options
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Core.php b/core/vendor/guzzlehttp/ringphp/src/Core.php
deleted file mode 100644
index dd7d1a0..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Core.php
+++ /dev/null
@@ -1,364 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring;
-
-use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Ring\Future\FutureArrayInterface;
-use GuzzleHttp\Ring\Future\FutureArray;
-
-/**
- * Provides core functionality of Ring handlers and middleware.
- */
-class Core
-{
-    /**
-     * Returns a function that calls all of the provided functions, in order,
-     * passing the arguments provided to the composed function to each function.
-     *
-     * @param callable[] $functions Array of functions to proxy to.
-     *
-     * @return callable
-     */
-    public static function callArray(array $functions)
-    {
-        return function () use ($functions) {
-            $args = func_get_args();
-            foreach ($functions as $fn) {
-                call_user_func_array($fn, $args);
-            }
-        };
-    }
-
-    /**
-     * Gets an array of header line values from a message for a specific header
-     *
-     * This method searches through the "headers" key of a message for a header
-     * using a case-insensitive search.
-     *
-     * @param array  $message Request or response hash.
-     * @param string $header  Header to retrieve
-     *
-     * @return array
-     */
-    public static function headerLines($message, $header)
-    {
-        $result = [];
-
-        if (!empty($message['headers'])) {
-            foreach ($message['headers'] as $name => $value) {
-                if (!strcasecmp($name, $header)) {
-                    $result = array_merge($result, $value);
-                }
-            }
-        }
-
-        return $result;
-    }
-
-    /**
-     * Gets a header value from a message as a string or null
-     *
-     * This method searches through the "headers" key of a message for a header
-     * using a case-insensitive search. The lines of the header are imploded
-     * using commas into a single string return value.
-     *
-     * @param array  $message Request or response hash.
-     * @param string $header  Header to retrieve
-     *
-     * @return string|null Returns the header string if found, or null if not.
-     */
-    public static function header($message, $header)
-    {
-        $match = self::headerLines($message, $header);
-        return $match ? implode(', ', $match) : null;
-    }
-
-    /**
-     * Returns the first header value from a message as a string or null. If
-     * a header line contains multiple values separated by a comma, then this
-     * function will return the first value in the list.
-     *
-     * @param array  $message Request or response hash.
-     * @param string $header  Header to retrieve
-     *
-     * @return string|null Returns the value as a string if found.
-     */
-    public static function firstHeader($message, $header)
-    {
-        if (!empty($message['headers'])) {
-            foreach ($message['headers'] as $name => $value) {
-                if (!strcasecmp($name, $header)) {
-                    // Return the match itself if it is a single value.
-                    $pos = strpos($value[0], ',');
-                    return $pos ? substr($value[0], 0, $pos) : $value[0];
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns true if a message has the provided case-insensitive header.
-     *
-     * @param array  $message Request or response hash.
-     * @param string $header  Header to check
-     *
-     * @return bool
-     */
-    public static function hasHeader($message, $header)
-    {
-        if (!empty($message['headers'])) {
-            foreach ($message['headers'] as $name => $value) {
-                if (!strcasecmp($name, $header)) {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Parses an array of header lines into an associative array of headers.
-     *
-     * @param array $lines Header lines array of strings in the following
-     *                     format: "Name: Value"
-     * @return array
-     */
-    public static function headersFromLines($lines)
-    {
-        $headers = [];
-
-        foreach ($lines as $line) {
-            $parts = explode(':', $line, 2);
-            $headers[trim($parts[0])][] = isset($parts[1])
-                ? trim($parts[1])
-                : null;
-        }
-
-        return $headers;
-    }
-
-    /**
-     * Removes a header from a message using a case-insensitive comparison.
-     *
-     * @param array  $message Message that contains 'headers'
-     * @param string $header  Header to remove
-     *
-     * @return array
-     */
-    public static function removeHeader(array $message, $header)
-    {
-        if (isset($message['headers'])) {
-            foreach (array_keys($message['headers']) as $key) {
-                if (!strcasecmp($header, $key)) {
-                    unset($message['headers'][$key]);
-                }
-            }
-        }
-
-        return $message;
-    }
-
-    /**
-     * Replaces any existing case insensitive headers with the given value.
-     *
-     * @param array  $message Message that contains 'headers'
-     * @param string $header  Header to set.
-     * @param array  $value   Value to set.
-     *
-     * @return array
-     */
-    public static function setHeader(array $message, $header, array $value)
-    {
-        $message = self::removeHeader($message, $header);
-        $message['headers'][$header] = $value;
-
-        return $message;
-    }
-
-    /**
-     * Creates a URL string from a request.
-     *
-     * If the "url" key is present on the request, it is returned, otherwise
-     * the url is built up based on the scheme, host, uri, and query_string
-     * request values.
-     *
-     * @param array $request Request to get the URL from
-     *
-     * @return string Returns the request URL as a string.
-     * @throws \InvalidArgumentException if no Host header is present.
-     */
-    public static function url(array $request)
-    {
-        if (isset($request['url'])) {
-            return $request['url'];
-        }
-
-        $uri = (isset($request['scheme'])
-                ? $request['scheme'] : 'http') . '://';
-
-        if ($host = self::header($request, 'host')) {
-            $uri .= $host;
-        } else {
-            throw new \InvalidArgumentException('No Host header was provided');
-        }
-
-        if (isset($request['uri'])) {
-            $uri .= $request['uri'];
-        }
-
-        if (isset($request['query_string'])) {
-            $uri .= '?' . $request['query_string'];
-        }
-
-        return $uri;
-    }
-
-    /**
-     * Reads the body of a message into a string.
-     *
-     * @param array|FutureArrayInterface $message Array containing a "body" key
-     *
-     * @return null|string Returns the body as a string or null if not set.
-     * @throws \InvalidArgumentException if a request body is invalid.
-     */
-    public static function body($message)
-    {
-        if (!isset($message['body'])) {
-            return null;
-        }
-
-        if ($message['body'] instanceof StreamInterface) {
-            return (string) $message['body'];
-        }
-
-        switch (gettype($message['body'])) {
-            case 'string':
-                return $message['body'];
-            case 'resource':
-                return stream_get_contents($message['body']);
-            case 'object':
-                if ($message['body'] instanceof \Iterator) {
-                    return implode('', iterator_to_array($message['body']));
-                } elseif (method_exists($message['body'], '__toString')) {
-                    return (string) $message['body'];
-                }
-            default:
-                throw new \InvalidArgumentException('Invalid request body: '
-                    . self::describeType($message['body']));
-        }
-    }
-
-    /**
-     * Rewind the body of the provided message if possible.
-     *
-     * @param array $message Message that contains a 'body' field.
-     *
-     * @return bool Returns true on success, false on failure
-     */
-    public static function rewindBody($message)
-    {
-        if ($message['body'] instanceof StreamInterface) {
-            return $message['body']->seek(0);
-        }
-
-        if ($message['body'] instanceof \Generator) {
-            return false;
-        }
-
-        if ($message['body'] instanceof \Iterator) {
-            $message['body']->rewind();
-            return true;
-        }
-
-        if (is_resource($message['body'])) {
-            return rewind($message['body']);
-        }
-
-        return is_string($message['body'])
-            || (is_object($message['body'])
-                && method_exists($message['body'], '__toString'));
-    }
-
-    /**
-     * Debug function used to describe the provided value type and class.
-     *
-     * @param mixed $input
-     *
-     * @return string Returns a string containing the type of the variable and
-     *                if a class is provided, the class name.
-     */
-    public static function describeType($input)
-    {
-        switch (gettype($input)) {
-            case 'object':
-                return 'object(' . get_class($input) . ')';
-            case 'array':
-                return 'array(' . count($input) . ')';
-            default:
-                ob_start();
-                var_dump($input);
-                // normalize float vs double
-                return str_replace('double(', 'float(', rtrim(ob_get_clean()));
-        }
-    }
-
-    /**
-     * Sleep for the specified amount of time specified in the request's
-     * ['client']['delay'] option if present.
-     *
-     * This function should only be used when a non-blocking sleep is not
-     * possible.
-     *
-     * @param array $request Request to sleep
-     */
-    public static function doSleep(array $request)
-    {
-        if (isset($request['client']['delay'])) {
-            usleep($request['client']['delay'] * 1000);
-        }
-    }
-
-    /**
-     * Returns a proxied future that modifies the dereferenced value of another
-     * future using a promise.
-     *
-     * @param FutureArrayInterface $future      Future to wrap with a new future
-     * @param callable    $onFulfilled Invoked when the future fulfilled
-     * @param callable    $onRejected  Invoked when the future rejected
-     * @param callable    $onProgress  Invoked when the future progresses
-     *
-     * @return FutureArray
-     */
-    public static function proxy(
-        FutureArrayInterface $future,
-        callable $onFulfilled = null,
-        callable $onRejected = null,
-        callable $onProgress = null
-    ) {
-        return new FutureArray(
-            $future->then($onFulfilled, $onRejected, $onProgress),
-            [$future, 'wait'],
-            [$future, 'cancel']
-        );
-    }
-
-    /**
-     * Returns a debug stream based on the provided variable.
-     *
-     * @param mixed $value Optional value
-     *
-     * @return resource
-     */
-    public static function getDebugResource($value = null)
-    {
-        if (is_resource($value)) {
-            return $value;
-        } elseif (defined('STDOUT')) {
-            return STDOUT;
-        } else {
-            return fopen('php://output', 'w');
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php
deleted file mode 100644
index 95b353a..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Exception;
-
-/**
- * Marker interface for cancelled exceptions.
- */
-interface CancelledException {}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php
deleted file mode 100644
index 4a14574..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Exception;
-
-class CancelledFutureAccessException extends RingException implements CancelledException {}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php
deleted file mode 100644
index 925cd13..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Exception;
-
-/**
- * Occurs when the connection failed.
- */
-class ConnectException extends RingException {}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Exception/RingException.php b/core/vendor/guzzlehttp/ringphp/src/Exception/RingException.php
deleted file mode 100644
index eed0daf..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Exception/RingException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Exception;
-
-class RingException extends \RuntimeException {};
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php b/core/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php
deleted file mode 100644
index e6a7ca7..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
-use GuzzleHttp\Ring\Exception\RingException;
-use React\Promise\PromiseInterface;
-
-/**
- * Implements common future functionality built on top of promises.
- */
-trait BaseFutureTrait
-{
-    /** @var callable */
-    private $waitfn;
-
-    /** @var callable */
-    private $cancelfn;
-
-    /** @var PromiseInterface */
-    private $wrappedPromise;
-
-    /** @var \Exception Error encountered. */
-    private $error;
-
-    /** @var mixed Result of the future */
-    private $result;
-
-    private $isRealized = false;
-
-    /**
-     * @param PromiseInterface $promise Promise to shadow with the future.
-     * @param callable         $wait    Function that blocks until the deferred
-     *                                  computation has been resolved. This
-     *                                  function MUST resolve the deferred value
-     *                                  associated with the supplied promise.
-     * @param callable         $cancel  If possible and reasonable, provide a
-     *                                  function that can be used to cancel the
-     *                                  future from completing.
-     */
-    public function __construct(
-        PromiseInterface $promise,
-        callable $wait = null,
-        callable $cancel = null
-    ) {
-        $this->wrappedPromise = $promise;
-        $this->waitfn = $wait;
-        $this->cancelfn = $cancel;
-    }
-
-    public function wait()
-    {
-        if (!$this->isRealized) {
-            $this->addShadow();
-            if (!$this->isRealized && $this->waitfn) {
-                $this->invokeWait();
-            }
-            if (!$this->isRealized) {
-                $this->error = new RingException('Waiting did not resolve future');
-            }
-        }
-
-        if ($this->error) {
-            throw $this->error;
-        }
-
-        return $this->result;
-    }
-
-    public function promise()
-    {
-        return $this->wrappedPromise;
-    }
-
-    public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null,
-        callable $onProgress = null
-    ) {
-        return $this->wrappedPromise->then($onFulfilled, $onRejected, $onProgress);
-    }
-
-    public function cancel()
-    {
-        if (!$this->isRealized) {
-            $cancelfn = $this->cancelfn;
-            $this->waitfn = $this->cancelfn = null;
-            $this->isRealized = true;
-            $this->error = new CancelledFutureAccessException();
-            if ($cancelfn) {
-                $cancelfn($this);
-            }
-        }
-    }
-
-    private function addShadow()
-    {
-        // Get the result and error when the promise is resolved. Note that
-        // calling this function might trigger the resolution immediately.
-        $this->wrappedPromise->then(
-            function ($value) {
-                $this->isRealized = true;
-                $this->result = $value;
-                $this->waitfn = $this->cancelfn = null;
-            },
-            function ($error) {
-                $this->isRealized = true;
-                $this->error = $error;
-                $this->waitfn = $this->cancelfn = null;
-            }
-        );
-    }
-
-    private function invokeWait()
-    {
-        try {
-            $wait = $this->waitfn;
-            $this->waitfn = null;
-            $wait();
-        } catch (\Exception $e) {
-            // Defer can throw to reject.
-            $this->error = $e;
-            $this->isRealized = true;
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php b/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php
deleted file mode 100644
index 0a90c93..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-/**
- * Represents a future array that has been completed successfully.
- */
-class CompletedFutureArray extends CompletedFutureValue implements FutureArrayInterface
-{
-    public function __construct(array $result)
-    {
-        parent::__construct($result);
-    }
-
-    public function offsetExists($offset)
-    {
-        return isset($this->result[$offset]);
-    }
-
-    public function offsetGet($offset)
-    {
-        return $this->result[$offset];
-    }
-
-    public function offsetSet($offset, $value)
-    {
-        $this->result[$offset] = $value;
-    }
-
-    public function offsetUnset($offset)
-    {
-        unset($this->result[$offset]);
-    }
-
-    public function count()
-    {
-        return count($this->result);
-    }
-
-    public function getIterator()
-    {
-        return new \ArrayIterator($this->result);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php b/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php
deleted file mode 100644
index 0d25af7..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-use React\Promise\FulfilledPromise;
-use React\Promise\RejectedPromise;
-
-/**
- * Represents a future value that has been resolved or rejected.
- */
-class CompletedFutureValue implements FutureInterface
-{
-    protected $result;
-    protected $error;
-
-    private $cachedPromise;
-
-    /**
-     * @param mixed      $result Resolved result
-     * @param \Exception $e      Error. Pass a GuzzleHttp\Ring\Exception\CancelledFutureAccessException
-     *                           to mark the future as cancelled.
-     */
-    public function __construct($result, \Exception $e = null)
-    {
-        $this->result = $result;
-        $this->error = $e;
-    }
-
-    public function wait()
-    {
-        if ($this->error) {
-            throw $this->error;
-        }
-
-        return $this->result;
-    }
-
-    public function cancel() {}
-
-    public function promise()
-    {
-        if (!$this->cachedPromise) {
-            $this->cachedPromise = $this->error
-                ? new RejectedPromise($this->error)
-                : new FulfilledPromise($this->result);
-        }
-
-        return $this->cachedPromise;
-    }
-
-    public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null,
-        callable $onProgress = null
-    ) {
-        return $this->promise()->then($onFulfilled, $onRejected, $onProgress);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php
deleted file mode 100644
index 3d64c96..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-/**
- * Represents a future array value that when dereferenced returns an array.
- */
-class FutureArray implements FutureArrayInterface
-{
-    use MagicFutureTrait;
-
-    public function offsetExists($offset)
-    {
-        return isset($this->_value[$offset]);
-    }
-
-    public function offsetGet($offset)
-    {
-        return $this->_value[$offset];
-    }
-
-    public function offsetSet($offset, $value)
-    {
-        $this->_value[$offset] = $value;
-    }
-
-    public function offsetUnset($offset)
-    {
-        unset($this->_value[$offset]);
-    }
-
-    public function count()
-    {
-        return count($this->_value);
-    }
-
-    public function getIterator()
-    {
-        return new \ArrayIterator($this->_value);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php
deleted file mode 100644
index 58f5f73..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-/**
- * Future that provides array-like access.
- */
-interface FutureArrayInterface extends
-    FutureInterface,
-    \ArrayAccess,
-    \Countable,
-    \IteratorAggregate {};
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php
deleted file mode 100644
index 43d1811..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-use React\Promise\PromiseInterface;
-use React\Promise\PromisorInterface;
-
-/**
- * Represents the result of a computation that may not have completed yet.
- *
- * You can use the future in a blocking manner using the wait() function, or
- * you can use a promise from the future to receive the result when the future
- * has been resolved.
- *
- * When the future is dereferenced using wait(), the result of the computation
- * is cached and returned for subsequent calls to wait(). If the result of the
- * computation has not yet completed when wait() is called, the call to wait()
- * will block until the future has completed.
- */
-interface FutureInterface extends PromiseInterface, PromisorInterface
-{
-    /**
-     * Returns the result of the future either from cache or by blocking until
-     * it is complete.
-     *
-     * This method must block until the future has a result or is cancelled.
-     * Throwing an exception in the wait() method will mark the future as
-     * realized and will throw the exception each time wait() is called.
-     * Throwing an instance of GuzzleHttp\Ring\CancelledException will mark
-     * the future as realized, will not throw immediately, but will throw the
-     * exception if the future's wait() method is called again.
-     *
-     * @return mixed
-     */
-    public function wait();
-
-    /**
-     * Cancels the future, if possible.
-     */
-    public function cancel();
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php b/core/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php
deleted file mode 100644
index 4cac928..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-/**
- * Represents a future value that responds to wait() to retrieve the promised
- * value, but can also return promises that are delivered the value when it is
- * available.
- */
-class FutureValue implements FutureInterface
-{
-    use BaseFutureTrait;
-}
diff --git a/core/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php b/core/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php
deleted file mode 100644
index 58d779d..0000000
--- a/core/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-namespace GuzzleHttp\Ring\Future;
-
-/**
- * Implements common future functionality that is triggered when the result
- * property is accessed via a magic __get method.
- *
- * @property mixed $_value Actual data used by the future. Accessing this
- *     property will cause the future to block if needed.
- */
-trait MagicFutureTrait
-{
-    use BaseFutureTrait;
-
-    /**
-     * This function handles retrieving the dereferenced result when requested.
-     *
-     * @param string $name Should always be "data" or an exception is thrown.
-     *
-     * @return mixed Returns the dereferenced data.
-     * @throws \RuntimeException
-     * @throws \GuzzleHttp\Ring\Exception\CancelledException
-     */
-    public function __get($name)
-    {
-        if ($name !== '_value') {
-            throw new \RuntimeException("Class has no {$name} property");
-        }
-
-        return $this->_value = $this->wait();
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php
deleted file mode 100644
index 0f787c9..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php
+++ /dev/null
@@ -1,792 +0,0 @@
-<?php
-// Override curl_setopt_array() to get the last set curl options
-namespace GuzzleHttp\Ring\Client {
-    function curl_setopt_array($handle, array $options) {
-        if (!empty($_SERVER['curl_test'])) {
-            $_SERVER['_curl'] = $options;
-        } else {
-            unset($_SERVER['_curl']);
-        }
-        \curl_setopt_array($handle, $options);
-    }
-}
-
-namespace GuzzleHttp\Tests\Ring\Client {
-
-use GuzzleHttp\Ring\Client\CurlFactory;
-use GuzzleHttp\Ring\Client\CurlMultiHandler;
-use GuzzleHttp\Ring\Client\MockHandler;
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Stream\FnStream;
-use GuzzleHttp\Stream\NoSeekStream;
-use GuzzleHttp\Stream\Stream;
-
-class CurlFactoryTest extends \PHPUnit_Framework_TestCase
-{
-    public static function setUpBeforeClass()
-    {
-        $_SERVER['curl_test'] = true;
-        unset($_SERVER['_curl']);
-    }
-
-    public static function tearDownAfterClass()
-    {
-        unset($_SERVER['_curl'], $_SERVER['curl_test']);
-    }
-
-    public function testCreatesCurlHandle()
-    {
-        Server::flush();
-        Server::enqueue([[
-            'status' => 200,
-            'headers' => [
-                'Foo' => ['Bar'],
-                'Baz' => ['bam'],
-                'Content-Length' => [2],
-            ],
-            'body' => 'hi',
-        ]]);
-
-        $stream = Stream::factory();
-
-        $request = [
-            'http_method' => 'PUT',
-            'headers' => [
-                'host' => [Server::$url],
-                'Hi'   => [' 123'],
-            ],
-            'body' => 'testing',
-            'client' => ['save_to' => $stream],
-        ];
-
-        $f = new CurlFactory();
-        $result = $f($request);
-        $this->assertInternalType('array', $result);
-        $this->assertCount(3, $result);
-        $this->assertInternalType('resource', $result[0]);
-        $this->assertInternalType('array', $result[1]);
-        $this->assertSame($stream, $result[2]);
-        curl_close($result[0]);
-
-        $this->assertEquals('PUT', $_SERVER['_curl'][CURLOPT_CUSTOMREQUEST]);
-        $this->assertEquals(
-            'http://http://127.0.0.1:8125/',
-            $_SERVER['_curl'][CURLOPT_URL]
-        );
-        // Sends via post fields when the request is small enough
-        $this->assertEquals('testing', $_SERVER['_curl'][CURLOPT_POSTFIELDS]);
-        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_RETURNTRANSFER]);
-        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_HEADER]);
-        $this->assertEquals(150, $_SERVER['_curl'][CURLOPT_CONNECTTIMEOUT]);
-        $this->assertInstanceOf('Closure', $_SERVER['_curl'][CURLOPT_HEADERFUNCTION]);
-
-        if (defined('CURLOPT_PROTOCOLS')) {
-            $this->assertEquals(
-                CURLPROTO_HTTP | CURLPROTO_HTTPS,
-                $_SERVER['_curl'][CURLOPT_PROTOCOLS]
-            );
-        }
-
-        $this->assertContains('Expect:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
-        $this->assertContains('Accept:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
-        $this->assertContains('Content-Type:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
-        $this->assertContains('Hi:  123', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
-        $this->assertContains('host: http://127.0.0.1:8125/', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
-    }
-
-    public function testSendsHeadRequests()
-    {
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'HEAD',
-            'headers' => ['host' => [Server::$host]],
-        ]);
-        $response->wait();
-        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_NOBODY]);
-        $checks = [CURLOPT_WRITEFUNCTION, CURLOPT_READFUNCTION, CURLOPT_FILE, CURLOPT_INFILE];
-        foreach ($checks as $check) {
-            $this->assertArrayNotHasKey($check, $_SERVER['_curl']);
-        }
-        $this->assertEquals('HEAD', Server::received()[0]['http_method']);
-    }
-
-    public function testCanAddCustomCurlOptions()
-    {
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $a([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => ['curl' => [CURLOPT_LOW_SPEED_LIMIT => 10]],
-        ]);
-        $this->assertEquals(10, $_SERVER['_curl'][CURLOPT_LOW_SPEED_LIMIT]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage SSL CA bundle not found: /does/not/exist
-     */
-    public function testValidatesVerify()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['verify' => '/does/not/exist'],
-        ]);
-    }
-
-    public function testCanSetVerifyToFile()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['verify' => __FILE__],
-        ]);
-        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_CAINFO]);
-        $this->assertEquals(2, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
-        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
-    }
-
-    public function testAddsVerifyAsTrue()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['verify' => true],
-        ]);
-        $this->assertEquals(2, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
-        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
-        $this->assertArrayNotHasKey(CURLOPT_CAINFO, $_SERVER['_curl']);
-    }
-
-    public function testCanDisableVerify()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['verify' => false],
-        ]);
-        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
-        $this->assertEquals(false, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
-    }
-
-    public function testAddsProxy()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['proxy' => 'http://bar.com'],
-        ]);
-        $this->assertEquals('http://bar.com', $_SERVER['_curl'][CURLOPT_PROXY]);
-    }
-
-    public function testAddsViaScheme()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'scheme' => 'http',
-            'headers' => ['host' => ['foo.com']],
-            'client' => [
-                'proxy' => ['http' => 'http://bar.com', 'https' => 'https://t'],
-            ],
-        ]);
-        $this->assertEquals('http://bar.com', $_SERVER['_curl'][CURLOPT_PROXY]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage SSL private key not found: /does/not/exist
-     */
-    public function testValidatesSslKey()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['ssl_key' => '/does/not/exist'],
-        ]);
-    }
-
-    public function testAddsSslKey()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['ssl_key' => __FILE__],
-        ]);
-        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLKEY]);
-    }
-
-    public function testAddsSslKeyWithPassword()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['ssl_key' => [__FILE__, 'test']],
-        ]);
-        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLKEY]);
-        $this->assertEquals('test', $_SERVER['_curl'][CURLOPT_SSLKEYPASSWD]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage SSL certificate not found: /does/not/exist
-     */
-    public function testValidatesCert()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['cert' => '/does/not/exist'],
-        ]);
-    }
-
-    public function testAddsCert()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['cert' => __FILE__],
-        ]);
-        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLCERT]);
-    }
-
-    public function testAddsCertWithPassword()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['cert' => [__FILE__, 'test']],
-        ]);
-        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLCERT]);
-        $this->assertEquals('test', $_SERVER['_curl'][CURLOPT_SSLCERTPASSWD]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage progress client option must be callable
-     */
-    public function testValidatesProgress()
-    {
-        $f = new CurlFactory();
-        $f([
-            'http_method' => 'GET',
-            'headers' => ['host' => ['foo.com']],
-            'client' => ['progress' => 'foo'],
-        ]);
-    }
-
-    public function testEmitsDebugInfoToStream()
-    {
-        $res = fopen('php://memory', 'r+');
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'HEAD',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => ['debug' => $res],
-        ]);
-        $response->wait();
-        rewind($res);
-        $output = str_replace("\r", '', stream_get_contents($res));
-        $this->assertContains(
-            "> HEAD / HTTP/1.1\nhost: 127.0.0.1:8125\n\n",
-            $output
-        );
-        $this->assertContains("< HTTP/1.1 200", $output);
-        fclose($res);
-    }
-
-    public function testEmitsProgressToFunction()
-    {
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $called = [];
-        $response = $a([
-            'http_method' => 'HEAD',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => [
-                'progress' => function () use (&$called) {
-                    $called[] = func_get_args();
-                },
-            ],
-        ]);
-        $response->wait();
-        $this->assertNotEmpty($called);
-        foreach ($called as $call) {
-            $this->assertCount(4, $call);
-        }
-    }
-
-    private function addDecodeResponse($withEncoding = true)
-    {
-        $content = gzencode('test');
-        $response  = [
-            'status'  => 200,
-            'reason'  => 'OK',
-            'headers' => ['Content-Length' => [strlen($content)]],
-            'body'    => $content,
-        ];
-
-        if ($withEncoding) {
-            $response['headers']['Content-Encoding'] = ['gzip'];
-        }
-
-        Server::flush();
-        Server::enqueue([$response]);
-
-        return $content;
-    }
-
-    public function testDecodesGzippedResponses()
-    {
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => ['decode_content' => true],
-        ]);
-        $response->wait();
-        $this->assertEquals('test', Core::body($response));
-        $this->assertEquals('', $_SERVER['_curl'][CURLOPT_ENCODING]);
-        $sent = Server::received()[0];
-        $this->assertNull(Core::header($sent, 'Accept-Encoding'));
-    }
-
-    public function testDecodesGzippedResponsesWithHeader()
-    {
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => [
-                'host'            => [Server::$host],
-                'Accept-Encoding' => ['gzip'],
-            ],
-            'client' => ['decode_content' => true],
-        ]);
-        $response->wait();
-        $this->assertEquals('gzip', $_SERVER['_curl'][CURLOPT_ENCODING]);
-        $sent = Server::received()[0];
-        $this->assertEquals('gzip', Core::header($sent, 'Accept-Encoding'));
-        $this->assertEquals('test', Core::body($response));
-    }
-
-    public function testDoesNotForceDecode()
-    {
-        $content = $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => ['decode_content' => false],
-        ]);
-        $response->wait();
-        $sent = Server::received()[0];
-        $this->assertNull(Core::header($sent, 'Accept-Encoding'));
-        $this->assertEquals($content, Core::body($response));
-    }
-
-    public function testProtocolVersion()
-    {
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $a([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'version'     => 1.0,
-        ]);
-        $this->assertEquals(CURL_HTTP_VERSION_1_0, $_SERVER['_curl'][CURLOPT_HTTP_VERSION]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesSaveTo()
-    {
-        $handler = new CurlMultiHandler();
-        $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => ['save_to' => true],
-        ]);
-    }
-
-    public function testSavesToStream()
-    {
-        $stream = fopen('php://memory', 'r+');
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client' => [
-                'decode_content' => true,
-                'save_to' => $stream,
-            ],
-        ]);
-        $response->wait();
-        rewind($stream);
-        $this->assertEquals('test', stream_get_contents($stream));
-    }
-
-    public function testSavesToGuzzleStream()
-    {
-        $stream = Stream::factory();
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client' => [
-                'decode_content' => true,
-                'save_to'        => $stream,
-            ],
-        ]);
-        $response->wait();
-        $this->assertEquals('test', (string) $stream);
-    }
-
-    public function testSavesToFileOnDisk()
-    {
-        $tmpfile = tempnam(sys_get_temp_dir(), 'testfile');
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client' => [
-                'decode_content' => true,
-                'save_to'        => $tmpfile,
-            ],
-        ]);
-        $response->wait();
-        $this->assertEquals('test', file_get_contents($tmpfile));
-        unlink($tmpfile);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesBody()
-    {
-        $handler = new CurlMultiHandler();
-        $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'body'        => false,
-        ]);
-    }
-
-    public function testAddsLargePayloadFromStreamWithNoSizeUsingChunked()
-    {
-        $stream = Stream::factory('foo');
-        $stream = FnStream::decorate($stream, [
-            'getSize' => function () {
-                return null;
-            }
-        ]);
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'body'        => $stream,
-        ]);
-        $response->wait();
-        $sent = Server::received()[0];
-        $this->assertEquals('chunked', Core::header($sent, 'Transfer-Encoding'));
-        $this->assertNull(Core::header($sent, 'Content-Length'));
-        $this->assertEquals('foo', $sent['body']);
-    }
-
-    public function testAddsPayloadFromIterator()
-    {
-        $iter = new \ArrayIterator(['f', 'o', 'o']);
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'body'        => $iter,
-        ]);
-        $response->wait();
-        $sent = Server::received()[0];
-        $this->assertEquals('chunked', Core::header($sent, 'Transfer-Encoding'));
-        $this->assertNull(Core::header($sent, 'Content-Length'));
-        $this->assertEquals('foo', $sent['body']);
-    }
-
-    public function testAddsPayloadFromResource()
-    {
-        $res = fopen('php://memory', 'r+');
-        $data = str_repeat('.', 1000000);
-        fwrite($res, $data);
-        rewind($res);
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => [
-                'host'           => [Server::$host],
-                'content-length' => [1000000],
-            ],
-            'body'        => $res,
-        ]);
-        $response->wait();
-        $sent = Server::received()[0];
-        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
-        $this->assertEquals(1000000, Core::header($sent, 'Content-Length'));
-        $this->assertEquals($data, $sent['body']);
-    }
-
-    public function testAddsContentLengthFromStream()
-    {
-        $stream = Stream::factory('foo');
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'body'        => $stream,
-        ]);
-        $response->wait();
-        $sent = Server::received()[0];
-        $this->assertEquals(3, Core::header($sent, 'Content-Length'));
-        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
-        $this->assertEquals('foo', $sent['body']);
-    }
-
-    public function testDoesNotAddMultipleContentLengthHeaders()
-    {
-        $this->addDecodeResponse();
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => [
-                'host'           => [Server::$host],
-                'content-length' => [3],
-            ],
-            'body' => 'foo',
-        ]);
-        $response->wait();
-        $sent = Server::received()[0];
-        $this->assertEquals(3, Core::header($sent, 'Content-Length'));
-        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
-        $this->assertEquals('foo', $sent['body']);
-    }
-
-    public function testSendsPostWithNoBodyOrDefaultContentType()
-    {
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $handler = new CurlMultiHandler();
-        $response = $handler([
-            'http_method' => 'POST',
-            'uri'         => '/',
-            'headers'     => ['host' => [Server::$host]],
-        ]);
-        $response->wait();
-        $received = Server::received()[0];
-        $this->assertEquals('POST', $received['http_method']);
-        $this->assertNull(Core::header($received, 'content-type'));
-        $this->assertSame('0', Core::firstHeader($received, 'content-length'));
-    }
-
-    public function testFailsWhenNoResponseAndNoBody()
-    {
-        $res = CurlFactory::createResponse(function () {}, [], [], [], null);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\RingException', $res['error']);
-        $this->assertContains(
-            'No response was received for a request with no body',
-            $res['error']->getMessage()
-        );
-    }
-
-    public function testFailsWhenCannotRewindRetry()
-    {
-        $res = CurlFactory::createResponse(function () {}, [
-            'body' => new NoSeekStream(Stream::factory('foo'))
-        ], [], [], null);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\RingException', $res['error']);
-        $this->assertContains(
-            'rewind the request body failed',
-            $res['error']->getMessage()
-        );
-    }
-
-    public function testRetriesWhenBodyCanBeRewound()
-    {
-        $callHandler = $called = false;
-        $res = CurlFactory::createResponse(function () use (&$callHandler) {
-            $callHandler = true;
-            return ['status' => 200];
-        }, [
-            'body' => FnStream::decorate(Stream::factory('test'), [
-                'seek' => function () use (&$called) {
-                    $called = true;
-                    return true;
-                }
-            ])
-        ], [], [], null);
-
-        $this->assertTrue($callHandler);
-        $this->assertTrue($called);
-        $this->assertEquals('200', $res['status']);
-    }
-
-    public function testFailsWhenRetryMoreThanThreeTimes()
-    {
-        $call = 0;
-        $mock = new MockHandler(function (array $request) use (&$mock, &$call) {
-            $call++;
-            return CurlFactory::createResponse($mock, $request, [], [], null);
-        });
-        $response = $mock([
-            'http_method' => 'GET',
-            'body'        => 'test',
-        ]);
-        $this->assertEquals(3, $call);
-        $this->assertArrayHasKey('error', $response);
-        $this->assertContains(
-            'The cURL request was retried 3 times',
-            $response['error']->getMessage()
-        );
-    }
-
-    public function testHandles100Continue()
-    {
-        Server::flush();
-        Server::enqueue([
-            [
-                'status' => '200',
-                'reason' => 'OK',
-                'headers' => [
-                    'Test' => ['Hello'],
-                    'Content-Length' => ['4'],
-                ],
-                'body' => 'test',
-            ],
-        ]);
-
-        $request = [
-            'http_method' => 'PUT',
-            'headers'     => [
-                'Host'   => [Server::$host],
-                'Expect' => ['100-Continue'],
-            ],
-            'body'        => 'test',
-        ];
-
-        $handler = new CurlMultiHandler();
-        $response = $handler($request)->wait();
-        $this->assertEquals(200, $response['status']);
-        $this->assertEquals('OK', $response['reason']);
-        $this->assertEquals(['Hello'], $response['headers']['Test']);
-        $this->assertEquals(['4'], $response['headers']['Content-Length']);
-        $this->assertEquals('test', Core::body($response));
-    }
-
-    public function testCreatesConnectException()
-    {
-        $m = new \ReflectionMethod('GuzzleHttp\Ring\Client\CurlFactory', 'createErrorResponse');
-        $m->setAccessible(true);
-        $response = $m->invoke(
-            null,
-            function () {},
-            [],
-            [
-                'err_message' => 'foo',
-                'curl' => [
-                    'errno' => CURLE_COULDNT_CONNECT,
-                ]
-            ]
-        );
-        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\ConnectException', $response['error']);
-    }
-
-    public function testParsesLastResponseOnly()
-    {
-        $response1  = [
-            'status'  => 301,
-            'headers' => [
-                'Content-Length' => ['0'],
-                'Location' => ['/foo']
-            ]
-        ];
-
-        $response2 = [
-            'status'  => 200,
-            'headers' => [
-                'Content-Length' => ['0'],
-                'Foo' => ['bar']
-            ]
-        ];
-
-        Server::flush();
-        Server::enqueue([$response1, $response2]);
-
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'GET',
-            'headers'     => ['Host'   => [Server::$host]],
-            'client' => [
-                'curl' => [
-                    CURLOPT_FOLLOWLOCATION => true
-                ]
-            ]
-        ])->wait();
-
-        $this->assertEquals(1, $response['transfer_stats']['redirect_count']);
-        $this->assertEquals('http://127.0.0.1:8125/foo', $response['effective_url']);
-        $this->assertEquals(['bar'], $response['headers']['Foo']);
-        $this->assertEquals(200, $response['status']);
-        $this->assertFalse(Core::hasHeader($response, 'Location'));
-    }
-
-    public function testMaintainsMultiHeaderOrder()
-    {
-        Server::flush();
-        Server::enqueue([
-            [
-                'status'  => 200,
-                'headers' => [
-                    'Content-Length' => ['0'],
-                    'Foo' => ['a', 'b'],
-                    'foo' => ['c', 'd'],
-                ]
-            ]
-        ]);
-
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'GET',
-            'headers'     => ['Host'   => [Server::$host]]
-        ])->wait();
-
-        $this->assertEquals(
-            ['a', 'b', 'c', 'd'],
-            Core::headerLines($response, 'Foo')
-        );
-    }
-}
-
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php
deleted file mode 100644
index ba03b8c..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Client;
-
-use GuzzleHttp\Ring\Client\CurlHandler;
-
-class CurlHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    protected function setUp()
-    {
-        if (!function_exists('curl_reset')) {
-            $this->markTestSkipped('curl_reset() is not available');
-        }
-    }
-
-    protected function getHandler($factory = null, $options = [])
-    {
-        return new CurlHandler($options);
-    }
-
-    public function testCanSetMaxHandles()
-    {
-        $a = new CurlHandler(['max_handles' => 10]);
-        $this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
-    }
-
-    public function testCreatesCurlErrors()
-    {
-        $handler = new CurlHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'uri' => '/',
-            'headers' => ['host' => ['localhost:123']],
-            'client' => ['timeout' => 0.001, 'connect_timeout' => 0.001],
-        ]);
-        $this->assertNull($response['status']);
-        $this->assertNull($response['reason']);
-        $this->assertEquals([], $response['headers']);
-        $this->assertInstanceOf(
-            'GuzzleHttp\Ring\Exception\RingException',
-            $response['error']
-        );
-
-        $this->assertEquals(
-            1,
-            preg_match('/^cURL error \d+: .*$/', $response['error']->getMessage())
-        );
-    }
-
-    public function testReleasesAdditionalEasyHandles()
-    {
-        Server::flush();
-        $response = [
-            'status'  => 200,
-            'headers' => ['Content-Length' => [4]],
-            'body'    => 'test',
-        ];
-
-        Server::enqueue([$response, $response, $response, $response]);
-        $a = new CurlHandler(['max_handles' => 2]);
-
-        $fn = function () use (&$calls, $a, &$fn) {
-            if (++$calls < 4) {
-                $a([
-                    'http_method' => 'GET',
-                    'headers'     => ['host' => [Server::$host]],
-                    'client'      => ['progress' => $fn],
-                ]);
-            }
-        };
-
-        $request = [
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => [
-                'progress' => $fn,
-            ],
-        ];
-
-        $a($request);
-        $this->assertCount(2, $this->readAttribute($a, 'handles'));
-    }
-
-    public function testReusesHandles()
-    {
-        Server::flush();
-        $response = ['status' => 200];
-        Server::enqueue([$response, $response]);
-        $a = new CurlHandler();
-        $request = [
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-        ];
-        $a($request);
-        $a($request);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php
deleted file mode 100644
index 9228f1c..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Client;
-
-use GuzzleHttp\Ring\Client\CurlMultiHandler;
-
-class CurlMultiHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSendsRequest()
-    {
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-        ]);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
-        $this->assertEquals(200, $response['status']);
-        $this->assertArrayHasKey('transfer_stats', $response);
-        $realUrl = trim($response['transfer_stats']['url'], '/');
-        $this->assertEquals(trim(Server::$url, '/'), $realUrl);
-        $this->assertArrayHasKey('effective_url', $response);
-        $this->assertEquals(
-            trim(Server::$url, '/'),
-            trim($response['effective_url'], '/')
-        );
-    }
-
-    public function testCreatesErrorResponses()
-    {
-        $url = 'http://localhost:123/';
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'GET',
-            'headers'     => ['host' => ['localhost:123']],
-        ]);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
-        $this->assertNull($response['status']);
-        $this->assertNull($response['reason']);
-        $this->assertEquals([], $response['headers']);
-        $this->assertArrayHasKey('error', $response);
-        $this->assertContains('cURL error ', $response['error']->getMessage());
-        $this->assertArrayHasKey('transfer_stats', $response);
-        $this->assertEquals(
-            trim($url, '/'),
-            trim($response['transfer_stats']['url'], '/')
-        );
-        $this->assertArrayHasKey('effective_url', $response);
-        $this->assertEquals(
-            trim($url, '/'),
-            trim($response['effective_url'], '/')
-        );
-    }
-
-    public function testSendsFuturesWhenDestructed()
-    {
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-        ]);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
-        $a->__destruct();
-        $this->assertEquals(200, $response['status']);
-    }
-
-    public function testCanSetMaxHandles()
-    {
-        $a = new CurlMultiHandler(['max_handles' => 2]);
-        $this->assertEquals(2, $this->readAttribute($a, 'maxHandles'));
-    }
-
-    public function testCanSetSelectTimeout()
-    {
-        $a = new CurlMultiHandler(['select_timeout' => 2]);
-        $this->assertEquals(2, $this->readAttribute($a, 'selectTimeout'));
-    }
-
-    public function testSendsFuturesWhenMaxHandlesIsReached()
-    {
-        $request = [
-            'http_method' => 'PUT',
-            'headers'     => ['host' => [Server::$host]],
-            'future'      => 'lazy', // passing this to control the test
-        ];
-        $response = ['status' => 200];
-        Server::flush();
-        Server::enqueue([$response, $response, $response]);
-        $a = new CurlMultiHandler(['max_handles' => 3]);
-        for ($i = 0; $i < 5; $i++) {
-            $responses[] = $a($request);
-        }
-        $this->assertCount(3, Server::received());
-        $responses[3]->cancel();
-        $responses[4]->cancel();
-    }
-
-    public function testCanCancel()
-    {
-        Server::flush();
-        $response = ['status' => 200];
-        Server::enqueue(array_fill_keys(range(0, 10), $response));
-        $a = new CurlMultiHandler();
-        $responses = [];
-
-        for ($i = 0; $i < 10; $i++) {
-            $response = $a([
-                'http_method' => 'GET',
-                'headers'     => ['host' => [Server::$host]],
-                'future'      => 'lazy',
-            ]);
-            $response->cancel();
-            $responses[] = $response;
-        }
-
-        $this->assertCount(0, Server::received());
-
-        foreach ($responses as $response) {
-            $this->assertTrue($this->readAttribute($response, 'isRealized'));
-        }
-    }
-
-    public function testCannotCancelFinished()
-    {
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $response = $a([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-        ]);
-        $response->wait();
-        $response->cancel();
-    }
-
-    public function testDelaysInParallel()
-    {
-        Server::flush();
-        Server::enqueue([['status' => 200]]);
-        $a = new CurlMultiHandler();
-        $expected = microtime(true) + (100 / 1000);
-        $response = $a([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => ['delay' => 100],
-        ]);
-        $response->wait();
-        $this->assertGreaterThanOrEqual($expected, microtime(true));
-    }
-
-    public function testSendsNonLazyFutures()
-    {
-        $request = [
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'future'      => true,
-        ];
-        Server::flush();
-        Server::enqueue([['status' => 202]]);
-        $a = new CurlMultiHandler();
-        $response = $a($request);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
-        $this->assertEquals(202, $response['status']);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php
deleted file mode 100644
index a47bb30..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Client;
-
-use GuzzleHttp\Ring\Client\Middleware;
-use GuzzleHttp\Ring\Future\CompletedFutureArray;
-
-class MiddlewareTest extends \PHPUnit_Framework_TestCase
-{
-    public function testFutureCallsDefaultHandler()
-    {
-        $future = new CompletedFutureArray(['status' => 200]);
-        $calledA = false;
-        $a = function (array $req) use (&$calledA, $future) {
-            $calledA = true;
-            return $future;
-        };
-        $calledB = false;
-        $b = function (array $req) use (&$calledB) { $calledB = true; };
-        $s = Middleware::wrapFuture($a, $b);
-        $s([]);
-        $this->assertTrue($calledA);
-        $this->assertFalse($calledB);
-    }
-
-    public function testFutureCallsStreamingHandler()
-    {
-        $future = new CompletedFutureArray(['status' => 200]);
-        $calledA = false;
-        $a = function (array $req) use (&$calledA) { $calledA = true; };
-        $calledB = false;
-        $b = function (array $req) use (&$calledB, $future) {
-            $calledB = true;
-            return $future;
-        };
-        $s = Middleware::wrapFuture($a, $b);
-        $result = $s(['client' => ['future' => true]]);
-        $this->assertFalse($calledA);
-        $this->assertTrue($calledB);
-        $this->assertSame($future, $result);
-    }
-
-    public function testStreamingCallsDefaultHandler()
-    {
-        $calledA = false;
-        $a = function (array $req) use (&$calledA) { $calledA = true; };
-        $calledB = false;
-        $b = function (array $req) use (&$calledB) { $calledB = true; };
-        $s = Middleware::wrapStreaming($a, $b);
-        $s([]);
-        $this->assertTrue($calledA);
-        $this->assertFalse($calledB);
-    }
-
-    public function testStreamingCallsStreamingHandler()
-    {
-        $calledA = false;
-        $a = function (array $req) use (&$calledA) { $calledA = true; };
-        $calledB = false;
-        $b = function (array $req) use (&$calledB) { $calledB = true; };
-        $s = Middleware::wrapStreaming($a, $b);
-        $s(['client' => ['stream' => true]]);
-        $this->assertFalse($calledA);
-        $this->assertTrue($calledB);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php
deleted file mode 100644
index 26bcd6c..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Client;
-
-use GuzzleHttp\Ring\Client\MockHandler;
-use GuzzleHttp\Ring\Future\FutureArray;
-use React\Promise\Deferred;
-
-class MockHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    public function testReturnsArray()
-    {
-        $mock = new MockHandler(['status' => 200]);
-        $response = $mock([]);
-        $this->assertEquals(200, $response['status']);
-        $this->assertEquals([], $response['headers']);
-        $this->assertNull($response['body']);
-        $this->assertNull($response['reason']);
-        $this->assertNull($response['effective_url']);
-    }
-
-    public function testReturnsFutures()
-    {
-        $deferred = new Deferred();
-        $future = new FutureArray(
-            $deferred->promise(),
-            function () use ($deferred) {
-                $deferred->resolve(['status' => 200]);
-            }
-        );
-        $mock = new MockHandler($future);
-        $response = $mock([]);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
-        $this->assertEquals(200, $response['status']);
-    }
-
-    public function testReturnsFuturesWithThenCall()
-    {
-        $deferred = new Deferred();
-        $future = new FutureArray(
-            $deferred->promise(),
-            function () use ($deferred) {
-                $deferred->resolve(['status' => 200]);
-            }
-        );
-        $mock = new MockHandler($future);
-        $response = $mock([]);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
-        $this->assertEquals(200, $response['status']);
-        $req = null;
-        $promise = $response->then(function ($value) use (&$req) {
-            $req = $value;
-            $this->assertEquals(200, $req['status']);
-        });
-        $this->assertInstanceOf('React\Promise\PromiseInterface', $promise);
-        $this->assertEquals(200, $req['status']);
-    }
-
-    public function testReturnsFuturesAndProxiesCancel()
-    {
-        $c = null;
-        $deferred = new Deferred();
-        $future = new FutureArray(
-            $deferred->promise(),
-            function () {},
-            function () use (&$c) {
-                $c = true;
-                return true;
-            }
-        );
-        $mock = new MockHandler($future);
-        $response = $mock([]);
-        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
-        $response->cancel();
-        $this->assertTrue($c);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Response must be an array or FutureArrayInterface. Found
-     */
-    public function testEnsuresMockIsValid()
-    {
-        $mock = new MockHandler('foo');
-        $mock([]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/Server.php b/core/vendor/guzzlehttp/ringphp/tests/Client/Server.php
deleted file mode 100644
index 14665a5..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/Server.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Client;
-
-use GuzzleHttp\Ring\Client\StreamHandler;
-use GuzzleHttp\Ring\Core;
-
-/**
- * Class uses to control the test webserver.
- *
- * Queued responses will be served to requests using a FIFO order.  All requests
- * received by the server are stored on the node.js server and can be retrieved
- * by calling {@see Server::received()}.
- *
- * Mock responses that don't require data to be transmitted over HTTP a great
- * for testing.  Mock response, however, cannot test the actual sending of an
- * HTTP request using cURL.  This test server allows the simulation of any
- * number of HTTP request response transactions to test the actual sending of
- * requests over the wire without having to leave an internal network.
- */
-class Server
-{
-    public static $started;
-    public static $url = 'http://127.0.0.1:8125/';
-    public static $host = '127.0.0.1:8125';
-    public static $port = 8125;
-
-    /**
-     * Flush the received requests from the server
-     * @throws \RuntimeException
-     */
-    public static function flush()
-    {
-        self::send('DELETE', '/guzzle-server/requests');
-    }
-
-    /**
-     * Queue an array of responses or a single response on the server.
-     *
-     * Any currently queued responses will be overwritten. Subsequent requests
-     * on the server will return queued responses in FIFO order.
-     *
-     * @param array $responses An array of responses. The shape of a response
-     *                         is the shape described in the RingPHP spec.
-     * @throws \Exception
-     */
-    public static function enqueue(array $responses)
-    {
-        $data = [];
-
-        foreach ($responses as $response) {
-            if (!is_array($response)) {
-                throw new \Exception('Each response must be an array');
-            }
-
-            if (isset($response['body'])) {
-                $response['body'] = base64_encode($response['body']);
-            }
-
-            $response += ['headers' => [], 'reason' => '', 'body' => ''];
-            $data[] = $response;
-        }
-
-        self::send('PUT', '/guzzle-server/responses', json_encode($data));
-    }
-
-    /**
-     * Get all of the received requests as a RingPHP request structure.
-     *
-     * @return array
-     * @throws \RuntimeException
-     */
-    public static function received()
-    {
-        if (!self::$started) {
-            return [];
-        }
-
-        $response = self::send('GET', '/guzzle-server/requests');
-        $body = Core::body($response);
-        $result = json_decode($body, true);
-        if ($result === false) {
-            throw new \RuntimeException('Error decoding response: '
-                . json_last_error());
-        }
-
-        foreach ($result as &$res) {
-            if (isset($res['uri'])) {
-                $res['resource'] = $res['uri'];
-            }
-            if (isset($res['query_string'])) {
-                $res['resource'] .= '?' . $res['query_string'];
-            }
-            if (!isset($res['resource'])) {
-                $res['resource'] = '';
-            }
-            // Ensure that headers are all arrays
-            if (isset($res['headers'])) {
-                foreach ($res['headers'] as &$h) {
-                    $h = (array) $h;
-                }
-                unset($h);
-            }
-        }
-
-        unset($res);
-        return $result;
-    }
-
-    /**
-     * Stop running the node.js server
-     */
-    public static function stop()
-    {
-        if (self::$started) {
-            self::send('DELETE', '/guzzle-server');
-        }
-
-        self::$started = false;
-    }
-
-    public static function wait($maxTries = 20)
-    {
-        $tries = 0;
-        while (!self::isListening() && ++$tries < $maxTries) {
-            usleep(100000);
-        }
-
-        if (!self::isListening()) {
-            throw new \RuntimeException('Unable to contact node.js server');
-        }
-    }
-
-    public static function start()
-    {
-        if (self::$started) {
-            return;
-        }
-
-        try {
-            self::wait();
-        } catch (\Exception $e) {
-            exec('node ' . __DIR__ . \DIRECTORY_SEPARATOR . 'server.js '
-                . self::$port . ' >> /tmp/server.log 2>&1 &');
-            self::wait();
-        }
-
-        self::$started = true;
-    }
-
-    private static function isListening()
-    {
-        $response = self::send('GET', '/guzzle-server/perf', null, [
-            'connect_timeout' => 1,
-            'timeout'         => 1
-        ]);
-
-        return !isset($response['error']);
-    }
-
-    private static function send(
-        $method,
-        $path,
-        $body = null,
-        array $client = []
-    ) {
-        $handler = new StreamHandler();
-
-        $request = [
-            'http_method'  => $method,
-            'uri'          => $path,
-            'request_port' => 8125,
-            'headers'      => ['host' => ['127.0.0.1:8125']],
-            'body'         => $body,
-            'client'       => $client,
-        ];
-
-        if ($body) {
-            $request['headers']['content-length'] = [strlen($body)];
-        }
-
-        return $handler($request);
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php b/core/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php
deleted file mode 100644
index 7549a83..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php
+++ /dev/null
@@ -1,479 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Client;
-
-use GuzzleHttp\Ring\Client\ClientUtils;
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Ring\Client\StreamHandler;
-
-class StreamHandlerTest extends \PHPUnit_Framework_TestCase
-{
-    public function testReturnsResponseForSuccessfulRequest()
-    {
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'uri'         => '/',
-            'headers'     => [
-                'host' => [Server::$host],
-                'Foo' => ['Bar'],
-            ],
-        ]);
-
-        $this->assertEquals(200, $response['status']);
-        $this->assertEquals('OK', $response['reason']);
-        $this->assertEquals(['Bar'], $response['headers']['Foo']);
-        $this->assertEquals(['8'], $response['headers']['Content-Length']);
-        $this->assertEquals('hi there', Core::body($response));
-
-        $sent = Server::received()[0];
-        $this->assertEquals('GET', $sent['http_method']);
-        $this->assertEquals('/', $sent['resource']);
-        $this->assertEquals(['127.0.0.1:8125'], $sent['headers']['host']);
-        $this->assertEquals('Bar', Core::header($sent, 'foo'));
-    }
-
-    public function testAddsErrorToResponse()
-    {
-        $handler = new StreamHandler();
-        $result = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => ['localhost:123']],
-            'client'      => ['timeout' => 0.01],
-        ]);
-        $this->assertInstanceOf(
-            'GuzzleHttp\Ring\Future\CompletedFutureArray',
-            $result
-        );
-        $this->assertNull($result['status']);
-        $this->assertNull($result['body']);
-        $this->assertEquals([], $result['headers']);
-        $this->assertInstanceOf(
-            'GuzzleHttp\Ring\Exception\RingException',
-            $result['error']
-        );
-    }
-
-    public function testEnsuresTheHttpProtocol()
-    {
-        $handler = new StreamHandler();
-        $result = $handler([
-            'http_method' => 'GET',
-            'url'         => 'ftp://localhost:123',
-        ]);
-        $this->assertArrayHasKey('error', $result);
-        $this->assertContains(
-            'URL is invalid: ftp://localhost:123',
-            $result['error']->getMessage()
-        );
-    }
-
-    public function testStreamAttributeKeepsStreamOpen()
-    {
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $response = $handler([
-            'http_method'  => 'PUT',
-            'uri'          => '/foo',
-            'query_string' => 'baz=bar',
-            'headers'      => [
-                'host' => [Server::$host],
-                'Foo'  => ['Bar'],
-            ],
-            'body'         => 'test',
-            'client'       => ['stream' => true],
-        ]);
-
-        $this->assertEquals(200, $response['status']);
-        $this->assertEquals('OK', $response['reason']);
-        $this->assertEquals('8', Core::header($response, 'Content-Length'));
-        $body = $response['body'];
-        $this->assertTrue(is_resource($body));
-        $this->assertEquals('http', stream_get_meta_data($body)['wrapper_type']);
-        $this->assertEquals('hi there', stream_get_contents($body));
-        fclose($body);
-        $sent = Server::received()[0];
-        $this->assertEquals('PUT', $sent['http_method']);
-        $this->assertEquals('/foo', $sent['uri']);
-        $this->assertEquals('baz=bar', $sent['query_string']);
-        $this->assertEquals('/foo?baz=bar', $sent['resource']);
-        $this->assertEquals('127.0.0.1:8125', Core::header($sent, 'host'));
-        $this->assertEquals('Bar', Core::header($sent, 'foo'));
-    }
-
-    public function testDrainsResponseIntoTempStream()
-    {
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'uri'         => '/',
-            'headers'     => ['host' => [Server::$host]],
-        ]);
-        $body = $response['body'];
-        $this->assertEquals('php://temp', stream_get_meta_data($body)['uri']);
-        $this->assertEquals('hi', fread($body, 2));
-        fclose($body);
-    }
-
-    public function testDrainsResponseIntoSaveToBody()
-    {
-        $r = fopen('php://temp', 'r+');
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'uri' => '/',
-            'headers' => ['host' => [Server::$host]],
-            'client' => ['save_to' => $r],
-        ]);
-        $body = $response['body'];
-        $this->assertEquals('php://temp', stream_get_meta_data($body)['uri']);
-        $this->assertEquals('hi', fread($body, 2));
-        $this->assertEquals(' there', stream_get_contents($r));
-        fclose($r);
-    }
-
-    public function testDrainsResponseIntoSaveToBodyAtPath()
-    {
-        $tmpfname = tempnam('/tmp', 'save_to_path');
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'uri' => '/',
-            'headers' => ['host' => [Server::$host]],
-            'client' => ['save_to' => $tmpfname],
-        ]);
-        $body = $response['body'];
-        $this->assertInstanceOf('GuzzleHttp\Stream\StreamInterface', $body);
-        $this->assertEquals($tmpfname, $body->getMetadata('uri'));
-        $this->assertEquals('hi', $body->read(2));
-        $body->close();
-        unlink($tmpfname);
-    }
-
-    public function testAutomaticallyDecompressGzip()
-    {
-        Server::flush();
-        $content = gzencode('test');
-        Server::enqueue([
-            [
-                'status' => 200,
-                'reason' => 'OK',
-                'headers' => [
-                    'Content-Encoding' => ['gzip'],
-                    'Content-Length' => [strlen($content)],
-                ],
-                'body' => $content,
-            ],
-        ]);
-
-        $handler = new StreamHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'uri'         => '/',
-            'client'      => ['decode_content' => true],
-        ]);
-        $this->assertEquals('test', Core::body($response));
-    }
-
-    public function testDoesNotForceGzipDecode()
-    {
-        Server::flush();
-        $content = gzencode('test');
-        Server::enqueue([
-            [
-                'status' => 200,
-                'reason' => 'OK',
-                'headers' => [
-                    'Content-Encoding' => ['gzip'],
-                    'Content-Length'   => [strlen($content)],
-                ],
-                'body' => $content,
-            ],
-        ]);
-
-        $handler = new StreamHandler();
-        $response = $handler([
-            'http_method' => 'GET',
-            'headers'     => ['host' => [Server::$host]],
-            'uri'         => '/',
-            'client'      => ['stream' => true, 'decode_content' => false],
-        ]);
-        $this->assertSame($content, Core::body($response));
-    }
-
-    public function testProtocolVersion()
-    {
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $handler([
-            'http_method' => 'GET',
-            'uri'         => '/',
-            'headers'     => ['host' => [Server::$host]],
-            'version'     => 1.0,
-        ]);
-
-        $this->assertEquals(1.0, Server::received()[0]['version']);
-    }
-
-    protected function getSendResult(array $opts)
-    {
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $opts['stream'] = true;
-        return $handler([
-            'http_method' => 'GET',
-            'uri'         => '/',
-            'headers'     => ['host' => [Server::$host]],
-            'client'      => $opts,
-        ]);
-    }
-
-    public function testAddsProxy()
-    {
-        $res = $this->getSendResult(['stream' => true, 'proxy' => '127.0.0.1:8125']);
-        $opts = stream_context_get_options($res['body']);
-        $this->assertEquals('127.0.0.1:8125', $opts['http']['proxy']);
-    }
-
-    public function testAddsTimeout()
-    {
-        $res = $this->getSendResult(['stream' => true, 'timeout' => 200]);
-        $opts = stream_context_get_options($res['body']);
-        $this->assertEquals(200, $opts['http']['timeout']);
-    }
-
-    public function testVerifiesVerifyIsValidIfPath()
-    {
-        $res = $this->getSendResult(['verify' => '/does/not/exist']);
-        $this->assertContains(
-            'SSL CA bundle not found: /does/not/exist',
-            (string) $res['error']
-        );
-    }
-
-    public function testVerifyCanBeDisabled()
-    {
-        $res = $this->getSendResult(['verify' => false]);
-        $this->assertArrayNotHasKey('error', $res);
-    }
-
-    public function testVerifiesCertIfValidPath()
-    {
-        $res = $this->getSendResult(['cert' => '/does/not/exist']);
-        $this->assertContains(
-            'SSL certificate not found: /does/not/exist',
-            (string) $res['error']
-        );
-    }
-
-    public function testVerifyCanBeSetToPath()
-    {
-        $path = $path = ClientUtils::getDefaultCaBundle();
-        $res = $this->getSendResult(['verify' => $path]);
-        $this->assertArrayNotHasKey('error', $res);
-        $opts = stream_context_get_options($res['body']);
-        $this->assertEquals(true, $opts['ssl']['verify_peer']);
-        $this->assertEquals($path, $opts['ssl']['cafile']);
-        $this->assertTrue(file_exists($opts['ssl']['cafile']));
-    }
-
-    public function testUsesSystemDefaultBundle()
-    {
-        $path = $path = ClientUtils::getDefaultCaBundle();
-        $res = $this->getSendResult(['verify' => true]);
-        $this->assertArrayNotHasKey('error', $res);
-        $opts = stream_context_get_options($res['body']);
-        if (PHP_VERSION_ID < 50600) {
-            $this->assertEquals($path, $opts['ssl']['cafile']);
-        }
-    }
-
-    public function testEnsuresVerifyOptionIsValid()
-    {
-        $res = $this->getSendResult(['verify' => 10]);
-        $this->assertContains(
-            'Invalid verify request option',
-            (string) $res['error']
-        );
-    }
-
-    public function testCanSetPasswordWhenSettingCert()
-    {
-        $path = __FILE__;
-        $res = $this->getSendResult(['cert' => [$path, 'foo']]);
-        $opts = stream_context_get_options($res['body']);
-        $this->assertEquals($path, $opts['ssl']['local_cert']);
-        $this->assertEquals('foo', $opts['ssl']['passphrase']);
-    }
-
-    public function testDebugAttributeWritesToStream()
-    {
-        $this->queueRes();
-        $f = fopen('php://temp', 'w+');
-        $this->getSendResult(['debug' => $f]);
-        fseek($f, 0);
-        $contents = stream_get_contents($f);
-        $this->assertContains('<GET http://127.0.0.1:8125/> [CONNECT]', $contents);
-        $this->assertContains('<GET http://127.0.0.1:8125/> [FILE_SIZE_IS]', $contents);
-        $this->assertContains('<GET http://127.0.0.1:8125/> [PROGRESS]', $contents);
-    }
-
-    public function testDebugAttributeWritesStreamInfoToBuffer()
-    {
-        $called = false;
-        $this->queueRes();
-        $buffer = fopen('php://temp', 'r+');
-        $this->getSendResult([
-            'progress' => function () use (&$called) { $called = true; },
-            'debug' => $buffer,
-        ]);
-        fseek($buffer, 0);
-        $contents = stream_get_contents($buffer);
-        $this->assertContains('<GET http://127.0.0.1:8125/> [CONNECT]', $contents);
-        $this->assertContains('<GET http://127.0.0.1:8125/> [FILE_SIZE_IS] message: "Content-Length: 8"', $contents);
-        $this->assertContains('<GET http://127.0.0.1:8125/> [PROGRESS] bytes_max: "8"', $contents);
-        $this->assertTrue($called);
-    }
-
-    public function testEmitsProgressInformation()
-    {
-        $called = [];
-        $this->queueRes();
-        $this->getSendResult([
-            'progress' => function () use (&$called) {
-                $called[] = func_get_args();
-            },
-        ]);
-        $this->assertNotEmpty($called);
-        $this->assertEquals(8, $called[0][0]);
-        $this->assertEquals(0, $called[0][1]);
-    }
-
-    public function testEmitsProgressInformationAndDebugInformation()
-    {
-        $called = [];
-        $this->queueRes();
-        $buffer = fopen('php://memory', 'w+');
-        $this->getSendResult([
-            'debug'    => $buffer,
-            'progress' => function () use (&$called) {
-                $called[] = func_get_args();
-            },
-        ]);
-        $this->assertNotEmpty($called);
-        $this->assertEquals(8, $called[0][0]);
-        $this->assertEquals(0, $called[0][1]);
-        rewind($buffer);
-        $this->assertNotEmpty(stream_get_contents($buffer));
-        fclose($buffer);
-    }
-
-    public function testAddsProxyByProtocol()
-    {
-        $url = str_replace('http', 'tcp', Server::$url);
-        $res = $this->getSendResult(['proxy' => ['http' => $url]]);
-        $opts = stream_context_get_options($res['body']);
-        $this->assertEquals($url, $opts['http']['proxy']);
-    }
-
-    public function testPerformsShallowMergeOfCustomContextOptions()
-    {
-        $res = $this->getSendResult([
-            'stream_context' => [
-                'http' => [
-                    'request_fulluri' => true,
-                    'method' => 'HEAD',
-                ],
-                'socket' => [
-                    'bindto' => '127.0.0.1:0',
-                ],
-                'ssl' => [
-                    'verify_peer' => false,
-                ],
-            ],
-        ]);
-
-        $opts = stream_context_get_options($res['body']);
-        $this->assertEquals('HEAD', $opts['http']['method']);
-        $this->assertTrue($opts['http']['request_fulluri']);
-        $this->assertFalse($opts['ssl']['verify_peer']);
-        $this->assertEquals('127.0.0.1:0', $opts['socket']['bindto']);
-    }
-
-    public function testEnsuresThatStreamContextIsAnArray()
-    {
-        $res = $this->getSendResult(['stream_context' => 'foo']);
-        $this->assertContains(
-            'stream_context must be an array',
-            (string) $res['error']
-        );
-    }
-
-    public function testDoesNotAddContentTypeByDefault()
-    {
-        $this->queueRes();
-        $handler = new StreamHandler();
-        $handler([
-            'http_method' => 'PUT',
-            'uri' => '/',
-            'headers' => ['host' => [Server::$host], 'content-length' => [3]],
-            'body' => 'foo',
-        ]);
-        $req = Server::received()[0];
-        $this->assertEquals('', Core::header($req, 'Content-Type'));
-        $this->assertEquals(3, Core::header($req, 'Content-Length'));
-    }
-
-    private function queueRes()
-    {
-        Server::flush();
-        Server::enqueue([
-            [
-                'status' => 200,
-                'reason' => 'OK',
-                'headers' => [
-                    'Foo' => ['Bar'],
-                    'Content-Length' => [8],
-                ],
-                'body' => 'hi there',
-            ],
-        ]);
-    }
-
-    public function testSupports100Continue()
-    {
-        Server::flush();
-        Server::enqueue([
-            [
-                'status' => '200',
-                'reason' => 'OK',
-                'headers' => [
-                    'Test' => ['Hello'],
-                    'Content-Length' => ['4'],
-                ],
-                'body' => 'test',
-            ],
-        ]);
-
-        $request = [
-            'http_method' => 'PUT',
-            'headers'     => [
-                'Host'   => [Server::$host],
-                'Expect' => ['100-Continue'],
-            ],
-            'body'        => 'test',
-        ];
-
-        $handler = new StreamHandler();
-        $response = $handler($request);
-        $this->assertEquals(200, $response['status']);
-        $this->assertEquals('OK', $response['reason']);
-        $this->assertEquals(['Hello'], $response['headers']['Test']);
-        $this->assertEquals(['4'], $response['headers']['Content-Length']);
-        $this->assertEquals('test', Core::body($response));
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Client/server.js b/core/vendor/guzzlehttp/ringphp/tests/Client/server.js
deleted file mode 100644
index 6a03e33..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Client/server.js
+++ /dev/null
@@ -1,241 +0,0 @@
-/**
- * Guzzle node.js test server to return queued responses to HTTP requests and
- * expose a RESTful API for enqueueing responses and retrieving the requests
- * that have been received.
- *
- * - Delete all requests that have been received:
- *      > DELETE /guzzle-server/requests
- *      > Host: 127.0.0.1:8125
- *
- *  - Enqueue responses
- *      > PUT /guzzle-server/responses
- *      > Host: 127.0.0.1:8125
- *      >
- *      > [{'status': 200, 'reason': 'OK', 'headers': {}, 'body': '' }]
- *
- *  - Get the received requests
- *      > GET /guzzle-server/requests
- *      > Host: 127.0.0.1:8125
- *
- *      < HTTP/1.1 200 OK
- *      <
- *      < [{'http_method': 'GET', 'uri': '/', 'headers': {}, 'body': 'string'}]
- *
- *  - Attempt access to the secure area
- *      > GET /secure/by-digest/qop-auth/guzzle-server/requests
- *      > Host: 127.0.0.1:8125
- *
- *      < HTTP/1.1 401 Unauthorized
- *      < WWW-Authenticate: Digest realm="Digest Test", qop="auth", nonce="0796e98e1aeef43141fab2a66bf4521a", algorithm="MD5", stale="false"
- *      <
- *      < 401 Unauthorized
- *
- *  - Shutdown the server
- *      > DELETE /guzzle-server
- *      > Host: 127.0.0.1:8125
- *
- * @package Guzzle PHP <http://www.guzzlephp.org>
- * @license See the LICENSE file that was distributed with this source code.
- */
-
-var http = require('http');
-var url = require('url');
-
-/**
- * Guzzle node.js server
- * @class
- */
-var GuzzleServer = function(port, log) {
-
-    this.port = port;
-    this.log = log;
-    this.responses = [];
-    this.requests = [];
-    var that = this;
-
-    var md5 = function(input) {
-        var crypto = require('crypto');
-        var hasher = crypto.createHash('md5');
-        hasher.update(input);
-        return hasher.digest('hex');
-    }
-
-    /**
-     * Node.js HTTP server authentication module.
-     *
-     * It is only initialized on demand (by loadAuthentifier). This avoids
-     * requiring the dependency to http-auth on standard operations, and the
-     * performance hit at startup.
-     */
-    var auth;
-
-    /**
-     * Provides authentication handlers (Basic, Digest).
-     */
-    var loadAuthentifier = function(type, options) {
-        var typeId = type;
-        if (type == 'digest') {
-            typeId += '.'+(options && options.qop ? options.qop : 'none');
-        }
-        if (!loadAuthentifier[typeId]) {
-            if (!auth) {
-                try {
-                    auth = require('http-auth');
-                } catch (e) {
-                    if (e.code == 'MODULE_NOT_FOUND') {
-                        return;
-                    }
-                }
-            }
-            switch (type) {
-                case 'digest':
-                    var digestParams = {
-                        realm: 'Digest Test',
-                        login: 'me',
-                        password: 'test'
-                    };
-                    if (options && options.qop) {
-                        digestParams.qop = options.qop;
-                    }
-                    loadAuthentifier[typeId] = auth.digest(digestParams, function(username, callback) {
-                        callback(md5(digestParams.login + ':' + digestParams.realm + ':' + digestParams.password));
-                    });
-                    break
-            }
-        }
-        return loadAuthentifier[typeId];
-    };
-
-    var firewallRequest = function(request, req, res, requestHandlerCallback) {
-        var securedAreaUriParts = request.uri.match(/^\/secure\/by-(digest)(\/qop-([^\/]*))?(\/.*)$/);
-        if (securedAreaUriParts) {
-            var authentifier = loadAuthentifier(securedAreaUriParts[1], { qop: securedAreaUriParts[2] });
-            if (!authentifier) {
-                res.writeHead(501, 'HTTP authentication not implemented', { 'Content-Length': 0 });
-                res.end();
-                return;
-            }
-            authentifier.check(req, res, function(req, res) {
-                req.url = securedAreaUriParts[4];
-                requestHandlerCallback(request, req, res);
-            });
-        } else {
-            requestHandlerCallback(request, req, res);
-        }
-    };
-
-    var controlRequest = function(request, req, res) {
-        if (req.url == '/guzzle-server/perf') {
-            res.writeHead(200, 'OK', {'Content-Length': 16});
-            res.end('Body of response');
-        } else if (req.method == 'DELETE') {
-            if (req.url == '/guzzle-server/requests') {
-                // Clear the received requests
-                that.requests = [];
-                res.writeHead(200, 'OK', { 'Content-Length': 0 });
-                res.end();
-                if (that.log) {
-                    console.log('Flushing requests');
-                }
-            } else if (req.url == '/guzzle-server') {
-                // Shutdown the server
-                res.writeHead(200, 'OK', { 'Content-Length': 0, 'Connection': 'close' });
-                res.end();
-                if (that.log) {
-                    console.log('Shutting down');
-                }
-                that.server.close();
-            }
-        } else if (req.method == 'GET') {
-            if (req.url === '/guzzle-server/requests') {
-                if (that.log) {
-                    console.log('Sending received requests');
-                }
-                // Get received requests
-                var body = JSON.stringify(that.requests);
-                res.writeHead(200, 'OK', { 'Content-Length': body.length });
-                res.end(body);
-            }
-        } else if (req.method == 'PUT' && req.url == '/guzzle-server/responses') {
-            if (that.log) {
-                console.log('Adding responses...');
-            }
-            if (!request.body) {
-                if (that.log) {
-                    console.log('No response data was provided');
-                }
-                res.writeHead(400, 'NO RESPONSES IN REQUEST', { 'Content-Length': 0 });
-            } else {
-                that.responses = eval('(' + request.body + ')');
-                for (var i = 0; i < that.responses.length; i++) {
-                    if (that.responses[i].body) {
-                        that.responses[i].body = new Buffer(that.responses[i].body, 'base64');
-                    }
-                }
-                if (that.log) {
-                    console.log(that.responses);
-                }
-                res.writeHead(200, 'OK', { 'Content-Length': 0 });
-            }
-            res.end();
-        }
-    };
-
-    var receivedRequest = function(request, req, res) {
-        if (req.url.indexOf('/guzzle-server') === 0) {
-            controlRequest(request, req, res);
-        } else if (req.url.indexOf('/guzzle-server') == -1 && !that.responses.length) {
-            res.writeHead(500);
-            res.end('No responses in queue');
-        } else {
-            if (that.log) {
-                console.log('Returning response from queue and adding request');
-            }
-            that.requests.push(request);
-            var response = that.responses.shift();
-            res.writeHead(response.status, response.reason, response.headers);
-            res.end(response.body);
-        }
-    };
-
-    this.start = function() {
-
-        that.server = http.createServer(function(req, res) {
-
-            var parts = url.parse(req.url, false);
-            var request = {
-                http_method: req.method,
-                scheme: parts.scheme,
-                uri: parts.pathname,
-                query_string: parts.query,
-                headers: req.headers,
-                version: req.httpVersion,
-                body: ''
-            };
-
-            // Receive each chunk of the request body
-            req.addListener('data', function(chunk) {
-                request.body += chunk;
-            });
-
-            // Called when the request completes
-            req.addListener('end', function() {
-                firewallRequest(request, req, res, receivedRequest);
-            });
-        });
-
-        that.server.listen(this.port, '127.0.0.1');
-
-        if (this.log) {
-            console.log('Server running at http://127.0.0.1:8125/');
-        }
-    };
-};
-
-// Get the port from the arguments
-port = process.argv.length >= 3 ? process.argv[2] : 8125;
-log = process.argv.length >= 4 ? process.argv[3] : false;
-
-// Start the server
-server = new GuzzleServer(port, log);
-server.start();
diff --git a/core/vendor/guzzlehttp/ringphp/tests/CoreTest.php b/core/vendor/guzzlehttp/ringphp/tests/CoreTest.php
deleted file mode 100644
index 49522f2..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/CoreTest.php
+++ /dev/null
@@ -1,336 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring;
-
-use GuzzleHttp\Ring\Core;
-use GuzzleHttp\Ring\Future\CompletedFutureArray;
-use GuzzleHttp\Ring\Future\FutureArray;
-use GuzzleHttp\Stream\Stream;
-use React\Promise\Deferred;
-
-class CoreTest extends \PHPUnit_Framework_TestCase
-{
-    public function testReturnsNullNoHeadersAreSet()
-    {
-        $this->assertNull(Core::header([], 'Foo'));
-        $this->assertNull(Core::firstHeader([], 'Foo'));
-    }
-
-    public function testChecksIfHasHeader()
-    {
-        $message = [
-            'headers' => [
-                'Foo' => ['Bar', 'Baz'],
-                'foo' => ['hello'],
-                'bar' => ['1']
-            ]
-        ];
-        $this->assertTrue(Core::hasHeader($message, 'Foo'));
-        $this->assertTrue(Core::hasHeader($message, 'foo'));
-        $this->assertTrue(Core::hasHeader($message, 'FoO'));
-        $this->assertTrue(Core::hasHeader($message, 'bar'));
-        $this->assertFalse(Core::hasHeader($message, 'barr'));
-    }
-
-    public function testReturnsFirstHeaderWhenSimple()
-    {
-        $this->assertEquals('Bar', Core::firstHeader([
-            'headers' => ['Foo' => ['Bar', 'Baz']],
-        ], 'Foo'));
-    }
-
-    public function testReturnsFirstHeaderWhenMultiplePerLine()
-    {
-        $this->assertEquals('Bar', Core::firstHeader([
-            'headers' => ['Foo' => ['Bar, Baz']],
-        ], 'Foo'));
-    }
-
-    public function testExtractsCaseInsensitiveHeader()
-    {
-        $this->assertEquals(
-            'hello',
-            Core::header(['headers' => ['foo' => ['hello']]], 'FoO')
-        );
-    }
-
-    public function testExtractsCaseInsensitiveHeaderLines()
-    {
-        $this->assertEquals(
-            ['a', 'b', 'c', 'd'],
-            Core::headerLines([
-                'headers' => [
-                    'foo' => ['a', 'b'],
-                    'Foo' => ['c', 'd']
-                ]
-            ], 'foo')
-        );
-    }
-
-    public function testExtractsHeaderLines()
-    {
-        $this->assertEquals(
-            ['bar', 'baz'],
-            Core::headerLines([
-                'headers' => [
-                    'Foo' => ['bar', 'baz'],
-                ],
-            ], 'Foo')
-        );
-    }
-
-    public function testExtractsHeaderAsString()
-    {
-        $this->assertEquals(
-            'bar, baz',
-            Core::header([
-                'headers' => [
-                    'Foo' => ['bar', 'baz'],
-                ],
-            ], 'Foo', true)
-        );
-    }
-
-    public function testReturnsNullWhenHeaderNotFound()
-    {
-        $this->assertNull(Core::header(['headers' => []], 'Foo'));
-    }
-
-    public function testRemovesHeaders()
-    {
-        $message = [
-            'headers' => [
-                'foo' => ['bar'],
-                'Foo' => ['bam'],
-                'baz' => ['123'],
-            ],
-        ];
-
-        $this->assertSame($message, Core::removeHeader($message, 'bam'));
-        $this->assertEquals([
-            'headers' => ['baz' => ['123']],
-        ], Core::removeHeader($message, 'foo'));
-    }
-
-    public function testCreatesUrl()
-    {
-        $req = [
-            'scheme'  => 'http',
-            'headers' => ['host' => ['foo.com']],
-            'uri'     => '/',
-        ];
-
-        $this->assertEquals('http://foo.com/', Core::url($req));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage No Host header was provided
-     */
-    public function testEnsuresHostIsAvailableWhenCreatingUrls()
-    {
-        Core::url([]);
-    }
-
-    public function testCreatesUrlWithQueryString()
-    {
-        $req = [
-            'scheme'       => 'http',
-            'headers'      => ['host' => ['foo.com']],
-            'uri'          => '/',
-            'query_string' => 'foo=baz',
-        ];
-
-        $this->assertEquals('http://foo.com/?foo=baz', Core::url($req));
-    }
-
-    public function testUsesUrlIfSet()
-    {
-        $req = ['url' => 'http://foo.com'];
-        $this->assertEquals('http://foo.com', Core::url($req));
-    }
-
-    public function testReturnsNullWhenNoBody()
-    {
-        $this->assertNull(Core::body([]));
-    }
-
-    public function testReturnsStreamAsString()
-    {
-        $this->assertEquals(
-            'foo',
-            Core::body(['body' => Stream::factory('foo')])
-        );
-    }
-
-    public function testReturnsString()
-    {
-        $this->assertEquals('foo', Core::body(['body' => 'foo']));
-    }
-
-    public function testReturnsResourceContent()
-    {
-        $r = fopen('php://memory', 'w+');
-        fwrite($r, 'foo');
-        rewind($r);
-        $this->assertEquals('foo', Core::body(['body' => $r]));
-        fclose($r);
-    }
-
-    public function testReturnsIteratorContent()
-    {
-        $a = new \ArrayIterator(['a', 'b', 'cd', '']);
-        $this->assertEquals('abcd', Core::body(['body' => $a]));
-    }
-
-    public function testReturnsObjectToString()
-    {
-        $this->assertEquals('foo', Core::body(['body' => new StrClass]));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testEnsuresBodyIsValid()
-    {
-        Core::body(['body' => false]);
-    }
-
-    public function testParsesHeadersFromLines()
-    {
-        $lines = ['Foo: bar', 'Foo: baz', 'Abc: 123', 'Def: a, b'];
-        $this->assertEquals([
-            'Foo' => ['bar', 'baz'],
-            'Abc' => ['123'],
-            'Def' => ['a, b'],
-        ], Core::headersFromLines($lines));
-    }
-
-    public function testParsesHeadersFromLinesWithMultipleLines()
-    {
-        $lines = ['Foo: bar', 'Foo: baz', 'Foo: 123'];
-        $this->assertEquals([
-            'Foo' => ['bar', 'baz', '123'],
-        ], Core::headersFromLines($lines));
-    }
-
-    public function testCreatesArrayCallFunctions()
-    {
-        $called = [];
-        $a = function ($a, $b) use (&$called) {
-            $called['a'] = func_get_args();
-        };
-        $b = function ($a, $b) use (&$called) {
-            $called['b'] = func_get_args();
-        };
-        $c = Core::callArray([$a, $b]);
-        $c(1, 2);
-        $this->assertEquals([1, 2], $called['a']);
-        $this->assertEquals([1, 2], $called['b']);
-    }
-
-    public function testRewindsGuzzleStreams()
-    {
-        $str = Stream::factory('foo');
-        $this->assertTrue(Core::rewindBody(['body' => $str]));
-    }
-
-    public function testRewindsStreams()
-    {
-        $str = Stream::factory('foo')->detach();
-        $this->assertTrue(Core::rewindBody(['body' => $str]));
-    }
-
-    public function testRewindsIterators()
-    {
-        $iter = new \ArrayIterator(['foo']);
-        $this->assertTrue(Core::rewindBody(['body' => $iter]));
-    }
-
-    public function testRewindsStrings()
-    {
-        $this->assertTrue(Core::rewindBody(['body' => 'hi']));
-    }
-
-    public function testRewindsToStrings()
-    {
-        $this->assertTrue(Core::rewindBody(['body' => new StrClass()]));
-    }
-
-    public function typeProvider()
-    {
-        return [
-            ['foo', 'string(3) "foo"'],
-            [true, 'bool(true)'],
-            [false, 'bool(false)'],
-            [10, 'int(10)'],
-            [1.0, 'float(1)'],
-            [new StrClass(), 'object(GuzzleHttp\Tests\Ring\StrClass)'],
-            [['foo'], 'array(1)']
-        ];
-    }
-
-    /**
-     * @dataProvider typeProvider
-     */
-    public function testDescribesType($input, $output)
-    {
-        $this->assertEquals($output, Core::describeType($input));
-    }
-
-    public function testDoesSleep()
-    {
-        $t = microtime(true);
-        $expected = $t + (100 / 1000);
-        Core::doSleep(['client' => ['delay' => 100]]);
-        $this->assertGreaterThanOrEqual($expected, microtime(true));
-    }
-
-    public function testProxiesFuture()
-    {
-        $f = new CompletedFutureArray(['status' => 200]);
-        $res = null;
-        $proxied = Core::proxy($f, function ($value) use (&$res) {
-            $value['foo'] = 'bar';
-            $res = $value;
-            return $value;
-        });
-        $this->assertNotSame($f, $proxied);
-        $this->assertEquals(200, $f->wait()['status']);
-        $this->assertArrayNotHasKey('foo', $f->wait());
-        $this->assertEquals('bar', $proxied->wait()['foo']);
-        $this->assertEquals(200, $proxied->wait()['status']);
-    }
-
-    public function testProxiesDeferredFuture()
-    {
-        $d = new Deferred();
-        $f = new FutureArray($d->promise());
-        $f2 = Core::proxy($f);
-        $d->resolve(['foo' => 'bar']);
-        $this->assertEquals('bar', $f['foo']);
-        $this->assertEquals('bar', $f2['foo']);
-    }
-
-    public function testProxiesDeferredFutureFailure()
-    {
-        $d = new Deferred();
-        $f = new FutureArray($d->promise());
-        $f2 = Core::proxy($f);
-        $d->reject(new \Exception('foo'));
-        try {
-            $f2['hello?'];
-            $this->fail('did not throw');
-        } catch (\Exception $e) {
-            $this->assertEquals('foo', $e->getMessage());
-        }
-
-    }
-}
-
-final class StrClass
-{
-    public function __toString()
-    {
-        return 'foo';
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php
deleted file mode 100644
index 82d7efb..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Future;
-
-use GuzzleHttp\Ring\Future\CompletedFutureArray;
-
-class CompletedFutureArrayTest extends \PHPUnit_Framework_TestCase
-{
-    public function testReturnsAsArray()
-    {
-        $f = new CompletedFutureArray(['foo' => 'bar']);
-        $this->assertEquals('bar', $f['foo']);
-        $this->assertFalse(isset($f['baz']));
-        $f['abc'] = '123';
-        $this->assertTrue(isset($f['abc']));
-        $this->assertEquals(['foo' => 'bar', 'abc' => '123'], iterator_to_array($f));
-        $this->assertEquals(2, count($f));
-        unset($f['abc']);
-        $this->assertEquals(1, count($f));
-        $this->assertEquals(['foo' => 'bar'], iterator_to_array($f));
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php
deleted file mode 100644
index 6ded40d..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Future;
-
-use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
-use GuzzleHttp\Ring\Future\CompletedFutureValue;
-
-class CompletedFutureValueTest extends \PHPUnit_Framework_TestCase
-{
-    public function testReturnsValue()
-    {
-        $f = new CompletedFutureValue('hi');
-        $this->assertEquals('hi', $f->wait());
-        $f->cancel();
-
-        $a = null;
-        $f->then(function ($v) use (&$a) {
-            $a = $v;
-        });
-        $this->assertSame('hi', $a);
-    }
-
-    public function testThrows()
-    {
-        $ex = new \Exception('foo');
-        $f = new CompletedFutureValue(null, $ex);
-        $f->cancel();
-        try {
-            $f->wait();
-            $this->fail('did not throw');
-        } catch (\Exception $e) {
-            $this->assertSame($e, $ex);
-        }
-    }
-
-    public function testMarksAsCancelled()
-    {
-        $ex = new CancelledFutureAccessException();
-        $f = new CompletedFutureValue(null, $ex);
-        try {
-            $f->wait();
-            $this->fail('did not throw');
-        } catch (\Exception $e) {
-            $this->assertSame($e, $ex);
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php
deleted file mode 100644
index 0e09f5a..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Future;
-
-use GuzzleHttp\Ring\Future\FutureArray;
-use React\Promise\Deferred;
-
-class FutureArrayTest extends \PHPUnit_Framework_TestCase
-{
-    public function testLazilyCallsDeref()
-    {
-        $c = false;
-        $deferred = new Deferred();
-        $f = new FutureArray(
-            $deferred->promise(),
-            function () use (&$c, $deferred) {
-                $c = true;
-                $deferred->resolve(['status' => 200]);
-            }
-        );
-        $this->assertFalse($c);
-        $this->assertFalse($this->readAttribute($f, 'isRealized'));
-        $this->assertEquals(200, $f['status']);
-        $this->assertTrue($c);
-    }
-
-    public function testActsLikeArray()
-    {
-        $deferred = new Deferred();
-        $f = new FutureArray(
-            $deferred->promise(),
-            function () use (&$c, $deferred) {
-                $deferred->resolve(['status' => 200]);
-            }
-        );
-
-        $this->assertTrue(isset($f['status']));
-        $this->assertEquals(200, $f['status']);
-        $this->assertEquals(['status' => 200], $f->wait());
-        $this->assertEquals(1, count($f));
-        $f['baz'] = 10;
-        $this->assertEquals(10, $f['baz']);
-        unset($f['baz']);
-        $this->assertFalse(isset($f['baz']));
-        $this->assertEquals(['status' => 200], iterator_to_array($f));
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testThrowsWhenAccessingInvalidProperty()
-    {
-        $deferred = new Deferred();
-        $f = new FutureArray($deferred->promise(), function () {});
-        $f->foo;
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php b/core/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php
deleted file mode 100644
index d59c543..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Ring\Future;
-
-use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
-use GuzzleHttp\Ring\Future\FutureValue;
-use React\Promise\Deferred;
-
-class FutureValueTest extends \PHPUnit_Framework_TestCase
-{
-    public function testDerefReturnsValue()
-    {
-        $called = 0;
-        $deferred = new Deferred();
-
-        $f = new FutureValue(
-            $deferred->promise(),
-            function () use ($deferred, &$called) {
-                $called++;
-                $deferred->resolve('foo');
-            }
-        );
-
-        $this->assertEquals('foo', $f->wait());
-        $this->assertEquals(1, $called);
-        $this->assertEquals('foo', $f->wait());
-        $this->assertEquals(1, $called);
-        $f->cancel();
-        $this->assertTrue($this->readAttribute($f, 'isRealized'));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
-     */
-    public function testThrowsWhenAccessingCancelled()
-    {
-        $f = new FutureValue(
-            (new Deferred())->promise(),
-            function () {},
-            function () { return true; }
-        );
-        $f->cancel();
-        $f->wait();
-    }
-
-    /**
-     * @expectedException \OutOfBoundsException
-     */
-    public function testThrowsWhenDerefFailure()
-    {
-        $called = false;
-        $deferred = new Deferred();
-        $f = new FutureValue(
-            $deferred->promise(),
-            function () use(&$called) {
-                $called = true;
-            }
-        );
-        $deferred->reject(new \OutOfBoundsException());
-        $f->wait();
-        $this->assertFalse($called);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Ring\Exception\RingException
-     * @expectedExceptionMessage Waiting did not resolve future
-     */
-    public function testThrowsWhenDerefDoesNotResolve()
-    {
-        $deferred = new Deferred();
-        $f = new FutureValue(
-            $deferred->promise(),
-            function () use(&$called) {
-                $called = true;
-            }
-        );
-        $f->wait();
-    }
-
-    public function testThrowingCancelledFutureAccessExceptionCancels()
-    {
-        $deferred = new Deferred();
-        $f = new FutureValue(
-            $deferred->promise(),
-            function () use ($deferred) {
-                throw new CancelledFutureAccessException();
-            }
-        );
-        try {
-            $f->wait();
-            $this->fail('did not throw');
-        } catch (CancelledFutureAccessException $e) {}
-    }
-
-    /**
-     * @expectedException \Exception
-     * @expectedExceptionMessage foo
-     */
-    public function testThrowingExceptionInDerefMarksAsFailed()
-    {
-        $deferred = new Deferred();
-        $f = new FutureValue(
-            $deferred->promise(),
-            function () {
-                throw new \Exception('foo');
-            }
-        );
-        $f->wait();
-    }
-}
diff --git a/core/vendor/guzzlehttp/ringphp/tests/bootstrap.php b/core/vendor/guzzlehttp/ringphp/tests/bootstrap.php
deleted file mode 100644
index 017610f..0000000
--- a/core/vendor/guzzlehttp/ringphp/tests/bootstrap.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-require __DIR__ . '/../vendor/autoload.php';
-require __DIR__ . '/Client/Server.php';
-
-use GuzzleHttp\Tests\Ring\Client\Server;
-
-Server::start();
-
-register_shutdown_function(function () {
-    Server::stop();
-});
diff --git a/core/vendor/guzzlehttp/streams/.gitignore b/core/vendor/guzzlehttp/streams/.gitignore
deleted file mode 100644
index c33d396..0000000
--- a/core/vendor/guzzlehttp/streams/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.idea
-.DS_STORE
-coverage
-phpunit.xml
-composer.lock
-vendor/
diff --git a/core/vendor/guzzlehttp/streams/.travis.yml b/core/vendor/guzzlehttp/streams/.travis.yml
deleted file mode 100644
index a6f8a87..0000000
--- a/core/vendor/guzzlehttp/streams/.travis.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - hhvm
-
-before_script:
-  - composer self-update
-  - composer install --no-interaction --prefer-source --dev
-
-script: vendor/bin/phpunit
-
-matrix:
-  allow_failures:
-    - php: hhvm
diff --git a/core/vendor/guzzlehttp/streams/CHANGELOG.rst b/core/vendor/guzzlehttp/streams/CHANGELOG.rst
deleted file mode 100644
index 0018ffe..0000000
--- a/core/vendor/guzzlehttp/streams/CHANGELOG.rst
+++ /dev/null
@@ -1,94 +0,0 @@
-=========
-Changelog
-=========
-
-3.0.0 (2014-10-12)
-------------------
-
-* Now supports creating streams from functions and iterators.
-* Supports creating buffered streams and asynchronous streams.
-* Removed ``functions.php``. Use the corresponding functions provided by
-  ``GuzzleHttp\Streams\Utils`` instead.
-* Moved ``GuzzleHttp\Stream\MetadataStreamInterface::getMetadata`` to
-  ``GuzzleHttp\Stream\StreamInterface``. MetadataStreamInterface is no longer
-  used and is marked as deprecated.
-* Added ``attach()`` to ``GuzzleHttp\Stream\StreamInterface`` for PSR-7
-  compatibility.
-* Removed ``flush()`` from StreamInterface.
-* Removed the ``$maxLength`` parameter from
-  ``GuzzleHttp\Stream\StreamInterface::getContents()``. This function now
-  returns the entire remainder of the stream. If you want to limit the maximum
-  amount of data read from the stream, use the
-  ``GuzzleHttp\Stream\Utils::copyToString()`` function.
-* Streams that return an empty string, ``''``, are no longer considered a
-  failure. You MUST return ``false`` to mark the read as a failure, and ensure
-  that any decorators you create properly return ``true`` in response to the
-  ``eof()`` method when the stream is consumed.
-* ``GuzzleHttp\Stream\Stream::__construct``,
-  ``GuzzleHttp\Stream\Stream::factory``, and
-  ``GuzzleHttp\Stream\Utils::create`` no longer accept a size in the second
-  argument. They now accept an associative array of options, including the
-  "size" key and "metadata" key which can be used to provide custom metadata.
-* Added ``GuzzleHttp\Stream\BufferStream`` to add support for buffering data,
-  and when read, shifting data off of the buffer.
-* Added ``GuzzleHttp\Stream\NullBuffer`` which can be used as a buffer that
-  does not actually store any data.
-* Added ``GuzzleHttp\Stream\AsyncStream`` to provide support for non-blocking
-  streams that can be filled by a remote source (e.g., an event-loop). If a
-  ``drain`` option is provided, the stream can also act as if it is a blocking
-  stream.
-
-2.1.0 (2014-08-17)
-------------------
-
-* Added an InflateStream to inflate gzipped or deflated content.
-* Added ``flush`` to stream wrapper.
-* Added the ability to easily register the GuzzleStreamWrapper if needed.
-
-2.0.0 (2014-08-16)
-------------------
-
-* Deprecated functions.php and moved all of those methods to
-  ``GuzzleHttp\Streams\Utils``. Use ``GuzzleHttp\Stream\Stream::factory()``
-  instead of ``GuzzleHttp\Stream\create()`` to create new streams.
-* Added ``flush()`` to ``StreamInterface``. This method is used to flush any
-  underlying stream write buffers.
-* Added ``FnStream`` to easily decorate stream behavior with callables.
-* ``Utils::hash`` now throws an exception when the stream cannot seek to 0.
-
-1.5.1 (2014-09-10)
-------------------
-
-* Stream metadata is grabbed from the underlying stream each time
-  ``getMetadata`` is called rather than returning a value from a cache.
-* Properly closing all underlying streams when AppendStream is closed.
-* Seek functions no longer throw exceptions.
-* LazyOpenStream now correctly returns the underlying stream resource when
-  detached.
-
-1.5.0 (2014-08-07)
-------------------
-
-* Added ``Stream\safe_open`` to open stream resources and throw exceptions
-  instead of raising errors.
-
-1.4.0 (2014-07-19)
-------------------
-
-* Added a LazyOpenStream
-
-1.3.0 (2014-07-15)
-------------------
-
-* Added an AppendStream to stream over multiple stream one after the other.
-
-1.2.0 (2014-07-15)
-------------------
-
-* Updated the ``detach()`` method to return the underlying stream resource or
-  ``null`` if it does not wrap a resource.
-* Multiple fixes for how streams behave when the underlying resource is
-  detached
-* Do not clear statcache when a stream does not have a 'uri'
-* Added a fix to LimitStream
-* Added a condition to ensure that functions.php can be required multiple times
diff --git a/core/vendor/guzzlehttp/streams/README.rst b/core/vendor/guzzlehttp/streams/README.rst
deleted file mode 100644
index baff63b..0000000
--- a/core/vendor/guzzlehttp/streams/README.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-==============
-Guzzle Streams
-==============
-
-Provides a simple abstraction over streams of data.
-
-This library is used in `Guzzle 5 <https://github.com/guzzle/guzzle>`_, and is
-(currently) compatible with the WIP PSR-7.
-
-Installation
-============
-
-This package can be installed easily using `Composer <http://getcomposer.org>`_.
-Simply add the following to the composer.json file at the root of your project:
-
-.. code-block:: javascript
-
-    {
-      "require": {
-        "guzzlehttp/streams": "~3.0"
-      }
-    }
-
-Then install your dependencies using ``composer.phar install``.
-
-Documentation
-=============
-
-The documentation for this package can be found on the main Guzzle website at
-http://docs.guzzlephp.org/en/guzzle4/streams.html.
-
-Testing
-=======
-
-This library is tested using PHPUnit. You'll need to install the dependencies
-using `Composer <http://getcomposer.org>`_ then run ``make test``.
diff --git a/core/vendor/guzzlehttp/streams/phpunit.xml.dist b/core/vendor/guzzlehttp/streams/phpunit.xml.dist
deleted file mode 100644
index 6e758c1..0000000
--- a/core/vendor/guzzlehttp/streams/phpunit.xml.dist
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit bootstrap="./vendor/autoload.php"
-         colors="true">
-    <testsuites>
-        <testsuite>
-            <directory>tests</directory>
-        </testsuite>
-    </testsuites>
-    <filter>
-        <whitelist>
-            <directory suffix=".php">src</directory>
-            <exclude>
-                <file>src/functions.php</file>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php b/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php
deleted file mode 100644
index 25ad960..0000000
--- a/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php
-namespace GuzzleHttp\Stream;
-
-/**
- * Represents an asynchronous read-only stream that supports a drain event and
- * pumping data from a source stream.
- *
- * The AsyncReadStream can be used as a completely asynchronous stream, meaning
- * the data you can read from the stream will immediately return only
- * the data that is currently buffered.
- *
- * AsyncReadStream can also be used in a "blocking" manner if a "pump" function
- * is provided. When a caller requests more bytes than are available in the
- * buffer, then the pump function is used to block until the requested number
- * of bytes are available or the remote source stream has errored, closed, or
- * timed-out. This behavior isn't strictly "blocking" because the pump function
- * can send other transfers while waiting on the desired buffer size to be
- * ready for reading (e.g., continue to tick an event loop).
- *
- * @unstable This class is subject to change.
- */
-class AsyncReadStream implements StreamInterface
-{
-    use StreamDecoratorTrait;
-
-    /** @var callable|null Fn used to notify writers the buffer has drained */
-    private $drain;
-
-    /** @var callable|null Fn used to block for more data */
-    private $pump;
-
-    /** @var int|null Highwater mark of the underlying buffer */
-    private $hwm;
-
-    /** @var bool Whether or not drain needs to be called at some point */
-    private $needsDrain;
-
-    /** @var int The expected size of the remote source */
-    private $size;
-
-    /**
-     * In order to utilize high water marks to tell writers to slow down, the
-     * provided stream must answer to the "hwm" stream metadata variable,
-     * providing the high water mark. If no "hwm" metadata value is available,
-     * then the "drain" functionality is not utilized.
-     *
-     * This class accepts an associative array of configuration options.
-     *
-     * - drain: (callable) Function to invoke when the stream has drained,
-     *   meaning the buffer is now writable again because the size of the
-     *   buffer is at an acceptable level (e.g., below the high water mark).
-     *   The function accepts a single argument, the buffer stream object that
-     *   has drained.
-     * - pump: (callable) A function that accepts the number of bytes to read
-     *   from the source stream. This function will block until all of the data
-     *   that was requested has been read, EOF of the source stream, or the
-     *   source stream is closed.
-     * - size: (int) The expected size in bytes of the data that will be read
-     *   (if known up-front).
-     *
-     * @param StreamInterface $buffer   Buffer that contains the data that has
-     *                                  been read by the event loop.
-     * @param array           $config   Associative array of options.
-     *
-     * @throws \InvalidArgumentException if the buffer is not readable and
-     *                                   writable.
-     */
-    public function __construct(
-        StreamInterface $buffer,
-        array $config = []
-    ) {
-        if (!$buffer->isReadable() || !$buffer->isWritable()) {
-            throw new \InvalidArgumentException(
-                'Buffer must be readable and writable'
-            );
-        }
-
-        if (isset($config['size'])) {
-            $this->size = $config['size'];
-        }
-
-        static $callables = ['pump', 'drain'];
-        foreach ($callables as $check) {
-            if (isset($config[$check])) {
-                if (!is_callable($config[$check])) {
-                    throw new \InvalidArgumentException(
-                        $check . ' must be callable'
-                    );
-                }
-                $this->{$check} = $config[$check];
-            }
-        }
-
-        $this->hwm = $buffer->getMetadata('hwm');
-
-        // Cannot drain when there's no high water mark.
-        if ($this->hwm === null) {
-            $this->drain = null;
-        }
-
-        $this->stream = $buffer;
-    }
-
-    /**
-     * Factory method used to create new async stream and an underlying buffer
-     * if no buffer is provided.
-     *
-     * This function accepts the same options as AsyncReadStream::__construct,
-     * but added the following key value pairs:
-     *
-     * - buffer: (StreamInterface) Buffer used to buffer data. If none is
-     *   provided, a default buffer is created.
-     * - hwm: (int) High water mark to use if a buffer is created on your
-     *   behalf.
-     * - max_buffer: (int) If provided, wraps the utilized buffer in a
-     *   DroppingStream decorator to ensure that buffer does not exceed a given
-     *   length. When exceeded, the stream will begin dropping data. Set the
-     *   max_buffer to 0, to use a NullStream which does not store data.
-     * - write: (callable) A function that is invoked when data is written
-     *   to the underlying buffer. The function accepts the buffer as the first
-     *   argument, and the data being written as the second. The function MUST
-     *   return the number of bytes that were written or false to let writers
-     *   know to slow down.
-     * - drain: (callable) See constructor documentation.
-     * - pump: (callable) See constructor documentation.
-     *
-     * @param array $options Associative array of options.
-     *
-     * @return array Returns an array containing the buffer used to buffer
-     *               data, followed by the ready to use AsyncReadStream object.
-     */
-    public static function create(array $options = [])
-    {
-        $maxBuffer = isset($options['max_buffer'])
-            ? $options['max_buffer']
-            : null;
-
-        if ($maxBuffer === 0) {
-            $buffer = new NullStream();
-        } elseif (isset($options['buffer'])) {
-            $buffer = $options['buffer'];
-        } else {
-            $hwm = isset($options['hwm']) ? $options['hwm'] : 16384;
-            $buffer = new BufferStream($hwm);
-        }
-
-        if ($maxBuffer > 0) {
-            $buffer = new DroppingStream($buffer, $options['max_buffer']);
-        }
-
-        // Call the on_write callback if an on_write function was provided.
-        if (isset($options['write'])) {
-            $onWrite = $options['write'];
-            $buffer = FnStream::decorate($buffer, [
-                'write' => function ($string) use ($buffer, $onWrite) {
-                    $result = $buffer->write($string);
-                    $onWrite($buffer, $string);
-                    return $result;
-                }
-            ]);
-        }
-
-        return [$buffer, new self($buffer, $options)];
-    }
-
-    public function getSize()
-    {
-        return $this->size;
-    }
-
-    public function isWritable()
-    {
-        return false;
-    }
-
-    public function write($string)
-    {
-        return false;
-    }
-
-    public function read($length)
-    {
-        if (!$this->needsDrain && $this->drain) {
-            $this->needsDrain = $this->stream->getSize() >= $this->hwm;
-        }
-
-        $result = $this->stream->read($length);
-
-        // If we need to drain, then drain when the buffer is empty.
-        if ($this->needsDrain && $this->stream->getSize() === 0) {
-            $this->needsDrain = false;
-            $drainFn = $this->drain;
-            $drainFn($this->stream);
-        }
-
-        $resultLen = strlen($result);
-
-        // If a pump was provided, the buffer is still open, and not enough
-        // data was given, then block until the data is provided.
-        if ($this->pump && $resultLen < $length) {
-            $pumpFn = $this->pump;
-            $result .= $pumpFn($length - $resultLen);
-        }
-
-        return $result;
-    }
-}
diff --git a/core/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php b/core/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php
deleted file mode 100644
index e631b9f..0000000
--- a/core/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Stream\Exception;
-
-class CannotAttachException extends \RuntimeException {}
diff --git a/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php b/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
deleted file mode 100644
index c1433ad..0000000
--- a/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-namespace GuzzleHttp\Stream;
-
-/**
- * This interface is deprecated and should no longer be used. Just use
- * StreamInterface now that the getMetadata method has been added to
- * StreamInterface.
- *
- * @deprecated
- */
-interface MetadataStreamInterface extends StreamInterface {}
diff --git a/core/vendor/guzzlehttp/streams/src/NullStream.php b/core/vendor/guzzlehttp/streams/src/NullStream.php
deleted file mode 100644
index 41ee776..0000000
--- a/core/vendor/guzzlehttp/streams/src/NullStream.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-namespace GuzzleHttp\Stream;
-use GuzzleHttp\Stream\Exception\CannotAttachException;
-
-/**
- * Does not store any data written to it.
- */
-class NullStream implements StreamInterface
-{
-    public function __toString()
-    {
-        return '';
-    }
-
-    public function getContents()
-    {
-        return '';
-    }
-
-    public function close() {}
-
-    public function detach() {}
-
-    public function attach($stream)
-    {
-        throw new CannotAttachException();
-    }
-
-    public function getSize()
-    {
-        return 0;
-    }
-
-    public function isReadable()
-    {
-        return true;
-    }
-
-    public function isWritable()
-    {
-        return true;
-    }
-
-    public function isSeekable()
-    {
-        return true;
-    }
-
-    public function eof()
-    {
-        return true;
-    }
-
-    public function tell()
-    {
-        return 0;
-    }
-
-    public function seek($offset, $whence = SEEK_SET)
-    {
-        return false;
-    }
-
-    public function read($length)
-    {
-        return false;
-    }
-
-    public function write($string)
-    {
-        return strlen($string);
-    }
-
-    public function getMetadata($key = null)
-    {
-        return $key ? null : [];
-    }
-}
diff --git a/core/vendor/guzzlehttp/streams/src/StreamInterface.php b/core/vendor/guzzlehttp/streams/src/StreamInterface.php
deleted file mode 100644
index fd19c6f..0000000
--- a/core/vendor/guzzlehttp/streams/src/StreamInterface.php
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-namespace GuzzleHttp\Stream;
-
-/**
- * Describes a stream instance.
- */
-interface StreamInterface
-{
-    /**
-     * Attempts to seek to the beginning of the stream and reads all data into
-     * a string until the end of the stream is reached.
-     *
-     * Warning: This could attempt to load a large amount of data into memory.
-     *
-     * @return string
-     */
-    public function __toString();
-
-    /**
-     * Closes the stream and any underlying resources.
-     */
-    public function close();
-
-    /**
-     * Separates any underlying resources from the stream.
-     *
-     * After the underlying resource has been detached, the stream object is in
-     * an unusable state. If you wish to use a Stream object as a PHP stream
-     * but keep the Stream object in a consistent state, use
-     * {@see GuzzleHttp\Stream\GuzzleStreamWrapper::getResource}.
-     *
-     * @return resource|null Returns the underlying PHP stream resource or null
-     *                       if the Stream object did not utilize an underlying
-     *                       stream resource.
-     */
-    public function detach();
-
-    /**
-     * Replaces the underlying stream resource with the provided stream.
-     *
-     * Use this method to replace the underlying stream with another; as an
-     * example, in server-side code, if you decide to return a file, you
-     * would replace the original content-oriented stream with the file
-     * stream.
-     *
-     * Any internal state such as caching of cursor position should be reset
-     * when attach() is called, as the stream has changed.
-     *
-     * @param resource $stream
-     *
-     * @return void
-     */
-    public function attach($stream);
-
-    /**
-     * Get the size of the stream if known
-     *
-     * @return int|null Returns the size in bytes if known, or null if unknown
-     */
-    public function getSize();
-
-    /**
-     * Returns the current position of the file read/write pointer
-     *
-     * @return int|bool Returns the position of the file pointer or false on error
-     */
-    public function tell();
-
-    /**
-     * Returns true if the stream is at the end of the stream.
-     *
-     * @return bool
-     */
-    public function eof();
-
-    /**
-     * Returns whether or not the stream is seekable
-     *
-     * @return bool
-     */
-    public function isSeekable();
-
-    /**
-     * Seek to a position in the stream
-     *
-     * @param int $offset Stream offset
-     * @param int $whence Specifies how the cursor position will be calculated
-     *                    based on the seek offset. Valid values are identical
-     *                    to the built-in PHP $whence values for `fseek()`.
-     *                    SEEK_SET: Set position equal to offset bytes
-     *                    SEEK_CUR: Set position to current location plus offset
-     *                    SEEK_END: Set position to end-of-stream plus offset
-     *
-     * @return bool Returns true on success or false on failure
-     * @link   http://www.php.net/manual/en/function.fseek.php
-     */
-    public function seek($offset, $whence = SEEK_SET);
-
-    /**
-     * Returns whether or not the stream is writable
-     *
-     * @return bool
-     */
-    public function isWritable();
-
-    /**
-     * Write data to the stream
-     *
-     * @param string $string The string that is to be written.
-     *
-     * @return int|bool Returns the number of bytes written to the stream on
-     *                  success returns false on failure (e.g., broken pipe,
-     *                  writer needs to slow down, buffer is full, etc.)
-     */
-    public function write($string);
-
-    /**
-     * Returns whether or not the stream is readable
-     *
-     * @return bool
-     */
-    public function isReadable();
-
-    /**
-     * Read data from the stream
-     *
-     * @param int $length Read up to $length bytes from the object and return
-     *                    them. Fewer than $length bytes may be returned if
-     *                    underlying stream call returns fewer bytes.
-     *
-     * @return string     Returns the data read from the stream.
-     */
-    public function read($length);
-
-    /**
-     * Returns the remaining contents of the stream as a string.
-     *
-     * Note: this could potentially load a large amount of data into memory.
-     *
-     * @return string
-     */
-    public function getContents();
-
-    /**
-     * Get stream metadata as an associative array or retrieve a specific key.
-     *
-     * The keys returned are identical to the keys returned from PHP's
-     * stream_get_meta_data() function.
-     *
-     * @param string $key Specific metadata to retrieve.
-     *
-     * @return array|mixed|null Returns an associative array if no key is
-     *                          no key is provided. Returns a specific key
-     *                          value if a key is provided and the value is
-     *                          found, or null if the key is not found.
-     * @see http://php.net/manual/en/function.stream-get-meta-data.php
-     */
-    public function getMetadata($key = null);
-}
diff --git a/core/vendor/guzzlehttp/streams/src/Utils.php b/core/vendor/guzzlehttp/streams/src/Utils.php
deleted file mode 100644
index 94cb42d..0000000
--- a/core/vendor/guzzlehttp/streams/src/Utils.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-namespace GuzzleHttp\Stream;
-
-use GuzzleHttp\Stream\Exception\SeekException;
-
-/**
- * Static utility class because PHP's autoloaders don't support the concept
- * of namespaced function autoloading.
- */
-class Utils
-{
-    /**
-     * Safely opens a PHP stream resource using a filename.
-     *
-     * When fopen fails, PHP normally raises a warning. This function adds an
-     * error handler that checks for errors and throws an exception instead.
-     *
-     * @param string $filename File to open
-     * @param string $mode     Mode used to open the file
-     *
-     * @return resource
-     * @throws \RuntimeException if the file cannot be opened
-     */
-    public static function open($filename, $mode)
-    {
-        $ex = null;
-        set_error_handler(function () use ($filename, $mode, &$ex) {
-            $ex = new \RuntimeException(sprintf(
-                'Unable to open %s using mode %s: %s',
-                $filename,
-                $mode,
-                func_get_args()[1]
-            ));
-        });
-
-        $handle = fopen($filename, $mode);
-        restore_error_handler();
-
-        if ($ex) {
-            /** @var $ex \RuntimeException */
-            throw $ex;
-        }
-
-        return $handle;
-    }
-
-    /**
-     * Copy the contents of a stream into a string until the given number of
-     * bytes have been read.
-     *
-     * @param StreamInterface $stream Stream to read
-     * @param int             $maxLen Maximum number of bytes to read. Pass -1
-     *                                to read the entire stream.
-     * @return string
-     */
-    public static function copyToString(StreamInterface $stream, $maxLen = -1)
-    {
-        $buffer = '';
-
-        if ($maxLen === -1) {
-            while (!$stream->eof()) {
-                $buf = $stream->read(1048576);
-                if ($buf === false) {
-                    break;
-                }
-                $buffer .= $buf;
-            }
-            return $buffer;
-        }
-
-        $len = 0;
-        while (!$stream->eof() && $len < $maxLen) {
-            $buf = $stream->read($maxLen - $len);
-            if ($buf === false) {
-                break;
-            }
-            $buffer .= $buf;
-            $len = strlen($buffer);
-        }
-
-        return $buffer;
-    }
-
-    /**
-     * Copy the contents of a stream into another stream until the given number
-     * of bytes have been read.
-     *
-     * @param StreamInterface $source Stream to read from
-     * @param StreamInterface $dest   Stream to write to
-     * @param int             $maxLen Maximum number of bytes to read. Pass -1
-     *                                to read the entire stream.
-     */
-    public static function copyToStream(
-        StreamInterface $source,
-        StreamInterface $dest,
-        $maxLen = -1
-    ) {
-        if ($maxLen === -1) {
-            while (!$source->eof()) {
-                if (!$dest->write($source->read(1048576))) {
-                    break;
-                }
-            }
-            return;
-        }
-
-        $bytes = 0;
-        while (!$source->eof()) {
-            $buf = $source->read($maxLen - $bytes);
-            if (!($len = strlen($buf))) {
-                break;
-            }
-            $bytes += $len;
-            $dest->write($buf);
-            if ($bytes == $maxLen) {
-                break;
-            }
-        }
-    }
-
-    /**
-     * Calculate a hash of a Stream
-     *
-     * @param StreamInterface $stream    Stream to calculate the hash for
-     * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)
-     * @param bool            $rawOutput Whether or not to use raw output
-     *
-     * @return string Returns the hash of the stream
-     * @throws SeekException
-     */
-    public static function hash(
-        StreamInterface $stream,
-        $algo,
-        $rawOutput = false
-    ) {
-        $pos = $stream->tell();
-
-        if ($pos > 0 && !$stream->seek(0)) {
-            throw new SeekException($stream);
-        }
-
-        $ctx = hash_init($algo);
-        while (!$stream->eof()) {
-            hash_update($ctx, $stream->read(1048576));
-        }
-
-        $out = hash_final($ctx, (bool) $rawOutput);
-        $stream->seek($pos);
-
-        return $out;
-    }
-
-    /**
-     * Read a line from the stream up to the maximum allowed buffer length
-     *
-     * @param StreamInterface $stream    Stream to read from
-     * @param int             $maxLength Maximum buffer length
-     *
-     * @return string|bool
-     */
-    public static function readline(StreamInterface $stream, $maxLength = null)
-    {
-        $buffer = '';
-        $size = 0;
-
-        while (!$stream->eof()) {
-            if (false === ($byte = $stream->read(1))) {
-                return $buffer;
-            }
-            $buffer .= $byte;
-            // Break when a new line is found or the max length - 1 is reached
-            if ($byte == PHP_EOL || ++$size == $maxLength - 1) {
-                break;
-            }
-        }
-
-        return $buffer;
-    }
-
-    /**
-     * Alias of GuzzleHttp\Stream\Stream::factory.
-     *
-     * @param mixed $resource Resource to create
-     * @param array $options  Associative array of stream options defined in
-     *                        {@see \GuzzleHttp\Stream\Stream::__construct}
-     *
-     * @return StreamInterface
-     *
-     * @see GuzzleHttp\Stream\Stream::factory
-     * @see GuzzleHttp\Stream\Stream::__construct
-     */
-    public static function create($resource, array $options = [])
-    {
-        return Stream::factory($resource, $options);
-    }
-}
diff --git a/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php b/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
deleted file mode 100644
index 8c78995..0000000
--- a/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Stream;
-
-use GuzzleHttp\Stream\AsyncReadStream;
-use GuzzleHttp\Stream\BufferStream;
-use GuzzleHttp\Stream\FnStream;
-use GuzzleHttp\Stream\Stream;
-
-class AsyncReadStreamTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Buffer must be readable and writable
-     */
-    public function testValidatesReadableBuffer()
-    {
-        new AsyncReadStream(FnStream::decorate(
-            Stream::factory(),
-            ['isReadable' => function () { return false; }]
-        ));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Buffer must be readable and writable
-     */
-    public function testValidatesWritableBuffer()
-    {
-        new AsyncReadStream(FnStream::decorate(
-            Stream::factory(),
-            ['isWritable' => function () { return false; }]
-        ));
-    }
-
-    public function testValidatesHwmMetadata()
-    {
-        $a = new AsyncReadStream(Stream::factory(), [
-            'drain' => function() {}
-        ]);
-        $this->assertNull($this->readAttribute($a, 'drain'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage pump must be callable
-     */
-    public function testValidatesPumpIsCallable()
-    {
-        new AsyncReadStream(new BufferStream(), ['pump' => true]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage drain must be callable
-     */
-    public function testValidatesDrainIsCallable()
-    {
-        new AsyncReadStream(new BufferStream(), ['drain' => true]);
-    }
-
-    public function testCanInitialize()
-    {
-        $buffer = new BufferStream();
-        $a = new AsyncReadStream($buffer, [
-            'size'  => 10,
-            'drain' => function () {},
-            'pump'  => function () {},
-        ]);
-        $this->assertSame($buffer, $this->readAttribute($a, 'stream'));
-        $this->assertTrue(is_callable($this->readAttribute($a, 'drain')));
-        $this->assertTrue(is_callable($this->readAttribute($a, 'pump')));
-        $this->assertTrue($a->isReadable());
-        $this->assertFalse($a->isSeekable());
-        $this->assertFalse($a->isWritable());
-        $this->assertFalse($a->write('foo'));
-        $this->assertEquals(10, $a->getSize());
-    }
-
-    public function testReadsFromBufferWithNoDrainOrPump()
-    {
-        $buffer = new BufferStream();
-        $a = new AsyncReadStream($buffer);
-        $buffer->write('foo');
-        $this->assertNull($a->getSize());
-        $this->assertEquals('foo', $a->read(10));
-        $this->assertEquals('', $a->read(10));
-    }
-
-    public function testCallsPumpForMoreDataWhenRequested()
-    {
-        $called = 0;
-        $buffer = new BufferStream();
-        $a = new AsyncReadStream($buffer, [
-            'pump' => function ($size) use (&$called) {
-                $called++;
-                return str_repeat('.', $size);
-            }
-        ]);
-        $buffer->write('foobar');
-        $this->assertEquals('foo', $a->read(3));
-        $this->assertEquals(0, $called);
-        $this->assertEquals('bar.....', $a->read(8));
-        $this->assertEquals(1, $called);
-        $this->assertEquals('..', $a->read(2));
-        $this->assertEquals(2, $called);
-    }
-
-    public function testCallsDrainWhenNeeded()
-    {
-        $called = 0;
-        $buffer = new BufferStream(5);
-        $a = new AsyncReadStream($buffer, [
-            'drain' => function (BufferStream $b) use (&$called, $buffer) {
-                $this->assertSame($b, $buffer);
-                $called++;
-            }
-        ]);
-
-        $buffer->write('foobar');
-        $this->assertEquals(6, $buffer->getSize());
-        $this->assertEquals(0, $called);
-
-        $a->read(3);
-        $this->assertTrue($this->readAttribute($a, 'needsDrain'));
-        $this->assertEquals(3, $buffer->getSize());
-        $this->assertEquals(0, $called);
-
-        $a->read(3);
-        $this->assertEquals(0, $buffer->getSize());
-        $this->assertFalse($this->readAttribute($a, 'needsDrain'));
-        $this->assertEquals(1, $called);
-    }
-
-    public function testCreatesBufferWithNoConfig()
-    {
-        list($buffer, $async) = AsyncReadStream::create();
-        $this->assertInstanceOf('GuzzleHttp\Stream\BufferStream', $buffer);
-        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
-    }
-
-    public function testCreatesBufferWithSpecifiedBuffer()
-    {
-        $buf = new BufferStream();
-        list($buffer, $async) = AsyncReadStream::create(['buffer' => $buf]);
-        $this->assertSame($buf, $buffer);
-        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
-    }
-
-    public function testCreatesNullStream()
-    {
-        list($buffer, $async) = AsyncReadStream::create(['max_buffer' => 0]);
-        $this->assertInstanceOf('GuzzleHttp\Stream\NullStream', $buffer);
-        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
-    }
-
-    public function testCreatesDroppingStream()
-    {
-        list($buffer, $async) = AsyncReadStream::create(['max_buffer' => 5]);
-        $this->assertInstanceOf('GuzzleHttp\Stream\DroppingStream', $buffer);
-        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
-        $buffer->write('12345678910');
-        $this->assertEquals(5, $buffer->getSize());
-    }
-
-    public function testCreatesOnWriteStream()
-    {
-        $c = 0;
-        $b = new BufferStream();
-        list($buffer, $async) = AsyncReadStream::create([
-            'buffer' => $b,
-            'write'  => function (BufferStream $buf, $data) use (&$c, $b) {
-                $this->assertSame($buf, $b);
-                $this->assertEquals('foo', $data);
-                $c++;
-            }
-        ]);
-        $this->assertInstanceOf('GuzzleHttp\Stream\FnStream', $buffer);
-        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
-        $this->assertEquals(0, $c);
-        $this->assertEquals(3, $buffer->write('foo'));
-        $this->assertEquals(1, $c);
-        $this->assertEquals(3, $buffer->write('foo'));
-        $this->assertEquals(2, $c);
-        $this->assertEquals('foofoo', (string) $buffer);
-    }
-}
diff --git a/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php b/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
deleted file mode 100644
index fd8cd1a..0000000
--- a/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Stream\Exception;
-
-use GuzzleHttp\Stream\Exception\SeekException;
-use GuzzleHttp\Stream\Stream;
-
-class SeekExceptionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasStream()
-    {
-        $s = Stream::factory('foo');
-        $e = new SeekException($s, 10);
-        $this->assertSame($s, $e->getStream());
-        $this->assertContains('10', $e->getMessage());
-    }
-}
diff --git a/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php b/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
deleted file mode 100644
index 21b7c6d..0000000
--- a/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Stream;
-
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\NoSeekStream;
-
-/**
- * @covers GuzzleHttp\Stream\NoSeekStream
- * @covers GuzzleHttp\Stream\StreamDecoratorTrait
- */
-class NoSeekStreamTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCannotSeek()
-    {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
-            ->setMethods(['isSeekable', 'seek'])
-            ->getMockForAbstractClass();
-        $s->expects($this->never())->method('seek');
-        $s->expects($this->never())->method('isSeekable');
-        $wrapped = new NoSeekStream($s);
-        $this->assertFalse($wrapped->isSeekable());
-        $this->assertFalse($wrapped->seek(2));
-    }
-
-    public function testHandlesClose()
-    {
-        $s = Stream::factory('foo');
-        $wrapped = new NoSeekStream($s);
-        $wrapped->close();
-        $this->assertFalse($wrapped->write('foo'));
-    }
-
-    public function testCanAttach()
-    {
-        $s1 = Stream::factory('foo');
-        $s2 = Stream::factory('bar');
-        $wrapped = new NoSeekStream($s1);
-        $wrapped->attach($s2->detach());
-        $this->assertEquals('bar', (string) $wrapped);
-    }
-}
diff --git a/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php b/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php
deleted file mode 100644
index 8e41431..0000000
--- a/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Stream;
-
-use GuzzleHttp\Stream\NullStream;
-
-class NullStreamTest extends \PHPUnit_Framework_TestCase
-{
-    public function testDoesNothing()
-    {
-        $b = new NullStream();
-        $this->assertEquals('', $b->read(10));
-        $this->assertEquals(4, $b->write('test'));
-        $this->assertEquals('', (string) $b);
-        $this->assertNull($b->getMetadata('a'));
-        $this->assertEquals([], $b->getMetadata());
-        $this->assertEquals(0, $b->getSize());
-        $this->assertEquals('', $b->getContents());
-        $this->assertEquals(0, $b->tell());
-
-        $this->assertTrue($b->isReadable());
-        $this->assertTrue($b->isWritable());
-        $this->assertTrue($b->isSeekable());
-        $this->assertFalse($b->seek(10));
-
-        $this->assertTrue($b->eof());
-        $b->detach();
-        $this->assertTrue($b->eof());
-        $b->close();
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
-     */
-    public function testCannotAttach()
-    {
-        $p = new NullStream();
-        $p->attach('a');
-    }
-}
diff --git a/core/vendor/guzzlehttp/streams/tests/UtilsTest.php b/core/vendor/guzzlehttp/streams/tests/UtilsTest.php
deleted file mode 100644
index 6e3e3b2..0000000
--- a/core/vendor/guzzlehttp/streams/tests/UtilsTest.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-namespace GuzzleHttp\Tests\Stream;
-
-use GuzzleHttp\Stream\FnStream;
-use GuzzleHttp\Stream\NoSeekStream;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\Utils;
-
-class UtilsTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCopiesToString()
-    {
-        $s = Stream::factory('foobaz');
-        $this->assertEquals('foobaz', Utils::copyToString($s));
-        $s->seek(0);
-        $this->assertEquals('foo', Utils::copyToString($s, 3));
-        $this->assertEquals('baz', Utils::copyToString($s, 3));
-        $this->assertEquals('', Utils::copyToString($s));
-    }
-
-    public function testCopiesToStringStopsWhenReadFails()
-    {
-        $s1 = Stream::factory('foobaz');
-        $s1 = FnStream::decorate($s1, [
-            'read' => function () {
-                return false;
-            }
-        ]);
-        $result = Utils::copyToString($s1);
-        $this->assertEquals('', $result);
-    }
-
-    public function testCopiesToStream()
-    {
-        $s1 = Stream::factory('foobaz');
-        $s2 = Stream::factory('');
-        Utils::copyToStream($s1, $s2);
-        $this->assertEquals('foobaz', (string) $s2);
-        $s2 = Stream::factory('');
-        $s1->seek(0);
-        Utils::copyToStream($s1, $s2, 3);
-        $this->assertEquals('foo', (string) $s2);
-        Utils::copyToStream($s1, $s2, 3);
-        $this->assertEquals('foobaz', (string) $s2);
-    }
-
-    public function testStopsCopyToStreamWhenWriteFails()
-    {
-        $s1 = Stream::factory('foobaz');
-        $s2 = Stream::factory('');
-        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
-        Utils::copyToStream($s1, $s2);
-        $this->assertEquals('', (string) $s2);
-    }
-
-    public function testStopsCopyToSteamWhenWriteFailsWithMaxLen()
-    {
-        $s1 = Stream::factory('foobaz');
-        $s2 = Stream::factory('');
-        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
-        Utils::copyToStream($s1, $s2, 10);
-        $this->assertEquals('', (string) $s2);
-    }
-
-    public function testStopsCopyToSteamWhenReadFailsWithMaxLen()
-    {
-        $s1 = Stream::factory('foobaz');
-        $s1 = FnStream::decorate($s1, ['read' => function () { return ''; }]);
-        $s2 = Stream::factory('');
-        Utils::copyToStream($s1, $s2, 10);
-        $this->assertEquals('', (string) $s2);
-    }
-
-    public function testReadsLines()
-    {
-        $s = Stream::factory("foo\nbaz\nbar");
-        $this->assertEquals("foo\n", Utils::readline($s));
-        $this->assertEquals("baz\n", Utils::readline($s));
-        $this->assertEquals("bar", Utils::readline($s));
-    }
-
-    public function testReadsLinesUpToMaxLength()
-    {
-        $s = Stream::factory("12345\n");
-        $this->assertEquals("123", Utils::readline($s, 4));
-        $this->assertEquals("45\n", Utils::readline($s));
-    }
-
-    public function testReadsLineUntilFalseReturnedFromRead()
-    {
-        $s = $this->getMockBuilder('GuzzleHttp\Stream\Stream')
-            ->setMethods(['read', 'eof'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $s->expects($this->exactly(2))
-            ->method('read')
-            ->will($this->returnCallback(function () {
-                static $c = false;
-                if ($c) {
-                    return false;
-                }
-                $c = true;
-                return 'h';
-            }));
-        $s->expects($this->exactly(2))
-            ->method('eof')
-            ->will($this->returnValue(false));
-        $this->assertEquals("h", Utils::readline($s));
-    }
-
-    public function testCalculatesHash()
-    {
-        $s = Stream::factory('foobazbar');
-        $this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Stream\Exception\SeekException
-     */
-    public function testCalculatesHashThrowsWhenSeekFails()
-    {
-        $s = new NoSeekStream(Stream::factory('foobazbar'));
-        $s->read(2);
-        Utils::hash($s, 'md5');
-    }
-
-    public function testCalculatesHashSeeksToOriginalPosition()
-    {
-        $s = Stream::factory('foobazbar');
-        $s->seek(4);
-        $this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
-        $this->assertEquals(4, $s->tell());
-    }
-
-    public function testOpensFilesSuccessfully()
-    {
-        $r = Utils::open(__FILE__, 'r');
-        $this->assertInternalType('resource', $r);
-        fclose($r);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r
-     */
-    public function testThrowsExceptionNotWarning()
-    {
-        Utils::open('/path/to/does/not/exist', 'r');
-    }
-
-    public function testProxiesToFactory()
-    {
-        $this->assertEquals('foo', (string) Utils::create('foo'));
-    }
-}
diff --git a/core/vendor/psr/http-message/LICENSE b/core/vendor/psr/http-message/LICENSE
new file mode 100644
index 0000000..c2d8e45
--- /dev/null
+++ b/core/vendor/psr/http-message/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 PHP Framework Interoperability Group
+
+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/psr/http-message/README.md b/core/vendor/psr/http-message/README.md
new file mode 100644
index 0000000..2818533
--- /dev/null
+++ b/core/vendor/psr/http-message/README.md
@@ -0,0 +1,13 @@
+PSR Http Message
+================
+
+This repository holds all interfaces/classes/traits related to
+[PSR-7](http://www.php-fig.org/psr/psr-7/).
+
+Note that this is not a HTTP message implementation of its own. It is merely an
+interface that describes a HTTP message. See the specification for more details.
+
+Usage
+-----
+
+We'll certainly need some stuff in here.
\ No newline at end of file
diff --git a/core/vendor/psr/http-message/composer.json b/core/vendor/psr/http-message/composer.json
new file mode 100644
index 0000000..4774b61
--- /dev/null
+++ b/core/vendor/psr/http-message/composer.json
@@ -0,0 +1,25 @@
+{
+    "name": "psr/http-message",
+    "description": "Common interface for HTTP messages",
+    "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "PHP-FIG",
+            "homepage": "http://www.php-fig.org/"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "Psr\\Http\\Message\\": "src/"
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0.x-dev"
+        }
+    }
+}
diff --git a/core/vendor/psr/http-message/src/MessageInterface.php b/core/vendor/psr/http-message/src/MessageInterface.php
new file mode 100644
index 0000000..8f67a05
--- /dev/null
+++ b/core/vendor/psr/http-message/src/MessageInterface.php
@@ -0,0 +1,187 @@
+<?php
+
+namespace Psr\Http\Message;
+
+/**
+ * HTTP messages consist of requests from a client to a server and responses
+ * from a server to a client. This interface defines the methods common to
+ * each.
+ *
+ * Messages are considered immutable; all methods that might change state MUST
+ * be implemented such that they retain the internal state of the current
+ * message and return an instance that contains the changed state.
+ *
+ * @link http://www.ietf.org/rfc/rfc7230.txt
+ * @link http://www.ietf.org/rfc/rfc7231.txt
+ */
+interface MessageInterface
+{
+    /**
+     * Retrieves the HTTP protocol version as a string.
+     *
+     * The string MUST contain only the HTTP version number (e.g., "1.1", "1.0").
+     *
+     * @return string HTTP protocol version.
+     */
+    public function getProtocolVersion();
+
+    /**
+     * Return an instance with the specified HTTP protocol version.
+     *
+     * The version string MUST contain only the HTTP version number (e.g.,
+     * "1.1", "1.0").
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * new protocol version.
+     *
+     * @param string $version HTTP protocol version
+     * @return self
+     */
+    public function withProtocolVersion($version);
+
+    /**
+     * Retrieves all message header values.
+     *
+     * The keys represent the header name as it will be sent over the wire, and
+     * each value is an array of strings associated with the header.
+     *
+     *     // Represent the headers as a string
+     *     foreach ($message->getHeaders() as $name => $values) {
+     *         echo $name . ": " . implode(", ", $values);
+     *     }
+     *
+     *     // Emit headers iteratively:
+     *     foreach ($message->getHeaders() as $name => $values) {
+     *         foreach ($values as $value) {
+     *             header(sprintf('%s: %s', $name, $value), false);
+     *         }
+     *     }
+     *
+     * While header names are not case-sensitive, getHeaders() will preserve the
+     * exact case in which headers were originally specified.
+     *
+     * @return array Returns an associative array of the message's headers. Each
+     *     key MUST be a header name, and each value MUST be an array of strings
+     *     for that header.
+     */
+    public function getHeaders();
+
+    /**
+     * Checks if a header exists by the given case-insensitive name.
+     *
+     * @param string $name Case-insensitive header field name.
+     * @return bool Returns true if any header names match the given header
+     *     name using a case-insensitive string comparison. Returns false if
+     *     no matching header name is found in the message.
+     */
+    public function hasHeader($name);
+
+    /**
+     * Retrieves a message header value by the given case-insensitive name.
+     *
+     * This method returns an array of all the header values of the given
+     * case-insensitive header name.
+     *
+     * If the header does not appear in the message, this method MUST return an
+     * empty array.
+     *
+     * @param string $name Case-insensitive header field name.
+     * @return string[] An array of string values as provided for the given
+     *    header. If the header does not appear in the message, this method MUST
+     *    return an empty array.
+     */
+    public function getHeader($name);
+
+    /**
+     * Retrieves a comma-separated string of the values for a single header.
+     *
+     * This method returns all of the header values of the given
+     * case-insensitive header name as a string concatenated together using
+     * a comma.
+     *
+     * NOTE: Not all header values may be appropriately represented using
+     * comma concatenation. For such headers, use getHeader() instead
+     * and supply your own delimiter when concatenating.
+     *
+     * If the header does not appear in the message, this method MUST return
+     * an empty string.
+     *
+     * @param string $name Case-insensitive header field name.
+     * @return string A string of values as provided for the given header
+     *    concatenated together using a comma. If the header does not appear in
+     *    the message, this method MUST return an empty string.
+     */
+    public function getHeaderLine($name);
+
+    /**
+     * Return an instance with the provided value replacing the specified header.
+     *
+     * While header names are case-insensitive, the casing of the header will
+     * be preserved by this function, and returned from getHeaders().
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * new and/or updated header and value.
+     *
+     * @param string $name Case-insensitive header field name.
+     * @param string|string[] $value Header value(s).
+     * @return self
+     * @throws \InvalidArgumentException for invalid header names or values.
+     */
+    public function withHeader($name, $value);
+
+    /**
+     * Return an instance with the specified header appended with the given value.
+     *
+     * Existing values for the specified header will be maintained. The new
+     * value(s) will be appended to the existing list. If the header did not
+     * exist previously, it will be added.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * new header and/or value.
+     *
+     * @param string $name Case-insensitive header field name to add.
+     * @param string|string[] $value Header value(s).
+     * @return self
+     * @throws \InvalidArgumentException for invalid header names or values.
+     */
+    public function withAddedHeader($name, $value);
+
+    /**
+     * Return an instance without the specified header.
+     *
+     * Header resolution MUST be done without case-sensitivity.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that removes
+     * the named header.
+     *
+     * @param string $name Case-insensitive header field name to remove.
+     * @return self
+     */
+    public function withoutHeader($name);
+
+    /**
+     * Gets the body of the message.
+     *
+     * @return StreamInterface Returns the body as a stream.
+     */
+    public function getBody();
+
+    /**
+     * Return an instance with the specified message body.
+     *
+     * The body MUST be a StreamInterface object.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return a new instance that has the
+     * new body stream.
+     *
+     * @param StreamInterface $body Body.
+     * @return self
+     * @throws \InvalidArgumentException When the body is not valid.
+     */
+    public function withBody(StreamInterface $body);
+}
diff --git a/core/vendor/psr/http-message/src/RequestInterface.php b/core/vendor/psr/http-message/src/RequestInterface.php
new file mode 100644
index 0000000..75c802e
--- /dev/null
+++ b/core/vendor/psr/http-message/src/RequestInterface.php
@@ -0,0 +1,129 @@
+<?php
+
+namespace Psr\Http\Message;
+
+/**
+ * Representation of an outgoing, client-side request.
+ *
+ * Per the HTTP specification, this interface includes properties for
+ * each of the following:
+ *
+ * - Protocol version
+ * - HTTP method
+ * - URI
+ * - Headers
+ * - Message body
+ *
+ * During construction, implementations MUST attempt to set the Host header from
+ * a provided URI if no Host header is provided.
+ *
+ * Requests are considered immutable; all methods that might change state MUST
+ * be implemented such that they retain the internal state of the current
+ * message and return an instance that contains the changed state.
+ */
+interface RequestInterface extends MessageInterface
+{
+    /**
+     * Retrieves the message's request target.
+     *
+     * Retrieves the message's request-target either as it will appear (for
+     * clients), as it appeared at request (for servers), or as it was
+     * specified for the instance (see withRequestTarget()).
+     *
+     * In most cases, this will be the origin-form of the composed URI,
+     * unless a value was provided to the concrete implementation (see
+     * withRequestTarget() below).
+     *
+     * If no URI is available, and no request-target has been specifically
+     * provided, this method MUST return the string "/".
+     *
+     * @return string
+     */
+    public function getRequestTarget();
+
+    /**
+     * Return an instance with the specific request-target.
+     *
+     * If the request needs a non-origin-form request-target â€” e.g., for
+     * specifying an absolute-form, authority-form, or asterisk-form â€”
+     * this method may be used to create an instance with the specified
+     * request-target, verbatim.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * changed request target.
+     *
+     * @link http://tools.ietf.org/html/rfc7230#section-2.7 (for the various
+     *     request-target forms allowed in request messages)
+     * @param mixed $requestTarget
+     * @return self
+     */
+    public function withRequestTarget($requestTarget);
+
+    /**
+     * Retrieves the HTTP method of the request.
+     *
+     * @return string Returns the request method.
+     */
+    public function getMethod();
+
+    /**
+     * Return an instance with the provided HTTP method.
+     *
+     * While HTTP method names are typically all uppercase characters, HTTP
+     * method names are case-sensitive and thus implementations SHOULD NOT
+     * modify the given string.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * changed request method.
+     *
+     * @param string $method Case-sensitive method.
+     * @return self
+     * @throws \InvalidArgumentException for invalid HTTP methods.
+     */
+    public function withMethod($method);
+
+    /**
+     * Retrieves the URI instance.
+     *
+     * This method MUST return a UriInterface instance.
+     *
+     * @link http://tools.ietf.org/html/rfc3986#section-4.3
+     * @return UriInterface Returns a UriInterface instance
+     *     representing the URI of the request.
+     */
+    public function getUri();
+
+    /**
+     * Returns an instance with the provided URI.
+     *
+     * This method MUST update the Host header of the returned request by
+     * default if the URI contains a host component. If the URI does not
+     * contain a host component, any pre-existing Host header MUST be carried
+     * over to the returned request.
+     *
+     * You can opt-in to preserving the original state of the Host header by
+     * setting `$preserveHost` to `true`. When `$preserveHost` is set to
+     * `true`, this method interacts with the Host header in the following ways:
+     *
+     * - If the the Host header is missing or empty, and the new URI contains
+     *   a host component, this method MUST update the Host header in the returned
+     *   request.
+     * - If the Host header is missing or empty, and the new URI does not contain a
+     *   host component, this method MUST NOT update the Host header in the returned
+     *   request.
+     * - If a Host header is present and non-empty, this method MUST NOT update
+     *   the Host header in the returned request.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * new UriInterface instance.
+     *
+     * @link http://tools.ietf.org/html/rfc3986#section-4.3
+     * @param UriInterface $uri New request URI to use.
+     * @param bool $preserveHost Preserve the original state of the Host header.
+     * @return self
+     */
+    public function withUri(UriInterface $uri, $preserveHost = false);
+}
diff --git a/core/vendor/psr/http-message/src/ResponseInterface.php b/core/vendor/psr/http-message/src/ResponseInterface.php
new file mode 100644
index 0000000..6724809
--- /dev/null
+++ b/core/vendor/psr/http-message/src/ResponseInterface.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Psr\Http\Message;
+
+/**
+ * Representation of an outgoing, server-side response.
+ *
+ * Per the HTTP specification, this interface includes properties for
+ * each of the following:
+ *
+ * - Protocol version
+ * - Status code and reason phrase
+ * - Headers
+ * - Message body
+ *
+ * Responses are considered immutable; all methods that might change state MUST
+ * be implemented such that they retain the internal state of the current
+ * message and return an instance that contains the changed state.
+ */
+interface ResponseInterface extends MessageInterface
+{
+    /**
+     * Gets the response status code.
+     *
+     * The status code is a 3-digit integer result code of the server's attempt
+     * to understand and satisfy the request.
+     *
+     * @return int Status code.
+     */
+    public function getStatusCode();
+
+    /**
+     * Return an instance with the specified status code and, optionally, reason phrase.
+     *
+     * If no reason phrase is specified, implementations MAY choose to default
+     * to the RFC 7231 or IANA recommended reason phrase for the response's
+     * status code.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * updated status and reason phrase.
+     *
+     * @link http://tools.ietf.org/html/rfc7231#section-6
+     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
+     * @param int $code The 3-digit integer result code to set.
+     * @param string $reasonPhrase The reason phrase to use with the
+     *     provided status code; if none is provided, implementations MAY
+     *     use the defaults as suggested in the HTTP specification.
+     * @return self
+     * @throws \InvalidArgumentException For invalid status code arguments.
+     */
+    public function withStatus($code, $reasonPhrase = '');
+
+    /**
+     * Gets the response reason phrase associated with the status code.
+     *
+     * Because a reason phrase is not a required element in a response
+     * status line, the reason phrase value MAY be null. Implementations MAY
+     * choose to return the default RFC 7231 recommended reason phrase (or those
+     * listed in the IANA HTTP Status Code Registry) for the response's
+     * status code.
+     *
+     * @link http://tools.ietf.org/html/rfc7231#section-6
+     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
+     * @return string Reason phrase; must return an empty string if none present.
+     */
+    public function getReasonPhrase();
+}
diff --git a/core/vendor/psr/http-message/src/ServerRequestInterface.php b/core/vendor/psr/http-message/src/ServerRequestInterface.php
new file mode 100644
index 0000000..916e065
--- /dev/null
+++ b/core/vendor/psr/http-message/src/ServerRequestInterface.php
@@ -0,0 +1,261 @@
+<?php
+
+namespace Psr\Http\Message;
+
+/**
+ * Representation of an incoming, server-side HTTP request.
+ *
+ * Per the HTTP specification, this interface includes properties for
+ * each of the following:
+ *
+ * - Protocol version
+ * - HTTP method
+ * - URI
+ * - Headers
+ * - Message body
+ *
+ * Additionally, it encapsulates all data as it has arrived to the
+ * application from the CGI and/or PHP environment, including:
+ *
+ * - The values represented in $_SERVER.
+ * - Any cookies provided (generally via $_COOKIE)
+ * - Query string arguments (generally via $_GET, or as parsed via parse_str())
+ * - Upload files, if any (as represented by $_FILES)
+ * - Deserialized body parameters (generally from $_POST)
+ *
+ * $_SERVER values MUST be treated as immutable, as they represent application
+ * state at the time of request; as such, no methods are provided to allow
+ * modification of those values. The other values provide such methods, as they
+ * can be restored from $_SERVER or the request body, and may need treatment
+ * during the application (e.g., body parameters may be deserialized based on
+ * content type).
+ *
+ * Additionally, this interface recognizes the utility of introspecting a
+ * request to derive and match additional parameters (e.g., via URI path
+ * matching, decrypting cookie values, deserializing non-form-encoded body
+ * content, matching authorization headers to users, etc). These parameters
+ * are stored in an "attributes" property.
+ *
+ * Requests are considered immutable; all methods that might change state MUST
+ * be implemented such that they retain the internal state of the current
+ * message and return an instance that contains the changed state.
+ */
+interface ServerRequestInterface extends RequestInterface
+{
+    /**
+     * Retrieve server parameters.
+     *
+     * Retrieves data related to the incoming request environment,
+     * typically derived from PHP's $_SERVER superglobal. The data IS NOT
+     * REQUIRED to originate from $_SERVER.
+     *
+     * @return array
+     */
+    public function getServerParams();
+
+    /**
+     * Retrieve cookies.
+     *
+     * Retrieves cookies sent by the client to the server.
+     *
+     * The data MUST be compatible with the structure of the $_COOKIE
+     * superglobal.
+     *
+     * @return array
+     */
+    public function getCookieParams();
+
+    /**
+     * Return an instance with the specified cookies.
+     *
+     * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST
+     * be compatible with the structure of $_COOKIE. Typically, this data will
+     * be injected at instantiation.
+     *
+     * This method MUST NOT update the related Cookie header of the request
+     * instance, nor related values in the server params.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * updated cookie values.
+     *
+     * @param array $cookies Array of key/value pairs representing cookies.
+     * @return self
+     */
+    public function withCookieParams(array $cookies);
+
+    /**
+     * Retrieve query string arguments.
+     *
+     * Retrieves the deserialized query string arguments, if any.
+     *
+     * Note: the query params might not be in sync with the URI or server
+     * params. If you need to ensure you are only getting the original
+     * values, you may need to parse the query string from `getUri()->getQuery()`
+     * or from the `QUERY_STRING` server param.
+     *
+     * @return array
+     */
+    public function getQueryParams();
+
+    /**
+     * Return an instance with the specified query string arguments.
+     *
+     * These values SHOULD remain immutable over the course of the incoming
+     * request. They MAY be injected during instantiation, such as from PHP's
+     * $_GET superglobal, or MAY be derived from some other value such as the
+     * URI. In cases where the arguments are parsed from the URI, the data
+     * MUST be compatible with what PHP's parse_str() would return for
+     * purposes of how duplicate query parameters are handled, and how nested
+     * sets are handled.
+     *
+     * Setting query string arguments MUST NOT change the URI stored by the
+     * request, nor the values in the server params.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * updated query string arguments.
+     *
+     * @param array $query Array of query string arguments, typically from
+     *     $_GET.
+     * @return self
+     */
+    public function withQueryParams(array $query);
+
+    /**
+     * Retrieve normalized file upload data.
+     *
+     * This method returns upload metadata in a normalized tree, with each leaf
+     * an instance of Psr\Http\Message\UploadedFileInterface.
+     *
+     * These values MAY be prepared from $_FILES or the message body during
+     * instantiation, or MAY be injected via withUploadedFiles().
+     *
+     * @return array An array tree of UploadedFileInterface instances; an empty
+     *     array MUST be returned if no data is present.
+     */
+    public function getUploadedFiles();
+
+    /**
+     * Create a new instance with the specified uploaded files.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * updated body parameters.
+     *
+     * @param array An array tree of UploadedFileInterface instances.
+     * @return self
+     * @throws \InvalidArgumentException if an invalid structure is provided.
+     */
+    public function withUploadedFiles(array $uploadedFiles);
+
+    /**
+     * Retrieve any parameters provided in the request body.
+     *
+     * If the request Content-Type is either application/x-www-form-urlencoded
+     * or multipart/form-data, and the request method is POST, this method MUST
+     * return the contents of $_POST.
+     *
+     * Otherwise, this method may return any results of deserializing
+     * the request body content; as parsing returns structured content, the
+     * potential types MUST be arrays or objects only. A null value indicates
+     * the absence of body content.
+     *
+     * @return null|array|object The deserialized body parameters, if any.
+     *     These will typically be an array or object.
+     */
+    public function getParsedBody();
+
+    /**
+     * Return an instance with the specified body parameters.
+     *
+     * These MAY be injected during instantiation.
+     *
+     * If the request Content-Type is either application/x-www-form-urlencoded
+     * or multipart/form-data, and the request method is POST, use this method
+     * ONLY to inject the contents of $_POST.
+     *
+     * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
+     * deserializing the request body content. Deserialization/parsing returns
+     * structured data, and, as such, this method ONLY accepts arrays or objects,
+     * or a null value if nothing was available to parse.
+     *
+     * As an example, if content negotiation determines that the request data
+     * is a JSON payload, this method could be used to create a request
+     * instance with the deserialized parameters.
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * updated body parameters.
+     *
+     * @param null|array|object $data The deserialized body data. This will
+     *     typically be in an array or object.
+     * @return self
+     * @throws \InvalidArgumentException if an unsupported argument type is
+     *     provided.
+     */
+    public function withParsedBody($data);
+
+    /**
+     * Retrieve attributes derived from the request.
+     *
+     * The request "attributes" may be used to allow injection of any
+     * parameters derived from the request: e.g., the results of path
+     * match operations; the results of decrypting cookies; the results of
+     * deserializing non-form-encoded message bodies; etc. Attributes
+     * will be application and request specific, and CAN be mutable.
+     *
+     * @return array Attributes derived from the request.
+     */
+    public function getAttributes();
+
+    /**
+     * Retrieve a single derived request attribute.
+     *
+     * Retrieves a single derived request attribute as described in
+     * getAttributes(). If the attribute has not been previously set, returns
+     * the default value as provided.
+     *
+     * This method obviates the need for a hasAttribute() method, as it allows
+     * specifying a default value to return if the attribute is not found.
+     *
+     * @see getAttributes()
+     * @param string $name The attribute name.
+     * @param mixed $default Default value to return if the attribute does not exist.
+     * @return mixed
+     */
+    public function getAttribute($name, $default = null);
+
+    /**
+     * Return an instance with the specified derived request attribute.
+     *
+     * This method allows setting a single derived request attribute as
+     * described in getAttributes().
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that has the
+     * updated attribute.
+     *
+     * @see getAttributes()
+     * @param string $name The attribute name.
+     * @param mixed $value The value of the attribute.
+     * @return self
+     */
+    public function withAttribute($name, $value);
+
+    /**
+     * Return an instance that removes the specified derived request attribute.
+     *
+     * This method allows removing a single derived request attribute as
+     * described in getAttributes().
+     *
+     * This method MUST be implemented in such a way as to retain the
+     * immutability of the message, and MUST return an instance that removes
+     * the attribute.
+     *
+     * @see getAttributes()
+     * @param string $name The attribute name.
+     * @return self
+     */
+    public function withoutAttribute($name);
+}
diff --git a/core/vendor/psr/http-message/src/StreamInterface.php b/core/vendor/psr/http-message/src/StreamInterface.php
new file mode 100644
index 0000000..f68f391
--- /dev/null
+++ b/core/vendor/psr/http-message/src/StreamInterface.php
@@ -0,0 +1,158 @@
+<?php
+
+namespace Psr\Http\Message;
+
+/**
+ * Describes a data stream.
+ *
+ * Typically, an instance will wrap a PHP stream; this interface provides
+ * a wrapper around the most common operations, including serialization of
+ * the entire stream to a string.
+ */
+interface StreamInterface
+{
+    /**
+     * Reads all data from the stream into a string, from the beginning to end.
+     *
+     * This method MUST attempt to seek to the beginning of the stream before
+     * reading data and read the stream until the end is reached.
+     *
+     * Warning: This could attempt to load a large amount of data into memory.
+     *
+     * This method MUST NOT raise an exception in order to conform with PHP's
+     * string casting operations.
+     *
+     * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring
+     * @return string
+     */
+    public function __toString();
+
+    /**
+     * Closes the stream and any underlying resources.
+     *
+     * @return void
+     */
+    public function close();
+
+    /**
+     * Separates any underlying resources from the stream.
+     *
+     * After the stream has been detached, the stream is in an unusable state.
+     *
+     * @return resource|null Underlying PHP stream, if any
+     */
+    public function detach();
+
+    /**
+     * Get the size of the stream if known.
+     *
+     * @return int|null Returns the size in bytes if known, or null if unknown.
+     */
+    public function getSize();
+
+    /**
+     * Returns the current position of the file read/write pointer
+     *
+     * @return int Position of the file pointer
+     * @throws \RuntimeException on error.
+     */
+    public function tell();
+
+    /**
+     * Returns true if the stream is at the end of the stream.
+     *
+     * @return bool
+     */
+    public function eof();
+
+    /**
+     * Returns whether or not the stream is seekable.
+     *
+     * @return bool
+     */
+    public function isSeekable();
+
+    /**
+     * Seek to a position in the stream.
+     *
+     * @link http://www.php.net/manual/en/function.fseek.php
+     * @param int $offset Stream offset
+     * @param int $whence Specifies how the cursor position will be calculated
+     *     based on the seek offset. Valid values are identical to the built-in
+     *     PHP $whence values for `fseek()`.  SEEK_SET: Set position equal to
+     *     offset bytes SEEK_CUR: Set position to current location plus offset
+     *     SEEK_END: Set position to end-of-stream plus offset.
+     * @throws \RuntimeException on failure.
+     */
+    public function seek($offset, $whence = SEEK_SET);
+
+    /**
+     * Seek to the beginning of the stream.
+     *
+     * If the stream is not seekable, this method will raise an exception;
+     * otherwise, it will perform a seek(0).
+     *
+     * @see seek()
+     * @link http://www.php.net/manual/en/function.fseek.php
+     * @throws \RuntimeException on failure.
+     */
+    public function rewind();
+
+    /**
+     * Returns whether or not the stream is writable.
+     *
+     * @return bool
+     */
+    public function isWritable();
+
+    /**
+     * Write data to the stream.
+     *
+     * @param string $string The string that is to be written.
+     * @return int Returns the number of bytes written to the stream.
+     * @throws \RuntimeException on failure.
+     */
+    public function write($string);
+
+    /**
+     * Returns whether or not the stream is readable.
+     *
+     * @return bool
+     */
+    public function isReadable();
+
+    /**
+     * Read data from the stream.
+     *
+     * @param int $length Read up to $length bytes from the object and return
+     *     them. Fewer than $length bytes may be returned if underlying stream
+     *     call returns fewer bytes.
+     * @return string Returns the data read from the stream, or an empty string
+     *     if no bytes are available.
+     * @throws \RuntimeException if an error occurs.
+     */
+    public function read($length);
+
+    /**
+     * Returns the remaining contents in a string
+     *
+     * @return string
+     * @throws \RuntimeException if unable to read or an error occurs while
+     *     reading.
+     */
+    public function getContents();
+
+    /**
+     * Get stream metadata as an associative array or retrieve a specific key.
+     *
+     * The keys returned are identical to the keys returned from PHP's
+     * stream_get_meta_data() function.
+     *
+     * @link http://php.net/manual/en/function.stream-get-meta-data.php
+     * @param string $key Specific metadata to retrieve.
+     * @return array|mixed|null Returns an associative array if no key is
+     *     provided. Returns a specific key value if a key is provided and the
+     *     value is found, or null if the key is not found.
+     */
+    public function getMetadata($key = null);
+}
diff --git a/core/vendor/psr/http-message/src/UploadedFileInterface.php b/core/vendor/psr/http-message/src/UploadedFileInterface.php
new file mode 100644
index 0000000..5ad288d
--- /dev/null
+++ b/core/vendor/psr/http-message/src/UploadedFileInterface.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace Psr\Http\Message;
+
+/**
+ * Value object representing a file uploaded through an HTTP request.
+ *
+ * Instances of this interface are considered immutable; all methods that
+ * might change state MUST be implemented such that they retain the internal
+ * state of the current instance and return an instance that contains the
+ * changed state.
+ */
+interface UploadedFileInterface
+{
+    /**
+     * Retrieve a stream representing the uploaded file.
+     *
+     * This method MUST return a StreamInterface instance, representing the
+     * uploaded file. The purpose of this method is to allow utilizing native PHP
+     * stream functionality to manipulate the file upload, such as
+     * stream_copy_to_stream() (though the result will need to be decorated in a
+     * native PHP stream wrapper to work with such functions).
+     *
+     * If the moveTo() method has been called previously, this method MUST raise
+     * an exception.
+     *
+     * @return StreamInterface Stream representation of the uploaded file.
+     * @throws \RuntimeException in cases when no stream is available or can be
+     *     created.
+     */
+    public function getStream();
+
+    /**
+     * Move the uploaded file to a new location.
+     *
+     * Use this method as an alternative to move_uploaded_file(). This method is
+     * guaranteed to work in both SAPI and non-SAPI environments.
+     * Implementations must determine which environment they are in, and use the
+     * appropriate method (move_uploaded_file(), rename(), or a stream
+     * operation) to perform the operation.
+     *
+     * $targetPath may be an absolute path, or a relative path. If it is a
+     * relative path, resolution should be the same as used by PHP's rename()
+     * function.
+     *
+     * The original file or stream MUST be removed on completion.
+     *
+     * If this method is called more than once, any subsequent calls MUST raise
+     * an exception.
+     *
+     * When used in an SAPI environment where $_FILES is populated, when writing
+     * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be
+     * used to ensure permissions and upload status are verified correctly.
+     *
+     * If you wish to move to a stream, use getStream(), as SAPI operations
+     * cannot guarantee writing to stream destinations.
+     *
+     * @see http://php.net/is_uploaded_file
+     * @see http://php.net/move_uploaded_file
+     * @param string $targetPath Path to which to move the uploaded file.
+     * @throws \InvalidArgumentException if the $path specified is invalid.
+     * @throws \RuntimeException on any error during the move operation, or on
+     *     the second or subsequent call to the method.
+     */
+    public function moveTo($targetPath);
+    
+    /**
+     * Retrieve the file size.
+     *
+     * Implementations SHOULD return the value stored in the "size" key of
+     * the file in the $_FILES array if available, as PHP calculates this based
+     * on the actual size transmitted.
+     *
+     * @return int|null The file size in bytes or null if unknown.
+     */
+    public function getSize();
+    
+    /**
+     * Retrieve the error associated with the uploaded file.
+     *
+     * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.
+     *
+     * If the file was uploaded successfully, this method MUST return
+     * UPLOAD_ERR_OK.
+     *
+     * Implementations SHOULD return the value stored in the "error" key of
+     * the file in the $_FILES array.
+     *
+     * @see http://php.net/manual/en/features.file-upload.errors.php
+     * @return int One of PHP's UPLOAD_ERR_XXX constants.
+     */
+    public function getError();
+    
+    /**
+     * Retrieve the filename sent by the client.
+     *
+     * Do not trust the value returned by this method. A client could send
+     * a malicious filename with the intention to corrupt or hack your
+     * application.
+     *
+     * Implementations SHOULD return the value stored in the "name" key of
+     * the file in the $_FILES array.
+     *
+     * @return string|null The filename sent by the client or null if none
+     *     was provided.
+     */
+    public function getClientFilename();
+    
+    /**
+     * Retrieve the media type sent by the client.
+     *
+     * Do not trust the value returned by this method. A client could send
+     * a malicious media type with the intention to corrupt or hack your
+     * application.
+     *
+     * Implementations SHOULD return the value stored in the "type" key of
+     * the file in the $_FILES array.
+     *
+     * @return string|null The media type sent by the client or null if none
+     *     was provided.
+     */
+    public function getClientMediaType();
+}
diff --git a/core/vendor/psr/http-message/src/UriInterface.php b/core/vendor/psr/http-message/src/UriInterface.php
new file mode 100644
index 0000000..1ff5bf0
--- /dev/null
+++ b/core/vendor/psr/http-message/src/UriInterface.php
@@ -0,0 +1,323 @@
+<?php
+namespace Psr\Http\Message;
+
+/**
+ * Value object representing a URI.
+ *
+ * This interface is meant to represent URIs according to RFC 3986 and to
+ * provide methods for most common operations. Additional functionality for
+ * working with URIs can be provided on top of the interface or externally.
+ * Its primary use is for HTTP requests, but may also be used in other
+ * contexts.
+ *
+ * Instances of this interface are considered immutable; all methods that
+ * might change state MUST be implemented such that they retain the internal
+ * state of the current instance and return an instance that contains the
+ * changed state.
+ *
+ * Typically the Host header will be also be present in the request message.
+ * For server-side requests, the scheme will typically be discoverable in the
+ * server parameters.
+ *
+ * @link http://tools.ietf.org/html/rfc3986 (the URI specification)
+ */
+interface UriInterface
+{
+    /**
+     * Retrieve the scheme component of the URI.
+     *
+     * If no scheme is present, this method MUST return an empty string.
+     *
+     * The value returned MUST be normalized to lowercase, per RFC 3986
+     * Section 3.1.
+     *
+     * The trailing ":" character is not part of the scheme and MUST NOT be
+     * added.
+     *
+     * @see https://tools.ietf.org/html/rfc3986#section-3.1
+     * @return string The URI scheme.
+     */
+    public function getScheme();
+
+    /**
+     * Retrieve the authority component of the URI.
+     *
+     * If no authority information is present, this method MUST return an empty
+     * string.
+     *
+     * The authority syntax of the URI is:
+     *
+     * <pre>
+     * [user-info@]host[:port]
+     * </pre>
+     *
+     * If the port component is not set or is the standard port for the current
+     * scheme, it SHOULD NOT be included.
+     *
+     * @see https://tools.ietf.org/html/rfc3986#section-3.2
+     * @return string The URI authority, in "[user-info@]host[:port]" format.
+     */
+    public function getAuthority();
+
+    /**
+     * Retrieve the user information component of the URI.
+     *
+     * If no user information is present, this method MUST return an empty
+     * string.
+     *
+     * If a user is present in the URI, this will return that value;
+     * additionally, if the password is also present, it will be appended to the
+     * user value, with a colon (":") separating the values.
+     *
+     * The trailing "@" character is not part of the user information and MUST
+     * NOT be added.
+     *
+     * @return string The URI user information, in "username[:password]" format.
+     */
+    public function getUserInfo();
+
+    /**
+     * Retrieve the host component of the URI.
+     *
+     * If no host is present, this method MUST return an empty string.
+     *
+     * The value returned MUST be normalized to lowercase, per RFC 3986
+     * Section 3.2.2.
+     *
+     * @see http://tools.ietf.org/html/rfc3986#section-3.2.2
+     * @return string The URI host.
+     */
+    public function getHost();
+
+    /**
+     * Retrieve the port component of the URI.
+     *
+     * If a port is present, and it is non-standard for the current scheme,
+     * this method MUST return it as an integer. If the port is the standard port
+     * used with the current scheme, this method SHOULD return null.
+     *
+     * If no port is present, and no scheme is present, this method MUST return
+     * a null value.
+     *
+     * If no port is present, but a scheme is present, this method MAY return
+     * the standard port for that scheme, but SHOULD return null.
+     *
+     * @return null|int The URI port.
+     */
+    public function getPort();
+
+    /**
+     * Retrieve the path component of the URI.
+     *
+     * The path can either be empty or absolute (starting with a slash) or
+     * rootless (not starting with a slash). Implementations MUST support all
+     * three syntaxes.
+     *
+     * Normally, the empty path "" and absolute path "/" are considered equal as
+     * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically
+     * do this normalization because in contexts with a trimmed base path, e.g.
+     * the front controller, this difference becomes significant. It's the task
+     * of the user to handle both "" and "/".
+     *
+     * The value returned MUST be percent-encoded, but MUST NOT double-encode
+     * any characters. To determine what characters to encode, please refer to
+     * RFC 3986, Sections 2 and 3.3.
+     *
+     * As an example, if the value should include a slash ("/") not intended as
+     * delimiter between path segments, that value MUST be passed in encoded
+     * form (e.g., "%2F") to the instance.
+     *
+     * @see https://tools.ietf.org/html/rfc3986#section-2
+     * @see https://tools.ietf.org/html/rfc3986#section-3.3
+     * @return string The URI path.
+     */
+    public function getPath();
+
+    /**
+     * Retrieve the query string of the URI.
+     *
+     * If no query string is present, this method MUST return an empty string.
+     *
+     * The leading "?" character is not part of the query and MUST NOT be
+     * added.
+     *
+     * The value returned MUST be percent-encoded, but MUST NOT double-encode
+     * any characters. To determine what characters to encode, please refer to
+     * RFC 3986, Sections 2 and 3.4.
+     *
+     * As an example, if a value in a key/value pair of the query string should
+     * include an ampersand ("&") not intended as a delimiter between values,
+     * that value MUST be passed in encoded form (e.g., "%26") to the instance.
+     *
+     * @see https://tools.ietf.org/html/rfc3986#section-2
+     * @see https://tools.ietf.org/html/rfc3986#section-3.4
+     * @return string The URI query string.
+     */
+    public function getQuery();
+
+    /**
+     * Retrieve the fragment component of the URI.
+     *
+     * If no fragment is present, this method MUST return an empty string.
+     *
+     * The leading "#" character is not part of the fragment and MUST NOT be
+     * added.
+     *
+     * The value returned MUST be percent-encoded, but MUST NOT double-encode
+     * any characters. To determine what characters to encode, please refer to
+     * RFC 3986, Sections 2 and 3.5.
+     *
+     * @see https://tools.ietf.org/html/rfc3986#section-2
+     * @see https://tools.ietf.org/html/rfc3986#section-3.5
+     * @return string The URI fragment.
+     */
+    public function getFragment();
+
+    /**
+     * Return an instance with the specified scheme.
+     *
+     * This method MUST retain the state of the current instance, and return
+     * an instance that contains the specified scheme.
+     *
+     * Implementations MUST support the schemes "http" and "https" case
+     * insensitively, and MAY accommodate other schemes if required.
+     *
+     * An empty scheme is equivalent to removing the scheme.
+     *
+     * @param string $scheme The scheme to use with the new instance.
+     * @return self A new instance with the specified scheme.
+     * @throws \InvalidArgumentException for invalid or unsupported schemes.
+     */
+    public function withScheme($scheme);
+
+    /**
+     * Return an instance with the specified user information.
+     *
+     * This method MUST retain the state of the current instance, and return
+     * an instance that contains the specified user information.
+     *
+     * Password is optional, but the user information MUST include the
+     * user; an empty string for the user is equivalent to removing user
+     * information.
+     *
+     * @param string $user The user name to use for authority.
+     * @param null|string $password The password associated with $user.
+     * @return self A new instance with the specified user information.
+     */
+    public function withUserInfo($user, $password = null);
+
+    /**
+     * Return an instance with the specified host.
+     *
+     * This method MUST retain the state of the current instance, and return
+     * an instance that contains the specified host.
+     *
+     * An empty host value is equivalent to removing the host.
+     *
+     * @param string $host The hostname to use with the new instance.
+     * @return self A new instance with the specified host.
+     * @throws \InvalidArgumentException for invalid hostnames.
+     */
+    public function withHost($host);
+
+    /**
+     * Return an instance with the specified port.
+     *
+     * This method MUST retain the state of the current instance, and return
+     * an instance that contains the specified port.
+     *
+     * Implementations MUST raise an exception for ports outside the
+     * established TCP and UDP port ranges.
+     *
+     * A null value provided for the port is equivalent to removing the port
+     * information.
+     *
+     * @param null|int $port The port to use with the new instance; a null value
+     *     removes the port information.
+     * @return self A new instance with the specified port.
+     * @throws \InvalidArgumentException for invalid ports.
+     */
+    public function withPort($port);
+
+    /**
+     * Return an instance with the specified path.
+     *
+     * This method MUST retain the state of the current instance, and return
+     * an instance that contains the specified path.
+     *
+     * The path can either be empty or absolute (starting with a slash) or
+     * rootless (not starting with a slash). Implementations MUST support all
+     * three syntaxes.
+     *
+     * If the path is intended to be domain-relative rather than path relative then
+     * it must begin with a slash ("/"). Paths not starting with a slash ("/")
+     * are assumed to be relative to some base path known to the application or
+     * consumer.
+     *
+     * Users can provide both encoded and decoded path characters.
+     * Implementations ensure the correct encoding as outlined in getPath().
+     *
+     * @param string $path The path to use with the new instance.
+     * @return self A new instance with the specified path.
+     * @throws \InvalidArgumentException for invalid paths.
+     */
+    public function withPath($path);
+
+    /**
+     * Return an instance with the specified query string.
+     *
+     * This method MUST retain the state of the current instance, and return
+     * an instance that contains the specified query string.
+     *
+     * Users can provide both encoded and decoded query characters.
+     * Implementations ensure the correct encoding as outlined in getQuery().
+     *
+     * An empty query string value is equivalent to removing the query string.
+     *
+     * @param string $query The query string to use with the new instance.
+     * @return self A new instance with the specified query string.
+     * @throws \InvalidArgumentException for invalid query strings.
+     */
+    public function withQuery($query);
+
+    /**
+     * Return an instance with the specified URI fragment.
+     *
+     * This method MUST retain the state of the current instance, and return
+     * an instance that contains the specified URI fragment.
+     *
+     * Users can provide both encoded and decoded fragment characters.
+     * Implementations ensure the correct encoding as outlined in getFragment().
+     *
+     * An empty fragment value is equivalent to removing the fragment.
+     *
+     * @param string $fragment The fragment to use with the new instance.
+     * @return self A new instance with the specified fragment.
+     */
+    public function withFragment($fragment);
+
+    /**
+     * Return the string representation as a URI reference.
+     *
+     * Depending on which components of the URI are present, the resulting
+     * string is either a full URI or relative reference according to RFC 3986,
+     * Section 4.1. The method concatenates the various components of the URI,
+     * using the appropriate delimiters:
+     *
+     * - If a scheme is present, it MUST be suffixed by ":".
+     * - If an authority is present, it MUST be prefixed by "//".
+     * - The path can be concatenated without delimiters. But there are two
+     *   cases where the path has to be adjusted to make the URI reference
+     *   valid as PHP does not allow to throw an exception in __toString():
+     *     - If the path is rootless and an authority is present, the path MUST
+     *       be prefixed by "/".
+     *     - If the path is starting with more than one "/" and no authority is
+     *       present, the starting slashes MUST be reduced to one.
+     * - If a query is present, it MUST be prefixed by "?".
+     * - If a fragment is present, it MUST be prefixed by "#".
+     *
+     * @see http://tools.ietf.org/html/rfc3986#section-4.1
+     * @return string
+     */
+    public function __toString();
+}
