Kirin před 4 roky
rodič
revize
ed0358a7ed
100 změnil soubory, kde provedl 3710 přidání a 0 odebrání
  1. binární
      vendor/aliyuncs/oss-sdk-php/example.jpg
  2. 167 0
      vendor/aliyuncs/oss-sdk-php/samples/Bucket.php
  3. 87 0
      vendor/aliyuncs/oss-sdk-php/samples/Image.php
  4. 8 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php
  5. 39 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php
  6. 107 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php
  7. 97 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php
  8. 107 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php
  9. 93 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php
  10. 93 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php
  11. 55 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php
  12. 19 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php
  13. 19 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php
  14. 34 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php
  15. 71 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php
  16. 59 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php
  17. 21 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php
  18. 67 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php
  19. 51 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php
  20. 43 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php
  21. 111 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php
  22. 70 0
      vendor/composer/autoload_real.php
  23. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/1533712618.png-errors.txt
  24. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_13.dat
  25. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_18.dat
  26. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_19.png
  27. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_20.png
  28. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_3.dat
  29. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_33.png
  30. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_38.png
  31. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_4.png
  32. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_40.dat
  33. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_8.dat
  34. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_9.png
  35. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_109_0.dat
  36. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_145_0.dat
  37. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_29_0.dat
  38. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_85_0.dat
  39. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_161_1.dat
  40. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_177_1.dat
  41. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_57_1.dat
  42. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_61_1.dat
  43. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_77_1.dat
  44. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_141_2.dat
  45. 3 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_157_2.dat
  46. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_177_2.dat
  47. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_53_2.dat
  48. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_69_2.dat
  49. 4 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_117_3.dat
  50. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_121_3.dat
  51. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_173_3.dat
  52. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_45_3.dat
  53. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_97_3.dat
  54. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_101_4.dat
  55. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_153_4.dat
  56. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_169_4.dat
  57. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_21_4.dat
  58. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_37_4.dat
  59. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_93_4.dat
  60. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_129_5.dat
  61. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_133_5.dat
  62. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_29_5.dat
  63. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_65_5.dat
  64. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_85_5.dat
  65. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_109_6.dat
  66. binární
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_165_6.dat
  67. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_57_6.dat
  68. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_61_6.dat
  69. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_77_6.dat
  70. 2 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_7/mask_145_7.dat
  71. 1 0
      vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_7/mask_53_7.dat
  72. 54 0
      vendor/dh2y/think-qrcode/src/phpqrcode/qrconst.php
  73. 95 0
      vendor/dh2y/think-qrcode/src/phpqrcode/qrimage.php
  74. 43 0
      vendor/dh2y/think-qrcode/src/phpqrcode/qrlib.php
  75. 126 0
      vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache.php
  76. 72 0
      vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CacheProviderTest.php
  77. 47 0
      vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CouchbaseCacheTest.php
  78. 10 0
      vendor/doctrine/cache/tests/Doctrine/Tests/DoctrineTestCase.php
  79. 19 0
      vendor/doctrine/cache/tests/Doctrine/Tests/TestInit.php
  80. 29 0
      vendor/firebase/php-jwt/composer.json
  81. 85 0
      vendor/guzzle/guzzle/docs/getting-started/overview.rst
  82. 97 0
      vendor/guzzle/guzzle/docs/iterators/guzzle-iterators.rst
  83. 29 0
      vendor/guzzle/guzzle/docs/plugins/md5-validator-plugin.rst
  84. 27 0
      vendor/guzzle/guzzle/docs/plugins/mock-plugin.rst
  85. 66 0
      vendor/guzzle/guzzle/src/Guzzle/Batch/AbstractBatchDecorator.php
  86. 60 0
      vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php
  87. 39 0
      vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php
  88. 38 0
      vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php
  89. 21 0
      vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php
  90. 464 0
      vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlHandle.php
  91. 66 0
      vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlVersion.php
  92. 201 0
      vendor/guzzle/guzzle/src/Guzzle/Http/EntityBody.php
  93. 137 0
      vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequestInterface.php
  94. 108 0
      vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderCollection.php
  95. 26 0
      vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactory.php
  96. 22 0
      vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/QueryAggregatorInterface.php
  97. 157 0
      vendor/guzzle/guzzle/src/Guzzle/Http/StaticClient.php
  98. 29 0
      vendor/guzzle/guzzle/src/Guzzle/Log/composer.json
  99. 58 0
      vendor/guzzle/guzzle/src/Guzzle/Parser/Message/AbstractMessageParser.php
  100. 19 0
      vendor/guzzle/guzzle/src/Guzzle/Parser/Url/UrlParserInterface.php

binární
vendor/aliyuncs/oss-sdk-php/example.jpg


+ 167 - 0
vendor/aliyuncs/oss-sdk-php/samples/Bucket.php

