diff --git a/composer.json b/composer.json
index dfdad5d..898c5bc 100644
--- a/composer.json
+++ b/composer.json
@@ -19,7 +19,7 @@
     "twig/twig": "1.15.*",
     "doctrine/common": "dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5",
     "doctrine/annotations": "1.2.*",
-    "guzzlehttp/guzzle": "4.1.*",
+    "guzzlehttp/guzzle": "dev-ring",
     "kriswallsmith/assetic": "1.1.*@alpha",
     "symfony-cmf/routing": "1.2.*",
     "easyrdf/easyrdf": "0.8.*",
@@ -30,6 +30,7 @@
     "stack/builder": "1.0.*",
     "egulias/email-validator": "1.2.*"
   },
+  "minimum-stability": "dev",
   "autoload": {
     "psr-4": {
       "Drupal\\Core\\": "core/lib/Drupal/Core",
diff --git a/composer.lock b/composer.lock
index a14fe82..2c7a18c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "5dca82e6d2f23a408795c33590f41c8d",
+    "hash": "2c1280939f40d57c3a564a52bf8f53c4",
     "packages": [
         {
             "name": "doctrine/annotations",
@@ -510,21 +510,21 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "4.1.7",
+            "version": "dev-ring",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "448f2c2076cf0fb756230611491c4f7ecb735a29"
+                "reference": "bc73eb7b30407a941533a20251203520f8be7d33"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/448f2c2076cf0fb756230611491c4f7ecb735a29",
-                "reference": "448f2c2076cf0fb756230611491c4f7ecb735a29",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/bc73eb7b30407a941533a20251203520f8be7d33",
+                "reference": "bc73eb7b30407a941533a20251203520f8be7d33",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "guzzlehttp/streams": "~1.4",
+                "guzzlehttp/ring": "0.1.*@dev",
+                "guzzlehttp/streams": "~3.0@dev",
                 "php": ">=5.4.0"
             },
             "require-dev": {
@@ -538,7 +538,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-ring": "5.0-dev"
                 }
             },
             "autoload": {
@@ -571,20 +571,66 @@
                 "rest",
                 "web service"
             ],
-            "time": "2014-08-08 01:30:43"
+            "time": "2014-10-02 17:50:23"
+        },
+        {
+            "name": "guzzlehttp/ring",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle-ring.git",
+                "reference": "5049a73c56cb5fee94327c77a105fecd5a43587a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle-ring/zipball/5049a73c56cb5fee94327c77a105fecd5a43587a",
+                "reference": "5049a73c56cb5fee94327c77a105fecd5a43587a",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/streams": "3.0.*@dev",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.1-dev"
+                }
+            },
+            "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"
+                }
+            ],
+            "time": "2014-09-30 06:32:45"
         },
         {
             "name": "guzzlehttp/streams",
-            "version": "1.5.1",
+            "version": "3.0.x-dev",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/streams.git",
-                "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f"
+                "reference": "658922419deccf09453f72e49f7121989d6b742e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/streams/zipball/fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
-                "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
+                "url": "https://api.github.com/repos/guzzle/streams/zipball/658922419deccf09453f72e49f7121989d6b742e",
+                "reference": "658922419deccf09453f72e49f7121989d6b742e",
                 "shasum": ""
             },
             "require": {
@@ -596,7 +642,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "3.0-dev"
                 }
             },
             "autoload": {
@@ -624,7 +670,7 @@
                 "Guzzle",
                 "stream"
             ],
-            "time": "2014-08-10 23:57:01"
+            "time": "2014-10-01 16:11:32"
         },
         {
             "name": "kriswallsmith/assetic",
@@ -2485,9 +2531,10 @@
     ],
     "packages-dev": [],
     "aliases": [],
-    "minimum-stability": "stable",
+    "minimum-stability": "dev",
     "stability-flags": {
         "doctrine/common": 20,
+        "guzzlehttp/guzzle": 20,
         "kriswallsmith/assetic": 15,
         "phpunit/phpunit-mock-objects": 20
     },
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index d10ce95..2ecb574 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1493,6 +1493,7 @@ function template_preprocess_feed_icon(&$variables) {
     '#height' => 16,
     '#alt' => $text,
   );
+  $variables['attributes']['class'] = array('feed-icon');
   // Stripping tags because that's what l() used to do.
   $variables['attributes']['title'] = strip_tags($text);
 }
diff --git a/core/modules/system/templates/feed-icon.html.twig b/core/modules/system/templates/feed-icon.html.twig
index b3c10d1..a9e0f03 100644
--- a/core/modules/system/templates/feed-icon.html.twig
+++ b/core/modules/system/templates/feed-icon.html.twig
@@ -15,4 +15,4 @@
  * @ingroup themeable
  */
 #}
-<a href="{{ url }}"{{ attributes.addClass('feed-icon') }}>{{ icon }}</a>
+<a href="{{ url }}"{{ attributes }}>{{ icon }}</a>
diff --git a/core/modules/system/templates/status-messages.html.twig b/core/modules/system/templates/status-messages.html.twig
index f3fa61b..505eb20 100644
--- a/core/modules/system/templates/status-messages.html.twig
+++ b/core/modules/system/templates/status-messages.html.twig
@@ -24,13 +24,7 @@
  */
 #}
 {% for type, messages in message_list %}
-  {%
-    set classes = [
-      'messages',
-      'messages--' ~ type,
-    ]
-  %}
-  <div class="{{ attributes.addClass(classes).class }}" role="contentinfo" aria-label="{{ status_headings[type] }}">
+  <div class="messages messages--{{ type }}" role="contentinfo" aria-label="{{ status_headings[type] }}">
     {% if type == 'error' %}
       <div role="alert">
     {% endif %}
diff --git a/core/modules/update/src/UpdateFetcher.php b/core/modules/update/src/UpdateFetcher.php
index 14bdb29..5f22265 100644
--- a/core/modules/update/src/UpdateFetcher.php
+++ b/core/modules/update/src/UpdateFetcher.php
@@ -8,6 +8,7 @@
 namespace Drupal\update;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use GuzzleHttp\ClientInterface;
 use GuzzleHttp\Exception\RequestException;
 
@@ -16,6 +17,8 @@
  */
 class UpdateFetcher implements UpdateFetcherInterface {
 
+  use DependencySerializationTrait;
+
   /**
    * URL to check for updates, if a given project doesn't define its own.
    */
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index f832317..149f02a 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -7,6 +7,7 @@
 
 return array(
     'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
+    'GuzzleHttp\\Ring\\' => array($vendorDir . '/guzzlehttp/ring/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
     'Drupal\\Driver\\' => array($baseDir . '/drivers/lib/Drupal/Driver'),
     'Drupal\\Core\\' => array($baseDir . '/core/lib/Drupal/Core'),
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index 63b28ad..44c4bba 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -1450,128 +1450,6 @@
         "homepage": "http://vfs.bovigo.org/"
     },
     {
-        "name": "guzzlehttp/streams",
-        "version": "1.5.1",
-        "version_normalized": "1.5.1.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/streams.git",
-            "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/streams/zipball/fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
-            "reference": "fb0d1ee29987c2bdc59867bffaade6fc88c2675f",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "~4.0"
-        },
-        "time": "2014-08-10 23:57:01",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.5-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "GuzzleHttp\\Stream\\": "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": "Provides a simple abstraction over streams of data (Guzzle 4+)",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "Guzzle",
-            "stream"
-        ]
-    },
-    {
-        "name": "guzzlehttp/guzzle",
-        "version": "4.1.7",
-        "version_normalized": "4.1.7.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/guzzle.git",
-            "reference": "448f2c2076cf0fb756230611491c4f7ecb735a29"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/448f2c2076cf0fb756230611491c4f7ecb735a29",
-            "reference": "448f2c2076cf0fb756230611491c4f7ecb735a29",
-            "shasum": ""
-        },
-        "require": {
-            "ext-json": "*",
-            "guzzlehttp/streams": "~1.4",
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "ext-curl": "*",
-            "phpunit/phpunit": "~4.0",
-            "psr/log": "~1.0"
-        },
-        "suggest": {
-            "ext-curl": "Guzzle will use specific adapters if cURL is present"
-        },
-        "time": "2014-08-08 01:30:43",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "4.1-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "GuzzleHttp\\": "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 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": "symfony-cmf/routing",
         "version": "1.2.0",
         "version_normalized": "1.2.0.0",
@@ -2564,5 +2442,175 @@
         ],
         "description": "Symfony Process Component",
         "homepage": "http://symfony.com"
+    },
+    {
+        "name": "guzzlehttp/streams",
+        "version": "3.0.x-dev",
+        "version_normalized": "3.0.9999999.9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/streams.git",
+            "reference": "658922419deccf09453f72e49f7121989d6b742e"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/streams/zipball/658922419deccf09453f72e49f7121989d6b742e",
+            "reference": "658922419deccf09453f72e49f7121989d6b742e",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
+        },
+        "time": "2014-10-01 16:11:32",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "3.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Stream\\": "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": "Provides a simple abstraction over streams of data (Guzzle 4+)",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "Guzzle",
+            "stream"
+        ]
+    },
+    {
+        "name": "guzzlehttp/ring",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/guzzle-ring.git",
+            "reference": "5049a73c56cb5fee94327c77a105fecd5a43587a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/guzzle-ring/zipball/5049a73c56cb5fee94327c77a105fecd5a43587a",
+            "reference": "5049a73c56cb5fee94327c77a105fecd5a43587a",
+            "shasum": ""
+        },
+        "require": {
+            "guzzlehttp/streams": "3.0.*@dev",
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "~4.0"
+        },
+        "time": "2014-09-30 06:32:45",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "0.1-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"
+            }
+        ]
+    },
+    {
+        "name": "guzzlehttp/guzzle",
+        "version": "dev-ring",
+        "version_normalized": "dev-ring",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/guzzle.git",
+            "reference": "bc73eb7b30407a941533a20251203520f8be7d33"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/bc73eb7b30407a941533a20251203520f8be7d33",
+            "reference": "bc73eb7b30407a941533a20251203520f8be7d33",
+            "shasum": ""
+        },
+        "require": {
+            "guzzlehttp/ring": "0.1.*@dev",
+            "guzzlehttp/streams": "~3.0@dev",
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "~4.0",
+            "psr/log": "~1.0"
+        },
+        "suggest": {
+            "ext-curl": "Guzzle will use specific adapters if cURL is present"
+        },
+        "time": "2014-10-02 17:50:23",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-ring": "5.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\": "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 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"
+        ]
     }
 ]
diff --git a/core/vendor/guzzlehttp/guzzle/.gitignore b/core/vendor/guzzlehttp/guzzle/.gitignore
index f344b89..83ec41e 100644
--- a/core/vendor/guzzlehttp/guzzle/.gitignore
+++ b/core/vendor/guzzlehttp/guzzle/.gitignore
@@ -3,7 +3,7 @@ composer.phar
 composer.lock
 composer-test.lock
 vendor/
-build/
+build/artifacts/
 artifacts/
 docs/_build
 docs/*.pyc
diff --git a/core/vendor/guzzlehttp/guzzle/.travis.yml b/core/vendor/guzzlehttp/guzzle/.travis.yml
index 65f2d69..77bcf4a 100644
--- a/core/vendor/guzzlehttp/guzzle/.travis.yml
+++ b/core/vendor/guzzlehttp/guzzle/.travis.yml
@@ -21,3 +21,19 @@ matrix:
   allow_failures:
     - php: hhvm
   fast_finish: true
+
+before_deploy:
+  - make package
+
+deploy:
+  provider: releases
+  api_key:
+    secure: UpypqlYgsU68QT/x40YzhHXvzWjFwCNo9d+G8KAdm7U9+blFfcWhV1aMdzugvPMl6woXgvJj7qHq5tAL4v6oswCORhpSBfLgOQVFaica5LiHsvWlAedOhxGmnJqMTwuepjBCxXhs3+I8Kof1n4oUL9gKytXjOVCX/f7XU1HiinU=
+  file:
+    - build/artifacts/guzzle.phar
+    - build/artifacts/guzzle.zip
+  on:
+    repo: guzzle/guzzle
+    tags: true
+    all_branches: true
+    php: 5.4
diff --git a/core/vendor/guzzlehttp/guzzle/CHANGELOG.md b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
index 9f641ca..8c610c5 100644
--- a/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
+++ b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md
@@ -1,6 +1,142 @@
 CHANGELOG
 =========
 
+5.0.0 (TBD)
+-----------
+
+Adding support for non-blocking futures and some minor API cleanup.
+
+### New Features
+
+* Added support for non-blocking Future responses based on
+  `guzzlehttp/guzzle-ring`. Note that you can still use the Guzzle 4
+  `sendAll()` and `batch()` functions in exactly the same way.
+* You can now create a default adapter based on the environment using a public
+  API.
+* Updated the redirect plugin to be non-blocking so that redirects are sent in
+  parallel. Other plugins like this can now be updated to be non-blocking.
+* Added a "progress" event so that you can get upload or download progress
+  events.
+* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers
+  requests concurrently using a capped pool size as efficiently as possible.
+* Added `hasListeners()` to EmitterInterface.
+
+### Deprecations
+
+* Removed `GuzzleHttp\ClientInterface::sendAll` and marked
+  `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the
+  recommended way).
+* Marked "functions.php" as deprecated, so that Guzzle is truly PSR-4 compliant.
+  functions.php is still available and autoloaded, but it is now deprecated.
+  These functions are now implemented in `GuzzleHttp\Utils` using camelCase.
+  `GuzzleHttp\json_decode` moved to `GuzzleHttp\Utils::jsonDecode`.
+  `GuzzleHttp\get_path` moved to `GuzzleHttp\Utils::getPath`.
+  `GuzzleHttp\set_path` moved to `GuzzleHttp\Utils::setPath`.
+  `GuzzleHttp\batch` should now be `GuzzleHttp\Pool::batch`, which returns a
+  `BatchResults` object instead of an `SplObjectStorage`. Using functions.php
+  caused problems for many users: they aren't PSR-4 compliant, require an
+  explicit include, and needed an if-guard to ensure that the functions are not
+  declared multiple times.
+
+### Breaking changes
+
+The breaking changes in this release are relatively minor. The biggest thing to
+look out for is that request and response objects no longer implement fluent
+interfaces.
+
+* Removed the fluent interfaces (i.e., ``return $this``) from requests,
+  responses, ``GuzzleHttp\Collection``, ``GuzzleHttp\Url``,
+  ``GuzzleHttp\Query``, ``GuzzleHttp\Post\PostBody``, and
+  ``GuzzleHttp\Cookie\SetCookie``. This blog post provides a good outline of
+   why I did this: http://ocramius.github.io/blog/fluent-interfaces-are-evil/.
+   This also makes the Guzzle message interfaces compatible with the current
+   PSR-7 message proposal.
+* Breaking changes to the adapter layer
+    * Removing all classes from `GuzzleHttp\Adapter`, these are now
+      implemented as callables that are stored in `GuzzleHttp\Ring\Client`.
+    * Removed the concept of "parallel adapters". If you want an adapter to
+      send requests in parallel, then have the adapter return
+      ``GuzzleHttp\Ring\Future`` objects that allow futures to be fulfilled in
+      parallel when one of the future objects are dereferenced.
+    * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The
+      Transaction object now exposes the request, response, and client as public
+      properties. The getters and setters have been removed.
+* Removed the "headers" event. This event was only useful for changing the
+  body a response once the headers of the response were known. You can implement
+  a similar behavior in a number of ways. One example might be to use a
+  FnStream that has access to the transaction being sent. For example, when the
+  first byte is written, you could check if the response headers match your
+  expectations, and if so, change the actual stream body that is being
+  written to.
+* Removed the `asArray` parameter from
+  `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
+  value as an array, then use the newly added ``getHeaderAsArray()`` method of
+  ``MessageInterface``. This change makes the Guzzle interfaces compatible with
+  the PSR-7 interfaces.
+* ``GuzzleHttp\Message\MessageFactory`` no longer allows subclasses to add
+  custom request options using double-dispatch (this was an implementation
+  detail). Instead, you should now provide an associative array to the
+  constructor which is a mapping of the request option name mapping to a
+  function that applies the option value to a request.
+* Removed the concept of "throwImmediately" from exceptions and error events.
+  This control mechanism was used to stop a transfer of parallel requests from
+  completing. This can now be handled by throwing the exception or by
+  cancelling a pool of requests or each outstanding future request individually.
+* Updated to "GuzzleHttp\Streams" 3.0.
+    * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a
+      `maxLen` parameter. This update makes the Guzzle streams project
+      compatible with the current PSR-7 proposal.
+    * ``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.
+
+4.2.2 (2014-09-08)
+------------------
+
+* Fixed a memory leak in the CurlAdapter when reusing cURL handles.
+* No longer using `request_fulluri` in stream adapter proxies.
+* Relative redirects are now based on the last response, not the first response.
+
+4.2.1 (2014-08-19)
+------------------
+
+* Ensuring that the StreamAdapter does not always add a Content-Type header
+* Adding automated github releases with a phar and zip
+
+4.2.0 (2014-08-17)
+------------------
+
+* Now merging in default options using a case-insensitive comparison.
+  Closes https://github.com/guzzle/guzzle/issues/767
+* Added the ability to automatically decode `Content-Encoding` response bodies
+  using the `decode_content` request option. This is set to `true` by default
+  to decode the response body if it comes over the wire with a
+  `Content-Encoding`. Set this value to `false` to disable decoding the
+  response content, and pass a string to provide a request `Accept-Encoding`
+  header and turn on automatic response decoding. This feature now allows you
+  to pass an `Accept-Encoding` header in the headers of a request but still
+  disable automatic response decoding.
+  Closes https://github.com/guzzle/guzzle/issues/764
+* Added the ability to throw an exception immediately when transferring
+  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760
+* Updating guzzlehttp/streams dependency to ~2.1
+* No longer utilizing the now deprecated namespaced methods from the stream
+  package.
+
+4.1.8 (2014-08-14)
+------------------
+
+* Fixed an issue in the CurlFactory that caused setting the `stream=false`
+  request option to throw an exception.
+  See: https://github.com/guzzle/guzzle/issues/769
+* TransactionIterator now calls rewind on the inner iterator.
+  See: https://github.com/guzzle/guzzle/pull/765
+* You can now set the `Content-Type` header to `multipart/form-data`
+  when creating POST requests to force multipart bodies.
+  See https://github.com/guzzle/guzzle/issues/768
+
 4.1.7 (2014-08-07)
 ------------------
 
diff --git a/core/vendor/guzzlehttp/guzzle/Makefile b/core/vendor/guzzlehttp/guzzle/Makefile
index e21e9df..045d136 100644
--- a/core/vendor/guzzlehttp/guzzle/Makefile
+++ b/core/vendor/guzzlehttp/guzzle/Makefile
@@ -1,14 +1,10 @@
 all: clean coverage docs
 
 start-server:
-	@ps aux | grep 'node tests/server.js' | grep -v grep > /dev/null \
-	|| node tests/server.js &> /dev/null &
+	cd vendor/guzzlehttp/ring && make start-server
 
 stop-server:
-	@PID=$(shell ps axo pid,command | grep 'tests/server.js' | grep -v grep | cut -f 1 -d " ") && \
-	[ -n "$$PID" ] && \
-	kill $$PID || \
-	true
+	cd vendor/guzzlehttp/ring && make stop-server
 
 test: start-server
 	vendor/bin/phpunit
@@ -30,8 +26,25 @@ docs:
 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 -m '$(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
 
-.PHONY: docs
+package: burgomaster
+	php build/packager.php
+
+burgomaster:
+	mkdir -p build/artifacts
+	curl -s https://raw.githubusercontent.com/mtdowling/Burgomaster/0.0.1/src/Burgomaster.php > build/artifacts/Burgomaster.php
+
+.PHONY: doc burgomaster
diff --git a/core/vendor/guzzlehttp/guzzle/README.md b/core/vendor/guzzlehttp/guzzle/README.md
index 94c386e..7099226 100644
--- a/core/vendor/guzzlehttp/guzzle/README.md
+++ b/core/vendor/guzzlehttp/guzzle/README.md
@@ -11,7 +11,7 @@ $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
+// "200"
 echo $res->getHeader('content-type');
 // 'application/json; charset=utf8'
 echo $res->getBody();
diff --git a/core/vendor/guzzlehttp/guzzle/build/packager.php b/core/vendor/guzzlehttp/guzzle/build/packager.php
new file mode 100644
index 0000000..dbdf9cf
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/build/packager.php
@@ -0,0 +1,25 @@
+<?php
+require __DIR__ . '/artifacts/Burgomaster.php';
+
+// Creating staging directory at guzzlehttp/src/build/artifacts/staging.
+$stageDirectory = __DIR__ . '/artifacts/staging';
+// The root of the project is up one directory from the current directory.
+$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', 'pem']);
+$packager->recursiveCopy('vendor/guzzlehttp/streams/src', 'GuzzleHttp/Stream');
+// Create the classmap autoloader, and instruct the autoloader to
+// automatically require the 'GuzzleHttp/functions.php' script.
+$packager->createAutoloader(['GuzzleHttp/functions.php']);
+// Create a phar file from the staging directory at a specific location
+$packager->createPhar(__DIR__ . '/artifacts/guzzle.phar');
+// Create a zip file from the staging directory at a specific location
+$packager->createZip(__DIR__ . '/artifacts/guzzle.zip');
diff --git a/core/vendor/guzzlehttp/guzzle/composer.json b/core/vendor/guzzlehttp/guzzle/composer.json
index 3d2244f..e2d4e47 100644
--- a/core/vendor/guzzlehttp/guzzle/composer.json
+++ b/core/vendor/guzzlehttp/guzzle/composer.json
@@ -5,7 +5,6 @@
     "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],
     "homepage": "http://guzzlephp.org/",
     "license": "MIT",
-
     "authors": [
         {
             "name": "Michael Dowling",
@@ -13,17 +12,15 @@
             "homepage": "https://github.com/mtdowling"
         }
     ],
-
     "require": {
         "php": ">=5.4.0",
-        "ext-json": "*",
-        "guzzlehttp/streams": "~1.4"
+        "guzzlehttp/ring": "0.1.*@dev",
+        "guzzlehttp/streams": "~3.0@dev"
     },
-
+    "minimum-stability": "dev",
     "suggest": {
         "ext-curl": "Guzzle will use specific adapters if cURL is present"
     },
-
     "autoload": {
         "psr-4": {
             "GuzzleHttp\\": "src/"
@@ -40,10 +37,9 @@
         "psr/log": "~1.0",
         "phpunit/phpunit": "~4.0"
     },
-
     "extra": {
         "branch-alias": {
-            "dev-master": "4.1-dev"
+            "dev-ring": "5.0-dev"
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/docs/adapters.rst b/core/vendor/guzzlehttp/guzzle/docs/adapters.rst
index 9f2d087..af0f133 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/adapters.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/adapters.rst
@@ -1,222 +1,8 @@
-========
-Adapters
-========
+=============
+Ring Adapters
+=============
 
-Guzzle uses *adapters* to send HTTP requests. Adapters emit the lifecycle
-events of requests, transfer HTTP requests, and normalize error handling.
+Guzzle uses Guzzle-Ring adapters to send HTTP requests.
 
-Default Adapter
-===============
-
-Guzzle will use the best possible adapter based on your environment.
-
-If cURL is present, Guzzle will use the following adapters by default:
-
-- ``GuzzleHttp\Adapter\Curl\MultiAdapter`` is used to transfer requests in
-  parallel.
-- If ``allow_url_fopen`` is enabled, then a
-  ``GuzzleHttp\Adapter\StreamingProxyAdapter`` is added so that streaming
-  requests are sent using the PHP stream wrapper. If this setting is disabled,
-  then streaming requests are sent through a cURL adapter.
-- If using PHP 5.5 or greater, then a ``GuzzleHttp\Adapter\Curl\CurlAdapter``
-  is used to send serial requests. Otherwise, the
-  ``GuzzleHttp\Adapter\Curl\MultiAdapter`` is used for serial and parallel
-  requests.
-
-If cURL is not installed, then Guzzle will use a
-``GuzzleHttp\Adapter\StreamingAdapter`` to send requests through PHP's
-HTTP stream wrapper. ``allow_url_fopen`` must be enabled if cURL is not
-installed on your system.
-
-Creating an Adapter
-===================
-
-Creating a custom HTTP adapter allows you to completely customize the way an
-HTTP request is sent over the wire. In some cases, you might need to use a
-different mechanism for transferring HTTP requests other than cURL or PHP's
-stream wrapper. For example, you might need to use a socket because the version
-of cURL on your system has an old bug, maybe you'd like to implement future
-response objects, or you want to create a thread pool and send parallel
-requests using pthreads.
-
-The first thing you need to know about implementing custom adapters are the
-responsibilities of an adapter.
-
-Adapter Responsibilities
-------------------------
-
-Adapters use a ``GuzzleHttp\Adapter\TransactionInterface`` which acts as a
-mediator between ``GuzzleHttp\Message\RequestInterface`` and
-``GuzzleHttp\Message\ResponseInterface`` objects. The main goal of an adapter
-is to set a response on the provided transaction object.
-
-1. The adapter MUST return a ``GuzzleHttp\Message\ResponseInterface`` object in
-   a successful condition.
-
-2. When preparing requests, adapters MUST properly handle as many of the
-   following request configuration options as possible:
-
-   - :ref:`cert-option`
-   - :ref:`connect_timeout-option`
-   - :ref:`debug-option`
-   - :ref:`expect-option`
-   - :ref:`proxy-option`
-   - :ref:`save_to-option`
-   - :ref:`ssl_key-option`
-   - :ref:`stream-option`
-   - :ref:`timeout-option`
-   - :ref:`verify-option`
-
-3. Adapters SHOULD not follow redirects. In the normal case, redirects are
-   followed by ``GuzzleHttp\Subscriber\Redirect``. Redirects SHOULD be
-   implemented using Guzzle event subscribers, not by an adapter.
-
-4. The adapter MUST emit a ``before`` event with a
-   ``GuzzleHttp\Event\BeforeEvent`` object before sending a request. If the
-   event is intercepted and a response is associated with a transaction during
-   the ``before`` event, then the adapter MUST not send the request over the
-   wire, but rather return the response.
-
-5. When all of the headers of a response have been received, the adapter MUST
-   emit a ``headers`` event with a ``GuzzleHttp\Event\HeadersEvent``. This
-   event MUST be emitted before any data is written to the body of the response
-   object. It is important to keep in mind that event listeners MAY mutate a
-   response during the emission of this event.
-
-6. The adapter MUST emit a ``complete`` event with a
-   ``GuzzleHttp\Event\CompleteEvent`` when a request has completed sending.
-   Adapters MUST emit the complete event for all valid HTTP responses,
-   including responses that resulted in a non 2xx level response.
-
-7. The adapter MUST emit an ``error`` event with a
-   ``GuzzleHttp\Event\ErrorEvent``when an error occurs during the transfer.
-   This includes when preparing a request for transfer, during the ``before``
-   event, during the ``headers`` event, during the ``complete`` event, when
-   a networking error occurs, and so on.
-
-8. After emitting the ``error`` event, the adapter MUST check if the
-   error event was intercepted and a response was associated with the
-   transaction. If the propagation of the ``error`` event was not stopped, then
-   the adapter MUST throw the exception. If the propagation was stopped, then
-   the adapter MUST NOT throw the exception.
-
-Parallel Adapters
------------------
-
-Parallel adapters are used when using a client's ``sendAll()`` method. Parallel
-adapters are expected to send one or more transactions in parallel. Parallel
-adapters accept an ``\Iterator`` that yields
-``GuzzleHttp\Adapter\TransactionInterface`` object. In addition to the
-iterator, the adapter is also provided an integer representing the number of
-transactions to execute in parallel.
-
-Parallel adapters are similar to adapters (described earlier), except for the
-following:
-
-1. RequestExceptions are never thrown from a parallel adapter. Error handling
-   for parallel transfers is handled through event listeners that use ``error``
-   events.
-
-2. Parallel adapters are not expected to return responses. Because parallel
-   adapters can, in theory, send an infinite number of requests, developers
-   must use event listeners to receive the ``complete`` event and handle
-   responses accordingly.
-
-Emitting Lifecycle Events
--------------------------
-
-Request lifecycle events MUST be emitted by adapters and parallel adapters.
-These lifecycle events are used by event listeners to modify requests, modify
-responses, perform validation, and anything else required by an application.
-
-Emitting request lifecycle events in an adapter is much simpler if you use the
-static helper method of ``GuzzleHttp\Event\RequestEvents``. These methods are
-used by the built-in in curl and stream wrapper adapters of Guzzle, so you
-should use them too.
-
-Example Adapter
-===============
-
-Here's a really simple example of creating a custom HTTP adapter. For
-simplicity, this example uses a magic ``send_request()`` function.
-
-.. code-block:: php
-
-    <?php
-
-    namespace MyProject\Adapter;
-
-    use GuzzleHttp\Event\RequestEvents;
-    use GuzzleHttp\Event\HeadersEvent;
-    use GuzzleHttp\Message\MessageFactoryInterface;
-
-    class MyAdapter implements AdapterInterface
-    {
-        private $messageFactory;
-
-        public function __construct(MessageFactoryInterface $messageFactory)
-        {
-            $this->messageFactory = $messageFactory;
-        }
-
-        public function send(TransactionInterface $transaction)
-        {
-            RequestEvents::emitBefore($transaction);
-
-            // Check if the transaction was intercepted
-            if (!$transaction->getResponse()) {
-                // It wasn't intercepted, so send the request
-                $this->getResponse($transaction);
-            }
-
-            // Adapters always return a response in the successful case.
-            return $transaction->getResponse();
-        }
-
-        private function getResponse(TransactionInterface $transaction)
-        {
-            $request = $transaction->getRequest();
-
-            $response = send_request(
-                $request->getMethod(),
-                $request->getUrl(),
-                $request->getHeaders(),
-                $request->getBody()
-            );
-
-            if ($response) {
-                $this->processResponse($response, $transaction);
-            } else {
-                // Emit the error event which allows listeners to intercept
-                // the error with a valid response. If it is not intercepted,
-                // a RequestException is thrown.
-                RequestEvents::emitError($transaction, $e);
-            }
-        }
-
-        private function processResponse(
-            array $response,
-            TransactionInterface $transaction
-        ) {
-            // Process the response, create a Guzzle Response object, and
-            // associate the response with the transaction.
-            $responseObject = $this->messageFactory->createResponse(
-                $response['status_code'],
-                $response['headers']
-            );
-
-            $transaction->setResponse($responseObject);
-
-            // Emit the headers event before downloading the body
-            RequestEvents::emitHeaders($transaction);
-
-            if ($response['body']) {
-                // Assuming the response body is a stream or something,
-                // associate it with the response object.
-                $responseObject->setBody(Stream::factory($response['body']));
-            }
-
-            // Emit the complete event
-            RequestEvents::emitComplete($transaction);
-        }
-    }
+See the `Guzzle-Ring <http://guzzle-ring.readthedocs.org>`_ project
+documentation for more information:
diff --git a/core/vendor/guzzlehttp/guzzle/docs/clients.rst b/core/vendor/guzzlehttp/guzzle/docs/clients.rst
index 30e879b..c3b4ec3 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/clients.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/clients.rst
@@ -30,21 +30,14 @@ base_url
     through a client will not use the base URL of the client.
 
 adapter
-    Configures the HTTP adapter (``GuzzleHttp\Adapter\AdapterInterface``) used
-    to transfer the HTTP requests of a client. Guzzle will, by default, utilize
-    a stacked adapter that chooses the best adapter to use based on the provided
-    request options and based on the extensions available in the environment. If
-    cURL is installed, it will be used as the default adapter. However, if a
-    request has the ``stream`` request option, the PHP stream wrapper adapter
-    will be used (assuming ``allow_url_fopen`` is enabled in your PHP
-    environment).
-
-parallel_adapter
-    Just like the ``adapter`` option, you can choose to specify an adapter
-    that is used to send requests in parallel
-    (``GuzzleHttp\Adapter\ParallelAdapterInterface``). Guzzle will by default
-    use cURL to send requests in parallel, but if cURL is not available it will
-    use the PHP stream wrapper and simply send requests serially.
+    Configures the `Guzzle-Ring adapter <http://guzzle-ring.readthedocs.org>`_
+    used to transfer the HTTP requests of a client. Guzzle will, by default,
+    utilize a stacked adapter that chooses the best adapter to use based on the
+    provided request options and based on the extensions available in the
+    environment. If cURL is installed, it will be used as the default adapter.
+    However, if a request has the ``stream`` request option, the PHP stream
+    wrapper adapter will be used (assuming ``allow_url_fopen`` is enabled in
+    your PHP environment).
 
 message_factory
     Specifies the factory used to create HTTP requests and responses
@@ -61,9 +54,7 @@ emitter
     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, including using
-a mock adapter that just returns the result of a callable function and a
-base URL that is a URI template with parameters.
+Here's an example of creating a client with various options.
 
 .. code-block:: php
 
@@ -173,26 +164,42 @@ After creating a request, you can send it with the client's ``send()`` method.
 Sending Requests in Parallel
 ============================
 
-You can send requests in parallel using a client object's ``sendAll()`` method.
-The ``sendAll()`` method accepts an array or ``\Iterator`` that contains
-``GuzzleHttp\Message\RequestInterface`` objects. In addition to providing the
-requests to send, you can also specify an associative array of options that
-will affect the transfer.
+You can send requests in parallel using ``GuzzleHttp\Pool``. The Pool class
+is an implementation of ``GuzzleHttp\Ring\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'])
     ];
 
-    $client->sendAll($requests);
+    $options = [];
+
+    // Create a pool. Note: the options array is optional.
+    $pool = new Pool($client, $requests, $options);
+
+    // Send the requests
+    $pool->deref();
+
+The Pool class comes with a convenience method that can be used to send
+requests without having to create a new instance and dereference it:
+
+.. code-block:: php
 
-The ``sendAll()`` method accepts the following associative array of options:
+    Pool::send($client, $requests, $options);
 
-- **parallel**: Integer representing the maximum number of requests that are
-  allowed to be sent in parallel.
+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
@@ -209,10 +216,11 @@ it is first triggered.
 
 .. code-block:: php
 
+    use GuzzleHttp\Pool;
     use GuzzleHttp\Event\CompleteEvent;
 
     // Add a single event listener using a callable.
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'complete' => function (CompleteEvent $event) {
             echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
             echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
@@ -221,7 +229,7 @@ it is first triggered.
 
     // The above is equivalent to the following, but the following structure
     // allows you to add multiple event listeners to the same event name.
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'complete' => [
             [
                 'fn'       => function (CompleteEvent $event) { /* ... */ },
@@ -235,15 +243,16 @@ Asynchronous Response Handling
 ------------------------------
 
 When sending requests in parallel, the request/response/error lifecycle must be
-handled asynchronously. This means that you give the ``sendAll()`` method
-multiple requests and handle the response or errors that is associated with the
-request using event callbacks.
+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;
 
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'complete' => function (CompleteEvent $event) {
             echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
             echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
@@ -272,10 +281,11 @@ failed request to an array that we can use to process errors later.
 
 .. code-block:: php
 
+    use GuzzleHttp\Pool;
     use GuzzleHttp\Event\ErrorEvent;
 
     $errors = [];
-    $client->sendAll($requests, [
+    Pool::send($client, $requests, [
         'error' => function (ErrorEvent $event) use (&$errors) {
             $errors[] = $event;
         }
@@ -288,18 +298,23 @@ failed request to an array that we can use to process errors later.
 Throwing Errors Immediately
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-It sometimes is useful to throw exceptions immediately when the occur. The
+It sometimes is useful to throw exceptions immediately when they occur. The
 following example shows how to use an event listener to throw exceptions
-immeditaley and prevent subsequent requests from being sent.
+immediately and prevent subsequent requests from being sent by cancelling the
+pool. Cancelling a pool will also cancel any requests that are currently
+in-flight and have not completed.
 
 .. code-block:: php
 
+    use GuzzleHttp\Pool;
     use GuzzleHttp\Event\ErrorEvent;
+    use GuzzleHttp\Event\RequestEvents;
 
-    $client->sendAll($requests, [
-        'error' => function (ErrorEvent $event) {
+    $pool = new Pool($client, $requests, [
+        'error' => function (ErrorEvent $event) use (&$pool) {
+            $pool->cancel();
             throw $event->getException();
-        }
+        }, RequestEvents::LAST
     ]);
 
 .. _batch-requests:
@@ -309,11 +324,14 @@ Batching Requests
 
 Sometimes you just want to send a few requests in parallel and then process
 the results all at once after they've been sent. Guzzle provides a convenience
-function ``GuzzleHttp\batch()`` that makes this very simple:
+function ``GuzzleHttp\Pool::batch()`` that makes this very simple:
 
 .. code-block:: php
 
-    $client = new GuzzleHttp\Client();
+    use GuzzleHttp\Pool;
+    use GuzzleHttp\Client;
+
+    $client = new Client();
 
     $requests = [
         $client->createRequest('GET', 'http://httpbin.org/get'),
@@ -321,10 +339,10 @@ function ``GuzzleHttp\batch()`` that makes this very simple:
         $client->createRequest('PUT', 'http://httpbin.org/put'),
     ];
 
-    $results = GuzzleHttp\batch($client, $requests);
+    $results = Pool::batch($client, $requests);
 
     // Results is an SplObjectStorage object where each request is a key
-    foreach ($results as $request) {
+    foreach ($requests as $request) {
         echo $request->getUrl() . "\n";
         // Get the result (either a ResponseInterface or RequestException)
         $result = $results[$request];
@@ -337,11 +355,10 @@ function ``GuzzleHttp\batch()`` that makes this very simple:
         }
     }
 
-``GuzzleHttp\batch()`` accepts an optional associative array of options in the
-third argument that allows you to specify the 'before', 'complete' and 'error'
-events as well as specify the maximum number of requests to send in parallel
-using the 'parallel' option key. This options array is the exact same format as
-the options array exposed in ``GuzzleHttp\ClientInterface::sendAll()``.
+``GuzzleHttp\Pool::batch()`` accepts an optional associative array of options
+in the third argument that allows you to specify the 'before', 'complete' and
+'error' events as well as specify the maximum number of requests to send
+concurrently using the 'pool_size' option key.
 
 .. _request-options:
 
@@ -659,6 +676,40 @@ specify whether or not the "Referer" header should be added when redirecting.
     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 adapter 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
@@ -717,7 +768,6 @@ events
     $client->get('/', [
         'events' => [
             'before' => function (BeforeEvent $e) { echo 'Before'; },
-            'headers' => function (HeadersEvent $e) { echo 'Headers'; },
             'complete' => function (CompleteEvent $e) { echo 'Complete'; },
             'error' => function (ErrorEvent $e) { echo 'Error'; },
         ]
@@ -824,10 +874,12 @@ verify
 ------
 
 :Summary: Describes the SSL certificate verification behavior of a request.
-    Set to ``true`` to enable SSL certificate verification (the default). 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.
+
+    - 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
@@ -835,12 +887,50 @@ verify
 
 .. code-block:: php
 
-    // Use a custom SSL certificate
+    // 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
+    // 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
@@ -1059,6 +1149,36 @@ array in the ``config`` request option under the ``curl`` key.
         ]
     ]);
 
+future
+------
+
+:Summary: Specifies whether or not a response SHOULD be an instance of a
+    ``GuzzleHttp\Message\FutureResponse`` object.
+:Types:
+        - bool
+: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 adapter that
+created the response is destructing and there are futures that have not been
+resolved.
+
+This option only has an effect if your adapter can create and return future
+responses. By default, Guzzle relies on cURL's multi interface to implement
+future responses. When cURL is not installed and you haven't configured a
+custom adapter, your responses will be blocking and will return regular
+response objects with no ``wait()`` method.
+
+.. code-block:: php
+
+    $response = $client->get('/foo', ['future' => true]);
+    // Do some other stuff including sending more future responses...
+    // Get the status of the response, which implicitly blocks until the
+    // response is complete.
+    echo $response->getStatus();
+
 Event Subscribers
 =================
 
@@ -1095,8 +1215,8 @@ 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 ``GuzzleHttp\Adapter\Curl\MultiAdapter``
-    will use when selecting handles using ``curl_multi_select()``. Some systems
+    Controls the duration in seconds that a curl_multi_* adapter 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.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/conf.py b/core/vendor/guzzlehttp/guzzle/docs/conf.py
index c787fac..917bdf4 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/conf.py
+++ b/core/vendor/guzzlehttp/guzzle/docs/conf.py
@@ -2,92 +2,27 @@ 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'
 
-# -- General configuration -----------------------------------------------------
-
 extensions = []
 templates_path = ['_templates']
 source_suffix = '.rst'
 master_doc = 'index'
-
 project = u'Guzzle'
-copyright = u'2012, Michael Dowling'
-version = '3.0.0'
-release = '3.0.0'
-
-exclude_patterns = ['_build']
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-html_title = "Guzzle documentation"
+copyright = u'2014, Michael Dowling'
+version = '5.0.0'
+html_title = "Guzzle Documentation"
 html_short_title = "Guzzle"
 
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
+exclude_patterns = ['_build']
 html_static_path = ['_static']
 
-# Custom sidebar templates, maps document names to template names.
-html_sidebars = {
-    '**':       ['localtoc.html', 'searchbox.html']
-}
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'Guzzledoc'
-
-# -- Guzzle Sphinx theme setup ------------------------------------------------
-
-sys.path.insert(0, '/Users/dowling/projects/guzzle_sphinx_theme')
-
-import guzzle_sphinx_theme
-html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
-html_theme_path = guzzle_sphinx_theme.html_theme_path()
-html_theme = 'guzzle_sphinx_theme'
-
-# Guzzle theme options (see theme.conf for more information)
-html_theme_options = {
-    "project_nav_name": "Guzzle",
-    "github_user": "guzzle",
-    "github_repo": "guzzle",
-    "disqus_comments_shortname": "guzzle",
-    "google_analytics_account": "UA-22752917-1"
-}
-
-# -- Options for LaTeX output --------------------------------------------------
-
-latex_elements = {}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
-  ('index', 'Guzzle.tex', u'Guzzle Documentation',
-   u'Michael Dowling', 'manual'),
-]
-
-# -- Options for manual page output --------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    ('index', 'guzzle', u'Guzzle Documentation',
-     [u'Michael Dowling'], 1)
-]
-
-# If true, show URL addresses after external links.
-#man_show_urls = False
-
-# -- Options for Texinfo output ------------------------------------------------
+on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
 
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-#  dir menu entry, description, category)
-texinfo_documents = [
-  ('index', 'Guzzle', u'Guzzle Documentation',
-   u'Michael Dowling', 'Guzzle', 'One line description of project.',
-   'Miscellaneous'),
-]
+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
index 933ec6a..e0201ae 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/events.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/events.rst
@@ -83,7 +83,7 @@ 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",
-"headers", "complete", "error", etc.), what callable to invoke when the
+"progress", "complete", "error", etc.), what callable to invoke when the
 event is triggered, and optionally provide a priority.
 
 .. code-block:: php
@@ -145,7 +145,7 @@ of a ``GuzzleHttp\Common\EventInterface`` object:
     });
 
 After stopping the propagation of an event, any subsequent event listeners that
-have not yet been trigger will not be triggered. You can check to see if the
+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.
 
@@ -198,7 +198,7 @@ priority of the listener (as shown in the ``before`` listener in the example).
                 'before'   => ['onBefore', 100],
                 'complete' => ['onComplete'],
                 // You can pass a list of listeners with different priorities
-                'error'    => [['beforeError', 'first'], ['afterError', 'last]]
+                'error'    => [['beforeError', 'first'], ['afterError', 'last']]
             ];
         }
 
@@ -301,7 +301,7 @@ Requests emit lifecycle events when they are transferred.
     Request lifecycle events may be triggered multiple times due to redirects,
     retries, or reusing a request multiple times. Use the ``once()`` method
     of an event emitter if you only want the event to be triggered once. You
-    can also remove an event listener from an emitter by using the emitter the
+    can also remove an event listener from an emitter by using the emitter which
     is provided to the listener.
 
 .. _before_event:
@@ -360,49 +360,6 @@ the request from being sent over the wire and stops the propagation of the
     Any exception encountered while executing the ``before`` event will trigger
     the ``error`` event of a request.
 
-.. _headers_event:
-
-headers
--------
-
-The ``headers`` event is emitted after the headers of a response have been
-received before any of the response body has been downloaded. The event
-emitted is a ``GuzzleHttp\Event\HeadersEvent``.
-
-This event can be useful if you need to conditionally wrap the response body
-of a request in a special decorator or if you only want to conditionally
-download a response body based on response headers.
-
-This event cannot be intercepted.
-
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Event\HeadersEvent;
-
-    $client = new Client(['base_url' => 'http://httpbin.org']);
-    $request = $client->createRequest('GET', '/stream/100');
-    $request->getEmitter()->on('headers', function (HeadersEvent $e) {
-        echo $e->getResponse();
-        // Prints the response headers
-
-        // Wrap the response body in a custom decorator if the response has a body
-        if ($e->getResponse()->getHeader('Content-Length') ||
-            $e->getResponse()->getHeader('Content-Encoding')
-        ) {
-            $customBody = new MyCustomStreamDecorator($e->getResponse()->getBody());
-            $e->getResponse()->setBody($customBody);
-        }
-    });
-
-.. note::
-
-    A response may or may not yet have a body associated with it. If a request
-    used a ``save_to`` request option, then the response will have a body.
-    Otherwise, the response will have no body but you are free to associate one
-    with the response. As an example, this is done in the
-    `progress subscriber <https://github.com/guzzle/progress-subscriber/blob/master/src/Progress.php>`_.
-
 .. _complete_event:
 
 complete
@@ -480,3 +437,39 @@ a username and password.
     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";
diff --git a/core/vendor/guzzlehttp/guzzle/docs/faq.rst b/core/vendor/guzzlehttp/guzzle/docs/faq.rst
index 9282b79..e058b1c 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/faq.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/faq.rst
@@ -102,11 +102,6 @@ You might need to use Guzzle 3 and Guzzle 4 in the same project due to a
 requirement of a legacy application or a dependency that has not yet migrated
 to Guzzle 4.0.
 
-How do I migrate from Guzzle 3 to 4?
-====================================
-
-See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40.
-
 What is this Maximum function nesting error?
 ============================================
 
@@ -189,3 +184,9 @@ used with a client and allow self-signed certificates.
             ]
         ]
     ]);
+
+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`.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst b/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
index 73db70c..77f71c7 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/http-messages.rst
@@ -120,7 +120,7 @@ You create requests with a client using the ``createRequest()`` method.
 
 .. code-block:: php
 
-    // Create a request but don't sent it immediately
+    // Create a request but don't send it immediately
     $request = $client->createRequest('GET', 'http://httpbin.org/get');
 
 Request Methods
@@ -466,7 +466,7 @@ 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 reqeust or the URL of the last redirected URL if any redirects
+the URL of a request or the URL of the last redirected URL if any redirects
 occurred while transferring a request.
 
 .. code-block:: php
diff --git a/core/vendor/guzzlehttp/guzzle/docs/index.rst b/core/vendor/guzzlehttp/guzzle/docs/index.rst
index 500b100..32999df 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/index.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/index.rst
@@ -57,9 +57,6 @@ layer to add capabilities to the client.
 `OAuth Subscriber <https://github.com/guzzle/oauth-subscriber>`_
     Signs requests using OAuth 1.0.
 
-`Progress Subscriber <https://github.com/guzzle/progress-subscriber>`_
-    Emits progress events when uploading and downloading data.
-
 `Cache Subscriber <https://github.com/guzzle/cache-subscriber>`_
     Implements a private transparent proxy cache that caches HTTP responses.
 
diff --git a/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst b/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
index 0687ca2..9324eda 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/quickstart.rst
@@ -459,9 +459,6 @@ Guzzle throws exceptions for errors that occur during a transfer.
   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``.
-- A ``GuzzleHttp\Exception\AdapterException`` is thrown when an error occurs
-  in an HTTP adapter during a parallel request. This exception is only thrown
-  when using the ``sendAll()`` method of a client.
 
 All of the above exceptions extend from
 ``GuzzleHttp\Exception\TransferException``.
diff --git a/core/vendor/guzzlehttp/guzzle/docs/streams.rst b/core/vendor/guzzlehttp/guzzle/docs/streams.rst
index c743e2c..8fe9a69 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/streams.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/streams.rst
@@ -30,17 +30,17 @@ case of a socket or pipe).
 Creating Streams
 ================
 
-The best way to create a stream is using the
-``GuzzleHttp\Stream\create()`` function. This function accepts strings,
+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;
+    use GuzzleHttp\Stream\Stream;
 
-    $stream = Stream\create('string data');
+    $stream = Stream::factory('string data');
     echo $stream;
     // string data
     echo $stream->read(3);
@@ -52,28 +52,20 @@ resources returned from ``fopen()``, an object that implements
     var_export($stream->tell());
     // 11
 
-.. note::
+Metadata
+========
 
-    You can use this ``create()`` function or use the static ``factory()``
-    method of the ``GuzzleHttp\Stream\Stream`` class via
-    ``GuzzleHttp\Stream\Stream::factory()``. This static factory method has the
-    same method signature as the ``create()`` function. Actually, the static
-    factory method is just a convenience method for the ``create()`` function.
-
-Metadata Streams
-================
-
-Guzzle streams that implement ``GuzzleHttp\Stream\MetadataStreamInterface``
-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>`_.
+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;
+    use GuzzleHttp\Stream\Stream;
 
     $resource = fopen('/path/to/file', 'r');
-    $stream = Stream\create($resource);
+    $stream = Stream::factory($resource);
     echo $stream->getMetadata('uri');
     // /path/to/file
     var_export($stream->isReadable());
@@ -83,12 +75,6 @@ provides the data you would retrieve when calling PHP's
     var_export($stream->isSeekable());
     // true
 
-.. note::
-
-    Streams created using ``GuzzleHttp\Stream\create()`` and
-    ``GuzzleHttp\Stream\Stream::factory()`` all implement
-    ``GuzzleHttp\Stream\MetadataStreamInterface``.
-
 Stream Decorators
 =================
 
@@ -108,10 +94,10 @@ then on disk.
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
     use GuzzleHttp\Stream\CachingStream;
 
-    $original = Stream\create(fopen('http://www.google.com', 'r'));
+    $original = Stream::factory(fopen('http://www.google.com', 'r'));
     $stream = new CachingStream($original);
 
     $stream->read(1024);
@@ -131,10 +117,10 @@ chunks (e.g. Amazon S3's multipart upload API).
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
     use GuzzleHttp\Stream\LimitStream;
 
-    $original = Stream\create(fopen('/tmp/test.txt', 'r+'));
+    $original = Stream::factory(fopen('/tmp/test.txt', 'r+'));
     echo $original->getSize();
     // >>> 1048576
 
@@ -152,10 +138,10 @@ NoSeekStream wraps a stream and does not allow seeking.
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
     use GuzzleHttp\Stream\LimitStream;
 
-    $original = Stream\create('foo');
+    $original = Stream::factory('foo');
     $noSeek = new NoSeekStream($original);
 
     echo $noSeek->read(3);
@@ -183,7 +169,7 @@ byte is read from a stream. This could be implemented by overriding the
 
     use GuzzleHttp\Stream\StreamDecoratorTrait;
 
-    class EofCallbackStream implements StreamInterface, MetadataStreamInterface
+    class EofCallbackStream implements StreamInterface
     {
         use StreamDecoratorTrait;
 
@@ -212,9 +198,9 @@ This decorator could be added to any existing stream and used like so:
 
 .. code-block:: php
 
-    use GuzzleHttp\Stream;
+    use GuzzleHttp\Stream\Stream;
 
-    $original = Stream\create('foo');
+    $original = Stream::factory('foo');
     $eofStream = new EofCallbackStream($original, function () {
         echo 'EOF!';
     });
diff --git a/core/vendor/guzzlehttp/guzzle/docs/testing.rst b/core/vendor/guzzlehttp/guzzle/docs/testing.rst
index 55015ab..19ca01b 100644
--- a/core/vendor/guzzlehttp/guzzle/docs/testing.rst
+++ b/core/vendor/guzzlehttp/guzzle/docs/testing.rst
@@ -134,32 +134,16 @@ Mock Adapter
 ============
 
 In addition to using the Mock subscriber, you can use the
-``GuzzleHttp\Adapter\MockAdapter`` as the adapter of a client to return the
+``GuzzleHttp\Ring\Client\MockAdapter`` as the adapter of a client to return the
 same response over and over or return the result of a callable function.
 
-.. code-block:: php
-
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Adapter\MockAdapter;
-    use GuzzleHttp\Adapter\TransactionInterface;
-    use GuzzleHttp\Message\Response;
-
-    $mockAdapter = new MockAdapter(function (TransactionInterface $trans) {
-        // You have access to the request
-        $request = $trans->getRequest();
-        // Return a response
-        return new Response(200);
-    });
-
-    $client = new Client(['adapter' => $mockAdapter]);
-
 Test Web Server
 ===============
 
-Using mock responses is usually enough when testing a web service client. When
-implementing custom :doc:`HTTP adapters <adapters>`, you'll need to send actual
-HTTP requests in order to sufficiently test the adapter. However, a best
-practice is to contact a local web server rather than a server over the
+Using mock responses is almost always enough when testing a web service client.
+When implementing custom :doc:`HTTP adapters <adapters>`, you'll need to send
+actual HTTP requests in order to sufficiently test the adapter. However, a
+best practice is to contact a local web server rather than a server over the
 internet.
 
 - Tests are more reliable
@@ -169,6 +153,22 @@ internet.
 Using the test server
 ---------------------
 
+.. warning::
+
+    The following functionality is provided to help developers of Guzzle
+    develop HTTP adapters. 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 adapters. 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.
diff --git a/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist b/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist
index d75d0ba..500cd53 100644
--- a/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist
+++ b/core/vendor/guzzlehttp/guzzle/phpunit.xml.dist
@@ -9,6 +9,9 @@
   <filter>
     <whitelist>
       <directory suffix=".php">src</directory>
+      <exclude>
+        <directory suffix="Interface.php">src/</directory>
+      </exclude>
     </whitelist>
   </filter>
 </phpunit>
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/AdapterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/AdapterInterface.php
deleted file mode 100644
index f3c035e..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/AdapterInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Adapter interface used to transfer HTTP requests.
- *
- * @link http://docs.guzzlephp.org/en/guzzle4/adapters.html for a full
- *     explanation of adapters and their responsibilities.
- */
-interface AdapterInterface
-{
-    /**
-     * Transfers an HTTP request and populates a response
-     *
-     * @param TransactionInterface $transaction Transaction abject to populate
-     *
-     * @return ResponseInterface
-     */
-    public function send(TransactionInterface $transaction);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/BatchContext.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/BatchContext.php
deleted file mode 100644
index 2fccbb2..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/BatchContext.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Exception\AdapterException;
-
-/**
- * Provides context for a Curl transaction, including active handles,
- * pending transactions, and whether or not this is a batch or single
- * transaction.
- */
-class BatchContext
-{
-    /** @var resource Curl multi resource */
-    private $multi;
-
-    /** @var \SplObjectStorage Map of transactions to curl resources */
-    private $handles;
-
-    /** @var \Iterator Yields pending transactions */
-    private $pending;
-
-    /** @var bool Whether or not to throw transactions */
-    private $throwsExceptions;
-
-    /**
-     * @param resource  $multiHandle      Initialized curl_multi resource
-     * @param bool      $throwsExceptions Whether or not exceptions are thrown
-     * @param \Iterator $pending          Iterator yielding pending transactions
-     */
-    public function __construct(
-        $multiHandle,
-        $throwsExceptions,
-        \Iterator $pending = null
-    ) {
-        $this->multi = $multiHandle;
-        $this->handles = new \SplObjectStorage();
-        $this->throwsExceptions = $throwsExceptions;
-        $this->pending = $pending;
-    }
-
-    /**
-     * Find a transaction for a given curl handle
-     *
-     * @param resource $handle Curl handle
-     *
-     * @return TransactionInterface
-     * @throws AdapterException if a transaction is not found
-     */
-    public function findTransaction($handle)
-    {
-        foreach ($this->handles as $transaction) {
-            if ($this->handles[$transaction] === $handle) {
-                return $transaction;
-            }
-        }
-
-        throw new AdapterException('No curl handle was found');
-    }
-
-    /**
-     * Returns true if there are any active requests.
-     *
-     * @return bool
-     */
-    public function isActive()
-    {
-        return count($this->handles) > 0;
-    }
-
-    /**
-     * Returns true if there are any remaining pending transactions
-     *
-     * @return bool
-     */
-    public function hasPending()
-    {
-        return $this->pending && $this->pending->valid();
-    }
-
-    /**
-     * Pop the next transaction from the transaction queue
-     *
-     * @return TransactionInterface|null
-     */
-    public function nextPending()
-    {
-        if (!$this->hasPending()) {
-            return null;
-        }
-
-        $current = $this->pending->current();
-        $this->pending->next();
-
-        return $current;
-    }
-
-    /**
-     * Checks if the batch is to throw exceptions on error
-     *
-     * @return bool
-     */
-    public function throwsExceptions()
-    {
-        return $this->throwsExceptions;
-    }
-
-    /**
-     * Get the curl_multi handle
-     *
-     * @return resource
-     */
-    public function getMultiHandle()
-    {
-        return $this->multi;
-    }
-
-    /**
-     * Add a transaction to the multi handle
-     *
-     * @param TransactionInterface $transaction Transaction to add
-     * @param resource             $handle      Resource to use with the handle
-     *
-     * @throws AdapterException If the handle is already registered
-     */
-    public function addTransaction(TransactionInterface $transaction, $handle)
-    {
-        if (isset($this->handles[$transaction])) {
-            throw new AdapterException('Transaction already registered');
-        }
-
-        $code = curl_multi_add_handle($this->multi, $handle);
-        if ($code != CURLM_OK) {
-            MultiAdapter::throwMultiError($code);
-        }
-
-        $this->handles[$transaction] = $handle;
-    }
-
-    /**
-     * Remove a transaction and associated handle from the context
-     *
-     * @param TransactionInterface $transaction Transaction to remove
-     *
-     * @return array Returns the curl_getinfo array
-     * @throws AdapterException if the transaction is not found
-     */
-    public function removeTransaction(TransactionInterface $transaction)
-    {
-        if (!isset($this->handles[$transaction])) {
-            throw new AdapterException('Transaction not registered');
-        }
-
-        $handle = $this->handles[$transaction];
-        $this->handles->detach($transaction);
-        $info = curl_getinfo($handle);
-        $code = curl_multi_remove_handle($this->multi, $handle);
-        curl_close($handle);
-
-        if ($code !== CURLM_OK) {
-            MultiAdapter::throwMultiError($code);
-        }
-
-        return $info;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php
deleted file mode 100644
index 0f12035..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\AdapterInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\AdapterException;
-use GuzzleHttp\Message\MessageFactoryInterface;
-
-/**
- * HTTP adapter that uses cURL easy handles as a transport layer.
- *
- * Requires PHP 5.5+
- *
- * When using the CurlAdapter, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of a request's configuration options.
- */
-class CurlAdapter implements AdapterInterface
-{
-    /** @var CurlFactory */
-    private $curlFactory;
-
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-
-    /** @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:
-     *
-     * - handle_factory: Optional callable factory used to create cURL handles.
-     *   The callable is invoked with the following arguments:
-     *   TransactionInterface, MessageFactoryInterface, and an optional cURL
-     *   handle to modify. The factory method must then return a cURL resource.
-     * - max_handles: Maximum number of idle handles (defaults to 5).
-     *
-     * @param MessageFactoryInterface $messageFactory
-     * @param array $options Array of options to use with the adapter
-     */
-    public function __construct(
-        MessageFactoryInterface $messageFactory,
-        array $options = []
-    ) {
-        $this->handles = $this->ownedHandles = [];
-        $this->messageFactory = $messageFactory;
-        $this->curlFactory = 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 send(TransactionInterface $transaction)
-    {
-        RequestEvents::emitBefore($transaction);
-        if ($response = $transaction->getResponse()) {
-            return $response;
-        }
-
-        $factory = $this->curlFactory;
-        $handle = $factory(
-            $transaction,
-            $this->messageFactory,
-            $this->checkoutEasyHandle()
-        );
-
-        curl_exec($handle);
-        $info = curl_getinfo($handle);
-        $info['curl_result'] = curl_errno($handle);
-
-        if ($info['curl_result']) {
-            $this->handleError($transaction, $info, $handle);
-        } else {
-            $this->releaseEasyHandle($handle);
-            RequestEvents::emitComplete($transaction, $info);
-        }
-
-        return $transaction->getResponse();
-    }
-
-    private function handleError(
-        TransactionInterface $transaction,
-        $info,
-        $handle
-    ) {
-        $error = curl_error($handle);
-        $this->releaseEasyHandle($handle);
-        RequestEvents::emitError(
-            $transaction,
-            new AdapterException("cURL error {$info['curl_result']}: {$error}"),
-            $info
-        );
-    }
-
-    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($handle);
-            $this->ownedHandles[$id] = false;
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php
deleted file mode 100644
index 86c2549..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php
+++ /dev/null
@@ -1,348 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Stream;
-use GuzzleHttp\Exception\AdapterException;
-
-/**
- * Creates curl resources from a request and response object
- */
-class CurlFactory
-{
-    /**
-     * Creates a cURL handle based on a transaction.
-     *
-     * @param TransactionInterface $transaction Holds a request and response
-     * @param MessageFactoryInterface $messageFactory Used to create responses
-     * @param null|resource $handle Optionally provide a curl handle to modify
-     *
-     * @return resource Returns a prepared cURL handle
-     * @throws AdapterException when an option cannot be applied
-     */
-    public function __invoke(
-        TransactionInterface $transaction,
-        MessageFactoryInterface $messageFactory,
-        $handle = null
-    ) {
-        $request = $transaction->getRequest();
-        $mediator = new RequestMediator($transaction, $messageFactory);
-        $options = $this->getDefaultOptions($request, $mediator);
-        $this->applyMethod($request, $options);
-        $this->applyTransferOptions($request, $mediator, $options);
-        $this->applyHeaders($request, $options);
-        unset($options['_headers']);
-
-        // Add adapter options from the request's configuration options
-        if ($config = $request->getConfig()['curl']) {
-            $options = $this->applyCustomCurlOptions($config, $options);
-        }
-
-        if (!$handle) {
-            $handle = curl_init();
-        }
-
-        curl_setopt_array($handle, $options);
-
-        return $handle;
-    }
-
-    protected function getDefaultOptions(
-        RequestInterface $request,
-        RequestMediator $mediator
-    ) {
-        $url = $request->getUrl();
-
-        // Strip fragment from URL. See:
-        // https://github.com/guzzle/guzzle/issues/453
-        if (($pos = strpos($url, '#')) !== false) {
-            $url = substr($url, 0, $pos);
-        }
-
-        $config = $request->getConfig();
-        $options = array(
-            CURLOPT_URL            => $url,
-            CURLOPT_CONNECTTIMEOUT => $config['connect_timeout'] ?: 150,
-            CURLOPT_RETURNTRANSFER => false,
-            CURLOPT_HEADER         => false,
-            CURLOPT_WRITEFUNCTION  => array($mediator, 'writeResponseBody'),
-            CURLOPT_HEADERFUNCTION => array($mediator, 'receiveResponseHeader'),
-            CURLOPT_READFUNCTION   => array($mediator, 'readRequestBody'),
-            CURLOPT_HTTP_VERSION   => $request->getProtocolVersion() === '1.0'
-                ? CURL_HTTP_VERSION_1_0 : CURL_HTTP_VERSION_1_1,
-            CURLOPT_SSL_VERIFYPEER => 1,
-            CURLOPT_SSL_VERIFYHOST => 2,
-            '_headers'             => $request->getHeaders()
-        );
-
-        if (defined('CURLOPT_PROTOCOLS')) {
-            // Allow only HTTP and HTTPS protocols
-            $options[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
-        }
-
-        // Add CURLOPT_ENCODING if Accept-Encoding header is provided
-        if ($request->hasHeader('Accept-Encoding')) {
-            $options[CURLOPT_ENCODING] = $request->getHeader('Accept-Encoding');
-            // Let cURL set the Accept-Encoding header. Without this change
-            // curl could add a duplicate value.
-            $this->removeHeader('Accept-Encoding', $options);
-        }
-
-        // cURL sometimes adds a content-type by default. Prevent this.
-        if (!$request->hasHeader('Content-Type')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Content-Type:';
-        }
-
-        return $options;
-    }
-
-    private function applyMethod(RequestInterface $request, array &$options)
-    {
-        $method = $request->getMethod();
-        if ($method == 'HEAD') {
-            $options[CURLOPT_NOBODY] = true;
-            unset($options[CURLOPT_WRITEFUNCTION], $options[CURLOPT_READFUNCTION]);
-        } else {
-            $options[CURLOPT_CUSTOMREQUEST] = $method;
-            if (!$request->getBody()) {
-                unset($options[CURLOPT_READFUNCTION]);
-            } else {
-                $this->applyBody($request, $options);
-            }
-        }
-    }
-
-    private function applyBody(RequestInterface $request, array &$options)
-    {
-        if ($request->hasHeader('Content-Length')) {
-            $size = (int) $request->getHeader('Content-Length');
-        } else {
-            $size = null;
-        }
-
-        $request->getBody()->seek(0);
-
-        // You can send the body as a string using curl's CURLOPT_POSTFIELDS
-        if (($size !== null && $size < 32768) ||
-            isset($request->getConfig()['curl']['body_as_string'])
-        ) {
-            $options[CURLOPT_POSTFIELDS] = $request->getBody()->getContents();
-            // Don't duplicate the Content-Length header
-            $this->removeHeader('Content-Length', $options);
-            $this->removeHeader('Transfer-Encoding', $options);
-        } else {
-            $options[CURLOPT_UPLOAD] = true;
-            // Let cURL handle setting the Content-Length header
-            if ($size !== null) {
-                $options[CURLOPT_INFILESIZE] = $size;
-                $this->removeHeader('Content-Length', $options);
-            }
-        }
-
-        // If the Expect header is not present, prevent curl from adding it
-        if (!$request->hasHeader('Expect')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Expect:';
-        }
-    }
-
-    private function applyHeaders(RequestInterface $request, array &$options)
-    {
-        foreach ($options['_headers'] as $name => $values) {
-            $options[CURLOPT_HTTPHEADER][] = $name . ': ' . implode(', ', $values);
-        }
-
-        // Remove the Expect header if one was not set
-        if (!$request->hasHeader('Accept')) {
-            $options[CURLOPT_HTTPHEADER][] = 'Accept:';
-        }
-    }
-
-    private function applyTransferOptions(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        array &$options
-    ) {
-        static $methods;
-        if (!$methods) {
-            $methods = array_flip(get_class_methods(__CLASS__));
-        }
-
-        foreach ($request->getConfig()->toArray() as $key => $value) {
-            $method = "add_{$key}";
-            if (isset($methods[$method])) {
-                $this->{$method}($request, $mediator, $options, $value);
-            }
-        }
-    }
-
-    private function add_debug(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if ($value) {
-            $options[CURLOPT_STDERR] = is_resource($value) ? $value : STDOUT;
-            $options[CURLOPT_VERBOSE] = true;
-        }
-    }
-
-    private function add_proxy(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if (!is_array($value)) {
-            $options[CURLOPT_PROXY] = $value;
-        } else {
-            $scheme = $request->getScheme();
-            if (isset($value[$scheme])) {
-                $options[CURLOPT_PROXY] = $value[$scheme];
-            }
-        }
-    }
-
-    private function add_timeout(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        $options[CURLOPT_TIMEOUT_MS] = $value * 1000;
-    }
-
-    private function add_connect_timeout(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        $options[CURLOPT_CONNECTTIMEOUT_MS] = $value * 1000;
-    }
-
-    private function add_verify(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if ($value === false) {
-            unset($options[CURLOPT_CAINFO]);
-            $options[CURLOPT_SSL_VERIFYHOST] = 0;
-            $options[CURLOPT_SSL_VERIFYPEER] = false;
-        } elseif ($value === true || is_string($value)) {
-            $options[CURLOPT_SSL_VERIFYHOST] = 2;
-            $options[CURLOPT_SSL_VERIFYPEER] = true;
-            if ($value !== true) {
-                if (!file_exists($value)) {
-                    throw new AdapterException('SSL certificate authority file'
-                        . " not found: {$value}");
-                }
-                $options[CURLOPT_CAINFO] = $value;
-            }
-        }
-    }
-
-    private function add_cert(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if (!file_exists($value)) {
-            throw new AdapterException("SSL certificate not found: {$value}");
-        }
-
-        $options[CURLOPT_SSLCERT] = $value;
-    }
-
-    private function add_ssl_key(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        if (is_array($value)) {
-            $options[CURLOPT_SSLKEYPASSWD] = $value[1];
-            $value = $value[0];
-        }
-
-        if (!file_exists($value)) {
-            throw new AdapterException("SSL private key not found: {$value}");
-        }
-
-        $options[CURLOPT_SSLKEY] = $value;
-    }
-
-    private function add_stream()
-    {
-        throw new AdapterException('cURL adapters do not support the "stream"'
-            . ' request option. This error is typically encountered when trying'
-            . ' to send requests with the "stream" option set to true in '
-            . ' parallel. You will either need to send these one at a time or'
-            . ' implement a custom ParallelAdapterInterface that supports'
-            . ' sending these types of requests in parallel. This error can'
-            . ' also occur if the StreamAdapter is not available on your'
-            . ' system (e.g., allow_url_fopen is disabled in your php.ini).');
-    }
-
-    private function add_save_to(
-        RequestInterface $request,
-        RequestMediator $mediator,
-        &$options,
-        $value
-    ) {
-        $mediator->setResponseBody(is_string($value)
-            ? new Stream\LazyOpenStream($value, 'w')
-            : Stream\create($value));
-    }
-
-    /**
-     * 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.
-     * Array key strings that start with CURL that have a matching constant
-     * value will be automatically converted to the matching constant.
-     *
-     * @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)
-    {
-        unset($config['body_as_string']);
-        $curlOptions = [];
-
-        // Map curl constant strings to defined values
-        foreach ($config as $key => $value) {
-            if (defined($key) && substr($key, 0, 4) === 'CURL') {
-                $key = constant($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;
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/MultiAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/MultiAdapter.php
deleted file mode 100644
index 9b2da4d..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/MultiAdapter.php
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\AdapterInterface;
-use GuzzleHttp\Adapter\ParallelAdapterInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\AdapterException;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactoryInterface;
-
-/**
- * HTTP adapter that uses cURL multi as a transport layer
- *
- * When using the CurlAdapter, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of a request's configuration options.
- *
- * In addition to being able to supply configuration options via the curl
- * request config, you can also specify the select_timeout variable using the
- * `GUZZLE_CURL_SELECT_TIMEOUT` environment variable.
- */
-class MultiAdapter implements AdapterInterface, ParallelAdapterInterface
-{
-    const ERROR_STR = 'See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of cURL errors';
-    const ENV_SELECT_TIMEOUT = 'GUZZLE_CURL_SELECT_TIMEOUT';
-
-    /** @var CurlFactory */
-    private $curlFactory;
-
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-
-    /** @var array Array of curl multi handles */
-    private $multiHandles = [];
-
-    /** @var array Array of curl multi handles */
-    private $multiOwned = [];
-
-    /** @var double */
-    private $selectTimeout;
-
-    /**
-     * Accepts an associative array of options:
-     *
-     * - handle_factory: Optional callable factory used to create cURL handles.
-     *   The callable is invoked with the following arguments:
-     *   TransactionInterface, MessageFactoryInterface, and an optional cURL
-     *   handle to modify. The factory method must then return a cURL resource.
-     * - select_timeout: Specify a float in seconds to use for a
-     *   curl_multi_select timeout.
-     *
-     * @param MessageFactoryInterface $messageFactory
-     * @param array $options Array of options to use with the adapter:
-     */
-    public function __construct(
-        MessageFactoryInterface $messageFactory,
-        array $options = []
-    ) {
-        $this->messageFactory = $messageFactory;
-        $this->curlFactory = isset($options['handle_factory'])
-            ? $options['handle_factory']
-            : new CurlFactory();
-
-        if (isset($options['select_timeout'])) {
-            $this->selectTimeout = $options['select_timeout'];
-        } elseif (isset($_SERVER[self::ENV_SELECT_TIMEOUT])) {
-            $this->selectTimeout = $_SERVER[self::ENV_SELECT_TIMEOUT];
-        } else {
-            $this->selectTimeout = 1;
-        }
-    }
-
-    public function __destruct()
-    {
-        foreach ($this->multiHandles as $handle) {
-            if (is_resource($handle)) {
-                curl_multi_close($handle);
-            }
-        }
-    }
-
-    /**
-     * Throw an exception for a cURL multi response
-     *
-     * @param int $code Curl response code
-     * @throws AdapterException
-     */
-    public static function throwMultiError($code)
-    {
-        $buffer = function_exists('curl_multi_strerror')
-            ? curl_multi_strerror($code)
-            : self::ERROR_STR;
-
-        throw new AdapterException(sprintf('cURL error %s: %s', $code, $buffer));
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        $context = new BatchContext($this->checkoutMultiHandle(), true);
-        $this->addHandle($transaction, $context);
-        $this->perform($context);
-
-        return $transaction->getResponse();
-    }
-
-    public function sendAll(\Iterator $transactions, $parallel)
-    {
-        $context = new BatchContext(
-            $this->checkoutMultiHandle(),
-            false,
-            $transactions
-        );
-
-        foreach (new \LimitIterator($transactions, 0, $parallel) as $trans) {
-            $this->addHandle($trans, $context);
-        }
-
-        $this->perform($context);
-    }
-
-    private function perform(BatchContext $context)
-    {
-        // The first curl_multi_select often times out no matter what, but is
-        // usually required for fast transfers.
-        $active = false;
-        $multi = $context->getMultiHandle();
-
-        do {
-            do {
-                $mrc = curl_multi_exec($multi, $active);
-            } while ($mrc === CURLM_CALL_MULTI_PERFORM);
-
-            if ($mrc != CURLM_OK) {
-                self::throwMultiError($mrc);
-            }
-
-            $this->processMessages($context);
-
-            if ($active &&
-                curl_multi_select($multi, $this->selectTimeout) === -1
-            ) {
-                // Perform a usleep if a select returns -1.
-                // See: https://bugs.php.net/bug.php?id=61141
-                usleep(250);
-            }
-
-        } while ($context->isActive() || $active);
-
-        $this->releaseMultiHandle($multi);
-    }
-
-    private function processMessages(BatchContext $context)
-    {
-        $multi = $context->getMultiHandle();
-
-        while ($done = curl_multi_info_read($multi)) {
-            $transaction = $context->findTransaction($done['handle']);
-            $this->processResponse($transaction, $done, $context);
-            // Add the next transaction if there are more in the queue
-            if ($next = $context->nextPending()) {
-                $this->addHandle($next, $context);
-            }
-        }
-    }
-
-    private function processResponse(
-        TransactionInterface $transaction,
-        array $curl,
-        BatchContext $context
-    ) {
-        $info = $context->removeTransaction($transaction);
-
-        try {
-            if (!$this->isCurlException($transaction, $curl, $context, $info) &&
-                $this->validateResponseWasSet($transaction, $context)
-            ) {
-                RequestEvents::emitComplete($transaction, $info);
-            }
-        } catch (RequestException $e) {
-            $this->throwException($e, $context);
-        }
-    }
-
-    private function addHandle(
-        TransactionInterface $transaction,
-        BatchContext $context
-    ) {
-        try {
-            RequestEvents::emitBefore($transaction);
-            // Only transfer if the request was not intercepted
-            if (!$transaction->getResponse()) {
-                $factory = $this->curlFactory;
-                $context->addTransaction(
-                    $transaction,
-                    $factory($transaction, $this->messageFactory)
-                );
-            }
-        } catch (RequestException $e) {
-            $this->throwException($e, $context);
-        }
-    }
-
-    private function isCurlException(
-        TransactionInterface $transaction,
-        array $curl,
-        BatchContext $context,
-        array $info
-    ) {
-        if (CURLM_OK == $curl['result'] ||
-            CURLM_CALL_MULTI_PERFORM == $curl['result']
-        ) {
-            return false;
-        }
-
-        $request = $transaction->getRequest();
-        try {
-            // Send curl stats along if they are available
-            $stats = ['curl_result' => $curl['result']] + $info;
-            RequestEvents::emitError(
-                $transaction,
-                new RequestException(
-                    sprintf(
-                        '[curl] (#%s) %s [url] %s',
-                        $curl['result'],
-                        function_exists('curl_strerror')
-                            ? curl_strerror($curl['result'])
-                            : self::ERROR_STR,
-                        $request->getUrl()
-                    ),
-                    $request
-                ),
-                $stats
-            );
-        } catch (RequestException $e) {
-            $this->throwException($e, $context);
-        }
-
-        return true;
-    }
-
-    private function throwException(RequestException $e, BatchContext $context)
-    {
-        if ($context->throwsExceptions()) {
-            $this->releaseMultiHandle($context->getMultiHandle());
-            throw $e;
-        }
-    }
-
-    /**
-     * Returns a curl_multi handle from the cache or creates a new one
-     *
-     * @return resource
-     */
-    private function checkoutMultiHandle()
-    {
-        // Find an unused handle in the cache
-        $key = array_search(false, $this->multiOwned, true);
-        if (false !== $key) {
-            $this->multiOwned[$key] = true;
-            return $this->multiHandles[$key];
-        }
-
-        // Add a new handle
-        $handle = curl_multi_init();
-        $id = (int) $handle;
-        $this->multiHandles[$id] = $handle;
-        $this->multiOwned[$id] = true;
-
-        return $handle;
-    }
-
-    /**
-     * Releases a curl_multi handle back into the cache and removes excess cache
-     *
-     * @param resource $handle Curl multi handle to remove
-     */
-    private function releaseMultiHandle($handle)
-    {
-        $id = (int) $handle;
-
-        if (count($this->multiHandles) <= 3) {
-            $this->multiOwned[$id] = false;
-        } else {
-            // Prune excessive handles
-            curl_multi_close($this->multiHandles[$id]);
-            unset($this->multiHandles[$id], $this->multiOwned[$id]);
-        }
-    }
-
-    /**
-     * 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.
-     *
-     * @param TransactionInterface $transaction
-     * @param BatchContext         $context
-     *
-     * @return bool Returns true if it's OK, and false if it failed.
-     * @throws \GuzzleHttp\Exception\RequestException If it failed and cannot
-     *                                                recover.
-     */
-    private function validateResponseWasSet(
-        TransactionInterface $transaction,
-        BatchContext $context
-    ) {
-        if ($transaction->getResponse()) {
-            return true;
-        }
-
-        $body = $transaction->getRequest()->getBody();
-
-        if (!$body) {
-            // This is weird and should probably never happen.
-            RequestEvents::emitError(
-                $transaction,
-                new RequestException(
-                    'No response was received for a request with no body. This'
-                    . ' could mean that you are saturating your network.',
-                    $transaction->getRequest()
-                )
-            );
-        } elseif (!$body->isSeekable() || !$body->seek(0)) {
-            // Nothing we can do with this. Sorry!
-            RequestEvents::emitError(
-                $transaction,
-                new RequestException(
-                    'The connection was unexpectedly closed. The request would'
-                    . ' have been retried, but attempting to rewind the'
-                    . ' request body failed. Consider wrapping your request'
-                    . ' body in a CachingStream decorator to work around this'
-                    . ' issue if necessary.',
-                    $transaction->getRequest()
-                )
-            );
-        } else {
-            $this->retryFailedConnection($transaction, $context);
-        }
-
-        return false;
-    }
-
-    private function retryFailedConnection(
-        TransactionInterface $transaction,
-        BatchContext $context
-    ) {
-        // Add the request back to the batch to retry automatically.
-        $context->addTransaction(
-            $transaction,
-            call_user_func(
-                $this->curlFactory,
-                $transaction,
-                $this->messageFactory
-            )
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/RequestMediator.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/RequestMediator.php
deleted file mode 100644
index 19cbcfd..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Curl/RequestMediator.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter\Curl;
-
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Stream\StreamInterface;
-
-/**
- * Mediator between curl handles and request objects
- */
-class RequestMediator
-{
-    /** @var TransactionInterface */
-    private $transaction;
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-    private $statusCode;
-    private $reasonPhrase;
-    private $body;
-    private $protocolVersion;
-    private $headers;
-
-    /**
-     * @param TransactionInterface    $transaction    Transaction to populate
-     * @param MessageFactoryInterface $messageFactory Creates responses
-     */
-    public function __construct(
-        TransactionInterface $transaction,
-        MessageFactoryInterface $messageFactory
-    ) {
-        $this->transaction = $transaction;
-        $this->messageFactory = $messageFactory;
-    }
-
-    /**
-     * Set the body that will hold the response body
-     *
-     * @param StreamInterface $body Response body
-     */
-    public function setResponseBody(StreamInterface $body = null)
-    {
-        $this->body = $body;
-    }
-
-    /**
-     * Receive a response header from curl
-     *
-     * @param resource $curl   Curl handle
-     * @param string   $header Received header
-     *
-     * @return int
-     */
-    public function receiveResponseHeader($curl, $header)
-    {
-        static $normalize = ["\r", "\n"];
-        $length = strlen($header);
-        $header = str_replace($normalize, '', $header);
-
-        if (strpos($header, 'HTTP/') === 0) {
-            $startLine = explode(' ', $header, 3);
-            // Only download the body to a target body when a successful
-            // response is received.
-            if ($startLine[1][0] != '2') {
-                $this->body = null;
-            }
-            $this->statusCode = $startLine[1];
-            $this->reasonPhrase = isset($startLine[2]) ? $startLine[2] : null;
-            $this->protocolVersion = substr($startLine[0], -3);
-            $this->headers = [];
-        } elseif ($pos = strpos($header, ':')) {
-            $this->headers[substr($header, 0, $pos)][] = substr($header, $pos + 1);
-        } elseif ($header == '' && $this->statusCode >= 200) {
-            $response = $this->messageFactory->createResponse(
-                $this->statusCode,
-                $this->headers,
-                $this->body,
-                [
-                    'protocol_version' => $this->protocolVersion,
-                    'reason_phrase'    => $this->reasonPhrase
-                ]
-            );
-            $this->headers = $this->body = null;
-            $this->transaction->setResponse($response);
-            // Allows events to react before downloading any of the body
-            RequestEvents::emitHeaders($this->transaction);
-        }
-
-        return $length;
-    }
-
-    /**
-     * Write data to the response body of a request
-     *
-     * @param resource $curl
-     * @param string   $write
-     *
-     * @return int
-     */
-    public function writeResponseBody($curl, $write)
-    {
-        if (!($response = $this->transaction->getResponse())) {
-            return 0;
-        }
-
-        // Add a default body on the response if one was not found
-        if (!($body = $response->getBody())) {
-            $body = new Stream(fopen('php://temp', 'r+'));
-            $response->setBody($body);
-        }
-
-        return $body->write($write);
-    }
-
-    /**
-     * Read data from the request body and send it to curl
-     *
-     * @param resource $ch     Curl handle
-     * @param resource $fd     File descriptor
-     * @param int      $length Amount of data to read
-     *
-     * @return string
-     */
-    public function readRequestBody($ch, $fd, $length)
-    {
-        return (string) $this->transaction->getRequest()->getBody()->read($length);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/FakeParallelAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/FakeParallelAdapter.php
deleted file mode 100644
index 3026568..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/FakeParallelAdapter.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Exception\RequestException;
-
-/**
- * Decorates a regular AdapterInterface object and creates a
- * ParallelAdapterInterface object that sends multiple HTTP requests serially.
- */
-class FakeParallelAdapter implements ParallelAdapterInterface
-{
-    /** @var AdapterInterface */
-    private $adapter;
-
-    /**
-     * @param AdapterInterface $adapter Adapter used to send requests
-     */
-    public function __construct(AdapterInterface $adapter)
-    {
-        $this->adapter = $adapter;
-    }
-
-    public function sendAll(\Iterator $transactions, $parallel)
-    {
-        foreach ($transactions as $transaction) {
-            try {
-                $this->adapter->send($transaction);
-            } catch (RequestException $e) {
-                // no op for batch transaction
-            }
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/MockAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/MockAdapter.php
deleted file mode 100644
index 3e8020e..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/MockAdapter.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Adapter that can be used to associate mock responses with a transaction
- * while still emulating the event workflow of real adapters.
- */
-class MockAdapter implements AdapterInterface
-{
-    private $response;
-
-    /**
-     * @param ResponseInterface|callable $response Response to serve or function
-     *     to invoke that handles a transaction
-     */
-    public function __construct($response = null)
-    {
-        $this->setResponse($response);
-    }
-
-    /**
-     * Set the response that will be served by the adapter
-     *
-     * @param ResponseInterface|callable $response Response to serve or
-     *     function to invoke that handles a transaction
-     */
-    public function setResponse($response)
-    {
-        $this->response = $response;
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        RequestEvents::emitBefore($transaction);
-        if (!$transaction->getResponse()) {
-
-            // Read the request body if it is present
-            if ($transaction->getRequest()->getBody()) {
-                $transaction->getRequest()->getBody()->__toString();
-            }
-
-            $response = is_callable($this->response)
-                ? call_user_func($this->response, $transaction)
-                : $this->response;
-            if (!$response instanceof ResponseInterface) {
-                throw new \RuntimeException('Invalid mocked response');
-            }
-
-            $transaction->setResponse($response);
-            RequestEvents::emitHeaders($transaction);
-            RequestEvents::emitComplete($transaction);
-        }
-
-        return $transaction->getResponse();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/ParallelAdapterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/ParallelAdapterInterface.php
deleted file mode 100644
index 79a25b7..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/ParallelAdapterInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-/**
- * Adapter interface used to transfer multiple HTTP requests in parallel.
- *
- * Parallel adapters follow the same rules as AdapterInterface except that
- * RequestExceptions are never thrown in a parallel transfer and parallel
- * adapters do not return responses.
- */
-interface ParallelAdapterInterface
-{
-    /**
-     * Transfers multiple HTTP requests in parallel.
-     *
-     * RequestExceptions MUST not be thrown from a parallel transfer.
-     *
-     * @param \Iterator $transactions Iterator that yields TransactionInterface
-     * @param int       $parallel     Max number of requests to send in parallel
-     */
-    public function sendAll(\Iterator $transactions, $parallel);
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamAdapter.php
deleted file mode 100644
index 4cf434a..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamAdapter.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\AdapterException;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactoryInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Stream;
-
-/**
- * HTTP adapter that uses PHP's HTTP stream wrapper.
- *
- * When using the StreamAdapter, custom stream context options can be specified
- * using the **stream_context** option in a request's **config** option. The
- * structure of the "stream_context" option is an associative array where each
- * key is a transport name and each option is an associative array of options.
- */
-class StreamAdapter implements AdapterInterface
-{
-    /** @var MessageFactoryInterface */
-    private $messageFactory;
-
-    /**
-     * @param MessageFactoryInterface $messageFactory
-     */
-    public function __construct(MessageFactoryInterface $messageFactory)
-    {
-        $this->messageFactory = $messageFactory;
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        // HTTP/1.1 streams using the PHP stream wrapper require a
-        // Connection: close header. Setting here so that it is added before
-        // emitting the request.before_send event.
-        $request = $transaction->getRequest();
-        if ($request->getProtocolVersion() == '1.1' &&
-            !$request->hasHeader('Connection')
-        ) {
-            $transaction->getRequest()->setHeader('Connection', 'close');
-        }
-
-        RequestEvents::emitBefore($transaction);
-        if (!$transaction->getResponse()) {
-            $this->createResponse($transaction);
-            RequestEvents::emitComplete($transaction);
-        }
-
-        return $transaction->getResponse();
-    }
-
-    private function createResponse(TransactionInterface $transaction)
-    {
-        $request = $transaction->getRequest();
-        $stream = $this->createStream($request, $http_response_header);
-
-        if (!$request->getConfig()['stream']) {
-            $stream = $this->getSaveToBody($request, $stream);
-        }
-
-        // Track the response headers of the request
-        $this->createResponseObject($http_response_header, $transaction, $stream);
-    }
-
-    /**
-     * Drain the steam into the destination stream
-     */
-    private function getSaveToBody(RequestInterface $request, $stream)
-    {
-        if ($saveTo = $request->getConfig()['save_to']) {
-            // Stream the response into the destination stream
-            $saveTo = is_string($saveTo)
-                ? new Stream\LazyOpenStream($saveTo, 'r+')
-                : Stream\create($saveTo);
-        } else {
-            // Stream into the default temp stream
-            $saveTo = Stream\create();
-        }
-
-        while (!feof($stream)) {
-            $saveTo->write(fread($stream, 8096));
-        }
-
-        fclose($stream);
-        $saveTo->seek(0);
-
-        return $saveTo;
-    }
-
-    private function createResponseObject(
-        array $headers,
-        TransactionInterface $transaction,
-        $stream
-    ) {
-        $parts = explode(' ', array_shift($headers), 3);
-        $options = ['protocol_version' => substr($parts[0], -3)];
-        if (isset($parts[2])) {
-            $options['reason_phrase'] = $parts[2];
-        }
-
-        $response = $this->messageFactory->createResponse(
-            $parts[1],
-            $this->headersFromLines($headers),
-            $stream,
-            $options
-        );
-
-        $transaction->setResponse($response);
-        RequestEvents::emitHeaders($transaction);
-
-        return $response;
-    }
-
-    private function headersFromLines(array $lines)
-    {
-        $responseHeaders = [];
-
-        foreach ($lines as $line) {
-            $headerParts = explode(':', $line, 2);
-            $responseHeaders[$headerParts[0]][] = isset($headerParts[1])
-                ? trim($headerParts[1])
-                : '';
-        }
-
-        return $responseHeaders;
-    }
-
-    /**
-     * Create a resource and check to ensure it was created successfully
-     *
-     * @param callable         $callback Callable that returns stream resource
-     * @param RequestInterface $request  Request used when throwing exceptions
-     * @param array            $options  Options used when throwing exceptions
-     *
-     * @return resource
-     * @throws RequestException on error
-     */
-    private function createResource(callable $callback, RequestInterface $request, $options)
-    {
-        // Turn off error reporting while we try to initiate the request
-        $level = error_reporting(0);
-        $resource = call_user_func($callback);
-        error_reporting($level);
-
-        // If the resource could not be created, then grab the last error and
-        // throw an exception.
-        if (!is_resource($resource)) {
-            $message = 'Error creating resource. [url] ' . $request->getUrl() . ' ';
-            if (isset($options['http']['proxy'])) {
-                $message .= "[proxy] {$options['http']['proxy']} ";
-            }
-            foreach ((array) error_get_last() as $key => $value) {
-                $message .= "[{$key}] {$value} ";
-            }
-            throw new RequestException(trim($message), $request);
-        }
-
-        return $resource;
-    }
-
-    /**
-     * Create the stream for the request with the context options.
-     *
-     * @param RequestInterface $request              Request being sent
-     * @param mixed            $http_response_header Populated by stream wrapper
-     *
-     * @return resource
-     */
-    private function createStream(
-        RequestInterface $request,
-        &$http_response_header
-    ) {
-        static $methods;
-        if (!$methods) {
-            $methods = array_flip(get_class_methods(__CLASS__));
-        }
-
-        $params = [];
-        $options = $this->getDefaultOptions($request);
-        foreach ($request->getConfig()->toArray() as $key => $value) {
-            $method = "add_{$key}";
-            if (isset($methods[$method])) {
-                $this->{$method}($request, $options, $value, $params);
-            }
-        }
-
-        $this->applyCustomOptions($request, $options);
-        $context = $this->createStreamContext($request, $options, $params);
-
-        return $this->createStreamResource(
-            $request,
-            $options,
-            $context,
-            $http_response_header
-        );
-    }
-
-    private function getDefaultOptions(RequestInterface $request)
-    {
-        $headers = '';
-        foreach ($request->getHeaders() as $name => $values) {
-            $headers .= $name . ': ' . implode(', ', $values) . "\r\n";
-        }
-
-        return [
-            'http' => [
-                'method'           => $request->getMethod(),
-                'header'           => trim($headers),
-                'protocol_version' => $request->getProtocolVersion(),
-                'ignore_errors'    => true,
-                'follow_location'  => 0,
-                'content'          => (string) $request->getBody()
-            ]
-        ];
-    }
-
-    private function add_proxy(RequestInterface $request, &$options, $value, &$params)
-    {
-        if (!is_array($value)) {
-            $options['http']['proxy'] = $value;
-            $options['http']['request_fulluri'] = true;
-        } else {
-            $scheme = $request->getScheme();
-            if (isset($value[$scheme])) {
-                $options['http']['proxy'] = $value[$scheme];
-                $options['http']['request_fulluri'] = true;
-            }
-        }
-    }
-
-    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 || is_string($value)) {
-            $options['http']['verify_peer'] = true;
-            if ($value !== true) {
-                if (!file_exists($value)) {
-                    throw new \RuntimeException("SSL certificate authority file not found: {$value}");
-                }
-                $options['http']['allow_self_signed'] = true;
-                $options['http']['cafile'] = $value;
-            }
-        } elseif ($value === false) {
-            $options['http']['verify_peer'] = false;
-        }
-    }
-
-    private function add_cert(RequestInterface $request, &$options, $value, &$params)
-    {
-        if (is_array($value)) {
-            $options['http']['passphrase'] = $value[1];
-            $value = $value[0];
-        }
-
-        if (!file_exists($value)) {
-            throw new \RuntimeException("SSL certificate not found: {$value}");
-        }
-
-        $options['http']['local_cert'] = $value;
-    }
-
-    private function add_debug(RequestInterface $request, &$options, $value, &$params)
-    {
-        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'];
-
-        if (!is_resource($value)) {
-            $value = fopen('php://output', 'w');
-        }
-
-        $params['notification'] = function () use ($request, $value, $map, $args) {
-            $passed = func_get_args();
-            $code = array_shift($passed);
-            fprintf($value, '<%s> [%s] ', $request->getUrl(), $map[$code]);
-            foreach (array_filter($passed) as $i => $v) {
-                fwrite($value, $args[$i] . ': "' . $v . '" ');
-            }
-            fwrite($value, "\n");
-        };
-    }
-
-    private function applyCustomOptions(
-        RequestInterface $request,
-        array &$options
-    ) {
-        // Overwrite any generated options with custom options
-        if ($custom = $request->getConfig()['stream_context']) {
-            if (!is_array($custom)) {
-                throw new AdapterException('stream_context must be an array');
-            }
-            $options = array_replace_recursive($options, $custom);
-        }
-    }
-
-    private function createStreamContext(
-        RequestInterface $request,
-        array $options,
-        array $params
-    ) {
-        return $this->createResource(
-            function () use ($request, $options, $params) {
-                return stream_context_create($options, $params);
-            },
-            $request,
-            $options
-        );
-    }
-
-    private function createStreamResource(
-        RequestInterface $request,
-        array $options,
-        $context,
-        &$http_response_header
-    ) {
-        $url = $request->getUrl();
-        // Add automatic gzip decompression
-        if (strpos($request->getHeader('Accept-Encoding'), 'gzip') !== false) {
-            $url = 'compress.zlib://' . $url;
-        }
-
-        return $this->createResource(
-            function () use ($url, &$http_response_header, $context) {
-                if (false === strpos($url, 'http')) {
-                    trigger_error("URL is invalid: {$url}", E_USER_WARNING);
-                    return null;
-                }
-                return fopen($url, 'r', null, $context);
-            },
-            $request,
-            $options
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php
deleted file mode 100644
index 128eb1d..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-/**
- * Sends streaming requests to a streaming compatible adapter while sending all
- * other requests to a default adapter.
- *
- * This, for example, could be useful for taking advantage of the performance
- * benefits of the CurlAdapter while still supporting true streaming through
- * the StreamAdapter.
- */
-class StreamingProxyAdapter implements AdapterInterface
-{
-    private $defaultAdapter;
-    private $streamingAdapter;
-
-    /**
-     * @param AdapterInterface $defaultAdapter   Adapter used for non-streaming responses
-     * @param AdapterInterface $streamingAdapter Adapter used for streaming responses
-     */
-    public function __construct(
-        AdapterInterface $defaultAdapter,
-        AdapterInterface $streamingAdapter
-    ) {
-        $this->defaultAdapter = $defaultAdapter;
-        $this->streamingAdapter = $streamingAdapter;
-    }
-
-    public function send(TransactionInterface $transaction)
-    {
-        return $transaction->getRequest()->getConfig()['stream']
-            ? $this->streamingAdapter->send($transaction)
-            : $this->defaultAdapter->send($transaction);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/Transaction.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/Transaction.php
deleted file mode 100644
index 74bb6b4..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/Transaction.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\ClientInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-
-class Transaction implements TransactionInterface
-{
-    /** @var ClientInterface */
-    private $client;
-    /** @var RequestInterface */
-    private $request;
-    /** @var ResponseInterface */
-    private $response;
-
-    /**
-     * @param ClientInterface  $client  Client that is used to send the requests
-     * @param RequestInterface $request
-     */
-    public function __construct(
-        ClientInterface $client,
-        RequestInterface $request
-    ) {
-        $this->client = $client;
-        $this->request = $request;
-    }
-
-    public function getRequest()
-    {
-        return $this->request;
-    }
-
-    public function getResponse()
-    {
-        return $this->response;
-    }
-
-    public function setResponse(ResponseInterface $response)
-    {
-        $this->response = $response;
-    }
-
-    public function getClient()
-    {
-        return $this->client;
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionInterface.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionInterface.php
deleted file mode 100644
index b9bf50c..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionInterface.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\ClientInterface;
-use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Message\ResponseInterface;
-
-/**
- * Represents a transactions that consists of a request, response, and client
- */
-interface TransactionInterface
-{
-    /**
-     * @return RequestInterface
-     */
-    public function getRequest();
-
-    /**
-     * @return ResponseInterface|null
-     */
-    public function getResponse();
-
-    /**
-     * Set a response on the transaction
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function setResponse(ResponseInterface $response);
-
-    /**
-     * @return ClientInterface
-     */
-    public function getClient();
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionIterator.php b/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionIterator.php
deleted file mode 100644
index e63fd58..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Adapter/TransactionIterator.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Adapter;
-
-use GuzzleHttp\ClientInterface;
-use GuzzleHttp\Event\ListenerAttacherTrait;
-use GuzzleHttp\Message\RequestInterface;
-
-/**
- * Converts a sequence of request objects into a transaction.
- * @internal
- */
-class TransactionIterator implements \Iterator
-{
-    use ListenerAttacherTrait;
-
-    /** @var \Iterator */
-    private $source;
-
-    /** @var ClientInterface */
-    private $client;
-
-    /** @var array Listeners to attach to each request */
-    private $eventListeners = [];
-
-    public function __construct(
-        $source,
-        ClientInterface $client,
-        array $options
-    ) {
-        $this->client = $client;
-        $this->eventListeners = $this->prepareListeners(
-            $options,
-            ['before', 'complete', 'error']
-        );
-        if ($source instanceof \Iterator) {
-            $this->source = $source;
-        } elseif (is_array($source)) {
-            $this->source = new \ArrayIterator($source);
-        } else {
-            throw new \InvalidArgumentException('Expected an Iterator or array');
-        }
-    }
-
-    public function current()
-    {
-        $request = $this->source->current();
-        if (!$request instanceof RequestInterface) {
-            throw new \RuntimeException('All must implement RequestInterface');
-        }
-
-        $this->attachListeners($request, $this->eventListeners);
-
-        return new Transaction($this->client, $request);
-    }
-
-    public function next()
-    {
-        $this->source->next();
-    }
-
-    public function key()
-    {
-        return $this->source->key();
-    }
-
-    public function valid()
-    {
-        return $this->source->valid();
-    }
-
-    public function rewind() {}
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/BatchResults.php b/core/vendor/guzzlehttp/guzzle/src/BatchResults.php
new file mode 100644
index 0000000..e5af433
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/BatchResults.php
@@ -0,0 +1,148 @@
+<?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 898157e..5ddc872 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Client.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Client.php
@@ -1,21 +1,18 @@
 <?php
-
 namespace GuzzleHttp;
 
-use GuzzleHttp\Adapter\Curl\MultiAdapter;
 use GuzzleHttp\Event\HasEmitterTrait;
-use GuzzleHttp\Adapter\FakeParallelAdapter;
-use GuzzleHttp\Adapter\ParallelAdapterInterface;
-use GuzzleHttp\Adapter\AdapterInterface;
-use GuzzleHttp\Adapter\StreamAdapter;
-use GuzzleHttp\Adapter\StreamingProxyAdapter;
-use GuzzleHttp\Adapter\Curl\CurlAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Adapter\TransactionIterator;
-use GuzzleHttp\Exception\RequestException;
 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\CurlMultiAdapter;
+use GuzzleHttp\Ring\Client\CurlAdapter;
+use GuzzleHttp\Ring\Client\StreamAdapter;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\FutureInterface;
+use GuzzleHttp\Exception\RequestException;
 
 /**
  * HTTP client
@@ -24,23 +21,18 @@ class Client implements ClientInterface
 {
     use HasEmitterTrait;
 
-    const DEFAULT_CONCURRENCY = 25;
-
     /** @var MessageFactoryInterface Request factory used by the client */
     private $messageFactory;
 
-    /** @var AdapterInterface */
-    private $adapter;
-
-    /** @var ParallelAdapterInterface */
-    private $parallelAdapter;
-
     /** @var Url Base URL of the client */
     private $baseUrl;
 
     /** @var array Default request options */
     private $defaults;
 
+    /** @var Fsm Request state machine */
+    private $fsm;
+
     /**
      * Clients accept an array of constructor parameters.
      *
@@ -65,20 +57,75 @@ class Client implements ClientInterface
      *       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.
-     *     - adapter: Adapter used to transfer requests
-     *     - parallel_adapter: Adapter used to transfer requests in parallel
+     *     - adapter: callable adapter 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.
      */
     public function __construct(array $config = [])
     {
         $this->configureBaseUrl($config);
         $this->configureDefaults($config);
-        $this->configureAdapter($config);
+
         if (isset($config['emitter'])) {
             $this->emitter = $config['emitter'];
         }
+
+        $this->messageFactory = isset($config['message_factory'])
+            ? $config['message_factory']
+            : new MessageFactory();
+        $adapter = isset($config['adapter'])
+            ? $config['adapter']
+            : self::getDefaultAdapter();
+        $this->fsm = isset($config['fsm'])
+            ? $config['fsm']
+            : $this->createDefaultFsm($adapter, $this->messageFactory);
+    }
+
+    /**
+     * Create a default adapter to use based on the environment
+     *
+     * @throws \RuntimeException if no viable adapter is available.
+     */
+    public static function getDefaultAdapter()
+    {
+        $default = $future = $streaming = null;
+
+        if (extension_loaded('curl')) {
+            $config = [
+                'select_timepout' => isset($_SERVER['GUZZLE_CURL_SELECT_TIMEOUT'])
+                    ? $_SERVER['GUZZLE_CURL_SELECT_TIMEOUT'] : 1
+            ];
+            if (isset($_SERVER['GUZZLE_CURL_MAX_HANDLES'])) {
+                $config['max_handles'] = $_SERVER['GUZZLE_CURL_MAX_HANDLES'];
+            }
+            $future = new CurlMultiAdapter($config);
+            if (function_exists('curl_reset')) {
+                $default = new CurlAdapter();
+            }
+        }
+
+        if (ini_get('allow_url_fopen')) {
+            $streaming = new StreamAdapter();
+        }
+
+        if (!($default = ($default ?: $future) ?: $streaming)) {
+            throw new \RuntimeException('Guzzle requires cURL, the '
+                . 'allow_url_fopen ini setting, or a custom HTTP adapter.');
+        }
+
+        $handler = $default;
+
+        if ($streaming && $streaming !== $default) {
+            $handler = Middleware::wrapStreaming($default, $streaming);
+        }
+
+        if ($future) {
+            $handler = Middleware::wrapFuture($handler, $future);
+        }
+
+        return $handler;
     }
 
     /**
@@ -100,26 +147,16 @@ public static function getDefaultUserAgent()
         return $defaultAgent;
     }
 
-    public function __call($name, $arguments)
-    {
-        return \GuzzleHttp\deprecation_proxy(
-            $this,
-            $name,
-            $arguments,
-            ['getEventDispatcher' => 'getEmitter']
-        );
-    }
-
     public function getDefaultOption($keyOrPath = null)
     {
         return $keyOrPath === null
             ? $this->defaults
-            : \GuzzleHttp\get_path($this->defaults, $keyOrPath);
+            : Utils::getPath($this->defaults, $keyOrPath);
     }
 
     public function setDefaultOption($keyOrPath, $value)
     {
-        \GuzzleHttp\set_path($this->defaults, $keyOrPath, $value);
+        Utils::setPath($this->defaults, $keyOrPath, $value);
     }
 
     public function getBaseUrl()
@@ -129,9 +166,7 @@ public function getBaseUrl()
 
     public function createRequest($method, $url = null, array $options = [])
     {
-        // Merge in default options
-        $options = array_replace_recursive($this->defaults, $options);
-
+        $headers = $this->mergeDefaults($options);
         // Use a clone of the client's emitter
         $options['config']['emitter'] = clone $this->getEmitter();
 
@@ -141,6 +176,15 @@ public function createRequest($method, $url = null, array $options = [])
             $options
         );
 
+        // Merge in default headers
+        if ($headers) {
+            foreach ($headers as $key => $value) {
+                if (!$request->hasHeader($key)) {
+                    $request->setHeader($key, $value);
+                }
+            }
+        }
+
         return $request;
     }
 
@@ -181,32 +225,36 @@ public function options($url = null, array $options = [])
 
     public function send(RequestInterface $request)
     {
-        $transaction = new Transaction($this, $request);
+        $trans = new Transaction($this, $request);
+        $needsFuture = $request->getConfig()->get('future');
+
+        // Return a future if one was requested.
         try {
-            if ($response = $this->adapter->send($transaction)) {
-                return $response;
-            }
-            throw new \LogicException('No response was associated with the transaction');
-        } catch (RequestException $e) {
-            throw $e;
+            $this->fsm->run($trans);
+            $response = $trans->response;
         } catch (\Exception $e) {
-            // Wrap exceptions in a RequestException to adhere to the interface
-            throw new RequestException($e->getMessage(), $request, null, $e);
+            if (!$needsFuture) {
+                throw $e;
+            }
+            // Wrap the exception if the user asked for a future.
+            return new FutureResponse(function () use ($e) {
+                throw $e;
+            });
         }
-    }
 
-    public function sendAll($requests, array $options = [])
-    {
-        if (!($requests instanceof TransactionIterator)) {
-            $requests = new TransactionIterator($requests, $this, $options);
+        if ($response instanceof FutureInterface) {
+            // Don't deref cancelled responses here.
+            if (!$response->cancelled() && !$needsFuture) {
+                $response = $response->deref();
+            }
+        } elseif ($needsFuture) {
+            // Create a future if one was requested
+            $response = new FutureResponse(function () use ($response) {
+                return $response;
+            });
         }
 
-        $this->parallelAdapter->sendAll(
-            $requests,
-            isset($options['parallel'])
-                ? $options['parallel']
-                : self::DEFAULT_CONCURRENCY
-        );
+        return $response;
     }
 
     /**
@@ -219,17 +267,10 @@ protected function getDefaultOptions()
         $settings = [
             'allow_redirects' => true,
             'exceptions'      => true,
-            'verify'          => __DIR__ . '/cacert.pem'
+            'decode_content'  => true,
+            'verify'          => true
         ];
 
-        // Use the bundled cacert if it is a regular file, or set to true if
-        // using a phar file (because curL and the stream wrapper can't read
-        // cacerts from the phar stream wrapper). Favor the ini setting over
-        // the system's cacert.
-        if (substr(__FILE__, 0, 7) == 'phar://') {
-            $settings['verify'] = ini_get('openssl.cafile') ?: true;
-        }
-
         // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set
         if (isset($_SERVER['HTTP_PROXY'])) {
             $settings['proxy']['http'] = $_SERVER['HTTP_PROXY'];
@@ -242,6 +283,31 @@ protected function getDefaultOptions()
         return $settings;
     }
 
+    private function createFutureResponse(
+        Transaction $trans,
+        FutureInterface $response
+    ) {
+        // Create a future response that's hooked up to the ring future.
+        return new FutureResponse(
+            // Dereference function
+            function () use ($response, $trans) {
+                $response->deref();
+                // Throw an exception if present. You need to remove transaction
+                // exceptions to prevent them from being thrown.
+                if ($trans->exception) {
+                    throw RequestException::wrapException($trans->request, $trans->exception);
+                } elseif ($trans->response) {
+                    // Return the response if one was set on the transaction.
+                    return $trans->response;
+                }
+                // If we know that the events were fired, then there's a problem.
+                throw RingBridge::getNoRingResponseException($trans->request);
+            },
+            // Cancel function. Just proxy to the underlying future.
+            [$response, 'cancel']
+        );
+    }
+
     /**
      * Expand a URI template and inherit from the base URL if it's relative
      *
@@ -251,64 +317,31 @@ protected function getDefaultOptions()
      */
     private function buildUrl($url)
     {
+        // URI template (absolute or relative)
         if (!is_array($url)) {
-            if (strpos($url, '://')) {
-                return (string) $url;
-            }
-            return (string) $this->baseUrl->combine($url);
-        } elseif (strpos($url[0], '://')) {
-            return \GuzzleHttp\uri_template($url[0], $url[1]);
+            return strpos($url, '://')
+                ? (string) $url
+                : (string) $this->baseUrl->combine($url);
         }
 
+        // Absolute URL
+        if (strpos($url[0], '://')) {
+            return Utils::uriTemplate($url[0], $url[1]);
+        }
+
+        // Combine the relative URL with the base URL
         return (string) $this->baseUrl->combine(
-            \GuzzleHttp\uri_template($url[0], $url[1])
+            Utils::uriTemplate($url[0], $url[1])
         );
     }
 
-    /**
-     * Get a default parallel adapter to use based on the environment
-     *
-     * @return ParallelAdapterInterface
-     */
-    private function getDefaultParallelAdapter()
-    {
-        return extension_loaded('curl')
-            ? new MultiAdapter($this->messageFactory)
-            : new FakeParallelAdapter($this->adapter);
-    }
-
-    /**
-     * Create a default adapter to use based on the environment
-     * @throws \RuntimeException
-     */
-    private function getDefaultAdapter()
-    {
-        if (extension_loaded('curl')) {
-            $this->parallelAdapter = new MultiAdapter($this->messageFactory);
-            $this->adapter = function_exists('curl_reset')
-                ? new CurlAdapter($this->messageFactory)
-                : $this->parallelAdapter;
-            if (ini_get('allow_url_fopen')) {
-                $this->adapter = new StreamingProxyAdapter(
-                    $this->adapter,
-                    new StreamAdapter($this->messageFactory)
-                );
-            }
-        } elseif (ini_get('allow_url_fopen')) {
-            $this->adapter = new StreamAdapter($this->messageFactory);
-        } else {
-            throw new \RuntimeException('Guzzle requires cURL, the '
-                . 'allow_url_fopen ini setting, or a custom HTTP adapter.');
-        }
-    }
-
     private function configureBaseUrl(&$config)
     {
         if (!isset($config['base_url'])) {
             $this->baseUrl = new Url('', '');
         } elseif (is_array($config['base_url'])) {
             $this->baseUrl = Url::fromString(
-                \GuzzleHttp\uri_template(
+                Utils::uriTemplate(
                     $config['base_url'][0],
                     $config['base_url'][1]
                 )
@@ -335,30 +368,58 @@ private function configureDefaults($config)
             $this->defaults['headers'] = [
                 'User-Agent' => static::getDefaultUserAgent()
             ];
-        } elseif (!isset(array_change_key_case($this->defaults['headers'])['user-agent'])) {
+        } 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();
         }
     }
 
-    private function configureAdapter(&$config)
+    /**
+     * Merges default options into the array passed by reference and returns
+     * an array of headers that need to be merged in after the request is
+     * created.
+     *
+     * @param array $options Options to modify by reference
+     *
+     * @return array|null
+     */
+    private function mergeDefaults(&$options)
     {
-        if (isset($config['message_factory'])) {
-            $this->messageFactory = $config['message_factory'];
-        } else {
-            $this->messageFactory = new MessageFactory();
-        }
-        if (isset($config['adapter'])) {
-            $this->adapter = $config['adapter'];
-        } else {
-            $this->getDefaultAdapter();
-        }
-        // If no parallel adapter was explicitly provided and one was not
-        // defaulted when creating the default adapter, then create one now.
-        if (isset($config['parallel_adapter'])) {
-            $this->parallelAdapter = $config['parallel_adapter'];
-        } elseif (!$this->parallelAdapter) {
-            $this->parallelAdapter = $this->getDefaultParallelAdapter();
+        // Merging optimization for when no headers are present
+        if (!isset($options['headers']) || !isset($this->defaults['headers'])) {
+            $options = array_replace_recursive($this->defaults, $options);
+            return null;
         }
+
+        $defaults = $this->defaults;
+        unset($defaults['headers']);
+        $options = array_replace_recursive($defaults, $options);
+
+        return $this->defaults['headers'];
+    }
+
+    private function createDefaultFsm(
+        callable $adapter,
+        MessageFactoryInterface $mf
+    ) {
+        return new RequestFsm(function (Transaction $trans) use ($adapter, $mf) {
+            // Create a Guzzle-Ring request and send it.
+            $request = RingBridge::prepareRingRequest($trans, $mf, $this->fsm);
+            $response = $adapter($request);
+            // Future responses do not need to process right away, so set
+            // the response on the transaction to designate it as completed.
+            if ($response instanceof FutureInterface) {
+                $trans->response = $this->createFutureResponse($trans, $response);
+            }
+        });
+    }
+
+    /**
+     * @deprecated Use {@see GuzzleHttp\Pool} instead.
+     * @see GuzzleHttp\Pool
+     */
+    public function sendAll($requests, array $options = [])
+    {
+        Pool::send($this, $requests, $options);
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
index 9923d63..ccebc06 100644
--- a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php
@@ -1,19 +1,17 @@
 <?php
-
 namespace GuzzleHttp;
 
 use GuzzleHttp\Event\HasEmitterInterface;
 use GuzzleHttp\Message\RequestInterface;
 use GuzzleHttp\Message\ResponseInterface;
 use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Exception\AdapterException;
 
 /**
  * Client interface for sending HTTP requests
  */
 interface ClientInterface extends HasEmitterInterface
 {
-    const VERSION = '4.1.7';
+    const VERSION = '5.0.0';
 
     /**
      * Create and return a new {@see RequestInterface} object.
@@ -120,33 +118,6 @@ public function options($url = null, array $options = []);
     public function send(RequestInterface $request);
 
     /**
-     * Sends multiple requests in parallel.
-     *
-     * Exceptions are not thrown for failed requests. Callers are expected to
-     * register an "error" option to handle request errors OR directly register
-     * an event handler for the "error" event of a request's
-     * event emitter.
-     *
-     * The option values for 'before', 'after', and 'error' 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 array|\Iterator $requests Requests to send in parallel
-     * @param array           $options  Associative array of options
-     *     - parallel: (int) Maximum number of requests to send in parallel
-     *     - before: (callable|array) Receives a BeforeEvent
-     *     - after: (callable|array) Receives a CompleteEvent
-     *     - error: (callable|array) Receives a ErrorEvent
-     *
-     * @throws AdapterException When an error occurs in the HTTP adapter.
-     */
-    public function sendAll($requests, array $options = []);
-
-    /**
      * Get default request options of the client.
      *
      * @param string|null $keyOrPath The Path to a particular default request
diff --git a/core/vendor/guzzlehttp/guzzle/src/Collection.php b/core/vendor/guzzlehttp/guzzle/src/Collection.php
index bd66df6..4aabd20 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Collection.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Collection.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -50,14 +49,10 @@ public static function fromConfig(
 
     /**
      * Removes all key value pairs
-     *
-     * @return Collection
      */
     public function clear()
     {
         $this->data = [];
-
-        return $this;
     }
 
     /**
@@ -77,14 +72,10 @@ public function get($key)
      *
      * @param string $key   Key to set
      * @param mixed  $value Value to set
-     *
-     * @return Collection Returns a reference to the object
      */
     public function set($key, $value)
     {
         $this->data[$key] = $value;
-
-        return $this;
     }
 
     /**
@@ -94,8 +85,6 @@ public function set($key, $value)
      *
      * @param string $key   Key to add
      * @param mixed  $value Value to add to the key
-     *
-     * @return Collection Returns a reference to the object.
      */
     public function add($key, $value)
     {
@@ -106,22 +95,16 @@ public function add($key, $value)
         } else {
             $this->data[$key] = array($this->data[$key], $value);
         }
-
-        return $this;
     }
 
     /**
      * Remove a specific key value pair
      *
      * @param string $key A key to remove
-     *
-     * @return Collection
      */
     public function remove($key)
     {
         unset($this->data[$key]);
-
-        return $this;
     }
 
     /**
@@ -163,39 +146,29 @@ public function hasValue($value)
      * Replace the data of the object with the value of an array
      *
      * @param array $data Associative array of data
-     *
-     * @return Collection Returns a reference to the object
      */
     public function replace(array $data)
     {
         $this->data = $data;
-
-        return $this;
     }
 
     /**
      * Add and merge in a Collection or array of key value pair data.
      *
      * @param Collection|array $data Associative array of key value pair data
-     *
-     * @return Collection Returns a reference to the object.
      */
     public function merge($data)
     {
         foreach ($data as $key => $value) {
             $this->add($key, $value);
         }
-
-        return $this;
     }
 
     /**
-     * Over write key value pairs in this collection with all of the data from
+     * 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
-     *
-     * @return self
      */
     public function overwriteWith($data)
     {
@@ -208,8 +181,6 @@ public function overwriteWith($data)
                 $this->data[$key] = $value;
             }
         }
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
index 4134857..9348c2e 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
 use GuzzleHttp\Message\RequestInterface;
@@ -195,7 +194,7 @@ public function extractCookies(
         RequestInterface $request,
         ResponseInterface $response
     ) {
-        if ($cookieHeader = $response->getHeader('Set-Cookie', true)) {
+        if ($cookieHeader = $response->getHeaderAsArray('Set-Cookie')) {
             foreach ($cookieHeader as $cookie) {
                 $sc = SetCookie::fromString($cookie);
                 if (!$sc->getDomain()) {
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
index 6cafce8..4ea8567 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
 use GuzzleHttp\Message\RequestInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
index 1980a96..e431851 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
@@ -1,7 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
+use GuzzleHttp\Utils;
+
 /**
  * Persists non-session cookies using a JSON formatted file
  */
@@ -73,9 +74,9 @@ public function load($filename)
             // @codeCoverageIgnoreEnd
         }
 
-        $data = \GuzzleHttp\json_decode($json, true);
+        $data = Utils::jsonDecode($json, true);
         if (is_array($data)) {
-            foreach (\GuzzleHttp\json_decode($json, true) as $cookie) {
+            foreach (Utils::jsonDecode($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 2f708d7..71a02d5 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
@@ -1,7 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
+use GuzzleHttp\Utils;
+
 /**
  * Persists cookies in the client session
  */
@@ -53,7 +54,7 @@ protected function load()
             ? $_SESSION[$this->sessionKey]
             : null;
 
-        $data = \GuzzleHttp\json_decode($cookieJar, true);
+        $data = Utils::jsonDecode($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 76f6f8d..c3385b1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Cookie;
 
 use GuzzleHttp\ToArrayInterface;
@@ -120,14 +119,10 @@ public function getName()
      * Set the cookie name
      *
      * @param string $name Cookie name
-     *
-     * @return self
      */
     public function setName($name)
     {
         $this->data['Name'] = $name;
-
-        return $this;
     }
 
     /**
@@ -144,14 +139,10 @@ public function getValue()
      * Set the cookie value
      *
      * @param string $value Cookie value
-     *
-     * @return self
      */
     public function setValue($value)
     {
         $this->data['Value'] = $value;
-
-        return $this;
     }
 
     /**
@@ -168,14 +159,10 @@ public function getDomain()
      * Set the domain of the cookie
      *
      * @param string $domain
-     *
-     * @return self
      */
     public function setDomain($domain)
     {
         $this->data['Domain'] = $domain;
-
-        return $this;
     }
 
     /**
@@ -192,14 +179,10 @@ public function getPath()
      * Set the path of the cookie
      *
      * @param string $path Path of the cookie
-     *
-     * @return self
      */
     public function setPath($path)
     {
         $this->data['Path'] = $path;
-
-        return $this;
     }
 
     /**
@@ -216,14 +199,10 @@ public function getMaxAge()
      * Set the max-age of the cookie
      *
      * @param int $maxAge Max age of the cookie in seconds
-     *
-     * @return self
      */
     public function setMaxAge($maxAge)
     {
         $this->data['Max-Age'] = $maxAge;
-
-        return $this;
     }
 
     /**
@@ -240,16 +219,12 @@ public function getExpires()
      * Set the unix timestamp for which the cookie will expire
      *
      * @param int $timestamp Unix timestamp
-     *
-     * @return self
      */
     public function setExpires($timestamp)
     {
         $this->data['Expires'] = is_numeric($timestamp)
             ? (int) $timestamp
             : strtotime($timestamp);
-
-        return $this;
     }
 
     /**
@@ -266,14 +241,10 @@ public function getSecure()
      * Set whether or not the cookie is secure
      *
      * @param bool $secure Set to true or false if secure
-     *
-     * @return self
      */
     public function setSecure($secure)
     {
         $this->data['Secure'] = $secure;
-
-        return $this;
     }
 
     /**
@@ -290,14 +261,10 @@ public function getDiscard()
      * Set whether or not this is a session cookie
      *
      * @param bool $discard Set to true or false if this is a session cookie
-     *
-     * @return self
      */
     public function setDiscard($discard)
     {
         $this->data['Discard'] = $discard;
-
-        return $this;
     }
 
     /**
@@ -314,14 +281,10 @@ public function getHttpOnly()
      * Set whether or not this is an HTTP only cookie
      *
      * @param bool $httpOnly Set to true or false if this is HTTP only
-     *
-     * @return self
      */
     public function setHttpOnly($httpOnly)
     {
         $this->data['HttpOnly'] = $httpOnly;
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
index fa1453c..0d2f4db 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractEvent.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
index d188248..53383f4 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php
@@ -1,32 +1,34 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Adapter\TransactionInterface;
+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 TransactionInterface */
-    private $transaction;
+    /** @var Transaction */
+    protected $transaction;
 
     /**
-     * @param TransactionInterface $transaction
+     * @param Transaction $transaction
      */
-    public function __construct(TransactionInterface $transaction)
+    public function __construct(Transaction $transaction)
     {
         $this->transaction = $transaction;
     }
 
     /**
-     * Get the client associated with the event
+     * Get the HTTP client associated with the event.
      *
      * @return ClientInterface
      */
     public function getClient()
     {
-        return $this->transaction->getClient();
+        return $this->transaction->client;
     }
 
     /**
@@ -36,11 +38,11 @@ public function getClient()
      */
     public function getRequest()
     {
-        return $this->transaction->getRequest();
+        return $this->transaction->request;
     }
 
     /**
-     * @return TransactionInterface
+     * @return Transaction
      */
     protected function getTransaction()
     {
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php
new file mode 100644
index 0000000..74f6a6f
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php
@@ -0,0 +1,40 @@
+<?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 Guzzle-Ring
+     *                        adapter to work properly. Set to 0 or provide no
+     *                        value to retry immediately.
+     */
+    public function retry($afterDelay = 0)
+    {
+        $this->transaction->response = null;
+        $this->transaction->exception = null;
+        $this->transaction->state = 'before';
+
+        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
index dba1f98..b6c7966 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php
@@ -1,52 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Adapter\TransactionInterface;
 use GuzzleHttp\Message\ResponseInterface;
 
 /**
- * Event that contains transaction statistics (time over the wire, lookup time,
- * etc.).
- *
- * Adapters that create this event SHOULD add, at a minimum, the 'total_time'
- * transfer statistic that measures the amount of time, in seconds, taken to
- * complete a transfer for the current request/response cycle. Each event
- * pertains to a single request/response transaction, NOT the entire
- * transaction (e.g. redirects).
- *
- * Adapters that add transaction statistics SHOULD follow the same string
- * attribute names that are provided by cURL listed at
- * http://php.net/manual/en/function.curl-getinfo.php. However, not all
- * adapters will have access to the advanced statistics provided by cURL. The
- * most useful transfer statistics are as follows:
- *
- * - total_time: Total transaction time in seconds for last transfer
- * - namelookup_time: Time in seconds until name resolving was complete
- * - connect_time: Time in seconds it took to establish the connection
- * - pretransfer_time: Time in seconds from start until just before file
- *   transfer begins.
- * - starttransfer_time: Time in seconds until the first byte is about to be
- *   transferred.
- * - speed_download: Average download speed
- * - speed_upload: Average upload speed
+ * Event that contains transfer statistics, and can be intercepted.
  */
 abstract class AbstractTransferEvent extends AbstractRequestEvent
 {
-    private $transferInfo;
-
-    /**
-     * @param TransactionInterface $transaction  Transaction
-     * @param array                $transferInfo Transfer statistics
-     */
-    public function __construct(
-        TransactionInterface $transaction,
-        $transferInfo = []
-    ) {
-        parent::__construct($transaction);
-        $this->transferInfo = $transferInfo;
-    }
-
     /**
      * Get all transfer information as an associative array if no $name
      * argument is supplied, or gets a specific transfer statistic if
@@ -58,13 +19,11 @@ public function __construct(
      */
     public function getTransferInfo($name = null)
     {
-        if (!$name) {
-            return $this->transferInfo;
-        }
-
-        return isset($this->transferInfo[$name])
-            ? $this->transferInfo[$name]
-            : null;
+        return !$name
+            ? $this->transaction->transferInfo
+            : (isset($this->transaction->transferInfo[$name])
+                ? $this->transaction->transferInfo[$name]
+                : null);
     }
 
     /**
@@ -72,12 +31,20 @@ public function getTransferInfo($name = null)
      *
      * @return ResponseInterface|null
      */
-    abstract public function getResponse();
+    public function getResponse()
+    {
+        return $this->transaction->response;
+    }
 
     /**
      * Intercept the request and associate a response
      *
      * @param ResponseInterface $response Response to set
      */
-    abstract public function intercept(ResponseInterface $response);
+    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
index 34a7811..f313c37 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/BeforeEvent.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 use GuzzleHttp\Message\ResponseInterface;
@@ -7,7 +6,8 @@
 /**
  * Event object emitted before a request is sent.
  *
- * You may change the Response associated with the request using the
+ * 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
@@ -19,8 +19,8 @@ class BeforeEvent extends AbstractRequestEvent
      */
     public function intercept(ResponseInterface $response)
     {
-        $this->getTransaction()->setResponse($response);
+        $this->transaction->response = $response;
+        $this->transaction->exception = null;
         $this->stopPropagation();
-        RequestEvents::emitComplete($this->getTransaction());
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
index 3445760..56cc557 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/CompleteEvent.php
@@ -1,35 +1,14 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Message\ResponseInterface;
-
 /**
  * Event object emitted after a request has been completed.
  *
- * You may change the Response associated with the request using the
- * intercept() method of the event.
+ * 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 AbstractTransferEvent
-{
-    /**
-     * Intercept the request and associate a response
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function intercept(ResponseInterface $response)
-    {
-        $this->stopPropagation();
-        $this->getTransaction()->setResponse($response);
-    }
-
-    /**
-     * Get the response of the request
-     *
-     * @return ResponseInterface
-     */
-    public function getResponse()
-    {
-        return $this->getTransaction()->getResponse();
-    }
-}
+class CompleteEvent extends AbstractRetryableEvent {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php b/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
index 71e88d1..d6b3aa1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/Emitter.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
@@ -98,6 +97,11 @@ public function listeners($eventName = null)
         return $this->sorted[$eventName];
     }
 
+    public function hasListeners($eventName)
+    {
+        return !empty($this->listeners[$eventName]);
+    }
+
     public function emit($eventName, EventInterface $event)
     {
         if (isset($this->listeners[$eventName])) {
@@ -139,19 +143,4 @@ public function detach(SubscriberInterface $subscriber)
             $this->removeListener($eventName, array($subscriber, $listener[0]));
         }
     }
-
-    public function __call($name, $arguments)
-    {
-        return \GuzzleHttp\deprecation_proxy(
-            $this,
-            $name,
-            $arguments,
-            [
-                'addSubscriber'    => 'attach',
-                'removeSubscriber' => 'detach',
-                'addListener'      => 'on',
-                'dispatch'         => 'emit'
-            ]
-        );
-    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
index 0181e7f..9783efd 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/EmitterInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
@@ -57,6 +56,15 @@ public function removeListener($eventName, callable $listener);
     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
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php
new file mode 100644
index 0000000..c89432b
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/EndEvent.php
@@ -0,0 +1,28 @@
+<?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
index 02d4dff..7432134 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/ErrorEvent.php
@@ -1,48 +1,20 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
 
 /**
- * Event object emitted after a request has been sent and an error was
- * encountered.
+ * 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.
  *
- * You may intercept the exception and inject a response into the event to
- * rescue the request.
+ * This event allows the request to be retried using the "retry" method of the
+ * event.
  */
-class ErrorEvent extends AbstractTransferEvent
+class ErrorEvent extends AbstractRetryableEvent
 {
-    private $exception;
-
-    /**
-     * @param TransactionInterface $transaction   Transaction that contains the request
-     * @param RequestException     $e             Exception encountered
-     * @param array                $transferStats Array of transfer statistics
-     */
-    public function __construct(
-        TransactionInterface $transaction,
-        RequestException $e,
-        $transferStats = []
-    ) {
-        parent::__construct($transaction, $transferStats);
-        $this->exception = $e;
-    }
-
-    /**
-     * Intercept the exception and inject a response
-     *
-     * @param ResponseInterface $response Response to set
-     */
-    public function intercept(ResponseInterface $response)
-    {
-        $this->stopPropagation();
-        $this->getTransaction()->setResponse($response);
-        RequestEvents::emitComplete($this->getTransaction());
-    }
-
     /**
      * Get the exception that was encountered
      *
@@ -50,16 +22,6 @@ public function intercept(ResponseInterface $response)
      */
     public function getException()
     {
-        return $this->exception;
-    }
-
-    /**
-     * Get the response the was received (if any)
-     *
-     * @return ResponseInterface|null
-     */
-    public function getResponse()
-    {
-        return $this->getException()->getResponse();
+        return $this->transaction->exception;
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
index bf58f8b..97247e8 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/EventInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
index 4503dbb..a1a8612 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
index 8c9be21..8e36ce3 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/HeadersEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/HeadersEvent.php
deleted file mode 100644
index 81274ff..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Event/HeadersEvent.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Event;
-
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Adapter\TransactionInterface;
-
-/**
- * Event object emitted after the response headers of a request have been
- * received.
- *
- * You may intercept the exception and inject a response into the event to
- * rescue the request.
- */
-class HeadersEvent extends AbstractRequestEvent
-{
-    /**
-     * @param TransactionInterface $transaction Transaction that contains the
-     *     request and response.
-     * @throws \RuntimeException
-     */
-    public function __construct(TransactionInterface $transaction)
-    {
-        parent::__construct($transaction);
-        if (!$transaction->getResponse()) {
-            throw new \RuntimeException('A response must be present');
-        }
-    }
-
-    /**
-     * Get the response the was received
-     *
-     * @return ResponseInterface
-     */
-    public function getResponse()
-    {
-        return $this->getTransaction()->getResponse();
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php b/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
index 637cdae..407dc92 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php b/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php
new file mode 100644
index 0000000..3fd0de4
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/ProgressEvent.php
@@ -0,0 +1,51 @@
+<?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
index 12e6ba2..bd900ed 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/RequestEvents.php
@@ -1,9 +1,7 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
-use GuzzleHttp\Adapter\TransactionInterface;
-use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Message\CancelledResponse;
 
 /**
  * Contains methods used to manage the request event lifecycle.
@@ -23,112 +21,6 @@
     const REDIRECT_RESPONSE = 200;
 
     /**
-     * Emits the before send event for a request and emits an error
-     * event if an error is encountered during the before send.
-     *
-     * @param TransactionInterface $transaction
-     *
-     * @throws RequestException
-     */
-    public static function emitBefore(TransactionInterface $transaction) {
-        $request = $transaction->getRequest();
-        try {
-            $request->getEmitter()->emit(
-                'before',
-                new BeforeEvent($transaction)
-            );
-        } catch (RequestException $e) {
-            // When a RequestException has been emitted through emitError, the
-            // exception is marked as "emitted". This means that the exception
-            // had a chance to be rescued but was not. In this case, this method
-            // must not emit the error again, but rather throw the exception.
-            // This prevents RequestExceptions encountered during the before
-            // event from being emitted to listeners twice.
-            if ($e->emittedError()) {
-                throw $e;
-            }
-            self::emitError($transaction, $e);
-        } catch (\Exception $e) {
-            self::emitError($transaction, $e);
-        }
-    }
-
-    /**
-     * Emits the complete event for a request and emits an error
-     * event if an error is encountered during the after send.
-     *
-     * @param TransactionInterface $transaction Transaction to emit for
-     * @param array                $stats       Transfer stats
-     *
-     * @throws RequestException
-     */
-    public static function emitComplete(
-        TransactionInterface $transaction,
-        array $stats = []
-    ) {
-        $request = $transaction->getRequest();
-        $transaction->getResponse()->setEffectiveUrl($request->getUrl());
-        try {
-            $request->getEmitter()->emit(
-                'complete',
-                new CompleteEvent($transaction, $stats)
-            );
-        } catch (RequestException $e) {
-            self::emitError($transaction, $e, $stats);
-        }
-    }
-
-    /**
-     * Emits the headers event for a request.
-     *
-     * @param TransactionInterface $transaction Transaction to emit for
-     */
-    public static function emitHeaders(TransactionInterface $transaction)
-    {
-        $transaction->getRequest()->getEmitter()->emit(
-            'headers',
-            new HeadersEvent($transaction)
-        );
-    }
-
-    /**
-     * Emits an error event for a request and accounts for the propagation
-     * of an error event being stopped to prevent the exception from being
-     * thrown.
-     *
-     * @param TransactionInterface $transaction
-     * @param \Exception           $e
-     * @param array                $stats
-     *
-     * @throws \GuzzleHttp\Exception\RequestException
-     */
-    public static function emitError(
-        TransactionInterface $transaction,
-        \Exception $e,
-        array $stats = []
-    ) {
-        $request = $transaction->getRequest();
-
-        // Convert non-request exception to a wrapped exception
-        if (!($e instanceof RequestException)) {
-            $e = new RequestException($e->getMessage(), $request, null, $e);
-        }
-
-        // Mark the exception as having been emitted for an error event. This
-        // works in tandem with the emitBefore method to prevent the error
-        // event from being triggered twice for the same exception.
-        $e->emittedError(true);
-
-        // Dispatch an event and allow interception
-        if (!$request->getEmitter()->emit(
-            'error',
-            new ErrorEvent($transaction, $e, $stats)
-        )->isPropagationStopped()) {
-            throw $e;
-        }
-    }
-
-    /**
      * Converts an array of event options into a formatted array of valid event
      * configuration.
      *
@@ -163,4 +55,22 @@ public static function convertEventArray(
 
         return $options;
     }
+
+    /**
+     * Stops the "end" event from throwing an exception by injecting a future
+     * response that throws only when dereferenced.
+     *
+     * This adheres to the contract that sending a request returns a response,
+     * but allows higher level abstractions like the Pool to stop an exception
+     * from being thrown with the knowledge that the response will likely
+     * never be dereferenced.
+     *
+     * @param EndEvent $e
+     */
+    public static function stopException(EndEvent $e)
+    {
+        // Stop further "end" listeners from firing and add a future response
+        // that throws when accessed.
+        $e->intercept(new CancelledResponse($e->getException()));
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php b/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
index 223c23a..33d7702 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Event/SubscriberInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Event;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/AdapterException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/AdapterException.php
deleted file mode 100644
index 55334c4..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/AdapterException.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Exception;
-
-class AdapterException extends TransferException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
index c4ee1d8..fd78431 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
index d7f15c0..f95c09f 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
index c3a0964..fbe2dcd 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 class CouldNotRewindStreamException extends RequestException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
index 378b9c0..e593e3d 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ParseException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 use GuzzleHttp\Message\ResponseInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
index ee953a9..b9e9826 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 use GuzzleHttp\Message\RequestInterface;
@@ -10,9 +9,6 @@
  */
 class RequestException extends TransferException
 {
-    /** @var bool */
-    private $emittedErrorEvent = false;
-
     /** @var RequestInterface */
     private $request;
 
@@ -32,6 +28,21 @@ public function __construct(
     }
 
     /**
+     * Wrap non-RequesExceptions with a RequestException
+     *
+     * @param RequestInterface $request
+     * @param \Exception       $e
+     *
+     * @return RequestException
+     */
+    public static function wrapException(RequestInterface $request, \Exception $e)
+    {
+        return $e instanceof RequestException
+            ? $e
+            : new RequestException($e->getMessage(), $request, null, $e);
+    }
+
+    /**
      * Factory method to create a new exception with a normalized error message
      *
      * @param RequestInterface  $request  Request
@@ -97,28 +108,4 @@ public function hasResponse()
     {
         return $this->response !== null;
     }
-
-    /**
-     * Check or set if the exception was emitted in an error event.
-     *
-     * This value is used in the RequestEvents::emitBefore() method to check
-     * to see if an exception has already been emitted in an error event.
-     *
-     * @param bool|null Set to true to set the exception as having emitted an
-     *     error. Leave null to retrieve the current setting.
-     *
-     * @return null|bool
-     * @throws \InvalidArgumentException if you attempt to set the value to false
-     */
-    public function emittedError($value = null)
-    {
-        if ($value === null) {
-            return $this->emittedErrorEvent;
-        } elseif ($value === true) {
-            return $this->emittedErrorEvent = true;
-        } else {
-            throw new \InvalidArgumentException('You cannot set the emitted '
-                . 'error value to false.');
-        }
-    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
index d67ed27..7cdd340 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php
new file mode 100644
index 0000000..a7652a3
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/StateException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Exception;
+
+class StateException extends TransferException {};
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
index e7feaa5..b60a967 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 class TooManyRedirectsException extends RequestException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
index 72887b4..92d7de6 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Exception;
 
 class TransferException extends \RuntimeException {}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Fsm.php b/core/vendor/guzzlehttp/guzzle/src/Fsm.php
new file mode 100644
index 0000000..20658b6
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Fsm.php
@@ -0,0 +1,133 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Exception\StateException;
+
+/**
+ * Provides a basic finite state machine that transitions transaction objects
+ * through state transitions provided in the constructor.
+ *
+ * As states transition, any exceptions thrown in the state are caught and
+ * passed to the corresponding error state if available. If no error state is
+ * available, then the exception is thrown. If a
+ * {@see GuzzleHttp\Exception\StateException} is thrown, then the exception
+ * is thrown immediately without allowing any further transitions.
+ *
+ * States can return true or false/null. When a state returns true, it tells
+ * the FSM to transition to the defined "intercept" state. If no intercept
+ * state is defined then a StateException is thrown. If a state returns
+ * false/null, then the FSM transitions to the "complete" state if one is
+ * defined.
+ */
+class Fsm
+{
+    private $states;
+    private $initialState;
+    private $maxTransitions;
+
+    /**
+     * The states array is an associative array of associative arrays
+     * describing each state transition. Each key of the outer array is a state
+     * name, and each value is an associative array that can contain the
+     * following key value pairs:
+     *
+     * - transition: A callable that is invoked when entering the state. If
+     *   the callable throws an exception then the FSM transitions to the
+     *   error state. Otherwise, the FSM transitions to the success state.
+     * - success: The state to transition to when no error is raised. If not
+     *   present, then this is a terminal state.
+     * - intercept: The state to transition to if the state is intercepted.
+     *   You can intercept states by returning true in a transition function.
+     * - error: The state to transition to when an error is raised. If not
+     *   present and an exception occurs, then the exception is thrown.
+     *
+     * @param string $initialState   The initial state of the FSM
+     * @param array  $states         Associative array of state transitions.
+     * @param int    $maxTransitions The maximum number of allows transitions
+     *                               before failing. This is basically a
+     *                               fail-safe to prevent infinite loops.
+     */
+    public function __construct(
+        $initialState,
+        array $states,
+        $maxTransitions = 200
+    ) {
+        $this->states = $states;
+        $this->initialState = $initialState;
+        $this->maxTransitions = $maxTransitions;
+    }
+
+    /**
+     * Runs the state machine until a terminal state is entered or the
+     * optionally supplied $finalState is entered.
+     *
+     * @param Transaction $trans      Transaction being transitioned.
+     * @param string      $finalState The state to stop on. If unspecified,
+     *                                runs until a terminal state is found.
+     *
+     * @throws \Exception if a terminal state throws an exception.
+     */
+    public function run(Transaction $trans, $finalState = null)
+    {
+        $trans->_transitionCount = 1;
+
+        if (!$trans->state) {
+            $trans->state = $this->initialState;
+        }
+
+        do {
+            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.');
+            }
+
+            $terminal = $trans->state === $finalState;
+
+            if (!isset($this->states[$trans->state])) {
+                throw new StateException("Invalid state: {$trans->state}");
+            }
+
+            $state = $this->states[$trans->state];
+
+            try {
+
+                // Call the transition function if available.
+                if (isset($state['transition'])) {
+                    // Handles transitioning to the "intercept" state.
+                    if ($state['transition']($trans)) {
+                        if (isset($state['intercept'])) {
+                            $trans->state = $state['intercept'];
+                            continue;
+                        }
+                        throw new StateException('Invalid intercept state '
+                            . 'transition from ' . $trans->state);
+                    }
+                }
+
+                // Break: this is a terminal state with no transition.
+                if (!isset($state['success'])) {
+                    break;
+                }
+
+                // Transition to the success state
+                $trans->state = $state['success'];
+
+            } catch (StateException $e) {
+                // State exceptions are thrown no matter what.
+                throw $e;
+
+            } catch (\Exception $e) {
+                $trans->exception = $e;
+                // Terminal error states throw the exception.
+                if (!isset($state['error'])) {
+                    throw $e;
+                }
+                // Transition to the error state.
+                $trans->state = $state['error'];
+            }
+
+        } while (!$terminal);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php b/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
index c4c50f2..020dfc9 100644
--- a/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
+++ b/core/vendor/guzzlehttp/guzzle/src/HasDataTrait.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -56,7 +55,7 @@ public function count()
      */
     public function getPath($path)
     {
-        return \GuzzleHttp\get_path($this->data, $path);
+        return Utils::getPath($this->data, $path);
     }
 
     /**
@@ -71,6 +70,6 @@ public function getPath($path)
      */
     public function setPath($path, $value)
     {
-        \GuzzleHttp\set_path($this->data, $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
index 52e306f..0c67575 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/AbstractMessage.php
@@ -37,33 +37,23 @@ public function setBody(StreamInterface $body = null)
     {
         if ($body === null) {
             // Setting a null body will remove the body of the request
-            $this->removeHeader('Content-Length')
-                ->removeHeader('Transfer-Encoding');
+            $this->removeHeader('Content-Length');
+            $this->removeHeader('Transfer-Encoding');
         }
 
         $this->body = $body;
-
-        return $this;
     }
 
     public function addHeader($header, $value)
     {
-        static $valid = ['string' => true, 'integer' => true,
-            'double' => true, 'array' => true];
-
-        $type = gettype($value);
-        if (!isset($valid[$type])) {
-            throw new \InvalidArgumentException('Invalid header value');
-        }
-
-        if ($type == 'array') {
-            $current = array_merge($this->getHeader($header, true), $value);
+        if (is_array($value)) {
+            $current = array_merge($this->getHeaderAsArray($header), $value);
         } else {
-            $current = $this->getHeader($header, true);
-            $current[] = $value;
+            $current = $this->getHeaderAsArray($header);
+            $current[] = (string) $value;
         }
 
-        return $this->setHeader($header, $current);
+        $this->setHeader($header, $current);
     }
 
     public function addHeaders(array $headers)
@@ -73,17 +63,18 @@ public function addHeaders(array $headers)
         }
     }
 
-    public function getHeader($header, $asArray = false)
+    public function getHeader($header)
     {
         $name = strtolower($header);
+        return isset($this->headers[$name])
+            ? implode(', ', $this->headers[$name])
+            : '';
+    }
 
-        if (!isset($this->headers[$name])) {
-            return $asArray ? [] : '';
-        }
-
-        return $asArray
-            ? $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()
@@ -102,26 +93,14 @@ public function setHeader($header, $value)
         $name = strtolower($header);
         $this->headerNames[$name] = $header;
 
-        switch (gettype($value)) {
-            case 'string':
-                $this->headers[$name] = [trim($value)];
-                break;
-            case 'integer':
-            case 'double':
-                $this->headers[$name] = [(string) $value];
-                break;
-            case 'array':
-                foreach ($value as &$v) {
-                    $v = trim($v);
-                }
-                $this->headers[$name] = $value;
-                break;
-            default:
-                throw new \InvalidArgumentException('Invalid header value '
-                    . 'provided: ' . var_export($value, true));
+        if (is_array($value)) {
+            foreach ($value as &$v) {
+                $v = trim($v);
+            }
+            $this->headers[$name] = $value;
+        } else {
+            $this->headers[$name] = [trim($value)];
         }
-
-        return $this;
     }
 
     public function setHeaders(array $headers)
@@ -130,8 +109,6 @@ public function setHeaders(array $headers)
         foreach ($headers as $key => $value) {
             $this->setHeader($key, $value);
         }
-
-        return $this;
     }
 
     public function hasHeader($header)
@@ -143,8 +120,6 @@ public function removeHeader($header)
     {
         $name = strtolower($header);
         unset($this->headers[$name], $this->headerNames[$name]);
-
-        return $this;
     }
 
     /**
@@ -194,7 +169,7 @@ public static function parseHeader(MessageInterface $message, $header)
      */
     public static function normalizeHeader(MessageInterface $message, $header)
     {
-        $h = $message->getHeader($header, true);
+        $h = $message->getHeaderAsArray($header);
         for ($i = 0, $total = count($h); $i < $total; $i++) {
             if (strpos($h[$i], ',') === false) {
                 continue;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/CancelledResponse.php b/core/vendor/guzzlehttp/guzzle/src/Message/CancelledResponse.php
new file mode 100644
index 0000000..346d181
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/CancelledResponse.php
@@ -0,0 +1,26 @@
+<?php
+namespace GuzzleHttp\Message;
+
+use GuzzleHttp\Exception\StateException;
+
+/**
+ * Represents an HTTP response for a request that was cancelled.
+ *
+ * When the cancelled future is accessed, it will throw a state exception or
+ * a custom exception if provided.
+ */
+class CancelledResponse extends FutureResponse
+{
+    public function __construct(\Exception $e = null)
+    {
+        $e = $e ?: new StateException('Cannot access a cancelled response');
+        parent::__construct(function () use ($e) {
+            throw $e;
+        });
+    }
+
+    public function cancelled()
+    {
+        return true;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php b/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php
new file mode 100644
index 0000000..8821938
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php
@@ -0,0 +1,137 @@
+<?php
+namespace GuzzleHttp\Message;
+
+use GuzzleHttp\Ring\MagicFutureTrait;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\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 result
+ */
+class FutureResponse implements ResponseInterface, FutureInterface
+{
+    use MagicFutureTrait;
+
+    public function getStatusCode()
+    {
+        return $this->result->getStatusCode();
+    }
+
+    public function getReasonPhrase()
+    {
+        return $this->result->getReasonPhrase();
+    }
+
+    public function getEffectiveUrl()
+    {
+        return $this->result->getEffectiveUrl();
+    }
+
+    public function setEffectiveUrl($url)
+    {
+        $this->result->setEffectiveUrl($url);
+    }
+
+    public function json(array $config = [])
+    {
+        return $this->result->json($config);
+    }
+
+    public function xml(array $config = [])
+    {
+        return $this->result->xml($config);
+    }
+
+    public function __toString()
+    {
+        try {
+            return $this->result->__toString();
+        } catch (\Exception $e) {
+            trigger_error($e->getMessage(), E_USER_WARNING);
+            return '';
+        }
+    }
+
+    public function getProtocolVersion()
+    {
+        return $this->result->getProtocolVersion();
+    }
+
+    public function setBody(StreamInterface $body = null)
+    {
+        $this->result->setBody($body);
+    }
+
+    public function getBody()
+    {
+        return $this->result->getBody();
+    }
+
+    public function getHeaders()
+    {
+        return $this->result->getHeaders();
+    }
+
+    public function getHeader($header)
+    {
+        return $this->result->getHeader($header);
+    }
+
+    public function getHeaderAsArray($header)
+    {
+        return $this->result->getHeaderAsArray($header);
+    }
+
+    public function hasHeader($header)
+    {
+        return $this->result->hasHeader($header);
+    }
+
+    public function removeHeader($header)
+    {
+        $this->result->removeHeader($header);
+    }
+
+    public function addHeader($header, $value)
+    {
+        $this->result->addHeader($header, $value);
+    }
+
+    public function addHeaders(array $headers)
+    {
+        $this->result->addHeaders($headers);
+    }
+
+    public function setHeader($header, $value)
+    {
+        $this->result->setHeader($header, $value);
+    }
+
+    public function setHeaders(array $headers)
+    {
+        $this->result->setHeaders($headers);
+    }
+
+    /** @internal */
+    protected function processResult($result)
+    {
+        if (!$result instanceof ResponseInterface) {
+            throw new \RuntimeException('Future did not return a valid '
+                . 'response. Found ' . Core::describeType($result));
+        }
+
+        return $result;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
index 280053b..1d18af1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Event\ListenerAttacherTrait;
@@ -11,7 +10,7 @@
 use GuzzleHttp\Post\PostBody;
 use GuzzleHttp\Post\PostFile;
 use GuzzleHttp\Subscriber\Redirect;
-use GuzzleHttp\Stream;
+use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Query;
 use GuzzleHttp\Url;
 
@@ -29,12 +28,22 @@ class MessageFactory implements MessageFactoryInterface
     private $redirectPlugin;
 
     /** @var array */
-    protected static $classMethods = [];
+    private static $methods;
+
+    /** @var array */
+    private $customOptions;
 
-    public function __construct()
+    /**
+     * @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(
@@ -44,7 +53,7 @@ public function createResponse(
         array $options = []
     ) {
         if (null !== $body) {
-            $body = Stream\create($body);
+            $body = Stream::factory($body);
         }
 
         return new Response($statusCode, $headers, $body, $options);
@@ -146,6 +155,10 @@ protected function addPostData(RequestInterface $request, array $body)
             }
         }
 
+        if ($request->getHeader('Content-Type') == 'multipart/form-data') {
+            $post->forceMultipartUpload(true);
+        }
+
         $request->setBody($post);
     }
 
@@ -156,28 +169,25 @@ protected function applyOptions(
         // Values specified in the config map are passed to request options
         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];
-
-        // Take the class of the instance, not the parent
-        $selfClass = get_class($this);
+            'debug' => 1, 'save_to' => 1, 'stream' => 1, 'expect' => 1,
+            'future' => 1];
 
         // Check if we already took it's class methods and had them saved
-        if (!isset(self::$classMethods[$selfClass])) {
-            self::$classMethods[$selfClass] = array_flip(get_class_methods($this));
+        if (!isset(self::$methods)) {
+            self::$methods = array_fill_keys(get_class_methods(__CLASS__), true);
         }
 
-        // Take class methods of this particular instance
-        $methods = self::$classMethods[$selfClass];
-
         // Iterate over each key value pair and attempt to apply a config using
-        // double dispatch.
+        // double dispatch or a custom option handler.
         $config = $request->getConfig();
         foreach ($options as $key => $value) {
             $method = "add_{$key}";
-            if (isset($methods[$method])) {
+            if (isset(self::$methods[$method])) {
                 $this->{$method}($request, $value);
             } elseif (isset($configMap[$key])) {
                 $config[$key] = $value;
+            } elseif (isset($this->customOptions[$key])) {
+                call_user_func($this->customOptions[$key], $request, $value);
             } else {
                 throw new \InvalidArgumentException("No method is configured "
                     . "to handle the {$key} config key");
@@ -191,7 +201,7 @@ private function add_body(RequestInterface $request, $value)
             if (is_array($value)) {
                 $this->addPostData($request, $value);
             } else {
-                $request->setBody(Stream\create($value));
+                $request->setBody(Stream::factory($value));
             }
         }
     }
@@ -261,7 +271,8 @@ private function add_query(RequestInterface $request, $value)
             $original = $request->getQuery();
             // Do not overwrite existing query string variables by overwriting
             // the object with the query string data passed in the URL
-            $request->setQuery($value->overwriteWith($original->toArray()));
+            $value->overwriteWith($original->toArray());
+            $request->setQuery($value);
         } elseif (is_array($value)) {
             // Do not overwrite existing query string variables
             $query = $request->getQuery();
@@ -317,7 +328,7 @@ private function add_events(RequestInterface $request, $value)
         }
 
         $this->attachListeners($request, $this->prepareListeners($value,
-            ['before', 'complete', 'error', 'headers']
+            ['before', 'complete', 'error', 'progress']
         ));
     }
 
@@ -339,6 +350,19 @@ private function add_json(RequestInterface $request, $value)
             $request->setHeader('Content-Type', 'application/json');
         }
 
-        $request->setBody(Stream\create(json_encode($value)));
+        $request->setBody(Stream::factory(json_encode($value)));
+    }
+
+    private function add_decode_content(RequestInterface $request, $value)
+    {
+        if ($value === false) {
+            return;
+        }
+
+        if ($value !== true) {
+            $request->setHeader('Accept-Encoding', $value);
+        }
+
+        $request->getConfig()['decode_content'] = true;
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
index daab042..ee36b49 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Url;
@@ -59,6 +58,7 @@ public function createResponse(
      * - 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
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
index 2900d0e..b2b472b 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Stream\StreamInterface;
@@ -30,8 +29,6 @@ public function getProtocolVersion();
      * remove the existing body.
      *
      * @param StreamInterface|null $body Body.
-     *
-     * @return self Returns the message.
      */
     public function setBody(StreamInterface $body = null);
 
@@ -60,19 +57,20 @@ public function getHeaders();
     /**
      * Retrieve a header by the given case-insensitive name.
      *
-     * By default, this method returns all of the header values of the given
-     * case-insensitive header name as a string concatenated together using
-     * a comma. Because some header should not be concatenated together using a
-     * comma, this method provides a Boolean argument that can be used to
-     * retrieve the associated header values as an array of strings.
+     * @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.
-     * @param bool   $asArray Set to true to retrieve the header value as an
-     *                        array of strings.
+     * @param string $header Case-insensitive header name.
      *
-     * @return array|string
+     * @return string[]
      */
-    public function getHeader($header, $asArray = false);
+    public function getHeaderAsArray($header);
 
     /**
      * Checks if a header exists by the given case-insensitive name.
@@ -89,8 +87,6 @@ public function hasHeader($header);
      * Remove a specific header by case-insensitive name.
      *
      * @param string $header Case-insensitive header name.
-     *
-     * @return self
      */
     public function removeHeader($header);
 
@@ -100,8 +96,6 @@ public function removeHeader($header);
      *
      * @param string $header Header name to add
      * @param string $value  Value of the header
-     *
-     * @return self
      */
     public function addHeader($header, $value);
 
@@ -115,8 +109,6 @@ public function addHeader($header, $value);
      * header is added.
      *
      * @param array $headers Associative array of headers to add to the message
-     *
-     * @return self
      */
     public function addHeaders(array $headers);
 
@@ -128,8 +120,6 @@ public function addHeaders(array $headers);
      *
      * @param string       $header Header name
      * @param string|array $value  Header value(s)
-     *
-     * @return self Returns the message.
      */
     public function setHeader($header, $value);
 
@@ -141,8 +131,6 @@ public function setHeader($header, $value);
      * string or an array of strings.
      *
      * @param array $headers Headers to set.
-     *
-     * @return self Returns the message.
      */
     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
index 777ce26..c3cc195 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/MessageParser.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/Request.php b/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
index efc5450..c8d8edc 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/Request.php
@@ -69,8 +69,6 @@ public function setUrl($url)
     {
         $this->url = $url instanceof Url ? $url : Url::fromString($url);
         $this->updateHostHeaderFromUrl();
-
-        return $this;
     }
 
     public function getUrl()
@@ -81,8 +79,6 @@ public function getUrl()
     public function setQuery($query)
     {
         $this->url->setQuery($query);
-
-        return $this;
     }
 
     public function getQuery()
@@ -93,8 +89,6 @@ public function getQuery()
     public function setMethod($method)
     {
         $this->method = strtoupper($method);
-
-        return $this;
     }
 
     public function getMethod()
@@ -110,8 +104,6 @@ public function getScheme()
     public function setScheme($scheme)
     {
         $this->url->setScheme($scheme);
-
-        return $this;
     }
 
     public function getPort()
@@ -123,8 +115,6 @@ public function setPort($port)
     {
         $this->url->setPort($port);
         $this->updateHostHeaderFromUrl();
-
-        return $this;
     }
 
     public function getHost()
@@ -136,8 +126,6 @@ public function setHost($host)
     {
         $this->url->setHost($host);
         $this->updateHostHeaderFromUrl();
-
-        return $this;
     }
 
     public function getPath()
@@ -148,8 +136,6 @@ public function getPath()
     public function setPath($path)
     {
         $this->url->setPath($path);
-
-        return $this;
     }
 
     public function getResource()
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
index 8cd5de7..f6a69d1 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/RequestInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Event\HasEmitterInterface;
@@ -18,7 +17,6 @@
      *
      * @param string $url Request URL.
      *
-     * @return self Reference to the request.
      * @throws \InvalidArgumentException If the URL is invalid.
      */
     public function setUrl($url);
@@ -50,8 +48,6 @@ public function getQuery();
      * Set the query string used by the request
      *
      * @param array|Query $query Query to set
-     *
-     * @return self
      */
     public function setQuery($query);
 
@@ -66,8 +62,6 @@ public function getMethod();
      * Set the HTTP method of the request.
      *
      * @param string $method HTTP method
-     *
-     * @return self
      */
     public function setMethod($method);
 
@@ -82,8 +76,6 @@ public function getScheme();
      * Set the URI scheme of the request (http, https, etc.).
      *
      * @param string $scheme Scheme to set
-     *
-     * @return self
      */
     public function setScheme($scheme);
 
@@ -100,8 +92,6 @@ public function getPort();
      * Setting a port modifies the Host header of a request as necessary.
      *
      * @param int $port Port to set
-     *
-     * @return self
      */
     public function setPort($port);
 
@@ -120,8 +110,6 @@ public function getHost();
      * request scheme will be utilized.
      *
      * @param string $host Host to set (e.g. www.yahoo.com, www.yahoo.com:80)
-     *
-     * @return self
      */
     public function setHost($host);
 
@@ -136,8 +124,6 @@ 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
-     *
-     * @return self
      */
     public function setPath($path);
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/Response.php b/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
index 1c48aab..db6f653 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/Response.php
@@ -1,9 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 use GuzzleHttp\Exception\ParseException;
 use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Utils;
 
 /**
  * Guzzle HTTP response object
@@ -127,7 +127,7 @@ public function getReasonPhrase()
     public function json(array $config = [])
     {
         try {
-            return \GuzzleHttp\json_decode(
+            return Utils::jsonDecode(
                 (string) $this->getBody(),
                 isset($config['object']) ? !$config['object'] : true,
                 512,
@@ -177,8 +177,6 @@ public function getEffectiveUrl()
     public function setEffectiveUrl($url)
     {
         $this->effectiveUrl = $url;
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php b/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
index 55f48e7..13c6ba8 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Message/ResponseInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Message;
 
 /**
@@ -35,8 +34,6 @@ public function getEffectiveUrl();
      * redirect URL).
      *
      * @param string $url Effective URL
-     *
-     * @return self
      */
     public function setEffectiveUrl($url);
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php b/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
index 939c2c5..66ac63c 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Mimetypes.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Pool.php b/core/vendor/guzzlehttp/guzzle/src/Pool.php
new file mode 100644
index 0000000..86b2b11
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Pool.php
@@ -0,0 +1,301 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Event\RequestEvents;
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Message\RequestInterface;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\FutureInterface;
+use GuzzleHttp\Event\ListenerAttacherTrait;
+use GuzzleHttp\Event\EndEvent;
+
+/**
+ * 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.
+ *
+ * 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 Guzzle Ring adapter can support. This will result is extremely
+ * poor performance.
+ */
+class Pool implements FutureInterface
+{
+    use ListenerAttacherTrait;
+
+    /** @var \GuzzleHttp\ClientInterface */
+    private $client;
+
+    /** @var array Hash of outstanding responses to dereference. */
+    private $derefQueue = [];
+
+    /** @var array Hash of completed responses. */
+    private $completedQueue = [];
+
+    /** @var \Iterator Yields requests */
+    private $iter;
+
+    /** @var int */
+    private $poolSize;
+
+    /** @var bool */
+    private $isCancelled = false;
+
+    /** @var array Listeners to attach to each request */
+    private $eventListeners = [];
+
+    /**
+     * The option values for 'before', 'after', and 'error' 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: (int) Maximum number of requests to send concurrently
+     *     - before:    (callable|array) Receives a BeforeEvent
+     *     - after:     (callable|array) Receives a CompleteEvent
+     *     - error:     (callable|array) Receives a ErrorEvent
+     */
+    public function __construct(
+        ClientInterface $client,
+        $requests,
+        array $options = []
+    ) {
+        $this->client = $client;
+        $this->iter = $this->coerceIterable($requests);
+        $this->poolSize = isset($options['pool_size'])
+            ? $options['pool_size'] : 25;
+        $this->eventListeners = $this->prepareListeners(
+            $this->prepareOptions($options),
+            ['before', 'complete', 'error', 'end']
+        );
+    }
+
+    /**
+     * Creates and immediately transfers a Pool object.
+     *
+     * @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
+     * @see GuzzleHttp\Pool::__construct for the list of available options.
+     */
+    public static function send(
+        ClientInterface $client,
+        $requests,
+        array $options = []
+    ) {
+        (new self($client, $requests, $options))->deref();
+    }
+
+    /**
+     * Sends multiple requests in parallel 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
+     * as such, is NOT recommended when sending a large number or an
+     * 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           $options  Passes through the options available in
+     *                                  {@see GuzzleHttp\Pool::__construct}
+     *
+     * @return BatchResults Returns a container for the results.
+     * @throws \InvalidArgumentException if the event format is incorrect.
+     */
+    public static function batch(
+        ClientInterface $client,
+        $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.
+        static::send($client, $requests, RequestEvents::convertEventArray(
+            $options,
+            ['end'],
+            [
+                'priority' => RequestEvents::LATE,
+                'fn'       => function (EndEvent $e) use ($hash) {
+                    $hash[$e->getRequest()] = $e->getException()
+                        ? $e->getException()
+                        : $e->getResponse();
+                }
+            ]
+        ));
+
+        return new BatchResults($hash);
+    }
+
+    public function realized()
+    {
+        return !$this->iter || $this->cancelled();
+    }
+
+    public function deref()
+    {
+        if ($this->realized()) {
+            return false;
+        }
+
+        // Seed the pool with N number of requests.
+        // @todo: Is there way to stop seeding when the adapter auto-flushes?
+        for ($i = 0; $i < $this->poolSize; $i++) {
+            if (!$this->addNextRequest()) {
+                break;
+            }
+        }
+
+        // Stop if the pool was cancelled while transferring requests.
+        if ($this->isCancelled) {
+            return false;
+        }
+
+        // Dereference any outstanding FutureResponse objects.
+        while ($response = array_pop($this->derefQueue)) {
+            $response->deref();
+        }
+
+        // Clean up no longer needed state.
+        $this->client = $this->iter = $this->derefQueue = $this->eventListeners = null;
+
+        return true;
+    }
+
+    public function cancelled()
+    {
+        return $this->isCancelled;
+    }
+
+    /**
+     * {@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->isCancelled || $this->realized()) {
+            return false;
+        }
+
+        // Return true if ALL in-flight requests could be cancelled.
+        $success = $this->isCancelled = true;
+        foreach ($this->derefQueue as $response) {
+            if (!$response->cancel()) {
+                $success = false;
+            }
+        }
+
+        return $success;
+    }
+
+    /**
+     * Given the input variable, return an iterator if possible or throw.
+     *
+     * @param mixed $requests
+     *
+     * @return \Iterator
+     * @throws \InvalidArgumentException if unable to coerce into an iterable.
+     */
+    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 necessary options to manage the pool.
+     */
+    private function prepareOptions(array $options)
+    {
+        // Add the next request when requests finish, and stop errors from
+        // throwing by intercepting with a future that throws when accessed.
+        return RequestEvents::convertEventArray($options, ['end'], [
+            'priority' => RequestEvents::LATE,
+            'fn'       => function (EndEvent $e) {
+                $hash = spl_object_hash($e->getRequest());
+                // Remove from deref queue if present.
+                if (isset($this->derefQueue[$hash])) {
+                    unset($this->derefQueue[$hash]);
+                } else {
+                    // Add to the completed queue to prevent deref'ng
+                    $this->completedQueue[$hash] = true;
+                }
+                // If there was an error, then prevent the exception.
+                if ($e->getException()) {
+                    RequestEvents::stopException($e);
+                }
+                // Add the next request in the pool when done with this one.
+                $this->addNextRequest();
+            }
+        ]);
+    }
+
+    /**
+     * Adds the next request to pool and tracks what requests need to be
+     * dereferenced when completing the pool.
+     */
+    private function addNextRequest()
+    {
+        if ($this->isCancelled || !$this->iter || !$this->iter->valid()) {
+            return false;
+        }
+
+        $request = $this->iter->current();
+        $this->iter->next();
+
+        if (!($request instanceof RequestInterface)) {
+            throw new \RuntimeException(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');
+        $this->attachListeners($request, $this->eventListeners);
+        $response = $this->client->send($request);
+        $hash = spl_object_hash($request);
+
+        // Determine how to track the request based on what happened in events.
+        if (isset($this->completedQueue[$hash])) {
+            // Things in the completed queue were completed in events before
+            // the future was returned from the client. This means there's no
+            // need to dereference them when the pool finishes.
+            unset($this->completedQueue[$hash]);
+        } elseif ($response instanceof FutureResponse && !$response->cancelled()) {
+            // Track future responses for later dereference before completing
+            // pool. Don't dereference cancelled responses.
+            $this->derefQueue[$hash] = $response;
+        }
+
+        return true;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php b/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
index 85ea030..9bd2605 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/MultipartBody.php
@@ -1,15 +1,17 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
-use GuzzleHttp\Stream;
+use GuzzleHttp\Stream\AppendStream;
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\StreamDecoratorTrait;
+use GuzzleHttp\Stream\Stream;
 
 /**
  * Stream that when read returns bytes for a streaming multipart/form-data body
  */
-class MultipartBody implements Stream\StreamInterface
+class MultipartBody implements StreamInterface
 {
-    use Stream\StreamDecoratorTrait;
+    use StreamDecoratorTrait;
 
     private $boundary;
 
@@ -73,14 +75,14 @@ private function getFileHeaders(PostFileInterface $file)
     /**
      * Create the aggregate stream that will be used to upload the POST data
      */
-    private function createStream(array $fields, array $files)
+    protected function createStream(array $fields, array $files)
     {
-        $stream = new Stream\AppendStream();
+        $stream = new AppendStream();
 
         foreach ($fields as $name => $fieldValues) {
             foreach ((array) $fieldValues as $value) {
                 $stream->addStream(
-                    Stream\create($this->getFieldString($name, $value))
+                    Stream::factory($this->getFieldString($name, $value))
                 );
             }
         }
@@ -93,14 +95,14 @@ private function createStream(array $fields, array $files)
             }
 
             $stream->addStream(
-                Stream\create($this->getFileHeaders($file))
+                Stream::factory($this->getFileHeaders($file))
             );
             $stream->addStream($file->getContent());
-            $stream->addStream(Stream\create("\r\n"));
+            $stream->addStream(Stream::factory("\r\n"));
         }
 
         // Add the trailing boundary
-        $stream->addStream(Stream\create("--{$this->boundary}--"));
+        $stream->addStream(Stream::factory("--{$this->boundary}--"));
 
         return $stream;
     }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
index e404b04..a8943f3 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostBody.php
@@ -2,7 +2,8 @@
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Message\RequestInterface;
-use GuzzleHttp\Stream;
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Query;
 
 /**
@@ -11,7 +12,7 @@
  */
 class PostBody implements PostBodyInterface
 {
-    /** @var Stream\StreamInterface */
+    /** @var StreamInterface */
     private $body;
 
     /** @var callable */
@@ -22,6 +23,7 @@ class PostBody implements PostBodyInterface
     /** @var PostFileInterface[] */
     private $files = [];
     private $forceMultipart = false;
+    private $detached = false;
 
     /**
      * Applies request headers to a request based on the POST state
@@ -47,8 +49,6 @@ public function applyRequestHeaders(RequestInterface $request)
     public function forceMultipartUpload($force)
     {
         $this->forceMultipart = $force;
-
-        return $this;
     }
 
     public function setAggregator(callable $aggregator)
@@ -60,16 +60,12 @@ public function setField($name, $value)
     {
         $this->fields[$name] = $value;
         $this->mutate();
-
-        return $this;
     }
 
     public function replaceFields(array $fields)
     {
         $this->fields = $fields;
         $this->mutate();
-
-        return $this;
     }
 
     public function getField($name)
@@ -81,8 +77,6 @@ public function removeField($name)
     {
         unset($this->fields[$name]);
         $this->mutate();
-
-        return $this;
     }
 
     public function getFields($asString = false)
@@ -91,9 +85,11 @@ public function getFields($asString = false)
             return $this->fields;
         }
 
-        return (string) (new Query($this->fields))
-            ->setEncodingType(Query::RFC1738)
-            ->setAggregator($this->getAggregator());
+        $query = new Query($this->fields);
+        $query->setEncodingType(Query::RFC1738);
+        $query->setAggregator($this->getAggregator());
+
+        return (string) $query;
     }
 
     public function hasField($name)
@@ -121,16 +117,12 @@ public function addFile(PostFileInterface $file)
     {
         $this->files[] = $file;
         $this->mutate();
-
-        return $this;
     }
 
     public function clearFiles()
     {
         $this->files = [];
         $this->mutate();
-
-        return $this;
     }
 
     /**
@@ -155,15 +147,23 @@ public function getContents($maxLength = -1)
 
     public function close()
     {
-        return $this->body ? $this->body->close() : true;
+        $this->detach();
     }
 
     public function detach()
     {
-        $this->body = null;
+        $this->detached = true;
         $this->fields = $this->files = [];
 
-        return $this;
+        if ($this->body) {
+            $this->body->close();
+            $this->body = null;
+        }
+    }
+
+    public function isDetached()
+    {
+        return $this->detached;
     }
 
     public function eof()
@@ -211,6 +211,16 @@ public function write($string)
         return false;
     }
 
+    public function flush()
+    {
+        return false;
+    }
+
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
+
     /**
      * Return a stream object that is built from the POST fields and files.
      *
@@ -226,7 +236,7 @@ private function getBody()
         } elseif ($this->fields) {
             return $this->body = $this->createUrlEncoded();
         } else {
-            return $this->body = Stream\create();
+            return $this->body = Stream::factory();
         }
     }
 
@@ -261,11 +271,11 @@ private function createMultipart()
     /**
      * Creates an application/x-www-form-urlencoded stream body
      *
-     * @return Stream\StreamInterface
+     * @return StreamInterface
      */
     private function createUrlEncoded()
     {
-        return Stream\create($this->getFields(true));
+        return Stream::factory($this->getFields(true));
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
index 4405ce2..81e4595 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostBodyInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Message\RequestInterface;
@@ -23,8 +22,6 @@ public function applyRequestHeaders(RequestInterface $request);
      *
      * @param string       $name  Name of the field to set
      * @param string|array $value Value to set
-     *
-     * @return $this
      */
     public function setField($name, $value);
 
@@ -44,8 +41,6 @@ public function setAggregator(callable $aggregator);
      *
      * @param bool $force Set to true to force multipart uploads or false to
      *     remove this flag.
-     *
-     * @return self
      */
     public function forceMultipartUpload($force);
 
@@ -53,8 +48,6 @@ public function forceMultipartUpload($force);
      * Replace all existing form fields with an array of fields
      *
      * @param array $fields Associative array of fields to set
-     *
-     * @return $this
      */
     public function replaceFields(array $fields);
 
@@ -71,8 +64,6 @@ public function getField($name);
      * Remove a field by name
      *
      * @param string $name Name of the field to remove
-     *
-     * @return $this
      */
     public function removeField($name);
 
@@ -115,15 +106,11 @@ public function getFile($name);
      * Add a file to the POST
      *
      * @param PostFileInterface $file File to add
-     *
-     * @return $this
      */
     public function addFile(PostFileInterface $file);
 
     /**
      * Remove all files from the collection
-     *
-     * @return $this
      */
     public function clearFiles();
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
index bcd517d..3803d2a 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostFile.php
@@ -1,10 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Mimetypes;
-use GuzzleHttp\Stream\MetadataStreamInterface;
 use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
 
 /**
  * Post file upload
@@ -67,7 +66,7 @@ private function prepareContent($content)
         $this->content = $content;
 
         if (!($this->content instanceof StreamInterface)) {
-            $this->content = \GuzzleHttp\Stream\create($this->content);
+            $this->content = Stream::factory($this->content);
         } elseif ($this->content instanceof MultipartBody) {
             if (!$this->hasHeader('Content-Disposition')) {
                 $disposition = 'form-data; name="' . $this->name .'"';
@@ -92,9 +91,7 @@ private function prepareFilename($filename)
     {
         $this->filename = $filename;
 
-        if (!$this->filename &&
-            $this->content instanceof MetadataStreamInterface
-        ) {
+        if (!$this->filename) {
             $this->filename = $this->content->getMetadata('uri');
         }
 
@@ -111,9 +108,9 @@ 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; filename="%s"; name="%s"',
-                basename($this->filename),
-                $this->name
+                'form-data; name="%s"; filename="%s"',
+                $this->name,
+                basename($this->filename)
             );
         }
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php b/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
index 205dd96..2e816c0 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Post/PostFileInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Post;
 
 use GuzzleHttp\Stream\StreamInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Query.php b/core/vendor/guzzlehttp/guzzle/src/Query.php
index 72d81ee..862c0e5 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Query.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Query.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -115,14 +114,10 @@ public function __toString()
      *     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.
-     *
-     * @return self
      */
     public function setAggregator(callable $aggregator)
     {
         $this->aggregator = $aggregator;
-
-        return $this;
     }
 
     /**
@@ -130,7 +125,6 @@ public function setAggregator(callable $aggregator)
      *
      * @param string|bool $type One of 'RFC1738', 'RFC3986', or false to disable encoding
      *
-     * @return self
      * @throws \InvalidArgumentException
      */
     public function setEncodingType($type)
@@ -140,8 +134,6 @@ public function setEncodingType($type)
         } else {
             throw new \InvalidArgumentException('Invalid URL encoding type');
         }
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php b/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php
new file mode 100644
index 0000000..dd54f0f
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/RequestFsm.php
@@ -0,0 +1,175 @@
+<?php
+namespace GuzzleHttp;
+
+use GuzzleHttp\Event\BeforeEvent;
+use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\Event\CompleteEvent;
+use GuzzleHttp\Event\EndEvent;
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Exception\StateException;
+use GuzzleHttp\Ring\FutureInterface;
+
+/**
+ * Responsible for transitioning requests through lifecycle events.
+ */
+class RequestFsm extends Fsm
+{
+    private $sendFn;
+
+    public function __construct(callable $sendFn)
+    {
+        $this->sendFn = $sendFn;
+        parent::__construct('before', [
+            // When a mock intercepts the emitted "before" event, then we
+            // transition to the "complete" intercept state.
+            'before'   => [
+                'success'    => 'send',
+                'intercept'  => 'complete',
+                'error'      => 'error',
+                'transition' => [$this, 'beforeTransition']
+            ],
+            // The complete and error events are handled using the "then" of
+            // the Guzzle-Ring request, so we transition to the exit state
+            // after the send state.
+            'send' => [
+                'success'    => 'exit',
+                'error'      => 'error',
+                'transition' => [$this, 'sendTransition']
+            ],
+            'complete' => [
+                'success'    => 'end',
+                // Intercept here is used to retry a request.
+                'intercept'  => 'before',
+                'error'      => 'error',
+                'transition' => [$this, 'completeTransition']
+            ],
+            'error' => [
+                'success'    => 'complete',
+                // Intercept here is used to retry a request.
+                'intercept'  => 'before',
+                'error'      => 'end',
+                'transition' => [$this, 'ErrorTransition']
+            ],
+            'end' => [
+                'transition' => [$this, 'endTransition']
+            ],
+            // The exit state is used to bail from the FSM.
+            'exit' => [
+                'transition' => [$this, 'exitTransition']
+            ]
+        ]);
+    }
+
+    protected function beforeTransition(Transaction $trans)
+    {
+        $trans->request->getEmitter()->emit('before', new BeforeEvent($trans));
+
+        // When a response is set during the before event (i.e., a mock), then
+        // we don't need to send anything. Skip ahead to the complete event
+        // by returning to to go to the intercept state.
+        return (bool) $trans->response;
+    }
+
+    /**
+     * Sends the request using the provided function.
+     */
+    protected function sendTransition(Transaction $trans)
+    {
+        $fn = $this->sendFn;
+        $fn($trans);
+    }
+
+    /**
+     * Emits the error event and ensures that the exception is set and is an
+     * instance of RequestException. If the error event is not intercepted,
+     * then the exception is thrown and we transition to the "end" event. This
+     * event also allows requests to be retried, and when retried, transitions
+     * to the "before" event. Otherwise, when no retries, and the exception is
+     * intercepted, transition to the "complete" event.
+     */
+    protected function errorTransition(Transaction $trans)
+    {
+        if (!$trans->exception) {
+            throw new StateException('Invalid error state: no exception');
+        }
+
+        // Convert non-request exception to a wrapped exception
+        if (!($trans->exception instanceof RequestException)) {
+            $trans->exception = RequestException::wrapException(
+                $trans->request, $trans->exception
+            );
+        }
+
+        // Dispatch an event and allow interception
+        $event = new ErrorEvent($trans);
+        $trans->request->getEmitter()->emit('error', $event);
+
+        if ($trans->exception) {
+            throw $trans->exception;
+        }
+
+        $trans->exception = null;
+
+        // Return true to transition to the 'before' state. False otherwise.
+        return $trans->state === 'before';
+    }
+
+    /**
+     * Emits a complete event, and if a request is marked for a retry during
+     * the complete event, then the "before" state is transitioned to.
+     */
+    protected function completeTransition(Transaction $trans)
+    {
+        // Futures will have their own end events emitted when dereferenced.
+        if ($trans->response instanceof FutureInterface) {
+            return false;
+        }
+
+        if (!$trans->response) {
+            throw new StateException('Invalid complete state: no response');
+        }
+
+        $trans->response->setEffectiveUrl($trans->request->getUrl());
+        $trans->request->getEmitter()->emit('complete', new CompleteEvent($trans));
+
+        // Return true to transition to the 'before' state. False otherwise.
+        return $trans->state === 'before';
+    }
+
+    /**
+     * Emits the "end" event and throws an exception if one is present.
+     */
+    protected function endTransition(Transaction $trans)
+    {
+        // Futures will have their own end events emitted when dereferenced.
+        if ($trans->response instanceof FutureInterface) {
+            return;
+        }
+
+        $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) {
+            throw $trans->exception;
+        }
+    }
+
+    /**
+     * Ensure that a response or exception are present, and if not, throw an
+     * exception.
+     *
+     * Throws an exception if one is present on the transaction.
+     */
+    protected function exitTransition(Transaction $trans)
+    {
+        if (!$trans->response && !$trans->exception) {
+            $trans->exception = RingBridge::getNoRingResponseException($trans->request);
+        }
+
+        // Only throw if the response is not a future.
+        if ($trans->exception && !($trans->response instanceof FutureInterface)) {
+            throw $trans->exception;
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/RingBridge.php b/core/vendor/guzzlehttp/guzzle/src/RingBridge.php
new file mode 100644
index 0000000..f210358
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/RingBridge.php
@@ -0,0 +1,212 @@
+<?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
+     * ring adapter.
+     *
+     * @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
+        ];
+    }
+
+    /**
+     * Give a ring request array, this function adds the "then" and "progress"
+     * event callbacks using a transaction and message factory.
+     *
+     * @param array                   $ringRequest Request to update.
+     * @param Transaction             $trans       Transaction
+     * @param MessageFactoryInterface $factory     Creates responses.
+     * @param Fsm                     $fsm         State machine.
+     *
+     * @return array Returns the new ring response array.
+     */
+    public static function addRingRequestCallbacks(
+        array $ringRequest,
+        Transaction $trans,
+        MessageFactoryInterface $factory,
+        Fsm $fsm
+    ) {
+        $request = $trans->request;
+
+        $ringRequest['then'] = function (array $response) use ($trans, $factory, $fsm) {
+            self::completeRingResponse($trans, $response, $factory, $fsm);
+        };
+
+        // Emit progress events if any progress listeners are registered.
+        if ($request->getEmitter()->hasListeners('progress')) {
+            $emitter = $request->getEmitter();
+            $ringRequest['client']['progress'] = function ($a, $b, $c, $d)
+                use ($trans, $emitter)
+            {
+                $emitter->emit(
+                    'progress',
+                    new ProgressEvent($trans, $a, $b, $c, $d)
+                );
+            };
+        }
+
+        return $ringRequest;
+    }
+
+    /**
+     * Creates a Ring request from a request object AND prepares the callbacks.
+     *
+     * @param Transaction             $transaction Transaction to update.
+     * @param MessageFactoryInterface $factory     Creates responses.
+     * @param Fsm                     $fsm         State machine.
+     *
+     * @return array Converted Guzzle Ring request.
+     */
+    public static function prepareRingRequest(
+        Transaction $transaction,
+        MessageFactoryInterface $factory,
+        Fsm $fsm
+    ) {
+        // Clear out the transaction state when initiating.
+        $transaction->exception = null;
+
+        return self::addRingRequestCallbacks(
+            self::createRingRequest($transaction->request),
+            $transaction,
+            $factory,
+            $fsm
+        );
+    }
+
+    /**
+     * Handles the process of processing a response received from a ring
+     * handler. The created response is added to the transaction, and any
+     * necessary events are emitted based on the ring response.
+     *
+     * @param Transaction             $trans          Owns request and response.
+     * @param array                   $response       Ring response array
+     * @param MessageFactoryInterface $messageFactory Creates response objects.
+     * @param Fsm                     $fsm            State machine.
+     */
+    public static function completeRingResponse(
+        Transaction $trans,
+        array $response,
+        MessageFactoryInterface $messageFactory,
+        Fsm $fsm
+    ) {
+        $trans->state = 'complete';
+        $trans->transferInfo = isset($response['transfer_info'])
+            ? $response['transfer_info'] : [];
+
+        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'];
+        }
+
+        // Complete the lifecycle of the request.
+        $fsm->run($trans);
+    }
+
+    /**
+     * 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 ring adapter 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 Guzzle-Ring adapter that is not calling the "then" function of a
+request array when the response is ready. If you are simply trying to mock
+responses, then it is recommneded to use the
+GuzzleHttp\Ring\Client\MockAdapter.
+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
index 4b8a2c0..58905ec 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Cookie.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
 use GuzzleHttp\Event\RequestEvents;
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
index 6ffbbb8..6cc25f9 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/History.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
 use GuzzleHttp\Event\RequestEvents;
@@ -43,7 +42,8 @@ public function __toString()
         $lines = array();
         foreach ($this->transactions as $entry) {
             $response = isset($entry['response']) ? $entry['response'] : '';
-            $lines[] = '> ' . trim($entry['request']) . "\n\n< " . trim($response) . "\n";
+            $lines[] = '> ' . trim($entry['sent_request'])
+                . "\n\n< " . trim($response) . "\n";
         }
 
         return implode("\n", $lines);
@@ -65,7 +65,11 @@ public function onError(ErrorEvent $event)
 
     /**
      * Returns an Iterator that yields associative array values where each
-     * associative array contains a 'request' and 'response' key.
+     * 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
      */
@@ -75,14 +79,24 @@ public function getIterator()
     }
 
     /**
-     * Get all of the requests sent through the plugin
+     * 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()
+    public function getRequests($asSent = false)
     {
-        return array_map(function ($t) {
-            return $t['request'];
+        return array_map(function ($t) use ($asSent) {
+            return $asSent ? $t['sent_request'] : $t['request'];
         }, $this->transactions);
     }
 
@@ -97,13 +111,25 @@ public function count()
     }
 
     /**
-     * Get the last request sent
+     * 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()
+    public function getLastRequest($asSent = false)
     {
-        return end($this->transactions)['request'];
+        return $asSent
+            ? end($this->transactions)['sent_request']
+            : end($this->transactions)['request'];
     }
 
     /**
@@ -134,7 +160,11 @@ private function add(
         RequestInterface $request,
         ResponseInterface $response = null
     ) {
-        $this->transactions[] = ['request' => $request, 'response' => $response];
+        $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
index f2f72f1..053b86e 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/HttpError.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
 use GuzzleHttp\Event\RequestEvents;
@@ -27,8 +26,11 @@ public function onComplete(CompleteEvent $event)
     {
         $code = (string) $event->getResponse()->getStatusCode();
         // Throw an exception for an unsuccessful response
-        if ($code[0] === '4' || $code[0] === '5') {
-            throw RequestException::create($event->getRequest(), $event->getResponse());
+        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
index 99a3d18..39a3c44 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Mock.php
@@ -1,12 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
 use GuzzleHttp\Event\RequestEvents;
 use GuzzleHttp\Event\SubscriberInterface;
-use GuzzleHttp\Adapter\Transaction;
 use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\HeadersEvent;
 use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Message\MessageFactory;
 use GuzzleHttp\Message\ResponseInterface;
@@ -55,16 +52,8 @@ public function onBefore(BeforeEvent $event)
             throw $item;
         }
 
-        // Emulate the receiving of the response headers
-        $request = $event->getRequest();
-        $transaction = new Transaction($event->getClient(), $request);
-        $transaction->setResponse($item);
-        $request->getEmitter()->emit(
-            'headers',
-            new HeadersEvent($transaction)
-        );
-
         // Emulate reading a response body
+        $request = $event->getRequest();
         if ($this->readBodies && $request->getBody()) {
             while (!$request->getBody()->eof()) {
                 $request->getBody()->read(8096);
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
index 2d82acd..b315758 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Prepare.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
 use GuzzleHttp\Event\RequestEvents;
@@ -8,7 +7,6 @@
 use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Post\PostBodyInterface;
 use GuzzleHttp\Stream\StreamInterface;
-use GuzzleHttp\Stream\MetadataStreamInterface;
 use GuzzleHttp\Mimetypes;
 
 /**
@@ -56,10 +54,6 @@ private function addContentType(
         RequestInterface $request,
         StreamInterface $body
     ) {
-        if (!($body instanceof MetadataStreamInterface)) {
-            return;
-        }
-
         if (!($uri = $body->getMetadata('uri'))) {
             return;
         }
@@ -89,13 +83,13 @@ private function addContentLength(
         }
 
         if (null !== ($size = $body->getSize())) {
-            $request->setHeader('Content-Length', $size)
-                ->removeHeader('Transfer-Encoding');
+            $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')
-                ->removeHeader('Content-Length');
+            $request->setHeader('Transfer-Encoding', 'chunked');
+            $request->removeHeader('Content-Length');
         }
     }
 
diff --git a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
index bd8988d..f1eadc4 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Subscriber/Redirect.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Subscriber;
 
 use GuzzleHttp\Event\RequestEvents;
@@ -43,8 +42,7 @@ public function getEvents()
     public static function rewindEntityBody(RequestInterface $redirectRequest)
     {
         // Rewind the entity body of the request if needed
-        if ($redirectRequest->getBody()) {
-            $body = $redirectRequest->getBody();
+        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)) {
@@ -66,48 +64,37 @@ public function onComplete(CompleteEvent $event)
     {
         $response = $event->getResponse();
 
-        if (substr($response->getStatusCode(), 0, 1) != '3' ||
-            !$response->hasHeader('Location')
+        if (substr($response->getStatusCode(), 0, 1) != '3'
+            || !$response->hasHeader('Location')
         ) {
             return;
         }
 
-        $redirectCount = 0;
         $request = $event->getRequest();
-        $redirectResponse = $response;
-        $max = $request->getConfig()->getPath('redirect/max') ?: 5;
-
-        do {
-            if (++$redirectCount > $max) {
-                throw new TooManyRedirectsException(
-                    "Will not follow more than {$redirectCount} redirects",
-                    $request
-                );
-            }
-            $redirectRequest = $this->createRedirectRequest($request, $redirectResponse);
-            $redirectResponse = $event->getClient()->send($redirectRequest);
-        } while (substr($redirectResponse->getStatusCode(), 0, 1) == '3' &&
-            $redirectResponse->hasHeader('Location')
-        );
-
-        if ($redirectResponse !== $response) {
-            $event->intercept($redirectResponse);
+        $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();
     }
 
-    /**
-     * Create a redirect request for a specific request object
-     *
-     * Takes into account strict RFC compliant redirection (e.g. redirect POST
-     * with POST) vs doing what most clients do (e.g. redirect POST with GET).
-     *
-     * @param RequestInterface  $request
-     * @param ResponseInterface $response
-     *
-     * @return RequestInterface Returns a new redirect request
-     * @throws CouldNotRewindStreamException If the body cannot be rewound.
-     */
-    private function createRedirectRequest(
+    private function modifyRedirectRequest(
         RequestInterface $request,
         ResponseInterface $response
     ) {
@@ -115,44 +102,41 @@ private function createRedirectRequest(
 
         // 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. Be sure to disable redirects on the clone.
-        $redirectRequest = clone $request;
-        $redirectRequest->getEmitter()->detach($this);
+        // would do.
         $statusCode = $response->getStatusCode();
-
         if ($statusCode == 303 ||
-            ($statusCode <= 302 && $request->getBody() &&
-                !$config->getPath('redirect/strict'))
+            ($statusCode <= 302 && $request->getBody() && !$config->getPath('redirect/strict'))
         ) {
-            $redirectRequest->setMethod('GET');
-            $redirectRequest->setBody(null);
+            $request->setMethod('GET');
+            $request->setBody(null);
         }
 
-        $this->setRedirectUrl($redirectRequest, $response);
-        $this->rewindEntityBody($redirectRequest);
+        $previousUrl = $request->getUrl();
+        $this->setRedirectUrl($request, $response);
+        $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') && (
-            $redirectRequest->getScheme() == 'https' ||
-            $redirectRequest->getScheme() == $request->getScheme()
-        )) {
-            $url = Url::fromString($request->getUrl());
-            $url->setUsername(null)->setPassword(null);
-            $redirectRequest->setHeader('Referer', (string) $url);
+        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');
         }
-
-        return $redirectRequest;
     }
 
     /**
      * Set the appropriate URL on the request based on the location header
      *
-     * @param RequestInterface  $redirectRequest
+     * @param RequestInterface  $request
      * @param ResponseInterface $response
      */
     private function setRedirectUrl(
-        RequestInterface $redirectRequest,
+        RequestInterface $request,
         ResponseInterface $response
     ) {
         $location = $response->getHeader('Location');
@@ -160,13 +144,13 @@ private function setRedirectUrl(
 
         // Combine location with the original URL if it is not absolute.
         if (!$location->isAbsolute()) {
-            $originalUrl = Url::fromString($redirectRequest->getUrl());
+            $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);
         }
 
-        $redirectRequest->setUrl($location);
+        $request->setUrl($location);
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php b/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
index 7c4120f..d57c022 100644
--- a/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
+++ b/core/vendor/guzzlehttp/guzzle/src/ToArrayInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Transaction.php b/core/vendor/guzzlehttp/guzzle/src/Transaction.php
new file mode 100644
index 0000000..32b2a46
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Transaction.php
@@ -0,0 +1,85 @@
+<?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 adapter specific transfer statistics and custom
+     * key value pair information. When providing similar information, adapters
+     * 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 transaction's state.
+     *
+     * @var string
+     */
+    public $state;
+
+    /**
+     * The number of state transitions that this transactions has been through.
+     *
+     * @var int
+     * @internal This is for internal use only. If you modify this, then you
+     *           are asking for trouble.
+     */
+    public $_transitionCount;
+
+    /**
+     * @param ClientInterface  $client  Client that is used to send the requests
+     * @param RequestInterface $request Request to send
+     */
+    public function __construct(
+        ClientInterface $client,
+        RequestInterface $request
+    ) {
+        $this->client = $client;
+        $this->request = $request;
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php b/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php
index 785ff3d..55dfeb5 100644
--- a/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php
+++ b/core/vendor/guzzlehttp/guzzle/src/UriTemplate.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Url.php b/core/vendor/guzzlehttp/guzzle/src/Url.php
index fcd72eb..497234f 100644
--- a/core/vendor/guzzlehttp/guzzle/src/Url.php
+++ b/core/vendor/guzzlehttp/guzzle/src/Url.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp;
 
 /**
@@ -203,8 +202,6 @@ public function setHost($host)
             $this->host = $host;
             $this->setPort($port);
         }
-
-        return $this;
     }
 
     /**
@@ -221,8 +218,6 @@ public function getHost()
      * Set the scheme part of the URL (http, https, ftp, etc.)
      *
      * @param string $scheme Scheme to set
-     *
-     * @return Url
      */
     public function setScheme($scheme)
     {
@@ -234,8 +229,6 @@ public function setScheme($scheme)
         }
 
         $this->scheme = $scheme;
-
-        return $this;
     }
 
     /**
@@ -252,14 +245,10 @@ public function getScheme()
      * Set the port part of the URL
      *
      * @param int $port Port to set
-     *
-     * @return Url
      */
     public function setPort($port)
     {
         $this->port = $port;
-
-        return $this;
     }
 
     /**
@@ -285,22 +274,16 @@ public function getPort()
      * Set the path part of the URL
      *
      * @param string $path Path string to set
-     *
-     * @return Url
      */
     public function setPath($path)
     {
         static $search  = [' ',   '?'];
         static $replace = ['%20', '%3F'];
         $this->path = str_replace($search, $replace, $path);
-
-        return $this;
     }
 
     /**
      * Removes dot segments from a URL
-     *
-     * @return Url
      * @link http://tools.ietf.org/html/rfc3986#section-5.2.4
      */
     public function removeDotSegments()
@@ -309,7 +292,7 @@ public function removeDotSegments()
         static $ignoreSegments = ['.' => true, '..' => true];
 
         if (isset($noopPaths[$this->path])) {
-            return $this;
+            return;
         }
 
         $results = [];
@@ -337,16 +320,12 @@ public function removeDotSegments()
         }
 
         $this->path = $newPath;
-
-        return $this;
     }
 
     /**
      * Add a relative path to the currently set path.
      *
      * @param string $relativePath Relative path to add
-     *
-     * @return Url
      */
     public function addPath($relativePath)
     {
@@ -363,8 +342,6 @@ public function addPath($relativePath)
 
             $this->setPath($this->path . $relativePath);
         }
-
-        return $this;
     }
 
     /**
@@ -391,14 +368,10 @@ public function getPathSegments()
      * Set the password part of the URL
      *
      * @param string $password Password to set
-     *
-     * @return Url
      */
     public function setPassword($password)
     {
         $this->password = $password;
-
-        return $this;
     }
 
     /**
@@ -415,14 +388,10 @@ public function getPassword()
      * Set the username part of the URL
      *
      * @param string $username Username to set
-     *
-     * @return Url
      */
     public function setUsername($username)
     {
         $this->username = $username;
-
-        return $this;
     }
 
     /**
@@ -452,7 +421,6 @@ public function getQuery()
      *     be a string that will be parsed into a Query object, an array
      *     of key value pairs, or a Query object.
      *
-     * @return Url
      * @throws \InvalidArgumentException
      */
     public function setQuery($query)
@@ -464,11 +432,9 @@ public function setQuery($query)
         } elseif (is_array($query)) {
             $this->query = new Query($query);
         } else {
-            throw new \InvalidArgumentException('Query must be a '
-                . 'QueryInterface, array, or string');
+            throw new \InvalidArgumentException('Query must be a Query, '
+                . 'array, or string. ' . gettype($query) . ' provided.');
         }
-
-        return $this;
     }
 
     /**
@@ -485,14 +451,10 @@ public function getFragment()
      * Set the fragment part of the URL
      *
      * @param string $fragment Fragment to set
-     *
-     * @return Url
      */
     public function setFragment($fragment)
     {
         $this->fragment = $fragment;
-
-        return $this;
     }
 
     /**
diff --git a/core/vendor/guzzlehttp/guzzle/src/Utils.php b/core/vendor/guzzlehttp/guzzle/src/Utils.php
new file mode 100644
index 0000000..285fe30
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/src/Utils.php
@@ -0,0 +1,145 @@
+<?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/cacert.pem b/core/vendor/guzzlehttp/guzzle/src/cacert.pem
deleted file mode 100644
index 9794dfb..0000000
--- a/core/vendor/guzzlehttp/guzzle/src/cacert.pem
+++ /dev/null
@@ -1,3866 +0,0 @@
-##
-## ca-bundle.crt -- Bundle of CA Root Certificates
-##
-## Certificate data from Mozilla as of: Tue Apr 22 08:29:31 2014
-##
-## This is a bundle of X.509 certificates of public Certificate Authorities
-## (CA). These were automatically extracted from Mozilla's root certificates
-## file (certdata.txt).  This file can be found in the mozilla source tree:
-## http://mxr.mozilla.org/mozilla-release/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
-##
-## It contains the certificates in PEM format and therefore
-## can be directly used with curl / libcurl / php_curl, or with
-## an Apache+mod_ssl webserver for SSL client authentication.
-## Just configure this file as the SSLCACertificateFile.
-##
-
-
-GTE CyberTrust Global Root
-==========================
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
-Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
-A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
-MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
-Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
-IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
-sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
-HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
-AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
-M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
-NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-Thawte Server CA
-================
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
-AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
-b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
-BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
-c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
-A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
-ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
-/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
-1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
-MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
-GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
-GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-Thawte Premium Server CA
-========================
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
-AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
-ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
-VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
-aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
-cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
-aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
-Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
-qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
-SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
-8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
-UCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
-
-Equifax Secure CA
-=================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
-ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
-B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
-fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
-8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
-CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
-spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
-zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
-BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
-70+sB3c4
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
-TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
-WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
-Tqj/ZA1k
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
-FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
-lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
-1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
-Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
------END CERTIFICATE-----
-
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-ValiCert Class 1 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
-MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
-GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
-DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
-lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
-icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
-Orf1LXLI
------END CERTIFICATE-----
-
-ValiCert Class 2 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
-CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
-ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
-SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
-UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
-W9ViH0Pd
------END CERTIFICATE-----
-
-RSA Root Certificate 1
-======================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
-3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
-BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
-3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
-V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
-on+jjBXu
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
-EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
-cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
-EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
-055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
-xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
-t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Verisign Class 4 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
-tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
-8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
-Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
-Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
-RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
-UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-Entrust.net Secure Server CA
-============================
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
-cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
-ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
-A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
-eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
-dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
-aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
-gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
-ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
-dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
-NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
-HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
-Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
-n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
-KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
-T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
-J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
-nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-Equifax Secure Global eBusiness CA
-==================================
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
-bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
-b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
-PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
-qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
-hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
-BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
-MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
-I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
-NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 1
-=============================
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
-LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
-ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
-IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
-1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
-IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
-MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
-Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
-AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
-lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
-KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust External Root
-======================
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
-VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
-NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
-cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
-Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
-+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
-Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
-aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
-2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
-7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
-VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
-VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
-e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
-G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-Entrust Root Certification Authority
-====================================
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
-b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
-A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
-MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
-MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
-Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
-A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
-Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
-j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
-rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
-MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
-Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
-v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
-W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
-tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-GeoTrust Global CA
-==================
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
-MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
-BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
-8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
-T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
-vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
-DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
-zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
-d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
-mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
-XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-GeoTrust Universal CA
-=====================
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
-MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
-Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
-JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
-RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
-7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
-8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
-qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
-Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
-Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
-KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
-ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
-XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
-qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
-oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
-xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
-KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
-DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
-xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
-p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
-P/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-GeoTrust Universal CA 2
-=======================
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
-MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
-SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
-DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
-j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
-JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
-QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
-WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
-20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
-ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
-SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
-8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
-+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
-4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
-mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
-A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
-Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
-pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
-FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
-gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
-X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-America Online Root Certification Authority 1
-=============================================
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
-v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
-DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
-sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
-8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
-AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
-o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
-GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
-VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
-3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
-Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-America Online Root Certification Authority 2
-=============================================
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
-fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
-f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
-qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
-RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
-gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
-6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
-FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
-Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
-B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
-aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
-T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
-+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
-JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
-zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
-ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
-1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
-GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
-Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
-cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
------END CERTIFICATE-----
-
-Visa eCommerce Root
-===================
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
-EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
-QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
-WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
-VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
-F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
-RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
-TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
-/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
-GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
-CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
-YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
-zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Certum Root CA
-==============
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
-ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
-Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
-by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
-wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
-kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
-89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
-Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
-NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
-GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
-GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
-0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
-qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
-QuoVadis Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
-ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
-XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
-lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
-lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
-lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
-66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
-wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
-D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
-BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
-J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
-DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
-Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
-UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
-VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
-+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
-IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
-WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
-f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
-4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
-VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-QuoVadis Root CA 3
-==================
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
-OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
-DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
-KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
-DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
-BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
-p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
-nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
-MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
-Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
-uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
-BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
-BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
-VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
-ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
-AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
-qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
-hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
-POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
-Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
-8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
-bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
-g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
-vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
-qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-Security Communication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
-8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
-DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
-5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
-DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
-JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
-0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
-mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
-s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
-6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA
-=============================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
-ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
-HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
-bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
-vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
-jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
-C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
-vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
-22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
-HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
-dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
-BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
-EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
-MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-TDC Internet Root CA
-====================
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
-ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
-NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
-ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
-xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
-znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
-5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
-otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
-AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
-VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
-MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
-AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
-UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
-CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
-gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
-O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
-Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
-UTN DATACorp SGC Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
-BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
-MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
-HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
-dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
-raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
-wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
-9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
-33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
-DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
-BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
-LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
-I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
-EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
-DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
-Camerfirma Chambers of Commerce Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
-NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
-cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
-MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
-AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
-xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
-NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
-DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
-d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
-EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
-cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
-AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
-bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
-fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
-L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
-UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
-ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
-erfutGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-Camerfirma Global Chambersign Root
-==================================
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
-NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
-YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
-MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
-ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
-1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
-by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
-6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
-8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
-BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
-aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
-Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
-aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
-PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
-gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
-PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
-IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
-t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-NetLock Notary (Class A) Root
-=============================
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
-EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
-ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
-DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
-EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
-VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
-cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
-D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
-z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
-/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
-tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
-4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
-A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
-Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
-bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
-LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
-ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
-IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
-IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
-b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
-Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
-bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
-ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
-ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
-CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
-KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
-8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-NetLock Business (Class B) Root
-===============================
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
-VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
-VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
-bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
-VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
-o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
-1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
-RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
-dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
-ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
-c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
-YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
-Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
-bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
-IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
-YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
-cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
-43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
-stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-NetLock Express (Class C) Root
-==============================
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
-BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
-ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
-W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
-euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
-DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
-RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
-YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
-IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
-aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
-ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
-emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
-IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
-UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
-YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
-xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
-gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
-YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
-AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
-Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
-U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
-LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
-cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
-dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
-AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
-3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
-vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
-fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
-EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
-1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
-lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
-g14=
------END CERTIFICATE-----
-
-Taiwan GRCA
-===========
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
-EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
-dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
-w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
-BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
-1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
-htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
-J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
-Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
-B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
-O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
-lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
-HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
-Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
-Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
-D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
-DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
-Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
-7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
-CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
-+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
------END CERTIFICATE-----
-
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
-MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
-MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
-NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
-AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
-b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
-7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
-cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
-WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
-haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
-MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
-MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
-jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
-MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
-VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
-vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
-OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
-1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
-nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
-x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
-MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
-9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
-UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
-/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
-oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
-GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
-66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
-hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
-EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
-SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-DigiCert Global Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
-MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
-TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
-BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
-4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
-7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
-o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
-8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
-BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
-EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
-tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-DigiCert High Assurance EV Root CA
-==================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
-KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
-MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
-MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
-Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
-Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
-OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
-MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
-NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
-h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
-JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
-V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
-myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
-
-Certplus Class 2 Primary CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
-BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
-OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
-dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
-5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
-Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
-YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
-e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
-CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
-YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
-L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
-P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
-TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
-7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-DST ACES CA X6
-==============
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
-MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
-MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
-CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
-DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
-pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
-GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
-MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
-Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
-dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
-CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
-5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
-vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
-oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 1
-==============================================
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
-MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
-acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
-MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
-TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
-aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
-yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
-Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
-8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
-W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
-BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
-sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
-q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
-nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2
-==============================================
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
-MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
-dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
-LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
-x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
-QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
-5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
-AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
-Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
-hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
-9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
-UrbnBEI=
------END CERTIFICATE-----
-
-SwissSign Gold CA - G2
-======================
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
-EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
-MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
-c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
-t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
-jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
-vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
-ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
-AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
-jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
-peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
-7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
-GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
-5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
-44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
-Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
-Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
-mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
-vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
-KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
-NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
-viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-SwissSign Silver CA - G2
-========================
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
-DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
-aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
-N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
-+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
-6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
-MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
-qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
-FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
-ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
-celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
-CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
-4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
-kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
-3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
-/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
-DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
-e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
-WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
-DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
-DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority
-========================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
-CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
-cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
-b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
-nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
-RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
-tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
-hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
-Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
-NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
-Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-thawte Primary Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
-MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
-SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
-KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
-FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
-oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
-1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
-q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
-aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
-afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
-AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
-jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
-z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G5
-============================================================
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
-dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
-j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
-Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
-Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
-fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
-SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
-X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
-KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
-Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
-ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-SecureTrust CA
-==============
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
-dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
-BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
-OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
-DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
-GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
-01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
-ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
-aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
-SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
-mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-Secure Global CA
-================
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
-bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
-MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
-Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
-YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
-bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
-8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
-HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
-0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
-oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
-MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
-OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
-CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-COMODO Certification Authority
-==============================
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
-MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
-T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
-+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
-xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
-4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
-1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
-rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
-b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
-AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
-IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
-+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
-
-Network Solutions Certificate Authority
-=======================================
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
-EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
-IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
-MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
-jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
-aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
-crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
-/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
-AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
-bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
-A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
-4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
-GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
-ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-COMODO ECC Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
-GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
-Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
-4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
-wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
-FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
-U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
-Security Communication EV RootCA1
-=================================
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
-BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
-Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
-/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
-WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
-ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
-bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
-9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
-iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
-Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
-mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
-T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GA CA
-===============================
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
-BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
-A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
-bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
-VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
-IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
-IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
-Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
-Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
-d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
-/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
-LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
-MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
-+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
-okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-Certigna
-========
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
-EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
-MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
-Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
-XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
-GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
-ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
-DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
-Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
-tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
-BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
-SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
-hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
-ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
-PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
-1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
-======================================
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
-AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
-LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
-HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
-U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
-IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
-yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
-2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
-4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
-2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
-8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
-HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
-Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
-5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
-czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
-ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
-BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
-cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
-AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
-EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
-/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
-MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
-3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
-eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
-/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
-RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
-Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 2 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
-MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
-IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
-xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
-Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
-SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
-dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
-KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
-TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
-JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
-vQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 3 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
-MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
-yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
-6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
-uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
-2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
-O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
-yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
-IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
-092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
-5A==
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA I
-=============================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
-MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
-VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
-JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
-qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
-xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
-ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
-gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
-BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
-1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
-vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
-ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
-7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
-Deutsche Telekom Root CA 2
-==========================
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
-RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
-A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
-MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
-A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
-b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
-bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
-KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
-AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
-Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
-jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
-HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
-E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
-zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
-rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
-dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-ComSign Secured CA
-==================
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
-AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
-NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
-QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
-49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
-7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
-kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
-9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
-AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
-U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
-j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
-AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
-BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
-FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
-51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-ePKI Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
-EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
-MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
-MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
-IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
-lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
-qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
-12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
-WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
-ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
-lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
-vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
-Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
-MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
-1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
-KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
-xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
-NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
-GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
-xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
-gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
-sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
-BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
-=============================================================================================================================
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
-DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
-aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
-b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
-BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
-S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
-MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
-IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
-n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
-IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
-dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
-cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
-Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
-xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
-6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
-BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
-N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
-y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
-LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
-dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-Buypass Class 3 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
-MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
-ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
-n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
-AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
-1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
-pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
-EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
-htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
-el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-certSIGN ROOT CA
-================
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
-VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
-Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
-CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
-JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
-rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
-ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
-0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
-AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
-AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
-SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
-x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
-vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
-TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G3
-=============================================
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
-NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
-YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
-LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
-K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
-c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
-IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
-dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
-2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
-cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
-Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
-t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-thawte Primary Root CA - G2
-===========================
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
-VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
-IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
-Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
-MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
-b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
-IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
-LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
-8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
-mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
-G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
-rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-thawte Primary Root CA - G3
-===========================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
-ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
-VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
-A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
-P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
-+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
-7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
-vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
-KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
-A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
-8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
-er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G2
-=============================================
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
-OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
-b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
-BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
-KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
-EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
-ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
-npaqBA+K
------END CERTIFICATE-----
-
-VeriSign Universal Root Certification Authority
-===============================================
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
-1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
-MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
-9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
-AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
-tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
-CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
-a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
-Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
-Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
-P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
-wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
-mJO37M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G4
-============================================================
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
-VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
-b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
-ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
-b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
-Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
-rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
-/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
-HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
-Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
-A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
-AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-NetLock Arany (Class Gold) Főtanúsítvány
-============================================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
-A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
-dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
-cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
-MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
-ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
-c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
-0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
-/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
-H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
-fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
-neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
-BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
-qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
-YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
-NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
-dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G2
-==================================
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
-5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
-vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
-CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
-e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
-OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
-CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
-48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
-trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
-qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
-AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
-ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
-A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
-+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
-f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
-kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
-CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
-URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
-CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
-oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
-IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
-66+KAQ==
------END CERTIFICATE-----
-
-CA Disig
-========
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
-QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
-MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
-bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
-GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
-Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
-hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
-ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
-gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
-AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
-aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
-ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
-BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
-WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
-mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
-ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
-4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
-Hongkong Post Root CA 1
-=======================
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
-DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
-NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
-IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
-ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
-auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
-qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
-V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
-HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
-h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
-l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
-IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
-T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
-c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
------END CERTIFICATE-----
-
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-ACEDICOM Root
-=============
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
-T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
-MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
-A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
-WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
-YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
-MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
-m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
-HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
-xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
-3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
-2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
-TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
-4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
-9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
-aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
-eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
-zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
-ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
-KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
-nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
-I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
-MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
-tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
-CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
-bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
-D/xwzoiQ
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
-MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
-c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
-BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
-U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
-fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
-0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
-pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
-1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
-AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
-QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
-FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
-lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
-I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
-yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
-LXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
-===================================================
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
-ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
-MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
-cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
-aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
-8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
-jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
-JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
-9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
-SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
-F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
-D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
-Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
-
-GlobalSign Root CA - R3
-=======================
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
-iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
-0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
-rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
-OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
-xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
-lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
-EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
-bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
-YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
-kpeDMdmztcpHWD9f
------END CERTIFICATE-----
-
-Autoridad de Certificacion Firmaprofesional CIF A62634068
-=========================================================
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
-BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
-QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
-NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
-Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
-B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
-7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
-ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
-plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
-MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
-LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
-bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
-vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
-EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
-DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
-bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
-ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
-51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
-R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
-T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
-Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
-osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
-crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
-saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
-KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
-6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-Izenpe.com
-==========
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
-EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
-MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
-QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
-03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
-ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
-+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
-PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
-OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
-F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
-0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
-0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
-leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
-AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
-SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
-NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
-Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
-kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
-hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
-g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
-aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
-nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
-ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
-Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
-WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-Go Daddy Root Certificate Authority - G2
-========================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
-MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
-A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
-9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
-+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
-fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
-NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
-BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
-vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
-5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
-N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
------END CERTIFICATE-----
-
-Starfield Root Certificate Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
-eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
-DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
-VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
-dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
-W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
-bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
-N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
-ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
-JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
-TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
-4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
-F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
-c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-Starfield Services Root Certificate Authority - G2
-==================================================
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
-IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
-dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
-h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
-hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
-LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
-rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
-SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
-E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
-xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
-YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
------END CERTIFICATE-----
-
-AffirmTrust Commercial
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
-MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
-DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
-C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
-BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
-MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
-HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
-hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
-qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
-0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
-sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-AffirmTrust Networking
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
-MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
-Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
-dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
-/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
-h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
-HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
-UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
-12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
-WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
-/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-AffirmTrust Premium
-===================
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
-OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
-dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
-BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
-5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
-+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
-GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
-p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
-S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
-6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
-/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
-+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
-MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
-6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
-L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
-+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
-BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
-IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
-g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
-zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-AffirmTrust Premium ECC
-=======================
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
-BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
-MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
-cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
-N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
-BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
-BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
-57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
-eQ==
------END CERTIFICATE-----
-
-Certum Trusted Network CA
-=========================
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
-MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
-ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
-l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
-J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
-fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
-cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
-Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
-DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
-jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
-mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
-Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-Certinomis - Autorité Racine
-=============================
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
-LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
-A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
-JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
-wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
-Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
-2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
-jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
-c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
-lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
-xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
-530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
-4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
-WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
-R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
-nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
-CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
-JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
-qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
-WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
-wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
-vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-A-Trust-nQual-03
-================
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
-Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
-a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
-dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
-RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
-ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
-c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
-zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
-yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
-SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
-iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
-cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
-eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
-ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
-sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
-JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
-ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-TWCA Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
-VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
-EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
-IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
-QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
-oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
-4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
-y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
-9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
-mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
-QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
-T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
-Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-Security Communication RootCA2
-==============================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
-SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
-aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
-+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
-3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
-spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
-EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
-QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
-u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
-3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
-tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
-mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-Actalis Authentication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
-BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
-AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
-MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
-IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
-wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
-by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
-zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
-YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
-oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
-EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
-hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
-EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
-jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
-iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
-WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
-JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
-K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
-Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
-4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
-2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
-lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
-OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
-vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-Trustis FPS Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
-EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
-IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
-BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
-RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
-H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
-cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
-o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
-AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
-BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
-GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
-yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
-8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
-l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
-iB6XzCGcKQENZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
-Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
-dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
-c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
-bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
-aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
-L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
-fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
-N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
-Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
-tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
-e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
-2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
-HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
-D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-StartCom Certification Authority G2
-===================================
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
-ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
-o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
-4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
-Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
-Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
-O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
-vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
-nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
-FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
-z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
-KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
-J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
-JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
-/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
-nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
-blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
-l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
-7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
-obp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-Buypass Class 2 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
-DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
-g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
-9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
-/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
-CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
-awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
-zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
-Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
-Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
-M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
-osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
-aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
-DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
-LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
-oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
-wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
-CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
-rJgWVqA=
------END CERTIFICATE-----
-
-Buypass Class 3 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
-DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
-sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
-5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
-7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
-ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
-2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
-/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
-RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
-Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
-j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
-uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
-Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
-ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
-KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
-6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
-UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
-eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
-Cp/HuZc=
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 3
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
-MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
-9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
-NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
-iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
-0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
-AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
-fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
-ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
-P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
------END CERTIFICATE-----
-
-EE Certification Centre Root CA
-===============================
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
-dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
-MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
-UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
-ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
-TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
-rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
-93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
-P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
-MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
-BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
-xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
-lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
-3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
-dcGWxZ0=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2007
-=================================================
------BEGIN CERTIFICATE-----
-MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
-DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
-a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
-BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
-bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
-YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
-KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
-KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
-rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
-AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
-Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
-aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
-Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
-BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
-poRq0Tl9
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
-Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
-LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
-ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
-BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
-KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
-p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
-AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
-4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
-eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
-MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
-PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
-OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
-2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
-o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
-dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
-X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 EV 2009
-=================================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
-egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
-zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
-7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
-sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
-11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
-cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
-ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
-MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
-b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
-c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
-PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
-nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
-ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
-NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
-w9y4AyHqnxbxLFS1
------END CERTIFICATE-----
-
-PSCProcert
-==========
------BEGIN CERTIFICATE-----
-MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
-ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
-MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
-dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
-cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
-IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
-MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
-DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
-ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
-Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
-wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
-3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
-RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
-EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
-0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
-0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
-td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
-Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
-r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
-AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
-Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
-xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
-ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
-EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
-Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
-ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
-9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
-MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
-LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
-ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
-YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
-Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
-dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
-T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
-g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
-uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
-n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
-FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
-5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
-3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
-poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
-eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
------END CERTIFICATE-----
-
-China Internet Network Information Center EV Certificates Root
-==============================================================
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
-BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
-aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
-Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
-A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
-PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
-cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
-jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
-98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
-klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
-KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
-7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
-glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
-0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
-7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
-ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
-5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
------END CERTIFICATE-----
-
-Swisscom Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
-MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
-LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
-ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
-wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
-Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
-SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
-NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
-mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
-Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
-qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
-BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
-MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
-v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
-82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
-o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
-a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
-OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
-mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
-+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
-rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
-5OfNeOI5wSsSnqaeG8XmDtkx2Q==
------END CERTIFICATE-----
-
-Swisscom Root EV CA 2
-=====================
------BEGIN CERTIFICATE-----
-MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
-BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
-cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
-MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
-HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
-Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
-o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
-Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
-GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
-qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
-Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
-alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
-m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
-bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
-xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
-BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
-MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
-bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
-j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
-wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
-XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
-59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
-23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
-J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
-HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
-uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
-l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
------END CERTIFICATE-----
-
-CA Disig Root R1
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
-3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
-u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
-m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
-CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
-YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
-vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
-LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
-ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
-XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
-04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
-xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
-LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
-CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
-VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
-YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
-ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
-lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
-UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
-a7+h89n07eLw4+1knj0vllJPgFOL
------END CERTIFICATE-----
-
-CA Disig Root R2
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
-w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
-xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
-A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
-GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
-g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
-5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
-koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
-Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
-Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
-Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
-tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
-sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
-dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
-1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
-mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
-utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
-sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
-UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
-7+ZtsH8tZ/3zbBt1RqPlShfppNcL
------END CERTIFICATE-----
-
-ACCVRAIZ1
-=========
------BEGIN CERTIFICATE-----
-MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
-SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
-MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
-UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
-jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
-RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
-aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
-0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
-WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
-8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
-5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
-9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
-Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
-Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
-Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
-VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
-Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
-QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
-AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
-YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
-AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
-IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
-aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
-dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
-MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
-hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
-R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
-YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
-nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
-TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
-sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
-I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
-Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
-3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
-EfbRD0tVNEYqi4Y7
------END CERTIFICATE-----
-
-TWCA Global Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
-CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
-QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
-EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
-Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
-nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
-r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
-Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
-tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
-KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
-sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
-yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
-kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
-zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
-AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
-cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
-LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
-8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
-/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
-lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
-A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
-i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
-EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
-zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
------END CERTIFICATE-----
-
-TeliaSonera Root CA v1
-======================
------BEGIN CERTIFICATE-----
-MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
-CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
-MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
-VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
-6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
-3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
-B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
-Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
-oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
-F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
-oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
-gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
-TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
-AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
-DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
-zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
-0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
-pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
-G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
-c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
-JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
-qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
-Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
-WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
------END CERTIFICATE-----
-
-E-Tugra Certification Authority
-===============================
------BEGIN CERTIFICATE-----
-MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
-DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
-ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
-ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
-NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
-QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
-cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
-DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
-hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
-CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
-ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
-BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
-E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
-rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
-jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
-rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
-dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
-/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
-kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
-XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
-VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
-a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
-dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
-KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
-Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
-8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
-C7TbO6Orb1wdtn7os4I07QZcJA==
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 2
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
-MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
-SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
-vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
-2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
-WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
-YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
-r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
-vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
-3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
-9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
------END CERTIFICATE-----
-
-Atos TrustedRoot 2011
-=====================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
-cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
-MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
-A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
-hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
-54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
-DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
-HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
-z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
-l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
-bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
-k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
-TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
-61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
-3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
------END CERTIFICATE-----
diff --git a/core/vendor/guzzlehttp/guzzle/src/functions.php b/core/vendor/guzzlehttp/guzzle/src/functions.php
index 46d4c4d..4d89601 100644
--- a/core/vendor/guzzlehttp/guzzle/src/functions.php
+++ b/core/vendor/guzzlehttp/guzzle/src/functions.php
@@ -1,338 +1,62 @@
 <?php
+/*
+ * This file is here for backwards compatibility with Guzzle 4. Use the
+ * functions available on GuzzleHttp\Utils instead.
+ */
 
 namespace GuzzleHttp;
 
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\UriTemplate;
-
 if (!defined('GUZZLE_FUNCTIONS_VERSION')) {
 
     define('GUZZLE_FUNCTIONS_VERSION', ClientInterface::VERSION);
 
     /**
-     * Send a custom request
-     *
-     * @param string $method  HTTP request method
-     * @param string $url     URL of the request
-     * @param array  $options Options to use with the request.
-     *
-     * @return ResponseInterface
-     */
-    function request($method, $url, array $options = [])
-    {
-        static $client;
-        if (!$client) {
-            $client = new Client();
-        }
-
-        return $client->send($client->createRequest($method, $url, $options));
-    }
-
-    /**
-     * Send a GET request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function get($url, array $options = [])
-    {
-        return request('GET', $url, $options);
-    }
-
-    /**
-     * Send a HEAD request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function head($url, array $options = [])
-    {
-        return request('HEAD', $url, $options);
-    }
-
-    /**
-     * Send a DELETE request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function delete($url, array $options = [])
-    {
-        return request('DELETE', $url, $options);
-    }
-
-    /**
-     * Send a POST request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function post($url, array $options = [])
-    {
-        return request('POST', $url, $options);
-    }
-
-    /**
-     * Send a PUT request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function put($url, array $options = [])
-    {
-        return request('PUT', $url, $options);
-    }
-
-    /**
-     * Send a PATCH request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function patch($url, array $options = [])
-    {
-        return request('PATCH', $url, $options);
-    }
-
-    /**
-     * Send an OPTIONS request
-     *
-     * @param string $url     URL of the request
-     * @param array  $options Array of request options
-     *
-     * @return ResponseInterface
-     */
-    function options($url, array $options = [])
-    {
-        return request('OPTIONS', $url, $options);
-    }
-
-    /**
-     * Convenience method for sending multiple requests in parallel and
-     * retrieving a hash map of requests to response objects or
-     * RequestException objects.
-     *
-     * Note: This method keeps every request and response in memory, and as
-     * such is NOT recommended when sending a large number or an indeterminable
-     * number of requests in parallel.
-     *
-     * @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\ClientInterface::sendAll()}
-     *
-     * @return \SplObjectStorage Requests are the key and each value is a
-     *     {@see GuzzleHttp\Message\ResponseInterface} if the request succeeded
-     *     or a {@see GuzzleHttp\Exception\RequestException} if it failed.
-     * @throws \InvalidArgumentException if the event format is incorrect.
+     * @param ClientInterface $client
+     * @param array           $requests
+     * @param array           $options
+     * @return \SplObjectStorage For backwards compatibility with v4
+     * @deprecated Use GuzzleHttp\Pool::batch
      */
     function batch(ClientInterface $client, $requests, array $options = [])
     {
+        $result = Pool::batch($client, $requests, $options);
         $hash = new \SplObjectStorage();
-        foreach ($requests as $request) {
-            $hash->attach($request);
-        }
-
-        // Merge the necessary complete and error events to the event listeners
-        // so that as each request succeeds or fails, it is added to the result
-        // hash.
-        $options = RequestEvents::convertEventArray(
-            $options,
-            ['complete', 'error'],
-            [
-                'priority' => RequestEvents::EARLY,
-                'once' => true,
-                'fn' => function ($e) use ($hash) {
-                    $hash[$e->getRequest()] = $e;
-                }
-            ]
-        );
-
-        // Send the requests in parallel and aggregate the results.
-        $client->sendAll($requests, $options);
-
-        // Update the received value for any of the intercepted requests.
-        foreach ($hash as $request) {
-            if ($hash[$request] instanceof CompleteEvent) {
-                $hash[$request] = $hash[$request]->getResponse();
-            } elseif ($hash[$request] instanceof ErrorEvent) {
-                $hash[$request] = $hash[$request]->getException();
-            }
+        foreach ($result->getKeys() as $request) {
+            $hash[$request] = $result->getResult($request);
         }
 
         return $hash;
     }
 
     /**
-     * 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
+     * @deprecated Use GuzzleHttp\Utils::getPath
      */
     function get_path($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;
+        return Utils::getPath($data, $path);
     }
 
     /**
-     * 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.
+     * @deprecated Use GuzzleHttp\Utils::setPath
      */
     function set_path(&$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];
-            }
-        }
+        Utils::setPath($data, $path, $value);
     }
 
     /**
-     * Expands a URI template
-     *
-     * @param string $template  URI template
-     * @param array  $variables Template variables
-     *
-     * @return string
+     * @deprecated Use GuzzleHttp\Utils::uriTemplate
      */
     function uri_template($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);
+        return Utils::uriTemplate($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
+     * @deprecated Use GuzzleHttp\Utils::jsonDecode
      */
     function json_decode($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;
-    }
-
-    /**
-     * @internal
-     */
-    function deprecation_proxy($object, $name, $arguments, $map)
-    {
-        if (!isset($map[$name])) {
-            throw new \BadMethodCallException('Unknown method, ' . $name);
-        }
-
-        $message = sprintf('%s is deprecated and will be removed in a future '
-            . 'version. Update your code to use the equivalent %s method '
-            . 'instead to avoid breaking changes when this shim is removed.',
-            get_class($object) . '::' . $name . '()',
-            get_class($object) . '::' . $map[$name] . '()'
-        );
-
-        trigger_error($message, E_USER_DEPRECATED);
-
-        return call_user_func_array([$object, $map[$name]], $arguments);
+        return Utils::jsonDecode($json, $assoc, $depth, $options);
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/AbstractCurl.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/AbstractCurl.php
deleted file mode 100644
index fa8f171..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/AbstractCurl.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-use GuzzleHttp\Adapter\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\Tests\Server;
-use GuzzleHttp\Url;
-
-abstract class AbstractCurl extends \PHPUnit_Framework_TestCase
-{
-    abstract protected function getAdapter($factory = null, $options = []);
-
-    public function testSendsRequest()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 0\r\n\r\n");
-        $t = new Transaction(new Client(), new Request('GET', Server::$url));
-        $a = $this->getAdapter();
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     */
-    public function testCatchesErrorWhenPreparing()
-    {
-        $r = new Request('GET', Server::$url);
-        $f = $this->getMockBuilder('GuzzleHttp\Adapter\Curl\CurlFactory')
-            ->setMethods(['__invoke'])
-            ->getMock();
-        $f->expects($this->once())
-            ->method('__invoke')
-            ->will($this->throwException(new RequestException('foo', $r)));
-
-        $t = new Transaction(new Client(), $r);
-        $a = $this->getAdapter(null, ['handle_factory' => $f]);
-        $a->send($t);
-    }
-
-    public function testDispatchesAfterSendEvent()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
-        $r = new Request('GET', Server::$url);
-        $t = new Transaction(new Client(), $r);
-        $a = $this->getAdapter();
-        $ev = null;
-        $r->getEmitter()->on('complete', function (CompleteEvent $e) use (&$ev) {
-            $ev = $e;
-            $e->intercept(new Response(200, ['Foo' => 'bar']));
-        });
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    public function testDispatchesErrorEventAndRecovers()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
-        $r = new Request('GET', Server::$url);
-        $t = new Transaction(new Client(), $r);
-        $a = $this->getAdapter();
-        $r->getEmitter()->once('complete', function (CompleteEvent $e) {
-            throw new RequestException('Foo', $e->getRequest());
-        });
-        $r->getEmitter()->on('error', function (ErrorEvent $e) {
-            $e->intercept(new Response(200, ['Foo' => 'bar']));
-        });
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    public function testStripsFragmentFromHost()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\n\r\nContent-Length: 0\r\n\r\n");
-        // This will fail if the removal of the #fragment is not performed
-        $url = Url::fromString(Server::$url)->setPath(null)->setFragment('foo');
-        $client = new Client();
-        $client->get($url);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/BatchContextTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/BatchContextTest.php
deleted file mode 100644
index 56266ba..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/BatchContextTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-use GuzzleHttp\Adapter\Curl\BatchContext;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\BatchContext
- */
-class BatchContextTest extends \PHPUnit_Framework_TestCase
-{
-    public function testProvidesGetters()
-    {
-        $m = curl_multi_init();
-        $b = new BatchContext($m, true);
-        $this->assertTrue($b->throwsExceptions());
-        $this->assertSame($m, $b->getMultiHandle());
-        $this->assertFalse($b->hasPending());
-        curl_multi_close($m);
-    }
-
-    public function testValidatesTransactionsAreNotAddedTwice()
-    {
-        $m = curl_multi_init();
-        $b = new BatchContext($m, true);
-        $h = curl_init();
-        $t = new Transaction(
-            new Client(),
-            new Request('GET', 'http://httbin.org')
-        );
-        $b->addTransaction($t, $h);
-        try {
-            $b->addTransaction($t, $h);
-            $this->fail('Did not throw');
-        } catch (\RuntimeException $e) {
-            curl_close($h);
-            curl_multi_close($m);
-        }
-    }
-
-    public function testManagesHandles()
-    {
-        $m = curl_multi_init();
-        $b = new BatchContext($m, true);
-        $h = curl_init();
-        $t = new Transaction(
-            new Client(),
-            new Request('GET', 'http://httbin.org')
-        );
-        $b->addTransaction($t, $h);
-        $this->assertTrue($b->isActive());
-        $this->assertSame($t, $b->findTransaction($h));
-        $b->removeTransaction($t);
-        $this->assertFalse($b->isActive());
-        try {
-            $this->assertEquals([], $b->findTransaction($h));
-            $this->fail('Did not throw');
-        } catch (\RuntimeException $e) {}
-        curl_multi_close($m);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Transaction not registered
-     */
-    public function testThrowsWhenRemovingNonExistentTransaction()
-    {
-        $b = new BatchContext('foo', false);
-        $t = new Transaction(
-            new Client(),
-            new Request('GET', 'http://httbin.org')
-        );
-        $b->removeTransaction($t);
-    }
-
-    public function testReturnsPendingAsIteratorTypeObject()
-    {
-        $t1 = new Transaction(new Client(), new Request('GET', 'http://t.com'));
-        $t2 = new Transaction(new Client(), new Request('GET', 'http://t.com'));
-        $t3 = new Transaction(new Client(), new Request('GET', 'http://t.com'));
-        $iter = new \ArrayIterator([$t1, $t2, $t3]);
-        $b = new BatchContext('foo', false, $iter);
-        $this->assertTrue($b->hasPending());
-        $this->assertSame($t1, $b->nextPending());
-        $this->assertTrue($b->hasPending());
-        $this->assertSame($t2, $b->nextPending());
-        $this->assertTrue($b->hasPending());
-        $this->assertSame($t3, $b->nextPending());
-        $this->assertFalse($b->hasPending());
-        $this->assertNull($b->nextPending());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlAdapterTest.php
deleted file mode 100644
index dbbdeed..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlAdapterTest.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-require_once __DIR__ . '/AbstractCurl.php';
-
-use GuzzleHttp\Adapter\Curl\CurlAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Event\HeadersEvent;
-use GuzzleHttp\Exception\ServerException;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\CurlAdapter
- */
-class CurlAdapterTest extends AbstractCurl
-{
-    protected function setUp()
-    {
-        if (!function_exists('curl_reset')) {
-            $this->markTestSkipped('curl_reset() is not available');
-        }
-    }
-
-    protected function getAdapter($factory = null, $options = [])
-    {
-        return new CurlAdapter($factory ?: new MessageFactory(), $options);
-    }
-
-    public function testCanSetMaxHandles()
-    {
-        $a = new CurlAdapter(new MessageFactory(), ['max_handles' => 10]);
-        $this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
-    }
-
-    public function testCanInterceptBeforeSending()
-    {
-        $client = new Client();
-        $request = new Request('GET', 'http://httpbin.org/get');
-        $response = new Response(200);
-        $request->getEmitter()->on(
-            'before',
-            function (BeforeEvent $e) use ($response) {
-                $e->intercept($response);
-            }
-        );
-        $transaction = new Transaction($client, $request);
-        $f = 'does_not_work';
-        $a = new CurlAdapter(new MessageFactory(), ['handle_factory' => $f]);
-        $a->send($transaction);
-        $this->assertSame($response, $transaction->getResponse());
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage cURL error
-     */
-    public function testThrowsCurlErrors()
-    {
-        $client = new Client();
-        $request = $client->createRequest('GET', 'http://localhost:123', [
-            'connect_timeout' => 0.001,
-            'timeout' => 0.001,
-        ]);
-        $transaction = new Transaction($client, $request);
-        $a = new CurlAdapter(new MessageFactory());
-        $a->send($transaction);
-    }
-
-    public function testHandlesCurlErrors()
-    {
-        $client = new Client();
-        $request = $client->createRequest('GET', 'http://localhost:123', [
-            'connect_timeout' => 0.001,
-            'timeout' => 0.001,
-        ]);
-        $r = new Response(200);
-        $request->getEmitter()->on('error', function (ErrorEvent $e) use ($r) {
-            $e->intercept($r);
-        });
-        $transaction = new Transaction($client, $request);
-        $a = new CurlAdapter(new MessageFactory());
-        $a->send($transaction);
-        $this->assertSame($r, $transaction->getResponse());
-    }
-
-    public function testReleasesAdditionalEasyHandles()
-    {
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]);
-        $a = new CurlAdapter(new MessageFactory(), ['max_handles' => 2]);
-        $client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
-        $request = $client->createRequest('GET', '/', [
-            'events' => [
-                'headers' => function (HeadersEvent $e) use ($client) {
-                    $client->get('/', [
-                        'events' => [
-                            'headers' => function (HeadersEvent $e) {
-                                $e->getClient()->get('/');
-                            }
-                        ]
-                    ]);
-                }
-            ]
-        ]);
-        $transaction = new Transaction($client, $request);
-        $a->send($transaction);
-        $this->assertCount(2, $this->readAttribute($a, 'handles'));
-    }
-
-    public function testDoesNotSaveToWhenFailed()
-    {
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n"
-        ]);
-
-        $tmp = tempnam('/tmp', 'test_save_to');
-        unlink($tmp);
-        $a = new CurlAdapter(new MessageFactory());
-        $client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
-        try {
-            $client->get('/', ['save_to' => $tmp]);
-        } catch (ServerException $e) {
-            $this->assertFileNotExists($tmp);
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlFactoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlFactoryTest.php
deleted file mode 100644
index d62283b..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlFactoryTest.php
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-
-// Override curl_setopt_array() to get the last set curl options
-namespace GuzzleHttp\Adapter\Curl
-{
-    function curl_setopt_array($handle, array $options)
-    {
-        $_SERVER['last_curl'] = $options;
-        \curl_setopt_array($handle, $options);
-    }
-}
-
-namespace GuzzleHttp\Tests\Adapter\Curl {
-
-    use GuzzleHttp\Adapter\Curl\MultiAdapter;
-    use GuzzleHttp\Event\BeforeEvent;
-    use GuzzleHttp\Exception\ServerException;
-    use GuzzleHttp\Message\RequestInterface;
-    use GuzzleHttp\Stream\Stream;
-    use GuzzleHttp\Adapter\Curl\CurlFactory;
-    use GuzzleHttp\Adapter\Transaction;
-    use GuzzleHttp\Client;
-    use GuzzleHttp\Message\MessageFactory;
-    use GuzzleHttp\Message\Request;
-    use GuzzleHttp\Tests\Server;
-
-    /**
-     * @covers GuzzleHttp\Adapter\Curl\CurlFactory
-     */
-    class CurlFactoryTest extends \PHPUnit_Framework_TestCase
-    {
-        /** @var \GuzzleHttp\Tests\Server */
-        static $server;
-
-        public static function setUpBeforeClass()
-        {
-            unset($_SERVER['last_curl']);
-        }
-
-        public static function tearDownAfterClass()
-        {
-            unset($_SERVER['last_curl']);
-        }
-
-        public function testCreatesCurlHandle()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nFoo: Bar\r\n Baz:  bam\r\nContent-Length: 2\r\n\r\nhi"]);
-            $request = new Request(
-                'PUT',
-                Server::$url . 'haha',
-                ['Hi' => ' 123'],
-                Stream::factory('testing')
-            );
-            $stream = Stream::factory();
-            $request->getConfig()->set('save_to', $stream);
-            $request->getConfig()->set('verify', true);
-            $this->emit($request);
-
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            $this->assertInternalType('resource', $h);
-            curl_exec($h);
-            $response = $t->getResponse();
-            $this->assertInstanceOf('GuzzleHttp\Message\ResponseInterface', $response);
-            $this->assertEquals('hi', $response->getBody());
-            $this->assertEquals('Bar', $response->getHeader('Foo'));
-            $this->assertEquals('bam', $response->getHeader('Baz'));
-            curl_close($h);
-
-            $sent = Server::received(true)[0];
-            $this->assertEquals('PUT', $sent->getMethod());
-            $this->assertEquals('/haha', $sent->getPath());
-            $this->assertEquals('123', $sent->getHeader('Hi'));
-            $this->assertEquals('7', $sent->getHeader('Content-Length'));
-            $this->assertEquals('testing', $sent->getBody());
-            $this->assertEquals('1.1', $sent->getProtocolVersion());
-            $this->assertEquals('hi', (string) $stream);
-
-            $this->assertEquals(2, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYHOST]);
-            $this->assertEquals(true, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYPEER]);
-        }
-
-        public function testSendsHeadRequests()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\n"]);
-            $request = new Request('HEAD', Server::$url);
-            $this->emit($request);
-
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $response = $t->getResponse();
-            $this->assertEquals('2', $response->getHeader('Content-Length'));
-            $this->assertEquals('', $response->getBody());
-
-            $sent = Server::received(true)[0];
-            $this->assertEquals('HEAD', $sent->getMethod());
-            $this->assertEquals('/', $sent->getPath());
-        }
-
-        public function testSendsPostRequestWithNoBody()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-            $request = new Request('POST', Server::$url);
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $sent = Server::received(true)[0];
-            $this->assertEquals('POST', $sent->getMethod());
-            $this->assertEquals('', $sent->getBody());
-        }
-
-        public function testSendsChunkedRequests()
-        {
-            $stream = $this->getMockBuilder('GuzzleHttp\Stream\Stream')
-                ->setConstructorArgs([fopen('php://temp', 'r+')])
-                ->setMethods(['getSize'])
-                ->getMock();
-            $stream->expects($this->any())
-                ->method('getSize')
-                ->will($this->returnValue(null));
-            $stream->write('foo');
-            $stream->seek(0);
-
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-            $request = new Request('PUT', Server::$url, [], $stream);
-            $this->emit($request);
-            $this->assertNull($request->getBody()->getSize());
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $sent = Server::received(false)[0];
-            $this->assertContains('PUT / HTTP/1.1', $sent);
-            $this->assertContains('transfer-encoding: chunked', strtolower($sent));
-            $this->assertContains("\r\n\r\nfoo", $sent);
-        }
-
-        public function testDecodesGzippedResponses()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo"]);
-            $request = new Request('GET', Server::$url, ['Accept-Encoding' => '']);
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $this->assertEquals('foo', $t->getResponse()->getBody());
-            $sent = Server::received(true)[0];
-            $this->assertContains('gzip', $sent->getHeader('Accept-Encoding'));
-        }
-
-        public function testAddsDebugInfoToBuffer()
-        {
-            $r = fopen('php://temp', 'r+');
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo"]);
-            $request = new Request('GET', Server::$url);
-            $request->getConfig()->set('debug', $r);
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            rewind($r);
-            $this->assertNotEmpty(stream_get_contents($r));
-        }
-
-        public function testAddsProxyOptions()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('proxy', '123');
-            $request->getConfig()->set('connect_timeout', 1);
-            $request->getConfig()->set('timeout', 2);
-            $request->getConfig()->set('cert', __FILE__);
-            $request->getConfig()->set('ssl_key', [__FILE__, '123']);
-            $request->getConfig()->set('verify', false);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            curl_close($f($t, new MessageFactory()));
-            $this->assertEquals('123', $_SERVER['last_curl'][CURLOPT_PROXY]);
-            $this->assertEquals(1000, $_SERVER['last_curl'][CURLOPT_CONNECTTIMEOUT_MS]);
-            $this->assertEquals(2000, $_SERVER['last_curl'][CURLOPT_TIMEOUT_MS]);
-            $this->assertEquals(__FILE__, $_SERVER['last_curl'][CURLOPT_SSLCERT]);
-            $this->assertEquals(__FILE__, $_SERVER['last_curl'][CURLOPT_SSLKEY]);
-            $this->assertEquals('123', $_SERVER['last_curl'][CURLOPT_SSLKEYPASSWD]);
-            $this->assertEquals(0, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYHOST]);
-            $this->assertEquals(false, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYPEER]);
-        }
-
-        /**
-         * @expectedException \RuntimeException
-         */
-        public function testEnsuresCertExists()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('cert', __FILE__ . 'ewfwef');
-            $f = new CurlFactory();
-            $f(new Transaction(new Client(), $request), new MessageFactory());
-        }
-
-        /**
-         * @expectedException \RuntimeException
-         */
-        public function testEnsuresKeyExists()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('ssl_key', __FILE__ . 'ewfwef');
-            $f = new CurlFactory();
-            $f(new Transaction(new Client(), $request), new MessageFactory());
-        }
-
-        /**
-         * @expectedException \RuntimeException
-         */
-        public function testEnsuresCacertExists()
-        {
-            $request = new Request('GET', Server::$url);
-            $this->emit($request);
-            $request->getConfig()->set('verify', __FILE__ . 'ewfwef');
-            $f = new CurlFactory();
-            $f(new Transaction(new Client(), $request), new MessageFactory());
-        }
-
-        public function testClientUsesSslByDefault()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo"]);
-            $f = new CurlFactory();
-            $client = new Client([
-                'base_url' => Server::$url,
-                'adapter' => new MultiAdapter(new MessageFactory(), ['handle_factory' => $f])
-            ]);
-            $client->get();
-            $this->assertEquals(2, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYHOST]);
-            $this->assertEquals(true, $_SERVER['last_curl'][CURLOPT_SSL_VERIFYPEER]);
-            $this->assertFileExists($_SERVER['last_curl'][CURLOPT_CAINFO]);
-        }
-
-        public function testConvertsConstantNameKeysToValues()
-        {
-            $request = new Request('GET', Server::$url);
-            $request->getConfig()->set('curl', ['CURLOPT_USERAGENT' => 'foo']);
-            $this->emit($request);
-            $f = new CurlFactory();
-            curl_close($f(new Transaction(new Client(), $request), new MessageFactory()));
-            $this->assertEquals('foo', $_SERVER['last_curl'][CURLOPT_USERAGENT]);
-        }
-
-        public function testStripsFragment()
-        {
-            $request = new Request('GET', Server::$url . '#foo');
-            $this->emit($request);
-            $f = new CurlFactory();
-            curl_close($f(new Transaction(new Client(), $request), new MessageFactory()));
-            $this->assertEquals(Server::$url, $_SERVER['last_curl'][CURLOPT_URL]);
-        }
-
-        public function testDoesNotSendSizeTwice()
-        {
-            $request = new Request('PUT', Server::$url, [], Stream::factory(str_repeat('a', 32769)));
-            $this->emit($request);
-            $f = new CurlFactory();
-            curl_close($f(new Transaction(new Client(), $request), new MessageFactory()));
-            $this->assertEquals(32769, $_SERVER['last_curl'][CURLOPT_INFILESIZE]);
-            $this->assertNotContains('Content-Length', implode(' ', $_SERVER['last_curl'][CURLOPT_HTTPHEADER]));
-        }
-
-        public function testCanSendPayloadWithGet()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\n\r\n"]);
-            $request = new Request(
-                'GET',
-                Server::$url,
-                [],
-                Stream::factory('foo')
-            );
-            $this->emit($request);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $h = $f($t, new MessageFactory());
-            curl_exec($h);
-            curl_close($h);
-            $sent = Server::received(true)[0];
-            $this->assertEquals('foo', (string) $sent->getBody());
-            $this->assertEquals(3, (string) $sent->getHeader('Content-Length'));
-        }
-
-        private function emit(RequestInterface $request)
-        {
-            $event = new BeforeEvent(new Transaction(new Client(), $request));
-            $request->getEmitter()->emit('before', $event);
-        }
-
-        public function testDoesNotAlwaysAddContentType()
-        {
-            Server::flush();
-            Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-            $client = new Client();
-            $client->put(Server::$url . '/foo', ['body' => 'foo']);
-            $request = Server::received(true)[0];
-            $this->assertEquals('', $request->getHeader('Content-Type'));
-        }
-
-        /**
-         * @expectedException \GuzzleHttp\Exception\AdapterException
-         */
-        public function testThrowsForStreamOption()
-        {
-            $request = new Request('GET', Server::$url . 'haha');
-            $request->getConfig()->set('stream', true);
-            $t = new Transaction(new Client(), $request);
-            $f = new CurlFactory();
-            $f($t, new MessageFactory());
-        }
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/MultiAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/MultiAdapterTest.php
deleted file mode 100644
index f6175ae..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/MultiAdapterTest.php
+++ /dev/null
@@ -1,322 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-require_once __DIR__ . '/AbstractCurl.php';
-
-use GuzzleHttp\Adapter\Curl\MultiAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\NoSeekStream;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\MultiAdapter
- */
-class MultiAdapterTest extends AbstractCurl
-{
-    protected function getAdapter($factory = null, $options = [])
-    {
-        return new MultiAdapter($factory ?: new MessageFactory(), $options);
-    }
-
-    public function testSendsSingleRequest()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 0\r\n\r\n");
-        $t = new Transaction(new Client(), new Request('GET', Server::$url));
-        $a = new MultiAdapter(new MessageFactory());
-        $response = $a->send($t);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('bar', $response->getHeader('Foo'));
-    }
-
-    public function testCanSetSelectTimeout()
-    {
-        $current = isset($_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT])
-            ? $_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT]: null;
-        unset($_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT]);
-        $a = new MultiAdapter(new MessageFactory());
-        $this->assertEquals(1, $this->readAttribute($a, 'selectTimeout'));
-        $a = new MultiAdapter(new MessageFactory(), ['select_timeout' => 10]);
-        $this->assertEquals(10, $this->readAttribute($a, 'selectTimeout'));
-        $_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT] = 2;
-        $a = new MultiAdapter(new MessageFactory());
-        $this->assertEquals(2, $this->readAttribute($a, 'selectTimeout'));
-        $_SERVER[MultiAdapter::ENV_SELECT_TIMEOUT] = $current;
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\AdapterException
-     * @expectedExceptionMessage cURL error -2:
-     */
-    public function testChecksCurlMultiResult()
-    {
-        MultiAdapter::throwMultiError(-2);
-    }
-
-    public function testChecksForCurlException()
-    {
-        $request = new Request('GET', 'http://httbin.org');
-        $transaction = $this->getMockBuilder('GuzzleHttp\Adapter\Transaction')
-            ->setMethods(['getRequest'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $transaction->expects($this->exactly(2))
-            ->method('getRequest')
-            ->will($this->returnValue($request));
-        $context = $this->getMockBuilder('GuzzleHttp\Adapter\Curl\BatchContext')
-            ->setMethods(['throwsExceptions'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $context->expects($this->once())
-            ->method('throwsExceptions')
-            ->will($this->returnValue(true));
-        $a = new MultiAdapter(new MessageFactory());
-        $r = new \ReflectionMethod($a, 'isCurlException');
-        $r->setAccessible(true);
-        try {
-            $r->invoke($a, $transaction, ['result' => -10], $context, []);
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertSame($request, $e->getRequest());
-            $this->assertContains('[curl] (#-10) ', $e->getMessage());
-            $this->assertContains($request->getUrl(), $e->getMessage());
-        }
-    }
-
-    public function testSendsParallelRequestsFromQueue()
-    {
-        $c = new Client();
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
-        ]);
-        $transactions = [
-            new Transaction($c, new Request('GET', Server::$url)),
-            new Transaction($c, new Request('PUT', Server::$url)),
-            new Transaction($c, new Request('HEAD', Server::$url)),
-            new Transaction($c, new Request('GET', Server::$url))
-        ];
-        $a = new MultiAdapter(new MessageFactory());
-        $a->sendAll(new \ArrayIterator($transactions), 2);
-        foreach ($transactions as $t) {
-            $response = $t->getResponse();
-            $this->assertNotNull($response);
-            $this->assertEquals(200, $response->getStatusCode());
-        }
-    }
-
-    public function testCreatesAndReleasesHandlesWhenNeeded()
-    {
-        $a = new MultiAdapter(new MessageFactory());
-        $c = new Client([
-            'adapter'  => $a,
-            'base_url' => Server::$url
-        ]);
-
-        Server::flush();
-        Server::enqueue([
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-            "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-        ]);
-
-        $ef = function (ErrorEvent $e) { throw $e->getException(); };
-
-        $request1 = $c->createRequest('GET', '/');
-        $request1->getEmitter()->on('headers', function () use ($a, $c, $ef) {
-            $a->send(new Transaction($c, $c->createRequest('GET', '/', [
-                'events' => [
-                    'headers' => function () use ($a, $c, $ef) {
-                        $r = $c->createRequest('GET', '/', [
-                            'events' => ['error' => ['fn' => $ef, 'priority' => 9999]]
-                        ]);
-                        $r->getEmitter()->once('headers', function () use ($a, $c, $r) {
-                            $a->send(new Transaction($c, $r));
-                        });
-                        $a->send(new Transaction($c, $r));
-                        // Now, reuse an existing handle
-                        $a->send(new Transaction($c, $r));
-                        },
-                    'error' => ['fn' => $ef, 'priority' => 9999]
-                ]
-            ])));
-        });
-
-        $request1->getEmitter()->on('error', $ef);
-
-        $transactions = [
-            new Transaction($c, $request1),
-            new Transaction($c, $c->createRequest('PUT')),
-            new Transaction($c, $c->createRequest('HEAD'))
-        ];
-
-        $a->sendAll(new \ArrayIterator($transactions), 2);
-
-        foreach ($transactions as $index => $t) {
-            $response = $t->getResponse();
-            $this->assertInstanceOf(
-                'GuzzleHttp\\Message\\ResponseInterface',
-                $response,
-                'Transaction at index ' . $index . ' did not populate response'
-            );
-            $this->assertEquals(200, $response->getStatusCode());
-        }
-    }
-
-    public function testThrowsAndReleasesWhenErrorDuringCompleteEvent()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n");
-        $request = new Request('GET', Server::$url);
-        $request->getEmitter()->on('complete', function (CompleteEvent $e) {
-            throw new RequestException('foo', $e->getRequest());
-        });
-        $t = new Transaction(new Client(), $request);
-        $a = new MultiAdapter(new MessageFactory());
-        try {
-            $a->send($t);
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertSame($request, $e->getRequest());
-        }
-    }
-
-    public function testEnsuresResponseWasSetForGet()
-    {
-        $client = new Client();
-        $request = $client->createRequest('GET', Server::$url);
-        $response = new Response(200, []);
-        $er = null;
-
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$er, $response) {
-                $er = $e;
-            }
-        );
-
-        $transaction = $this->getMockBuilder('GuzzleHttp\Adapter\Transaction')
-            ->setMethods(['getResponse', 'setResponse'])
-            ->setConstructorArgs([$client, $request])
-            ->getMock();
-        $transaction->expects($this->any())->method('setResponse');
-        $transaction->expects($this->any())
-            ->method('getResponse')
-            ->will($this->returnCallback(function () use ($response) {
-                $caller = debug_backtrace()[6]['function'];
-                return $caller == 'addHandle' ||
-                    $caller == 'validateResponseWasSet'
-                    ? null
-                    : $response;
-            }));
-
-        $a = new MultiAdapter(new MessageFactory());
-        Server::flush();
-        Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]);
-        $a->sendAll(new \ArrayIterator([$transaction]), 10);
-        $this->assertNotNull($er);
-
-        $this->assertContains(
-            'No response was received',
-            $er->getException()->getMessage()
-        );
-    }
-
-    private function runConnectionTest(
-        $queue,
-        $stream,
-        $msg,
-        $statusCode = null
-    ) {
-        $obj = new \stdClass();
-        $er = null;
-        $client = new Client();
-        $request = $client->createRequest('PUT', Server::$url, [
-            'body' => $stream
-        ]);
-
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$er) {
-                $er = $e;
-            }
-        );
-
-        $transaction = $this->getMockBuilder('GuzzleHttp\Adapter\Transaction')
-            ->setMethods(['getResponse', 'setResponse'])
-            ->setConstructorArgs([$client, $request])
-            ->getMock();
-
-        $transaction->expects($this->any())
-            ->method('setResponse')
-            ->will($this->returnCallback(function ($r) use (&$obj) {
-                $obj->res = $r;
-            }));
-
-        $transaction->expects($this->any())
-            ->method('getResponse')
-            ->will($this->returnCallback(function () use ($obj, &$called) {
-                $caller = debug_backtrace()[6]['function'];
-                if ($caller == 'addHandle') {
-                    return null;
-                } elseif ($caller == 'validateResponseWasSet') {
-                    return ++$called == 2 ? $obj->res : null;
-                } else {
-                    return $obj->res;
-                }
-            }));
-
-        $a = new MultiAdapter(new MessageFactory());
-        Server::flush();
-        Server::enqueue($queue);
-        $a->sendAll(new \ArrayIterator([$transaction]), 10);
-
-        if ($msg) {
-            $this->assertNotNull($er);
-            $this->assertContains($msg, $er->getException()->getMessage());
-        } else {
-            $this->assertEquals(
-                $statusCode,
-                $transaction->getResponse()->getStatusCode()
-            );
-        }
-    }
-
-    public function testThrowsWhenTheBodyCannotBeRewound()
-    {
-        $this->runConnectionTest(
-            ["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"],
-            new NoSeekStream(Stream::factory('foo')),
-            'attempting to rewind the request body failed'
-        );
-    }
-
-    public function testRetriesRewindableStreamsWhenClosedConnectionErrors()
-    {
-        $this->runConnectionTest(
-            [
-                "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
-                "HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n",
-            ],
-            Stream::factory('foo'),
-            false,
-            201
-        );
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/RequestMediatorTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/RequestMediatorTest.php
deleted file mode 100644
index 740ceaa..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/RequestMediatorTest.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter\Curl;
-
-use GuzzleHttp\Adapter\Curl\MultiAdapter;
-use GuzzleHttp\Adapter\Curl\RequestMediator;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\HeadersEvent;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\Curl\RequestMediator
- */
-class RequestMediatorTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSetsResponseBodyForDownload()
-    {
-        $body = Stream::factory();
-        $request = new Request('GET', 'http://httbin.org');
-        $ee = null;
-        $request->getEmitter()->on(
-            'headers',
-            function (HeadersEvent $e) use (&$ee) {
-                $ee = $e;
-            }
-        );
-        $t = new Transaction(new Client(), $request);
-        $m = new RequestMediator($t, new MessageFactory());
-        $m->setResponseBody($body);
-        $this->assertEquals(18, $m->receiveResponseHeader(null, "HTTP/1.1 202 FOO\r\n"));
-        $this->assertEquals(10, $m->receiveResponseHeader(null, "Foo: Bar\r\n"));
-        $this->assertEquals(11, $m->receiveResponseHeader(null, "Baz : Bam\r\n"));
-        $this->assertEquals(19, $m->receiveResponseHeader(null, "Content-Length: 3\r\n"));
-        $this->assertEquals(2, $m->receiveResponseHeader(null, "\r\n"));
-        $this->assertNotNull($ee);
-        $this->assertEquals(202, $t->getResponse()->getStatusCode());
-        $this->assertEquals('FOO', $t->getResponse()->getReasonPhrase());
-        $this->assertEquals('Bar', $t->getResponse()->getHeader('Foo'));
-        $this->assertEquals('Bam', $t->getResponse()->getHeader('Baz'));
-        $m->writeResponseBody(null, 'foo');
-        $this->assertEquals('foo', (string) $body);
-        $this->assertEquals('3', $t->getResponse()->getHeader('Content-Length'));
-    }
-
-    public function testSendsToNewBodyWhenNot2xxResponse()
-    {
-        $body = Stream::factory();
-        $request = new Request('GET', 'http://httbin.org');
-        $t = new Transaction(new Client(), $request);
-        $m = new RequestMediator($t, new MessageFactory());
-        $m->setResponseBody($body);
-        $this->assertEquals(27, $m->receiveResponseHeader(null, "HTTP/1.1 304 Not Modified\r\n"));
-        $this->assertEquals(2, $m->receiveResponseHeader(null, "\r\n"));
-        $this->assertEquals(304, $t->getResponse()->getStatusCode());
-        $m->writeResponseBody(null, 'foo');
-        $this->assertEquals('', (string) $body);
-        $this->assertEquals('foo', (string) $t->getResponse()->getBody());
-    }
-
-    public function testUsesDefaultBodyIfNoneSet()
-    {
-        $t = new Transaction(new Client(), new Request('GET', 'http://httbin.org'));
-        $t->setResponse(new Response(200));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals(3, $m->writeResponseBody(null, 'foo'));
-        $this->assertEquals('foo', (string) $t->getResponse()->getBody());
-    }
-
-    public function testCanUseResponseBody()
-    {
-        $body = Stream::factory();
-        $t = new Transaction(new Client(), new Request('GET', 'http://httbin.org'));
-        $t->setResponse(new Response(200, [], $body));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals(3, $m->writeResponseBody(null, 'foo'));
-        $this->assertEquals('foo', (string) $body);
-    }
-
-    public function testHandlesTransactionWithNoResponseWhenWritingBody()
-    {
-        $t = new Transaction(new Client(), new Request('GET', 'http://httbin.org'));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals(0, $m->writeResponseBody(null, 'test'));
-    }
-
-    public function testReadsFromRequestBody()
-    {
-        $body = Stream::factory('foo');
-        $t = new Transaction(new Client(), new Request('PUT', 'http://httbin.org', [], $body));
-        $m = new RequestMediator($t, new MessageFactory());
-        $this->assertEquals('foo', $m->readRequestBody(null, null, 3));
-    }
-
-    public function testEmitsHeadersEventForHeadRequest()
-    {
-        Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nOK"]);
-        $ee = null;
-        $client = new Client(['adapter' => new MultiAdapter(new MessageFactory())]);
-        $client->head(Server::$url, [
-            'events' => [
-                'headers' => function (HeadersEvent $e) use (&$ee) {
-                    $ee = $e;
-                }
-            ]
-        ]);
-        $this->assertInstanceOf('GuzzleHttp\\Event\\HeadersEvent', $ee);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/FakeParallelAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/FakeParallelAdapterTest.php
deleted file mode 100644
index 8140d46..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/FakeParallelAdapterTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\FakeParallelAdapter;
-use GuzzleHttp\Adapter\MockAdapter;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Adapter\TransactionIterator;
-
-/**
- * @covers GuzzleHttp\Adapter\FakeParallelAdapter
- */
-class FakeParallelAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSendsAllTransactions()
-    {
-        $client = new Client();
-        $requests = [
-            $client->createRequest('GET', 'http://httbin.org'),
-            $client->createRequest('HEAD', 'http://httbin.org'),
-        ];
-
-        $sent = [];
-        $f = new FakeParallelAdapter(new MockAdapter(function ($trans) use (&$sent) {
-            $sent[] = $trans->getRequest()->getMethod();
-            return new Response(200);
-        }));
-
-        $tIter = new TransactionIterator($requests, $client, []);
-        $f->sendAll($tIter, 2);
-        $this->assertContains('GET', $sent);
-        $this->assertContains('HEAD', $sent);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/MockAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/MockAdapterTest.php
deleted file mode 100644
index 07dbe0d..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/MockAdapterTest.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\MockAdapter;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Adapter\TransactionInterface;
-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;
-
-/**
- * @covers GuzzleHttp\Adapter\MockAdapter
- */
-class MockAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testYieldsMockResponse()
-    {
-        $response = new Response(200);
-        $m = new MockAdapter();
-        $m->setResponse($response);
-        $this->assertSame($response, $m->send(new Transaction(new Client(), new Request('GET', 'http://httbin.org'))));
-    }
-
-    public function testMocksWithCallable()
-    {
-        $response = new Response(200);
-        $r = function (TransactionInterface $trans) use ($response) {
-            return $response;
-        };
-        $m = new MockAdapter($r);
-        $this->assertSame($response, $m->send(new Transaction(new Client(), new Request('GET', 'http://httbin.org'))));
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testValidatesResponses()
-    {
-        $m = new MockAdapter();
-        $m->setResponse('foo');
-        $m->send(new Transaction(new Client(), new Request('GET', 'http://httbin.org')));
-    }
-
-    public function testHandlesErrors()
-    {
-        $m = new MockAdapter();
-        $m->setResponse(new Response(404));
-        $request = new Request('GET', 'http://httbin.org');
-        $c = false;
-        $request->getEmitter()->once('complete', function (CompleteEvent $e) use (&$c) {
-            $c = true;
-            throw new RequestException('foo', $e->getRequest());
-        });
-        $request->getEmitter()->on('error', function (ErrorEvent $e) {
-            $e->intercept(new Response(201));
-        });
-        $r = $m->send(new Transaction(new Client(), $request));
-        $this->assertTrue($c);
-        $this->assertEquals(201, $r->getStatusCode());
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     */
-    public function testThrowsUnhandledErrors()
-    {
-        $m = new MockAdapter();
-        $m->setResponse(new Response(404));
-        $request = new Request('GET', 'http://httbin.org');
-        $request->getEmitter()->once('complete', function (CompleteEvent $e) {
-            throw new RequestException('foo', $e->getRequest());
-        });
-        $m->send(new Transaction(new Client(), $request));
-    }
-
-    public function testReadsRequestBody()
-    {
-        $response = new Response(200);
-        $m = new MockAdapter($response);
-        $m->setResponse($response);
-        $body = Stream\create('foo');
-        $request = new Request('PUT', 'http://httpbin.org/put', [], $body);
-        $this->assertSame($response, $m->send(new Transaction(new Client(), $request)));
-        $this->assertEquals(3, $body->tell());
-    }
-
-    public function testEmitsHeadersEvent()
-    {
-        $m = new MockAdapter(new Response(404));
-        $request = new Request('GET', 'http://httbin.org');
-        $called = false;
-        $request->getEmitter()->once('headers', function () use (&$called) {
-            $called = true;
-        });
-        $m->send(new Transaction(new Client(), $request));
-        $this->assertTrue($called);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamAdapterTest.php
deleted file mode 100644
index 7349dc7..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamAdapterTest.php
+++ /dev/null
@@ -1,402 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\StreamAdapter;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Message\MessageFactory;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Stream\Stream;
-use GuzzleHttp\Tests\Server;
-
-/**
- * @covers GuzzleHttp\Adapter\StreamAdapter
- */
-class StreamAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testReturnsResponseForSuccessfulRequest()
-    {
-        Server::flush();
-        Server::enqueue(
-            "HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 2\r\n\r\nhi"
-        );
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', ['headers' => ['Foo' => 'Bar']]);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('OK', $response->getReasonPhrase());
-        $this->assertEquals('Bar', $response->getHeader('Foo'));
-        $this->assertEquals('2', $response->getHeader('Content-Length'));
-        $this->assertEquals('hi', $response->getBody());
-        $sent = Server::received(true)[0];
-        $this->assertEquals('GET', $sent->getMethod());
-        $this->assertEquals('/', $sent->getResource());
-        $this->assertEquals('127.0.0.1:8125', $sent->getHeader('host'));
-        $this->assertEquals('Bar', $sent->getHeader('foo'));
-        $this->assertTrue($sent->hasHeader('user-agent'));
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage Error creating resource. [url] http://localhost:123 [proxy] tcp://localhost:1234
-     */
-    public function testThrowsExceptionsCaughtDuringTransfer()
-    {
-        Server::flush();
-        $client = new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-        ]);
-        $client->get('http://localhost:123', [
-            'timeout' => 0.01,
-            'proxy'   => 'tcp://localhost:1234'
-        ]);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage URL is invalid: ftp://localhost:123
-     */
-    public function testEnsuresTheHttpProtocol()
-    {
-        Server::flush();
-        $client = new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-        ]);
-        $client->get('ftp://localhost:123');
-    }
-
-    public function testCanHandleExceptionsUsingEvents()
-    {
-        Server::flush();
-        $client = new Client([
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $request = $client->createRequest('GET', Server::$url);
-        $mockResponse = new Response(200);
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use ($mockResponse) {
-                $e->intercept($mockResponse);
-            }
-        );
-        $this->assertSame($mockResponse, $client->send($request));
-    }
-
-    public function testEmitsAfterSendEvent()
-    {
-        $ee = null;
-        Server::flush();
-        Server::enqueue(
-            "HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there"
-        );
-        $client = new Client(['adapter' => new StreamAdapter(new MessageFactory())]);
-        $request = $client->createRequest('GET', Server::$url);
-        $request->getEmitter()->on('complete', function ($e) use (&$ee) {
-            $ee = $e;
-        });
-        $client->send($request);
-        $this->assertInstanceOf('GuzzleHttp\Event\CompleteEvent', $ee);
-        $this->assertSame($request, $ee->getRequest());
-        $this->assertEquals(200, $ee->getResponse()->getStatusCode());
-    }
-
-    public function testStreamAttributeKeepsStreamOpen()
-    {
-        Server::flush();
-        Server::enqueue(
-            "HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there"
-        );
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->put('/foo', [
-            'headers' => ['Foo' => 'Bar'],
-            'body' => 'test',
-            'stream' => true
-        ]);
-        $this->assertEquals(200, $response->getStatusCode());
-        $this->assertEquals('OK', $response->getReasonPhrase());
-        $this->assertEquals('8', $response->getHeader('Content-Length'));
-        $body = $response->getBody();
-        if (defined('HHVM_VERSION')) {
-            $this->markTestIncomplete('HHVM has not implemented this?');
-        }
-        $this->assertEquals('http', $body->getMetadata()['wrapper_type']);
-        $this->assertEquals(8, $body->getMetadata()['unread_bytes']);
-        $this->assertEquals(Server::$url . 'foo', $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $body->close();
-
-        $sent = Server::received(true)[0];
-        $this->assertEquals('PUT', $sent->getMethod());
-        $this->assertEquals('/foo', $sent->getResource());
-        $this->assertEquals('127.0.0.1:8125', $sent->getHeader('host'));
-        $this->assertEquals('Bar', $sent->getHeader('foo'));
-        $this->assertTrue($sent->hasHeader('user-agent'));
-    }
-
-    public function testDrainsResponseIntoTempStream()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/');
-        $body = $response->getBody();
-        $this->assertEquals('php://temp', $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $body->close();
-    }
-
-    public function testDrainsResponseIntoSaveToBody()
-    {
-        $r = fopen('php://temp', 'r+');
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', ['save_to' => $r]);
-        $body = $response->getBody();
-        $this->assertEquals('php://temp', $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $this->assertEquals(' there', stream_get_contents($r));
-        $body->close();
-    }
-
-    public function testDrainsResponseIntoSaveToBodyAtPath()
-    {
-        $tmpfname = tempnam('/tmp', 'save_to_path');
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', ['save_to' => $tmpfname]);
-        $body = $response->getBody();
-        $this->assertEquals($tmpfname, $body->getMetadata()['uri']);
-        $this->assertEquals('hi', $body->read(2));
-        $body->close();
-        unlink($tmpfname);
-    }
-
-    public function testAddsGzipFilterIfAcceptHeaderIsPresent()
-    {
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $response = $client->get('/', [
-            'headers' => ['Accept-Encoding' => 'gzip'],
-            'stream' => true
-        ]);
-        $body = $response->getBody();
-        $this->assertEquals('compress.zlib://http://127.0.0.1:8125/', $body->getMetadata()['uri']);
-    }
-
-    protected function getStreamFromBody(Stream $body)
-    {
-        $r = new \ReflectionProperty($body, 'stream');
-        $r->setAccessible(true);
-
-        return $r->getValue($body);
-    }
-
-    protected function getSendResult(array $opts)
-    {
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client(['adapter' => new StreamAdapter(new MessageFactory())]);
-
-        return $client->get(Server::$url, $opts);
-    }
-
-    public function testAddsProxy()
-    {
-        $body = $this->getSendResult(['stream' => true, 'proxy' => '127.0.0.1:8125'])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals('127.0.0.1:8125', $opts['http']['proxy']);
-        $this->assertTrue($opts['http']['request_fulluri']);
-    }
-
-    public function testAddsTimeout()
-    {
-        $body = $this->getSendResult(['stream' => true, 'timeout' => 200])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals(200, $opts['http']['timeout']);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage SSL certificate authority file not found: /does/not/exist
-     */
-    public function testVerifiesVerifyIsValidIfPath()
-    {
-        (new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-            'base_url' => Server::$url,
-            'defaults' => ['verify' => '/does/not/exist']
-        ]))->get('/');
-    }
-
-    public function testVerifyCanBeDisabled()
-    {
-        Server::enqueue("HTTP/1.1 200\r\nContent-Length: 0\r\n\r\n");
-        (new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-            'base_url' => Server::$url,
-            'defaults' => ['verify' => false]
-        ]))->get('/');
-    }
-
-    public function testVerifyCanBeSetToPath()
-    {
-        $path = __DIR__ . '/../../src/cacert.pem';
-        $this->assertFileExists($path);
-        $body = $this->getSendResult(['stream' => true, 'verify' => $path])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals(true, $opts['http']['verify_peer']);
-        $this->assertEquals($path, $opts['http']['cafile']);
-        $this->assertTrue(file_exists($opts['http']['cafile']));
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage SSL certificate not found: /does/not/exist
-     */
-    public function testVerifiesCertIfValidPath()
-    {
-        (new Client([
-            'adapter' => new StreamAdapter(new MessageFactory()),
-            'base_url' => Server::$url,
-            'defaults' => ['cert' => '/does/not/exist']
-        ]))->get('/');
-    }
-
-    public function testCanSetPasswordWhenSettingCert()
-    {
-        $path = __DIR__ . '/../../src/cacert.pem';
-        $body = $this->getSendResult(['stream' => true, 'cert' => [$path, 'foo']])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals($path, $opts['http']['local_cert']);
-        $this->assertEquals('foo', $opts['http']['passphrase']);
-    }
-
-    public function testDebugAttributeWritesStreamInfoToTempBufferByDefault()
-    {
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM has not implemented this?');
-            return;
-        }
-
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nFoo: Bar\r\nContent-Length: 8\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        ob_start();
-        $client->get('/', ['debug' => true]);
-        $contents = ob_get_clean();
-        $this->assertContains('<http://127.0.0.1:8125/> [CONNECT]', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [FILE_SIZE_IS]', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [PROGRESS]', $contents);
-    }
-
-    public function testDebugAttributeWritesStreamInfoToBuffer()
-    {
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM has not implemented this?');
-            return;
-        }
-
-        $buffer = fopen('php://temp', 'r+');
-        Server::flush();
-        Server::enqueue("HTTP/1.1 200 OK\r\nContent-Length: 8\r\nContent-Type: text/plain\r\n\r\nhi there");
-        $client = new Client([
-            'base_url' => Server::$url,
-            'adapter' => new StreamAdapter(new MessageFactory())
-        ]);
-        $client->get('/', ['debug' => $buffer]);
-        fseek($buffer, 0);
-        $contents = stream_get_contents($buffer);
-        $this->assertContains('<http://127.0.0.1:8125/> [CONNECT]', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [FILE_SIZE_IS] message: "Content-Length: 8"', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [PROGRESS] bytes_max: "8"', $contents);
-        $this->assertContains('<http://127.0.0.1:8125/> [MIME_TYPE_IS] message: "text/plain"', $contents);
-    }
-
-    public function testAddsProxyByProtocol()
-    {
-        $url = str_replace('http', 'tcp', Server::$url);
-        $body = $this->getSendResult(['stream' => true, 'proxy' => ['http' => $url]])->getBody();
-        $opts = stream_context_get_options($this->getStreamFromBody($body));
-        $this->assertEquals($url, $opts['http']['proxy']);
-    }
-
-    public function testPerformsShallowMergeOfCustomContextOptions()
-    {
-        $body = $this->getSendResult([
-            'stream' => true,
-            'config' => [
-                'stream_context' => [
-                    'http' => [
-                        'request_fulluri' => true,
-                        'method' => 'HEAD'
-                    ],
-                    'socket' => [
-                        'bindto' => '127.0.0.1:0'
-                    ],
-                    'ssl' => [
-                        'verify_peer' => false
-                    ]
-                ]
-            ]
-        ])->getBody();
-
-        $opts = stream_context_get_options($this->getStreamFromBody($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']);
-    }
-
-    /**
-     * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage stream_context must be an array
-     */
-    public function testEnsuresThatStreamContextIsAnArray()
-    {
-        $this->getSendResult([
-            'stream' => true,
-            'config' => ['stream_context' => 'foo']
-        ]);
-    }
-
-    /**
-     * @ticket https://github.com/guzzle/guzzle/issues/725
-     */
-    public function testHandlesMultipleHeadersOfSameName()
-    {
-        $a = new StreamAdapter(new MessageFactory());
-        $ref = new \ReflectionMethod($a, 'headersFromLines');
-        $ref->setAccessible(true);
-        $this->assertEquals([
-            'foo' => ['bar', 'bam'],
-            'abc' => ['123']
-        ], $ref->invoke($a, [
-            'foo: bar',
-            'foo: bam',
-            'abc: 123'
-        ]));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamingProxyAdapterTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamingProxyAdapterTest.php
deleted file mode 100644
index 8eb6e68..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/StreamingProxyAdapterTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Adapter\StreamingProxyAdapter;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Adapter\StreamingProxyAdapter
- */
-class StreamingProxyAdapterTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSendsWithDefaultAdapter()
-    {
-        $response = new Response(200);
-        $mock = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $mock->expects($this->once())
-            ->method('send')
-            ->will($this->returnValue($response));
-        $streaming = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $streaming->expects($this->never())
-            ->method('send');
-
-        $s = new StreamingProxyAdapter($mock, $streaming);
-        $this->assertSame($response, $s->send(new Transaction(new Client(), new Request('GET', '/'))));
-    }
-
-    public function testSendsWithStreamingAdapter()
-    {
-        $response = new Response(200);
-        $mock = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $mock->expects($this->never())
-            ->method('send');
-        $streaming = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $streaming->expects($this->once())
-            ->method('send')
-            ->will($this->returnValue($response));
-        $request = new Request('GET', '/');
-        $request->getConfig()->set('stream', true);
-        $s = new StreamingProxyAdapter($mock, $streaming);
-        $this->assertSame($response, $s->send(new Transaction(new Client(), $request)));
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionIteratorTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionIteratorTest.php
deleted file mode 100644
index bee3ab0..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionIteratorTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Http;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\TransactionIterator;
-
-class TransactionIteratorTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testValidatesConstructor()
-    {
-        new TransactionIterator('foo', new Client(), []);
-    }
-
-    public function testCreatesTransactions()
-    {
-        $client = new Client();
-        $requests = [
-            $client->createRequest('GET', 'http://test.com'),
-            $client->createRequest('POST', 'http://test.com'),
-            $client->createRequest('PUT', 'http://test.com'),
-        ];
-        $t = new TransactionIterator($requests, $client, []);
-        $this->assertEquals(0, $t->key());
-        $this->assertTrue($t->valid());
-        $this->assertEquals('GET', $t->current()->getRequest()->getMethod());
-        $t->next();
-        $this->assertEquals(1, $t->key());
-        $this->assertTrue($t->valid());
-        $this->assertEquals('POST', $t->current()->getRequest()->getMethod());
-        $t->next();
-        $this->assertEquals(2, $t->key());
-        $this->assertTrue($t->valid());
-        $this->assertEquals('PUT', $t->current()->getRequest()->getMethod());
-    }
-
-    public function testCanForeach()
-    {
-        $c = new Client();
-        $requests = [
-            $c->createRequest('GET', 'http://test.com'),
-            $c->createRequest('POST', 'http://test.com'),
-            $c->createRequest('PUT', 'http://test.com'),
-        ];
-
-        $t = new TransactionIterator(new \ArrayIterator($requests), $c, []);
-        $methods = [];
-
-        foreach ($t as $trans) {
-            $this->assertInstanceOf(
-                'GuzzleHttp\Adapter\TransactionInterface',
-                $trans
-            );
-            $methods[] = $trans->getRequest()->getMethod();
-        }
-
-        $this->assertEquals(['GET', 'POST', 'PUT'], $methods);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testValidatesEachElement()
-    {
-        $c = new Client();
-        $requests = ['foo'];
-        $t = new TransactionIterator(new \ArrayIterator($requests), $c, []);
-        iterator_to_array($t);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionTest.php
deleted file mode 100644
index 9b7ee1f..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Adapter/TransactionTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Adapter;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Adapter\Transaction
- */
-class TransactionTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasRequestAndClient()
-    {
-        $c = new Client();
-        $req = new Request('GET', '/');
-        $response = new Response(200);
-        $t = new Transaction($c, $req);
-        $this->assertSame($c, $t->getClient());
-        $this->assertSame($req, $t->getRequest());
-        $this->assertNull($t->getResponse());
-        $t->setResponse($response);
-        $this->assertSame($response, $t->getResponse());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php b/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php
new file mode 100644
index 0000000..080d44c
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/BatchResultsTest.php
@@ -0,0 +1,58 @@
+<?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
index e2a991f..ecddd7f 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/ClientTest.php
@@ -1,25 +1,38 @@
 <?php
-
 namespace GuzzleHttp\Tests;
 
-use GuzzleHttp\Adapter\FakeParallelAdapter;
-use GuzzleHttp\Adapter\MockAdapter;
 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\Ring\Client\MockAdapter;
+use GuzzleHttp\Ring\RingFuture;
 use GuzzleHttp\Subscriber\History;
 use GuzzleHttp\Subscriber\Mock;
+use GuzzleHttp\Event\RequestEvents;
+use GuzzleHttp\Event\EndEvent;
 
 /**
  * @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()
     {
-        $this->assertEquals(1, preg_match('#^Guzzle/.+ curl/.+ PHP/.+$#', Client::getDefaultUserAgent()));
+        $ua = Client::getDefaultUserAgent();
+        $this->assertEquals(1, preg_match('#^Guzzle/.+ curl/.+ PHP/.+$#', $ua));
     }
 
     public function testUsesDefaultDefaultOptions()
@@ -27,7 +40,7 @@ public function testUsesDefaultDefaultOptions()
         $client = new Client();
         $this->assertTrue($client->getDefaultOption('allow_redirects'));
         $this->assertTrue($client->getDefaultOption('exceptions'));
-        $this->assertContains('cacert.pem', $client->getDefaultOption('verify'));
+        $this->assertTrue($client->getDefaultOption('verify'));
     }
 
     public function testUsesProvidedDefaultOptions()
@@ -40,7 +53,7 @@ public function testUsesProvidedDefaultOptions()
         ]);
         $this->assertFalse($client->getDefaultOption('allow_redirects'));
         $this->assertTrue($client->getDefaultOption('exceptions'));
-        $this->assertContains('cacert.pem', $client->getDefaultOption('verify'));
+        $this->assertTrue($client->getDefaultOption('verify'));
         $this->assertEquals(['foo' => 'bar'], $client->getDefaultOption('query'));
     }
 
@@ -58,32 +71,15 @@ public function testCanSpecifyBaseUrlUriTemplate()
         $this->assertEquals('http://foo.com/baz/', $client->getBaseUrl());
     }
 
-    public function testClientUsesDefaultAdapterWhenNoneIsSet()
-    {
-        $client = new Client();
-        if (!extension_loaded('curl')) {
-            $adapter = 'GuzzleHttp\Adapter\StreamAdapter';
-        } elseif (ini_get('allow_url_fopen')) {
-            $adapter = 'GuzzleHttp\Adapter\StreamingProxyAdapter';
-        } else {
-            $adapter = 'GuzzleHttp\Adapter\Curl\CurlAdapter';
-        }
-        $this->assertInstanceOf($adapter, $this->readAttribute($client, 'adapter'));
-    }
-
     /**
      * @expectedException \Exception
      * @expectedExceptionMessage Foo
      */
     public function testCanSpecifyAdapter()
     {
-        $adapter = $this->getMockBuilder('GuzzleHttp\Adapter\AdapterInterface')
-            ->setMethods(['send'])
-            ->getMockForAbstractClass();
-        $adapter->expects($this->once())
-            ->method('send')
-            ->will($this->throwException(new \Exception('Foo')));
-        $client = new Client(['adapter' => $adapter]);
+        $client = new Client(['adapter' => function () {
+            throw new \Exception('Foo');
+        }]);
         $client->get('http://httpbin.org');
     }
 
@@ -226,6 +222,27 @@ function ($method, $url, array $options = []) use (&$o) {
         $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 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']);
@@ -285,56 +302,64 @@ public function testCanSetRelativeUrlStartingWithHttp()
 
     public function testClientSendsRequests()
     {
-        $response = new Response(200);
-        $adapter = new MockAdapter();
-        $adapter->setResponse($response);
-        $client = new Client(['adapter' => $adapter]);
-        $this->assertSame($response, $client->get('http://test.com'));
+        $mock = new MockAdapter(['status' => 200, 'headers' => []]);
+        $client = new Client(['adapter' => $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);
-        $response2 = new Response(200);
-        $adapter = new MockAdapter();
-        $adapter->setResponse($response);
-        $client = new Client(['adapter' => $adapter]);
+        $client = new Client(['adapter' => $this->ma]);
         $client->getEmitter()->on(
             'before',
-            function (BeforeEvent $e) use ($response2) {
-                $e->intercept($response2);
+            function (BeforeEvent $e) use ($response) {
+                $e->intercept($response);
             }
         );
-        $this->assertSame($response2, $client->get('http://test.com'));
-        $this->assertEquals('http://test.com', $response2->getEffectiveUrl());
+        $this->assertSame($response, $client->get('http://test.com'));
+        $this->assertEquals('http://test.com', $response->getEffectiveUrl());
     }
 
     /**
      * @expectedException \GuzzleHttp\Exception\RequestException
-     * @expectedExceptionMessage No response
+     * @expectedExceptionMessage not calling the "then"
      */
     public function testEnsuresResponseIsPresentAfterSending()
     {
-        $adapter = $this->getMockBuilder('GuzzleHttp\Adapter\MockAdapter')
-            ->setMethods(['send'])
-            ->getMock();
-        $adapter->expects($this->once())
-            ->method('send');
+        $adapter = function () {};
         $client = new Client(['adapter' => $adapter]);
         $client->get('http://httpbin.org');
     }
 
+    /**
+     * @expectedException \GuzzleHttp\Exception\RequestException
+     * @expectedExceptionMessage not calling the "then"
+     */
+    public function testEnsuresResponseIsPresentAfterDereferencing()
+    {
+        $adapter = new MockAdapter(function () {
+            return new RingFuture(function () { return []; });
+        });
+        $client = new Client(['adapter' => $adapter]);
+        $client->get('http://httpbin.org')->deref();
+    }
+
     public function testClientHandlesErrorsDuringBeforeSend()
     {
         $client = new Client();
         $client->getEmitter()->on('before', function ($e) {
             throw new \Exception('foo');
         });
-        $client->getEmitter()->on('error', function ($e) {
+        $client->getEmitter()->on('error', function (ErrorEvent $e) {
             $e->intercept(new Response(200));
         });
-        $this->assertEquals(200, $client->get('http://test.com')->getStatusCode());
+        $this->assertEquals(
+            200,
+            $client->get('http://test.com')->getStatusCode()
+        );
     }
 
     /**
@@ -344,7 +369,7 @@ public function testClientHandlesErrorsDuringBeforeSend()
     public function testClientHandlesErrorsDuringBeforeSendAndThrowsIfUnhandled()
     {
         $client = new Client();
-        $client->getEmitter()->on('before', function ($e) {
+        $client->getEmitter()->on('before', function (BeforeEvent $e) {
             throw new RequestException('foo', $e->getRequest());
         });
         $client->get('http://httpbin.org');
@@ -357,12 +382,83 @@ public function testClientHandlesErrorsDuringBeforeSendAndThrowsIfUnhandled()
     public function testClientWrapsExceptions()
     {
         $client = new Client();
-        $client->getEmitter()->on('before', function ($e) {
+        $client->getEmitter()->on('before', function (BeforeEvent $e) {
             throw new \Exception('foo');
         });
         $client->get('http://httpbin.org');
     }
 
+    public function testCanInjectResponseForFutureError()
+    {
+        $calledFuture = false;
+        $future = new RingFuture(function () use (&$calledFuture) {
+            $calledFuture = true;
+            return ['error' => new \Exception('Noo!')];
+        });
+        $mock = new MockAdapter($future);
+        $client = new Client(['adapter' => $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;
+        $future = new RingFuture(function () use (&$called) {
+            $called = true;
+            return ['status' => 201, 'headers' => []];
+        });
+        $mock = new MockAdapter($future);
+        $client = new Client(['adapter' => $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;
+        $future = new RingFuture(function () use (&$calledFuture) {
+            $calledFuture = true;
+            return ['error' => new \Exception('Noop!')];
+        });
+        $client = new Client(['adapter' => new MockAdapter($future)]);
+        try {
+            $res = $client->get('http://localhost:123/foo', ['future' => true]);
+            $res->deref();
+            $this->fail('Did not throw');
+        } catch (RequestException $e) {
+            $this->assertEquals(1, $calledFuture);
+        }
+    }
+
+    /**
+     * @expectedExceptionMessage Noo!
+     * @expectedException \GuzzleHttp\Exception\RequestException
+     */
+    public function testThrowsExceptionsSynchronously()
+    {
+        $client = new Client([
+            'adapter' => new MockAdapter(['error' => new \Exception('Noo!')])
+        ]);
+        $client->get('http://localhost:123/foo');
+    }
+
     public function testCanSetDefaultValues()
     {
         $client = new Client(['foo' => 'bar']);
@@ -389,24 +485,14 @@ public function testSendsAllInParallel()
         ];
 
         $client->sendAll($requests);
-        $requests = array_map(function($r) { return $r->getMethod(); }, $history->getRequests());
+        $requests = array_map(function($r) {
+            return $r->getMethod();
+        }, $history->getRequests());
         $this->assertContains('GET', $requests);
         $this->assertContains('POST', $requests);
         $this->assertContains('PUT', $requests);
     }
 
-    public function testCanSetCustomParallelAdapter()
-    {
-        $called = false;
-        $pa = new FakeParallelAdapter(new MockAdapter(function () use (&$called) {
-            $called = true;
-            return new Response(203);
-        }));
-        $client = new Client(['parallel_adapter' => $pa]);
-        $client->sendAll([$client->createRequest('GET', 'http://www.foo.com')]);
-        $this->assertTrue($called);
-    }
-
     public function testCanDisableAuthPerRequest()
     {
         $client = new Client(['defaults' => ['auth' => 'foo']]);
@@ -416,15 +502,6 @@ public function testCanDisableAuthPerRequest()
         $this->assertFalse($request->getConfig()->hasKey('auth'));
     }
 
-    /**
-     * @expectedException \PHPUnit_Framework_Error_Deprecated
-     */
-    public function testHasDeprecatedGetEmitter()
-    {
-        $client = new Client();
-        $client->getEventDispatcher();
-    }
-
     public function testUsesProxyEnvironmentVariables()
     {
         $http = isset($_SERVER['HTTP_PROXY']) ? $_SERVER['HTTP_PROXY'] : null;
@@ -452,4 +529,44 @@ public function testUsesProxyEnvironmentVariables()
         $_SERVER['HTTP_PROXY'] = $http;
         $_SERVER['HTTPS_PROXY'] = $https;
     }
+
+    public function testCanInjectCancelledFutureInRequestEvents()
+    {
+        $client = new Client(['adapter' => new MockAdapter(['status' => 404])]);
+        $request = $client->createRequest('GET', 'http://localhost:123/foo', [
+            'future' => true
+        ]);
+        $request->getEmitter()->on('end', function (EndEvent $e) {
+            RequestEvents::stopException($e);
+        });
+        $res = $client->send($request);
+        $this->assertInstanceOf('GuzzleHttp\Message\CancelledResponse', $res);
+    }
+
+    public function testReturnsFutureForErrorWhenRequested()
+    {
+        $client = new Client(['adapter' => new MockAdapter(['status' => 404])]);
+        $request = $client->createRequest('GET', 'http://localhost:123/foo', [
+            'future' => true
+        ]);
+        $res = $client->send($request);
+        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $res);
+        try {
+            $res->deref();
+            $this->fail('did not throw');
+        } catch (RequestException $e) {
+            $this->assertContains('404', $e->getMessage());
+        }
+    }
+
+    public function testReturnsFutureForResponseWhenRequested()
+    {
+        $client = new Client(['adapter' => new MockAdapter(['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());
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php b/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
index 9e6155f..25d52a3 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/CollectionTest.php
@@ -65,9 +65,11 @@ public function testHandlesMergingInDisparateDataSources()
         );
         $this->coll->merge($params);
         $this->assertEquals($this->coll->toArray(), $params);
-
-        // Pass the same object to itself
-        $this->assertEquals($this->coll->merge($this->coll), $this->coll);
+        $this->coll->merge(new Collection(['test4' => 'hi']));
+        $this->assertEquals(
+            $this->coll->toArray(),
+            $params + ['test4' => 'hi']
+        );
     }
 
     public function testCanClearAllDataOrSpecificKeys()
@@ -228,13 +230,8 @@ public function testImplementsArrayAccess()
 
     public function testCanReplaceAllData()
     {
-        $this->assertSame($this->coll, $this->coll->replace(array(
-            'a' => '123'
-        )));
-
-        $this->assertEquals(array(
-            'a' => '123'
-        ), $this->coll->toArray());
+        $this->coll->replace(array('a' => '123'));
+        $this->assertEquals(array('a' => '123'), $this->coll->toArray());
     }
 
     public function testPreparesFromConfig()
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
index 40431c4..1d11337 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Cookie/FileCookieJarTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\CookieJar;
 
 use GuzzleHttp\Cookie\FileCookieJar;
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php b/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
index 20cb23b..3ddd082 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Cookie/SetCookieTest.php
@@ -60,15 +60,15 @@ public function testHoldsValues()
         $this->assertEquals('baz', $cookie->toArray()['foo']);
         $this->assertEquals('bam', $cookie->toArray()['bar']);
 
-        $cookie->setName('a')
-            ->setValue('b')
-            ->setPath('c')
-            ->setDomain('bar.com')
-            ->setExpires(10)
-            ->setMaxAge(200)
-            ->setSecure(false)
-            ->setHttpOnly(false)
-            ->setDiscard(false);
+        $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());
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
index 357a6a6..b8c06f1 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractEventTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 class AbstractEventTest extends \PHPUnit_Framework_TestCase
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
index eeda4e4..50536c5 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRequestEventTest.php
@@ -1,9 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Message\Request;
 
 /**
@@ -17,8 +16,8 @@ public function testHasTransactionMethods()
         $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractRequestEvent')
             ->setConstructorArgs([$t])
             ->getMockForAbstractClass();
-        $this->assertSame($t->getClient(), $e->getClient());
-        $this->assertSame($t->getRequest(), $e->getRequest());
+        $this->assertSame($t->client, $e->getClient());
+        $this->assertSame($t->request, $e->getRequest());
     }
 
     public function testHasTransaction()
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php
new file mode 100644
index 0000000..dcc874c
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractRetryableEventTest.php
@@ -0,0 +1,37 @@
+<?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('before', $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('before', $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
index 418e555..6f2deba 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/AbstractTransferEventTest.php
@@ -1,9 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Message\Request;
 
 /**
@@ -13,13 +13,36 @@ class AbstractTransferEventTest extends \PHPUnit_Framework_TestCase
 {
     public function testHasStats()
     {
-        $s = ['foo' => 'bar'];
         $t = new Transaction(new Client(), new Request('GET', '/'));
+        $t->transferInfo = ['foo' => 'bar'];
         $e = $this->getMockBuilder('GuzzleHttp\Event\AbstractTransferEvent')
-            ->setConstructorArgs([$t, $s])
+            ->setConstructorArgs([$t])
             ->getMockForAbstractClass();
         $this->assertNull($e->getTransferInfo('baz'));
         $this->assertEquals('bar', $e->getTransferInfo('foo'));
-        $this->assertEquals($s, $e->getTransferInfo());
+        $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->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());
     }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestBeforeSendEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
similarity index 70%
rename from core/vendor/guzzlehttp/guzzle/tests/Event/RequestBeforeSendEventTest.php
rename to core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
index 91590c8..469e4e2 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestBeforeSendEventTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/BeforeEventTest.php
@@ -1,8 +1,7 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Message\Request;
@@ -15,15 +14,13 @@ class BeforeEventTest extends \PHPUnit_Framework_TestCase
 {
     public function testInterceptsWithEvent()
     {
-        $response = new Response(200);
-        $res = null;
         $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->getRequest()->getEmitter()->on('complete', function ($e) use (&$res) {
-            $res = $e;
-        });
+        $t->exception = new \Exception('foo');
         $e = new BeforeEvent($t);
+        $response = new Response(200);
         $e->intercept($response);
         $this->assertTrue($e->isPropagationStopped());
-        $this->assertSame($res->getClient(), $e->getClient());
+        $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
index 6c9ea61..63bf5d2 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/EmitterTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Event\Emitter;
@@ -42,7 +41,9 @@ public function testAddListener()
     {
         $this->emitter->on('pre.foo', array($this->listener, 'preFoo'));
         $this->emitter->on('post.foo', array($this->listener, 'postFoo'));
-        $this->assertCount(1, $this->emitter->listeners(self::preFoo));
+        $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());
     }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php
new file mode 100644
index 0000000..e91b7f0
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/ErrorEventTest.php
@@ -0,0 +1,23 @@
+<?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
index bfd0870..4709918 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/HasEmitterTraitTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Event\HasEmitterInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/HeadersEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/HeadersEventTest.php
deleted file mode 100644
index 02db4dc..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/HeadersEventTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\HeadersEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Event\HeadersEvent
- */
-class HeadersEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasValues()
-    {
-        $c = new Client();
-        $r = new Request('GET', '/');
-        $t = new Transaction($c, $r);
-        $response = new Response(200);
-        $t->setResponse($response);
-        $e = new HeadersEvent($t);
-        $this->assertSame($c, $e->getClient());
-        $this->assertSame($r, $e->getRequest());
-        $this->assertSame($response, $e->getResponse());
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testEnsuresResponseIsSet()
-    {
-        $c = new Client();
-        $r = new Request('GET', '/');
-        $t = new Transaction($c, $r);
-        new HeadersEvent($t);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
index 18ad852..a7fd50b 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/ListenerAttacherTraitTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Event\HasEmitterInterface;
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php
new file mode 100644
index 0000000..664f8b6
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/ProgressEventTest.php
@@ -0,0 +1,25 @@
+<?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/RequestAfterSendEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestAfterSendEventTest.php
deleted file mode 100644
index 5b56a62..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestAfterSendEventTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Event\CompleteEvent
- */
-class CompleteEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testHasValues()
-    {
-        $c = new Client();
-        $r = new Request('GET', '/');
-        $res = new Response(200);
-        $t = new Transaction($c, $r);
-        $e = new CompleteEvent($t);
-        $e->intercept($res);
-        $this->assertTrue($e->isPropagationStopped());
-        $this->assertSame($res, $e->getResponse());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestErrorEventTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestErrorEventTest.php
deleted file mode 100644
index 14a27e7..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestErrorEventTest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests\Event;
-
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-
-/**
- * @covers GuzzleHttp\Event\ErrorEvent
- */
-class ErrorEventTest extends \PHPUnit_Framework_TestCase
-{
-    public function testInterceptsWithEvent()
-    {
-        $client = new Client();
-        $request = new Request('GET', '/');
-        $response = new Response(404);
-        $transaction = new Transaction($client, $request);
-        $except = new RequestException('foo', $request, $response);
-        $event = new ErrorEvent($transaction, $except);
-
-        $this->assertSame($except, $event->getException());
-        $this->assertSame($response, $event->getResponse());
-        $this->assertSame($request, $event->getRequest());
-
-        $res = null;
-        $request->getEmitter()->on('complete', function ($e) use (&$res) {
-            $res = $e;
-        });
-
-        $good = new Response(200);
-        $event->intercept($good);
-        $this->assertTrue($event->isPropagationStopped());
-        $this->assertSame($res->getClient(), $event->getClient());
-        $this->assertSame($good, $res->getResponse());
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
index a63b3aa..4654aea 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Event/RequestEventsTest.php
@@ -1,159 +1,17 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Client;
-use GuzzleHttp\Adapter\Transaction;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\ErrorEvent;
 use GuzzleHttp\Event\RequestEvents;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Message\Request;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Subscriber\Mock;
+use GuzzleHttp\Ring\Client\MockAdapter;
+use GuzzleHttp\Event\EndEvent;
+use GuzzleHttp\Ring\RingFuture;
 
 /**
  * @covers GuzzleHttp\Event\RequestEvents
  */
 class RequestEventsTest extends \PHPUnit_Framework_TestCase
 {
-    public function testEmitsAfterSendEvent()
-    {
-        $res = null;
-        $t = new Transaction(new Client(), new Request('GET', '/'));
-        $t->setResponse(new Response(200));
-        $t->getRequest()->getEmitter()->on('complete', function ($e) use (&$res) {
-            $res = $e;
-        });
-        RequestEvents::emitComplete($t);
-        $this->assertSame($res->getClient(), $t->getClient());
-        $this->assertSame($res->getRequest(), $t->getRequest());
-        $this->assertEquals('/', $t->getResponse()->getEffectiveUrl());
-    }
-
-    public function testEmitsAfterSendEventAndEmitsErrorIfNeeded()
-    {
-        $ex2 = $res = null;
-        $request = new Request('GET', '/');
-        $t = new Transaction(new Client(), $request);
-        $t->setResponse(new Response(200));
-        $ex = new RequestException('foo', $request);
-        $t->getRequest()->getEmitter()->on('complete', function ($e) use ($ex) {
-            $ex->e = $e;
-            throw $ex;
-        });
-        $t->getRequest()->getEmitter()->on('error', function ($e) use (&$ex2) {
-            $ex2 = $e->getException();
-            $e->stopPropagation();
-        });
-        RequestEvents::emitComplete($t);
-        $this->assertSame($ex, $ex2);
-    }
-
-    public function testBeforeSendEmitsErrorEvent()
-    {
-        $ex = new \Exception('Foo');
-        $client = new Client();
-        $request = new Request('GET', '/');
-        $response = new Response(200);
-        $t = new Transaction($client, $request);
-        $beforeCalled = $errCalled = 0;
-
-        $request->getEmitter()->on(
-            'before',
-            function (BeforeEvent $e) use ($request, $client, &$beforeCalled, $ex) {
-                $this->assertSame($request, $e->getRequest());
-                $this->assertSame($client, $e->getClient());
-                $beforeCalled++;
-                throw $ex;
-            }
-        );
-
-        $request->getEmitter()->on(
-            'error',
-            function (ErrorEvent $e) use (&$errCalled, $response, $ex) {
-                $errCalled++;
-                $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e->getException());
-                $this->assertSame($ex, $e->getException()->getPrevious());
-                $e->intercept($response);
-            }
-        );
-
-        RequestEvents::emitBefore($t);
-        $this->assertEquals(1, $beforeCalled);
-        $this->assertEquals(1, $errCalled);
-        $this->assertSame($response, $t->getResponse());
-    }
-
-    public function testThrowsUnInterceptedErrors()
-    {
-        $ex = new \Exception('Foo');
-        $client = new Client();
-        $request = new Request('GET', '/');
-        $t = new Transaction($client, $request);
-        $errCalled = 0;
-
-        $request->getEmitter()->on('before', function (BeforeEvent $e) use ($ex) {
-            throw $ex;
-        });
-
-        $request->getEmitter()->on('error', function (ErrorEvent $e) use (&$errCalled) {
-            $errCalled++;
-        });
-
-        try {
-            RequestEvents::emitBefore($t);
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertEquals(1, $errCalled);
-        }
-    }
-
-    public function testDoesNotEmitErrorEventTwice()
-    {
-        $client = new Client();
-        $mock = new Mock([new Response(500)]);
-        $client->getEmitter()->attach($mock);
-
-        $r = [];
-        $client->getEmitter()->on('error', function (ErrorEvent $event) use (&$r) {
-            $r[] = $event->getRequest();
-        });
-
-        try {
-            $client->get('http://foo.com');
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertCount(1, $r);
-        }
-    }
-
-    /**
-     * Note: Longest test name ever.
-     */
-    public function testEmitsErrorEventForRequestExceptionsThrownDuringBeforeThatHaveNotEmittedAnErrorEvent()
-    {
-        $request = new Request('GET', '/');
-        $ex = new RequestException('foo', $request);
-
-        $client = new Client();
-        $client->getEmitter()->on('before', function (BeforeEvent $event) use ($ex) {
-            throw $ex;
-        });
-        $called = false;
-        $client->getEmitter()->on('error', function (ErrorEvent $event) use ($ex, &$called) {
-            $called = true;
-            $this->assertSame($ex, $event->getException());
-        });
-
-        try {
-            $client->get('http://foo.com');
-            $this->fail('Did not throw');
-        } catch (RequestException $e) {
-            $this->assertTrue($called);
-        }
-    }
-
     public function prepareEventProvider()
     {
         $cb = function () {};
@@ -209,4 +67,41 @@ public function testConvertsEventArrays(
         $result = RequestEvents::convertEventArray($in, $events, $add);
         $this->assertEquals($out, $result);
     }
+
+    public function adapterResultProvider()
+    {
+        return [
+            [['status' => 404]],
+            [new RingFuture(function () { return ['status' => 404]; })]
+        ];
+    }
+
+    /**
+     * @dataProvider adapterResultProvider
+     */
+    public function testCanInterceptExceptionsInDoneEvent($res)
+    {
+        $adapter = new MockAdapter($res);
+        $client = new Client(['adapter' => $adapter]);
+        $request = $client->createRequest('GET', 'http://www.foo.com');
+        $request->getEmitter()->on('end', function (EndEvent $e) {
+            RequestEvents::stopException($e);
+        });
+        $response = $client->send($request);
+        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $response);
+        try {
+            $response->getStatusCode();
+            $this->fail('Did not throw');
+        } catch (\Exception $e) {
+            $this->assertContains('404', $e->getMessage());
+        }
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesEventFormat()
+    {
+        RequestEvents::convertEventArray(['foo' => false], ['foo'], []);
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php b/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
index c50816c..57a0204 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Exception/RequestExceptionTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Event;
 
 use GuzzleHttp\Exception\RequestException;
@@ -59,26 +58,17 @@ public function testCreatesGenericErrorResponseException()
         $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $e);
     }
 
-    public function testCanSetAndRetrieveErrorEmitted()
-    {
-        $e = RequestException::create(new Request('GET', '/'), new Response(600));
-        $this->assertFalse($e->emittedError());
-        $e->emittedError(true);
-        $this->assertTrue($e->emittedError());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testCannotSetEmittedErrorToFalse()
-    {
-        $e = RequestException::create(new Request('GET', '/'), new Response(600));
-        $e->emittedError(true);
-        $e->emittedError(false);
-    }
-
     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());
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/FsmTest.php b/core/vendor/guzzlehttp/guzzle/tests/FsmTest.php
new file mode 100644
index 0000000..89fbcb9
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/FsmTest.php
@@ -0,0 +1,174 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\StateException;
+use GuzzleHttp\Transaction;
+use GuzzleHttp\Fsm;
+
+class FsmTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testValidatesStateNames()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        (new Fsm('foo', []))->run(new Transaction($client, $request));
+    }
+
+    public function testTransitionsThroughStates()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        $t = new Transaction($client, $request);
+        $c = [];
+        $fsm = new Fsm('begin', [
+            'begin' => [
+                'success' => 'end',
+                'transition' => function (Transaction $trans) use ($t, &$c) {
+                    $this->assertSame($t, $trans);
+                    $c[] = 'begin';
+                }
+            ],
+            'end' => [
+                'transition' => function (Transaction $trans) use ($t, &$c) {
+                    $this->assertSame($t, $trans);
+                    $c[] = 'end';
+                }
+            ],
+        ]);
+
+        $fsm->run($t);
+        $this->assertEquals(['begin', 'end'], $c);
+    }
+
+    public function testTransitionsThroughErrorStates()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        $t = new Transaction($client, $request);
+        $c = [];
+
+        $fsm = new Fsm('begin', [
+            'begin' => [
+                'success' => 'end',
+                'error'   => 'error',
+                'transition' => function (Transaction $trans) use ($t, &$c) {
+                    $c[] = 'begin';
+                    throw new \OutOfBoundsException();
+                }
+            ],
+            'error' => [
+                'success' => 'end',
+                'error'   => 'end',
+                'transition' => function (Transaction $trans) use ($t, &$c) {
+                    $c[] = 'error';
+                    $this->assertInstanceOf('OutOfBoundsException', $t->exception);
+                    $trans->exception = null;
+                }
+            ],
+            'end' => [
+                'transition' => function (Transaction $trans) use ($t, &$c) {
+                    $c[] = 'end';
+                }
+            ],
+        ]);
+
+        $fsm->run($t);
+        $this->assertEquals(['begin', 'error', 'end'], $c);
+        $this->assertNull($t->exception);
+    }
+
+    public function testThrowsTerminalErrors()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        $t = new Transaction($client, $request);
+
+        $fsm = new Fsm('begin', [
+            'begin' => [
+                'transition' => function (Transaction $trans) use ($t) {
+                    throw new \OutOfBoundsException();
+                }
+            ]
+        ]);
+
+        try {
+            $fsm->run($t);
+            $this->fail('Did not throw');
+        } catch (\OutOfBoundsException $e) {
+            $this->assertSame($e, $t->exception);
+        }
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Too many state transitions
+     */
+    public function testThrowsWhenTooManyTransitions()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        $t = new Transaction($client, $request);
+        $fsm = new Fsm('begin', ['begin' => ['success' => 'begin']], 10);
+        $fsm->run($t);
+    }
+
+    /**
+     * @expectedExceptionMessage Foo
+     * @expectedException \GuzzleHttp\Exception\StateException
+     */
+    public function testThrowsWhenStateException()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        $t = new Transaction($client, $request);
+        $fsm = new Fsm('begin', [
+            'begin' => [
+                'transition' => function () use ($request) {
+                    throw new StateException('Foo');
+                },
+                'error' => 'not_there'
+            ]
+        ]);
+        $fsm->run($t);
+    }
+
+    public function testCanInterceptTransitionStates()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        $t = new Transaction($client, $request);
+        $called = false;
+        $fsm = new Fsm('begin', [
+            'begin' => [
+                'transition' => function () { return true; },
+                'intercept'  => 'end'
+            ],
+            'end' => [
+                'transition' => function () use (&$called) { $called = true; }
+            ]
+        ]);
+        $fsm->run($t);
+        $this->assertTrue($called);
+    }
+
+    /**
+     * @expectedExceptionMessage Invalid intercept state transition from begin
+     * @expectedException \GuzzleHttp\Exception\StateException
+     */
+    public function testEnsuresInterceptStatesAreDefined()
+    {
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://httpbin.org');
+        $t = new Transaction($client, $request);
+        $fsm = new Fsm('begin', [
+            'begin' => [
+                'transition' => function () { return true; }
+            ]
+        ]);
+        $fsm->run($t);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/FunctionsTest.php b/core/vendor/guzzlehttp/guzzle/tests/FunctionsTest.php
deleted file mode 100644
index f632877..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/FunctionsTest.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Tests;
-
-use GuzzleHttp\Client;
-use GuzzleHttp\Event\BeforeEvent;
-use GuzzleHttp\Event\CompleteEvent;
-use GuzzleHttp\Event\ErrorEvent;
-use GuzzleHttp\Message\Response;
-use GuzzleHttp\Subscriber\Mock;
-
-class FunctionsTest extends \PHPUnit_Framework_TestCase
-{
-    public function testExpandsTemplate()
-    {
-        $this->assertEquals('foo/123', \GuzzleHttp\uri_template('foo/{bar}', ['bar' => '123']));
-    }
-
-    public function noBodyProvider()
-    {
-        return [['get'], ['head'], ['delete']];
-    }
-
-    /**
-     * @dataProvider noBodyProvider
-     */
-    public function testSendsNoBody($method)
-    {
-        Server::flush();
-        Server::enqueue([new Response(200)]);
-        call_user_func("GuzzleHttp\\{$method}", Server::$url, [
-            'headers' => ['foo' => 'bar'],
-            'query' => ['a' => '1']
-        ]);
-        $sent = Server::received(true)[0];
-        $this->assertEquals(strtoupper($method), $sent->getMethod());
-        $this->assertEquals('/?a=1', $sent->getResource());
-        $this->assertEquals('bar', $sent->getHeader('foo'));
-    }
-
-    public function testSendsOptionsRequest()
-    {
-        Server::flush();
-        Server::enqueue([new Response(200)]);
-        \GuzzleHttp\options(Server::$url, ['headers' => ['foo' => 'bar']]);
-        $sent = Server::received(true)[0];
-        $this->assertEquals('OPTIONS', $sent->getMethod());
-        $this->assertEquals('/', $sent->getResource());
-        $this->assertEquals('bar', $sent->getHeader('foo'));
-    }
-
-    public function hasBodyProvider()
-    {
-        return [['put'], ['post'], ['patch']];
-    }
-
-    /**
-     * @dataProvider hasBodyProvider
-     */
-    public function testSendsWithBody($method)
-    {
-        Server::flush();
-        Server::enqueue([new Response(200)]);
-        call_user_func("GuzzleHttp\\{$method}", Server::$url, [
-            'headers' => ['foo' => 'bar'],
-            'body'    => 'test',
-            'query'   => ['a' => '1']
-        ]);
-        $sent = Server::received(true)[0];
-        $this->assertEquals(strtoupper($method), $sent->getMethod());
-        $this->assertEquals('/?a=1', $sent->getResource());
-        $this->assertEquals('bar', $sent->getHeader('foo'));
-        $this->assertEquals('test', $sent->getBody());
-    }
-
-    /**
-     * @expectedException \PHPUnit_Framework_Error_Deprecated
-     * @expectedExceptionMessage GuzzleHttp\Tests\HasDeprecations::baz() is deprecated and will be removed in a future version. Update your code to use the equivalent GuzzleHttp\Tests\HasDeprecations::foo() method instead to avoid breaking changes when this shim is removed.
-     */
-    public function testManagesDeprecatedMethods()
-    {
-        $d = new HasDeprecations();
-        $d->baz();
-    }
-
-    /**
-     * @expectedException \BadMethodCallException
-     */
-    public function testManagesDeprecatedMethodsAndHandlesMissingMethods()
-    {
-        $d = new HasDeprecations();
-        $d->doesNotExist();
-    }
-
-    public function testBatchesRequests()
-    {
-        $client = new Client();
-        $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 = 0;
-        $result = \GuzzleHttp\batch($client, $requests, [
-            'before'   => function (BeforeEvent $e) use (&$a) { $a++; },
-            'complete' => function (CompleteEvent $e) use (&$b) { $b++; },
-            'error'    => function (ErrorEvent $e) use (&$c) { $c++; },
-        ]);
-
-        $this->assertEquals(4, $a);
-        $this->assertEquals(2, $b);
-        $this->assertEquals(1, $c);
-        $this->assertCount(3, $result);
-
-        foreach ($result as $i => $request) {
-            $this->assertSame($requests[$i], $request);
-        }
-
-        // The first result is actually the second (redirect) response.
-        $this->assertSame($responses[1], $result[$requests[0]]);
-        // The second result is a 1:1 request:response map
-        $this->assertSame($responses[2], $result[$requests[1]]);
-        // The third entry is the 404 RequestException
-        $this->assertSame($responses[3], $result[$requests[2]]->getResponse());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Invalid event format
-     */
-    public function testBatchValidatesTheEventFormat()
-    {
-        $client = new Client();
-        $requests = [$client->createRequest('GET', 'http://foo.com/baz')];
-        \GuzzleHttp\batch($client, $requests, ['complete' => 'foo']);
-    }
-
-    public function testJsonDecodes()
-    {
-        $data = \GuzzleHttp\json_decode('true');
-        $this->assertTrue($data);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON
-     */
-    public function testJsonDecodesWithErrorMessages()
-    {
-        \GuzzleHttp\json_decode('!narf!');
-    }
-}
-
-class HasDeprecations
-{
-    function foo()
-    {
-        return 'abc';
-    }
-    function __call($name, $arguments)
-    {
-        return \GuzzleHttp\deprecation_proxy($this, $name, $arguments, [
-            'baz' => 'foo'
-        ]);
-    }
-}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
index fd037ce..f02a576 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/AbstractMessageTest.php
@@ -47,7 +47,8 @@ public function testCanRemoveBodyBySettingToNullAndRemovesCommonBodyHeaders()
     {
         $m = new Request('GET', 'http://foo.com');
         $m->setBody(Stream::factory('foo'));
-        $m->setHeader('Content-Length', 3)->setHeader('Transfer-Encoding', 'chunked');
+        $m->setHeader('Content-Length', 3);
+        $m->setHeader('Transfer-Encoding', 'chunked');
         $m->setBody(null);
         $this->assertNull($m->getBody());
         $this->assertFalse($m->hasHeader('Content-Length'));
@@ -129,9 +130,10 @@ public function testAddsHeadersWhenNotPresent()
     public function testAddsHeadersWhenPresentSameCase()
     {
         $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('foo', 'bar')->addHeader('foo', 'baz');
+        $h->addHeader('foo', 'bar');
+        $h->addHeader('foo', 'baz');
         $this->assertEquals('bar, baz', $h->getHeader('foo'));
-        $this->assertEquals(['bar', 'baz'], $h->getHeader('foo', true));
+        $this->assertEquals(['bar', 'baz'], $h->getHeaderAsArray('foo'));
     }
 
     public function testAddsMultipleHeaders()
@@ -151,7 +153,8 @@ public function testAddsMultipleHeaders()
     public function testAddsHeadersWhenPresentDifferentCase()
     {
         $h = new Request('GET', 'http://foo.com');
-        $h->addHeader('Foo', 'bar')->addHeader('fOO', 'baz');
+        $h->addHeader('Foo', 'bar');
+        $h->addHeader('fOO', 'baz');
         $this->assertEquals('bar, baz', $h->getHeader('foo'));
     }
 
@@ -162,14 +165,6 @@ public function testAddsHeadersWithArray()
         $this->assertEquals('bar, baz', $h->getHeader('foo'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionWhenInvalidValueProvidedToAddHeader()
-    {
-        (new Request('GET', 'http://foo.com'))->addHeader('foo', false);
-    }
-
     public function testGetHeadersReturnsAnArrayOfOverTheWireHeaderValues()
     {
         $h = new Request('GET', 'http://foo.com');
@@ -209,14 +204,6 @@ public function testSetHeaderOverwritesExistingValuesUsingArray()
         $this->assertEquals('bar', $h->getHeader('foo'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionWhenInvalidValueProvidedToSetHeader()
-    {
-        (new Request('GET', 'http://foo.com'))->setHeader('foo', false);
-    }
-
     public function testSetHeadersOverwritesAllHeaders()
     {
         $h = new Request('GET', 'http://foo.com');
@@ -250,7 +237,7 @@ public function testReturnsCorrectTypeWhenMissing()
     {
         $h = new Request('GET', 'http://foo.com');
         $this->assertInternalType('string', $h->getHeader('foo'));
-        $this->assertInternalType('array', $h->getHeader('foo', true));
+        $this->assertInternalType('array', $h->getHeaderAsArray('foo'));
     }
 
     public function testSetsIntegersAndFloatsAsHeaders()
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/CancelledResponseTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/CancelledResponseTest.php
new file mode 100644
index 0000000..85a65cf
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/CancelledResponseTest.php
@@ -0,0 +1,17 @@
+<?php
+namespace GuzzleHttp\Tests\Command;
+
+use GuzzleHttp\Message\CancelledResponse;
+
+class CancelledResponseTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \GuzzleHttp\Exception\StateException
+     */
+    public function testThrowsWhenAccessed()
+    {
+        $r = new CancelledResponse();
+        $this->assertTrue($r->cancelled());
+        $r->getStatusCode();
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php
new file mode 100644
index 0000000..a045d75
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/FutureResponseTest.php
@@ -0,0 +1,146 @@
+<?php
+namespace GuzzleHttp\Tests\Message;
+
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Stream\Stream;
+
+class FutureResponseTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Class has no foo property
+     */
+    public function testValidatesMagicMethod()
+    {
+        $f = new FutureResponse(function () {});
+        $f->foo;
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Future did not return a valid response. Found NULL
+     */
+    public function testEnsuresDerefReturnsTransaction()
+    {
+        $f = new FutureResponse(function () {});
+        $f->getStatusCode();
+    }
+
+    public function testDoesTheSameAsResponseWhenDereferenced()
+    {
+        $str = Stream::factory('foo');
+        $response = new Response(200, ['Foo' => 'bar'], $str);
+        $future = new FutureResponse(function () use ($response) {
+            return $response;
+        });
+        $this->assertFalse($future->realized());
+        $this->assertEquals(200, $future->getStatusCode());
+        $this->assertTrue($future->realized());
+        // Deref again does nothing.
+        $future->deref();
+        $this->assertTrue($future->realized());
+        $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 = new FutureResponse(function () use ($response) {
+            return $response;
+        });
+        $this->assertSame($response, $future->deref());
+        $this->assertTrue($future->realized());
+    }
+
+    public function testCanCancel()
+    {
+        $c = false;
+        $future = new FutureResponse(
+            function () {},
+            function () use (&$c) {
+                $c = true;
+                return true;
+            }
+        );
+        $this->assertFalse($future->cancelled());
+        $this->assertTrue($future->cancel());
+        $this->assertTrue($future->cancelled());
+        $this->assertFalse($future->cancel());
+    }
+
+    public function testCanCancelButReturnsFalseForNoCancelFunction()
+    {
+        $future = new FutureResponse(function () {});
+        $this->assertFalse($future->cancel());
+        $this->assertTrue($future->cancelled());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     */
+    public function testAccessingCancelledResponseThrows()
+    {
+        $future = new FutureResponse(function () {});
+        $this->assertFalse($future->cancel());
+        $future->getStatusCode();
+    }
+
+    public function testExceptionInToStringTriggersError()
+    {
+        $future = new FutureResponse(function () {});
+        $err = '';
+        set_error_handler(function () use (&$err) {
+            $err = func_get_args()[1];
+        });
+        echo $future;
+        restore_error_handler();
+        $this->assertContains('Future did not return a valid response', $err);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
index 9f9b20c..1642382 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Message/MessageFactoryTest.php
@@ -1,8 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Tests\Message;
 
 use GuzzleHttp\Client;
+use GuzzleHttp\Message\RequestInterface;
 use GuzzleHttp\Post\PostFile;
 use GuzzleHttp\Message\Response;
 use GuzzleHttp\Message\MessageFactory;
@@ -11,6 +11,7 @@
 use GuzzleHttp\Subscriber\Mock;
 use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Query;
+use GuzzleHttp\Subscriber\History;
 
 /**
  * @covers GuzzleHttp\Message\MessageFactory
@@ -235,9 +236,12 @@ public function testCanSetDefaultQuery()
 
     public function testCanSetDefaultQueryWithObject()
     {
-        $request = (new MessageFactory)->createRequest('GET', 'http://foo.com?test=abc', [
-            'query' => new Query(['Foo' => 'Bar', 'test' => 'def'])
-        ]);
+        $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'));
     }
@@ -510,21 +514,22 @@ public function testCanAddJsonDataAndNotOverwriteContentType()
         $this->assertEquals('null', (string) $request->getBody());
     }
 
-    public function testCanUseCustomSubclassesWithMethods()
+    public function testCanUseCustomRequestOptions()
     {
-        (new ExtendedFactory)->createRequest('PUT', 'http://f.com', [
+        $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'
         ]);
-        try {
-            $f = new MessageFactory;
-            $f->createRequest('PUT', 'http://f.com', [
-                'headers' => ['Content-Type' => 'foo'],
-                'foo' => 'bar'
-            ]);
-        } catch (\InvalidArgumentException $e) {
-            $this->assertContains('foo config', $e->getMessage());
-        }
+
+        $this->assertTrue($c);
     }
 
     /**
@@ -541,6 +546,53 @@ public function testDoesNotApplyPostBodyRightAway()
         $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
diff --git a/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php b/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php
new file mode 100644
index 0000000..6776a0e
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/PoolTest.php
@@ -0,0 +1,191 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Event\RequestEvents;
+use GuzzleHttp\Message\CancelledResponse;
+use GuzzleHttp\Pool;
+use GuzzleHttp\Ring\Client\MockAdapter;
+use GuzzleHttp\Ring\RingFuture;
+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;
+
+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 \RuntimeException
+     */
+    public function testValidatesEachElement()
+    {
+        $c = new Client();
+        $requests = ['foo'];
+        $p = new Pool($c, new \ArrayIterator($requests));
+        $p->deref();
+    }
+
+    public function testSendsAndRealizesFuture()
+    {
+        $c = $this->getClient();
+        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
+        $this->assertTrue($p->deref());
+        $this->assertFalse($p->deref());
+        $this->assertTrue($p->realized());
+        $this->assertFalse($p->cancel());
+        $this->assertFalse($p->cancelled());
+    }
+
+    public function testHasSendFunction()
+    {
+        $c = $this->getClient();
+        Pool::send($c, [$c->createRequest('GET', 'http://foo.com')]);
+    }
+
+    public function testSendsManyRequestsInCappedPool()
+    {
+        $c = $this->getClient();
+        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
+        $this->assertTrue($p->deref());
+        $this->assertFalse($p->deref());
+        $this->assertTrue($p->realized());
+        $this->assertFalse($p->cancel());
+        $this->assertFalse($p->cancelled());
+    }
+
+    public function testSendsRequestsThatHaveNotBeenRealized()
+    {
+        $c = $this->getClient();
+        $p = new Pool($c, [$c->createRequest('GET', 'http://foo.com')]);
+        $this->assertTrue($p->deref());
+        $this->assertFalse($p->deref());
+        $this->assertTrue($p->realized());
+        $this->assertFalse($p->cancel());
+        $this->assertFalse($p->cancelled());
+    }
+
+    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->deref();
+        $contents = ob_get_clean();
+        $this->assertTrue($p->cancelled());
+        $this->assertEquals(1, count($h));
+        $this->assertEquals('Cancelling', $contents);
+    }
+
+    private function getClient()
+    {
+        $future = new RingFuture(function() {
+            return ['status' => 200, 'headers' => []];
+        }, function () {
+            echo 'Cancelling';
+        });
+
+        return new Client(['adapter' => new MockAdapter($future)]);
+    }
+
+    public function testBatchesRequests()
+    {
+        $client = new Client(['adapter' => 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());
+    }
+
+    /**
+     * @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']);
+    }
+
+    /**
+     * This does not throw a cancelled access exception because of the
+     * !cancelled() check in Pool::addNextRequest.
+     */
+    public function testDoesNotAddCancelledResponsesToDerefQueue()
+    {
+        $c = $this->getClient();
+        $req = $c->createRequest('GET', 'http://foo.com');
+        $req->getEmitter()->on('before', function (BeforeEvent $e) {
+            $e->intercept(new CancelledResponse());
+        });
+        $p = new Pool($c, [$req]);
+        $p->deref();
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
index 1853e8d..4b3b391 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Post/MultipartBodyTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Post;
 
 use GuzzleHttp\Post\MultipartBody;
@@ -23,7 +22,7 @@ public function testConstructorAddsFieldsAndFiles()
         $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; filename=\"foo.txt\"; name=\"foo\"\r\n"
+        $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);
     }
 
@@ -87,14 +86,6 @@ public function testIsSeekableReturnsTrueIfAllAreSeekable()
         $this->assertFalse($b->seek(10));
     }
 
-    public function testGetContentsCanCap()
-    {
-        $b = $this->getTestBody();
-        $c = (string) $b;
-        $b->seek(0);
-        $this->assertSame(substr($c, 0, 10), $b->getContents(10));
-    }
-
     public function testReadsFromBuffer()
     {
         $b = $this->getTestBody();
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
index e9c5322..62aec8b 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Post/PostBodyTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Post;
 
 use GuzzleHttp\Post\PostBody;
@@ -150,11 +149,30 @@ public function testDetachesAndCloses()
     {
         $b = new PostBody();
         $b->setField('foo', 'bar');
+        $this->assertFalse($b->isDetached());
         $b->detach();
-        $this->assertTrue($b->close());
+        $this->assertTrue($b->isDetached());
+        $b->close();
         $this->assertEquals('', $b->read(10));
     }
 
+    public function testDetachesWhenBodyIsPresent()
+    {
+        $b = new PostBody();
+        $b->setField('foo', 'bar');
+        $b->getContents();
+        $b->detach();
+        $this->assertTrue($b->isDetached());
+    }
+
+    public function testFlushAndMetadataPlaceholders()
+    {
+        $b = new PostBody();
+        $this->assertEquals([], $b->getMetadata());
+        $this->assertNull($b->getMetadata('foo'));
+        $this->assertFalse($b->flush());
+    }
+
     public function testCreatesMultipartUploadWithMultiFields()
     {
         $b = new PostBody();
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php b/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
index a233b30..800cee5 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Post/PostFileTest.php
@@ -1,7 +1,7 @@
 <?php
-
 namespace GuzzleHttp\Tests\Post;
 
+use GuzzleHttp\Post\MultipartBody;
 use GuzzleHttp\Post\PostFile;
 use GuzzleHttp\Stream\Stream;
 
@@ -18,7 +18,7 @@ public function testCreatesFromString()
         $this->assertEquals('foo', $p->getName());
         $this->assertEquals('/path/to/test.php', $p->getFilename());
         $this->assertEquals(
-            'form-data; filename="test.php"; name="foo"',
+            'form-data; name="foo"; filename="test.php"',
             $p->getHeaders()['Content-Disposition']
         );
     }
@@ -37,14 +37,7 @@ public function testDefaultsToNameWhenNoFilenameExists()
 
     public function testCreatesFromMultipartFormData()
     {
-        $mp = $this->getMockBuilder('GuzzleHttp\Post\MultipartBody')
-            ->setMethods(['getBoundary'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $mp->expects($this->once())
-            ->method('getBoundary')
-            ->will($this->returnValue('baz'));
-
+        $mp = new MultipartBody([], [], 'baz');
         $p = new PostFile('foo', $mp);
         $this->assertEquals(
             'form-data; name="foo"',
diff --git a/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php b/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php
new file mode 100644
index 0000000..da9876c
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/RequestFsmTest.php
@@ -0,0 +1,218 @@
+<?php
+namespace GuzzleHttp\Tests;
+
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\RequestFsm;
+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;
+
+class RequestFsmTest extends \PHPUnit_Framework_TestCase
+{
+    public function testEmitsBeforeEventInTransition()
+    {
+        $fsm = new RequestFsm(function () {});
+        $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->run($t, 'before');
+        $this->assertTrue($c);
+    }
+
+    public function testEmitsCompleteEventInTransition()
+    {
+        $fsm = new RequestFsm(function () {});
+        $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->run($t, 'complete');
+        $this->assertTrue($c);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Invalid complete state
+     */
+    public function testEnsuresResponseIsSetInCompleteState()
+    {
+        $fsm = new RequestFsm(function () {});
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $t->state = 'complete';
+        $fsm->run($t, 'complete');
+    }
+
+    public function testDoesNotEmitCompleteForFuture()
+    {
+        $fsm = new RequestFsm(function () {});
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $t->response = new FutureResponse(function () {});
+        $t->state = 'complete';
+        $c = false;
+        $t->request->getEmitter()->on('complete', function (CompleteEvent $e) use (&$c) {
+            $c = true;
+        });
+        $fsm->run($t, 'complete');
+        $this->assertFalse($c);
+    }
+
+    public function testDoesNotEmitEndForFuture()
+    {
+        $fsm = new RequestFsm(function () {});
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $t->response = new FutureResponse(function () {});
+        $t->state = 'end';
+        $c = false;
+        $t->request->getEmitter()->on('end', function (EndEvent $e) use (&$c) {
+            $c = true;
+        });
+        $fsm->run($t, 'end');
+        $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 () {});
+        $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->run($t, 'send');
+            $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 () {});
+        $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->run($t, 'send');
+        $t->response = new Response(404);
+        $t->state = 'complete';
+        $fsm->run($t);
+        $this->assertEquals(200, $t->response->getStatusCode());
+        $this->assertNull($t->exception);
+        $this->assertEquals(['before', 'complete', 'error', 'complete', 'end'], $calls);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Invalid error state
+     */
+    public function testEnsuresExceptionIsSetInErrorState()
+    {
+        $fsm = new RequestFsm(function () {});
+        $t = new Transaction(new Client(), new Request('GET', 'http://foo.com'));
+        $t->state = 'error';
+        $fsm->run($t, 'error');
+    }
+
+    public function testCanStopExceptionsWithFuture()
+    {
+        $fsm = new RequestFsm(function () {});
+        $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('end', function (EndEvent $e) {
+            RequestEvents::stopException($e);
+        });
+        $fsm->run($t, 'send');
+        $t->response = new Response(404);
+        $t->state = 'complete';
+        $fsm->run($t);
+        $this->assertNull($t->exception);
+        $this->assertEquals(['before', 'complete', 'error', 'end'], $calls);
+        $this->assertInstanceOf('GuzzleHttp\Message\FutureResponse', $t->response);
+    }
+
+    public function testExitEnsuresSomethingWasSet()
+    {
+        $fsm = new RequestFsm(function () {});
+        $client = new Client();
+        $request = $client->createRequest('GET', 'http://ewfewwef.com');
+        $t = new Transaction($client, $request);
+        $t->state = 'exit';
+        try {
+            $fsm->run($t, 'exit');
+            $this->fail('did not throw');
+        } catch (RequestException $e) {
+            $this->assertContains('not calling', $e->getMessage());
+            $this->assertSame($t->exception, $e);
+        }
+    }
+
+    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);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php b/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php
new file mode 100644
index 0000000..3cb5aa0
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/RingBridgeTest.php
@@ -0,0 +1,219 @@
+<?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\MockAdapter;
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Event\ErrorEvent;
+use GuzzleHttp\Fsm;
+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 () {});
+        $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->assertTrue(is_callable($r['then']));
+        $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 () {});
+        $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 testCallsThenAndAddsProgress()
+    {
+        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([
+            'adapter' => new MockAdapter([
+                '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([
+            'adapter' => new MockAdapter([
+                'status'  => 200,
+                'headers' => [],
+                'body' => $res
+            ])
+        ]);
+        $request = $client->createRequest('GET', 'http://foo.com');
+        $response = $client->send($request);
+        $this->assertEquals('foo', (string) $response->getBody());
+    }
+
+    public function testEmitsCompleteEventOnSuccess()
+    {
+        $c = false;
+        $trans = new Transaction(new Client(), new Request('GET', 'http://f.co'));
+        $trans->request->getEmitter()->on('complete', function () use (&$c) {
+            $c = true;
+        });
+        $f = new MessageFactory();
+        $res = ['status' => 200, 'headers' => []];
+        $fsm = new RequestFsm(function () {});
+        RingBridge::completeRingResponse($trans, $res, $f, $fsm);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Message\ResponseInterface',
+            $trans->response
+        );
+        $this->assertTrue($c);
+    }
+
+    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();
+        $called = false;
+        $fsm = new Fsm('foo', [
+            'error' => [
+                'transition' => function ($trans) use (&$called) {
+                    $called = true;
+                    $this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $trans->exception);
+                }
+            ]
+        ]);
+        RingBridge::completeRingResponse($trans, [], $f, $fsm);
+        $this->assertTrue($called);
+    }
+}
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Server.php b/core/vendor/guzzlehttp/guzzle/tests/Server.php
index 273c852..cd21b50 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Server.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Server.php
@@ -1,91 +1,49 @@
 <?php
-
 namespace GuzzleHttp\Tests;
 
+use GuzzleHttp\Client;
 use GuzzleHttp\Message\MessageFactory;
+use GuzzleHttp\Message\Response;
 use GuzzleHttp\Message\ResponseInterface;
-use GuzzleHttp\Client;
+use GuzzleHttp\RingBridge;
+use GuzzleHttp\Tests\Ring\Client\Server as TestServer;
 
 /**
- * The Server class is used to control a scripted webserver using node.js that
- * will respond to HTTP requests with queued responses.
- *
- * 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.
+ * Placeholder for the Guzzle-Ring-Client server that makes it easier to use.
  */
 class Server
 {
-    const REQUEST_DELIMITER = "\n----[request]\n";
-
-    /** @var Client */
-    private static $client;
-
-    public static $started;
     public static $url = 'http://127.0.0.1:8125/';
     public static $port = 8125;
 
     /**
-     * Flush the received requests from the server
-     * @throws \RuntimeException
-     */
-    public static function flush()
-    {
-        self::start();
-
-        return self::$client->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|ResponseInterface $responses A single or array of Responses
-     *                                           to queue.
+     * @param array $responses Responses to queue.
      * @throws \Exception
      */
-    public static function enqueue($responses)
+    public static function enqueue(array $responses)
     {
         static $factory;
         if (!$factory) {
             $factory = new MessageFactory();
         }
 
-        self::start();
-
         $data = [];
-        foreach ((array) $responses as $response) {
-
+        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');
             }
-
-            $headers = array_map(function ($h) {
-                return implode(' ,', $h);
-            }, $response->getHeaders());
-
-            $data[] = [
-                'statusCode'   => $response->getStatusCode(),
-                'reasonPhrase' => $response->getReasonPhrase(),
-                'headers'      => $headers,
-                'body'         => (string) $response->getBody()
-            ];
+            $data[] = self::convertResponse($response);
         }
 
-        self::getClient()->put('guzzle-server/responses', [
-            'body' => json_encode($data)
-        ]);
+        TestServer::enqueue($data);
     }
 
     /**
@@ -100,80 +58,50 @@ public static function enqueue($responses)
      */
     public static function received($hydrate = false)
     {
-        if (!self::$started) {
-            return [];
-        }
+        $response = TestServer::received();
 
-        $response = self::getClient()->get('guzzle-server/requests');
-        $data = array_filter(explode(self::REQUEST_DELIMITER, (string) $response->getBody()));
         if ($hydrate) {
+            $c = new Client();
             $factory = new MessageFactory();
-            $data = array_map(function($message) use ($factory) {
-                return $factory->fromMessage($message);
-            }, $data);
+            $response = array_map(function($message) use ($factory, $c) {
+                return RingBridge::fromRingRequest($message);
+            }, $response);
         }
 
-        return $data;
+        return $response;
     }
 
-    /**
-     * Stop running the node.js server
-     */
-    public static function stop()
+    public static function flush()
     {
-        if (self::$started) {
-            self::getClient()->delete('guzzle-server');
-        }
-
-        self::$started = false;
+        TestServer::flush();
     }
 
-    public static function wait($maxTries = 5)
+    public static function stop()
     {
-        $tries = 0;
-        while (!self::isListening() && ++$tries < $maxTries) {
-            usleep(100000);
-        }
-
-        if (!self::isListening()) {
-            throw new \RuntimeException('Unable to contact node.js server');
-        }
+        TestServer::stop();
     }
 
-    private static function start()
+    public static function wait($maxTries = 5)
     {
-        if (self::$started){
-            return;
-        }
-
-        if (!self::isListening()) {
-            exec('node ' . __DIR__ . \DIRECTORY_SEPARATOR . 'server.js '
-                . self::$port . ' >> /tmp/server.log 2>&1 &');
-            self::wait();
-        }
-
-        self::$started = true;
+        TestServer::wait($maxTries);
     }
 
-    private static function isListening()
+    public static function start()
     {
-        try {
-            self::getClient()->get('guzzle-server/perf', [
-                'connect_timeout' => 5,
-                'timeout'         => 5
-            ]);
-            return true;
-        } catch (\Exception $e) {
-            return false;
-        }
+        TestServer::start();
     }
 
-    private static function getClient()
+    private static function convertResponse(Response $response)
     {
-        if (!self::$client) {
-            self::$client = new Client(['base_url' => self::$url]);
-        }
-
-        return self::$client;
+        $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
index e189742..e1d1b5c 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/CookieTest.php
@@ -1,8 +1,7 @@
 <?php
-
 namespace GuzzleHttp\Tests\Subscriber;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Subscriber\Cookie;
@@ -31,7 +30,7 @@ public function testExtractsAndStoresCookies()
 
         $plugin = new Cookie($mock);
         $t = new Transaction(new Client(), $request);
-        $t->setResponse($response);
+        $t->response = $response;
         $plugin->onComplete(new CompleteEvent($t));
     }
 
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
index 58c2e30..5a527cb 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HistoryTest.php
@@ -1,8 +1,7 @@
 <?php
-
 namespace GuzzleHttp\Tests\Subscriber;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Event\ErrorEvent;
@@ -23,7 +22,7 @@ public function testAddsForErrorEvent()
         $request = new Request('GET', '/');
         $response = new Response(400);
         $t = new Transaction(new Client(), $request);
-        $t->setResponse($response);
+        $t->response = $response;
         $e = new RequestException('foo', $request, $response);
         $ev = new ErrorEvent($t, $e);
         $h = new History(2);
@@ -48,7 +47,7 @@ public function testMaintainsLimitValue()
         $request = new Request('GET', '/');
         $response = new Response(200);
         $t = new Transaction(new Client(), $request);
-        $t->setResponse($response);
+        $t->response = $response;
         $ev = new CompleteEvent($t);
         $h = new History(2);
         $h->onComplete($ev);
@@ -74,6 +73,47 @@ public function testClearsHistory($h)
         $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/']);
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
index 12a1aef..309faf5 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/HttpErrorTest.php
@@ -1,11 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Tests\Message;
 
 use GuzzleHttp\Event\CompleteEvent;
 use GuzzleHttp\Message\Response;
 use GuzzleHttp\Subscriber\HttpError;
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Message\Request;
 use GuzzleHttp\Client;
 use GuzzleHttp\Subscriber\Mock;
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
index c4d51af..425f3b0 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/MockTest.php
@@ -1,8 +1,8 @@
 <?php
-
 namespace GuzzleHttp\Tests\Subscriber;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Message\FutureResponse;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Subscriber\Mock;
@@ -65,7 +65,7 @@ public function testAddsMockResponseToRequestFromClient()
         $m = new Mock([$response]);
         $ev = new BeforeEvent($t);
         $m->onBefore($ev);
-        $this->assertSame($response, $t->getResponse());
+        $this->assertSame($response, $t->response);
     }
 
     /**
@@ -105,4 +105,74 @@ public function testCanMockBadRequestExceptions()
             $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 = new FutureResponse(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($res->realized());
+        $this->assertSame($response, $res->deref());
+    }
+
+    public function testCanMockExceptionFutureResponses()
+    {
+        $client = new Client(['base_url' => 'http://test.com']);
+        $request = $client->createRequest('GET', '/', ['future' => true]);
+
+        $future = new FutureResponse(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($response->realized());
+
+        try {
+            $response->deref();
+            $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 = new FutureResponse(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($response->realized());
+
+        try {
+            $response->deref();
+            $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
index bce7d53..29af128 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/PrepareTest.php
@@ -1,8 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Tests\Message;
 
-use GuzzleHttp\Adapter\Transaction;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Tests\Server;
+use GuzzleHttp\Transaction;
 use GuzzleHttp\Client;
 use GuzzleHttp\Event\BeforeEvent;
 use GuzzleHttp\Subscriber\Prepare;
@@ -20,7 +21,7 @@ public function testIgnoresRequestsWithNoBody()
         $s = new Prepare();
         $t = $this->getTrans();
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Expect'));
+        $this->assertFalse($t->request->hasHeader('Expect'));
     }
 
     public function testAppliesPostBody()
@@ -32,7 +33,7 @@ public function testAppliesPostBody()
             ->getMockForAbstractClass();
         $p->expects($this->once())
             ->method('applyRequestHeaders');
-        $t->getRequest()->setBody($p);
+        $t->request->setBody($p);
         $s->onBefore(new BeforeEvent($t));
     }
 
@@ -40,81 +41,81 @@ public function testAddsExpectHeaderWithTrue()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', true);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', true);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals('100-Continue', $t->getRequest()->getHeader('Expect'));
+        $this->assertEquals('100-Continue', $t->request->getHeader('Expect'));
     }
 
     public function testAddsExpectHeaderBySize()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', 2);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', 2);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertTrue($t->getRequest()->hasHeader('Expect'));
+        $this->assertTrue($t->request->hasHeader('Expect'));
     }
 
     public function testDoesNotModifyExpectHeaderIfPresent()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setHeader('Expect', 'foo');
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->setHeader('Expect', 'foo');
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals('foo', $t->getRequest()->getHeader('Expect'));
+        $this->assertEquals('foo', $t->request->getHeader('Expect'));
     }
 
     public function testDoesAddExpectHeaderWhenSetToFalse()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', false);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', false);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Expect'));
+        $this->assertFalse($t->request->hasHeader('Expect'));
     }
 
     public function testDoesNotAddExpectHeaderBySize()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->getConfig()->set('expect', 10);
-        $t->getRequest()->setBody(Stream::factory('foo'));
+        $t->request->getConfig()->set('expect', 10);
+        $t->request->setBody(Stream::factory('foo'));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Expect'));
+        $this->assertFalse($t->request->hasHeader('Expect'));
     }
 
     public function testAddsExpectHeaderForNonSeekable()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody(new NoSeekStream(Stream::factory('foo')));
+        $t->request->setBody(new NoSeekStream(Stream::factory('foo')));
         $s->onBefore(new BeforeEvent($t));
-        $this->assertTrue($t->getRequest()->hasHeader('Expect'));
+        $this->assertTrue($t->request->hasHeader('Expect'));
     }
 
     public function testRemovesContentLengthWhenSendingWithChunked()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody(Stream::factory('foo'));
-        $t->getRequest()->setHeader('Transfer-Encoding', 'chunked');
+        $t->request->setBody(Stream::factory('foo'));
+        $t->request->setHeader('Transfer-Encoding', 'chunked');
         $s->onBefore(new BeforeEvent($t));
-        $this->assertFalse($t->getRequest()->hasHeader('Content-Length'));
+        $this->assertFalse($t->request->hasHeader('Content-Length'));
     }
 
     public function testUsesProvidedContentLengthAndRemovesXferEncoding()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody(Stream::factory('foo'));
-        $t->getRequest()->setHeader('Content-Length', '3');
-        $t->getRequest()->setHeader('Transfer-Encoding', 'chunked');
+        $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->getRequest()->getHeader('Content-Length'));
-        $this->assertFalse($t->getRequest()->hasHeader('Transfer-Encoding'));
+        $this->assertEquals(3, $t->request->getHeader('Content-Length'));
+        $this->assertFalse($t->request->hasHeader('Transfer-Encoding'));
     }
 
     public function testSetsContentTypeIfPossibleFromStream()
@@ -122,25 +123,25 @@ public function testSetsContentTypeIfPossibleFromStream()
         $body = $this->getMockBody();
         $sub = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody($body);
+        $t->request->setBody($body);
         $sub->onBefore(new BeforeEvent($t));
         $this->assertEquals(
             'image/jpeg',
-            $t->getRequest()->getHeader('Content-Type')
+            $t->request->getHeader('Content-Type')
         );
-        $this->assertEquals(4, $t->getRequest()->getHeader('Content-Length'));
+        $this->assertEquals(4, $t->request->getHeader('Content-Length'));
     }
 
     public function testDoesNotOverwriteExistingContentType()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody($this->getMockBody());
-        $t->getRequest()->setHeader('Content-Type', 'foo/baz');
+        $t->request->setBody($this->getMockBody());
+        $t->request->setHeader('Content-Type', 'foo/baz');
         $s->onBefore(new BeforeEvent($t));
         $this->assertEquals(
             'foo/baz',
-            $t->getRequest()->getHeader('Content-Type')
+            $t->request->getHeader('Content-Type')
         );
     }
 
@@ -148,9 +149,9 @@ public function testSetsContentLengthIfPossible()
     {
         $s = new Prepare();
         $t = $this->getTrans();
-        $t->getRequest()->setBody($this->getMockBody());
+        $t->request->setBody($this->getMockBody());
         $s->onBefore(new BeforeEvent($t));
-        $this->assertEquals(4, $t->getRequest()->getHeader('Content-Length'));
+        $this->assertEquals(4, $t->request->getHeader('Content-Length'));
     }
 
     public function testSetsTransferEncodingChunkedIfNeeded()
@@ -169,6 +170,20 @@ public function testSetsTransferEncodingChunkedIfNeeded()
         $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(
diff --git a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
index 74b2a51..168b605 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/Subscriber/RedirectTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Plugin\Redirect;
 
 use GuzzleHttp\Client;
@@ -25,12 +24,19 @@ public function testRedirectsRequests()
         $client->getEmitter()->attach($history);
         $client->getEmitter()->attach($mock);
 
-        $response = $client->get('/foo');
+        $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();
+        $requests = $history->getRequests(true);
 
         $this->assertEquals('/foo', $requests[0]->getPath());
         $this->assertEquals('GET', $requests[0]->getMethod());
@@ -38,6 +44,8 @@ public function testRedirectsRequests()
         $this->assertEquals('GET', $requests[1]->getMethod());
         $this->assertEquals('/redirect2', $requests[2]->getPath());
         $this->assertEquals('GET', $requests[2]->getMethod());
+
+        $this->assertEquals(1, $called);
     }
 
     /**
@@ -75,7 +83,7 @@ public function testDefaultBehaviorIsToRedirectWithGetForEntityEnclosingRequests
             'body' => 'testing'
         ]);
 
-        $requests = $h->getRequests();
+        $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'));
@@ -99,7 +107,7 @@ public function testCanRedirectWithStrictRfcCompliance()
             'allow_redirects' => ['max' => 10, 'strict' => true]
         ]);
 
-        $requests = $h->getRequests();
+        $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'));
@@ -179,7 +187,7 @@ public function testCanRedirectWithNoLeadingSlashAndQuery()
         ]));
         $client->getEmitter()->attach($h);
         $client->get('?foo=bar');
-        $requests = $h->getRequests();
+        $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());
     }
@@ -194,7 +202,7 @@ public function testHandlesRedirectsWithSpacesProperly()
         $h = new History();
         $client->getEmitter()->attach($h);
         $client->get('/foo');
-        $reqs = $h->getRequests();
+        $reqs = $h->getRequests(true);
         $this->assertEquals('/redirect%201', $reqs[1]->getResource());
     }
 
@@ -208,7 +216,7 @@ public function testAddsRefererWhenPossible()
         $h = new History();
         $client->getEmitter()->attach($h);
         $client->get('/foo', ['allow_redirects' => ['max' => 5, 'referer' => true]]);
-        $reqs = $h->getRequests();
+        $reqs = $h->getRequests(true);
         $this->assertEquals('http://www.foo.com/foo', $reqs[1]->getHeader('Referer'));
     }
 
@@ -224,7 +232,7 @@ public function testDoesNotAddRefererWhenChangingProtocols()
         $h = new History();
         $client->getEmitter()->attach($h);
         $client->get('/foo', ['allow_redirects' => ['max' => 5, 'referer' => true]]);
-        $reqs = $h->getRequests();
+        $reqs = $h->getRequests(true);
         $this->assertFalse($reqs[1]->hasHeader('Referer'));
     }
 
@@ -239,8 +247,23 @@ public function testRedirectsWithGetOn303()
         $client->getEmitter()->attach($mock);
         $client->getEmitter()->attach($h);
         $client->post('http://test.com/foo', ['body' => 'testing']);
-        $requests = $h->getRequests();
+        $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()
+        );
+    }
 }
diff --git a/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php b/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php
new file mode 100644
index 0000000..42965b1
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/TransactionTest.php
@@ -0,0 +1,22 @@
+<?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/UrlTest.php b/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
index 1321c01..4f06bd9 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/UrlTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests;
 
 use GuzzleHttp\Query;
@@ -134,13 +133,25 @@ public function testAddsQueryIfPresent()
     public function testAddsToPath()
     {
         // Does nothing here
-        $this->assertEquals('http://e.com/base?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath(false));
-        $this->assertEquals('http://e.com/base?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath(''));
-        $this->assertEquals('http://e.com/base?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath('/'));
-        $this->assertEquals('http://e.com/base/0', (string) Url::fromString('http://e.com/base')->addPath('0'));
-
-        $this->assertEquals('http://e.com/base/relative?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath('relative'));
-        $this->assertEquals('http://e.com/base/relative?a=1', (string) Url::fromString('http://e.com/base?a=1')->addPath('/relative'));
+        $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);
     }
 
     /**
@@ -219,19 +230,32 @@ public function testCombinesUrls($a, $b, $c)
     public function testHasGettersAndSetters()
     {
         $url = Url::fromString('http://www.test.com/');
-        $this->assertEquals('example.com', $url->setHost('example.com')->getHost());
-        $this->assertEquals('8080', $url->setPort(8080)->getPort());
-        $this->assertEquals('/foo/bar', $url->setPath('/foo/bar')->getPath());
-        $this->assertEquals('a', $url->setPassword('a')->getPassword());
-        $this->assertEquals('b', $url->setUsername('b')->getUsername());
-        $this->assertEquals('abc', $url->setFragment('abc')->getFragment());
-        $this->assertEquals('https', $url->setScheme('https')->getScheme());
-        $this->assertEquals('a=123', (string) $url->setQuery('a=123')->getQuery());
-        $this->assertEquals('https://b:a@example.com:8080/foo/bar?a=123#abc', (string) $url);
-        $this->assertEquals('b=boo', (string) $url->setQuery(new Query(array(
-            'b' => 'boo'
-        )))->getQuery());
-        $this->assertEquals('https://b:a@example.com:8080/foo/bar?b=boo#abc', (string) $url);
+        $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', $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
+        );
     }
 
     public function testSetQueryAcceptsArray()
@@ -279,7 +303,8 @@ public function urlProvider()
     public function testRemoveDotSegments($path, $result)
     {
         $url = Url::fromString('http://www.example.com');
-        $url->setPath($path)->removeDotSegments();
+        $url->setPath($path);
+        $url->removeDotSegments();
         $this->assertEquals($result, $url->getPath());
     }
 
diff --git a/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php b/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php
new file mode 100644
index 0000000..d9bdc07
--- /dev/null
+++ b/core/vendor/guzzlehttp/guzzle/tests/UtilsTest.php
@@ -0,0 +1,34 @@
+<?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
index 6c3ded3..8773a3f 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/bootstrap.php
@@ -1,12 +1,11 @@
 <?php
-
 require __DIR__ . '/../vendor/autoload.php';
-require __DIR__ . '/Server.php';
+require __DIR__ . '/../vendor/guzzlehttp/ring/tests/Client/Server.php';
 
 use GuzzleHttp\Tests\Server;
 
+Server::start();
+
 register_shutdown_function(function () {
-    if (Server::$started) {
-        Server::stop();
-    }
+    Server::stop();
 });
diff --git a/core/vendor/guzzlehttp/guzzle/tests/perf.php b/core/vendor/guzzlehttp/guzzle/tests/perf.php
index 1f8567a..8cab346 100644
--- a/core/vendor/guzzlehttp/guzzle/tests/perf.php
+++ b/core/vendor/guzzlehttp/guzzle/tests/perf.php
@@ -13,13 +13,15 @@
 
 use GuzzleHttp\Client;
 use GuzzleHttp\Tests\Server;
+use GuzzleHttp\Ring\Client\CurlMultiAdapter;
+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'] : 25;
+$parallel = isset($_SERVER['PARALLEL']) ? $_SERVER['PARALLEL'] : 100;
 
 $client = new Client(['base_url' => Server::$url]);
 
@@ -29,10 +31,10 @@
 }
 $totalTime = microtime(true) - $t;
 $perRequest = ($totalTime / $total) * 1000;
-printf("Serial:   %f (%f ms / request) %d total\n",
+printf("Serial: %f (%f ms / request) %d total\n",
     $totalTime, $perRequest, $total);
 
-// Create a generator used to yield batches of requests to sendAll
+// 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');
@@ -40,8 +42,20 @@
 };
 
 $t = microtime(true);
-$client->sendAll($reqs(), ['parallel' => $parallel]);
+Pool::send($client, $reqs(), ['parallel' => $parallel]);
 $totalTime = microtime(true) - $t;
 $perRequest = ($totalTime / $total) * 1000;
-printf("Parallel: %f (%f ms / request) %d total with %d in parallel\n",
+printf("Batch:  %f (%f ms / request) %d total with %d in parallel\n",
     $totalTime, $perRequest, $total, $parallel);
+
+$adapter = new CurlMultiAdapter(['max_handles' => $parallel]);
+$client = new Client(['adapter' => $adapter, '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/tests/server.js b/core/vendor/guzzlehttp/guzzle/tests/server.js
deleted file mode 100644
index d11d28a..0000000
--- a/core/vendor/guzzlehttp/guzzle/tests/server.js
+++ /dev/null
@@ -1,146 +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
- *
- *      [{ "statusCode": 200, "reasonPhrase": "OK", "headers": {}, "body": "" }]
- *
- *  - Get the received requests
- *      GET /guzzle-server/requests
- *      Host: 127.0.0.1:8125
- *
- *  - 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");
-
-/**
- * Guzzle node.js server
- * @class
- */
-var GuzzleServer = function(port, log) {
-
-    this.port = port;
-    this.log = log;
-    this.responses = [];
-    this.requests = [];
-    var that = this;
-
-    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 (this.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 (this.log) {
-                    console.log("Shutting down");
-                }
-                that.server.close();
-            }
-        } else if (req.method == "GET") {
-            if (req.url === "/guzzle-server/requests") {
-                // Get received requests
-                var data = that.requests.join("\n----[request]\n");
-                res.writeHead(200, "OK", { "Content-Length": data.length });
-                res.end(data);
-                if (that.log) {
-                    console.log("Sending receiving requests");
-                }
-            }
-        } else if (req.method == "PUT") {
-            if (req.url == "/guzzle-server/responses") {
-                if (that.log) {
-                    console.log("Adding responses...");
-                }
-                // Received response to queue
-                var data = request.split("\r\n\r\n")[1];
-                if (!data) {
-                    if (that.log) {
-                        console.log("No response data was provided");
-                    }
-                    res.writeHead(400, "NO RESPONSES IN REQUEST", { "Content-Length": 0 });
-                } else {
-                    that.responses = eval("(" + data + ")");
-                    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 {
-            var response = that.responses.shift();
-            res.writeHead(response.statusCode, response.reasonPhrase, response.headers);
-            res.end(response.body);
-            that.requests.push(request);
-        }
-    };
-
-    this.start = function() {
-
-        that.server = http.createServer(function(req, res) {
-
-            var request = req.method + " " + req.url + " HTTP/" + req.httpVersion + "\r\n";
-            for (var i in req.headers) {
-                request += i + ": " + req.headers[i] + "\r\n";
-            }
-            request += "\r\n";
-
-            // Receive each chunk of the request body
-            req.addListener("data", function(chunk) {
-                request += chunk;
-            });
-
-            // Called when the request completes
-            req.addListener("end", function() {
-                receivedRequest(request, req, res);
-            });
-        });
-        that.server.listen(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/ring/.gitignore b/core/vendor/guzzlehttp/ring/.gitignore
new file mode 100644
index 0000000..290a945
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/.gitignore
@@ -0,0 +1,4 @@
+vendor
+build/artifacts/
+composer.lock
+docs/_build/
diff --git a/core/vendor/guzzlehttp/guzzle/.travis.yml b/core/vendor/guzzlehttp/ring/.travis.yml
similarity index 55%
copy from core/vendor/guzzlehttp/guzzle/.travis.yml
copy to core/vendor/guzzlehttp/ring/.travis.yml
index 65f2d69..0befb17 100644
--- a/core/vendor/guzzlehttp/guzzle/.travis.yml
+++ b/core/vendor/guzzlehttp/ring/.travis.yml
@@ -7,15 +7,13 @@ php:
   - 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
   - ~/.nvm/nvm.sh run v0.6.14
 
-script: make test
+script:
+  - make test
 
 matrix:
   allow_failures:
diff --git a/core/vendor/guzzlehttp/ring/LICENSE b/core/vendor/guzzlehttp/ring/LICENSE
new file mode 100644
index 0000000..71d3b78
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 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
+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/guzzlehttp/ring/Makefile b/core/vendor/guzzlehttp/ring/Makefile
new file mode 100644
index 0000000..21c812e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/Makefile
@@ -0,0 +1,46 @@
+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/ring/README.rst b/core/vendor/guzzlehttp/ring/README.rst
new file mode 100644
index 0000000..d68dd67
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/README.rst
@@ -0,0 +1,11 @@
+===========
+Guzzle-Ring
+===========
+
+Provides lower-level APIs used to power HTTP clients and servers through a
+simple, PHP ``callable`` that accepts a request hash and returns a response
+hash. Guzzle-Ring is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
+but modified to accommodate both clients and servers for both blocking and
+non-blocking requests.
+
+See http://guzzle-ring.readthedocs.org/ for the full online documentation.
diff --git a/core/vendor/guzzlehttp/ring/composer.json b/core/vendor/guzzlehttp/ring/composer.json
new file mode 100644
index 0000000..c236f8e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/composer.json
@@ -0,0 +1,34 @@
+{
+    "name": "guzzlehttp/ring",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "guzzlehttp/streams": "3.0.*@dev"
+    },
+    "autoload": {
+        "psr-4": {
+            "GuzzleHttp\\Ring\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "GuzzleHttp\\Tests\\Ring\\": "tests/"
+        }
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~4.0",
+        "ext-curl": "*"
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "0.1-dev"
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/docs/Makefile b/core/vendor/guzzlehttp/ring/docs/Makefile
new file mode 100644
index 0000000..51270aa
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/Makefile
@@ -0,0 +1,153 @@
+# 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/ring/docs/client_adapters.rst b/core/vendor/guzzlehttp/ring/docs/client_adapters.rst
new file mode 100644
index 0000000..812871f
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/client_adapters.rst
@@ -0,0 +1,136 @@
+===============
+Client Adapters
+===============
+
+Client adapters accept a request array and return a response array or
+``GuzzleHttp\Ring\RingFutureInterface`` object.
+
+Built-In Adapters
+-----------------
+
+Guzzle-Ring comes with three built-in client adapters.
+
+Stream Adapter
+~~~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\StreamAdapter`` uses PHP's
+`http stream wrapper <http://php.net/manual/en/wrappers.http.php>`_ to send
+requests. This adapter cannot send requests concurrently.
+
+You can provide an associative array of custom stream context options to the
+StreamAdapter using the ``stream_context`` key of the ``client`` request
+option.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\StreamAdapter;
+
+    $res = $adapter([
+        '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
+                ]
+            ]
+        ]
+    ]);
+
+cURL Adapter
+~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\CurlAdapter`` can be used with PHP 5.5+ to send
+requests using cURL easy handles. This adapter is great for sending requests
+on at a time, but is unable to send requests concurrently.
+
+When using the CurlAdapter, 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.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlAdapter;
+
+    $adapter = new CurlAdapter();
+
+    $request = [
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]],
+        'client'      => ['curl' => [CURLOPT_LOW_SPEED_LIMIT => 10]]
+    ];
+
+    $adapter($request);
+
+cURL Multi Adapter
+~~~~~~~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\CurlMultiAdapter`` transfers requests using
+cURL and returns future responses. The CurlMultiAdapter is great for sending
+requests concurrently.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiAdapter;
+
+    $adapter = new CurlMultiAdapter();
+
+    $request = [
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]]
+    ];
+
+    // this call returns immediately.
+    $response = $adapter($request);
+
+    // Block until the response completes.
+    $response->deref();
+
+Like the CurlAdapter, the CurlMultiAdapter accepts cusotm curl option in the
+``curl`` key of the ``client`` request option.
+
+Mock Adapter
+~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\MockAdapter`` is used to return mock responses.
+When constructed, the adapter can be configured to return the same response
+array over and over, a future response, or a the evaluation of a callback
+function. This class is useful for implementing mock responses while still
+accounting for things like the ``then`` request option.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\MockAdapter;
+
+    // Return a canned repsonse.
+    $mock = new MockAdapter(['status' => 200]);
+    $response = $mock([]);
+    assert(200 == $response['status']);
+    assert([] == $response['headers']);
+
+Implementing Adapters
+---------------------
+
+Client adapters are just PHP callables (functions or classes that have the
+``__invoke`` magic method). The callable accepts a request array and returns
+a response array or future.
+
+Adapters 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 has an ``\Exception`` value.
+2. If present, call the request's ``then`` option immediately when a response
+   completes. When calling the ``then`` function pass the response by reference
+   to allow the callback to modify the response as needed.
+3. Return a response array or an instance of
+   ``GuzzleHttp\Ring\RingFutureInterface``.
+4. Complete any outstanding requests when the adapter is destructed, but do
+   not dereference the futures.
diff --git a/core/vendor/guzzlehttp/ring/docs/client_middleware.rst b/core/vendor/guzzlehttp/ring/docs/client_middleware.rst
new file mode 100644
index 0000000..3978286
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/client_middleware.rst
@@ -0,0 +1,192 @@
+=================
+Client Middleware
+=================
+
+Middleware intercepts requests before they are sent over the wire and can be
+used to add functionality to adapters.
+
+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\CurlAdapter;
+
+    $adapter = new CurlAdapter();
+
+    $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.
+    $adapter = $addHeaderHandler($adapter, [
+        'X-AddMe'       => 'hello',
+        'Authorization' => 'Basic xyz'
+    ]);
+
+    $response = $adapter([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['httpbin.org']
+    ]);
+
+Modifying Responses
+-------------------
+
+You can change a response as it's returned from a middleware. 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
+``then`` option of a request to change the response that is ultimately returned
+from within a middleware.
+
+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 adding a ``then`` option that is a function that accepts
+the eventually dereferenced response. You then modify the dereferenced response
+and return the updated response to make your modified response the response
+that is ultimately returned to the consumer.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlAdapter;
+
+    $adapter = new CurlAdapter();
+
+    $responseHeaderHandler = function (callable $handler, array $headers) {
+        return function (array $request) use ($handler, $headers) {
+            // Add headers to successful responses when they complete.
+            // Be sure to define the function so that the response is passed
+            // by reference so that modifications to the response will have
+            // an upstream effect.
+            $request = Core::then($request, function (array &$response) {
+                foreach ($headers as $key => $value) {
+                    $response['headers'][$key] = $value;
+                }
+                return $response;
+            });
+
+            // Send the request using the wrapped and return the response.
+            return $handler($request);
+        }
+    };
+
+    // Create a new handler that adds headers to each response.
+    $adapter = $responseHeaderHandler($adapter, ['X-Header' => 'hello!']);
+
+    $response = $adapter([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['httpbin.org']
+    ]);
+
+    assert($response['headers']['X-Header'] == 'hello!');
+
+Built-In Middleware
+-------------------
+
+Guzzle-Ring comes with a few basic client middlewares that modify requests
+and responses.
+
+Synchronous Middleware
+~~~~~~~~~~~~~~~~~~~~~~
+
+You can force all responses to be synchronous using the synchronous middleware:
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiAdapter;
+    use GuzzleHttp\Ring\Client\Middleware;
+
+    $adapter = new CurlMultiAdapter();
+    $synchronousHandler = Middleware::wrapSynchronous($adapter);
+
+    // Send a request using an adapter that creates Future responses, but
+    // the middleware will convert the future to a synchronous response before
+    // returning.
+    $response = $synchronousHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']
+    ]);
+
+    // The response has been dereferenced and is a regular array.
+    assert(is_array($response));
+
+Streaming Middleware
+~~~~~~~~~~~~~~~~~~~~
+
+If you want to send all requests with the ``streaming`` option to a specific
+adapter but other requests to a different adapter, then use the streaming
+middleware.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlAdapter;
+    use GuzzleHttp\Ring\Client\StreamAdapter;
+    use GuzzleHttp\Ring\Client\Middleware;
+
+    $defaultAdapter = new CurlAdapter();
+    $streamingAdapter = new StreamAdapter();
+    $streamingHandler = Middleware::wrapStreaming(
+        $defaultAdapter,
+        $streamingAdapter
+    );
+
+    // Send the request using the streaming adapter.
+    $response = $streamingHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com'],
+        'stream'      => true
+    ]);
+
+    // Send the request using the default adapter.
+    $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
+adapter but other requests to a different adapter, then use the future
+middleware. Like the synchronous middleware, this middleware converts future
+responses to synchronous responses if the ``future`` request option was not set
+to ``true`` on the request hash.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlAdapter;
+    use GuzzleHttp\Ring\Client\CurlMultiAdapter;
+    use GuzzleHttp\Ring\Client\Middleware;
+
+    $defaultAdapter = new CurlAdapter();
+    $futureAdapter = new CurlMultiAdapter();
+    $futureHandler = Middleware::wrapFuture(
+        $defaultAdapter,
+        $futureAdapter
+    );
+
+    // Send the request using the blocking adapter.
+    $response = $futureHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']
+    ]);
+
+    // Send the request using the future, non-blocking, adapter.
+    $response = $futureHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com'],
+        'future'      => true
+    ]);
diff --git a/core/vendor/guzzlehttp/ring/docs/conf.py b/core/vendor/guzzlehttp/ring/docs/conf.py
new file mode 100644
index 0000000..a64913e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/conf.py
@@ -0,0 +1,23 @@
+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'Guzzle Ring'
+copyright = u'2014, Michael Dowling'
+version = '1.0.0-alpha'
+exclude_patterns = ['_build']
+
+html_title = "Guzzle Ring"
+html_short_title = "Guzzle Ring"
+html_theme = "sphinx_rtd_theme"
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
diff --git a/core/vendor/guzzlehttp/ring/docs/futures.rst b/core/vendor/guzzlehttp/ring/docs/futures.rst
new file mode 100644
index 0000000..20bdbd8
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/futures.rst
@@ -0,0 +1,183 @@
+=======
+Futures
+=======
+
+Futures represent a computation that may have not yet completed. When a future
+is used, or *dereferenced*, the future will either return the completed result
+or block until the result is ready. Subsequent calls to dereference a future
+will returned the previously completed result. Futures can be cancelled,
+which stop the computation if possible.
+
+Future Responses
+----------------
+
+Guzzle-Ring uses futures to return asynchronous responses immediately. When a
+future response is used, or *dereferenced*, the future will either return the
+completed response or block until the response has completed and then return
+it.
+
+Client adapters may return future responses if they wish. Future responses are
+just like response arrays except that they are actually instances of
+``GuzzleHttp\Ring\RingFutureInterface`` that are not sent over the wire until
+they are used or the underlying adapter needs to send outstanding requests
+(for example, if the number of queued requests becomes too high or the adapter
+is shutting down).
+
+One client adapter that creates future responses by default is the
+``GuzzleHttp\Ring\Client\CurlMultiAdapter``.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Future;
+    use GuzzleHttp\Ring\Client\CurlMultiAdapter;
+
+    $adapter = new CurlMultiAdapter();
+
+    // Create the request that will be sent to the adapter.
+    $request = [
+        'http_method'  => 'GET',
+        'uri'          => '/',
+        'headers'      => ['Host' => ['google.com']]
+    ];
+
+    // Send a large number of requests and collect the future responses.
+    $responses = [];
+    for ($i = 0; $i < 10; $i++) {
+        $responses[] = $adapter($request);
+    }
+
+    // They're all Future objects that have not yet been sent.
+    assert($responses[0] instanceof Future);
+
+    // Accessing a future will cause it to block until it's complete.
+    echo $responses[0]['status']; // 200
+
+.. important::
+
+    Futures that are not completed by the time the underlying adapter is
+    destructed will be completed when the adapter is shutting down. The adapter
+    will not, however, dereference the future.
+
+Dereferencing
+-------------
+
+Dereferencing a future response will block until it the response complete.
+While waiting on the response, other futures created by the same underlying
+adapter will continue to be sent concurrently. If you need something to happen
+the instant a future completes, then you must use the ``then`` array key of a
+request. The ``then`` key must be given a PHP callable that accepts a response
+array by reference. You may modify the response array provided to the ``then``
+callback to modify the response that is ultimately returned when the future is
+dereferenced.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiAdapter;
+
+    // The CurlMultiAdapter creates future responses by default.
+    $adapter = new CurlMultiAdapter();
+
+    // This function is called immediately when each request completes.
+    $afterComplete = function (array &$response) {
+        if (isset($response['error'])) {
+            echo "Error: " . $response['error']->getMessage() . "\n";
+        } else {
+            echo "Completed request to: {$response['effective_url']}\n";
+        }
+    };
+
+    $request = [
+        'http_method'  => 'GET',
+        'uri'          => '/',
+        'headers'      => ['Host' => ['www.google.com']],
+        'then'         => $afterComplete
+    ];
+
+    // Queue up a bunch of futures the be sent in parallel.
+    for ($i = 0; $i < 5; $i++) {
+        $adapter($request);
+    }
+
+    // Send a failing request
+    $request['headers']['Host'] = ['doesnotexist.co.uk'];
+    $adapter($request);
+
+Cancelling
+----------
+
+Futures can be cancelled if they have not already been dereferenced. Cancelling
+a future will prevent the future from executing the dereference function and,
+if possible, will stop the request from sending.
+
+Guzzle-Ring futures are typically implementing with the
+``GuzzleHttp\Ring\BaseFutureTrait``. This trait provides the cancellation
+functionality that should be common to most implementations. The constructor
+accepts a dereference function followed by an optional cancellation function.
+
+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.
+
+Implementing FutureInterface
+----------------------------
+
+``GuzzleHttp\Ring\FutureInterface`` is generic enough that ist is not specific
+to HTTP responses. The FutureInterface has the following methods:
+
+deref
+    Method that dereferences the future and blocks until the result is ready.
+    Attempting to dereference a cancelled future must result in a
+    ``GuzzleHttp\Ring\Exception\CancelledFutureAccessException`` being thrown.
+
+realized
+    Method that returns true if the future has been dereferenced or cancelled.
+
+cancelled
+    Method that returns true iff the future has been cancelled.
+
+cancel
+    A method that cancels the future and returns true or false based on whether
+    or not the future could be cancelled.
+
+Constructing a future, determining if a future has been realized
+(dereferenced), dereferencing a future when accessed, determining if a future
+has been cancelled, and cancelling a future follows such a common pattern that
+a ``GuzzleHttp\Ring\MagicFutureTrait`` trait is provided. This trait implements
+a future constructor which accepts a function used to dereference the future
+and an optional function used to cancel the future. This trait implements
+cancelling the future and handling the various states and the way in which the
+future state effects the return value of the ``cancel`` function.
+
+Let's implement a future that does computation (possibly in another thread),
+and blocks until the computation is complete when dereferencing.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Core;
+    use GuzzleHttp\Ring\FutureInterface;
+    use GuzzleHttp\Ring\MagicFutureTrait;
+    use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+
+    class ComputationFuture implements FutureInterface
+    {
+        use MagicFutureTrait;
+
+        /**
+         * This function must be implemented and is used to validate and
+         * process the dereferenced result.
+         */
+        protected function processResult($data)
+        {
+            // Validate the result that was dereferenced.
+            if (!is_string($result)) {
+                throw new \RuntimeException('The dereference function did not '
+                    . 'return a string. Found ' . Core::describeType($result));
+            }
+
+            return $result;
+        }
+    }
diff --git a/core/vendor/guzzlehttp/ring/docs/index.rst b/core/vendor/guzzlehttp/ring/docs/index.rst
new file mode 100644
index 0000000..fbc50b6
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/index.rst
@@ -0,0 +1,21 @@
+===========
+Guzzle-Ring
+===========
+
+Provides lower-level APIs used to power HTTP clients and servers through a
+simple, PHP ``callable`` that accepts a request hash and returns a response
+hash. Guzzle-Ring is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
+but modified to accomadate both clients and servers for both blocking and
+non-blocking requests.
+
+Guzzle-Ring is utilized in `Guzzle <http://guzzlephp.org>`_ 5.0+ to send HTTP
+requests.
+
+.. toctree::
+   :maxdepth: 1
+
+   spec
+   futures
+   client_middleware
+   client_adapters
+   testing
diff --git a/core/vendor/guzzlehttp/ring/docs/requirements.txt b/core/vendor/guzzlehttp/ring/docs/requirements.txt
new file mode 100644
index 0000000..483a4e9
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/requirements.txt
@@ -0,0 +1 @@
+sphinx_rtd_theme
diff --git a/core/vendor/guzzlehttp/ring/docs/spec.rst b/core/vendor/guzzlehttp/ring/docs/spec.rst
new file mode 100644
index 0000000..11404b6
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/spec.rst
@@ -0,0 +1,309 @@
+=============
+Specification
+=============
+
+Guzzle-Ring uses handlers, adapters, and middleware to implement HTTP clients
+and servers.
+
+Handlers
+--------
+
+Ring handlers constitute the core logic of a web application. Handlers are
+implemented as PHP callables that process a given request associative array to
+generate and return a response associative array or a
+``GuzzleHttp\Ring\RingFutureInterface``.
+
+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 or callable 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.
+
+Adapters
+--------
+
+Handlers are run via Ring adapters, which are in turn responsible for
+implementing the HTTP protocol and abstracting the handlers that they run from
+the details of the protocol.
+
+Client Adapters
+~~~~~~~~~~~~~~~
+
+Client adapters are implemented exactly like Handlers, except that they
+actually create and return HTTP responses after sending a request over the
+wire.
+
+Server Adapters
+~~~~~~~~~~~~~~~
+
+Server adapters are implemented as functions with two arguments: a handler and
+an associative array of options. The options map provides any needed
+configuration to the adapter, such as the port on which to run.
+
+Once initialized, adapters receive HTTP requests, parse them to construct a
+request array, and then invoke their handler with this request array as an
+argument. Once the handler returns a response array, the adapter uses it to
+construct and send an HTTP response to the client.
+
+Request Array
+-------------
+
+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``.
+
+then
+    (callable) A function that is invoked immediately after a response or error
+    has been received. The callable is passed the response array
+    *by reference*. The callable MAY modify the passed response to modify the
+    response that is ultimately returned by the adapter (whether it's a
+    synchronous response or a future response).
+
+future
+    (bool, string) Specifies whether or not a request SHOULD be a non-blocking,
+    future response. By default, responses can be either actual response arrays
+    or ``GuzzleHttp\Ring\RingFutureInterface`` objects which act like
+    associative arrays but are fulfilled asynchronously or when they are
+    accessed.
+
+    Set to ``true`` to *request* that a future response be provided. Keep in
+    mind that you might not necessarily get an actual future response if the
+    adapter you are using does not support them. Omit the ``future`` option or
+    set to it ``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 adapters you are using. There are,
+    however, some common future options that adapter should implement if
+    possible.
+
+    - lazy: Requests that the adapter 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 adapters to take better
+      advantage of non-blocking transfers.
+
+    If an adapter 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 adapters MUST attempt to complete
+    any outstanding future responses when a process completes. Asynchronous
+    adapters MAY choose to automatically complete responses when the number
+    of outstanding requests reaches an adapter-specific threshold.
+
+Client Specific Options
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The following options are only used in ring client adapters.
+
+.. _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 adapter 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 adapter specific: different adapters 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. Adapters
+        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
+        adapter 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 adapters.
+
+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.
+
+Response Array
+--------------
+
+A response array is an associative array of data that is returned by a handler.
+A response array contains 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
+    (``GuzzleHttp\Ring\HandlerAdapter``) 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 adapter.
+
+version
+    (string) HTTP protocol version. Defaults to ``1.1``.
diff --git a/core/vendor/guzzlehttp/ring/docs/testing.rst b/core/vendor/guzzlehttp/ring/docs/testing.rst
new file mode 100644
index 0000000..42393b8
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/docs/testing.rst
@@ -0,0 +1,74 @@
+=======
+Testing
+=======
+
+Guzzle-Ring tests client adapters 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 adapters usually involves actually sending HTTP requests.
+Guzzle-Ring 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\StreamAdapter;
+    use GuzzleHttp\Tests\Ring\Client\Server;
+
+    // First return a 200 followed by a 404 response.
+    Server::enqueue([
+        ['status' => 200],
+        ['status' => 404]
+    ]);
+
+    $adapter = new StreamAdapter();
+
+    $response = $adapter([
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]],
+        'uri'         => '/'
+    ]);
+
+    assert(200 == $response['status']);
+
+    $response = $adapter([
+        '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/streams/phpunit.xml.dist b/core/vendor/guzzlehttp/ring/phpunit.xml.dist
similarity index 87%
copy from core/vendor/guzzlehttp/streams/phpunit.xml.dist
copy to core/vendor/guzzlehttp/ring/phpunit.xml.dist
index 994e158..1d19290 100644
--- a/core/vendor/guzzlehttp/streams/phpunit.xml.dist
+++ b/core/vendor/guzzlehttp/ring/phpunit.xml.dist
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit bootstrap="./vendor/autoload.php"
+<phpunit bootstrap="./tests/bootstrap.php"
          colors="true">
     <testsuites>
         <testsuite>
diff --git a/core/vendor/guzzlehttp/ring/src/ArrayFutureInterface.php b/core/vendor/guzzlehttp/ring/src/ArrayFutureInterface.php
new file mode 100644
index 0000000..b6e773e
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/ArrayFutureInterface.php
@@ -0,0 +1,12 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+/**
+ * Future that provides array-like access. When the array is used, the future
+ * blocks until it has completed.
+ */
+interface ArrayFutureInterface extends
+    FutureInterface,
+    \ArrayAccess,
+    \Countable,
+    \IteratorAggregate {};
diff --git a/core/vendor/guzzlehttp/ring/src/BaseFutureTrait.php b/core/vendor/guzzlehttp/ring/src/BaseFutureTrait.php
new file mode 100644
index 0000000..476356a
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/BaseFutureTrait.php
@@ -0,0 +1,73 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+/**
+ * Implements common future functionality.
+ */
+trait BaseFutureTrait
+{
+    /** @var callable|null Dereference function */
+    private $dereffn;
+
+    /** @var callable|null Cancel function */
+    private $cancelfn;
+
+    /** @var bool */
+    private $isCancelled = false;
+
+    /** @var bool */
+    private $realizedAtom;
+
+    /**
+     * @param callable $deref    Function that blocks until the response is
+     *                           complete. This function MUST return a value
+     *                           that can be understood by the future, or an
+     *                           exception to raise when dereferenced.
+     * @param callable $cancel   If possible and reasonable, provide a function
+     *                           that can be used to cancel the future from
+     *                           sending. The cancel function accepts the
+     *                           future object and returns true on a successful
+     *                           cancel and false on a failed cancel.
+     * @param bool $realizedAtom An optional variable, passed by reference,
+     *                           that can be updated to true/false to mark the
+     *                           future as having been realized.
+     */
+    public function __construct(
+        callable $deref,
+        callable $cancel = null,
+        &$realizedAtom = false
+    ) {
+        $this->dereffn = $deref;
+        $this->cancelfn = $cancel;
+        $this->realizedAtom =& $realizedAtom;
+    }
+
+    public function realized()
+    {
+        return (bool) $this->realizedAtom
+            || ($this->dereffn === null && !$this->isCancelled);
+    }
+
+    public function cancel()
+    {
+        // Cannot cancel a cancelled or completed future.
+        if ($this->realized()) {
+            return false;
+        }
+
+        // If this is here, the it hasn't realized. Remove the function and
+        // provide a data variable to prevent it from dereferencing.
+        $this->realizedAtom = $this->dereffn = null;
+        $this->isCancelled = true;
+        $cancelfn = $this->cancelfn;
+        $this->cancelfn = null;
+
+        // if no cancel function is provided, then we cannot truly cancel.
+        return !$cancelfn ? false : $cancelfn($this);
+    }
+
+    public function cancelled()
+    {
+        return $this->isCancelled;
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/Client/ClientUtils.php b/core/vendor/guzzlehttp/ring/src/Client/ClientUtils.php
new file mode 100644
index 0000000..7122c86
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Client/ClientUtils.php
@@ -0,0 +1,74 @@
+<?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/ring/src/Client/CurlAdapter.php b/core/vendor/guzzlehttp/ring/src/Client/CurlAdapter.php
new file mode 100644
index 0000000..61fbb6a
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Client/CurlAdapter.php
@@ -0,0 +1,115 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+use GuzzleHttp\Ring\Core;
+
+/**
+ * HTTP adapter that uses cURL easy handles as a transport layer.
+ *
+ * Requires PHP 5.5+
+ *
+ * When using the CurlAdapter, 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 CurlAdapter
+{
+    /** @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 adapter
+     */
+    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);
+        $this->releaseEasyHandle($h);
+        $response = CurlFactory::createResponse($this, $request, $response, $hd, $bd);
+        Core::callThen($request, $response);
+
+        return $response;
+    }
+
+    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/ring/src/Client/CurlFactory.php b/core/vendor/guzzlehttp/ring/src/Client/CurlFactory.php
new file mode 100644
index 0000000..2bf3406
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Client/CurlFactory.php
@@ -0,0 +1,519 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+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->applyAdapterOptions($request, $options);
+        }
+
+        $this->applyHeaders($request, $options);
+        unset($options['_headers']);
+
+        // Add adapter 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 $adapter  Adapter 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 $adapter,
+        array $request,
+        array $response,
+        array $headers,
+        $body
+    ) {
+        if (isset($response['transfer_stats']['url'])) {
+            $response['effective_url'] = $response['transfer_stats']['url'];
+        }
+
+        if (isset($headers[0])) {
+            $startLine = explode(' ', array_shift($headers), 3);
+            // Trim out 100-Continue start-lines
+            if ($startLine[1] == '100') {
+                $startLine = explode(' ', array_shift($headers), 3);
+            }
+            $response['headers'] = Core::headersFromLines($headers);
+            $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($startLine[1])
+            ? self::createErrorResponse($adapter, $request, $response)
+            : $response;
+    }
+
+    private static function createErrorResponse(
+        callable $adapter,
+        array $request,
+        array $response
+    ) {
+        // 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($adapter, $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');
+
+        return $response + [
+            'status'  => null,
+            'reason'  => null,
+            'body'    => null,
+            'headers' => [],
+            'error'   => new RingException($message)
+        ];
+    }
+
+    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);
+
+        $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) {
+                $length = strlen($h);
+                if ($value = trim($h)) {
+                    $headers[] = trim($h);
+                }
+                return $length;
+            },
+        ];
+
+        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 applyAdapterOptions(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':
+
+                $options[CURLOPT_TIMEOUT_MS] = $value * 1000;
+                break;
+
+            case 'connect_timeout':
+
+                $options[CURLOPT_CONNECTTIMEOUT_MS] = $value * 1000;
+                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] = is_resource($value)
+                        ? $value
+                        : STDOUT;
+                    $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 $adapter,
+        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($adapter, $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($adapter, $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($adapter, $request, $response);
+        } else {
+            $request['curl']['retries']++;
+        }
+
+        return $adapter($request);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/Client/CurlMultiAdapter.php b/core/vendor/guzzlehttp/ring/src/Client/CurlMultiAdapter.php
new file mode 100644
index 0000000..a40b409
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Client/CurlMultiAdapter.php
@@ -0,0 +1,252 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\RingFuture;
+
+/**
+ * Returns an asynchronous response using curl_multi_* functions.
+ *
+ * This adapter supports future responses and the "delay" request client
+ * option that can be used to delay before sending a request.
+ *
+ * When using the CurlMultiAdapter, 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 CurlMultiAdapter
+{
+    /** @var callable */
+    private $factory;
+    private $selectTimeout;
+    private $mh;
+    private $active;
+    private $handles = [];
+    private $delays = [];
+    private $maxHandles;
+
+    /**
+     * This adapter 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 = [])
+    {
+        $this->mh = isset($options['mh'])
+            ? $options['mh'] : curl_multi_init();
+        $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 __destruct()
+    {
+        // Finish any open connections before terminating the script.
+        while ($this->handles) {
+            $this->execute();
+        }
+
+        if ($this->mh) {
+            curl_multi_close($this->mh);
+            $this->mh = null;
+        }
+    }
+
+    public function __invoke(array $request)
+    {
+        $factory = $this->factory;
+        $result = $factory($request);
+        $atom = null;
+        $realized = false;
+        $entry = [
+            'request'  => $request,
+            'response' => [],
+            'handle'   => $result[0],
+            'headers'  => &$result[1],
+            'body'     => $result[2],
+            'atom'     => &$atom,
+            'realized' => &$realized
+        ];
+
+        $this->addRequest($entry);
+        $id = (int) $result[0];
+
+        $future = new RingFuture(
+            // Dereference function
+            function () use (&$atom) {
+                if (!$atom) {
+                    $this->execute();
+                }
+                return $atom;
+            },
+            // Cancel function that removes the handle and does not finish.
+            function () use ($id) {
+                return $this->cancel($id);
+            },
+            $realized
+        );
+
+        // Transfer outstanding requests if there are too many open handles.
+        if (count($this->handles) >= $this->maxHandles) {
+            $this->execute();
+        }
+
+        return $future;
+    }
+
+    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);
+        } else {
+            curl_multi_add_handle($this->mh, $entry['handle']);
+            $future = !empty($entry['request']['future'])
+                ? $entry['request']['future']
+                : false;
+            // "lazy" futures are only sent once the pool has many requests.
+            if ($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 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 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']);
+                }
+            }
+
+            // Add the atom value to the entry.
+            $entry['atom'] = $this->responseFromEntry($entry);
+            $this->removeProcessed($id);
+            Core::callThen($entry['request'], $entry['atom']);
+            $entry['realized'] = true;
+        }
+    }
+
+    private function responseFromEntry(array $entry)
+    {
+        return CurlFactory::createResponse(
+            $this,
+            $entry['request'],
+            $entry['response'],
+            $entry['headers'],
+            $entry['body']
+        );
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/Client/Middleware.php b/core/vendor/guzzlehttp/ring/src/Client/Middleware.php
new file mode 100644
index 0000000..f0040c2
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Client/Middleware.php
@@ -0,0 +1,74 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+
+/**
+ * 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 adapter while sending all
+     * other requests to a default adapter.
+     *
+     * When the "future" option is not provided on a request, any future responses
+     * are automatically converted to synchronous responses and block.
+     *
+     * @param callable $default Adapter used for non-streaming responses
+     * @param callable $future  Adapter 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'])
+                ? Core::deref($default($request))
+                : $future($request);
+        };
+    }
+
+    /**
+     * Sends streaming requests to a streaming compatible adapter while sending all
+     * other requests to a default adapter.
+     *
+     * This, for example, could be useful for taking advantage of the performance
+     * benefits of curl while still supporting true streaming through the
+     * StreamAdapter.
+     *
+     * @param callable $default   Adapter used for non-streaming responses
+     * @param callable $streaming Adapter 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);
+        };
+    }
+
+    /**
+     * Forces all responses to be synchronous.
+     *
+     * @param callable $handler Handler to wrap
+     *
+     * @return callable Returns the composed handler.
+     */
+    public static function wrapSynchronous(callable $handler)
+    {
+        return function (array $request) use ($handler) {
+            return Core::deref($handler($request));
+        };
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/Client/MockAdapter.php b/core/vendor/guzzlehttp/ring/src/Client/MockAdapter.php
new file mode 100644
index 0000000..eb52e42
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Client/MockAdapter.php
@@ -0,0 +1,76 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\RingFuture;
+use GuzzleHttp\Ring\ArrayFutureInterface;
+
+/**
+ * Ring adapter that returns a canned response or evaluated function result.
+ *
+ * This class is useful for implementing mock responses while still accounting
+ * for things like the "then" request option.
+ */
+class MockAdapter
+{
+    /** @var callable|array|ArrayFutureInterface */
+    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|ArrayFutureInterface|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 (isset($request['then'])) {
+            // Create a new future that will call "then" when deref'd
+            if ($response instanceof ArrayFutureInterface) {
+                $response = new RingFuture(function () use ($request, $response) {
+                    return $this->callThen($request, Core::deref($response));
+                }, function () use ($response) {
+                    return $response->cancel();
+                });
+            } else {
+                $response = $this->callThen($request, $response);
+            }
+        } elseif (is_array($response)) {
+            return $this->addMissing($response);
+        }
+
+        return $response;
+    }
+
+    private function callThen(array $request, $response)
+    {
+        Core::callThen($request, $response);
+        if (is_array($response)) {
+            $response = $this->addMissing($response);
+        }
+
+        return $response;
+    }
+
+    private function addMissing(array $response)
+    {
+        return $response + [
+            'status'        => null,
+            'body'          => null,
+            'headers'       => [],
+            'reason'        => null,
+            'effective_url' => null
+        ];
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/Client/StreamAdapter.php b/core/vendor/guzzlehttp/ring/src/Client/StreamAdapter.php
new file mode 100644
index 0000000..a9b0b21
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Client/StreamAdapter.php
@@ -0,0 +1,394 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Exception\RingException;
+use GuzzleHttp\Stream\InflateStream;
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\Utils;
+
+/**
+ * Guzzle-Ring client adapter that uses PHP's HTTP stream wrapper.
+ */
+class StreamAdapter
+{
+    private $options;
+
+    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, $headers);
+            return $this->createResponse($request, $url, $headers, $stream);
+        } catch (\Exception $e) {
+            return $this->createErrorResponse($url, $e);
+        }
+    }
+
+    private function createResponse(array $request, $url, array $hdrs, $stream)
+    {
+        $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;
+        Core::callThen($request, $response);
+
+        return $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 \Exception $e
+     *
+     * @return array
+     */
+    private function createErrorResponse($url, \Exception $e)
+    {
+        if (!($e instanceof RingException)) {
+            $e = new RingException($e->getMessage(), 0, $e);
+        }
+
+        return [
+            '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)
+    {
+        // Turn off error reporting while we try to initiate the request
+        $level = error_reporting(0);
+        $resource = call_user_func($callback);
+        error_reporting($level);
+
+        // If the resource could not be created, then grab the last error and
+        // throw an exception.
+        if (!is_resource($resource)) {
+            $message = 'Error creating resource: ';
+            foreach ((array) error_get_last() as $key => $value) {
+                $message .= "[{$key}] {$value} ";
+            }
+            throw new \RuntimeException(trim($message));
+        }
+
+        return $resource;
+    }
+
+    private function createStream(
+        $url,
+        array $request,
+        &$http_response_header
+    ) {
+        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),
+            $http_response_header
+        );
+    }
+
+    private function getDefaultOptions(array $request)
+    {
+        $headers = [];
+        foreach ($request['headers'] as $name => $value) {
+            foreach ((array) $value as $val) {
+                $headers[] = "$name: $val";
+            }
+        }
+
+        $context = [
+            'http' => [
+                'method'           => $request['http_method'],
+                'header'           => $headers,
+                'protocol_version' => '1.1',
+                'ignore_errors'    => true,
+                'follow_location'  => 0
+            ]
+        ];
+
+        $body = Core::body($request);
+        if (isset($body)) {
+            $context['http']['content'] = $body;
+            // Prevent the HTTP adapter from adding a Content-Type header.
+            if (!Core::hasHeader($request, 'Content-Type')) {
+                $context['http']['header'][] .= "Content-Type:";
+            }
+        }
+
+        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 \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'] = 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 \RuntimeException("SSL certificate not found: {$value}");
+        }
+
+        $options['ssl']['local_cert'] = $value;
+    }
+
+    private function add_progress(array $request, &$options, $value, &$params)
+    {
+        $fn = function ($code, $_, $_, $_, $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)
+    {
+        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'];
+
+        if (!is_resource($value)) {
+            $value = fopen('php://output', 'w');
+        }
+
+        $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 \RuntimeException('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,
+        &$http_response_header
+    ) {
+        return $this->createResource(
+            function () use ($url, &$http_response_header, $context) {
+                if (false === strpos($url, 'http')) {
+                    trigger_error("URL is invalid: {$url}", E_USER_WARNING);
+                    return null;
+                }
+                return fopen($url, 'r', null, $context);
+            },
+            $request,
+            $options
+        );
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/Core.php b/core/vendor/guzzlehttp/ring/src/Core.php
new file mode 100644
index 0000000..bff90e9
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Core.php
@@ -0,0 +1,378 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+use GuzzleHttp\Stream\StreamInterface;
+
+/**
+ * Provides core functionality of Ring adapters and middleware.
+ */
+class Core
+{
+    /**
+     * Adds a "then" function to a request that is invoked when the request
+     * completes.
+     *
+     * If an existing "then" function is present, then a new "then" will be
+     * added to the request. The new "then" function will become an aggregate
+     * of the previous then function that first calls the new function followed
+     * by the previous previous function.
+     *
+     * The provided function accepts the returned response *by reference*.
+     * Modifying the passed response argument will modify the response that
+     * is ultimately returned when a future is dereferenced.
+     *
+     * @param array    $request Request to update
+     * @param callable $fn      Function to invoke on completion.
+     *
+     * @return array Returns a modified request array.
+     */
+    public static function then(array $request, callable $fn)
+    {
+        if (isset($request['then'])) {
+            $fn = function (&$response) use ($request, $fn) {
+                $fn($response);
+                $then = $request['then'];
+                $then($response);
+            };
+        }
+
+        $request['then'] = $fn;
+
+        return $request;
+    }
+
+    /**
+     * 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);
+            }
+        };
+    }
+
+    /**
+     * Derefs a response (blocks until it is complete) and returns an array
+     * response.
+     *
+     * If the provided response is a normal response hash, it is returned.
+     *
+     * @param array|FutureInterface $response Response to dereference
+     *
+     * @return array
+     */
+    public static function deref($response)
+    {
+        return $response instanceof FutureInterface
+            ? $response->deref()
+            : $response;
+    }
+
+    /**
+     * 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(array $message, $header)
+    {
+        // Slight optimization for exact matches.
+        if (isset($message['headers'][$header])) {
+            return $message['headers'][$header];
+        }
+
+        // Check for message with no headers after the "fast" isset check.
+        if (!isset($message['headers'])) {
+            return [];
+        }
+
+        // Iterate and case-insensitively find the header by name.
+        foreach ($message['headers'] as $name => $value) {
+            if (!strcasecmp($name, $header)) {
+                return $value;
+            }
+        }
+
+        return [];
+    }
+
+    /**
+     * 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(array $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(array $message, $header)
+    {
+        $match = self::headerLines($message, $header);
+
+        if (!isset($match[0])) {
+            return null;
+        }
+
+        // Return the match itself if it is a single value.
+        if (!($pos = strpos($match[0], ','))) {
+            return $match[0];
+        }
+
+        return substr($match[0], 0, $pos);
+    }
+
+    /**
+     * 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(array $message, $header)
+    {
+        return (bool) self::headerLines($message, $header);
+    }
+
+    /**
+     * 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(array $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;
+    }
+
+    /**
+     * 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|ArrayFutureInterface $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(array $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()));
+        }
+    }
+
+    /**
+     * Handles calling the "then" option of a request.
+     *
+     * This function updates the provided "atom" by referenced, accounting for
+     * return values from the "then" function and setting the atom to an
+     * exception if one was encountered.
+     *
+     * @param array $request
+     * @param       $atom
+     */
+    public static function callThen(array $request, &$atom)
+    {
+        if (!isset($request['then'])) {
+            return;
+        }
+
+        try {
+            $then = $request['then'];
+            $then($atom);
+        } catch (\Exception $e) {
+            // The atom get an "error" added to it if an exception is encountered.
+            $atom['error'] = $e;
+        }
+    }
+
+    /**
+     * 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);
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/Exception/CancelledFutureAccessException.php b/core/vendor/guzzlehttp/ring/src/Exception/CancelledFutureAccessException.php
new file mode 100644
index 0000000..cc407b4
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Exception/CancelledFutureAccessException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+class CancelledFutureAccessException extends RingException {}
diff --git a/core/vendor/guzzlehttp/ring/src/Exception/RingException.php b/core/vendor/guzzlehttp/ring/src/Exception/RingException.php
new file mode 100644
index 0000000..eed0daf
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/Exception/RingException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+class RingException extends \RuntimeException {};
diff --git a/core/vendor/guzzlehttp/ring/src/FutureInterface.php b/core/vendor/guzzlehttp/ring/src/FutureInterface.php
new file mode 100644
index 0000000..c39feca
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/FutureInterface.php
@@ -0,0 +1,58 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+/**
+ * Represents the result of a computation that may not have completed yet.
+ *
+ * When the future is dereferenced using deref(), the result of the computation
+ * is cached and returned for subsequent calls to deref(). If the result of the
+ * computation has not yet completed when deref() is called, the call to
+ * deref() will block until the future has completed.
+ */
+interface FutureInterface
+{
+    /**
+     * 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.
+     *
+     * @return array
+     */
+    public function deref();
+
+    /**
+     * Returns true if the future has been realized, meaning a result or error
+     * is available.
+     *
+     * @return bool
+     */
+    public function realized();
+
+    /**
+     * Cancels the future.
+     *
+     * There are three different cases handled by this method:
+     *
+     * 1. If the future is already realized or cancelled, this function returns
+     *    false because there's no way to cancel it.
+     * 2. If the future has not been realized, then the dereference function
+     *    will be disassociated from the future, will not be called, and
+     *    the future state will be changed to cancelled. Because the future
+     *    may not have been truly cancelled from the executor, this case will
+     *    return false.
+     * 3. If the future has a cancel function, then the future state will be
+     *    set to cancelled, the cancel function will be called, and the result
+     *    of the invocation will be returned.
+     *
+     * @return bool
+     */
+    public function cancel();
+
+    /**
+     * Returns true if the future has been cancelled.
+     *
+     * @return bool
+     */
+    public function cancelled();
+}
diff --git a/core/vendor/guzzlehttp/ring/src/FutureValue.php b/core/vendor/guzzlehttp/ring/src/FutureValue.php
new file mode 100644
index 0000000..8353b06
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/FutureValue.php
@@ -0,0 +1,29 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+
+/**
+ * Represents a simple future value that responds to deref to retrieve a value.
+ */
+class FutureValue implements FutureInterface
+{
+    use BaseFutureTrait;
+
+    private $cache;
+
+    public function deref()
+    {
+        if (!isset($this->cache)) {
+            if ($this->isCancelled) {
+                throw new CancelledFutureAccessException('You are attempting '
+                    . 'to access a future that has been cancelled.');
+            }
+            $deref = $this->dereffn;
+            $this->dereffn = $this->cancelfn = null;
+            $this->cache = $deref();
+        }
+
+        return $this->cache;
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/src/MagicFutureTrait.php b/core/vendor/guzzlehttp/ring/src/MagicFutureTrait.php
new file mode 100644
index 0000000..3872a66
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/MagicFutureTrait.php
@@ -0,0 +1,59 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+
+/**
+ * Implements common future functionality that is triggered when the result
+ * property is accessed via a magic __get method.
+ *
+ * Note: you must implement processResult in order to use this trait.
+ *
+ * @property mixed $result Actual data used by the future. Accessing this
+ *     property will cause the future to block if needed.
+ */
+trait MagicFutureTrait
+{
+    use BaseFutureTrait;
+
+    public function deref()
+    {
+        return $this->result;
+    }
+
+    /**
+     * 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 CancelledFutureAccessException
+     */
+    public function __get($name)
+    {
+        if ($name !== 'result') {
+            throw new \RuntimeException("Class has no {$name} property");
+        } elseif ($this->isCancelled) {
+            throw new CancelledFutureAccessException('You are attempting '
+                . 'to access a future that has been cancelled.');
+        }
+
+        $deref = $this->dereffn;
+        // Unset these as they are no longer needed.
+        $this->dereffn = $this->cancelfn = null;
+
+        return $this->result = $this->processResult($deref());
+    }
+
+    /**
+     * Function that processes the dereferenced result value. This function
+     * must be implemented when using this trait.
+     *
+     * @param mixed $result Result to process
+     *
+     * @return mixed Returns the result value.
+     * @throws \Exception on error.
+     */
+    abstract protected function processResult($result);
+}
diff --git a/core/vendor/guzzlehttp/ring/src/RingFuture.php b/core/vendor/guzzlehttp/ring/src/RingFuture.php
new file mode 100644
index 0000000..a683dd5
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/src/RingFuture.php
@@ -0,0 +1,65 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+/**
+ * Future ring response that may or may not have completed.
+ *
+ * Future responses act just like a normal response hash. It can be iterated,
+ * counted, and you can access it using associative array style access. When
+ * the future response is used like a normal response hash, the future of the
+ * response is "realized" (meaning blocks until the request has completed), and
+ * the actual response is then used as the internal response data.
+ *
+ * Futures can be cancelled if they have not already been realized.
+ * Cancelling a future will prevent the future from executing the dereference
+ * function and will execute the function provided to the future that actually
+ * handles the cancellation (e.g., telling an event loop to stop sending a
+ * request or to close a socket). If no cancel 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.
+ */
+class RingFuture implements ArrayFutureInterface
+{
+    use MagicFutureTrait;
+
+    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);
+    }
+
+    protected function processResult($result)
+    {
+        if (!is_array($result)) {
+            throw new \RuntimeException('The dereference function did not '
+                . 'return an array. Found ' . Core::describeType($result));
+        }
+
+        return $result;
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/Client/CurlAdapterTest.php b/core/vendor/guzzlehttp/ring/tests/Client/CurlAdapterTest.php
new file mode 100644
index 0000000..1007f83
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/CurlAdapterTest.php
@@ -0,0 +1,149 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\CurlAdapter;
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\Stream;
+
+class CurlAdapterTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!function_exists('curl_reset')) {
+            $this->markTestSkipped('curl_reset() is not available');
+        }
+    }
+
+    protected function getAdapter($factory = null, $options = [])
+    {
+        return new CurlAdapter($options);
+    }
+
+    public function testCanSetMaxHandles()
+    {
+        $a = new CurlAdapter(['max_handles' => 10]);
+        $this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
+    }
+
+    public function testCreatesCurlErrors()
+    {
+        $adapter = new CurlAdapter();
+        $response = $adapter([
+            '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 CurlAdapter(['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 CurlAdapter();
+        $request = [
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]]
+        ];
+        $a($request);
+        $a($request);
+    }
+
+    public function testCallsThenOnComplete()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200, 'reason' => 'OK']]);
+        $res = null;
+        $adapter = new CurlAdapter();
+        $adapter([
+            'http_method' => 'GET',
+            'headers' => ['host' => [Server::$host]],
+            'then' => function (array $response) use (&$res) {
+                $res = $response;
+            }
+        ]);
+        $this->assertInternalType('array', $res);
+        $this->assertEquals(200, $res['status']);
+        $this->assertEquals('OK', $res['reason']);
+    }
+
+    public function testHasNoMemoryLeaks()
+    {
+        Server::flush();
+        $response = ['status' => 200];
+        Server::enqueue(array_fill_keys(range(0, 25), $response));
+        $a = new CurlAdapter();
+        $memory = [];
+        for ($i = 0; $i < 25; $i++) {
+            $a([
+                'http_method' => 'GET',
+                'headers'     => ['host' => [Server::$host]],
+                'then'        => function () {},
+                'progress'    => function () {},
+                'client'      => [
+                    'save_to' => FnStream::decorate(Stream::factory(), [
+                        'write' => function ($str) {
+                            return strlen($str);
+                        }
+                    ])
+                ]
+            ]);
+            $memory[] = memory_get_usage(true);
+        }
+        $this->assertCount(25, Server::received());
+        // Take the last 15 entries and ensure they are consistent
+        $last = $memory[9];
+        $entries = array_slice($memory, 10);
+        foreach ($entries as $entry) {
+            $this->assertEquals($last, $entry);
+            $last = $entry;
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/Client/CurlFactoryTest.php b/core/vendor/guzzlehttp/ring/tests/Client/CurlFactoryTest.php
new file mode 100644
index 0000000..c5fd461
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/CurlFactoryTest.php
@@ -0,0 +1,696 @@
+<?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\CurlMultiAdapter;
+use GuzzleHttp\Ring\Client\MockAdapter;
+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 CurlMultiAdapter();
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers' => ['host' => [Server::$host]]
+        ]);
+        $response->deref();
+        $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 CurlMultiAdapter();
+        $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 CurlMultiAdapter();
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['debug' => $res]
+        ]);
+        $response->deref();
+        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 CurlMultiAdapter();
+        $called = [];
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => [
+                'progress' => function () use (&$called) {
+                    $called[] = func_get_args();
+                }
+            ]
+        ]);
+        $response->deref();
+        $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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['decode_content' => true],
+        ]);
+        $response->deref();
+        $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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'            => [Server::$host],
+                'Accept-Encoding' => ['gzip']
+            ],
+            'client' => ['decode_content' => true],
+        ]);
+        $response->deref();
+        $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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['decode_content' => false]
+        ]);
+        $response->deref();
+        $sent = Server::received()[0];
+        $this->assertNull(Core::header($sent, 'Accept-Encoding'));
+        $this->assertEquals($content, Core::body($response));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesSaveTo()
+    {
+        $adapter = new CurlMultiAdapter();
+        $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['save_to' => true],
+        ]);
+    }
+
+    public function testSavesToStream()
+    {
+        $stream = fopen('php://memory', 'r+');
+        $this->addDecodeResponse();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to' => $stream
+            ],
+        ]);
+        $response->deref();
+        rewind($stream);
+        $this->assertEquals('test', stream_get_contents($stream));
+    }
+
+    public function testSavesToGuzzleStream()
+    {
+        $stream = Stream::factory();
+        $this->addDecodeResponse();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to'        => $stream
+            ],
+        ]);
+        $response->deref();
+        $this->assertEquals('test', (string) $stream);
+    }
+
+    public function testSavesToFileOnDisk()
+    {
+        $tmpfile = tempnam(sys_get_temp_dir(), 'testfile');
+        $this->addDecodeResponse();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to'        => $tmpfile
+            ],
+        ]);
+        $response->deref();
+        $this->assertEquals('test', file_get_contents($tmpfile));
+        unlink($tmpfile);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesBody()
+    {
+        $adapter = new CurlMultiAdapter();
+        $adapter([
+            '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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $stream
+        ]);
+        $response->deref();
+        $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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $iter
+        ]);
+        $response->deref();
+        $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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'           => [Server::$host],
+                'content-length' => [1000000]
+            ],
+            'body'        => $res
+        ]);
+        $response->deref();
+        $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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $stream
+        ]);
+        $response->deref();
+        $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();
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'           => [Server::$host],
+                'content-length' => 3
+            ],
+            'body' => 'foo'
+        ]);
+        $response->deref();
+        $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]]);
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter([
+            'http_method' => 'POST',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]]
+        ]);
+        $response->deref();
+        $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()
+    {
+        $callAdapter = $called = false;
+        $res = CurlFactory::createResponse(function () use (&$callAdapter) {
+            $callAdapter = true;
+            return ['status' => 200];
+        }, [
+            'body' => FnStream::decorate(Stream::factory('test'), [
+                'seek' => function () use (&$called) {
+                    $called = true;
+                    return true;
+                }
+            ])
+        ], [], [], null);
+
+        $this->assertTrue($callAdapter);
+        $this->assertTrue($called);
+        $this->assertEquals('200', $res['status']);
+    }
+
+    public function testFailsWhenRetryMoreThanThreeTimes()
+    {
+        $call = 0;
+        $mock = new MockAdapter(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'
+        ];
+
+        $adapter = new CurlMultiAdapter();
+        $response = $adapter($request)->deref();
+        $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/ring/tests/Client/CurlMultiAdapterTest.php b/core/vendor/guzzlehttp/ring/tests/Client/CurlMultiAdapterTest.php
new file mode 100644
index 0000000..e60c7b6
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/CurlMultiAdapterTest.php
@@ -0,0 +1,176 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\CurlMultiAdapter;
+
+class CurlMultiAdapterTest extends \PHPUnit_Framework_TestCase
+{
+    public function testSendsRequest()
+    {
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiAdapter();
+        $res = null;
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'then'        => function (array $response) use (&$res) {
+                $res = $response;
+            }
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\RingFuture', $response);
+        $this->assertEquals(200, $response['status']);
+        $this->assertSame($res, $response->deref());
+        $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 CurlMultiAdapter();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => ['localhost:123']]
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\RingFuture', $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 CurlMultiAdapter();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]]
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\RingFuture', $response);
+        $a->__destruct();
+        $this->assertEquals(200, $response['status']);
+    }
+
+    public function testCanSetMaxHandles()
+    {
+        $a = new CurlMultiAdapter(['max_handles' => 2]);
+        $this->assertEquals(2, $this->readAttribute($a, 'maxHandles'));
+    }
+
+    public function testCanSetSelectTimeout()
+    {
+        $a = new CurlMultiAdapter(['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 CurlMultiAdapter(['max_handles' => 3]);
+        $called = $responses = [];
+        for ($i = 0; $i < 5; $i++) {
+            $request['then'] = function () use ($i, &$called) {
+                $called[$i] = $i;
+            };
+            $responses[] = $a($request);
+        }
+        $this->assertCount(3, Server::received());
+        $this->assertEquals([0, 1, 2], $called);
+        $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 CurlMultiAdapter();
+        $responses = [];
+
+        for ($i = 0; $i < 10; $i++) {
+            $response = $a([
+                'http_method' => 'GET',
+                'headers'     => ['host' => [Server::$host]],
+                'future'      => 'lazy'
+            ]);
+            $this->assertTrue($response->cancel());
+            $responses[] = $response;
+        }
+
+        $this->assertCount(0, Server::received());
+
+        foreach ($responses as $response) {
+            $this->assertTrue($response->cancelled());
+            $this->assertFalse($response->realized());
+        }
+    }
+
+    public function testCannotCancelFinished()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiAdapter();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]]
+        ]);
+        $response->deref();
+        $this->assertFalse($response->cancel());
+    }
+
+    public function testDelaysInParallel()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiAdapter();
+        $expected = microtime(true) + (100 / 1000);
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['delay' => 100]
+        ]);
+        $response->deref();
+        $this->assertGreaterThanOrEqual($expected, microtime(true));
+    }
+
+    public function testReturnsRealizedWhenReadyButNotDereferenced()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiAdapter();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]]
+        ]);
+        $ref = new \ReflectionMethod($a, 'execute');
+        $ref->setAccessible(true);
+        $ref->invoke($a);
+        $this->assertTrue($response->realized());
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/Client/MiddlewareTest.php b/core/vendor/guzzlehttp/ring/tests/Client/MiddlewareTest.php
new file mode 100644
index 0000000..0f062c8
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/MiddlewareTest.php
@@ -0,0 +1,85 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\Middleware;
+use GuzzleHttp\Ring\RingFuture;
+
+class MiddlewareTest extends \PHPUnit_Framework_TestCase
+{
+    public function testFutureCallsDefaultAdapter()
+    {
+        $future = new RingFuture(function () { return []; });
+        $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);
+        $result = $s([]);
+        $this->assertTrue($calledA);
+        $this->assertFalse($calledB);
+        $this->assertInternalType('array', $result);
+    }
+
+    public function testFutureCallsStreamingAdapter()
+    {
+        $future = new RingFuture(function () {});
+        $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 testStreamingCallsDefaultAdapter()
+    {
+        $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 testStreamingCallsStreamingAdapter()
+    {
+        $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);
+    }
+
+    public function testSynchronousForcesSynchronousResponses()
+    {
+        $h = Middleware::wrapSynchronous(function () {
+            return new RingFuture(function () {
+                return ['status' => 200];
+            });
+        });
+
+        $this->assertEquals(['status' => 200], $h([]));
+    }
+
+    public function testSynchronousReturnsRegularResponses()
+    {
+        $h = Middleware::wrapSynchronous(function () {
+            return ['status' => 200];
+        });
+        $this->assertEquals(['status' => 200], $h([]));
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/Client/MockAdapterTest.php b/core/vendor/guzzlehttp/ring/tests/Client/MockAdapterTest.php
new file mode 100644
index 0000000..7f8b195
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/MockAdapterTest.php
@@ -0,0 +1,81 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\MockAdapter;
+use GuzzleHttp\Ring\RingFuture;
+
+class MockAdapterTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsArray()
+    {
+        $mock = new MockAdapter(['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 testCallsThenFromArrayResponses()
+    {
+        $mock = new MockAdapter(['status' => 200]);
+        $response = $mock([
+            'then' => function (array &$response) {
+                $this->assertEquals(200, $response['status']);
+                $response = ['status' => 304];
+            }
+        ]);
+        $this->assertEquals(304, $response['status']);
+        $this->assertEquals([], $response['headers']);
+        $this->assertNull($response['body']);
+        $this->assertNull($response['reason']);
+        $this->assertNull($response['effective_url']);
+    }
+
+    public function testReturnsFutures()
+    {
+        $future = new RingFuture(function () {
+            return ['status' => 200];
+        });
+        $mock = new MockAdapter($future);
+        $response = $mock([]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\RingFuture', $response);
+        $this->assertEquals(200, $response['status']);
+    }
+
+    public function testReturnsFuturesWithThenCall()
+    {
+        $future = new RingFuture(function () {
+            return ['status' => 200];
+        });
+        $mock = new MockAdapter($future);
+        $response = $mock([
+            'then' => function (array &$response) {
+                $this->assertEquals(200, $response['status']);
+                $response = ['status' => 304];
+            }
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\RingFuture', $response);
+        $this->assertEquals(304, $response['status']);
+    }
+
+    public function testReturnsFuturesAndProxiesCancel()
+    {
+        $c = null;
+        $future = new RingFuture(
+            function () {},
+            function () use (&$c) {
+                $c = true;
+                return true;
+            }
+        );
+        $mock = new MockAdapter($future);
+        $response = $mock([
+            'then' => function (array $response) {}
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\RingFuture', $response);
+        $this->assertTrue($response->cancel());
+        $this->assertTrue($c);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/Client/Server.php b/core/vendor/guzzlehttp/ring/tests/Client/Server.php
new file mode 100644
index 0000000..d1123c3
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/Server.php
@@ -0,0 +1,183 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\StreamAdapter;
+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 Guzzle-Ring 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 Guzzle-Ring 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 = []
+    ) {
+        $adapter = new StreamAdapter();
+
+        $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 $adapter($request);
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/Client/StreamAdapterTest.php b/core/vendor/guzzlehttp/ring/tests/Client/StreamAdapterTest.php
new file mode 100644
index 0000000..38040d8
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/StreamAdapterTest.php
@@ -0,0 +1,476 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\ClientUtils;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Client\StreamAdapter;
+
+class StreamAdapterTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsResponseForSuccessfulRequest()
+    {
+        $this->queueRes();
+        $adapter = new StreamAdapter();
+        $response = $adapter([
+            '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()
+    {
+        $adapter = new StreamAdapter();
+        $result = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => ['localhost:123']],
+            'client'      => ['timeout' => 0.01]
+        ]);
+
+        $this->assertNull($result['status']);
+        $this->assertNull($result['body']);
+        $this->assertEquals([], $result['headers']);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Ring\Exception\RingException',
+            $result['error']
+        );
+    }
+
+    public function testEnsuresTheHttpProtocol()
+    {
+        $adapter = new StreamAdapter();
+        $result = $adapter([
+            '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();
+        $adapter = new StreamAdapter();
+        $response = $adapter([
+            '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();
+        $adapter = new StreamAdapter();
+        $response = $adapter([
+            '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();
+        $adapter = new StreamAdapter();
+        $response = $adapter([
+            '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();
+        $adapter = new StreamAdapter();
+        $response = $adapter([
+            '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
+            ]
+        ]);
+
+        $adapter = new StreamAdapter();
+        $response = $adapter([
+            '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
+            ]
+        ]);
+
+        $adapter = new StreamAdapter();
+        $response = $adapter([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'uri'         => '/',
+            'client'      => ['stream' => true, 'decode_content' => false]
+        ]);
+        $this->assertSame($content, Core::body($response));
+    }
+
+    protected function getSendResult(array $opts)
+    {
+        $this->queueRes();
+        $adapter = new StreamAdapter();
+        $opts['stream'] = true;
+        return $adapter([
+            '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 testDebugAttributeWritesStreamInfoToTempBufferByDefault()
+    {
+        $this->queueRes();
+        ob_start();
+        $this->getSendResult(['debug' => true]);
+        $contents = ob_get_clean();
+        $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();
+        $adapter = new StreamAdapter();
+        $adapter([
+            'http_method' => 'PUT',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host], 'content-length' => [3]],
+            'body' => 'foo'
+        ]);
+        $req = Server::received()[0];
+        $this->assertSame('', Core::header($req, 'Content-Type'));
+        $this->assertEquals(3, Core::header($req, 'Content-Length'));
+    }
+
+    public function testTriggersThenOnComplete()
+    {
+        $this->queueRes();
+        $adapter = new StreamAdapter();
+        $res = $adapter([
+            'http_method' => 'PUT',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host]],
+            'then' => function (array &$response) {
+                $response['foo'] = 'bar';
+            }
+        ]);
+        $this->assertSame('bar', $res['foo']);
+    }
+
+    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'
+        ];
+
+        $adapter = new StreamAdapter();
+        $response = $adapter($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/ring/tests/Client/server.js b/core/vendor/guzzlehttp/ring/tests/Client/server.js
new file mode 100644
index 0000000..5642c0f
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/Client/server.js
@@ -0,0 +1,161 @@
+/**
+ * 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'}]
+ *
+ *  - 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 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() {
+                receivedRequest(request, req, res);
+            });
+        });
+
+        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/ring/tests/CoreTest.php b/core/vendor/guzzlehttp/ring/tests/CoreTest.php
new file mode 100644
index 0000000..12937c7
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/CoreTest.php
@@ -0,0 +1,331 @@
+<?php
+namespace GuzzleHttp\Tests\Ring;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\RingFuture;
+use GuzzleHttp\Stream\Stream;
+
+class CoreTest extends \PHPUnit_Framework_TestCase
+{
+    public function testAddsThensWhenNoneExist()
+    {
+        $th = function () {};
+        $request = [];
+        $request = Core::then($request, $th);
+        $this->assertSame($th, $request['then']);
+    }
+
+    public function testCreatesAggregateThensWithFirstResponse()
+    {
+        $called = [];
+        $th1 = function (array &$response) use (&$called) {
+            $called[] = 'th1';
+            $response['a'] = 1;
+        };
+        $th2 = function (array &$response) use (&$called) {
+            $called[] = 'th2';
+        };
+        $request = ['then' => $th1];
+        $request = Core::then($request, $th2);
+        $this->assertNotSame($th1, $request['then']);
+        $this->assertNotSame($th2, $request['then']);
+        $res = [];
+        $then = $request['then'];
+        $then($res);
+        $this->assertEquals(['a' => 1], $res);
+        $this->assertEquals(['th2', 'th1'], $called);
+    }
+
+    public function testCreatesAggregateThensWithSecondResponse()
+    {
+        $th1 = function (array &$response) {};
+        $th2 = function (array &$response) {
+            $response['a'] = 1;
+        };
+        $request = ['then' => $th1];
+        $request = Core::then($request, $th2);
+        $this->assertNotSame($th1, $request['then']);
+        $this->assertNotSame($th2, $request['then']);
+        $res = [];
+        $then = $request['then'];
+        $then($res);
+        $this->assertEquals(['a' => 1], $res);
+    }
+
+    public function testDerefReturnsArray()
+    {
+        $res = ['status' => 200];
+        $this->assertInternalType('array', Core::deref($res));
+    }
+
+    public function testDerefReturnsArrayWhenFuture()
+    {
+        $future = new RingFuture(function () { return ['status' => 200]; });
+        $this->assertInternalType('array', Core::deref($future));
+    }
+
+    public function testReturnsNullNoHeadersAreSet()
+    {
+        $this->assertNull(Core::header([], 'Foo'));
+        $this->assertNull(Core::firstHeader([], 'Foo'));
+    }
+
+    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 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 testCallsThenWithExceptionTrap()
+    {
+        $atom = null;
+        $request = [
+            'then' => function () { throw new \OutOfBoundsException(); }
+        ];
+        Core::callThen($request, $atom);
+        $this->assertInstanceOf('OutOfBoundsException', $atom['error']);
+    }
+
+    public function testDoesSleep()
+    {
+        $t = microtime(true);
+        $expected = $t + (100 / 1000);
+        Core::doSleep(['client' => ['delay' => 100]]);
+        $this->assertGreaterThanOrEqual($expected, microtime(true));
+    }
+}
+
+final class StrClass
+{
+    public function __toString()
+    {
+        return 'foo';
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/FutureValueTest.php b/core/vendor/guzzlehttp/ring/tests/FutureValueTest.php
new file mode 100644
index 0000000..8751e77
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/FutureValueTest.php
@@ -0,0 +1,33 @@
+<?php
+namespace GuzzleHttp\Tests\Ring;
+
+use GuzzleHttp\Ring\FutureValue;
+
+class FutureValueTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDerefReturnsValue()
+    {
+        $called = 0;
+        $f = new FutureValue(function () use (&$called) {
+            $called++;
+            return 'foo';
+        });
+        $this->assertEquals('foo', $f->deref());
+        $this->assertEquals(1, $called);
+        $this->assertEquals('foo', $f->deref());
+        $this->assertEquals(1, $called);
+        $this->assertFalse($f->cancelled());
+        $this->assertFalse($f->cancel());
+        $this->assertTrue($f->realized());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     */
+    public function testThrowsWhenAccessingCancelled()
+    {
+        $f = new FutureValue(function () {}, function () { return true; });
+        $this->assertTrue($f->cancel());
+        $f->deref();
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/RingFutureTest.php b/core/vendor/guzzlehttp/ring/tests/RingFutureTest.php
new file mode 100644
index 0000000..29e7266
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/RingFutureTest.php
@@ -0,0 +1,114 @@
+<?php
+namespace GuzzleHttp\Tests\Ring;
+
+use GuzzleHttp\Ring\RingFuture;
+
+class RingFutureTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLazilyCallsDeref()
+    {
+        $c = false;
+        $f = new RingFuture(function () use (&$c) {
+            $c = true;
+            return ['status' => 200];
+        });
+        $this->assertFalse($c);
+        $this->assertEquals(200, $f['status']);
+        $this->assertTrue($c);
+    }
+
+    public function testActsLikeArray()
+    {
+        $f = new RingFuture(function () {
+            return ['status' => 200];
+        });
+
+        $this->assertTrue(isset($f['status']));
+        $this->assertEquals(200, $f['status']);
+        $this->assertEquals(['status' => 200], $f->deref());
+        $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()
+    {
+        $f = new RingFuture(function () {});
+        $f->foo;
+    }
+
+    public function testCanCancelRingFuture()
+    {
+        $called = [];
+        $f = new RingFuture(function () use (&$called) {
+            $called[] = 'deref';
+            return ['status' => 200];
+        }, function () use (&$called) {
+            $called[] = 'cancel';
+            return true;
+        });
+        $this->assertTrue($f->cancel());
+        $this->assertEquals(['cancel'], $called);
+        $this->assertTrue($f->cancelled());
+        $this->assertFalse($f->cancel());
+        $this->assertFalse($f->realized());
+    }
+
+    public function testCancellingCompletedRingFutureReturnsFalse()
+    {
+        $called = [];
+        $f = new RingFuture(function () use (&$called) {
+            $called[] = 'deref';
+            return ['status' => 200];
+        }, function () use (&$called) {
+            $called[] = 'cancel';
+            return true;
+        });
+        $f->deref();
+        $this->assertFalse($f->cancel());
+        $this->assertEquals(['status' => 200], $f->deref());
+        $this->assertEquals(['deref'], $called);
+        $this->assertFalse($f->cancelled());
+        $this->assertTrue($f->realized());
+    }
+
+    public function testCancellingWithNoCancelFunctionPreventsDeref()
+    {
+        $called = [];
+        $f = new RingFuture(function () use (&$called) {
+            $called[] = 'deref';
+            return ['status' => 200];
+        });
+        $this->assertFalse($f->cancel());
+        $this->assertTrue($f->cancelled());
+        $this->assertEquals([], $called);
+        $this->assertFalse($f->realized());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     */
+    public function testAccessingCancelledResponseRaisesException()
+    {
+        $f = new RingFuture(function () {});
+        $f->cancel();
+        $f['status'];
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testValidatesDerefFunction()
+    {
+        $f = new RingFuture(function () {
+            return 'foo!';
+        });
+        $f->deref();
+    }
+}
diff --git a/core/vendor/guzzlehttp/ring/tests/bootstrap.php b/core/vendor/guzzlehttp/ring/tests/bootstrap.php
new file mode 100644
index 0000000..017610f
--- /dev/null
+++ b/core/vendor/guzzlehttp/ring/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?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/.travis.yml b/core/vendor/guzzlehttp/streams/.travis.yml
index 4355f26..a6f8a87 100644
--- a/core/vendor/guzzlehttp/streams/.travis.yml
+++ b/core/vendor/guzzlehttp/streams/.travis.yml
@@ -11,3 +11,7 @@ before_script:
   - 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
index 8f0116b..174d19f 100644
--- a/core/vendor/guzzlehttp/streams/CHANGELOG.rst
+++ b/core/vendor/guzzlehttp/streams/CHANGELOG.rst
@@ -2,6 +2,55 @@
 Changelog
 =========
 
+3.0.0 (TBD)
+-----------
+
+* Move ``GuzzleHttp\Stream\MetadataStreamInterface::getMetadata`` to
+  ``GuzzleHttp\Stream\StreamInterface``. MetadataStreamInterface is no longer
+  used and is marked as deprecated.
+* Added ``isDetached()`` to ``GuzzleHttp\Stream\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.
+* Only calling ``fflush()`` on writable streams.
+* 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)
 ------------------
 
diff --git a/core/vendor/guzzlehttp/streams/README.rst b/core/vendor/guzzlehttp/streams/README.rst
index 0ff85dd..be6a7f1 100644
--- a/core/vendor/guzzlehttp/streams/README.rst
+++ b/core/vendor/guzzlehttp/streams/README.rst
@@ -4,8 +4,7 @@ Guzzle Streams
 
 Provides a simple abstraction over streams of data.
 
-This library is used in `Guzzle 4 <https://github.com/guzzle/guzzle>`_ and is
-an implementation of the proposed `PSR-7 stream interface <https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md#34-psrhttpstreaminterface>`_.
+This library is used in `Guzzle 4 <https://github.com/guzzle/guzzle>`_.
 
 Installation
 ============
@@ -17,7 +16,7 @@ Simply add the following to the composer.json file at the root of your project:
 
     {
       "require": {
-        "guzzlehttp/streams": "~1.0"
+        "guzzlehttp/streams": "~3.0"
       }
     }
 
diff --git a/core/vendor/guzzlehttp/streams/composer.json b/core/vendor/guzzlehttp/streams/composer.json
index cf3825f..217f3f4 100644
--- a/core/vendor/guzzlehttp/streams/composer.json
+++ b/core/vendor/guzzlehttp/streams/composer.json
@@ -23,7 +23,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "1.5-dev"
+            "dev-master": "3.0-dev"
         }
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/phpunit.xml.dist b/core/vendor/guzzlehttp/streams/phpunit.xml.dist
index 994e158..6e758c1 100644
--- a/core/vendor/guzzlehttp/streams/phpunit.xml.dist
+++ b/core/vendor/guzzlehttp/streams/phpunit.xml.dist
@@ -9,6 +9,9 @@
     <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/AppendStream.php b/core/vendor/guzzlehttp/streams/src/AppendStream.php
index 406b3ad..cb2478d 100644
--- a/core/vendor/guzzlehttp/streams/src/AppendStream.php
+++ b/core/vendor/guzzlehttp/streams/src/AppendStream.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
@@ -15,6 +14,7 @@ class AppendStream implements StreamInterface
     private $seekable = true;
     private $current = 0;
     private $pos = 0;
+    private $detached = false;
 
     /**
      * @param StreamInterface[] $streams Streams to decorate. Each stream must
@@ -58,9 +58,9 @@ public function addStream(StreamInterface $stream)
         $this->streams[] = $stream;
     }
 
-    public function getContents($maxLength = -1)
+    public function getContents()
     {
-        return copy_to_string($this, $maxLength);
+        return Utils::copyToString($this);
     }
 
     /**
@@ -87,6 +87,12 @@ public function close()
     public function detach()
     {
         $this->close();
+        $this->detached = true;
+    }
+
+    public function isDetached()
+    {
+        return $this->detached;
     }
 
     public function tell()
@@ -204,4 +210,14 @@ public function write($string)
     {
         return false;
     }
+
+    public function flush()
+    {
+        return false;
+    }
+
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php b/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php
new file mode 100644
index 0000000..f3a6f14
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/AsyncReadStream.php
@@ -0,0 +1,207 @@
+<?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 && !$this->isDetached()) {
+            $pumpFn = $this->pump;
+            $result .= $pumpFn($length - $resultLen);
+        }
+
+        return $result;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/BufferStream.php b/core/vendor/guzzlehttp/streams/src/BufferStream.php
new file mode 100644
index 0000000..050dc8e
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/BufferStream.php
@@ -0,0 +1,159 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * 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.
+ *
+ * @package GuzzleHttp\Stream
+ */
+class BufferStream implements StreamInterface
+{
+    private $hwm;
+    private $buffer = '';
+    private $detached = false;
+
+    /**
+     * @param int $hwm High water mark, representing the preferred maximum
+     *                 buffer size. If the size of the buffer exceeds the high
+     *                 water mark, then calls to write will continue to succeed
+     *                 but will return false to inform writers to slow down
+     *                 until the buffer has been drained by reading from it.
+     */
+    public function __construct($hwm = 16384)
+    {
+        $this->hwm = $hwm;
+    }
+
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    public function __toString()
+    {
+        return $this->getContents();
+    }
+
+    public function getContents()
+    {
+        $buffer = $this->detached ? '' : $this->buffer;
+        $this->buffer = '';
+
+        return $buffer;
+    }
+
+    public function close()
+    {
+        $this->detached = true;
+        $this->pos = 0;
+        $this->buffer = '';
+    }
+
+    public function detach()
+    {
+        $this->close();
+    }
+
+    public function isDetached()
+    {
+        return $this->detached;
+    }
+
+    public function getSize()
+    {
+        return strlen($this->buffer);
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function isWritable()
+    {
+        return true;
+    }
+
+    public function isSeekable()
+    {
+        return false;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function eof()
+    {
+        return strlen($this->buffer) === 0;
+    }
+
+    public function tell()
+    {
+        return false;
+    }
+
+    /**
+     * Reads data from the buffer.
+     */
+    public function read($length)
+    {
+        if ($this->detached) {
+            return false;
+        }
+
+        $currentLength = strlen($this->buffer);
+
+        if ($length >= $currentLength) {
+            // No need to slice the buffer because we don't have enough data.
+            $result = $this->buffer;
+            $this->buffer = '';
+        } else {
+            // Slice up the result to provide a subset of the buffer.
+            $result = substr($this->buffer, 0, $length);
+            $this->buffer = substr($this->buffer, $length);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Writes data to the buffer.
+     */
+    public function write($string)
+    {
+        if ($this->detached) {
+            return false;
+        }
+
+        $this->buffer .= $string;
+
+        if (strlen($this->buffer) >= $this->hwm) {
+            return false;
+        }
+
+        return strlen($string);
+    }
+
+    public function flush()
+    {
+        return false;
+    }
+
+    public function getMetadata($key = null)
+    {
+        if ($key == 'hwm') {
+            return $this->hwm;
+        } elseif ($key) {
+            return null;
+        } else {
+            return [];
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/CachingStream.php b/core/vendor/guzzlehttp/streams/src/CachingStream.php
index 2d891b8..60bb905 100644
--- a/core/vendor/guzzlehttp/streams/src/CachingStream.php
+++ b/core/vendor/guzzlehttp/streams/src/CachingStream.php
@@ -1,12 +1,13 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
+use GuzzleHttp\Stream\Exception\SeekException;
+
 /**
  * Stream decorator that can cache previously read bytes from a sequentially
  * read stream.
  */
-class CachingStream implements StreamInterface, MetadataStreamInterface
+class CachingStream implements StreamInterface
 {
     use StreamDecoratorTrait;
 
@@ -37,7 +38,7 @@ public function getSize()
 
     /**
      * {@inheritdoc}
-     * @throws \RuntimeException When seeking with SEEK_END or when seeking
+     * @throws SeekException When seeking with SEEK_END or when seeking
      *     past the total size of the buffer stream
      */
     public function seek($offset, $whence = SEEK_SET)
@@ -52,9 +53,12 @@ public function seek($offset, $whence = SEEK_SET)
 
         // You cannot skip ahead past where you've read from the remote stream
         if ($byte > $this->stream->getSize()) {
-            throw new \RuntimeException(sprintf('Cannot seek to byte %d when '
-                . ' the buffered stream only contains %d bytes',
-                $byte, $this->stream->getSize()));
+            throw new SeekException(
+                $this,
+                $byte,
+                sprintf('Cannot seek to byte %d when the buffered stream only'
+                    . ' contains %d bytes', $byte, $this->stream->getSize())
+            );
         }
 
         return $this->stream->seek($byte);
diff --git a/core/vendor/guzzlehttp/streams/src/DroppingStream.php b/core/vendor/guzzlehttp/streams/src/DroppingStream.php
new file mode 100644
index 0000000..56ee80c
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/DroppingStream.php
@@ -0,0 +1,42 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Stream decorator that begins dropping data once the size of the underlying
+ * stream becomes too full.
+ */
+class DroppingStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    private $maxLength;
+
+    /**
+     * @param StreamInterface $stream    Underlying stream to decorate.
+     * @param int             $maxLength Maximum size before dropping data.
+     */
+    public function __construct(StreamInterface $stream, $maxLength)
+    {
+        $this->stream = $stream;
+        $this->maxLength = $maxLength;
+    }
+
+    public function write($string)
+    {
+        $diff = $this->maxLength - $this->stream->getSize();
+
+        // Begin returning false when the underlying stream is too large.
+        if ($diff <= 0) {
+            return false;
+        }
+
+        // Write the stream or a subset of the stream if needed.
+        if (strlen($string) < $diff) {
+            return $this->stream->write($string);
+        }
+
+        $this->stream->write(substr($string, 0, $diff));
+
+        return false;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php b/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php
new file mode 100644
index 0000000..3f6d5eb
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/Exception/SeekException.php
@@ -0,0 +1,27 @@
+<?php
+namespace GuzzleHttp\Stream\Exception;
+
+use GuzzleHttp\Stream\StreamInterface;
+
+/**
+ * Exception thrown when a seek fails on a stream.
+ */
+class SeekException extends \RuntimeException
+{
+    private $stream;
+
+    public function __construct(StreamInterface $stream, $pos = 0, $msg = '')
+    {
+        $this->stream = $stream;
+        $msg = $msg ?: 'Could not seek the stream to position ' . $pos;
+        parent::__construct($msg);
+    }
+
+    /**
+     * @return StreamInterface
+     */
+    public function getStream()
+    {
+        return $this->stream;
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/FnStream.php b/core/vendor/guzzlehttp/streams/src/FnStream.php
new file mode 100644
index 0000000..11d75aa
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/FnStream.php
@@ -0,0 +1,152 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Compose stream implementations based on a hash of functions.
+ *
+ * Allows for easy testing and extension of a provided stream without needing
+ * to create a concrete class for a simple extension point.
+ */
+class FnStream implements StreamInterface
+{
+    /** @var array */
+    private $methods;
+
+    /** @var array Methods that must be implemented in the given array */
+    private static $slots = ['__toString', 'close', 'detach', 'isDetached',
+        'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
+        'flush', 'isReadable', 'read', 'getContents', 'getMetadata'];
+
+    /**
+     * @param array $methods Hash of method name to a callable.
+     */
+    public function __construct(array $methods)
+    {
+        $this->methods = $methods;
+
+        // Create the functions on the class
+        foreach ($methods as $name => $fn) {
+            $this->{'_fn_' . $name} = $fn;
+        }
+    }
+
+    /**
+     * Lazily determine which methods are not implemented.
+     * @throws \BadMethodCallException
+     */
+    public function __get($name)
+    {
+        throw new \BadMethodCallException(str_replace('_fn_', '', $name)
+            . '() is not implemented in the FnStream');
+    }
+
+    /**
+     * The close method is called on the underlying stream only if possible.
+     */
+    public function __destruct()
+    {
+        if (isset($this->_fn_close)) {
+            call_user_func($this->_fn_close);
+        }
+    }
+
+    /**
+     * Adds custom functionality to an underlying stream by intercepting
+     * specific method calls.
+     *
+     * @param StreamInterface $stream  Stream to decorate
+     * @param array           $methods Hash of method name to a closure
+     *
+     * @return FnStream
+     */
+    public static function decorate(StreamInterface $stream, array $methods)
+    {
+        // If any of the required methods were not provided, then simply
+        // proxy to the decorated stream.
+        foreach (array_diff(self::$slots, array_keys($methods)) as $diff) {
+            $methods[$diff] = [$stream, $diff];
+        }
+
+        return new self($methods);
+    }
+
+    public function __toString()
+    {
+        return call_user_func($this->_fn___toString);
+    }
+
+    public function close()
+    {
+        return call_user_func($this->_fn_close);
+    }
+
+    public function detach()
+    {
+        return call_user_func($this->_fn_detach);
+    }
+
+    public function isDetached()
+    {
+        return call_user_func($this->_fn_isDetached);
+    }
+
+    public function getSize()
+    {
+        return call_user_func($this->_fn_getSize);
+    }
+
+    public function tell()
+    {
+        return call_user_func($this->_fn_tell);
+    }
+
+    public function eof()
+    {
+        return call_user_func($this->_fn_eof);
+    }
+
+    public function isSeekable()
+    {
+        return call_user_func($this->_fn_isSeekable);
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return call_user_func($this->_fn_seek, $offset, $whence);
+    }
+
+    public function isWritable()
+    {
+        return call_user_func($this->_fn_isWritable);
+    }
+
+    public function write($string)
+    {
+        return call_user_func($this->_fn_write, $string);
+    }
+
+    public function flush()
+    {
+        return call_user_func($this->_fn_flush);
+    }
+
+    public function isReadable()
+    {
+        return call_user_func($this->_fn_isReadable);
+    }
+
+    public function read($length)
+    {
+        return call_user_func($this->_fn_read, $length);
+    }
+
+    public function getContents()
+    {
+        return call_user_func($this->_fn_getContents);
+    }
+
+    public function getMetadata($key = null)
+    {
+        return call_user_func($this->_fn_getMetadata, $key);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php b/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
index 9f5a826..5ff53b9 100644
--- a/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
+++ b/core/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
@@ -26,9 +25,7 @@ class GuzzleStreamWrapper
      */
     public static function getResource(StreamInterface $stream)
     {
-        if (!in_array('guzzle', stream_get_wrappers())) {
-            stream_wrapper_register('guzzle', __CLASS__);
-        }
+        self::register();
 
         if ($stream->isReadable()) {
             $mode = $stream->isWritable() ? 'r+' : 'r';
@@ -44,6 +41,16 @@ public static function getResource(StreamInterface $stream)
         ]));
     }
 
+    /**
+     * Registers the stream wrapper if needed
+     */
+    public static function register()
+    {
+        if (!in_array('guzzle', stream_get_wrappers())) {
+            stream_wrapper_register('guzzle', __CLASS__);
+        }
+    }
+
     public function stream_open($path, $mode, $options, &$opened_path)
     {
         $options = stream_context_get_options($this->context);
@@ -78,6 +85,11 @@ public function stream_eof()
         return $this->stream->eof();
     }
 
+    public function stream_flush()
+    {
+        return $this->stream->flush();
+    }
+
     public function stream_seek($offset, $whence)
     {
         return $this->stream->seek($offset, $whence);
diff --git a/core/vendor/guzzlehttp/streams/src/InflateStream.php b/core/vendor/guzzlehttp/streams/src/InflateStream.php
new file mode 100644
index 0000000..978af21
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/InflateStream.php
@@ -0,0 +1,27 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * 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.
+ *
+ * @link http://tools.ietf.org/html/rfc1952
+ * @link http://php.net/manual/en/filters.compression.php
+ */
+class InflateStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    public function __construct(StreamInterface $stream)
+    {
+        // Skip the first 10 bytes
+        $stream = new LimitStream($stream, -1, 10);
+        $resource = GuzzleStreamWrapper::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/streams/src/LazyOpenStream.php
index 35f0df7..6242ee7 100644
--- a/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php
+++ b/core/vendor/guzzlehttp/streams/src/LazyOpenStream.php
@@ -5,17 +5,16 @@
  * Lazily reads or writes to a file that is opened only after an IO operation
  * take place on the stream.
  */
-class LazyOpenStream implements StreamInterface, MetadataStreamInterface
+class LazyOpenStream implements StreamInterface
 {
+    use StreamDecoratorTrait;
+
     /** @var string File to open */
     private $filename;
 
     /** @var string $mode */
     private $mode;
 
-    /** @var MetadataStreamInterface */
-    private $stream;
-
     /**
      * @param string $filename File to lazily open
      * @param string $mode     fopen mode to use when opening the stream
@@ -26,92 +25,13 @@ public function __construct($filename, $mode)
         $this->mode = $mode;
     }
 
-    public function __toString()
-    {
-        try {
-            return (string) $this->getStream();
-        } catch (\Exception $e) {
-            return '';
-        }
-    }
-
-    private function getStream()
-    {
-        if (!$this->stream) {
-            $this->stream = create(safe_open($this->filename, $this->mode));
-        }
-
-        return $this->stream;
-    }
-
-    public function getContents($maxLength = -1)
-    {
-        return copy_to_string($this->getStream(), $maxLength);
-    }
-
-    public function close()
-    {
-        if ($this->stream) {
-            $this->stream->close();
-        }
-    }
-
-    public function detach()
-    {
-        $stream = $this->getStream();
-        $result = $stream->detach();
-        $this->close();
-
-        return $result;
-    }
-
-    public function tell()
-    {
-        return $this->stream ? $this->stream->tell() : 0;
-    }
-
-    public function getSize()
-    {
-        return $this->getStream()->getSize();
-    }
-
-    public function eof()
-    {
-        return $this->getStream()->eof();
-    }
-
-    public function seek($offset, $whence = SEEK_SET)
-    {
-        return $this->getStream()->seek($offset, $whence);
-    }
-
-    public function read($length)
-    {
-        return $this->getStream()->read($length);
-    }
-
-    public function isReadable()
-    {
-        return $this->getStream()->isReadable();
-    }
-
-    public function isWritable()
-    {
-        return $this->getStream()->isWritable();
-    }
-
-    public function isSeekable()
-    {
-        return $this->getStream()->isSeekable();
-    }
-
-    public function write($string)
-    {
-        return $this->getStream()->write($string);
-    }
-
-    public function getMetadata($key = null)
+    /**
+     * Creates the underlying stream lazily when required.
+     *
+     * @return StreamInterface
+     */
+    protected function createStream()
     {
-        return $this->getStream()->getMetadata($key);
+        return Stream::factory(Utils::open($this->filename, $this->mode));
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/LimitStream.php b/core/vendor/guzzlehttp/streams/src/LimitStream.php
index 63345ba..e9fad98 100644
--- a/core/vendor/guzzlehttp/streams/src/LimitStream.php
+++ b/core/vendor/guzzlehttp/streams/src/LimitStream.php
@@ -1,11 +1,12 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
+use GuzzleHttp\Stream\Exception\SeekException;
+
 /**
  * Decorator used to return only a subset of a stream
  */
-class LimitStream implements StreamInterface, MetadataStreamInterface
+class LimitStream implements StreamInterface
 {
     use StreamDecoratorTrait;
 
@@ -34,15 +35,22 @@ public function __construct(
 
     public function eof()
     {
+        // Always return true if the underlying stream is EOF
+        if ($this->stream->eof()) {
+            return true;
+        }
+
+        // No limit and the underlying stream is not at EOF
         if ($this->limit == -1) {
-            return $this->stream->eof();
+            return false;
         }
 
         $tell = $this->stream->tell();
+        if ($tell === false) {
+            return false;
+        }
 
-        return $tell === false ||
-            ($tell >= $this->offset + $this->limit) ||
-            $this->stream->eof();
+        return $tell >= $this->offset + $this->limit;
     }
 
     /**
@@ -66,16 +74,16 @@ public function getSize()
      */
     public function seek($offset, $whence = SEEK_SET)
     {
-        if ($whence != SEEK_SET) {
+        if ($whence !== SEEK_SET || $offset < 0) {
             return false;
         }
 
-        if ($offset < $this->offset) {
-            $offset = $this->offset;
-        }
+        $offset += $this->offset;
 
-        if ($this->limit !== -1 && $offset > ($this->offset + $this->limit)) {
-            $offset = $this->offset + $this->limit;
+        if ($this->limit !== -1) {
+            if ($offset > $this->offset + $this->limit) {
+                $offset = $this->offset + $this->limit;
+            }
         }
 
         return $this->stream->seek($offset);
@@ -96,23 +104,25 @@ public function tell()
      * @param int $offset Offset to seek to and begin byte limiting from
      *
      * @return self
-     * @throws \RuntimeException
+     * @throws SeekException
      */
     public function setOffset($offset)
     {
-        $this->offset = $offset;
         $current = $this->stream->tell();
+
         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 \RuntimeException("Cannot seek to stream offset {$offset}");
+                    throw new SeekException($this, $offset);
                 } else {
                     $this->stream->read($offset - $current);
                 }
             }
         }
 
+        $this->offset = $offset;
+
         return $this;
     }
 
diff --git a/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php b/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
index 3cd96d6..c1433ad 100644
--- a/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
+++ b/core/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
@@ -1,25 +1,11 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
- * Represents a stream that contains metadata
+ * 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
-{
-    /**
-     * 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);
-}
+interface MetadataStreamInterface extends StreamInterface {}
diff --git a/core/vendor/guzzlehttp/streams/src/NoSeekStream.php b/core/vendor/guzzlehttp/streams/src/NoSeekStream.php
index 7d02fc3..29406d7 100644
--- a/core/vendor/guzzlehttp/streams/src/NoSeekStream.php
+++ b/core/vendor/guzzlehttp/streams/src/NoSeekStream.php
@@ -1,11 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
  * Stream decorator that prevents a stream from being seeked
  */
-class NoSeekStream implements StreamInterface, MetadataStreamInterface
+class NoSeekStream implements StreamInterface
 {
     use StreamDecoratorTrait;
 
diff --git a/core/vendor/guzzlehttp/streams/src/NullStream.php b/core/vendor/guzzlehttp/streams/src/NullStream.php
new file mode 100644
index 0000000..01cb0a6
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/NullStream.php
@@ -0,0 +1,86 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Does not store any data written to it.
+ */
+class NullStream implements StreamInterface
+{
+    private $detached = false;
+
+    public function __toString()
+    {
+        return '';
+    }
+
+    public function getContents()
+    {
+        return '';
+    }
+
+    public function close() {}
+
+    public function detach() {
+        $this->detached = true;
+    }
+
+    public function isDetached()
+    {
+        return $this->detached;
+    }
+
+    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 flush()
+    {
+        return false;
+    }
+
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/PumpStream.php b/core/vendor/guzzlehttp/streams/src/PumpStream.php
new file mode 100644
index 0000000..7b48460
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/src/PumpStream.php
@@ -0,0 +1,164 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * 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.
+ */
+class PumpStream implements StreamInterface
+{
+    /** @var callable */
+    private $source;
+
+    /** @var int */
+    private $size;
+
+    /** @var int */
+    private $tellPos = 0;
+
+    /** @var array */
+    private $metadata;
+
+    /** @var BufferStream */
+    private $buffer;
+
+    /**
+     * @param callable $source Source of the stream data. The callable MAY
+     *                         accept an integer argument used to control the
+     *                         amount of data to return. The callable MUST
+     *                         return a string when called, or false on error
+     *                         or EOF.
+     * @param array $options   Stream options:
+     *                         - metadata: Hash of metadata to use with stream.
+     *                         - size: Size of the stream, if known.
+     */
+    public function __construct(callable $source, array $options = [])
+    {
+        $this->source = $source;
+        $this->size = isset($options['size']) ? $options['size'] : null;
+        $this->metadata = isset($options['metadata']) ? $options['metadata'] : [];
+        $this->buffer = new BufferStream();
+    }
+
+    public function __toString()
+    {
+        return Utils::copyToString($this);
+    }
+
+    public function close()
+    {
+        $this->detach();
+    }
+
+    public function detach()
+    {
+        $this->tellPos = false;
+        $this->source = null;
+    }
+
+    public function isDetached()
+    {
+        return !$this->source;
+    }
+
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    public function tell()
+    {
+        return $this->tellPos;
+    }
+
+    public function eof()
+    {
+        return !$this->source;
+    }
+
+    public function isSeekable()
+    {
+        return false;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function isWritable()
+    {
+        return false;
+    }
+
+    public function write($string)
+    {
+        return false;
+    }
+
+    public function flush()
+    {
+        return false;
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function read($length)
+    {
+        $data = $this->buffer->read($length);
+        $readLen = strlen($data);
+        $this->tellPos += $readLen;
+        $remaining = $length - $readLen;
+
+        if ($remaining) {
+            $this->pump($remaining);
+            $data .= $this->buffer->read($remaining);
+            $this->tellPos += strlen($data) - $readLen;
+        }
+
+        return $data;
+    }
+
+    public function getContents()
+    {
+        $result = '';
+        while (!$this->eof()) {
+            $result .= $this->read(1000000);
+        }
+
+        return $result;
+    }
+
+    public function getMetadata($key = null)
+    {
+        if (!$key) {
+            return $this->metadata;
+        }
+
+        return isset($this->metadata[$key]) ? $this->metadata[$key] : null;
+    }
+
+    private function pump($length)
+    {
+        if ($this->source) {
+            do {
+                $data = call_user_func($this->source, $length);
+                if ($data === false || $data === null) {
+                    $this->source = null;
+                    return;
+                }
+                $this->buffer->write($data);
+                $length -= strlen($data);
+            } while ($length > 0);
+        }
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/src/Stream.php b/core/vendor/guzzlehttp/streams/src/Stream.php
index 0ff006e..dcf63e8 100644
--- a/core/vendor/guzzlehttp/streams/src/Stream.php
+++ b/core/vendor/guzzlehttp/streams/src/Stream.php
@@ -1,11 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
  * PHP stream implementation
  */
-class Stream implements MetadataStreamInterface
+class Stream implements StreamInterface
 {
     private $stream;
     private $size;
@@ -13,6 +12,7 @@ class Stream implements MetadataStreamInterface
     private $readable;
     private $writable;
     private $uri;
+    private $customMetadata;
 
     /** @var array Hash of readable and writable stream types */
     private static $readWriteHash = [
@@ -31,39 +31,95 @@ class Stream implements MetadataStreamInterface
     ];
 
     /**
-     * Create a new stream based on the input type
+     * 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 int                             $size     Size of the data contained in the resource
+     * @param array                           $options  Additional options
      *
-     * @return StreamInterface
+     * @return Stream
      * @throws \InvalidArgumentException if the $resource arg is not valid.
      */
-    public static function factory($resource = '', $size = null)
+    public static function factory($resource = '', array $options = [])
     {
-        return create($resource, $size);
+        $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);
     }
 
     /**
-     * @param resource $stream Stream resource to wrap
-     * @param int      $size   Size of the stream in bytes. Only pass if the
-     *                         size cannot be obtained from the stream.
+     * This constructor accepts an associative array of options.
+     *
+     * - size: (int) If a read stream would otherwise have an indeterminate
+     *   size, but the size is known due to foreknownledge, then you can
+     *   provide that size, in bytes.
+     * - metadata: (array) Any additional metadata to return when the metadata
+     *   of the stream is accessed.
+     *
+     * @param resource $stream  Stream resource to wrap.
+     * @param array    $options Associative array of options.
      *
      * @throws \InvalidArgumentException if the stream is not a stream resource
      */
-    public function __construct($stream, $size = null)
+    public function __construct($stream, $options = [])
     {
         if (!is_resource($stream)) {
             throw new \InvalidArgumentException('Stream must be a resource');
         }
 
-        $this->size = $size;
         $this->stream = $stream;
+
+        if (isset($options['size'])) {
+            $this->size = $options['size'];
+        }
+
+        $this->customMetadata = isset($options['metadata'])
+            ? $options['metadata']
+            : [];
+
         $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 = isset($meta['uri']) ? $meta['uri'] : null;
+        $this->uri = $this->getMetadata('uri');
     }
 
     /**
@@ -85,11 +141,9 @@ public function __toString()
         return (string) stream_get_contents($this->stream);
     }
 
-    public function getContents($maxLength = -1)
+    public function getContents()
     {
-        return $this->stream
-            ? stream_get_contents($this->stream, $maxLength)
-            : '';
+        return $this->stream ? stream_get_contents($this->stream) : '';
     }
 
     public function close()
@@ -110,6 +164,11 @@ public function detach()
         return $result;
     }
 
+    public function isDetached()
+    {
+        return $this->stream === null;
+    }
+
     public function getSize()
     {
         if ($this->size !== null) {
@@ -151,7 +210,7 @@ public function isSeekable()
 
     public function eof()
     {
-        return $this->stream && feof($this->stream);
+        return !$this->stream || feof($this->stream);
     }
 
     public function tell()
@@ -175,7 +234,7 @@ public function seek($offset, $whence = SEEK_SET)
 
     public function read($length)
     {
-        return $this->readable ? fread($this->stream, $length) : '';
+        return $this->readable ? fread($this->stream, $length) : false;
     }
 
     public function write($string)
@@ -186,24 +245,25 @@ public function write($string)
         return $this->writable ? fwrite($this->stream, $string) : false;
     }
 
-    /**
-     * 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 flush()
+    {
+        return $this->stream && $this->writable
+            ? fflush($this->stream)
+            : false;
+    }
+
     public function getMetadata($key = null)
     {
-        $meta = $this->stream ? stream_get_meta_data($this->stream) : [];
+        if (!$this->stream) {
+            return $key ? null : [];
+        } elseif (!$key) {
+            return $this->customMetadata + stream_get_meta_data($this->stream);
+        } elseif (isset($this->customMetadata[$key])) {
+            return $this->customMetadata[$key];
+        }
+
+        $meta = stream_get_meta_data($this->stream);
 
-        return !$key ? $meta : (isset($meta[$key]) ? $meta[$key] : null);
+        return isset($meta[$key]) ? $meta[$key] : null;
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php b/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
index ecb902a..e036a1b 100644
--- a/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
+++ b/core/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
@@ -1,15 +1,12 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
  * Stream decorator trait
+ * @property StreamInterface stream
  */
 trait StreamDecoratorTrait
 {
-    /** @var StreamInterface Decorated stream */
-    private $stream;
-
     /**
      * @param StreamInterface $stream Stream to decorate
      */
@@ -18,6 +15,20 @@ public function __construct(StreamInterface $stream)
         $this->stream = $stream;
     }
 
+    /**
+     * Magic method used to create a new stream if streams are not added in
+     * the constructor of a decorator (e.g., LazyOpenStream).
+     */
+    public function __get($name)
+    {
+        if ($name == 'stream') {
+            $this->stream = $this->createStream();
+            return $this->stream;
+        }
+
+        throw new \UnexpectedValueException("$name not found on class");
+    }
+
     public function __toString()
     {
         try {
@@ -31,9 +42,9 @@ public function __toString()
         }
     }
 
-    public function getContents($maxLength = -1)
+    public function getContents()
     {
-        return copy_to_string($this, $maxLength);
+        return Utils::copyToString($this);
     }
 
     /**
@@ -52,16 +63,20 @@ public function __call($method, array $args)
         return $result === $this->stream ? $this : $result;
     }
 
+    /**
+     * Calls flush() and closes the underlying stream.
+     */
     public function close()
     {
+        // Allow the decorated stream to flush any buffered content on close.
+        $this->flush();
+        // Close the decorated stream.
         $this->stream->close();
     }
 
     public function getMetadata($key = null)
     {
-        return $this->stream instanceof MetadataStreamInterface
-            ? $this->stream->getMetadata($key)
-            : null;
+        return $this->stream->getMetadata($key);
     }
 
     public function detach()
@@ -69,6 +84,11 @@ public function detach()
         return $this->stream->detach();
     }
 
+    public function isDetached()
+    {
+        return $this->stream->isDetached();
+    }
+
     public function getSize()
     {
         return $this->stream->getSize();
@@ -99,8 +119,18 @@ public function isSeekable()
         return $this->stream->isSeekable();
     }
 
+    /**
+     * Calls flush() and seeks to the specified position in the stream.
+     *
+     * {@inheritdoc}
+     */
     public function seek($offset, $whence = SEEK_SET)
     {
+        // Flush the stream before seeking to allow decorators to flush their
+        // state before losing their position in the stream.
+        // see: https://github.com/php/php-src/blob/8b66d64b2343bc4fd8aeabb690024edb850a0155/main/streams/streams.c#L1312
+        $this->flush();
+
         return $this->stream->seek($offset, $whence);
     }
 
@@ -113,4 +143,21 @@ public function write($string)
     {
         return $this->stream->write($string);
     }
+
+    public function flush()
+    {
+        return $this->stream->flush();
+    }
+
+    /**
+     * Implement in subclasses to dynamically create streams when requested.
+     *
+     * @return StreamInterface
+     * @throws \BadMethodCallException
+     */
+    protected function createStream()
+    {
+        throw new \BadMethodCallException('createStream() not implemented in '
+            . get_class($this));
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/StreamInterface.php b/core/vendor/guzzlehttp/streams/src/StreamInterface.php
index b6b0425..4e9ec8a 100644
--- a/core/vendor/guzzlehttp/streams/src/StreamInterface.php
+++ b/core/vendor/guzzlehttp/streams/src/StreamInterface.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Stream;
 
 /**
@@ -37,6 +36,15 @@ public function close();
     public function detach();
 
     /**
+     * Returns whether or not the stream is detached.
+     *
+     * Detached streams are no longer usable and have likely been closed.
+     *
+     * @return bool
+     */
+    public function isDetached();
+
+    /**
      * Get the size of the stream if known
      *
      * @return int|null Returns the size in bytes if known, or null if unknown
@@ -93,11 +101,19 @@ public function isWritable();
      * @param string $string The string that is to be written.
      *
      * @return int|bool Returns the number of bytes written to the stream on
-     *                  success or false on failure.
+     *                  success returns false on failure (e.g., broken pipe,
+     *                  writer needs to slow down, buffer is full, etc.)
      */
     public function write($string);
 
     /**
+     * Flush the write buffers of the stream.
+     *
+     * @return bool Returns true on success and false on failure
+     */
+    public function flush();
+
+    /**
      * Returns whether or not the stream is readable
      *
      * @return bool
@@ -116,11 +132,27 @@ public function isReadable();
     public function read($length);
 
     /**
-     * Returns the remaining contents in a string, up to maxlength bytes.
+     * Returns the remaining contents of the stream as a string.
+     *
+     * Note: this could potentially load a large amount of data into memory.
      *
-     * @param int $maxLength The maximum bytes to read. Defaults to -1 (read
-     *                       all the remaining buffer).
      * @return string
      */
-    public function getContents($maxLength = -1);
+    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/functions.php b/core/vendor/guzzlehttp/streams/src/Utils.php
similarity index 69%
copy from core/vendor/guzzlehttp/streams/src/functions.php
copy to core/vendor/guzzlehttp/streams/src/Utils.php
index 372d51b..94cb42d 100644
--- a/core/vendor/guzzlehttp/streams/src/functions.php
+++ b/core/vendor/guzzlehttp/streams/src/Utils.php
@@ -1,45 +1,47 @@
 <?php
 namespace GuzzleHttp\Stream;
 
-if (!defined('GUZZLE_STREAMS_FUNCTIONS')) {
-
-    define('GUZZLE_STREAMS_FUNCTIONS', true);
-
+use GuzzleHttp\Stream\Exception\SeekException;
+
+/**
+ * Static utility class because PHP's autoloaders don't support the concept
+ * of namespaced function autoloading.
+ */
+class Utils
+{
     /**
-     * Create a new stream based on the input type
+     * Safely opens a PHP stream resource using a filename.
      *
-     * @param resource|string|StreamInterface $resource Entity body data
-     * @param int $size Size of the data contained in the resource
+     * When fopen fails, PHP normally raises a warning. This function adds an
+     * error handler that checks for errors and throws an exception instead.
      *
-     * @return StreamInterface
-     * @throws \InvalidArgumentException if the $resource arg is not valid.
+     * @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 create($resource = '', $size = null)
+    public static function open($filename, $mode)
     {
-        $type = gettype($resource);
-
-        if ($type == 'string') {
-            $stream = fopen('php://temp', 'r+');
-            if ($resource !== '') {
-                fwrite($stream, $resource);
-                fseek($stream, 0);
-            }
-            return new Stream($stream);
-        }
-
-        if ($type == 'resource') {
-            return new Stream($resource, $size);
-        }
+        $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]
+            ));
+        });
 
-        if ($resource instanceof StreamInterface) {
-            return $resource;
-        }
+        $handle = fopen($filename, $mode);
+        restore_error_handler();
 
-        if ($type == 'object' && method_exists($resource, '__toString')) {
-            return create((string) $resource, $size);
+        if ($ex) {
+            /** @var $ex \RuntimeException */
+            throw $ex;
         }
 
-        throw new \InvalidArgumentException('Invalid resource type: ' . $type);
+        return $handle;
     }
 
     /**
@@ -51,28 +53,29 @@ function create($resource = '', $size = null)
      *                                to read the entire stream.
      * @return string
      */
-    function copy_to_string(StreamInterface $stream, $maxLen = -1)
+    public static function copyToString(StreamInterface $stream, $maxLen = -1)
     {
         $buffer = '';
 
         if ($maxLen === -1) {
             while (!$stream->eof()) {
                 $buf = $stream->read(1048576);
-                if ($buf === '' || $buf === false) {
+                if ($buf === false) {
                     break;
                 }
                 $buffer .= $buf;
             }
-        } else {
-            $len = 0;
-            while (!$stream->eof() && $len < $maxLen) {
-                $buf = $stream->read($maxLen - $len);
-                if ($buf === '' || $buf === false) {
-                    break;
-                }
-                $buffer .= $buf;
-                $len = strlen($buffer);
+            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;
@@ -87,7 +90,7 @@ function copy_to_string(StreamInterface $stream, $maxLen = -1)
      * @param int             $maxLen Maximum number of bytes to read. Pass -1
      *                                to read the entire stream.
      */
-    function copy_to_stream(
+    public static function copyToStream(
         StreamInterface $source,
         StreamInterface $dest,
         $maxLen = -1
@@ -122,16 +125,18 @@ function copy_to_stream(
      * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)
      * @param bool            $rawOutput Whether or not to use raw output
      *
-     * @return bool|string Returns false on failure or a hash string on success
+     * @return string Returns the hash of the stream
+     * @throws SeekException
      */
-    function hash(
+    public static function hash(
         StreamInterface $stream,
         $algo,
         $rawOutput = false
     ) {
         $pos = $stream->tell();
-        if (!$stream->seek(0)) {
-            return false;
+
+        if ($pos > 0 && !$stream->seek(0)) {
+            throw new SeekException($stream);
         }
 
         $ctx = hash_init($algo);
@@ -153,7 +158,7 @@ function hash(
      *
      * @return string|bool
      */
-    function read_line(StreamInterface $stream, $maxLength = null)
+    public static function readline(StreamInterface $stream, $maxLength = null)
     {
         $buffer = '';
         $size = 0;
@@ -173,37 +178,19 @@ function read_line(StreamInterface $stream, $maxLength = null)
     }
 
     /**
-     * Safely opens a PHP stream resource using a filename.
+     * Alias of GuzzleHttp\Stream\Stream::factory.
      *
-     * When fopen fails, PHP normally raises a warning. This function adds an
-     * error handler that checks for errors and throws an exception instead.
+     * @param mixed $resource Resource to create
+     * @param array $options  Associative array of stream options defined in
+     *                        {@see \GuzzleHttp\Stream\Stream::__construct}
      *
-     * @param string $filename File to open
-     * @param string $mode     Mode used to open the file
+     * @return StreamInterface
      *
-     * @return resource
-     * @throws \RuntimeException if the file cannot be opened
+     * @see GuzzleHttp\Stream\Stream::factory
+     * @see GuzzleHttp\Stream\Stream::__construct
      */
-    function safe_open($filename, $mode)
+    public static function create($resource, array $options = [])
     {
-        $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;
+        return Stream::factory($resource, $options);
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/src/functions.php b/core/vendor/guzzlehttp/streams/src/functions.php
index 372d51b..4f9db88 100644
--- a/core/vendor/guzzlehttp/streams/src/functions.php
+++ b/core/vendor/guzzlehttp/streams/src/functions.php
@@ -1,4 +1,11 @@
 <?php
+/*
+ * This file is deprecated and only included so that backwards compatibility
+ * is maintained for downstream packages.
+ *
+ * Use the functions available in the Utils class instead of the the below
+ * namespaced functions.
+ */
 namespace GuzzleHttp\Stream;
 
 if (!defined('GUZZLE_STREAMS_FUNCTIONS')) {
@@ -6,204 +13,56 @@
     define('GUZZLE_STREAMS_FUNCTIONS', true);
 
     /**
-     * Create a new stream based on the input type
-     *
-     * @param resource|string|StreamInterface $resource Entity body data
-     * @param int $size Size of the data contained in the resource
-     *
-     * @return StreamInterface
-     * @throws \InvalidArgumentException if the $resource arg is not valid.
+     * @deprecated Moved to Stream::factory
      */
     function create($resource = '', $size = null)
     {
-        $type = gettype($resource);
-
-        if ($type == 'string') {
-            $stream = fopen('php://temp', 'r+');
-            if ($resource !== '') {
-                fwrite($stream, $resource);
-                fseek($stream, 0);
-            }
-            return new Stream($stream);
-        }
-
-        if ($type == 'resource') {
-            return new Stream($resource, $size);
-        }
-
-        if ($resource instanceof StreamInterface) {
-            return $resource;
-        }
-
-        if ($type == 'object' && method_exists($resource, '__toString')) {
-            return create((string) $resource, $size);
-        }
-
-        throw new \InvalidArgumentException('Invalid resource type: ' . $type);
+        return Stream::factory($resource, $size);
     }
 
     /**
-     * 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
+     * @deprecated Moved to Utils::copyToString
      */
     function copy_to_string(StreamInterface $stream, $maxLen = -1)
     {
-        $buffer = '';
-
-        if ($maxLen === -1) {
-            while (!$stream->eof()) {
-                $buf = $stream->read(1048576);
-                if ($buf === '' || $buf === false) {
-                    break;
-                }
-                $buffer .= $buf;
-            }
-        } else {
-            $len = 0;
-            while (!$stream->eof() && $len < $maxLen) {
-                $buf = $stream->read($maxLen - $len);
-                if ($buf === '' || $buf === false) {
-                    break;
-                }
-                $buffer .= $buf;
-                $len = strlen($buffer);
-            }
-        }
-
-        return $buffer;
+        return Utils::copyToString($stream, $maxLen);
     }
 
     /**
-     * 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.
+     * @deprecated Moved to Utils::copyToStream
      */
     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;
-            }
-        }
+        Utils::copyToStream($source, $dest, $maxLen);
     }
 
     /**
-     * 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 bool|string Returns false on failure or a hash string on success
+     * @deprecated Moved to Utils::hash
      */
     function hash(
         StreamInterface $stream,
         $algo,
         $rawOutput = false
     ) {
-        $pos = $stream->tell();
-        if (!$stream->seek(0)) {
-            return false;
-        }
-
-        $ctx = hash_init($algo);
-        while (!$stream->eof()) {
-            hash_update($ctx, $stream->read(1048576));
-        }
-
-        $out = hash_final($ctx, (bool) $rawOutput);
-        $stream->seek($pos);
-
-        return $out;
+        return Utils::hash($stream, $algo, $rawOutput);
     }
 
     /**
-     * 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
+     * @deprecated Moced to Utils::readline
      */
     function read_line(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;
+        return Utils::readline($stream, $maxLength);
     }
 
     /**
-     * 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
+     * @deprecated Moved to Utils::open()
      */
     function safe_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;
+        return Utils::open($filename, $mode);
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php b/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
index 61aa5d4..15ba7aa 100644
--- a/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
@@ -153,4 +153,25 @@ public function testCatchesExceptionsWhenCastingToString()
         $this->assertFalse($a->eof());
         $this->assertSame('', (string) $a);
     }
+
+    public function testFlushReturnsFalse()
+    {
+        $s = new AppendStream();
+        $this->assertFalse($s->flush());
+    }
+
+    public function testCanDetach()
+    {
+        $s = new AppendStream();
+        $this->assertFalse($s->isDetached());
+        $s->detach();
+        $this->assertTrue($s->isDetached());
+    }
+
+    public function testReturnsEmptyMetadata()
+    {
+        $s = new AppendStream();
+        $this->assertEquals([], $s->getMetadata());
+        $this->assertNull($s->getMetadata('foo'));
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php b/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
new file mode 100644
index 0000000..8c78995
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
@@ -0,0 +1,186 @@
+<?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/BufferStreamTest.php b/core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
new file mode 100644
index 0000000..1d8b5ab
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
@@ -0,0 +1,62 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\BufferStream;
+
+class BufferStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasMetadata()
+    {
+        $b = new BufferStream(10);
+        $this->assertTrue($b->isReadable());
+        $this->assertTrue($b->isWritable());
+        $this->assertFalse($b->isSeekable());
+        $this->assertEquals(null, $b->getMetadata('foo'));
+        $this->assertEquals(10, $b->getMetadata('hwm'));
+        $this->assertEquals([], $b->getMetadata());
+    }
+
+    public function testRemovesReadDataFromBuffer()
+    {
+        $b = new BufferStream();
+        $this->assertEquals(3, $b->write('foo'));
+        $this->assertEquals(3, $b->getSize());
+        $this->assertFalse($b->eof());
+        $this->assertEquals('foo', $b->read(10));
+        $this->assertTrue($b->eof());
+        $this->assertEquals('', $b->read(10));
+    }
+
+    public function testCanCastToStringOrGetContents()
+    {
+        $b = new BufferStream();
+        $b->write('foo');
+        $b->write('baz');
+        $this->assertEquals('foo', $b->read(3));
+        $b->write('bar');
+        $this->assertEquals('bazbar', (string) $b);
+        $this->assertFalse($b->tell());
+    }
+
+    public function testCanDetach()
+    {
+        $b = new BufferStream();
+        $this->assertFalse($b->isDetached());
+        $b->write('foo');
+        $b->detach();
+        $this->assertEquals(0, $b->tell());
+        $this->assertTrue($b->isDetached());
+        $this->assertTrue($b->eof());
+        $this->assertFalse($b->write('abc'));
+        $this->assertFalse($b->read(10));
+    }
+
+    public function testExceedingHighwaterMarkReturnsFalseButStillBuffers()
+    {
+        $b = new BufferStream(5);
+        $this->assertEquals(3, $b->write('hi '));
+        $this->assertFalse($b->write('hello'));
+        $this->assertEquals('hi hello', (string) $b);
+        $this->assertEquals(4, $b->write('test'));
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php b/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
index d7f625f..ea969b3 100644
--- a/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
@@ -1,9 +1,9 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Stream\CachingStream;
+use GuzzleHttp\Stream\Utils;
 
 /**
  * @covers GuzzleHttp\Stream\CachingStream
@@ -89,32 +89,31 @@ public function testSkipsOverwrittenBytes()
         $decorated = Stream::factory(
             implode("\n", array_map(function ($n) {
                 return str_pad($n, 4, '0', STR_PAD_LEFT);
-            }, range(0, 25))),
-            true
+            }, range(0, 25)))
         );
 
         $body = new CachingStream($decorated);
 
-        $this->assertEquals("0000\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0001\n", \GuzzleHttp\Stream\read_line($body));
+        $this->assertEquals("0000\n", Utils::readline($body));
+        $this->assertEquals("0001\n", Utils::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", \GuzzleHttp\Stream\read_line($body));
+        $this->assertEquals("0003\n", Utils::readline($body));
         $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes'));
-        $this->assertEquals("0004\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0005\n", \GuzzleHttp\Stream\read_line($body));
+        $this->assertEquals("0004\n", Utils::readline($body));
+        $this->assertEquals("0005\n", Utils::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", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0003\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0004\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0005\n", \GuzzleHttp\Stream\read_line($body));
-        $this->assertEquals("0006\n", \GuzzleHttp\Stream\read_line($body));
+        $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(5, $body->write("1234\n"));
         $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes'));
 
diff --git a/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php b/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
new file mode 100644
index 0000000..bb2cb22
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
@@ -0,0 +1,26 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\BufferStream;
+use GuzzleHttp\Stream\DroppingStream;
+
+class DroppingStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testBeginsDroppingWhenSizeExceeded()
+    {
+        $stream = new BufferStream();
+        $drop = new DroppingStream($stream, 5);
+        $this->assertEquals(3, $drop->write('hel'));
+        $this->assertFalse($drop->write('lo'));
+        $this->assertEquals(5, $drop->getSize());
+        $this->assertEquals('hello', $drop->read(5));
+        $this->assertEquals(0, $drop->getSize());
+        $drop->write('12345678910');
+        $this->assertEquals(5, $stream->getSize());
+        $this->assertEquals(5, $drop->getSize());
+        $this->assertEquals('12345', (string) $drop);
+        $this->assertEquals(0, $drop->getSize());
+        $drop->write('hello');
+        $this->assertFalse($drop->write('test'));
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php b/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
new file mode 100644
index 0000000..fd8cd1a
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
@@ -0,0 +1,16 @@
+<?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/FnStreamTest.php b/core/vendor/guzzlehttp/streams/tests/FnStreamTest.php
new file mode 100644
index 0000000..83320e4
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/FnStreamTest.php
@@ -0,0 +1,91 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\FnStream;
+
+/**
+ * @covers GuzzleHttp\Stream\FnStream
+ */
+class FnStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \BadMethodCallException
+     * @expectedExceptionMessage seek() is not implemented in the FnStream
+     */
+    public function testThrowsWhenNotImplemented()
+    {
+        (new FnStream([]))->seek(1);
+    }
+
+    public function testProxiesToFunction()
+    {
+        $s = new FnStream([
+            'read' => function ($len) {
+                $this->assertEquals(3, $len);
+                return 'foo';
+            }
+        ]);
+
+        $this->assertEquals('foo', $s->read(3));
+    }
+
+    public function testCanCloseOnDestruct()
+    {
+        $called = false;
+        $s = new FnStream([
+            'close' => function () use (&$called) {
+                $called = true;
+            }
+        ]);
+        unset($s);
+        $this->assertTrue($called);
+    }
+
+    public function testDoesNotRequireClose()
+    {
+        $s = new FnStream([]);
+        unset($s);
+    }
+
+    public function testDecoratesStream()
+    {
+        $a = Stream::factory('foo');
+        $b = FnStream::decorate($a, []);
+        $this->assertFalse($b->isDetached());
+        $this->assertEquals(3, $b->getSize());
+        $this->assertEquals($b->isWritable(), true);
+        $this->assertEquals($b->isReadable(), true);
+        $this->assertEquals($b->isSeekable(), true);
+        $this->assertEquals($b->read(3), 'foo');
+        $this->assertEquals($b->tell(), 3);
+        $this->assertEquals($a->tell(), 3);
+        $this->assertEquals($b->eof(), true);
+        $this->assertEquals($a->eof(), true);
+        $b->seek(0);
+        $this->assertEquals('foo', (string) $b);
+        $b->seek(0);
+        $this->assertEquals('foo', $b->getContents());
+        $this->assertEquals($a->getMetadata(), $b->getMetadata());
+        $b->seek(0, SEEK_END);
+        $b->write('bar');
+        $this->assertEquals('foobar', (string) $b);
+        $b->flush();
+        $this->assertInternalType('resource', $b->detach());
+        $b->close();
+    }
+
+    public function testDecoratesWithCustomizations()
+    {
+        $called = false;
+        $a = Stream::factory('foo');
+        $b = FnStream::decorate($a, [
+            'read' => function ($len) use (&$called, $a) {
+                $called = true;
+                return $a->read($len);
+            }
+        ]);
+        $this->assertEquals('foo', $b->read(3));
+        $this->assertTrue($called);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php b/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
index 2a4c4db..33c3ecc 100644
--- a/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\GuzzleStreamWrapper;
diff --git a/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php b/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
new file mode 100644
index 0000000..ead9356
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
@@ -0,0 +1,16 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\InflateStream;
+use GuzzleHttp\Stream\Stream;
+
+class InflateStreamtest extends \PHPUnit_Framework_TestCase
+{
+    public function testInflatesStreams()
+    {
+        $content = gzencode('test');
+        $a = Stream::factory($content);
+        $b = new InflateStream($a);
+        $this->assertEquals('test', (string) $b);
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php b/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
index e5ee730..79e0078 100644
--- a/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
@@ -30,6 +30,7 @@ public function testOpensLazily()
         $this->assertInternalType('array', $l->getMetadata());
         $this->assertFileExists($this->fname);
         $this->assertEquals('foo', file_get_contents($this->fname));
+        $this->assertEquals('foo', (string) $l);
     }
 
     public function testProxiesToFile()
@@ -56,6 +57,8 @@ public function testDetachesUnderlyingStream()
         $l = new LazyOpenStream($this->fname, 'r');
         $r = $l->detach();
         $this->assertInternalType('resource', $r);
+        fseek($r, 0);
+        $this->assertEquals('foo', stream_get_contents($r));
         fclose($r);
     }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php b/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
index 8a07c49..efb1dc5 100644
--- a/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
@@ -1,9 +1,10 @@
 <?php
-
 namespace GuzzleHttp\Tests\Http;
 
+use GuzzleHttp\Stream\FnStream;
 use GuzzleHttp\Stream\Stream;
 use GuzzleHttp\Stream\LimitStream;
+use GuzzleHttp\Stream\NoSeekStream;
 
 /**
  * @covers GuzzleHttp\Stream\LimitStream
@@ -55,11 +56,18 @@ public function testSeeksWhenConstructed()
 
     public function testAllowsBoundedSeek()
     {
-        $this->body->seek(100);
+        $this->assertEquals(true, $this->body->seek(100));
+        $this->assertEquals(10, $this->body->tell());
         $this->assertEquals(13, $this->decorated->tell());
-        $this->body->seek(0);
+        $this->assertEquals(true, $this->body->seek(0));
+        $this->assertEquals(0, $this->body->tell());
+        $this->assertEquals(3, $this->decorated->tell());
+        $this->assertEquals(false, $this->body->seek(-10));
         $this->assertEquals(0, $this->body->tell());
         $this->assertEquals(3, $this->decorated->tell());
+        $this->assertEquals(true, $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));
     }
 
@@ -75,6 +83,19 @@ public function testReadsOnlySubsetOfData()
         $this->assertNotSame($data, $newData);
     }
 
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\SeekException
+     * @expectedExceptionMessage Could not seek the stream to position 2
+     */
+    public function testThrowsWhenCurrentGreaterThanOffsetSeek()
+    {
+        $a = Stream::factory('foo_bar');
+        $b = new NoSeekStream($a);
+        $c = new LimitStream($b);
+        $a->getContents();
+        $c->setOffset(2);
+    }
+
     public function testClaimsConsumedWhenReadLimitIsReached()
     {
         $this->assertFalse($this->body->eof());
@@ -92,4 +113,21 @@ public function testGetContentsIsBasedOnSubset()
         $body = new LimitStream(Stream::factory('foobazbar'), 3, 3);
         $this->assertEquals('baz', $body->getContents());
     }
+
+    public function testReturnsNullIfSizeCannotBeDetermined()
+    {
+        $a = new FnStream([
+            'getSize' => function () { return null; },
+            'tell'    => function () { return 0; },
+        ]);
+        $b = new LimitStream($a);
+        $this->assertNull($b->getSize());
+    }
+
+    public function testLengthLessOffsetWhenNoLimitSize()
+    {
+        $a = Stream::factory('foo_bar');
+        $b = new LimitStream($a, -1, 4);
+        $this->assertEquals(3, $b->getSize());
+    }
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php b/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
index e6fdbe1..9f95861 100644
--- a/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\Stream;
diff --git a/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php b/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php
new file mode 100644
index 0000000..7f19d9f
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/NullStreamTest.php
@@ -0,0 +1,33 @@
+<?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->assertFalse($b->flush());
+
+        $this->assertTrue($b->isReadable());
+        $this->assertTrue($b->isWritable());
+        $this->assertTrue($b->isSeekable());
+        $this->assertFalse($b->seek(10));
+
+        $this->assertTrue($b->eof());
+        $this->assertFalse($b->isDetached());
+        $b->detach();
+        $this->assertTrue($b->isDetached());
+        $this->assertTrue($b->eof());
+        $b->close();
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php b/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
new file mode 100644
index 0000000..e85550b
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
@@ -0,0 +1,71 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\LimitStream;
+use GuzzleHttp\Stream\PumpStream;
+use GuzzleHttp\Stream\Stream;
+
+class PumpStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasMetadataAndSize()
+    {
+        $p = new PumpStream(function () {}, [
+            'metadata' => ['foo' => 'bar'],
+            'size'     => 100
+        ]);
+
+        $this->assertEquals('bar', $p->getMetadata('foo'));
+        $this->assertEquals(['foo' => 'bar'], $p->getMetadata());
+        $this->assertEquals(100, $p->getSize());
+    }
+
+    public function testCanReadFromCallable()
+    {
+        $p = Stream::factory(function ($size) {
+            return 'a';
+        });
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals(1, $p->tell());
+        $this->assertEquals('aaaaa', $p->read(5));
+        $this->assertEquals(6, $p->tell());
+    }
+
+    public function testStoresExcessDataInBuffer()
+    {
+        $called = [];
+        $p = Stream::factory(function ($size) use (&$called) {
+            $called[] = $size;
+            return 'abcdef';
+        });
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals('b', $p->read(1));
+        $this->assertEquals('cdef', $p->read(4));
+        $this->assertEquals('abcdefabc', $p->read(9));
+        $this->assertEquals([1, 9, 3], $called);
+    }
+
+    public function testInifiniteStreamWrappedInLimitStream()
+    {
+        $p = Stream::factory(function () { return 'a'; });
+        $s = new LimitStream($p, 5);
+        $this->assertEquals('aaaaa', (string) $s);
+    }
+
+    public function testDescribesCapabilities()
+    {
+        $p = Stream::factory(function () {});
+        $this->assertFalse($p->isDetached());
+        $this->assertTrue($p->isReadable());
+        $this->assertFalse($p->isSeekable());
+        $this->assertFalse($p->isWritable());
+        $this->assertNull($p->getSize());
+        $this->assertFalse($p->write('aa'));
+        $this->assertFalse($p->flush());
+        $this->assertEquals('', $p->getContents());
+        $this->assertEquals('', (string) $p);
+        $p->close();
+        $this->assertTrue($p->isDetached());
+        $this->assertEquals('', $p->read(10));
+        $this->assertTrue($p->eof());
+    }
+}
diff --git a/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php b/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
index 1d49936..3c40845 100644
--- a/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\StreamInterface;
@@ -86,8 +85,7 @@ public function testGetsContents()
         $this->assertEquals('foo', $this->b->getContents());
         $this->assertEquals('', $this->b->getContents());
         $this->b->seek(1);
-        $this->assertEquals('o', $this->b->getContents(1));
-        $this->assertEquals('', $this->b->getContents(0));
+        $this->assertEquals('oo', $this->b->getContents(1));
     }
 
     public function testCloses()
@@ -98,8 +96,10 @@ public function testCloses()
 
     public function testDetaches()
     {
+        $this->assertFalse($this->b->isDetached());
         $this->b->detach();
         $this->assertFalse($this->b->isReadable());
+        $this->assertTrue($this->b->isDetached());
     }
 
     public function testWrapsMetadata()
@@ -114,4 +114,33 @@ public function testWrapsWrites()
         $this->b->write('foo');
         $this->assertEquals('foofoo', (string) $this->a);
     }
+
+    public function testWrapsFlush()
+    {
+        $this->b->flush();
+    }
+
+    /**
+     * @expectedException \UnexpectedValueException
+     */
+    public function testThrowsWithInvalidGetter()
+    {
+        $this->b->foo;
+    }
+
+    /**
+     * @expectedException \BadMethodCallException
+     */
+    public function testThrowsWhenGetterNotImplemented()
+    {
+        $s = new BadStream();
+        $s->stream;
+    }
+}
+
+class BadStream
+{
+    use StreamDecoratorTrait;
+
+    public function __construct() {}
 }
diff --git a/core/vendor/guzzlehttp/streams/tests/StreamTest.php b/core/vendor/guzzlehttp/streams/tests/StreamTest.php
index 20566e4..4520b1d 100644
--- a/core/vendor/guzzlehttp/streams/tests/StreamTest.php
+++ b/core/vendor/guzzlehttp/streams/tests/StreamTest.php
@@ -1,5 +1,4 @@
 <?php
-
 namespace GuzzleHttp\Tests\Stream;
 
 use GuzzleHttp\Stream\Stream;
@@ -59,9 +58,6 @@ public function testGetsContents()
         $stream->seek(0);
         $this->assertEquals('data', $stream->getContents());
         $this->assertEquals('', $stream->getContents());
-        $stream->seek(0);
-        $this->assertEquals('da', $stream->getContents(2));
-        $stream->close();
     }
 
     public function testChecksEof()
@@ -134,17 +130,19 @@ public function testCanDetachStream()
     {
         $r = fopen('php://temp', 'w+');
         $stream = new Stream($r);
+        $this->assertFalse($stream->isDetached());
         $this->assertTrue($stream->isReadable());
         $this->assertSame($r, $stream->detach());
         $this->assertNull($stream->detach());
+        $this->assertTrue($stream->isDetached());
         $this->assertFalse($stream->isReadable());
-        $this->assertSame('', $stream->read(10));
+        $this->assertFalse($stream->read(10));
         $this->assertFalse($stream->isWritable());
         $this->assertFalse($stream->write('foo'));
         $this->assertFalse($stream->isSeekable());
         $this->assertFalse($stream->seek(10));
         $this->assertFalse($stream->tell());
-        $this->assertFalse($stream->eof());
+        $this->assertTrue($stream->eof());
         $this->assertNull($stream->getSize());
         $this->assertSame('', (string) $stream);
         $this->assertSame('', $stream->getContents());
@@ -171,4 +169,83 @@ public function testCreatesWithFactory()
         $this->assertEquals('foo', $stream->getContents());
         $stream->close();
     }
+
+    public function testFlushes()
+    {
+        $stream = Stream::factory('foo');
+        $this->assertTrue($stream->flush());
+        $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()
+    {
+        $r = new HasToString();
+        $s = Stream::factory($r);
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $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/UtilsTest.php b/core/vendor/guzzlehttp/streams/tests/UtilsTest.php
new file mode 100644
index 0000000..6e3e3b2
--- /dev/null
+++ b/core/vendor/guzzlehttp/streams/tests/UtilsTest.php
@@ -0,0 +1,155 @@
+<?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/guzzlehttp/streams/tests/functionsTest.php b/core/vendor/guzzlehttp/streams/tests/functionsTest.php
deleted file mode 100644
index b2ef89c..0000000
--- a/core/vendor/guzzlehttp/streams/tests/functionsTest.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Stream;
-
-use GuzzleHttp\Stream;
-
-class functionsTest extends \PHPUnit_Framework_TestCase
-{
-    public function testCopiesToMemory()
-    {
-        $s = Stream\create('foobaz');
-        $this->assertEquals('foobaz', Stream\copy_to_string($s));
-        $s->seek(0);
-        $this->assertEquals('foo', Stream\copy_to_string($s, 3));
-        $this->assertEquals('baz', Stream\copy_to_string($s, 3));
-        $this->assertEquals('', Stream\copy_to_string($s));
-    }
-
-    public function testCopiesToStream()
-    {
-        $s1 = Stream\create('foobaz');
-        $s2 = Stream\create('');
-        Stream\copy_to_stream($s1, $s2);
-        $this->assertEquals('foobaz', (string) $s2);
-        $s2 = Stream\create('');
-        $s1->seek(0);
-        Stream\copy_to_stream($s1, $s2, 3);
-        $this->assertEquals('foo', (string) $s2);
-        Stream\copy_to_stream($s1, $s2, 3);
-        $this->assertEquals('foobaz', (string) $s2);
-    }
-
-    public function testReadsLines()
-    {
-        $s = Stream\create("foo\nbaz\nbar");
-        $this->assertEquals("foo\n", Stream\read_line($s));
-        $this->assertEquals("baz\n", Stream\read_line($s));
-        $this->assertEquals("bar", Stream\read_line($s));
-    }
-
-    public function testReadsLinesUpToMaxLength()
-    {
-        $s = Stream\create("12345\n");
-        $this->assertEquals("123", Stream\read_line($s, 4));
-        $this->assertEquals("45\n", Stream\read_line($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", Stream\read_line($s));
-    }
-
-    public function testCalculatesHash()
-    {
-        $s = Stream\create('foobazbar');
-        $this->assertEquals(md5('foobazbar'), Stream\hash($s, 'md5'));
-    }
-
-    public function testCalculatesHashSeeksToOriginalPosition()
-    {
-        $s = Stream\create('foobazbar');
-        $s->seek(4);
-        $this->assertEquals(md5('foobazbar'), Stream\hash($s, 'md5'));
-        $this->assertEquals(4, $s->tell());
-    }
-
-    public function testFactoryCreatesFromEmptyString()
-    {
-        $s = Stream\create();
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-    }
-
-    public function testFactoryCreatesFromResource()
-    {
-        $r = fopen(__FILE__, 'r');
-        $s = Stream\create($r);
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-        $this->assertSame(file_get_contents(__FILE__), (string) $s);
-    }
-
-    public function testFactoryCreatesFromObjectWithToString()
-    {
-        $r = new HasToString();
-        $s = Stream\create($r);
-        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
-        $this->assertEquals('foo', (string) $s);
-    }
-
-    public function testCreatePassesThrough()
-    {
-        $s = Stream\create('foo');
-        $this->assertSame($s, Stream\create($s));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testThrowsExceptionForUnknown()
-    {
-        Stream\create(new \stdClass());
-    }
-
-    public function testOpensFilesSuccessfully()
-    {
-        $r = Stream\safe_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()
-    {
-        Stream\safe_open('/path/to/does/not/exist', 'r');
-    }
-}
-
-class HasToString
-{
-    public function __toString() {
-        return 'foo';
-    }
-}