@@ -0,0 +1,167 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* 简单使用 ****************************************************************
+
+//创建bucket
+$ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
+Common::println("bucket $bucket created");
+
+// 判断Bucket是否存在
+$doesExist = $ossClient->doesBucketExist($bucket);
+Common::println("bucket $bucket exist? " . ($doesExist ? "yes" : "no"));
+
+// 获取Bucket列表
+$bucketListInfo = $ossClient->listBuckets();
+
+// 设置bucket的ACL
+$ossClient->putBucketAcl($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
+Common::println("bucket $bucket acl put");
+// 获取bucket的ACL
+$acl = $ossClient->getBucketAcl($bucket);
+Common::println("bucket $bucket acl get: " . $acl);
+
+
+//******************************* 完整用法参考下面函数 ****************************************************
+
+createBucket($ossClient, $bucket);
+doesBucketExist($ossClient, $bucket);
+deleteBucket($ossClient, $bucket);
+putBucketAcl($ossClient, $bucket);
+getBucketAcl($ossClient, $bucket);
+listBuckets($ossClient);
+
+/**
+ * 创建一个存储空间
+ * acl 指的是bucket的访问控制权限,有三种,私有读写,公共读私有写,公共读写。
+ * 私有读写就是只有bucket的拥有者或授权用户才有权限操作
+ * 三种权限分别对应 (OssClient::OSS_ACL_TYPE_PRIVATE,OssClient::OSS_ACL_TYPE_PUBLIC_READ, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE)
+ *
+ * @param OssClient $ossClient OssClient实例
+ * @param string $bucket 要创建的存储空间名称
+ * @return null
+ */
+function createBucket($ossClient, $bucket)
+{
+    try {
+        $ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ *  判断Bucket是否存在
+ *
+ * @param OssClient $ossClient OssClient实例
+ * @param string $bucket 存储空间名称
+ */
+function doesBucketExist($ossClient, $bucket)
+{
+    try {
+        $res = $ossClient->doesBucketExist($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    if ($res === true) {
+        print(__FUNCTION__ . ": OK" . "\n");
+    } else {
+        print(__FUNCTION__ . ": FAILED" . "\n");
+    }
+}
+
+/**
+ * 删除bucket,如果bucket不为空则bucket无法删除成功, 不为空表示bucket既没有object,也没有未完成的multipart上传时的parts
+ *
+ * @param OssClient $ossClient OssClient实例
+ * @param string $bucket 待删除的存储空间名称
+ * @return null
+ */
+function deleteBucket($ossClient, $bucket)
+{
+    try {
+        $ossClient->deleteBucket($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * 设置bucket的acl配置
+ *
+ * @param OssClient $ossClient OssClient实例
+ * @param string $bucket 存储空间名称
+ * @return null
+ */
+function putBucketAcl($ossClient, $bucket)
+{
+    $acl = OssClient::OSS_ACL_TYPE_PRIVATE;
+    try {
+        $ossClient->putBucketAcl($bucket, $acl);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * 获取bucket的acl配置
+ *
+ * @param OssClient $ossClient OssClient实例
+ * @param string $bucket 存储空间名称
+ * @return null
+ */
+function getBucketAcl($ossClient, $bucket)
+{
+    try {
+        $res = $ossClient->getBucketAcl($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print('acl: ' . $res);
+}
+
+
+/**
+ * 列出用户所有的Bucket
+ *
+ * @param OssClient $ossClient OssClient实例
+ * @return null
+ */
+function listBuckets($ossClient)
+{
+    $bucketList = null;
+    try {
+        $bucketListInfo = $ossClient->listBuckets();
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    $bucketList = $bucketListInfo->getBucketList();
+    foreach ($bucketList as $bucket) {
+        print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n");
+    }
+}

+ 87 - 0
vendor/aliyuncs/oss-sdk-php/samples/Image.php

@@ -0,0 +1,87 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+
+$bucketName = Common::getBucketName();
+$object = "example.jpg";
+$ossClient = Common::getOssClient();
+$download_file = "download.jpg";
+if (is_null($ossClient)) exit(1);
+
+//*******************************简单使用***************************************************************
+
+// 先把本地的example.jpg上传到指定$bucket, 命名为$object
+$ossClient->uploadFile($bucketName, $object, "example.jpg");
+
+// 图片缩放
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageResize",$download_file);
+
+// 图片裁剪
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/crop,w_100,h_100,x_100,y_100,r_1", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("iamgeCrop", $download_file);
+
+// 图片旋转
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/rotate,90", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageRotate", $download_file);
+
+// 图片锐化
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/sharpen,100", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageSharpen", $download_file);
+
+// 图片水印
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageWatermark", $download_file);
+
+// 图片格式转换
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/format,png", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageFormat", $download_file);
+
+// 获取图片信息
+$options = array(
+    OssClient::OSS_FILE_DOWNLOAD => $download_file,
+    OssClient::OSS_PROCESS => "image/info", );
+$ossClient->getObject($bucketName, $object, $options);
+printImage("imageInfo", $download_file);
+
+
+/**
+ *  生成一个带签名的可用于浏览器直接打开的url, URL的有效期是3600秒
+ */
+ $timeout = 3600;
+$options = array(
+    OssClient::OSS_PROCESS => "image/resize,m_lfit,h_100,w_100",
+    );
+$signedUrl = $ossClient->signUrl($bucketName, $object, $timeout, "GET", $options);
+Common::println("rtmp url: \n" . $signedUrl);
+
+//最后删除上传的$object
+$ossClient->deleteObject($bucketName, $object);     
+
+function printImage($func, $imageFile)
+{
+    $array = getimagesize($imageFile);
+    Common::println("$func, image width: " . $array[0]);
+    Common::println("$func, image height: " . $array[1]);
+    Common::println("$func, image type: " . ($array[2] === 2 ? 'jpg' : 'png'));
+    Common::println("$func, image size: " . ceil(filesize($imageFile)));
+}

+ 8 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php

@@ -0,0 +1,8 @@
+<?php
+
+namespace OSS\Http;
+
+class RequestCore_Exception extends \Exception
+{
+
+}

+ 39 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class BucketListInfo
+ *
+ * ListBuckets接口返回的数据类型
+ *
+ * @package OSS\Model
+ */
+class BucketListInfo
+{
+    /**
+     * BucketListInfo constructor.
+     * @param array $bucketList
+     */
+    public function __construct(array $bucketList)
+    {
+        $this->bucketList = $bucketList;
+    }
+
+    /**
+     * 得到BucketInfo列表
+     *
+     * @return BucketInfo[]
+     */
+    public function getBucketList()
+    {
+        return $this->bucketList;
+    }
+
+    /**
+     * BucketInfo信息列表
+     *
+     * @var array
+     */
+    private $bucketList = array();
+}

+ 107 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php

@@ -0,0 +1,107 @@
+<?php
+
+namespace OSS\Model;
+/**
+ * Class GetLiveChannelStatus
+ * @package OSS\Model
+ */
+class GetLiveChannelStatus implements XmlConfig
+{
+    public function getStatus()
+    {
+        return $this->status;
+    }
+
+    public function getConnectedTime()
+    {
+        return $this->connectedTime;
+    }
+
+    public function getRemoteAddr()
+    {
+        return $this->remoteAddr;
+    }
+
+    public function getVideoWidth()
+    {
+        return $this->videoWidth;
+    }
+    public function getVideoHeight()
+    {
+        return $this->videoHeight;
+    }
+    public function getVideoFrameRate()
+    {
+        return $this->videoFrameRate;
+    }
+    public function getVideoBandwidth()
+    {
+        return $this->videoBandwidth;
+    }
+    public function getVideoCodec()
+    {
+        return $this->videoCodec;
+    }
+
+    public function getAudioBandwidth()
+    {
+        return $this->audioBandwidth;
+    }
+    public function getAudioSampleRate()
+    {
+        return $this->audioSampleRate;
+    }
+    public function getAudioCodec()
+    {
+        return $this->audioCodec;
+    }
+
+
+    public function parseFromXml($strXml)
+    {
+        $xml = simplexml_load_string($strXml);
+        $this->status = strval($xml->Status);
+        $this->connectedTime = strval($xml->ConnectedTime);
+        $this->remoteAddr = strval($xml->RemoteAddr);
+
+        if (isset($xml->Video)) {
+            foreach ($xml->Video as $video) {
+            $this->videoWidth = intval($video->Width);
+            $this->videoHeight = intval($video->Height);
+            $this->videoFrameRate = intval($video->FrameRate);
+            $this->videoBandwidth = intval($video->Bandwidth);
+            $this->videoCodec = strval($video->Codec);
+           }
+        }
+        
+        if (isset($xml->Video)) {
+            foreach ($xml->Audio as $audio) {
+            $this->audioBandwidth = intval($audio->Bandwidth);
+            $this->audioSampleRate = intval($audio->SampleRate);
+            $this->audioCodec = strval($audio->Codec);
+           }
+        }
+
+    }
+
+    public function serializeToXml()
+    {
+        throw new OssException("Not implemented.");
+    }
+    
+    private $status;
+    private $connectedTime;
+    private $remoteAddr;
+
+    private $videoWidth;
+    private $videoHeight;
+    private $videoFrameRate;
+    private $videoBandwidth;
+    private $videoCodec;
+
+    private $audioBandwidth;
+    private $audioSampleRate;
+    private $audioCodec;
+    
+
+}

+ 97 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php

@@ -0,0 +1,97 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class ListPartsInfo
+ * @package OSS\Model
+ * @link http://help.aliyun.com/document_detail/oss/api-reference/multipart-upload/ListParts.html
+ */
+class ListPartsInfo
+{
+
+    /**
+     * ListPartsInfo constructor.
+     * @param string $bucket
+     * @param string $key
+     * @param string $uploadId
+     * @param int $nextPartNumberMarker
+     * @param int $maxParts
+     * @param string $isTruncated
+     * @param array $listPart
+     */
+    public function __construct($bucket, $key, $uploadId, $nextPartNumberMarker, $maxParts, $isTruncated, array $listPart)
+    {
+        $this->bucket = $bucket;
+        $this->key = $key;
+        $this->uploadId = $uploadId;
+        $this->nextPartNumberMarker = $nextPartNumberMarker;
+        $this->maxParts = $maxParts;
+        $this->isTruncated = $isTruncated;
+        $this->listPart = $listPart;
+    }
+
+    /**
+     * @return string
+     */
+    public function getBucket()
+    {
+        return $this->bucket;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getUploadId()
+    {
+        return $this->uploadId;
+    }
+
+    /**
+     * @return int
+     */
+    public function getNextPartNumberMarker()
+    {
+        return $this->nextPartNumberMarker;
+    }
+
+    /**
+     * @return int
+     */
+    public function getMaxParts()
+    {
+        return $this->maxParts;
+    }
+
+    /**
+     * @return string
+     */
+    public function getIsTruncated()
+    {
+        return $this->isTruncated;
+    }
+
+    /**
+     * @return array
+     */
+    public function getListPart()
+    {
+        return $this->listPart;
+    }
+
+    private $bucket = "";
+    private $key = "";
+    private $uploadId = "";
+    private $nextPartNumberMarker = 0;
+    private $maxParts = 0;
+    private $isTruncated = "";
+    private $listPart = array();
+}

+ 107 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php

@@ -0,0 +1,107 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class LiveChannelListInfo
+ *
+ * ListBucketLiveChannels接口返回数据
+ *
+ * @package OSS\Model
+ * @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/GetBucket.html
+ */
+class LiveChannelListInfo implements XmlConfig
+{
+    /**
+     * @return string
+     */
+    public function getBucketName()
+    {
+        return $this->bucket;
+    }
+
+    public function setBucketName($name)
+    {
+        $this->bucket = $name;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrefix()
+    {
+        return $this->prefix;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMarker()
+    {
+        return $this->marker;
+    }
+
+    /**
+     * @return int
+     */
+    public function getMaxKeys()
+    {
+        return $this->maxKeys;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getIsTruncated()
+    {
+        return $this->isTruncated;
+    }
+
+    /**
+     * @return LiveChannelInfo[]
+     */
+    public function getChannelList()
+    {
+        return $this->channelList;
+    }
+
+    /**
+     * @return string
+     */
+    public function getNextMarker()
+    {
+        return $this->nextMarker;
+    }
+
+    public function parseFromXml($strXml)
+    {
+        $xml = simplexml_load_string($strXml);
+
+        $this->prefix = strval($xml->Prefix);
+        $this->marker = strval($xml->Marker);
+        $this->maxKeys = intval($xml->MaxKeys);
+        $this->isTruncated = (strval($xml->IsTruncated) == 'true');
+        $this->nextMarker = strval($xml->NextMarker);
+
+        if (isset($xml->LiveChannel)) {
+            foreach ($xml->LiveChannel as $chan) {
+                $channel = new LiveChannelInfo();
+                $channel->parseFromXmlNode($chan);
+                $this->channelList[] = $channel;
+            }
+        }
+    }
+
+    public function serializeToXml()
+    {
+        throw new OssException("Not implemented.");
+    }
+    
+    private $bucket = '';
+    private $prefix = '';
+    private $marker = '';
+    private $nextMarker = '';
+    private $maxKeys = 100;
+    private $isTruncated = 'false';
+    private $channelList = array();
+}

+ 93 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php

@@ -0,0 +1,93 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ *
+ * Class ObjectInfo
+ *
+ * listObjects接口中返回的Object列表中的类
+ *
+ * listObjects接口返回数据中包含两个Array
+ * 一个是拿到的Object列表【可以理解成对应文件系统中的文件列表】
+ * 一个是拿到的Prefix列表【可以理解成对应文件系统中的目录列表】
+ *
+ * @package OSS\Model
+ */
+class ObjectInfo
+{
+    /**
+     * ObjectInfo constructor.
+     *
+     * @param string $key
+     * @param string $lastModified
+     * @param string $eTag
+     * @param string $type
+     * @param int $size
+     * @param string $storageClass
+     */
+    public function __construct($key, $lastModified, $eTag, $type, $size, $storageClass)
+    {
+        $this->key = $key;
+        $this->lastModified = $lastModified;
+        $this->eTag = $eTag;
+        $this->type = $type;
+        $this->size = $size;
+        $this->storageClass = $storageClass;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getLastModified()
+    {
+        return $this->lastModified;
+    }
+
+    /**
+     * @return string
+     */
+    public function getETag()
+    {
+        return $this->eTag;
+    }
+
+    /**
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * @return int
+     */
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    /**
+     * @return string
+     */
+    public function getStorageClass()
+    {
+        return $this->storageClass;
+    }
+
+    private $key = "";
+    private $lastModified = "";
+    private $eTag = "";
+    private $type = "";
+    private $size = 0;
+    private $storageClass = "";
+}

+ 93 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php

@@ -0,0 +1,93 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class RefererConfig
+ *
+ * @package OSS\Model
+ * @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketReferer.html
+ */
+class RefererConfig implements XmlConfig
+{
+    /**
+     * @param string $strXml
+     * @return null
+     */
+    public function parseFromXml($strXml)
+    {
+        $xml = simplexml_load_string($strXml);
+        if (!isset($xml->AllowEmptyReferer)) return;
+        if (!isset($xml->RefererList)) return;
+        $this->allowEmptyReferer =
+            (strval($xml->AllowEmptyReferer) === 'TRUE' || strval($xml->AllowEmptyReferer) === 'true') ? true : false;
+
+        foreach ($xml->RefererList->Referer as $key => $refer) {
+            $this->refererList[] = strval($refer);
+        }
+    }
+
+
+    /**
+     * 把RefererConfig序列化成xml
+     *
+     * @return string
+     */
+    public function serializeToXml()
+    {
+        $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><RefererConfiguration></RefererConfiguration>');
+        if ($this->allowEmptyReferer) {
+            $xml->addChild('AllowEmptyReferer', 'true');
+        } else {
+            $xml->addChild('AllowEmptyReferer', 'false');
+        }
+        $refererList = $xml->addChild('RefererList');
+        foreach ($this->refererList as $referer) {
+            $refererList->addChild('Referer', $referer);
+        }
+        return $xml->asXML();
+    }
+
+    /**
+     * @return string
+     */
+    function __toString()
+    {
+        return $this->serializeToXml();
+    }
+
+    /**
+     * @param boolean $allowEmptyReferer
+     */
+    public function setAllowEmptyReferer($allowEmptyReferer)
+    {
+        $this->allowEmptyReferer = $allowEmptyReferer;
+    }
+
+    /**
+     * @param string $referer
+     */
+    public function addReferer($referer)
+    {
+        $this->refererList[] = $referer;
+    }
+
+    /**
+     * @return boolean
+     */
+    public function isAllowEmptyReferer()
+    {
+        return $this->allowEmptyReferer;
+    }
+
+    /**
+     * @return array
+     */
+    public function getRefererList()
+    {
+        return $this->refererList;
+    }
+
+    private $allowEmptyReferer = true;
+    private $refererList = array();
+}

+ 55 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class UploadInfo
+ *
+ * ListMultipartUpload接口得到的UploadInfo
+ *
+ * @package OSS\Model
+ */
+class UploadInfo
+{
+    /**
+     * UploadInfo constructor.
+     *
+     * @param string $key
+     * @param string $uploadId
+     * @param string $initiated
+     */
+    public function __construct($key, $uploadId, $initiated)
+    {
+        $this->key = $key;
+        $this->uploadId = $uploadId;
+        $this->initiated = $initiated;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getUploadId()
+    {
+        return $this->uploadId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getInitiated()
+    {
+        return $this->initiated;
+    }
+
+    private $key = "";
+    private $uploadId = "";
+    private $initiated = "";
+}

+ 19 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace OSS\Result;
+
+use OSS\Model\GetLiveChannelHistory;
+
+class GetLiveChannelHistoryResult extends Result
+{
+    /**
+     * @return
+     */
+    protected function parseDataFromResponse()
+    {
+        $content = $this->rawResponse->body;
+        $channelList = new GetLiveChannelHistory();
+        $channelList->parseFromXml($content);
+        return $channelList;
+    }
+}

+ 19 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace OSS\Result;
+
+use OSS\Model\GetLiveChannelInfo;
+
+class GetLiveChannelInfoResult extends Result
+{
+    /**
+     * @return
+     */
+    protected function parseDataFromResponse()
+    {
+        $content = $this->rawResponse->body;
+        $channelList = new GetLiveChannelInfo();
+        $channelList->parseFromXml($content);
+        return $channelList;
+    }
+}

+ 34 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace OSS\Result;
+
+use OSS\Core\OssException;
+
+/**
+ * Class AclResult getBucketAcl接口返回结果类,封装了
+ * 返回的xml数据的解析
+ *
+ * @package OSS\Result
+ */
+class GetStorageCapacityResult extends Result
+{
+    /**
+     * Parse data from response
+     * 
+     * @return string
+     * @throws OssException
+     */
+    protected function parseDataFromResponse()
+    {
+        $content = $this->rawResponse->body;
+        if (empty($content)) {
+            throw new OssException("body is null");
+        }
+        $xml = simplexml_load_string($content);
+        if (isset($xml->StorageCapacity)) {
+            return intval($xml->StorageCapacity);
+        } else {
+            throw new OssException("xml format exception");
+        }
+    }
+}

+ 71 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php

@@ -0,0 +1,71 @@
+<?php
+
+namespace OSS\Result;
+
+use OSS\Core\OssUtil;
+use OSS\Model\ObjectInfo;
+use OSS\Model\ObjectListInfo;
+use OSS\Model\PrefixInfo;
+
+/**
+ * Class ListObjectsResult
+ * @package OSS\Result
+ */
+class ListObjectsResult extends Result
+{
+    /**
+     * 解析ListObjects接口返回的xml数据
+     *
+     * return ObjectListInfo
+     */
+    protected function parseDataFromResponse()
+    {
+        $xml = new \SimpleXMLElement($this->rawResponse->body);
+        $encodingType = isset($xml->EncodingType) ? strval($xml->EncodingType) : "";
+        $objectList = $this->parseObjectList($xml, $encodingType);
+        $prefixList = $this->parsePrefixList($xml, $encodingType);
+        $bucketName = isset($xml->Name) ? strval($xml->Name) : "";
+        $prefix = isset($xml->Prefix) ? strval($xml->Prefix) : "";
+        $prefix = OssUtil::decodeKey($prefix, $encodingType);
+        $marker = isset($xml->Marker) ? strval($xml->Marker) : "";
+        $marker = OssUtil::decodeKey($marker, $encodingType);
+        $maxKeys = isset($xml->MaxKeys) ? intval($xml->MaxKeys) : 0;
+        $delimiter = isset($xml->Delimiter) ? strval($xml->Delimiter) : "";
+        $delimiter = OssUtil::decodeKey($delimiter, $encodingType);
+        $isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : "";
+        $nextMarker = isset($xml->NextMarker) ? strval($xml->NextMarker) : "";
+        $nextMarker = OssUtil::decodeKey($nextMarker, $encodingType);
+        return new ObjectListInfo($bucketName, $prefix, $marker, $nextMarker, $maxKeys, $delimiter, $isTruncated, $objectList, $prefixList);
+    }
+
+    private function parseObjectList($xml, $encodingType)
+    {
+        $retList = array();
+        if (isset($xml->Contents)) {
+            foreach ($xml->Contents as $content) {
+                $key = isset($content->Key) ? strval($content->Key) : "";
+                $key = OssUtil::decodeKey($key, $encodingType);
+                $lastModified = isset($content->LastModified) ? strval($content->LastModified) : "";
+                $eTag = isset($content->ETag) ? strval($content->ETag) : "";
+                $type = isset($content->Type) ? strval($content->Type) : "";
+                $size = isset($content->Size) ? intval($content->Size) : 0;
+                $storageClass = isset($content->StorageClass) ? strval($content->StorageClass) : "";
+                $retList[] = new ObjectInfo($key, $lastModified, $eTag, $type, $size, $storageClass);
+            }
+        }
+        return $retList;
+    }
+
+    private function parsePrefixList($xml, $encodingType)
+    {
+        $retList = array();
+        if (isset($xml->CommonPrefixes)) {
+            foreach ($xml->CommonPrefixes as $commonPrefix) {
+                $prefix = isset($commonPrefix->Prefix) ? strval($commonPrefix->Prefix) : "";
+                $prefix = OssUtil::decodeKey($prefix, $encodingType);
+                $retList[] = new PrefixInfo($prefix);
+            }
+        }
+        return $retList;
+    }
+}

+ 59 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Result\AclResult;
+use OSS\Core\OssException;
+use OSS\Http\ResponseCore;
+
+class AclResultTest extends \PHPUnit_Framework_TestCase
+{
+
+    private $validXml = <<<BBBB
+<?xml version="1.0" ?>
+<AccessControlPolicy>
+    <Owner>
+        <ID>00220120222</ID>
+        <DisplayName>user_example</DisplayName>
+    </Owner>
+    <AccessControlList>
+        <Grant>public-read</Grant>
+    </AccessControlList>
+</AccessControlPolicy>
+BBBB;
+
+    private $invalidXml = <<<BBBB
+<?xml version="1.0" ?>
+<AccessControlPolicy>
+</AccessControlPolicy>
+BBBB;
+
+    public function testParseValidXml()
+    {
+        $response = new ResponseCore(array(), $this->validXml, 200);
+        $result = new AclResult($response);
+        $this->assertEquals("public-read", $result->getData());
+    }
+
+    public function testParseNullXml()
+    {
+        $response = new ResponseCore(array(), "", 200);
+        try {
+            new AclResult($response);
+            $this->assertTrue(false);
+        } catch (OssException $e) {
+            $this->assertEquals('body is null', $e->getMessage());
+        }
+    }
+
+    public function testParseInvalidXml()
+    {
+        $response = new ResponseCore(array(), $this->invalidXml, 200);
+        try {
+            new AclResult($response);
+            $this->assertFalse(true);
+        } catch (OssException $e) {
+            $this->assertEquals("xml format exception", $e->getMessage());
+        }
+    }
+}

+ 21 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Model\BucketInfo;
+
+/**
+ * Class BucketInfoTest
+ * @package OSS\Tests
+ */
+class BucketInfoTest extends \PHPUnit_Framework_TestCase
+{
+    public function testConstruct()
+    {
+        $bucketInfo = new BucketInfo('cn-beijing', 'name', 'today');
+        $this->assertNotNull($bucketInfo);
+        $this->assertEquals('cn-beijing', $bucketInfo->getLocation());
+        $this->assertEquals('name', $bucketInfo->getName());
+        $this->assertEquals('today', $bucketInfo->getCreateDate());
+    }
+}

+ 67 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php

@@ -0,0 +1,67 @@
+<?php
+
+namespace OSS\Tests;
+
+
+use OSS\Core\OssException;
+use OSS\Result\GetCorsResult;
+use OSS\Http\ResponseCore;
+
+class GetCorsResultTest extends \PHPUnit_Framework_TestCase
+{
+    private $validXml = <<<BBBB
+<?xml version="1.0" encoding="utf-8"?>
+<CORSConfiguration>
+<CORSRule>
+<AllowedOrigin>http://www.b.com</AllowedOrigin>
+<AllowedOrigin>http://www.a.com</AllowedOrigin>
+<AllowedOrigin>http://www.a.com</AllowedOrigin>
+<AllowedMethod>GET</AllowedMethod>
+<AllowedMethod>PUT</AllowedMethod>
+<AllowedMethod>POST</AllowedMethod>
+<AllowedHeader>x-oss-test</AllowedHeader>
+<AllowedHeader>x-oss-test2</AllowedHeader>
+<AllowedHeader>x-oss-test2</AllowedHeader>
+<AllowedHeader>x-oss-test3</AllowedHeader>
+<ExposeHeader>x-oss-test1</ExposeHeader>
+<ExposeHeader>x-oss-test1</ExposeHeader>
+<ExposeHeader>x-oss-test2</ExposeHeader>
+<MaxAgeSeconds>10</MaxAgeSeconds>
+</CORSRule>
+<CORSRule>
+<AllowedOrigin>http://www.b.com</AllowedOrigin>
+<AllowedMethod>GET</AllowedMethod>
+<AllowedHeader>x-oss-test</AllowedHeader>
+<ExposeHeader>x-oss-test1</ExposeHeader>
+<MaxAgeSeconds>110</MaxAgeSeconds>
+</CORSRule>
+</CORSConfiguration>
+BBBB;
+
+    public function testParseValidXml()
+    {
+        $response = new ResponseCore(array(), $this->validXml, 200);
+        $result = new GetCorsResult($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $corsConfig = $result->getData();
+        $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($corsConfig->serializeToXml()));
+    }
+
+    private function cleanXml($xml)
+    {
+        return str_replace("\n", "", str_replace("\r", "", $xml));
+    }
+
+    public function testInvalidResponse()
+    {
+        $response = new ResponseCore(array(), $this->validXml, 300);
+        try {
+            new GetCorsResult($response);
+            $this->assertTrue(false);
+        } catch (OssException $e) {
+
+        }
+    }
+}

+ 51 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Result\GetRefererResult;
+use OSS\Http\ResponseCore;
+use OSS\Core\OssException;
+
+
+class GetRefererResultTest extends \PHPUnit_Framework_TestCase
+{
+    private $validXml = <<<BBBB
+<?xml version="1.0" encoding="utf-8"?>
+<RefererConfiguration>
+<AllowEmptyReferer>true</AllowEmptyReferer>
+<RefererList>
+<Referer>http://www.aliyun.com</Referer>
+<Referer>https://www.aliyun.com</Referer>
+<Referer>http://www.*.com</Referer>
+<Referer>https://www.?.aliyuncs.com</Referer>
+</RefererList>
+</RefererConfiguration>
+BBBB;
+
+    public function testParseValidXml()
+    {
+        $response = new ResponseCore(array(), $this->validXml, 200);
+        $result = new GetRefererResult($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $refererConfig = $result->getData();
+        $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($refererConfig->serializeToXml()));
+    }
+
+    private function cleanXml($xml)
+    {
+        return str_replace("\n", "", str_replace("\r", "", $xml));
+    }
+
+    public function testInvalidResponse()
+    {
+        $response = new ResponseCore(array(), $this->validXml, 300);
+        try {
+            new GetRefererResult($response);
+            $this->assertTrue(false);
+        } catch (OssException $e) {
+
+        }
+    }
+}

+ 43 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Core\OssException;
+use OSS\Model\LoggingConfig;
+
+require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
+
+
+class OssClientBucketLoggingTest extends TestOssClientBase
+{
+    public function testBucket()
+    {
+        $loggingConfig = new LoggingConfig($this->bucket, 'prefix');
+        try {
+            $this->ossClient->putBucketLogging($this->bucket, $this->bucket, 'prefix');
+        } catch (OssException $e) {
+            var_dump($e->getMessage());
+            $this->assertTrue(false);
+        }
+        try {
+            Common::waitMetaSync();
+            $loggingConfig2 = $this->ossClient->getBucketLogging($this->bucket);
+            $this->assertEquals($loggingConfig->serializeToXml(), $loggingConfig2->serializeToXml());
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+        try {
+            Common::waitMetaSync();
+            $this->ossClient->deleteBucketLogging($this->bucket);
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+        try {
+            Common::waitMetaSync();
+            $loggingConfig3 = $this->ossClient->getBucketLogging($this->bucket);
+            $this->assertNotEquals($loggingConfig->serializeToXml(), $loggingConfig3->serializeToXml());
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+    }
+}

+ 111 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php

@@ -0,0 +1,111 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Core\OssException;
+use OSS\Http\RequestCore;
+use OSS\Http\ResponseCore;
+use OSS\OssClient;
+
+require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
+
+
+class OssClientSignatureTest extends TestOssClientBase
+{
+    function testGetSignedUrlForGettingObject()
+    {
+        $object = "a.file";
+        $this->ossClient->putObject($this->bucket, $object, file_get_contents(__FILE__));
+        $timeout = 3600;
+        try {
+            $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout);
+        } catch (OssException $e) {
+            $this->assertFalse(true);
+        }
+
+        $request = new RequestCore($signedUrl);
+        $request->set_method('GET');
+        $request->add_header('Content-Type', '');
+        $request->send_request();
+        $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
+        $this->assertEquals(file_get_contents(__FILE__), $res->body);
+    }
+
+    public function testGetSignedUrlForPuttingObject()
+    {
+        $object = "a.file";
+        $timeout = 3600;
+        try {
+            $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout, "PUT");
+            $content = file_get_contents(__FILE__);
+            $request = new RequestCore($signedUrl);
+            $request->set_method('PUT');
+            $request->add_header('Content-Type', '');
+            $request->add_header('Content-Length', strlen($content));
+            $request->set_body($content);
+            $request->send_request();
+            $res = new ResponseCore($request->get_response_header(),
+                $request->get_response_body(), $request->get_response_code());
+            $this->assertTrue($res->isOK());
+        } catch (OssException $e) {
+            $this->assertFalse(true);
+        }
+    }
+
+    public function testGetSignedUrlForPuttingObjectFromFile()
+    {
+        $file = __FILE__;
+        $object = "a.file";
+        $timeout = 3600;
+        $options = array('Content-Type' => 'txt');
+        try {
+            $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout, "PUT", $options);
+            $request = new RequestCore($signedUrl);
+            $request->set_method('PUT');
+            $request->add_header('Content-Type', 'txt');
+            $request->set_read_file($file);
+            $request->set_read_stream_size(filesize($file));
+            $request->send_request();
+            $res = new ResponseCore($request->get_response_header(),
+                $request->get_response_body(), $request->get_response_code());
+            $this->assertTrue($res->isOK());
+        } catch (OssException $e) {
+            $this->assertFalse(true);
+        }
+
+    }
+
+    public function tearDown()
+    {
+        $this->ossClient->deleteObject($this->bucket, "a.file");
+        parent::tearDown();
+    }
+
+    public function setUp()
+    {
+        parent::setUp();
+        /**
+         *  上传本地变量到bucket
+         */
+        $object = "a.file";
+        $content = file_get_contents(__FILE__);
+        $options = array(
+            OssClient::OSS_LENGTH => strlen($content),
+            OssClient::OSS_HEADERS => array(
+                'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT',
+                'Cache-Control' => 'no-cache',
+                'Content-Disposition' => 'attachment;filename=oss_download.log',
+                'Content-Encoding' => 'utf-8',
+                'Content-Language' => 'zh-CN',
+                'x-oss-server-side-encryption' => 'AES256',
+                'x-oss-meta-self-define-title' => 'user define meta info',
+            ),
+        );
+
+        try {
+            $this->ossClient->putObject($this->bucket, $object, $content, $options);
+        } catch (OssException $e) {
+            $this->assertFalse(true);
+        }
+    }
+}

+ 70 - 0
vendor/composer/autoload_real.php

@@ -0,0 +1,70 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitf16474ac994ccc25392f403933800b79
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderInitf16474ac994ccc25392f403933800b79', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderInitf16474ac994ccc25392f403933800b79', 'loadClassLoader'));
+
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require_once __DIR__ . '/autoload_static.php';
+
+            call_user_func(\Composer\Autoload\ComposerStaticInitf16474ac994ccc25392f403933800b79::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
+
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
+        }
+
+        $loader->register(true);
+
+        if ($useStaticLoader) {
+            $includeFiles = Composer\Autoload\ComposerStaticInitf16474ac994ccc25392f403933800b79::$files;
+        } else {
+            $includeFiles = require __DIR__ . '/autoload_files.php';
+        }
+        foreach ($includeFiles as $fileIdentifier => $file) {
+            composerRequiref16474ac994ccc25392f403933800b79($fileIdentifier, $file);
+        }
+
+        return $loader;
+    }
+}
+
+function composerRequiref16474ac994ccc25392f403933800b79($fileIdentifier, $file)
+{
+    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+        require $file;
+
+        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+    }
+}

+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/1533712618.png-errors.txt

@@ -0,0 +1 @@
+2018-08-08 15:16:58: imagepng(/data/wwwroot/web/www.shiyongxiu.com/runtime/QRcode_cache/1533712618.png): failed to open stream: No such file or directory

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_13.dat


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_18.dat

@@ -0,0 +1,2 @@
+xÚí™A
+ƒ0E]çÖ…,2;sƒä&ÉÍšh¥ÛêO¡ôÝÈàã1&09OIv@DDÒÌ&§Ù‰K�XÈÕFv•<Ádqò9Ö<%h•¹Yïs!(d¥²ës;~||b(ÏøYůg#µ`œK ±S¼Åô¹Ä¶˜ùsàidß�Lg:Ó™Îtþ/gmª�™ƒkÅMâ3³{­4rTÈQýÿe¥·s·>ó<Ó™Ît¦3�éÌ;ïH¼#Ñ™Ît¦3�ÍYœ+og©hù¶óµÙ½¬lnðûF>Øi^»#awm;gè~pÛgìNs{6z’‘»ãºïÞäp¾Ê'

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_19.png


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_20.png


+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_3.dat

@@ -0,0 +1 @@
+xÚí“Á
À E{vë& à&°Y+¢b¤öÐkŸ'yù‘¤¿ÌÁa :äÀTXl�Þ¶$W+Ó�vû®îœ¢9}gRæ¬@H0YPB½ÆÃEmÚÚ?ûœÍ±ísœÖ"bµìt2cnÖé†É:½ﺭë;¿Y§“ÃzÿQã«7¿Ô

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_33.png


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_38.png


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_4.png


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_40.dat

@@ -0,0 +1,2 @@
+xΪνέA�ƒ@Π¬½υ€‹ξ�ή@oΆ7“�`“QfeΊδ•«PA>�¦ΐΪτ<?jjo5WNiz�›yΊWύ‰σ΄&]ί…C?“I�rώWβρ^;ο8·—
+γύs<Γ°ϋφS{Ε9^gEί}>γ°<]ίΥΠλί³bZ«nγ¥^A›φQ}[χ9^�]«yώμnajMά‡KΜ�1cΖ�3fΜ�1γΈΖ{ίW5}η½{ΝΡ7lMί�οή�xάI<ΌαK½¨ΖαΞ±yl3fΜ�1cΖ�3fΜ�1γ«Ϋ»Ω»={·“Ξ±yl3fΜ�1cΖ�3fΜ�1γ«Ϋ»Ω»={·“Ξ±yl3fΜ�1cΖ�3fΜ�1γ«Ϋ»Ω»={·“Ξ±yl3fΜ�1cΖ�3fΜ�1γ«Ϋ»Ω»={·“Ξ±yl3fΜ�1cΖ�3fΜ�ρχη�SΚ‘�Σ’7¥HΖKήΌg\ηΎβuυίΟ_��r'4ά[ηή-Ζ]›…q�ϋL·η8Ζ�±ΫY1q„»�‹Δ!ξ—ήΤ/(%ϋ

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_8.dat


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/frame_9.png


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_109_0.dat

@@ -0,0 +1,2 @@
+xÚíÚ=
+€0н§iï9'Åb‡$ ¾tËýáÚû^#i�ª¥Ëi?³ÅôÛbúK[AUØFå¾�Ƶijx]mŸ]2Ž������-Ä–�KŽ~ÏVw}¶X›ûÆÆÆÆÆÆÆ&O²É“Þ666666yRž”'½%lllll/´åhœl…Ãîm	¹¤ê�ádël™¶´3Ù+ïÛmÍ«

+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_145_0.dat

@@ -0,0 +1,2 @@
+xÚíÜ;
+…0Ð>«Iö¿9+EñÇ{ˆõ$åm†ƒ^˜&µŽ§u¼³S"µÍDŒþ6ÚŸ]9ùÉè8ìU“M£�“bÔÒ¾£Y¤Òù[ß2拉Ĉ#FŒ1bĈ£Ï%ôµiRNšæ½�–ѳ�ì#;›#FŒ1bĈ‘N«¯1Òií#FŒ1bĈ#FŒtZ}�‘Nk1bĈ#FŒ1b¤ÓêkŒtZ;›#FŒ1bÄèõF�V-ŒÂ�uè"IoD-Œ*£7uû×jÚ>b´MV“+

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_29_0.dat


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_0/mask_85_0.dat

@@ -0,0 +1,2 @@
+xÚíØ1
+À …á=§Iî¹NE‘Z_†À·¯m E÷Vqyº2Yh,S‹[ÏúŸ­gý¥UXJkd¼×.Öß~>Öž!�ÅŠ+V¬å¬ª½õöí÷.Ýõ±2¯X±bÅŠ•ÿ¬Ì+V¬X±–²ê.ökBèÞz±·ÔwðƒÕ±¦Ì€gÌkë¡YZý

+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_161_1.dat

@@ -0,0 +1 @@
+xÚíØ1€0ÐÝÓÐû_Î…XÓ¨�Å¡yi~…ˆ¬Q©bÖÕkvÈp±á³ê7'M
u¸Ù=¼]ņÙð([2dÈ�áÏ+þÛ\'2”‡2dÈ�!C†2´s0/3d(½)2dÈ�!C†24ë1dhç 2dÈ�!C†2dhÖcÈ�¡<dÈ�!C†2dÈ�¡�ƒy™!CyèMaÈ�!C†2dØÞ0¿—šõ^š—4”‡[ž‹E2�

+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_177_1.dat

@@ -0,0 +1 @@
+xÚíØ1€ ÀÞ×ÿÿœÍE¨¬Œp0×XÐà„,a#rÚÊ}®¨6}ÇŒ§¿Ùÿ»¶‰±~އ£\Ð8 •ÆŒ3f̘1cÆŒ—7®ðÎ{Ö3f,�ÝyŒ3f̘1cÆŒ3fÌX_¡¯`ÌXï&�3f̘1cÆŒ3f̘±ÞM_Á˜1cy̘1cÆŒ3f̘1cÆŒë+3f,�ÝyŒ3f̘1cÆŒ3fÌX_¡bÌXï&�3f̘1cÆŒ3fÌxãü2žd¬¯øÔX'Äx[cy|¨ñ
¸•3ë

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_57_1.dat


+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_61_1.dat

@@ -0,0 +1 @@
+xÚ30€Cb�pPş™ÝŘĹi`÷@ę&ÚßH^§Đn¨a†d�Q»Gíµ{Ôn<v“Z®ÁĹGíMkŁvŹÚ=j7¶¶â ł›Öĺ9mäán7ťâ›<»ŞłÂh

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_1/mask_77_1.dat


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_141_2.dat

@@ -0,0 +1,2 @@
+xзМэ=
+ю п╫╖┴В©°▀t*-┬?╠╪░M┘┤А[▄hUЖУ]WпЭB╞Г;√нтd╗wS▓j>В╜l 
	├├f▌ф└спппппппппх 44╡&








█╛)Oях чY⌠Fж4А444444444c4~°9SЁ:3пп▄в≤p г╝>╝

+ 3 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_157_2.dat

@@ -0,0 +1,3 @@
+xÚíÜ1
+€0À>¯¹üÿs6‚M¹�ÎqUH1¤XØ&Uç̘½fÝ/u-çûé'ñíæ.ºû[ÍKGGGGGGGGGG÷H×|NG¨“(ttttttttttú¬NF§ÏÊ;::::::::::}–ŽNŸ¥££££££££££Ózèè$
+�>«“Ñé³…ŽŽŽŽŽŽŽŽn­üAø#ºî^AG—§“(t¯ì =3{

+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_177_2.dat

@@ -0,0 +1,2 @@
+xÚíÝ1
+Ŕ EÁ>§Yďą4’V$Í~±,CŠ…Ľ&UóŚŢ÷;OoŠk5b÷ŃĎ™áâ”óŽG°x9ĄŰ%&&&&&&&&&&&n$îöőOL|‡Řv#&&&&&&&&&&&&&ÖÝbbÝŤ��������������Xw#&ÖÝl7bbbbbbbbbbbbbbÝM"ÖÝl7bbbbbbbbbbbbbbÝMa!&ÖÝ�‰‰‰‰‰‰‰‰‰‰‰‰3Ä)U<WܱWź/¶Ý�#în Â

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_53_2.dat


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_2/mask_69_2.dat


+ 4 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_117_3.dat

@@ -0,0 +1,4 @@
+xÚíÛ1
+Ã0Ð]§Qî¹.¡xIÚB$úŒ‡€Á?~!É<ÇQ?ß#–ç¶Ð5µ/tIÝJ8owøié{áßçâ¬}£Sø˜^�ã~‡¢½q猉P„	&L˜0áJá¢î1ÊúϻݢðD×K'¬J¨Ã„	&L˜0á�…õÃn
+«ê0a„	&Lxgaý°Gƒ°*¡&L˜0aÂ{
+g{衟þ2¨ë‡s¢Ή~˜ðì7\]%r¢Jôö9nZ

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_121_3.dat


+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_173_3.dat

@@ -0,0 +1 @@
+xÚíÝA‚0Ð}O3ÜÿrnPkŒTTèŒyM$&e/|ù"ÖµdÝÝjÝuþy[¥a»i‹KˆÑ{úòÌM	S&z[B…UBÂRIÂCÞ!Ón5Æ\w«4ìB	$�@	$�°[”ÿ°£3Ûëc²½E^%”xw á	ÒA:�@	$�@	$�@	$��B‚fI³DÂ	ÒA:�@	$�@	$�@	$�p¶Í’f‰„Ã%Hé@	$�@	$�@	$�@BR	š%Í	¿” ¤	$�@	$�@	$�@	)$h–4K$L� ¤	$�@	$�@	$�@³„ü_{”PgØÛ´yŽÍ>áƒ�VMm–¢R³•š¥‘�ø™Òá¸t(1ï…¢|

+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_45_3.dat

@@ -0,0 +1,2 @@
+xÚí”K
+À D÷sšñþ—ëFJ(&™)ô³0d¡øÐ‡’³FÞg!Œ[8Ò=èÛ&ËiaÂÎD)Åd8&AËÕ¬¡a³áÀÛä1'™I–I”«×³ž7Ù9ù­	exÀ�“ß¾È	�ÄÒIìû&Ö�´¯Cçu´ÍJy‚

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_3/mask_97_3.dat


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_101_4.dat

@@ -0,0 +1,2 @@
+xÚíšA€ Füÿs^1 b¤‹ÆáИª]ÃØÖ4šm+Æ8Ð+˜Ve¬Ä^H­R]–\Íc‡®ŠÛ
+·oõWN#¸îXáéØá+lðž­HE³cp�\à—^.Î9qñW9ø¼ïç"ò…:¸À.ŸæBßÿó÷ùBƒ\àæ0Ìa˜ÃPǨcp�\ÞÍÅïO•’‹N¥qjpGÖô}“ô}¥Ê$.äË…Š§ÐŠ�

+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_153_4.dat

@@ -0,0 +1,2 @@
+xзМь1┐0юч╞ЯЩЪsi,')p!Д╣4.эп⌠;╠╫©WUmъГj=©╡└╡Й╟й.NO╬Ч>ЗШ ГT╣з█[В╬S7vэш°g╤q∙└?ФВчр
+ {pe╧o⌠3н8Ц▄3н8Ц▄3н8{ьYXzПА,╟╡ш_ЗO╓сYfeЯнТ3sсэД▄3н8Ц▄3н8Ц▄3╧├\C╝!вполMs⌠3н8Ц▄3н8Ц▄3нДr
╧├\C?379Ц▄3н8Ц▄3н8Ц▄3╧├\C╝!в07мMн8Ц▄3н8Ц▄3ннq╤ЧзИ,╩╡кmMrs█⌡k╓Wv°3ЩЛю~√Wэ─WB

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_169_4.dat


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_21_4.dat


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_37_4.dat


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_4/mask_93_4.dat

@@ -0,0 +1,2 @@
+xЪнЩK
+А „бЅ§Iо№n$}P‚ЕЊBщ]ё‘Nй§И@НОбо%sЊfkТ«ў}CzтЌoA}aКЅ2Ѕ|¤ой~ШАЄD&ћl=ҐкАЬз¦ЌYњ®•БwЬqЗ}і» q\ЬEйYі�jб®K_вОyзћБwЬqЗwz$=’Й=ѓ;оёгЋы_Э‹яЂ>Ьхйџ+СpУУцH“цИйЬ9пўDЮi

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_129_5.dat


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_133_5.dat

@@ -0,0 +1,2 @@
+xÚíÜA
+Ã0DѽOcÝÿr]4%1mCTåÉÆ¯„Ð÷xΜ[DvÌ=Æá{Fúú–E¤Ï�µˆäq½?Ý¿Ü9ûkeÑ­ù}±'2^ý•cœçš4G”ž�Û:¶3=J£K-šôF0‚Œ`#ÿÍHÒþˆwð'#ß<{Ú~—Z4é:BG舻F0‚Œ`„áGø~„ŽÐ:‚Œ`#Á?Â�ð#t„ŽÐw-Œ`#Á?Â�ð#ü¡#t#ÁF0r·…ïÙ}Qõš}e¤üÝòR‹Ú;ø<ùçCžéV‹}Ñ—‘ìó¢ËÙY-Hž

+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_29_5.dat

@@ -0,0 +1,2 @@
+xÚÕ’]
+À ƒß=M¿û_n0W	.«Ž=-ÁŸ4¡mÄy×B€ìÓ+²‰·ÜR×á“çôˆ‹†$¼­Æƒ.=s/,+îB÷7žó³��q®zÄ~§q>=GéÙêŽZùyÎ:—ÜDRŸ«

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_65_5.dat


binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_5/mask_85_5.dat


+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_109_6.dat

@@ -0,0 +1 @@
+xΪν�AΒ0ο~�ύ�Ο�DBHΣC½HγV2‡Ζ0Ωn¥uo�ς£lψμ――²―Λ»=ΫΆs9[��υl'«Ίέ?™νλ7ΟνR"―&“§Ϋ2™ΥίΟ:7QqX_•n»
§ϋ]£$ΣΥ�–EIYτΑ*¦³ΖL”όq0	“0	“0ω{LJύδΠ·(s\�Ι³w�τΎ‰¦Xχ-Σ7^φΡIt�„I�„I�„Iό$~?‰NΆ“0	“0	“0‰�ΔOβ'ΡIt’g7LΒ$Lώ-“›„΅€Iuzrfr
Mχ“^κ'}“ιΝχ“•ωΙ(ΙO~R�ι]1Y²γL�Δ�u�ε9σ΅QΝΣ•

binární
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_165_6.dat


+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_57_6.dat

@@ -0,0 +1,2 @@
+xÚíWÑà |çkàÿ®K¦ÂÜQ¹-Ë^@cª"Wr^U‡YÅÔM³>_Ý�`åÃî8¦޹€GÁ1“œ`–B”Ý`;»ù+ØÂì}åÄÌØ&s£ÒçŒ]<§J…QF=mb3 UŒF'ÚØ6¶Æ–á„E âü€¹5õJa÷wZØÖù60¢¬
+ß[¹·ë¶9¡±ý9¶”ì{Á–SšÛ\Ýž8�Õ`k&­Áœos}{â[Rß¾ý[¥+—þwðºÕO‹èd^jW

+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_61_6.dat

@@ -0,0 +1,2 @@
+xÚí—KŔ D÷s¸˙ĺÚ¤µE~Ý‚ŤihĚÄ'™
+ŃŽÍŔňNĎ'oVWßéŕŁjspčÚCzÓţěŃÎż©ĄĂaĚĎg!«…#WD%~ÜË�Y?±JŰfŚÚĺR€E¸˘ŽÁ�KoćÍĽ™Ç�§ü|É�ËŽ*ĚO˙P7Ź Šž‡ĺŰnľëĽ˝Ą™7ósă†`ž˝ťďĚÍÖŔősúĺçdôDľź˙ąźsé~>ý<ßiĚK'Žl'¸×9ĄűĐ%.ĆîÄ7

+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_6/mask_77_6.dat

@@ -0,0 +1 @@
+xÚí˜Ñà EßùøÿŸÛ²i‹ÙÅVäaË.š¦±F©§pST›YÖô4q÷ú~´z…«=Ÿä:öÍ’
û6îøÍüôm8‘¾:#0Pض�iDy:2Å '§ùZ­s±Š&}Ïôçæ»œ\r‘0\¥Åš•˜Xw¬Â;iP¬äàÈ”Lœ)ÒS¬±£eÔ•Ü{hˆDu9÷L‘žb�½•©JÞÒS÷ŒSÆ)™’)™ÞgZš{÷þeÜøŸé)ã”qJ¦dúLw+ƒ#Ó3-V0ÅÕ·lî�jƒ¹™ýÚ ×S-ÕS
ê½9=ݯ÷¦5ÁPPïõq1Mõ?ågÓ

+ 2 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_7/mask_145_7.dat

@@ -0,0 +1,2 @@
+xΪν�Ρ
+Γ Eίσ5ϊ�?W6Zµ ¦-›^ι±ΰƒ2‰q§ΧΔbG‰�ΆX6(Ζ‰uΝ"“LbΡbέGuϋχ�ΞΌ®··Gkψ¨:HwA[Ώj�Τm―ψHΆψ¬έ�ο3οΕ¬ύξίβOπkQ{l·|κ»θT›†EmΗJfΩLΚ?�Ϊ2"&Α¬Α¬Α¬Α¬ΑΪ¬)Δk©έRfΆ—µΩc�ο“ΡΜ‰ΣεF�Ρ,§“z©¦�=θΊ†®±‡„5Xƒ5Xƒ5Xƒµ7±FΌ¶\Ό¦p–�ΪUs#θΊ†®±‡„5Xƒ5Xƒ5Xƒµ°FΌ¶dΌΖYφ•άΊ†®΅kμ!a
Φ`
Φ`
Φ`�o�‰Χ8ΛζΫct
]CΧΨCΒ¬Α¬Α¬
gMε­‚5…[΄N¬%ιΔkχh•ρZp®?›―Iά£•Ο²ƒ^n$�ΡζήY7AΧΦΖλZP[¶
fΘ“0

+ 1 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/cache/mask_7/mask_53_7.dat

@@ -0,0 +1 @@
+xÚí–KŔ D÷sĽ˙ĺš&´RĺkşiŞ&,H)řtD×jÁ=¨µĐÎQa�ž«P"dąs1ZyC®|hey­üCvéaH°›7ř‰+ůO…Ĺu�ĄQÎsZtb…°Íđ7µvăúŔŠ­h™VµĚµ~čůŕ·1#˙~‡[Ëf�†ůŮćfHkZ¶JtµśźmZÎĎ6˝—ÉsŐúá‹�w¸rÍ&C×ß¶f

+ 54 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/qrconst.php

@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * PHP QR Code encoder
+ *
+ * Common constants
+ *
+ * Based on libqrencode C library distributed under LGPL 2.1
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
+ *
+ * PHP QR Code is distributed under LGPL 3
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+ 
+	// Encoding modes
+	 
+	define('QR_MODE_NUL', -1);
+	define('QR_MODE_NUM', 0);
+	define('QR_MODE_AN', 1);
+	define('QR_MODE_8', 2);
+	define('QR_MODE_KANJI', 3);
+	define('QR_MODE_STRUCTURE', 4);
+
+	// Levels of error correction.
+
+	define('QR_ECLEVEL_L', 0);
+	define('QR_ECLEVEL_M', 1);
+	define('QR_ECLEVEL_Q', 2);
+	define('QR_ECLEVEL_H', 3);
+	
+	// Supported output formats
+	
+	define('QR_FORMAT_TEXT', 0);
+	define('QR_FORMAT_PNG',  1);
+	
+	class qrstr {
+		public static function set(&$srctab, $x, $y, $repl, $replLen = false) {
+			$srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));
+		}
+	}	

+ 95 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/qrimage.php

@@ -0,0 +1,95 @@
+<?php
+/*
+ * PHP QR Code encoder
+ *
+ * Image output of code using GD2
+ *
+ * PHP QR Code is distributed under LGPL 3
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+ 
+    define('QR_IMAGE', true);
+
+    class QRimage {
+    
+        //----------------------------------------------------------------------
+        public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) 
+        {
+            $image = self::image($frame, $pixelPerPoint, $outerFrame);
+            
+            if ($filename === false) {
+                Header("Content-type: image/png");
+                ImagePng($image);
+            } else {
+                if($saveandprint===TRUE){
+                    ImagePng($image, $filename);
+                    header("Content-type: image/png");
+                    ImagePng($image);
+                }else{
+                    ImagePng($image, $filename);
+                }
+            }
+            
+            ImageDestroy($image);
+        }
+    
+        //----------------------------------------------------------------------
+        public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) 
+        {
+            $image = self::image($frame, $pixelPerPoint, $outerFrame);
+            
+            if ($filename === false) {
+                Header("Content-type: image/jpeg");
+                ImageJpeg($image, null, $q);
+            } else {
+                ImageJpeg($image, $filename, $q);            
+            }
+            
+            ImageDestroy($image);
+        }
+    
+        //----------------------------------------------------------------------
+        private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) 
+        {
+            $h = count($frame);
+            $w = strlen($frame[0]);
+            
+            $imgW = $w + 2*$outerFrame;
+            $imgH = $h + 2*$outerFrame;
+            
+            $base_image =ImageCreate($imgW, $imgH);
+            
+            $col[0] = ImageColorAllocate($base_image,255,255,255);
+            $col[1] = ImageColorAllocate($base_image,0,0,0);
+
+            imagefill($base_image, 0, 0, $col[0]);
+
+            for($y=0; $y<$h; $y++) {
+                for($x=0; $x<$w; $x++) {
+                    if ($frame[$y][$x] == '1') {
+                        ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); 
+                    }
+                }
+            }
+            
+            $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint);
+            ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH);
+            ImageDestroy($base_image);
+            
+            return $target_image;
+        }
+    }

+ 43 - 0
vendor/dh2y/think-qrcode/src/phpqrcode/qrlib.php

@@ -0,0 +1,43 @@
+<?php
+/*
+ * PHP QR Code encoder
+ *
+ * Root library file, prepares environment and includes dependencies
+ *
+ * Based on libqrencode C library distributed under LGPL 2.1
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
+ *
+ * PHP QR Code is distributed under LGPL 3
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+	
+	$QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR;
+	
+	// Required libs
+	
+	include $QR_BASEDIR."qrconst.php";
+	include $QR_BASEDIR."qrconfig.php";
+	include $QR_BASEDIR."qrtools.php";
+	include $QR_BASEDIR."qrspec.php";
+	include $QR_BASEDIR."qrimage.php";
+	include $QR_BASEDIR."qrinput.php";
+	include $QR_BASEDIR."qrbitstream.php";
+	include $QR_BASEDIR."qrsplit.php";
+	include $QR_BASEDIR."qrrscode.php";
+	include $QR_BASEDIR."qrmask.php";
+	include $QR_BASEDIR."qrencode.php";
+

+ 126 - 0
vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache.php

@@ -0,0 +1,126 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license. For more information, see
+ * <http://www.doctrine-project.org>.
+ */
+
+namespace Doctrine\Common\Cache;
+
+use \Memcache;
+
+/**
+ * Memcache cache provider.
+ *
+ * @link   www.doctrine-project.org
+ * @since  2.0
+ * @author Benjamin Eberlei <kontakt@beberlei.de>
+ * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
+ * @author Jonathan Wage <jonwage@gmail.com>
+ * @author Roman Borschel <roman@code-factory.org>
+ * @author David Abdemoulaie <dave@hobodave.com>
+ */
+class MemcacheCache extends CacheProvider
+{
+    /**
+     * @var Memcache|null
+     */
+    private $memcache;
+
+    /**
+     * Sets the memcache instance to use.
+     *
+     * @param Memcache $memcache
+     *
+     * @return void
+     */
+    public function setMemcache(Memcache $memcache)
+    {
+        $this->memcache = $memcache;
+    }
+
+    /**
+     * Gets the memcache instance used by the cache.
+     *
+     * @return Memcache|null
+     */
+    public function getMemcache()
+    {
+        return $this->memcache;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doFetch($id)
+    {
+        return $this->memcache->get($id);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doContains($id)
+    {
+        $flags = null;
+        $this->memcache->get($id, $flags);
+        
+        //if memcache has changed the value of "flags", it means the value exists
+        return ($flags !== null);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doSave($id, $data, $lifeTime = 0)
+    {
+        if ($lifeTime > 30 * 24 * 3600) {
+            $lifeTime = time() + $lifeTime;
+        }
+        return $this->memcache->set($id, $data, 0, (int) $lifeTime);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doDelete($id)
+    {
+        // Memcache::delete() returns false if entry does not exist
+        return $this->memcache->delete($id) || ! $this->doContains($id);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doFlush()
+    {
+        return $this->memcache->flush();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doGetStats()
+    {
+        $stats = $this->memcache->getStats();
+        return array(
+            Cache::STATS_HITS   => $stats['get_hits'],
+            Cache::STATS_MISSES => $stats['get_misses'],
+            Cache::STATS_UPTIME => $stats['uptime'],
+            Cache::STATS_MEMORY_USAGE     => $stats['bytes'],
+            Cache::STATS_MEMORY_AVAILABLE => $stats['limit_maxbytes'],
+        );
+    }
+}

+ 72 - 0
vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CacheProviderTest.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace Doctrine\Tests\Common\Cache;
+
+class CacheProviderTest extends \Doctrine\Tests\DoctrineTestCase
+{
+    public function testFetchMultiWillFilterNonRequestedKeys()
+    {
+        /* @var $cache \Doctrine\Common\Cache\CacheProvider|\PHPUnit_Framework_MockObject_MockObject */
+        $cache = $this->getMockForAbstractClass(
+            'Doctrine\Common\Cache\CacheProvider',
+            array(),
+            '',
+            true,
+            true,
+            true,
+            array('doFetchMultiple')
+        );
+
+        $cache
+            ->expects($this->once())
+            ->method('doFetchMultiple')
+            ->will($this->returnValue(array(
+                '[foo][1]' => 'bar',
+                '[bar][1]' => 'baz',
+                '[baz][1]' => 'tab',
+            )));
+
+        $this->assertEquals(
+            array('foo' => 'bar', 'bar' => 'baz'),
+            $cache->fetchMultiple(array('foo', 'bar'))
+        );
+    }
+
+    public function testFailedDeleteAllDoesNotChangeNamespaceVersion()
+    {
+        /* @var $cache \Doctrine\Common\Cache\CacheProvider|\PHPUnit_Framework_MockObject_MockObject */
+        $cache = $this->getMockForAbstractClass(
+            'Doctrine\Common\Cache\CacheProvider',
+            array(),
+            '',
+            true,
+            true,
+            true,
+            array('doFetch', 'doSave', 'doContains')
+        );
+
+        $cache
+            ->expects($this->once())
+            ->method('doFetch')
+            ->with('DoctrineNamespaceCacheKey[]')
+            ->will($this->returnValue(false));
+
+        // doSave is only called once from deleteAll as we do not need to persist the default version in getNamespaceVersion()
+        $cache
+            ->expects($this->once())
+            ->method('doSave')
+            ->with('DoctrineNamespaceCacheKey[]')
+            ->will($this->returnValue(false));
+
+        // After a failed deleteAll() the local namespace version is not increased (still 1). Otherwise all data written afterwards
+        // would be lost outside the current instance.
+        $cache
+            ->expects($this->once())
+            ->method('doContains')
+            ->with('[key][1]')
+            ->will($this->returnValue(true));
+
+        $this->assertFalse($cache->deleteAll(), 'deleteAll() returns false when saving the namespace version fails');
+        $cache->contains('key');
+    }
+}

+ 47 - 0
vendor/doctrine/cache/tests/Doctrine/Tests/Common/Cache/CouchbaseCacheTest.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace Doctrine\Tests\Common\Cache;
+
+use Couchbase;
+use Doctrine\Common\Cache\CouchbaseCache;
+
+class CouchbaseCacheTest extends CacheTest
+{
+    private $couchbase;
+
+    public function setUp()
+    {
+        if (extension_loaded('couchbase')) {
+            try {
+                $this->couchbase = new Couchbase('127.0.0.1', 'Administrator', 'password', 'default');
+            } catch(Exception $ex) {
+                 $this->markTestSkipped('Could not instantiate the Couchbase cache because of: ' . $ex);   
+            }
+        } else {
+            $this->markTestSkipped('The ' . __CLASS__ .' requires the use of the couchbase extension');
+        }
+    }
+
+    public function testNoExpire() 
+    {
+        $cache = $this->_getCacheDriver();
+        $cache->save('noexpire', 'value', 0);
+        sleep(1);
+        $this->assertTrue($cache->contains('noexpire'), 'Couchbase provider should support no-expire');
+    }
+
+    public function testLongLifetime()
+    {
+        $cache = $this->_getCacheDriver();
+        $cache->save('key', 'value', 30 * 24 * 3600 + 1);
+
+        $this->assertTrue($cache->contains('key'), 'Couchbase provider should support TTL > 30 days');
+    }
+
+    protected function _getCacheDriver()
+    {
+        $driver = new CouchbaseCache();
+        $driver->setCouchbase($this->couchbase);
+        return $driver;
+    }
+}

+ 10 - 0
vendor/doctrine/cache/tests/Doctrine/Tests/DoctrineTestCase.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace Doctrine\Tests;
+
+/**
+ * Base testcase class for all Doctrine testcases.
+ */
+abstract class DoctrineTestCase extends \PHPUnit_Framework_TestCase
+{
+}

+ 19 - 0
vendor/doctrine/cache/tests/Doctrine/Tests/TestInit.php

@@ -0,0 +1,19 @@
+<?php
+/*
+ * This file bootstraps the test environment.
+ */
+error_reporting(E_ALL | E_STRICT);
+
+if (file_exists(__DIR__ . '/../../../vendor/autoload.php')) {
+    // dependencies were installed via composer - this is the main project
+    $classLoader = require __DIR__ . '/../../../vendor/autoload.php';
+} elseif (file_exists(__DIR__ . '/../../../../../autoload.php')) {
+    // installed as a dependency in `vendor`
+    $classLoader = require __DIR__ . '/../../../../../autoload.php';
+} else {
+    throw new Exception('Can\'t find autoload.php. Did you install dependencies via Composer?');
+}
+
+/* @var $classLoader \Composer\Autoload\ClassLoader */
+$classLoader->add('Doctrine\\Tests\\', __DIR__ . '/../../');
+unset($classLoader);

+ 29 - 0
vendor/firebase/php-jwt/composer.json

@@ -0,0 +1,29 @@
+{
+    "name": "firebase/php-jwt",
+    "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
+    "homepage": "https://github.com/firebase/php-jwt",
+    "authors": [
+        {
+            "name": "Neuman Vong",
+            "email": "neuman+pear@twilio.com",
+            "role": "Developer"
+        },
+        {
+            "name": "Anant Narayanan",
+            "email": "anant@php.net",
+            "role": "Developer"
+        }
+    ],
+    "license": "BSD-3-Clause",
+    "require": {
+        "php": ">=5.3.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "Firebase\\JWT\\": "src"
+        }
+    },
+    "require-dev": {
+        "phpunit/phpunit": " 4.8.35"
+    }
+}

+ 85 - 0
vendor/guzzle/guzzle/docs/getting-started/overview.rst

@@ -0,0 +1,85 @@
+=================
+Welcome to Guzzle
+=================
+
+What is Guzzle?
+~~~~~~~~~~~~~~~
+
+Guzzle is a PHP HTTP client and framework for building web service clients. Guzzle takes the pain out of sending HTTP
+requests and the redundancy out of creating web service clients.
+
+Features at a glance
+--------------------
+
+- All the power of cURL with a simple interface.
+- Persistent connections and parallel requests.
+- Streams request and response bodies
+- Service descriptions for quickly building clients.
+- Powered by the Symfony2 EventDispatcher.
+- Use all of the code or only specific components.
+- Plugins for caching, logging, OAuth, mocks, and more
+- Includes a custom node.js webserver to test your clients.
+- Service descriptions for defining the inputs and outputs of an API
+- Resource iterators for traversing paginated resources
+- Batching for sending a large number of requests as efficiently as possible
+
+.. code-block:: php
+
+    // Really simple using a static facade
+    Guzzle\Http\StaticClient::mount();
+    $response = Guzzle::get('http://guzzlephp.org');
+
+    // More control using a client class
+    $client = new \Guzzle\Http\Client('http://guzzlephp.org');
+    $request = $client->get('/');
+    $response = $request->send();
+
+License
+-------
+
+Licensed using the `MIT license <http://opensource.org/licenses/MIT>`_.
+
+    Copyright (c) 2013 Michael Dowling <https://github.com/mtdowling>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+
+Contributing
+------------
+
+Guidelines
+~~~~~~~~~~
+
+This is still a work in progress, but there are only a few rules:
+
+1. Guzzle follows PSR-0, PSR-1, and PSR-2
+2. All pull requests must include unit tests to ensure the change works as expected and to prevent future regressions
+
+Reporting a security vulnerability
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We want to ensure that Guzzle is a secure HTTP client library for everyone. If you've discovered a security
+vulnerability in Guzzle, we appreciate your help in disclosing it to us in a
+`responsible manner <http://en.wikipedia.org/wiki/Responsible_disclosure>`_.
+
+Publicly disclosing a vulnerability can put the entire community at risk. If you've discovered a security concern,
+please email us at security@guzzlephp.org. We'll work with you to make sure that we understand the scope of the issue,
+and that we fully address your concern. We consider correspondence sent to security@guzzlephp.org our highest priority,
+and work to address any issues that arise as quickly as possible.
+
+After a security vulnerability has been corrected, a security hotfix release will be deployed as soon as possible.

+ 97 - 0
vendor/guzzle/guzzle/docs/iterators/guzzle-iterators.rst

@@ -0,0 +1,97 @@
+================
+Guzzle iterators
+================
+
+Guzzle provides several SPL iterators that can be used with other SPL iterators, including Guzzle resource iterators.
+Guzzle's ``guzzle/iterator`` component can also be used independently of the rest of Guzzle through Packagist and
+Composer: https://packagist.org/packages/guzzle/iterator
+
+ChunkedIterator
+---------------
+
+Pulls out multiple values from an inner iterator and yields and array of values for each outer iteration -- essentially
+pulling out chunks of values from the inner iterator.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\ChunkedIterator;
+
+    $inner = new ArrayIterator(range(0, 8));
+    $chunkedIterator = new ChunkedIterator($inner, 2);
+
+    foreach ($chunkedIterator as $chunk) {
+        echo implode(', ', $chunk) . "\n";
+    }
+
+    // >>> 0, 1
+    // >>> 2, 3
+    // >>> 4, 5
+    // >>> 6, 7
+    // >>> 8
+
+FilterIterator
+--------------
+
+This iterator is used to filter values out of the inner iterator. This iterator can be used when PHP 5.4's
+CallbackFilterIterator is not available.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\FilterIterator;
+
+    $inner = new ArrayIterator(range(1, 10));
+    $filterIterator = new FilterIterator($inner, function ($value) {
+        return $value % 2;
+    });
+
+    foreach ($filterIterator as $value) {
+        echo $value . "\n";
+    }
+
+    // >>> 2
+    // >>> 4
+    // >>> 6
+    // >>> 8
+    // >>> 10
+
+MapIterator
+-----------
+
+This iterator modifies the values of the inner iterator before yielding.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\MapIterator;
+
+    $inner = new ArrayIterator(range(0, 3));
+
+    $mapIterator = new MapIterator($inner, function ($value) {
+        return $value * 10;
+    });
+
+    foreach ($mapIterator as $value) {
+        echo $value . "\n";
+    }
+
+    // >>> 0
+    // >>> 10
+    // >>> 20
+    // >>> 30
+
+MethodProxyIterator
+-------------------
+
+This decorator is useful when you need to expose a specific method from an inner iterator that might be wrapper
+by one or more iterator decorators. This decorator proxies missing method calls to each inner iterator until one
+of the inner iterators can fulfill the call.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\MethodProxyIterator;
+
+    $inner = new \ArrayIterator();
+    $proxy = new MethodProxyIterator($inner);
+
+    // Proxy method calls to the ArrayIterator
+    $proxy->append('a');
+    $proxy->append('b');

+ 29 - 0
vendor/guzzle/guzzle/docs/plugins/md5-validator-plugin.rst

@@ -0,0 +1,29 @@
+====================
+MD5 validator plugin
+====================
+
+Entity bodies can sometimes be modified over the wire due to a faulty TCP transport or misbehaving proxy. If an HTTP
+response contains a Content-MD5 header, then a MD5 hash of the entity body of a response can be compared against the
+Content-MD5 header of the response to determine if the response was delivered intact. The
+``Guzzle\Plugin\Md5\Md5ValidatorPlugin`` will throw an ``UnexpectedValueException`` if the calculated MD5 hash does
+not match the Content-MD5 header value:
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Md5\Md5ValidatorPlugin;
+
+    $client = new Client('http://www.test.com/');
+
+    $md5Plugin = new Md5ValidatorPlugin();
+
+    // Add the md5 plugin to the client object
+    $client->addSubscriber($md5Plugin);
+
+    $request = $client->get('http://www.yahoo.com/');
+    $request->send();
+
+Calculating the MD5 hash of a large entity body or an entity body that was transferred using a Content-Encoding is an
+expensive operation. When working in high performance applications, you might consider skipping the MD5 hash
+validation for entity bodies bigger than a certain size or Content-Encoded entity bodies
+(see ``Guzzle\Plugin\Md5\Md5ValidatorPlugin`` for more information).

+ 27 - 0
vendor/guzzle/guzzle/docs/plugins/mock-plugin.rst

@@ -0,0 +1,27 @@
+===========
+Mock plugin
+===========
+
+The mock plugin is useful for testing Guzzle clients. The mock plugin allows you to queue an array of responses that
+will satisfy requests sent from a client by consuming the request queue in FIFO order.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Mock\MockPlugin;
+    use Guzzle\Http\Message\Response;
+
+    $client = new Client('http://www.test.com/');
+
+    $mock = new MockPlugin();
+    $mock->addResponse(new Response(200))
+         ->addResponse(new Response(404));
+
+    // Add the mock plugin to the client object
+    $client->addSubscriber($mock);
+
+    // The following request will receive a 200 response from the plugin
+    $client->get('http://www.example.com/')->send();
+
+    // The following request will receive a 404 response from the plugin
+    $client->get('http://www.test.com/')->send();

+ 66 - 0
vendor/guzzle/guzzle/src/Guzzle/Batch/AbstractBatchDecorator.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * Abstract decorator used when decorating a BatchInterface
+ */
+abstract class AbstractBatchDecorator implements BatchInterface
+{
+    /** @var BatchInterface Decorated batch object */
+    protected $decoratedBatch;
+
+    /**
+     * @param BatchInterface $decoratedBatch  BatchInterface that is being decorated
+     */
+    public function __construct(BatchInterface $decoratedBatch)
+    {
+        $this->decoratedBatch = $decoratedBatch;
+    }
+
+    /**
+     * Allow decorators to implement custom methods
+     *
+     * @param string $method Missing method name
+     * @param array  $args   Method arguments
+     *
+     * @return mixed
+     * @codeCoverageIgnore
+     */
+    public function __call($method, array $args)
+    {
+        return call_user_func_array(array($this->decoratedBatch, $method), $args);
+    }
+
+    public function add($item)
+    {
+        $this->decoratedBatch->add($item);
+
+        return $this;
+    }
+
+    public function flush()
+    {
+        return $this->decoratedBatch->flush();
+    }
+
+    public function isEmpty()
+    {
+        return $this->decoratedBatch->isEmpty();
+    }
+
+    /**
+     * Trace the decorators associated with the batch
+     *
+     * @return array
+     */
+    public function getDecorators()
+    {
+        $found = array($this);
+        if (method_exists($this->decoratedBatch, 'getDecorators')) {
+            $found = array_merge($found, $this->decoratedBatch->getDecorators());
+        }
+
+        return $found;
+    }
+}

+ 60 - 0
vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * BatchInterface decorator used to add automatic flushing of the queue when the size of the queue reaches a threshold.
+ */
+class FlushingBatch extends AbstractBatchDecorator
+{
+    /** @var int The threshold for which to automatically flush */
+    protected $threshold;
+
+    /** @var int Current number of items known to be in the queue */
+    protected $currentTotal = 0;
+
+    /**
+     * @param BatchInterface $decoratedBatch  BatchInterface that is being decorated
+     * @param int            $threshold       Flush when the number in queue matches the threshold
+     */
+    public function __construct(BatchInterface $decoratedBatch, $threshold)
+    {
+        $this->threshold = $threshold;
+        parent::__construct($decoratedBatch);
+    }
+
+    /**
+     * Set the auto-flush threshold
+     *
+     * @param int $threshold The auto-flush threshold
+     *
+     * @return FlushingBatch
+     */
+    public function setThreshold($threshold)
+    {
+        $this->threshold = $threshold;
+
+        return $this;
+    }
+
+    /**
+     * Get the auto-flush threshold
+     *
+     * @return int
+     */
+    public function getThreshold()
+    {
+        return $this->threshold;
+    }
+
+    public function add($item)
+    {
+        $this->decoratedBatch->add($item);
+        if (++$this->currentTotal >= $this->threshold) {
+            $this->currentTotal = 0;
+            $this->decoratedBatch->flush();
+        }
+
+        return $this;
+    }
+}

+ 39 - 0
vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * BatchInterface decorator used to keep a history of items that were added to the batch.  You must clear the history
+ * manually to remove items from the history.
+ */
+class HistoryBatch extends AbstractBatchDecorator
+{
+    /** @var array Items in the history */
+    protected $history = array();
+
+    public function add($item)
+    {
+        $this->history[] = $item;
+        $this->decoratedBatch->add($item);
+
+        return $this;
+    }
+
+    /**
+     * Get the batch history
+     *
+     * @return array
+     */
+    public function getHistory()
+    {
+        return $this->history;
+    }
+
+    /**
+     * Clear the batch history
+     */
+    public function clearHistory()
+    {
+        $this->history = array();
+    }
+}

+ 38 - 0
vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+
+/**
+ * BatchInterface decorator used to call a method each time flush is called
+ */
+class NotifyingBatch extends AbstractBatchDecorator
+{
+    /** @var mixed Callable to call */
+    protected $callable;
+
+    /**
+     * @param BatchInterface $decoratedBatch Batch object to decorate
+     * @param mixed          $callable       Callable to call
+     *
+     * @throws InvalidArgumentException
+     */
+    public function __construct(BatchInterface $decoratedBatch, $callable)
+    {
+        if (!is_callable($callable)) {
+            throw new InvalidArgumentException('The passed argument is not callable');
+        }
+
+        $this->callable = $callable;
+        parent::__construct($decoratedBatch);
+    }
+
+    public function flush()
+    {
+        $items = $this->decoratedBatch->flush();
+        call_user_func($this->callable, $items);
+
+        return $items;
+    }
+}

+ 21 - 0
vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace Guzzle\Cache;
+
+/**
+ * Abstract cache adapter
+ */
+abstract class AbstractCacheAdapter implements CacheAdapterInterface
+{
+    protected $cache;
+
+    /**
+     * Get the object owned by the adapter
+     *
+     * @return mixed
+     */
+    public function getCacheObject()
+    {
+        return $this->cache;
+    }
+}

+ 464 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlHandle.php

@@ -0,0 +1,464 @@
+<?php
+
+namespace Guzzle\Http\Curl;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Common\Exception\RuntimeException;
+use Guzzle\Common\Collection;
+use Guzzle\Http\Message\EntityEnclosingRequest;
+use Guzzle\Http\Message\RequestInterface;
+use Guzzle\Parser\ParserRegistry;
+use Guzzle\Http\Url;
+
+/**
+ * Immutable wrapper for a cURL handle
+ */
+class CurlHandle
+{
+    const BODY_AS_STRING = 'body_as_string';
+    const PROGRESS = 'progress';
+    const DEBUG = 'debug';
+
+    /** @var Collection Curl options */
+    protected $options;
+
+    /** @var resource Curl resource handle */
+    protected $handle;
+
+    /** @var int CURLE_* error */
+    protected $errorNo = CURLE_OK;
+
+    /**
+     * Factory method to create a new curl handle based on an HTTP request.
+     *
+     * There are some helpful options you can set to enable specific behavior:
+     * - debug:    Set to true to enable cURL debug functionality to track the actual headers sent over the wire.
+     * - progress: Set to true to enable progress function callbacks.
+     *
+     * @param RequestInterface $request Request
+     *
+     * @return CurlHandle
+     * @throws RuntimeException
+     */
+    public static function factory(RequestInterface $request)
+    {
+        $requestCurlOptions = $request->getCurlOptions();
+        $mediator = new RequestMediator($request, $requestCurlOptions->get('emit_io'));
+        $tempContentLength = null;
+        $method = $request->getMethod();
+        $bodyAsString = $requestCurlOptions->get(self::BODY_AS_STRING);
+
+        // Prepare url
+        $url = (string)$request->getUrl();
+        if(($pos = strpos($url, '#')) !== false ){
+            // strip fragment from url
+            $url = substr($url, 0, $pos);
+        }
+
+        // Array of default cURL options.
+        $curlOptions = array(
+            CURLOPT_URL            => $url,
+            CURLOPT_CONNECTTIMEOUT => 150,
+            CURLOPT_RETURNTRANSFER => false,
+            CURLOPT_HEADER         => false,
+            CURLOPT_PORT           => $request->getPort(),
+            CURLOPT_HTTPHEADER     => array(),
+            CURLOPT_WRITEFUNCTION  => array($mediator, 'writeResponseBody'),
+            CURLOPT_HEADERFUNCTION => array($mediator, 'receiveResponseHeader'),
+            CURLOPT_HTTP_VERSION   => $request->getProtocolVersion() === '1.0'
+                ? CURL_HTTP_VERSION_1_0 : CURL_HTTP_VERSION_1_1,
+            // Verifies the authenticity of the peer's certificate
+            CURLOPT_SSL_VERIFYPEER => 1,
+            // Certificate must indicate that the server is the server to which you meant to connect
+            CURLOPT_SSL_VERIFYHOST => 2
+        );
+
+        if (defined('CURLOPT_PROTOCOLS')) {
+            // Allow only HTTP and HTTPS protocols
+            $curlOptions[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
+        }
+
+        // Add CURLOPT_ENCODING if Accept-Encoding header is provided
+        if ($acceptEncodingHeader = $request->getHeader('Accept-Encoding')) {
+            $curlOptions[CURLOPT_ENCODING] = (string) $acceptEncodingHeader;
+            // Let cURL set the Accept-Encoding header, prevents duplicate values
+            $request->removeHeader('Accept-Encoding');
+        }
+
+        // Enable curl debug information if the 'debug' param was set
+        if ($requestCurlOptions->get('debug')) {
+            $curlOptions[CURLOPT_STDERR] = fopen('php://temp', 'r+');
+            // @codeCoverageIgnoreStart
+            if (false === $curlOptions[CURLOPT_STDERR]) {
+                throw new RuntimeException('Unable to create a stream for CURLOPT_STDERR');
+            }
+            // @codeCoverageIgnoreEnd
+            $curlOptions[CURLOPT_VERBOSE] = true;
+        }
+
+        // Specify settings according to the HTTP method
+        if ($method == 'GET') {
+            $curlOptions[CURLOPT_HTTPGET] = true;
+        } elseif ($method == 'HEAD') {
+            $curlOptions[CURLOPT_NOBODY] = true;
+            // HEAD requests do not use a write function
+            unset($curlOptions[CURLOPT_WRITEFUNCTION]);
+        } elseif (!($request instanceof EntityEnclosingRequest)) {
+            $curlOptions[CURLOPT_CUSTOMREQUEST] = $method;
+        } else {
+
+            $curlOptions[CURLOPT_CUSTOMREQUEST] = $method;
+
+            // Handle sending raw bodies in a request
+            if ($request->getBody()) {
+                // You can send the body as a string using curl's CURLOPT_POSTFIELDS
+                if ($bodyAsString) {
+                    $curlOptions[CURLOPT_POSTFIELDS] = (string) $request->getBody();
+                    // Allow curl to add the Content-Length for us to account for the times when
+                    // POST redirects are followed by GET requests
+                    if ($tempContentLength = $request->getHeader('Content-Length')) {
+                        $tempContentLength = (int) (string) $tempContentLength;
+                    }
+                    // Remove the curl generated Content-Type header if none was set manually
+                    if (!$request->hasHeader('Content-Type')) {
+                        $curlOptions[CURLOPT_HTTPHEADER][] = 'Content-Type:';
+                    }
+                } else {
+                    $curlOptions[CURLOPT_UPLOAD] = true;
+                    // Let cURL handle setting the Content-Length header
+                    if ($tempContentLength = $request->getHeader('Content-Length')) {
+                        $tempContentLength = (int) (string) $tempContentLength;
+                        $curlOptions[CURLOPT_INFILESIZE] = $tempContentLength;
+                    }
+                    // Add a callback for curl to read data to send with the request only if a body was specified
+                    $curlOptions[CURLOPT_READFUNCTION] = array($mediator, 'readRequestBody');
+                    // Attempt to seek to the start of the stream
+                    $request->getBody()->seek(0);
+                }
+
+            } else {
+
+                // Special handling for POST specific fields and files
+                $postFields = false;
+                if (count($request->getPostFiles())) {
+                    $postFields = $request->getPostFields()->useUrlEncoding(false)->urlEncode();
+                    foreach ($request->getPostFiles() as $key => $data) {
+                        $prefixKeys = count($data) > 1;
+                        foreach ($data as $index => $file) {
+                            // Allow multiple files in the same key
+                            $fieldKey = $prefixKeys ? "{$key}[{$index}]" : $key;
+                            $postFields[$fieldKey] = $file->getCurlValue();
+                        }
+                    }
+                } elseif (count($request->getPostFields())) {
+                    $postFields = (string) $request->getPostFields()->useUrlEncoding(true);
+                }
+
+                if ($postFields !== false) {
+                    if ($method == 'POST') {
+                        unset($curlOptions[CURLOPT_CUSTOMREQUEST]);
+                        $curlOptions[CURLOPT_POST] = true;
+                    }
+                    $curlOptions[CURLOPT_POSTFIELDS] = $postFields;
+                    $request->removeHeader('Content-Length');
+                }
+            }
+
+            // If the Expect header is not present, prevent curl from adding it
+            if (!$request->hasHeader('Expect')) {
+                $curlOptions[CURLOPT_HTTPHEADER][] = 'Expect:';
+            }
+        }
+
+        // If a Content-Length header was specified but we want to allow curl to set one for us
+        if (null !== $tempContentLength) {
+            $request->removeHeader('Content-Length');
+        }
+
+        // Set custom cURL options
+        foreach ($requestCurlOptions->toArray() as $key => $value) {
+            if (is_numeric($key)) {
+                $curlOptions[$key] = $value;
+            }
+        }
+
+        // Do not set an Accept header by default
+        if (!isset($curlOptions[CURLOPT_ENCODING])) {
+            $curlOptions[CURLOPT_HTTPHEADER][] = 'Accept:';
+        }
+
+        // Add any custom headers to the request. Empty headers will cause curl to not send the header at all.
+        foreach ($request->getHeaderLines() as $line) {
+            $curlOptions[CURLOPT_HTTPHEADER][] = $line;
+        }
+
+        // Add the content-length header back if it was temporarily removed
+        if (null !== $tempContentLength) {
+            $request->setHeader('Content-Length', $tempContentLength);
+        }
+
+        // Apply the options to a new cURL handle.
+        $handle = curl_init();
+
+        // Enable the progress function if the 'progress' param was set
+        if ($requestCurlOptions->get('progress')) {
+            // Wrap the function in a function that provides the curl handle to the mediator's progress function
+            // Using this rather than injecting the handle into the mediator prevents a circular reference
+            $curlOptions[CURLOPT_PROGRESSFUNCTION] = function () use ($mediator, $handle) {
+                $args = func_get_args();
+                $args[] = $handle;
+
+                // PHP 5.5 pushed the handle onto the start of the args
+                if (is_resource($args[0])) {
+                    array_shift($args);
+                }
+
+                call_user_func_array(array($mediator, 'progress'), $args);
+            };
+            $curlOptions[CURLOPT_NOPROGRESS] = false;
+        }
+
+        curl_setopt_array($handle, $curlOptions);
+
+        return new static($handle, $curlOptions);
+    }
+
+    /**
+     * Construct a new CurlHandle object that wraps a cURL handle
+     *
+     * @param resource         $handle  Configured cURL handle resource
+     * @param Collection|array $options Curl options to use with the handle
+     *
+     * @throws InvalidArgumentException
+     */
+    public function __construct($handle, $options)
+    {
+        if (!is_resource($handle)) {
+            throw new InvalidArgumentException('Invalid handle provided');
+        }
+        if (is_array($options)) {
+            $this->options = new Collection($options);
+        } elseif ($options instanceof Collection) {
+            $this->options = $options;
+        } else {
+            throw new InvalidArgumentException('Expected array or Collection');
+        }
+        $this->handle = $handle;
+    }
+
+    /**
+     * Destructor
+     */
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    /**
+     * Close the curl handle
+     */
+    public function close()
+    {
+        if (is_resource($this->handle)) {
+            curl_close($this->handle);
+        }
+        $this->handle = null;
+    }
+
+    /**
+     * Check if the handle is available and still OK
+     *
+     * @return bool
+     */
+    public function isAvailable()
+    {
+        return is_resource($this->handle);
+    }
+
+    /**
+     * Get the last error that occurred on the cURL handle
+     *
+     * @return string
+     */
+    public function getError()
+    {
+        return $this->isAvailable() ? curl_error($this->handle) : '';
+    }
+
+    /**
+     * Get the last error number that occurred on the cURL handle
+     *
+     * @return int
+     */
+    public function getErrorNo()
+    {
+        if ($this->errorNo) {
+            return $this->errorNo;
+        }
+
+        return $this->isAvailable() ? curl_errno($this->handle) : CURLE_OK;
+    }
+
+    /**
+     * Set the curl error number
+     *
+     * @param int $error Error number to set
+     *
+     * @return CurlHandle
+     */
+    public function setErrorNo($error)
+    {
+        $this->errorNo = $error;
+
+        return $this;
+    }
+
+    /**
+     * Get cURL curl_getinfo data
+     *
+     * @param int $option Option to retrieve. Pass null to retrieve all data as an array.
+     *
+     * @return array|mixed
+     */
+    public function getInfo($option = null)
+    {
+        if (!is_resource($this->handle)) {
+            return null;
+        }
+
+        if (null !== $option) {
+            return curl_getinfo($this->handle, $option) ?: null;
+        }
+
+        return curl_getinfo($this->handle) ?: array();
+    }
+
+    /**
+     * Get the stderr output
+     *
+     * @param bool $asResource Set to TRUE to get an fopen resource
+     *
+     * @return string|resource|null
+     */
+    public function getStderr($asResource = false)
+    {
+        $stderr = $this->getOptions()->get(CURLOPT_STDERR);
+        if (!$stderr) {
+            return null;
+        }
+
+        if ($asResource) {
+            return $stderr;
+        }
+
+        fseek($stderr, 0);
+        $e = stream_get_contents($stderr);
+        fseek($stderr, 0, SEEK_END);
+
+        return $e;
+    }
+
+    /**
+     * Get the URL that this handle is connecting to
+     *
+     * @return Url
+     */
+    public function getUrl()
+    {
+        return Url::factory($this->options->get(CURLOPT_URL));
+    }
+
+    /**
+     * Get the wrapped curl handle
+     *
+     * @return resource|null Returns the cURL handle or null if it was closed
+     */
+    public function getHandle()
+    {
+        return $this->isAvailable() ? $this->handle : null;
+    }
+
+    /**
+     * Get the cURL setopt options of the handle. Changing values in the return object will have no effect on the curl
+     * handle after it is created.
+     *
+     * @return Collection
+     */
+    public function getOptions()
+    {
+        return $this->options;
+    }
+
+    /**
+     * Update a request based on the log messages of the CurlHandle
+     *
+     * @param RequestInterface $request Request to update
+     */
+    public function updateRequestFromTransfer(RequestInterface $request)
+    {
+        if (!$request->getResponse()) {
+            return;
+        }
+
+        // Update the transfer stats of the response
+        $request->getResponse()->setInfo($this->getInfo());
+
+        if (!$log = $this->getStderr(true)) {
+            return;
+        }
+
+        // Parse the cURL stderr output for outgoing requests
+        $headers = '';
+        fseek($log, 0);
+        while (($line = fgets($log)) !== false) {
+            if ($line && $line[0] == '>') {
+                $headers = substr(trim($line), 2) . "\r\n";
+                while (($line = fgets($log)) !== false) {
+                    if ($line[0] == '*' || $line[0] == '<') {
+                        break;
+                    } else {
+                        $headers .= trim($line) . "\r\n";
+                    }
+                }
+            }
+        }
+
+        // Add request headers to the request exactly as they were sent
+        if ($headers) {
+            $parsed = ParserRegistry::getInstance()->getParser('message')->parseRequest($headers);
+            if (!empty($parsed['headers'])) {
+                $request->setHeaders(array());
+                foreach ($parsed['headers'] as $name => $value) {
+                    $request->setHeader($name, $value);
+                }
+            }
+            if (!empty($parsed['version'])) {
+                $request->setProtocolVersion($parsed['version']);
+            }
+        }
+    }
+
+    /**
+     * Parse the config and replace curl.* configurators into the constant based values so it can be used elsewhere
+     *
+     * @param array|Collection $config The configuration we want to parse
+     *
+     * @return array
+     */
+    public static function parseCurlConfig($config)
+    {
+        $curlOptions = array();
+        foreach ($config as $key => $value) {
+            if (is_string($key) && defined($key)) {
+                // Convert constants represented as string to constant int values
+                $key = constant($key);
+            }
+            if (is_string($value) && defined($value)) {
+                $value = constant($value);
+            }
+            $curlOptions[$key] = $value;
+        }
+
+        return $curlOptions;
+    }
+}

+ 66 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlVersion.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace Guzzle\Http\Curl;
+
+/**
+ * Class used for querying curl_version data
+ */
+class CurlVersion
+{
+    /** @var array curl_version() information */
+    protected $version;
+
+    /** @var CurlVersion */
+    protected static $instance;
+
+    /** @var string Default user agent */
+    protected $userAgent;
+
+    /**
+     * @return CurlVersion
+     */
+    public static function getInstance()
+    {
+        if (!self::$instance) {
+            self::$instance = new self();
+        }
+
+        return self::$instance;
+    }
+
+    /**
+     * Get all of the curl_version() data
+     *
+     * @return array
+     */
+    public function getAll()
+    {
+        if (!$this->version) {
+            $this->version = curl_version();
+        }
+
+        return $this->version;
+    }
+
+    /**
+     * Get a specific type of curl information
+     *
+     * @param string $type Version information to retrieve. This value is one of:
+     *     - version_number:     cURL 24 bit version number
+     *     - version:            cURL version number, as a string
+     *     - ssl_version_number: OpenSSL 24 bit version number
+     *     - ssl_version:        OpenSSL version number, as a string
+     *     - libz_version:       zlib version number, as a string
+     *     - host:               Information about the host where cURL was built
+     *     - features:           A bitmask of the CURL_VERSION_XXX constants
+     *     - protocols:          An array of protocols names supported by cURL
+     *
+     * @return string|float|bool if the $type is found, and false if not found
+     */
+    public function get($type)
+    {
+        $version = $this->getAll();
+
+        return isset($version[$type]) ? $version[$type] : false;
+    }
+}

+ 201 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/EntityBody.php

@@ -0,0 +1,201 @@
+<?php
+
+namespace Guzzle\Http;
+
+use Guzzle\Common\Version;
+use Guzzle\Stream\Stream;
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Http\Mimetypes;
+
+/**
+ * Entity body used with an HTTP request or response
+ */
+class EntityBody extends Stream implements EntityBodyInterface
+{
+    /** @var bool Content-Encoding of the entity body if known */
+    protected $contentEncoding = false;
+
+    /** @var callable Method to invoke for rewinding a stream */
+    protected $rewindFunction;
+
+    /**
+     * Create a new EntityBody based on the input type
+     *
+     * @param resource|string|EntityBody $resource Entity body data
+     * @param int                        $size     Size of the data contained in the resource
+     *
+     * @return EntityBody
+     * @throws InvalidArgumentException if the $resource arg is not a resource or string
+     */
+    public static function factory($resource = '', $size = null)
+    {
+        if ($resource instanceof EntityBodyInterface) {
+            return $resource;
+        }
+
+        switch (gettype($resource)) {
+            case 'string':
+                return self::fromString($resource);
+            case 'resource':
+                return new static($resource, $size);
+            case 'object':
+                if (method_exists($resource, '__toString')) {
+                    return self::fromString((string) $resource);
+                }
+                break;
+            case 'array':
+                return self::fromString(http_build_query($resource));
+        }
+
+        throw new InvalidArgumentException('Invalid resource type');
+    }
+
+    public function setRewindFunction($callable)
+    {
+        if (!is_callable($callable)) {
+            throw new InvalidArgumentException('Must specify a callable');
+        }
+
+        $this->rewindFunction = $callable;
+
+        return $this;
+    }
+
+    public function rewind()
+    {
+        return $this->rewindFunction ? call_user_func($this->rewindFunction, $this) : parent::rewind();
+    }
+
+    /**
+     * Create a new EntityBody from a string
+     *
+     * @param string $string String of data
+     *
+     * @return EntityBody
+     */
+    public static function fromString($string)
+    {
+        $stream = fopen('php://temp', 'r+');
+        if ($string !== '') {
+            fwrite($stream, $string);
+            rewind($stream);
+        }
+
+        return new static($stream);
+    }
+
+    public function compress($filter = 'zlib.deflate')
+    {
+        $result = $this->handleCompression($filter);
+        $this->contentEncoding = $result ? $filter : false;
+
+        return $result;
+    }
+
+    public function uncompress($filter = 'zlib.inflate')
+    {
+        $offsetStart = 0;
+
+        // When inflating gzipped data, the first 10 bytes must be stripped
+        // if a gzip header is present
+        if ($filter == 'zlib.inflate') {
+            // @codeCoverageIgnoreStart
+            if (!$this->isReadable() || ($this->isConsumed() && !$this->isSeekable())) {
+                return false;
+            }
+            // @codeCoverageIgnoreEnd
+            if (stream_get_contents($this->stream, 3, 0) === "\x1f\x8b\x08") {
+                $offsetStart = 10;
+            }
+        }
+
+        $this->contentEncoding = false;
+
+        return $this->handleCompression($filter, $offsetStart);
+    }
+
+    public function getContentLength()
+    {
+        return $this->getSize();
+    }
+
+    public function getContentType()
+    {
+        return $this->getUri() ? Mimetypes::getInstance()->fromFilename($this->getUri()) : null;
+    }
+
+    public function getContentMd5($rawOutput = false, $base64Encode = false)
+    {
+        if ($hash = self::getHash($this, 'md5', $rawOutput)) {
+            return $hash && $base64Encode ? base64_encode($hash) : $hash;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Calculate the MD5 hash of an entity body
+     *
+     * @param EntityBodyInterface $body         Entity body to calculate the hash for
+     * @param bool                $rawOutput    Whether or not to use raw output
+     * @param bool                $base64Encode Whether or not to base64 encode raw output (only if raw output is true)
+     *
+     * @return bool|string Returns an MD5 string on success or FALSE on failure
+     * @deprecated This will be deprecated soon
+     * @codeCoverageIgnore
+     */
+    public static function calculateMd5(EntityBodyInterface $body, $rawOutput = false, $base64Encode = false)
+    {
+        Version::warn(__CLASS__ . ' is deprecated. Use getContentMd5()');
+        return $body->getContentMd5($rawOutput, $base64Encode);
+    }
+
+    public function setStreamFilterContentEncoding($streamFilterContentEncoding)
+    {
+        $this->contentEncoding = $streamFilterContentEncoding;
+
+        return $this;
+    }
+
+    public function getContentEncoding()
+    {
+        return strtr($this->contentEncoding, array(
+            'zlib.deflate' => 'gzip',
+            'bzip2.compress' => 'compress'
+        )) ?: false;
+    }
+
+    protected function handleCompression($filter, $offsetStart = 0)
+    {
+        // @codeCoverageIgnoreStart
+        if (!$this->isReadable() || ($this->isConsumed() && !$this->isSeekable())) {
+            return false;
+        }
+        // @codeCoverageIgnoreEnd
+
+        $handle = fopen('php://temp', 'r+');
+        $filter = @stream_filter_append($handle, $filter, STREAM_FILTER_WRITE);
+        if (!$filter) {
+            return false;
+        }
+
+        // Seek to the offset start if possible
+        $this->seek($offsetStart);
+        while ($data = fread($this->stream, 8096)) {
+            fwrite($handle, $data);
+        }
+
+        fclose($this->stream);
+        $this->stream = $handle;
+        stream_filter_remove($filter);
+        $stat = fstat($this->stream);
+        $this->size = $stat['size'];
+        $this->rebuildCache();
+        $this->seek(0);
+
+        // Remove any existing rewind function as the underlying stream has been replaced
+        $this->rewindFunction = null;
+
+        return true;
+    }
+}

+ 137 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequestInterface.php

@@ -0,0 +1,137 @@
+<?php
+
+namespace Guzzle\Http\Message;
+
+use Guzzle\Http\Exception\RequestException;
+use Guzzle\Http\EntityBodyInterface;
+use Guzzle\Http\QueryString;
+
+/**
+ * HTTP request that sends an entity-body in the request message (POST, PUT)
+ */
+interface EntityEnclosingRequestInterface extends RequestInterface
+{
+    const URL_ENCODED = 'application/x-www-form-urlencoded; charset=utf-8';
+    const MULTIPART = 'multipart/form-data';
+
+    /**
+     * Set the body of the request
+     *
+     * @param string|resource|EntityBodyInterface $body        Body to use in the entity body of the request
+     * @param string                              $contentType Content-Type to set. Leave null to use an existing
+     *                                                         Content-Type or to guess the Content-Type
+     * @return self
+     * @throws RequestException if the protocol is < 1.1 and Content-Length can not be determined
+     */
+    public function setBody($body, $contentType = null);
+
+    /**
+     * Get the body of the request if set
+     *
+     * @return EntityBodyInterface|null
+     */
+    public function getBody();
+
+    /**
+     * Get a POST field from the request
+     *
+     * @param string $field Field to retrieve
+     *
+     * @return mixed|null
+     */
+    public function getPostField($field);
+
+    /**
+     * Get the post fields that will be used in the request
+     *
+     * @return QueryString
+     */
+    public function getPostFields();
+
+    /**
+     * Set a POST field value
+     *
+     * @param string $key   Key to set
+     * @param string $value Value to set
+     *
+     * @return self
+     */
+    public function setPostField($key, $value);
+
+    /**
+     * Add POST fields to use in the request
+     *
+     * @param QueryString|array $fields POST fields
+     *
+     * @return self
+     */
+    public function addPostFields($fields);
+
+    /**
+     * Remove a POST field or file by name
+     *
+     * @param string $field Name of the POST field or file to remove
+     *
+     * @return self
+     */
+    public function removePostField($field);
+
+    /**
+     * Returns an associative array of POST field names to PostFileInterface objects
+     *
+     * @return array
+     */
+    public function getPostFiles();
+
+    /**
+     * Get a POST file from the request
+     *
+     * @param string $fieldName POST fields to retrieve
+     *
+     * @return array|null Returns an array wrapping an array of PostFileInterface objects
+     */
+    public function getPostFile($fieldName);
+
+    /**
+     * Remove a POST file from the request
+     *
+     * @param string $fieldName POST file field name to remove
+     *
+     * @return self
+     */
+    public function removePostFile($fieldName);
+
+    /**
+     * Add a POST file to the upload
+     *
+     * @param string $field       POST field to use (e.g. file). Used to reference content from the server.
+     * @param string $filename    Full path to the file. Do not include the @ symbol.
+     * @param string $contentType Optional Content-Type to add to the Content-Disposition.
+     *                            Default behavior is to guess. Set to false to not specify.
+     * @param string $postname    The name of the file, when posted. (e.g. rename the file)
+     * @return self
+     */
+    public function addPostFile($field, $filename = null, $contentType = null, $postname = null);
+
+    /**
+     * Add POST files to use in the upload
+     *
+     * @param array $files An array of POST fields => filenames where filename can be a string or PostFileInterface
+     *
+     * @return self
+     */
+    public function addPostFiles(array $files);
+
+    /**
+     * Configure how redirects are handled for the request
+     *
+     * @param bool $strict       Set to true to follow strict RFC compliance when redirecting POST requests. Most
+     *                           browsers with follow a 301-302 redirect for a POST request with a GET request. This is
+     *                           the default behavior of Guzzle. Enable strict redirects to redirect these responses
+     *                           with a POST rather than a GET request.
+     * @param int  $maxRedirects Specify the maximum number of allowed redirects. Set to 0 to disable redirects.
+     *
+     * @return self
+     */
+    public function configureRedirects($strict = false, $maxRedirects = 5);
+}

+ 108 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderCollection.php

@@ -0,0 +1,108 @@
+<?php
+
+namespace Guzzle\Http\Message\Header;
+
+use Guzzle\Common\ToArrayInterface;
+
+/**
+ * Provides a case-insensitive collection of headers
+ */
+class HeaderCollection implements \IteratorAggregate, \Countable, \ArrayAccess, ToArrayInterface
+{
+    /** @var array */
+    protected $headers;
+
+    public function __construct($headers = array())
+    {
+        $this->headers = $headers;
+    }
+
+    public function __clone()
+    {
+        foreach ($this->headers as &$header) {
+            $header = clone $header;
+        }
+    }
+
+    /**
+     * Clears the header collection
+     */
+    public function clear()
+    {
+        $this->headers = array();
+    }
+
+    /**
+     * Set a header on the collection
+     *
+     * @param HeaderInterface $header Header to add
+     *
+     * @return self
+     */
+    public function add(HeaderInterface $header)
+    {
+        $this->headers[strtolower($header->getName())] = $header;
+
+        return $this;
+    }
+
+    /**
+     * Get an array of header objects
+     *
+     * @return array
+     */
+    public function getAll()
+    {
+        return $this->headers;
+    }
+
+    /**
+     * Alias of offsetGet
+     */
+    public function get($key)
+    {
+        return $this->offsetGet($key);
+    }
+
+    public function count()
+    {
+        return count($this->headers);
+    }
+
+    public function offsetExists($offset)
+    {
+        return isset($this->headers[strtolower($offset)]);
+    }
+
+    public function offsetGet($offset)
+    {
+        $l = strtolower($offset);
+
+        return isset($this->headers[$l]) ? $this->headers[$l] : null;
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->add($value);
+    }
+
+    public function offsetUnset($offset)
+    {
+        unset($this->headers[strtolower($offset)]);
+    }
+
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->headers);
+    }
+
+    public function toArray()
+    {
+        $result = array();
+        foreach ($this->headers as $header) {
+            $result[$header->getName()] = $header->toArray();
+        }
+
+        return $result;
+    }
+}

+ 26 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactory.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Guzzle\Http\Message\Header;
+
+use Guzzle\Http\Message\Header;
+
+/**
+ * Default header factory implementation
+ */
+class HeaderFactory implements HeaderFactoryInterface
+{
+    /** @var array */
+    protected $mapping = array(
+        'cache-control' => 'Guzzle\Http\Message\Header\CacheControl',
+        'link'          => 'Guzzle\Http\Message\Header\Link',
+    );
+
+    public function createHeader($header, $value = null)
+    {
+        $lowercase = strtolower($header);
+
+        return isset($this->mapping[$lowercase])
+            ? new $this->mapping[$lowercase]($header, $value)
+            : new Header($header, $value);
+    }
+}

+ 22 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/QueryAggregatorInterface.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace Guzzle\Http\QueryAggregator;
+
+use Guzzle\Http\QueryString;
+
+/**
+ * Interface used for aggregating nested query string variables into a flattened array of key value pairs
+ */
+interface QueryAggregatorInterface
+{
+    /**
+     * Aggregate multi-valued parameters into a flattened associative array
+     *
+     * @param string      $key   The name of the query string parameter
+     * @param array       $value The values of the parameter
+     * @param QueryString $query The query string that is being aggregated
+     *
+     * @return array Returns an array of the combined values
+     */
+    public function aggregate($key, $value, QueryString $query);
+}

+ 157 - 0
vendor/guzzle/guzzle/src/Guzzle/Http/StaticClient.php

@@ -0,0 +1,157 @@
+<?php
+
+namespace Guzzle\Http;
+
+use Guzzle\Http\Client;
+use Guzzle\Http\ClientInterface;
+use Guzzle\Stream\StreamRequestFactoryInterface;
+use Guzzle\Stream\PhpStreamRequestFactory;
+
+/**
+ * Simplified interface to Guzzle that does not require a class to be instantiated
+ */
+final class StaticClient
+{
+    /** @var Client Guzzle client */
+    private static $client;
+
+    /**
+     * Mount the client to a simpler class name for a specific client
+     *
+     * @param string          $className Class name to use to mount
+     * @param ClientInterface $client    Client used to send requests
+     */
+    public static function mount($className = 'Guzzle', ClientInterface $client = null)
+    {
+        class_alias(__CLASS__, $className);
+        if ($client) {
+            self::$client = $client;
+        }
+    }
+
+    /**
+     * @param  string $method  HTTP request method (GET, POST, HEAD, DELETE, PUT, etc)
+     * @param  string $url     URL of the request
+     * @param  array  $options Options to use with the request. See: Guzzle\Http\Message\RequestFactory::applyOptions()
+     * @return \Guzzle\Http\Message\Response|\Guzzle\Stream\Stream
+     */
+    public static function request($method, $url, $options = array())
+    {
+        // @codeCoverageIgnoreStart
+        if (!self::$client) {
+            self::$client = new Client();
+        }
+        // @codeCoverageIgnoreEnd
+
+        $request = self::$client->createRequest($method, $url, null, null, $options);
+
+        if (isset($options['stream'])) {
+            if ($options['stream'] instanceof StreamRequestFactoryInterface) {
+                return $options['stream']->fromRequest($request);
+            } elseif ($options['stream'] == true) {
+                $streamFactory = new PhpStreamRequestFactory();
+                return $streamFactory->fromRequest($request);
+            }
+        }
+
+        return $request->send();
+    }
+
+    /**
+     * Send a GET request
+     *
+     * @param string $url     URL of the request
+     * @param array  $options Array of request options
+     *
+     * @return \Guzzle\Http\Message\Response
+     * @see Guzzle::request for a list of available options
+     */
+    public static function get($url, $options = array())
+    {
+        return self::request('GET', $url, $options);
+    }
+
+    /**
+     * Send a HEAD request
+     *
+     * @param string $url     URL of the request
+     * @param array  $options Array of request options
+     *
+     * @return \Guzzle\Http\Message\Response
+     * @see Guzzle::request for a list of available options
+     */
+    public static function head($url, $options = array())
+    {
+        return self::request('HEAD', $url, $options);
+    }
+
+    /**
+     * Send a DELETE request
+     *
+     * @param string $url     URL of the request
+     * @param array  $options Array of request options
+     *
+     * @return \Guzzle\Http\Message\Response
+     * @see Guzzle::request for a list of available options
+     */
+    public static function delete($url, $options = array())
+    {
+        return self::request('DELETE', $url, $options);
+    }
+
+    /**
+     * Send a POST request
+     *
+     * @param string $url     URL of the request
+     * @param array  $options Array of request options
+     *
+     * @return \Guzzle\Http\Message\Response
+     * @see Guzzle::request for a list of available options
+     */
+    public static function post($url, $options = array())
+    {
+        return self::request('POST', $url, $options);
+    }
+
+    /**
+     * Send a PUT request
+     *
+     * @param string $url     URL of the request
+     * @param array  $options Array of request options
+     *
+     * @return \Guzzle\Http\Message\Response
+     * @see Guzzle::request for a list of available options
+     */
+    public static function put($url, $options = array())
+    {
+        return self::request('PUT', $url, $options);
+    }
+
+    /**
+     * Send a PATCH request
+     *
+     * @param string $url     URL of the request
+     * @param array  $options Array of request options
+     *
+     * @return \Guzzle\Http\Message\Response
+     * @see Guzzle::request for a list of available options
+     */
+    public static function patch($url, $options = array())
+    {
+        return self::request('PATCH', $url, $options);
+    }
+
+    /**
+     * Send an OPTIONS request
+     *
+     * @param string $url     URL of the request
+     * @param array  $options Array of request options
+     *
+     * @return \Guzzle\Http\Message\Response
+     * @see Guzzle::request for a list of available options
+     */
+    public static function options($url, $options = array())
+    {
+        return self::request('OPTIONS', $url, $options);
+    }
+}

+ 29 - 0
vendor/guzzle/guzzle/src/Guzzle/Log/composer.json

@@ -0,0 +1,29 @@
+{
+    "name": "guzzle/log",
+    "description": "Guzzle log adapter component",
+    "homepage": "http://guzzlephp.org/",
+    "keywords": ["log", "adapter", "guzzle"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.2"
+    },
+    "autoload": {
+        "psr-0": { "Guzzle\\Log": "" }
+    },
+    "suggest": {
+        "guzzle/http": "self.version"
+    },
+    "target-dir": "Guzzle/Log",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.7-dev"
+        }
+    }
+}

+ 58 - 0
vendor/guzzle/guzzle/src/Guzzle/Parser/Message/AbstractMessageParser.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace Guzzle\Parser\Message;
+
+/**
+ * Implements shared message parsing functionality
+ */
+abstract class AbstractMessageParser implements MessageParserInterface
+{
+    /**
+     * Create URL parts from HTTP message parts
+     *
+     * @param string $requestUrl Associated URL
+     * @param array  $parts      HTTP message parts
+     *
+     * @return array
+     */
+    protected function getUrlPartsFromMessage($requestUrl, array $parts)
+    {
+        // Parse the URL information from the message
+        $urlParts = array(
+            'path'   => $requestUrl,
+            'scheme' => 'http'
+        );
+
+        // Check for the Host header
+        if (isset($parts['headers']['Host'])) {
+            $urlParts['host'] = $parts['headers']['Host'];
+        } elseif (isset($parts['headers']['host'])) {
+            $urlParts['host'] = $parts['headers']['host'];
+        } else {
+            $urlParts['host'] = null;
+        }
+
+        if (false === strpos($urlParts['host'], ':')) {
+            $urlParts['port'] = '';
+        } else {
+            $hostParts = explode(':', $urlParts['host']);
+            $urlParts['host'] = trim($hostParts[0]);
+            $urlParts['port'] = (int) trim($hostParts[1]);
+            if ($urlParts['port'] == 443) {
+                $urlParts['scheme'] = 'https';
+            }
+        }
+
+        // Check if a query is present
+        $path = $urlParts['path'];
+        $qpos = strpos($path, '?');
+        if ($qpos) {
+            $urlParts['query'] = substr($path, $qpos + 1);
+            $urlParts['path'] = substr($path, 0, $qpos);
+        } else {
+            $urlParts['query'] = '';
+        }
+
+        return $urlParts;
+    }
+}

+ 19 - 0
vendor/guzzle/guzzle/src/Guzzle/Parser/Url/UrlParserInterface.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace Guzzle\Parser\Url;
+
+/**
+ * URL parser interface
+ */
+interface UrlParserInterface
+{
+    /**
+     * Parse a URL using special handling for a subset of UTF-8 characters in the query string if needed.
+     *
+     * @param string $url URL to parse
+     *
+     * @return array Returns an array identical to what is returned from parse_url().  When an array key is missing from
+     *               this array, you must fill it in with NULL to avoid warnings in calling code.
+     */
+    public function parseUrl($url);
+}

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů