From 85e76bb51f67fd33b1736632444e9530d08194cc Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Tue, 20 Feb 2024 16:42:35 +0100 Subject: [PATCH 1/9] init --- src/Client.php | 4 ++-- .../ConfigureIndex.php} | 7 ++----- .../Create.php => Control/CreateCollection.php} | 8 +++----- .../Create.php => Control/CreateIndex.php} | 17 +++++++---------- .../Delete.php => Control/DeleteCollection.php} | 6 ++---- .../Delete.php => Control/DeleteIndex.php} | 6 ++---- .../DescribeCollection.php} | 6 ++---- .../Describe.php => Control/DescribeIndex.php} | 6 ++---- .../All.php => Control/ListCollections.php} | 2 +- .../{Index/All.php => Control/ListIndexes.php} | 2 +- .../Delete.php => Data/DeleteVectors.php} | 6 ++---- .../DescribeIndexStats.php} | 6 ++---- .../Vectors/Fetch.php => Data/FetchVectors.php} | 2 +- .../Vectors/Query.php => Data/QueryVectors.php} | 10 ++++------ .../Update.php => Data/UpdateVector.php} | 6 ++---- .../Upsert.php => Data/UpsertVectors.php} | 6 ++---- src/Resources/CollectionResource.php | 10 +++++----- src/Resources/IndexResource.php | 10 +++++----- src/Resources/VectorResource.php | 12 ++++++------ 19 files changed, 53 insertions(+), 79 deletions(-) rename src/Requests/{Index/Configure.php => Control/ConfigureIndex.php} (95%) rename src/Requests/{Collections/Create.php => Control/CreateCollection.php} (92%) rename src/Requests/{Index/Create.php => Control/CreateIndex.php} (89%) rename src/Requests/{Collections/Delete.php => Control/DeleteCollection.php} (94%) rename src/Requests/{Index/Delete.php => Control/DeleteIndex.php} (94%) rename src/Requests/{Collections/Describe.php => Control/DescribeCollection.php} (95%) rename src/Requests/{Index/Describe.php => Control/DescribeIndex.php} (96%) rename src/Requests/{Collections/All.php => Control/ListCollections.php} (94%) rename src/Requests/{Index/All.php => Control/ListIndexes.php} (95%) rename src/Requests/{Index/Vectors/Delete.php => Data/DeleteVectors.php} (96%) rename src/Requests/{Index/Vectors/DescribeStats.php => Data/DescribeIndexStats.php} (96%) rename src/Requests/{Index/Vectors/Fetch.php => Data/FetchVectors.php} (97%) rename src/Requests/{Index/Vectors/Query.php => Data/QueryVectors.php} (94%) rename src/Requests/{Index/Vectors/Update.php => Data/UpdateVector.php} (96%) rename src/Requests/{Index/Vectors/Upsert.php => Data/UpsertVectors.php} (95%) diff --git a/src/Client.php b/src/Client.php index 1d7962b..f981270 100644 --- a/src/Client.php +++ b/src/Client.php @@ -3,7 +3,7 @@ namespace Probots\Pinecone; use Probots\Pinecone\Contracts\ClientContract; -use Probots\Pinecone\Requests\Index\Vectors\Fetch; +use Probots\Pinecone\Requests\Index\Vectors\FetchVectors; use Probots\Pinecone\Resources\CollectionResource; use Probots\Pinecone\Resources\IndexResource; use Psr\Http\Message\RequestInterface; @@ -29,7 +29,7 @@ public function __construct( // (Temporary) Workaround for https://github.com/probots-io/pinecone-php/issues/3 $this->sender()->addMiddleware(function (callable $handler) { return function (RequestInterface $request, array $options) use ($handler) { - return $handler(Fetch::queryIdsWorkaround($request), $options); + return $handler(FetchVectors::queryIdsWorkaround($request), $options); }; }); } diff --git a/src/Requests/Index/Configure.php b/src/Requests/Control/ConfigureIndex.php similarity index 95% rename from src/Requests/Index/Configure.php rename to src/Requests/Control/ConfigureIndex.php index f019fdb..5a7c675 100644 --- a/src/Requests/Index/Configure.php +++ b/src/Requests/Control/ConfigureIndex.php @@ -23,7 +23,7 @@ * 404 | Index not found. * 500 | Internal error. Can be caused by invalid parameters. */ -class Configure extends Request implements HasBody +class ConfigureIndex extends Request implements HasBody { use HasJsonBody; @@ -41,10 +41,7 @@ public function __construct( protected string $name, protected int $replicas, protected string $pod_type - ) - { - - } + ) {} /** * @return string diff --git a/src/Requests/Collections/Create.php b/src/Requests/Control/CreateCollection.php similarity index 92% rename from src/Requests/Collections/Create.php rename to src/Requests/Control/CreateCollection.php index 3547344..e464de7 100644 --- a/src/Requests/Collections/Create.php +++ b/src/Requests/Control/CreateCollection.php @@ -22,7 +22,7 @@ * 409 | A collection with the name provided already exists. * 500 | Internal error. Can be caused by invalid parameters. */ -class Create extends Request implements HasBody +class CreateCollection extends Request implements HasBody { use HasJsonBody; @@ -38,9 +38,7 @@ class Create extends Request implements HasBody public function __construct( protected string $name, protected string $source, - ) - { - } + ) {} /** * @return string @@ -56,7 +54,7 @@ public function resolveEndpoint(): string protected function defaultBody(): array { return [ - 'name' => $this->name, + 'name' => $this->name, 'source' => $this->source, ]; } diff --git a/src/Requests/Index/Create.php b/src/Requests/Control/CreateIndex.php similarity index 89% rename from src/Requests/Index/Create.php rename to src/Requests/Control/CreateIndex.php index f9ecf08..71bfdb0 100644 --- a/src/Requests/Index/Create.php +++ b/src/Requests/Control/CreateIndex.php @@ -28,7 +28,7 @@ * 409 | Index of given name already exists. * 500 | Internal error. Can be caused by invalid parameters. */ -class Create extends Request implements HasBody +class CreateIndex extends Request implements HasBody { use HasJsonBody; @@ -56,10 +56,7 @@ public function __construct( protected ?string $pod_type = 'p1.x1', protected ?array $metadataConfig = null, protected ?string $sourceCollection = null, - ) - { - - } + ) {} /** * @return string @@ -75,12 +72,12 @@ public function resolveEndpoint(): string protected function defaultBody(): array { $payload = [ - 'name' => $this->name, + 'name' => $this->name, 'dimension' => $this->dimension, - 'metric' => $this->metric, - 'pods' => $this->pods, - 'replicas' => $this->replicas, - 'pod_type' => $this->pod_type, + 'metric' => $this->metric, + 'pods' => $this->pods, + 'replicas' => $this->replicas, + 'pod_type' => $this->pod_type, ]; if ($this->metadataConfig !== null) { diff --git a/src/Requests/Collections/Delete.php b/src/Requests/Control/DeleteCollection.php similarity index 94% rename from src/Requests/Collections/Delete.php rename to src/Requests/Control/DeleteCollection.php index 0e8783b..9f18bd3 100644 --- a/src/Requests/Collections/Delete.php +++ b/src/Requests/Control/DeleteCollection.php @@ -18,7 +18,7 @@ * 404 | Collection not found. * 500 | Internal error. Can be caused by invalid parameters. */ -class Delete extends Request +class DeleteCollection extends Request { /** * @var Method @@ -30,9 +30,7 @@ class Delete extends Request */ public function __construct( protected string $name - ) - { - } + ) {} /** * @return string diff --git a/src/Requests/Index/Delete.php b/src/Requests/Control/DeleteIndex.php similarity index 94% rename from src/Requests/Index/Delete.php rename to src/Requests/Control/DeleteIndex.php index f8a76e3..9f61116 100644 --- a/src/Requests/Index/Delete.php +++ b/src/Requests/Control/DeleteIndex.php @@ -18,7 +18,7 @@ * 404 | Index not found. * 500 | Internal error. Can be caused by invalid parameters. */ -class Delete extends Request +class DeleteIndex extends Request { /** * @var Method @@ -30,9 +30,7 @@ class Delete extends Request */ public function __construct( protected string $name, - ) - { - } + ) {} /** * @return string diff --git a/src/Requests/Collections/Describe.php b/src/Requests/Control/DescribeCollection.php similarity index 95% rename from src/Requests/Collections/Describe.php rename to src/Requests/Control/DescribeCollection.php index c2d0fee..83e71bd 100644 --- a/src/Requests/Collections/Describe.php +++ b/src/Requests/Control/DescribeCollection.php @@ -21,7 +21,7 @@ * 404 | Collection not found. * 500 | Internal error. Can be caused by invalid parameters. */ -class Describe extends Request +class DescribeCollection extends Request { /** * @var Method @@ -33,9 +33,7 @@ class Describe extends Request */ public function __construct( protected string $name - ) - { - } + ) {} /** * @return string diff --git a/src/Requests/Index/Describe.php b/src/Requests/Control/DescribeIndex.php similarity index 96% rename from src/Requests/Index/Describe.php rename to src/Requests/Control/DescribeIndex.php index a1a94e5..294dc64 100644 --- a/src/Requests/Index/Describe.php +++ b/src/Requests/Control/DescribeIndex.php @@ -33,7 +33,7 @@ * 404 | Index not found. * 500 | Internal error. Can be caused by invalid parameters. */ -class Describe extends Request +class DescribeIndex extends Request { /** * @var Method @@ -45,9 +45,7 @@ class Describe extends Request */ public function __construct( protected string $name, - ) - { - } + ) {} /** * @return string diff --git a/src/Requests/Collections/All.php b/src/Requests/Control/ListCollections.php similarity index 94% rename from src/Requests/Collections/All.php rename to src/Requests/Control/ListCollections.php index b7f52ad..cbc5288 100644 --- a/src/Requests/Collections/All.php +++ b/src/Requests/Control/ListCollections.php @@ -12,7 +12,7 @@ * @response * array of strings "$collectionName" */ -class All extends Request +class ListCollections extends Request { /** * @var Method diff --git a/src/Requests/Index/All.php b/src/Requests/Control/ListIndexes.php similarity index 95% rename from src/Requests/Index/All.php rename to src/Requests/Control/ListIndexes.php index 86f95e1..5d239da 100644 --- a/src/Requests/Index/All.php +++ b/src/Requests/Control/ListIndexes.php @@ -12,7 +12,7 @@ * @response * array of strings "$indexName" */ -class All extends Request +class ListIndexes extends Request { /** * @var Method diff --git a/src/Requests/Index/Vectors/Delete.php b/src/Requests/Data/DeleteVectors.php similarity index 96% rename from src/Requests/Index/Vectors/Delete.php rename to src/Requests/Data/DeleteVectors.php index 0aa5c61..f340d24 100644 --- a/src/Requests/Index/Vectors/Delete.php +++ b/src/Requests/Data/DeleteVectors.php @@ -28,7 +28,7 @@ * typeUrl | string * value | string */ -class Delete extends Request implements HasBody +class DeleteVectors extends Request implements HasBody { use HasJsonBody; @@ -50,9 +50,7 @@ public function __construct( protected ?string $namespace = null, protected bool $deleteAll = false, protected array $filter = [] - ) - { - } + ) {} /** * @return string diff --git a/src/Requests/Index/Vectors/DescribeStats.php b/src/Requests/Data/DescribeIndexStats.php similarity index 96% rename from src/Requests/Index/Vectors/DescribeStats.php rename to src/Requests/Data/DescribeIndexStats.php index 5d16681..d4ace8c 100644 --- a/src/Requests/Index/Vectors/DescribeStats.php +++ b/src/Requests/Data/DescribeIndexStats.php @@ -29,7 +29,7 @@ * typeUrl | string * value | string */ -class DescribeStats extends Request +class DescribeIndexStats extends Request { /** * @var Method @@ -43,9 +43,7 @@ class DescribeStats extends Request public function __construct( protected array $index, protected array $filter = [] - ) - { - } + ) {} /** * @return string diff --git a/src/Requests/Index/Vectors/Fetch.php b/src/Requests/Data/FetchVectors.php similarity index 97% rename from src/Requests/Index/Vectors/Fetch.php rename to src/Requests/Data/FetchVectors.php index 58706c5..aef5f80 100644 --- a/src/Requests/Index/Vectors/Fetch.php +++ b/src/Requests/Data/FetchVectors.php @@ -28,7 +28,7 @@ * typeUrl | string * value | string */ -class Fetch extends Request implements HasBody +class FetchVectors extends Request implements HasBody { use HasJsonBody, HasQuery; diff --git a/src/Requests/Index/Vectors/Query.php b/src/Requests/Data/QueryVectors.php similarity index 94% rename from src/Requests/Index/Vectors/Query.php rename to src/Requests/Data/QueryVectors.php index bcccabd..5809d84 100644 --- a/src/Requests/Index/Vectors/Query.php +++ b/src/Requests/Data/QueryVectors.php @@ -40,7 +40,7 @@ * typeUrl | string * value | string */ -class Query extends Request implements HasBody +class QueryVectors extends Request implements HasBody { use HasJsonBody; @@ -69,9 +69,7 @@ public function __construct( protected bool $includeMetadata = true, protected bool $includeVector = false, protected ?string $id = null, - ) - { - } + ) {} /** * @return string @@ -87,9 +85,9 @@ public function resolveEndpoint(): string protected function defaultBody(): array { $payload = [ - 'topK' => $this->topK, + 'topK' => $this->topK, 'includeMetadata' => $this->includeMetadata, - 'includeVector' => $this->includeVector, + 'includeVector' => $this->includeVector, ]; if (count($this->vector) > 0) { diff --git a/src/Requests/Index/Vectors/Update.php b/src/Requests/Data/UpdateVector.php similarity index 96% rename from src/Requests/Index/Vectors/Update.php rename to src/Requests/Data/UpdateVector.php index 25407b5..5322b4f 100644 --- a/src/Requests/Index/Vectors/Update.php +++ b/src/Requests/Data/UpdateVector.php @@ -22,7 +22,7 @@ * typeUrl | string * value | string */ -class Update extends Request implements HasBody +class UpdateVector extends Request implements HasBody { use HasJsonBody; @@ -46,9 +46,7 @@ public function __construct( protected array $sparseValues = [], protected array $setMetadata = [], protected ?string $namespace = null, - ) - { - } + ) {} /** * @return string[] diff --git a/src/Requests/Index/Vectors/Upsert.php b/src/Requests/Data/UpsertVectors.php similarity index 95% rename from src/Requests/Index/Vectors/Upsert.php rename to src/Requests/Data/UpsertVectors.php index 01e9b84..1dbb08d 100644 --- a/src/Requests/Index/Vectors/Upsert.php +++ b/src/Requests/Data/UpsertVectors.php @@ -22,7 +22,7 @@ * typeUrl | string * value | string */ -class Upsert extends Request implements HasBody +class UpsertVectors extends Request implements HasBody { use HasJsonBody; @@ -40,9 +40,7 @@ public function __construct( protected array $index, protected array $vectors = [], protected ?string $namespace = null, - ) - { - } + ) {} /** * @return string diff --git a/src/Resources/CollectionResource.php b/src/Resources/CollectionResource.php index dd44279..15f4a91 100644 --- a/src/Resources/CollectionResource.php +++ b/src/Resources/CollectionResource.php @@ -3,7 +3,7 @@ namespace Probots\Pinecone\Resources; use Probots\Pinecone\Requests\Collections; -use Probots\Pinecone\Exceptions\MissingNameException; +use Probots\Pinecone\Requests\Exceptions\MissingNameException; use Saloon\Contracts\Connector; use Saloon\Contracts\Response; @@ -36,7 +36,7 @@ private function validateName() */ public function create(string $name, string $source): Response { - return $this->connector->send(new Collections\Create($name, $source)); + return $this->connector->send(new Collections\CreateCollection($name, $source)); } @@ -48,7 +48,7 @@ public function describe(): Response { $this->validateName(); - return $this->connector->send(new Collections\Describe($this->name)); + return $this->connector->send(new Collections\DescribeCollection($this->name)); } /** @@ -56,7 +56,7 @@ public function describe(): Response */ public function list(): Response { - return $this->connector->send(new Collections\All()); + return $this->connector->send(new Collections\ListCollections()); } /** @@ -67,6 +67,6 @@ public function delete(): Response { $this->validateName(); - return $this->connector->send(new Collections\Delete($this->name)); + return $this->connector->send(new Collections\DeleteCollection($this->name)); } } diff --git a/src/Resources/IndexResource.php b/src/Resources/IndexResource.php index e9a95f6..00d83a1 100644 --- a/src/Resources/IndexResource.php +++ b/src/Resources/IndexResource.php @@ -64,7 +64,7 @@ public function describe(): Response { $this->validateName(); - return $this->connector->send(new Index\Describe($this->name)); + return $this->connector->send(new Index\DescribeIndex($this->name)); } /** @@ -89,7 +89,7 @@ public function create( null|string $sourceCollection = null ): Response { - return $this->connector->send(new Index\Create( + return $this->connector->send(new Index\CreateIndex( name: $name, dimension: $dimension, metric: $metric, @@ -106,7 +106,7 @@ public function create( */ public function list(): Response { - return $this->connector->send(new Index\All()); + return $this->connector->send(new Index\ListIndexes()); } /** @@ -120,7 +120,7 @@ public function configure(string $pod_type, int $replicas): Response { $this->validateName(); - return $this->connector->send(new Index\Configure($this->name, $replicas, $pod_type)); + return $this->connector->send(new Index\ConfigureIndex($this->name, $replicas, $pod_type)); } /** @@ -131,6 +131,6 @@ public function delete(): Response { $this->validateName(); - return $this->connector->send(new Index\Delete($this->name)); + return $this->connector->send(new Index\DeleteIndex($this->name)); } } \ No newline at end of file diff --git a/src/Resources/VectorResource.php b/src/Resources/VectorResource.php index bbd7f4e..18f1942 100644 --- a/src/Resources/VectorResource.php +++ b/src/Resources/VectorResource.php @@ -25,7 +25,7 @@ public function __construct(protected Connector $connector, protected array $ind */ public function stats(): Response { - return $this->connector->send(new Vectors\DescribeStats($this->index)); + return $this->connector->send(new Vectors\DescribeIndexStats($this->index)); } /** @@ -44,7 +44,7 @@ public function update(string $id, { - return $this->connector->send(new Vectors\Update($this->index, id: $id, values: $values, sparseValues: $sparseValues, setMetadata: $setMetadata, namespace: $namespace)); + return $this->connector->send(new Vectors\UpdateVector($this->index, id: $id, values: $values, sparseValues: $sparseValues, setMetadata: $setMetadata, namespace: $namespace)); } /** @@ -54,7 +54,7 @@ public function update(string $id, */ public function upsert(array $vectors, ?string $namespace = null): Response { - return $this->connector->send(new Vectors\Upsert($this->index, $vectors, $namespace)); + return $this->connector->send(new Vectors\UpsertVectors($this->index, $vectors, $namespace)); } /** @@ -77,7 +77,7 @@ public function query( ?string $id = null ): Response { - return $this->connector->send(new Vectors\Query($this->index, vector: $vector, namespace: $namespace, filter: $filter, topK: $topK, includeMetadata: $includeMetadata, includeVector: $includeVector, id: $id)); + return $this->connector->send(new Vectors\QueryVectors($this->index, vector: $vector, namespace: $namespace, filter: $filter, topK: $topK, includeMetadata: $includeMetadata, includeVector: $includeVector, id: $id)); } /** @@ -94,7 +94,7 @@ public function delete( array $filter = [] ): Response { - return $this->connector->send(new Vectors\Delete($this->index, ids: $ids, namespace: $namespace, deleteAll: $deleteAll, filter: $filter)); + return $this->connector->send(new Vectors\DeleteVectors($this->index, ids: $ids, namespace: $namespace, deleteAll: $deleteAll, filter: $filter)); } /** @@ -104,6 +104,6 @@ public function delete( */ public function fetch(array $ids, ?string $namespace = null): Response { - return $this->connector->send(new Vectors\Fetch($this->index, ids: $ids, namespace: $namespace)); + return $this->connector->send(new Vectors\FetchVectors($this->index, ids: $ids, namespace: $namespace)); } } \ No newline at end of file From 9116f283deea8a5b45e4b791b2bfc20b42cc7b8e Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Tue, 20 Feb 2024 16:45:19 +0100 Subject: [PATCH 2/9] readme uodate --- README.md | 5 ++--- art/pinecone-php-img-1200x600.png | Bin 0 -> 272844 bytes art/probots-banner-1000x400.png | Bin 0 -> 115593 bytes 3 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 art/pinecone-php-img-1200x600.png create mode 100644 art/probots-banner-1000x400.png diff --git a/README.md b/README.md index 556197d..2d06d0f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ # Pinecone PHP A beautiful, extendable PHP Package to communicate with your [pinecone.io](https://pinecone.io) indices, collections and -vectors, powered by [Saloon](https://github.com/sammyjo20/saloon). +vectors, powered by [Saloon](https://github.com/saloonphp/saloon). > **Info** -> This package is still in active development, but is already used in some production scenarios. -> Check Todo list below for more information what's missing. +> This package is not yet usable. Working on Upgrading to the latest Pinecone API. [![probots.io](art/probots-banner-1000x400.png)](https://probots.io) diff --git a/art/pinecone-php-img-1200x600.png b/art/pinecone-php-img-1200x600.png new file mode 100644 index 0000000000000000000000000000000000000000..32a4cf5b9e41817178116f71d14edeea421b7564 GIT binary patch literal 272844 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�Lp&FDj` z)O&(K){tu_rtKXtZc0aTNa+pDCKZm`4T1#wR@oGMARm!^V>%8py*20-Bi%5)hn)so z?R|lTz-#U#�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 F{vVr>b9ev% literal 0 HcmV?d00001 diff --git a/art/probots-banner-1000x400.png b/art/probots-banner-1000x400.png new file mode 100644 index 0000000000000000000000000000000000000000..cd71cdff79cbbb808a16df304e1a856cd95a1265 GIT binary patch literal 115593 zcmXt9Q+QZivyN?}v2EM7ZQD*`+qP}nwr$&J($nv6&$`@Kdp$GrVrEvjysQ{36c!W! z0069nxUeDs0Pq11hU zAG^O{zthhbTXj;2(HK^OiTMLiY$j8Q`&v6W9jrA9$PEFt)%ibuf1{_R|2aPNLP5V7 z`eN1CyZRRacER4RF>`*n1Kj$Xd&ZWYhsN(6(|>(FLvsWFau2+J3puW(|MLFD=e+nC z%ZCU5Y2pW1%7?=j2{0?ScxiX|1Qxp38;S_$`>~j-r|%xX2G6Iv_c{4={nIy)ZkFGd zGt_|>9O~5m*Yz8Tucw8l2}kSTz1*Q^%VhsLYCz_!rTyN3)#&S% zCFrTOdFM`(rTzo(msF!{d)`2g>GJM_&Z3j}W4C0kL2ol;Su-B>ha~uDxfyy%tMR?1 z2BVYrkLhjh(Dq+7GKES#=6#oP^YqTg?Va?Y_3!uAzjWG0Hj+8L$>8Zand1%vuT%*; zb@fxHLP5EDBI&TyHKZpzyhfUb8eLZL_<2vuKe^+hZ8$!dbJ;$kLnE6$1+(GbXzdu7 z{v5B=H6QL2tU@E)N?uce8ibv6Uf$ny2l*faC%>`Hs`&El zXLsmxfgRjB@D*MHN}uR#1Ne|`oU#Od1NB+-w4feJswe6c=7tjbW}n{X!UtRdg}<8` zgL8)<{C;$MJG}Ia#;6G<2D8L3m3f5W8&-NK3PQFCTftTI6{@vSj%BE$gCp=o#x$i2 z4LGAz3nJSY%3*N0N*nv8Qt;wPbDzK&jlmRbI{g~Hto5R_96kALjGHyf_W=JOz4p!a ztoQxQ_hMW%{c~Orqf203(ZTsFCUSbB?-)xrw-cJ5nJ{4A)@FB3AUs0jQc581g=n*Y zcuCI3Lf-@7*2M%F-38NqXYQS1*-JMm{Co$}EY$qWsI)>dm`EMcC<4PCO9U1@5ARey>Qmaz2-H;UIt*9}Jr`jq#;NB8%WF5jNwo{&h>s<#d(wwlYIrr&vsY58!bfa^Y)YZ!y~6tekkYW{B)I zHc@>Pr$2SumN`h5vGs=3j_V3p2fmazrCu8YwMMq5rlzg}HxLDUos>j>*$34Dcj5MR zS}gw@0Vrg66+3MEh)4#3Ck(}5xZhJPaT&^h#sqWl*&H}S=&_vH6ua;yo~_DC8K@2P zCYkkTSQG4*AXMpg@fzh8iiXNbQ4qea8;$%pg@5~+WZp~f9EEyvAYsj;ePWssbGkBp z)_-N~W>@s82lA*%Z6ssGH)EQY=uB2uCc28;eudSvoSS>b5&mlaov>MzU|kt1cOs)M zx88`)VR{Z}=mtxfYOkA%vfd)GCCzEkq1y2`QuY7?Qj$oLCNNOqkAD;k5foviAW{ zY6qp1bG}w}6qOXE5`#?bZjlJse#)7_H+$@vTai|JZ792?vg{{r5bq1OV*7hHhil0F z-W;-dj0dZ)<0Lx0y*4czdf@}fpbhm`{-i)Wz8Taqe*jJcUN)0YiX<-};7i|;3}pzq zBBDfNc7(|(1^;b_Z8g$S2#z{YIFMx+HVN+3fS`k5Ma$w zTm!7gtRabX!Ha18w{!|) zbKdXL0w#D@Jp>r2zX#g27}lazBJ3DqI{&c8I(T!ToD1-;S-V8EBS8nu(}B4`>S1=& z@ED~KcM4RVxrhn@)1hS>Lt_X#>V$hM+8--HK3nQ~_@vSKeUXks?JJEB7i;$9WpTae zP!pQh9e1}r_&kYz?D+A3$%Z&d4_|$Te$L-DDw|OLVO^1@AqPR&Ztbqp+?UumA(_eB zidonm69dV?x)f-WuRdjTOy37^Iqn*lIJ=U}SFNFh( zpmm=Eozl;xInKUafd2ync+0^ohu_zbJ-pzn*n6Lup=!No6){Y2FL8OU=R+&If}~uQ z#q-jUdd6B^K^R$pv+xH*iJkTuIn22-G+>|%y6kipgnGj(%Q_Y)CLs*&dk>LKpaHXY zUz?t(GEEL(E4#mFVGN`PY}~g$CLuuF01a5O{-+riHn!)IILaNE6IEyhN*}$S$GQiZS zYP0O{EsNZLB|B|2TdaRM0N?yaE_mo|wG>#bte8CCSEET}nU2?DVJCr%Q@<`Z3?Y>k zi_a*#&3X`kIdUk(JtvZvx{bH1^l?@uRuvvCN138DJPJH%GKd$9@lgY-i0!h1;(eLI z*hbgzZ9v&W3W`L>E7ajD3#3MB?t|xsNC!$vLPluG%K)!Hh`I>n6Pqeu2aRL43$ghP z6zU~o!?q=aTx_PmT@*aH-5#i`JqSXo1Sp|C(SOV+ZhovuP$m|^sulXDO7e@93y=St zwlp~B#Cj~n?M0Ym`CGsW{#;HYwz9>Y#iT58#%M|0ien^)lvO$F7~b^lbHPK!nhV7x zPW`Tsiqsm9hw~wO=&3MY>^`bR`wVtI8*>`B_croNtt4SggEmje@S2O|ynb34wx14FK?1P#pp+0hK%j24s z@OjY?p%QO&Og~Y5uPIoIg}qC8)jf+f4Jd1}fqhC@WJfApLN*xS*f_-h<3V`1Erz2m zoiSHDz{URQ8Y^0b;<@`L`k9{(m5Rivi@E|F4KQv3Ag>j21x0A^0xiW!u~87d^KN9* zfQ2K{wc&mCU9_A4!dmEWS+VM z9Y%2gD~yu<=gLN6S7Ej8I2S4`x?#^pBJGuNXL4@MU<^FK*_8b{(N7=Ce3fhvtJ$=2 zmz?~iQ_Mr1B9iL6CFBO4>uFOuWC_;Lyg9ysFm0LtNm%noMBAAe_ls<1+212b3k-KH zrHqT1v2abK=jh{O=YfDu@cz(9h%e$UY?yHr4BH4$d6=g5Q!GD-hF*vBlW1I^l5!X& zs;={(xueU4hy!lc!fkTR5CyBYwMkfF?)%aRgJf;m6zPXhbH1B01|WhXYp!U?2`Dcf z9(xC?F|P3=lfwbc1GELd9h;O#60_2`&5gahwj`2~`vkdAsmedVPAhT~1fHGxruX8W zgU2?QOzLnWG8?2I#I|E0@$mG5c$~A-e~x4SyN|aJ!jF5R6IZ##TDeH;gDh1&N*1*+ zWWQ%@X>X(-WLG^)aGa^$+h@V5`mi)c2qvL%32s#*&Jq?*qU<6Z@9rQw`sS7CQmQ{i zQTKY>&s7F>0bE|XX*r&WwJ-rmPjYIr%dAbt?g9hJ1YE*2-`)_kS;RIP2L`_p*B+_1S$lDw{(kI<(Xy~3;u`2>>GaIdPa*Mcr< zz*3Fr-9w$umEo60e>ncD@g?qRpzB2V9D%w_r%GR1ahwnpVH*p-i!hSwfmvS|-jV9% zpq*f5j^Zm8@q{w6`B&$7@^tMzb{}v3IA^3>hf27@Sp*o!{50GN>flDj&6rM)RQ-Yn z^dm=*lF&woCH8W*eIa$mDh&H~w9s(+MR-Cc^BvdI8eeJZ8lF+ie2$yJ;H0!SHMIb- zIl!o}(N-C04;6&*pDxAjCOkEp5tg5nk{)ANfXv|;%AA+qBR}OXDm`;Sz(4)1gs!=0 zu$McnC>3#deKPDJqDfv{dP4&x1%$PsE$gm)bQ`gXOogkOvoJ3rP!=C=*qSZ zJr%PPrEI!+ZGAM@`bVg?T@Yz)@&13jc1)ks4E(Qbf$j(E3IdCNp_mR#-PeY$Z_;I@ z7gpi|8zl#TK`Ts@d=5e#ScqQB0%z%hA1+QnQGE@? zaeCAO(Nh-X*o{5Ir`Y@Dd{pEe4DEWsEF=6!#aF_xV_bG(7zDL#4~OURWq zik&X^sFHXqa!7yz-A6ttV^pYG+S(nJImRi7_uHlL%snVVX;-FO>6OmSzTg*mgQBWq zdscC5oz}#H69Xoel8!a%!BHB$$5WIJ4z3qM@hJ-m)yMBW%i0!- z@5cUt`s$>|0&<2kDM8^)wf*FV-w1nO=g_6HRie+W+>xwQ~D>KqafszSRE# zi$J5gG1SD=!{7v|fTjbKElu=02F-xPaxXz04b5I|!pnoabUK3ZuxH99XsEP92Cl8B zCn;Kaat`j&CWID;Kk1;zCy;*$iZOrgMS%6HOZ5GQ`>iF3SS5wR#bGiBv_ekVS`<+< z`9HJ#nKoi@`3Rura9xX%m=QzPM?T9tk` zaE9VN>`;niRMCtG?KIgEwZ05RYO7X2D3uXnmVvF-`C7 zrqgOt9x%kRV!M$?;BoZkHh?aI|p% zSr&%a;(MbX)j~&YnY_~aOY~VW#S~>OYk$)-o34fknzO*6IM{q~OmGPTPs8 zSg351Ic&BPMFd%km)=Y}P;0>RAV~g7yl@fU)Oe@3&??UfCBfHHcl1umg39>g%tda@ zrGLJ67F!MdMb(bs^;)CgOLAc;HHcgTvkY1~SvkA!SA2Ig6*C~f(16=Z($()Ry`~pVjaF*ivCrX;5Q0=qf_wNc+!cEBM|wI?L$ zefwMuwx11Sj>Iwcbbk*cBB=1QOwK{yW6ALr28fN_Ubfawv42L@5wF>!z?e-M6F~%n zwR9JX@EnIdDM~CQ=)tOWM8fVw%S1rFp9|A0{vJmQ9V6=WTOkdDi2mI(-pZ& zkS{9W=bp@d95}ver|o1<{?f?LsRoy5=pEtdmhd+FizkIZZW$!_r@5o;nMm{L>MIP| zB1LarvvUFz;c;*RiMty1oAi~G@_8tqebJaCrl2e|I2zT#Z%-xMQ(pDcIIe^^{leEa zFpSw$$Ai-Vk-I(o75U(8BX3B$GU$w~91|TrEC4=55s17uPx5*eO=A5h`ajE3r_eV~C47hwR7q+CwB;?tk(i2jWCYXTlZ4<3 zc@8=U*`_T|WQa*ZI)64+XrI4WQDZtSo6zLQV+aw5Q4fO4yQ|7NUlb8z@T-yzic`&J zsyN9$&5c#mHLhI-b(>;)MhJA(uhM0HG)$w{oww@dh=JVmj<&d(N7hHqNqv3xh<;B;ZO9m+pccrWI z@VoQ8mAoRb^XN973yy3LJrs0l$wZIY3?)c-LyX*xXkwSv7)0Q`9R>Q7U`Qe_)Hc$l zya2HsP-w7@Hd+}cWQc5r{_AbG&hny^E25i`qKPfZ+Gr6w4paW6#3nADP>Ylzrnj|= z#zHuwisba20XV`JPFvt1q7|ObC$QrtIk)?6y|iE+qs}I1ge`@gw`=`x)rf)KFkRpX z9-rY;DG5k&=54xqm3zkl;#HXi_`oI(+vVGoDNJm7zy@*XLQwIYk&KSacDsaqol5La zJOYqXxdn0wcvwaXR>&}>`hexaBh#F}EY=!gcH^k125FwbDsZu>3HwZFnErt2n3Zl5 z9TOITIh0GsB5rrk2p@QEKtk^UjOb8t8RcKjmQDv%ObK?uj)PjCFf=sMC=*(a&=UTq zEjI0u44i4pM%#{xj8vlpn+qme=6yccLb-V5s*P~aAQXjHM3S8$U4@U+Fx7C0TfvX? zm<;`tlpe~i;O(n3uWEBzfHN-zq?6PXaBNz4@-Pgm=Z0q2d}8>h0kH zu7CC=F`3zsZ&+eKn?1=T{=gpnpIkW9tRm2I-cs|4+H>Z9WQc*LOSqXag2LnMz)HRb z-mdy3-Z&QxK3~J)_S@=%MF>$Pao@~UB%fb`&#rvM^6c7q@gi>I)wk-SuVj~MxF z^LlWpTEhoEy4NoQcd|qIO^Hc-ub(l$qXLclf$1>FV@&^F+k_a(LrlZPTeJ)r=bLHL z3MLPi9_~e57g)Lz7vD{^fZYTYP}%}U0_3YGQOD^p%Xtq#*;=dxaR3r0`Va>b5ZT=${ODM|@~Nl1#a`|FpFpfhzq+BCx}+sh%O z03sz}_`=0Jdy|ZhsnuJ*TdgDSgbK)G4Hv!@Oy!%3v|=(6om=gbf=03|0HNT?nR-pe=!TKPjk2Db6G}nOQ!1@`S5H z;Pznn-Do!D<$0s@HY_$q{g0eRo99cNQ*(dfnyqk&yC6mlxhZR_(e}$mAi1s&F+_sP zmyEAk_hfPwnLaRzhc^XEU6$coLwn8020SjtwEv$JY-=G_RU_fjW~w!jOFYx?NlfuWwMm3QR$Hu3qckC6Ga~2| zYjNJF1A`2c7!NmeFjN*p^@V=7akC0t@`(S*Fx#&OpVbuGHNo2Yeaa9t5?w1C2kD3&P&R_+TYYSW#8Stu8|F+Vg9V7etf9264?h!*Cd4 zqR7ij`exzwN+tYURA%_t{+03^qkq6{ z4BQJ50_X;bG+M_YL9Xm|W#s4G2u;Ff= zjbVo6@NdgNUTay{6g73&fw!Gwo1}T%D5Num!fs9%`*!@h$r)6$b>=GxTbG^$i7M6D ze!38@%?bnOlCRJep{l6}u;c>PB|{k2H$fO%P}fIoP5JZE6G*qu#j$!4pJk^qO7R!g z&IAkPicP{gof1fq3}iCg5gu zC;8m>?XAih^WU~o`4zW$PT0l@=RjW9G{p4h6$AqlB7ER3cKcJ zjN4apbV_M*jRa`}!!EyLfV?&!0LKI&2hT{j@l7*dMQ-^)8g_n?bQC62(}6~l6;zpz z>rzIHNyqk7Z!|>&x2=O%n|s!PP-XOjlNM7-SF;_egH9KZEYGA~z|;6M{h}9NgT-@x zmnby4A+I2X9!#P{khMPEBIFKe>oqOb?Rn$L`iCel){oVZ7JxBMZu~-A3Dd4c*FW|JQ+&2g*xkBB9~>l z#Erm85D7(9e^-XgTsrC=cLBgG+H$Sfk#*DBD8p*G(h!xZ4O^IP7aMoQTLH((pR%I2knWFUzi^`Y#L z6=!nFe~M;_QcTE*g*~WJ&&-o>8Cd|HBqqum1H>iom43jsK%N`Mv(;cpo)^&DwA_JP z?(+^0xZ%l$grXV##Lv>BcGl&jk7~lD)Gdz%&tC%iry4>>udNytVV=v!Iui@zzXsa_ z;ioy?r~`W_7IzASCu^eC(OwdUPo-biHkacO{7IFer1R4=MmdMbXpZ`zNF(_=4=O7a z03%LL(Ju;&Enmq%QBAa-H)>($AYqg_U?|4jL*0_)1UMWT=71RTJHR|nDj=;Zq{*tR zkXbxG$eFIUOZM-T-)1zqoTk%3!|3Rc23ORbB?l0^N=HW03QXiEx}J!?gV#tXjau~C z@me_c2H7|v=g|AIHGhQ=(a8mw*|c*<9<9ch?hAVJU)KkLq&vDIwFLB&rAeTbVT zqfc+3Iao6M=viK;t2(C$fp>gjQl}X|+~Fx%pU&IM`k)f7&Fr?_(yfRZ;%OuDdH`mk zDcpG3u5xkh(EnK~DcCUfw3skm&`fXE)K@yuOa)xBwb@>}MtJ;`$t=tS5k+Wchyz%4n1^%E9f7{E(v)=XBvE z3_i(uZ>*{%UYW(8#2SG~cdDG38nBc(&Yv2t!9Iq$=YsuWwqNF8UIeN&Q>n&OJb#BW zRNuE2;CBh_S96y!QN?)0DrlRZ9ddFN^H*=Wk9Z|)Ks2dNY%Ry0`NUdm$?bHrGpbU~#M9H%C(~DZl=Q`qz{gDRfpw{dz zUeSJ1#2O))Ly}Emr8LRa%{*GoE3W*VBH&V1XO{ePz3`&^nPT3Mb?-U;4G{M4A3J-& z(hh;gkb;091ak>5D!DXbi0muZdXPRqKq|kBT#AwstECC5fXkH%#p(EY1q#Xen6vL! zeAyd+%6FNitb#DG5y9#|2H~yf5X{42sn5P~P|)BIAa3@AX+uX4CP!t!x1#@EDWNqF ztc`Ixq_zLxq94x~>$s0HE(qhDU#{Iy>G^QNI)Ic?D$h)69{+ze(#n?0emsbH*7ifE zV-Gef^Jm&;wQR8(lbBRT)2_j zE;_r(7#A`+nPSE>A-x64#z;I@hMg?yMc&P;T-~&0fECDNsSE(;^>hyE`GYwJh~UWI zRuxF!_H031p`KMym$M#`TM8ga{v-iDJ!Fe2mr{!ot>Zrjz?`V{tLn#aI&$Q7^`c*{(MvsQ&8d8lCVH3nMQYIDPTL|)k*}{>ne=97srI_~_ zfxF4+?kb=HYr;nz;<wM`=562m0TA(djD$*gN-xAkaQIaYqQMCt90 z5<-j6>&iDpu9r4Jk*T@MOC#TZ7!3iHNwu2LT+PSWnM-f=_xjdk2e7-`KSf`-DX7yA z%7F|+d(>qDE*4h=goVuW1=0X`QU-GRlPE;pn=v@ie{O@RUPe5>-6&B^$OSz$zN;3T z!3i;^KtX|5+-*3PJLdxBfhgFv^FmG!_*edqDQ`IvGh(Q2dP%<5pQYwJ7tZ1J}j&ya{obBotq= z@Q>Chixfs7@;;X(t~5hfPC)f&nn_Z_dM>!O&hB&HlGE`NfNTvc`2v~!gw~Nl*8{y5 zW_WU(yZ>A=Tb4gp(9M=@nxwK5ebD%CnhKQqmRPR(FkT7QxcsOlEn63+wrE>Ue-U*s z3H_0V*m9^9A3O}oMLRX1ROL`=OlNfl65cJCbAgoi(t+SNs>4i2Hek*%7{i(d-6xIe z(?j7^5`rPSZsdzaY=-!`paGtpUfI{8xVEk%8EYJLRJe)8Z<9=))a7~~fFE{$Jsa{G z;7Z04C=`22zYti}HeuSex?)z5q%(i+cpziLl_Lb7-($ZIBb`v1R}Znq^aezHNJR+E zRRO1C7nbqukU^1vM8Rj4B6jK?MH=sfwmWA&^fE~qPI1UAsXwvAE{NYqr{}PIA}&RK z1nMyA)#BmozBTDFZVex00N>29k(fP@CNo@eIzQHm9UXLZ?O^8%2>oB_d46?f4d+X# zpyR!a2*TG{M3>U}d(AEZ-PJ;ub*1&5G=?{+6={`PZ^;Oama8~MwtSw=rSO494BBxO zdsgx1F0_>?CT|kw*=sgZ`VRc=dtOX`Y==uu4J~ZWwRMvA>5rU|$)Tld=%yYKKlq?+ z73!EM#v_eu)6>9#at)7jN*;Xpqb!Rla7yTlt}VEOgUlF{gZv!N(Z-wX{}~IWMk$7V zajOL$7LifQW7VVKip-_*B2>kVWHwVhfDW;E6TP3=l?v$95_oAhlbKji&_8R0g6ni< zv}AO!CE`SjkM%Ealwm7~@xRW+O`^AIa(igx+E|fOIAOo(e&UcXEm;EH#R5wR6t<^o zU+qG2h8+(>@Qx>YMpb zNHi=W{PWMTm}I=8?7UTL1WO-atk!X*cXr;VWjE1{iZ-qZ2{_GofE?agJA`VM5}tn^ zmAcO-s|X8y7~}M$$SdDuzZgvn?$|pSJ+krbL(&ZwwU$bgz5azK^J_NLHvfKVQ(;Wf z)bggdz4F@mk|fX`+E9W|zO87V+p_(_D(=my^oS*>wZap9BGwj7P(juU zY#xd7-M+(9-yfmA6(_t|$Ho|v>x%?|z&63{mh7+X#efgiM8=~8*iG(wJ|ttDygJ0> z0yF_R0EV1cOdq|9WeW?|U6(#-a}5{d0TDojd7@XFJN;7a9tN zH%ki%ox1HTa=x5lZkJTDR*eBjDoRX<$5aSEB3H9v#N`vo^Rq*+C?(|Q!7pk&WL2o; zs^2f+QwpLDHmdM-B@uKFHNE3qQQJ}!!!IbgeO$dTs(gIL_{FBA z`qVv+gYc~oR?hQ=a~cR)xgRNJRS<8#X`JkK<3kVi$R5$)pkLR*y|ekUpmII@jL{zO zQV_nILN%#teQW%DxrFFP8Cz^QHOqNtBOecM5!L2a%OzXGSdbu{3WN)_Jp2MKrS>>2 zS|kug1^E6GZcRN;rG~xXUmSH>Ti{C$0C!?;rlZ+C)UU<^O^H>*23N!(Z5uN&yVY3m z>Jp`Q)t_EUUDkQfB+JYH7SOY%FvdtI@;ej^>jh~Ra%%KddFcbsK)Oitdx6SQv_NRp z^X89G_n1wt^AbAFj*yD*!iSI9E(absX=PVVFm8mqw|vzv%~TJeinb{94SEUVv-{b- z-d*ym2m5bZhWSO(O7Wdu=#ea|o-5)iJNLI;+2Q0`k1##}`zxZ!i?B@HeTG0=?}u>FNB87%a%3< zc*p4I>wZ!B=yIK;zx|n61FC7CkqNOTE}Lw4fkZ@?SRl{@DxFEN35W4f(SmEJDTd-$ zc0XDr|7#R>TM3~QMF-t)>Ex8GPInW3YHtQh;ql*&E`rUOF; zi40NNXuo#&U(~5}F38m>sUh&SWQ7xYtdew+9AndNJNE^73x)+9dMGcF)2V;j2kAa& zne>ghU+KB{pNrZB8RnD%vxr8Blowwt0=7LwEBCad#xhxyjdNrH@K~UjyszqQsBueW z6uOgDX3kh@?w%d|5@3{=EO9{8Wd=|kmqT%{lwT7<6hFt+<}`6}z*l#JSc*hRbHaCw zk)zaicv98`3G(0kFwk3R@pkheOtq*|LXUgCD7E8w>@t&h-Wr}q%Br2i z)E?aoFFxL;?r_Qqi`4n{+&|%I)^3}Y(o1TnVawLdNtR7iAuB0uY0J_V}L2!Ku ztrkY1|7gp)LRC7+2%_Gm#IlYcuqB&hzUH>0|k#hAxrFQ39F{BoGP4N~K z%$9NHC!Lm*L`L(PiC^3fZN(d9O>4GvmiAl5PSSbN57!>f%<1fQR#L~CEFQ+FLp2}B zEC| zNTS$*$xZnEBRs2+r zc{nlE0Dvm=fl#%Cb0(0mg;67kA9PT9E53lrfuoxZ%nt)$UtY>F4HhO0uxC1}6h%A$ z*}znah6Ot#UF5?czrJumlnbO7(mkY6b0HEcsLf^*b!-uq2jQO~i{y zPqsZq09a6VzUd;twUKWYRiBD4?kmsV4FmqMrSZ#&5LF5X@N3hZ3cECn#e5pRnv$o7 zgdXhRG%eg03N!nRGd%NSaDAbqXjaPfa)-a*ybdZ$mJcM55bX9!!|enqdo=2Q7{V-*V+~_i z5fx-O!rNfmdU24I4#wwEbj%nE4WZWtu*htwi8vUg_wmQJ%Rhai1%5Ksg>k|r(fhpW zN1Oc0_%HWZ=p*@tj2jofTN+l7Q7%xwxa*bJel#tMm(&3IMU|(u~sQ-Zz&UTzy0nry6TjeV+;?{ZHW~t)6RB z%5z<>syd`A6Tk&c=g2By)O~-i3SIOGD;r5v>uAjq{%I@wW{oY$LATiU|Ib7z?2`G~ z^4-H;*x-Zr*IklY#d_+cCP`?*HM7l`WxqVtz$x@<8at(`a_^s zct%vUhCf{l?IL_&A`;+ph6NP|X%0yf?7~I?T(AL{Wi~Bar(%{Bkh;j{bQm~F$hRf~ z$5?0uJpUKuj5c)z0&a4B#TI13Nt!U;hX?f+NZLZxr4&ZG(Os!AS+6HIroT!O^ZJZ+ z$9$v~(2QN$V&JUsprpNm9S(IU+YE)LU1~< zR7z4DJtcA2kvOxg&;O{hCj2NtswB(1MRk@!6&`bm-}bge&$y*}AMo3z1M$eb-8U;{tk@(>(+;-pH_<*i zsz8tj4OWNeo+%qU5~dD?zjxN37e-?#M=MaC7^gc$G=yhS>?S7Zx_Y6W=dI67CU(v^ zNPEjqw)}hdbe-+y-VX_B)BQhd;T(td$AwN?E$kH-wr2W~ zGANnl?4QsT3Xbq-tMt**zH!iVWoa?AKtfJ3%?*1@OV#58W;(IUs;DlFTL)|TihX|> zFRN%#ADn=9A^{5X)4q|L1Qb_aJ3~1^w&1qP!2Rze!Bi*4TOlZGV+Q$$;50d0K{^T8 zfQij=l^DRWlDp*@p! zrc2~ju_k`Mm~tDRHm}J}ZhAy^kcw z7Nz9hw+4S6^;l=!uh2`wxe)g|oJK@%&96A?IH%59eKZA@367!sQslD&YQ<=>#5}g| zjkhyT%d7g>7QGXQM6e6nD~E)gt)!8S2dH;|a7K}1gOy!kS``71$TiaVJwMuC(i|Fd zu?p=&fQeSfUxfoWW-B~oOND+a!LlB5@-H|hu4$bqF-{BHc>bS@TS6#_W_#P5IJWgB z6RRA9eaBN94Z_RMKiIq`&yzEFz2~PB@^~7UG%87F)bFAR^0PF3mMQs{DlF>tIg`!2 z6el=vLKSyB33PYNPS`r;>KW}RYk9r*-UGAUkpq#PvA6pG(MdwzbsC) z8lthQQ#lpj#HQww43)tR^ds8{-SN;#sTRnTDVjC zb{+9HCe%~h!*QVTWYQ7lXk#oQ1pB?&&Wr_h+toZWygTB_CIlHR7tqcNZn8N>INZU7Oc8J{?YRR>;@|BwPz=$lT$@^v+$NFhGYEE1| z?f-q4h@g9Pgeh0vcRvzR^^_qdbG{JaxQ}X!1T9XSiH8@pmtWysK$;|BWbses+Q8k4T_60unNlY#P-2iU*)|z&)VowB1*^FDE!zwtD>8z zInZ?uOQ_fBq>ZmM)qEz#&MIdv4Gp-3+DJi0igfOzQ?@FTd)A|KjQ&}mN>F9CDdV6O zm}nCOr9_T1gC#q?xF4bmgh>f8PXkWErL!gt2P&qjk{is-I4#{GyvVKM z?>{TFEOj~CTmeB81bzy&#V&ZE1u~`Dc93T}3S(XuMw@t2cj!LyjT%i>er&!2eHZN#lsNyoG z8pk{Lxj8O#GJ$?Gx$p!5vItor*gt)K6cU-yspT_^QH1*gijxan&yB>;R6|JnqxwOv zK$;CrwtK%3QAzay$>|oh(+D&&X}esx1nJ?4VEg*l=0)7;Fw&2^cJ@~cp99@D)=dLH zpd8bL_;g%DG+?TEik?`^Od50&vYl~4K+f*<#Tz!;c4$I@z7wR_a>fSa*<&GcHNUae zctC)0J%5S|0OI~ncFZ^nr+U!2zrF6$miUsQ&!H5^9dm*_?XR{S5{hTtWaU2;3PX!>6Rn7PLNTGANvlvkkm5)~bMFs*7C7 zE?$zF0{sx*hjfhW`Of$83umMPd<}SjC8%v)w9o@w zg&QoLJlcf3YyeAI*_4~veA&TS7UhXR7Sm{OeELXy7E(etxKQ=7=6KYsq;EaOxTbg= z=C_S&)W+89sh#q%hKe{u}C4`N8u#O zF#}REk%+y(yjl$NehJ8I3LVQ`aH(i&UQgN4v#&G9c~Sq1@Cnj#sem;nya|rwJYu6i z$|9Gx;QN*~vK475t~i$&F$xaRQCrD|#IqnS*r-#U(uu9gmFxq5e5q8GS#(8gkKLPq z%a2%`>r1&lo&;rP(H6+;-HvBRelV<2U;ztwK4nIzHXW`+-qn&?29a8~Cs!CFoeN-yTFM@L*>ctArO7E6^cf z#7ju_Z+nVQL7}EVn7^T_r{E}+h3J`N>QYX0dWiZp)#ax|k+Ezov_0EE z`D*cmHNUF?j2SCqAs&Jk8u$dAuK2k z=;i7UTjh<%iI@`%t-RlzKTcMC1C?k<1!<%=MJ>8tI{=!syKcLP^x$I+yVonAbS1#X zhiH*^w0_n%n#EVF%4(UjFV?J6E7PFT_~6uf*#zWkV@veJIA&Woxvb5~oz(r=(4Cqh z-L=PmdjPScqhe2kpoGgh5&gx^w3q(6i9nez9F zxtD+o_HOW1Fu^~jJq0YVo{4)V1lz^qWRQOA zQ9An|HCXSPs!BE5Jrwa97;rZ;Gcz;eUS~0$?KzNusYLK9lyp*9`o^uDG8sEpN1wQbo{0^ylYN?QjP}Z6g9bf{`bLRswg`Q_ zFvAy_#fL?*xK)=)+Q}1De&!)48LYp5Y*1?~g<3%CE#q!xW@cuV*@3_f!LJ7iiwJmA zPAJr{F68wRH^js_a-He<<72xl6?B}@11Vgy)jTJ?fQH>s!g0^Y8(2ufd5Q8nefGYP zt~M;2&1lP;B^39u^>rm2yeh;|BMrKE=%Tbv#_WGIZI+sXA^$5fERMwu%JpZUb(i7Z zjjKMVZN{Z?H8bFDW@ct)7Tm*O?!+_m4_8iJQqfuxDq?m$m_9al^dx?*4%)52 z9cgTVUEq71Zwq{1Qtywc&BDt7)EsRpc#wQHPO9;=^>kRK{jT8|^e$Wm+|A6)%*>dL z1mB*58Y2l`;ZS!uYH6kb`V-AkTNE!>JtI+v;jd?fvxcrWPUtT3_RSP<=)@kv70-Uq?5S%il5 z*lZ0l8C_a5ZvxrBiIf2QBtU6)?HBk>%S zq9{EhX?BC)&49a^nVFecZb$Ta@KcGZ_p6V0pjF0E6;G5eMi8$TJ~BT28Q9%xcFTv8 zg>Fa_sy%R7haf6sG=11E8^hK?Y(WK#QR69XFT~hPM5?3&uIhb9EkhNA9{Jx@4nvc%acXY3_6=~Z)c4unOGWm#A=+3w!j+({+SRBN%ZiRv z6uRVQrJUG8ayLV_?`$#TZ7F?$%Z z&Z%Z*H+MN{F-757qqhJi4o#3ca1a!2|F~O51;;FT7h*37kU{%kCbN%Z3tQ%Sn85lp zLwq2IU|@#$lprrD-IxJ!WFVl~vNCSsC+L9Nr}Rr;upp)ss%@*x+54 znk*sRe=_S`pmYgX93|sWT{Zct_N_!Y$Osp;M~%Ag7+N*KT==m>FP>4x)zi4;orR*R z!9%XQO4@@NA2*@gk3w39LMv9zu36|q`(CeL@KY*nKWQR8R5x4$?q+5m1P!@R+qbr@ zp1HAZ{`o*K9%g9Hpwi+Y{QRrO+;4GWqPoB>Z4u+Yu`cjwm^4EcPaM~5A4;02$kv#B z&hYX$AHF=nj~CXDX#wtjorRsu*Q7@0*5DIhEl5qs1Jh1DH0i}+hBHKR`#Gx$$V3Pg z+pM~+o>O?WJD33)uQj5=&YQ^IpLO>{iLtItnV{x1f>xe;_6^RH)4(zyR7?iCCyS#?X{PLXH0t*MVJCEcWW>!ApwBZyb8mp}65oqpFOP^AoRT^xPtQknTD(M5%=q$6{)X=Oxl zl2Z;fz#lhEKObK_0<|Nu_ZWKe(VEENYTRZY-rhWXbt}_%t-{2howubcmnN{3LhvrJ zamh``AsH;6I#_xg%>C3Zl=MK)2$pHmgs z-3$_C`;J}{@;~)l6x1%S)H4^EOU%JBNT8Kxl8uLx8pr`ZtxCwglg?_es1x6vm2X3$GM( zEaOg$z<@I3zCjpV#x|~^0pDZ30OdUC&bLZ#iG;Gd?<%64;)KsDhmdLbYywk#|MQm9 z5}P8eptU=o0{54_$r5}IuXqN0UF9*1X>~y)qblyt1~+@B2p2igl=NAb;qu7)0?gwC z^{LD_JmmomxSN?hI#^$l1jDin&1{wll+R%O=K&5gQunhiHBm~IFAw;DYXf;G@*-Gt z_C~eS_Z}++vEYGFS-~Trb9{rhH`f1h_QyvAf4q<*pdY@h`hZJT-p9`22I4=^gdb#3hbg9aiFlTGASu;;#Io1tJ)t)PNf`jjF4-6Om?{snFBXAoEL_m6 zn#D8L5Xy6_p4Os>8fw2P+$onb-)u;E;fcf*9$1qjyzBBum3W3KmybpKmJJ$FUVjDr zsYd~PSKjWM^5mZ3=hBB7pVJ8b4u(E=oDtNDb zN}SA0q+3;#u zEW78y6z*$vDU1ldW&VC)-un^W0A5}Ie!$>nQqA$-C%`B8;(&(Le~*xWo#FU*YR4OQ zoa(>LTQ0F6Z^%nBQpn$F`hPcu|~gP(p%s2~5ElyUvajagQ=XG~bUgy^D8 zhPI0*a*$cfAiJz*OKPn%qOw`p0nyaxLNv{hP#$Nd%@o5Ne|cFie;DA)F!k>F`eiz4 zkMn<_E1@CycV|oa^78;MZ)?(>;`U3C&CA_Y7H4ut8(e!Ch?Y6aMw%A)2xTwFMxcQk z3R@PSL82_dS*C$$50u#xo56+D5q_H(JaQ2pvF{+(M)#`A0ci^+REiDY0?v$wR9@++ zdf0bCCaeiVl~)av3d*zaPwk48a_yK{RY+n-nrF(gj1S6XM13ftTvde5F-1jjRUx?r zp*12PEz7>{0Ay?#$Tt(>%BDU}+Dam z_!(vp|K%CJK24Q~BL#B2;rRDsZ!^>V^^hXKrAjrrUeynAO}cFI5Tq@2U>Umw^JN*b z%`~l({gQ5Do4jyeiK}y^?OO1Bt2m@qnc5FDdCg)ZR3N(sk(gxNcJazL2n+HIX~TPV z(Qwv5Hnyz7Y^B9_u+X74P`r#aJ-IxULsGC<>I;!n+R21y(xA~=Et4h4<2+gR--u1N z@~e5KJf47OlpC>oym)zHOHHxbpoHmZyC9x34>?GLuj2eAIj1a~#d>*eZPv|iFyL9X81lM_%FkR;AxoC@Lo|UGkY|Te!P#X z^hCJnCIacWr^a2ux_TW3;sGbQZlK1XB6649WO-fG42-$hJXTsGMFIGmXWBuzSsCCD<;M zK%v+W237z{49%yAj_2uF1}Dv;jB^qeg!C_)V?1cg(*aDf79oFg`67h<_Kg`hl`X)+qiM7yUTEk6&}P!%ak*BaZ*} zJdvlzS-oT=L+}r3ey&vh_5|Nw!i~m>LPl6^Hi@W(e3~k@Kxt5T^eybpb=>^}EH7ug zSrtFYI@`Njoq4%W(uNj9t)CsAA(YU3wgA?)R`yyU)%ts^mvUa12_ja(=>w*Bnhd~$ z`^wB`l~M{BD@>%HND*mSwUvs5QJJ}ivhbaas@T|J$UDi`WZNB_j?d6Mu}U+L@l~dB zLkxfC8ut7Mkmxt5m`73sc|AZJPfsF$4_h70hzz)!eFCt)JQYv#Q}jC1V5a{LQ%ab4 z?I~-JgepEj9lxrqJEwI@+Seyt+Z9dHmUl^DMvj0ludBypY{}L376-WbP`{sSyeSW20sj(v5TT=gJ!17z33{ zM26%BEn$D568RY+eI{E87knvY6mwdogpeg=Gflv2^Jk!c=6$a$%HI2AQ{HTzEP0vmSiebyn7U|eud#H5@IeT>cfe8 zxuL{qV6k!on3PST-^8tH5_yf75LAh3sBy`-V9xv=1MX%Y7qTB8p`~)v&84M3-r(oU z)BpSrZos4o3aSbk# zHvX4?d4%$was?82&+8kX%&}7eRwhrWoj}F>6M&vrYMcb@=B=;t8`St>b2B9 zq-sg;Z&(Yte!Ky9vyXx;mi)S# z!`Z_x`0H(IiZmWp7r0Q{VeW5=Se0wUdUgRTh#B`l=Z&55y*h@}Kz!{={npv`VESzB z6X8e5w^8^R79!0!gP_tA$Zg@Qgq#$9HOLTl|y zNHVEBQ&=;) zIy@;r%3?T7Yntcv9$a^e@?;0Z1{drRa8jx$R1g_(H+$!JeMzoA;oQFTWvYPu^)~(d zG*9*?O#859e%&pc%Pk%)N-9Xio#)9Oljf}((ERMJY85l}uSBliqysB?tj+WrYTt*F z>az-9AEtWN@4qIn_}kZsNb~h+>ismDD*T-uv?JR1I>2A!%+^J*O-#(GU}!@Vw}aIO ziZn3f3Ov`g8~0th0q9vE-5`S>(x`DNjd;hiDmUUTl$PfrGgMp;Z-tX}n#^$jHG0nb zCN3{U$}jJ_3ao?|C6NYT{|mg!lvZCUeTSN)=RC1SzKP0wkc|9E6PzjUJIdgyoi(F+ zaWim)&Ct1LSCs`MaqG!zWvTIrNOXTP;BNMw?Fb;A-ISw!d4+$!PIQaI+_7^>t}htE z6@8KNrRZJ7wTlb!?1vCp2`6m8jvEu^!lL;`od; zM6#?tfjLaAG<-nte;pA#PW@TGeSvRZCpF0fP2>%;o7qyL`r8wHe@mzuLzx{pz)|sF zd2>OQhyoJN)YQvnDL5eoCp92~dv8ql9vdsTL~UP>T3mg3`nIMkl1Xr$r+AYI;Zdzc zS6$^A_oy0DS1mPLp@y25o`7r#w3G}*-NTPs;iL8nB+cKIaXx9q9;lVQa(9N64Q*&{ zVU_S2v}ifsoC({HuH06FTp(41vXFNGP~w@Ci8tVG_TC=*VWzvd8PXl``uATGUSC9G zrl-ZNX)1^LL$34JiyU4XarT?rg7S@iE65U%Jkl7YYV1P(QN?O>33=XwTB8Q>qIdw- z@vd?$R0(f3wa)~?kmSFpdOIvBhj2b`hlvM2{G1Z-U%tTa&lA3RvjqID>=-N^L#A)T z#B^T*V>gfcC`-83KT+ZX=uQz?GZ$JRdp4^!u?szb3goqyJ7RfvUkUpgarG`S8)!{Z)fTU*UgD@Z7XGA})WP|G-G<%yUSBuOsF_z`D#E!~r; z0D+d0hXPeoWf#uZQ*y+%d||801Wy@2)^VJKd>m08oB-r=o~O;I_*M+ZBuMjNUN8-~ zo4uc;-}8*xM-ShBP9>)l`0HN+esw{9i$6_0$lGbPapxg*>Q2vO3}BR9;v7S<@twmK zG(R=rREtu$*7AUQvZR5{YlW~%6v2M=lxIN*Wz)WR_kT_lny+7{|L|!|z?%xqwe8hU z`ai!8tKVAt^~{0vIPZOVSh;5ryN|PSGoM#J%rsA-It{0I8+}d~=wu5#tPtd0xEVCm zK87X2Ybq!iBH0Vzs>)P&HgiUDjzzg)L^A=+yDP^hHRc0WF8QQRRoS|i)%?W5{ROZ4 zC{Dtk0%~nUeAKA5e5KY0s!@cB8Z)OBB&+%RtjQFzGB6AY2v614a@iJQnM%ikLbHY$ zvVjzvJOv@v(0N28DM^5N zw9wx$wMJf7Ul$!ux(@~I^d4&&T}zqti%~iW+C00JOOE!qI6k@cJjW5f|A3#rRu!5l z0q-XGK3Way)ez)yc)t#F!_*L5Iv;LR0PDn?m<0Fccz{Z4dsM<8vH^^>MJKNhAASMk zuwyK+Bgj6Wu5al$Zvv3kktc(>Cmjvc^%DhQKyqx z?PW{SHGJ;Xt(Fd_=KHC61Z<*hwIx~YZtCr*SX*M((X5y1F>}ztG~jObsL$tdiXTzh z6HZK+zrMp?za|#@5TqU#kUgNTr0%xrO(AP}K&KU(c9PVQX`JOKxxNCI7`h>|fT;9Z zgJwRys!5O4^{9P@2m+`9b46-^1bti@(P5F8(?YTB`0_FpB|kq+@O@&yKf%kmb~!Nw zzxz}9Hg{3|&+81+Q8X7T#n+Lk#PFm$Mn^Q0<0*u{4ywE?v&K3`b;kMi^3&8rKd_aC z=QLm5cq>)0FQGfF(~R%N#4;GX=2Qobgxv^HcBw0f0fW!DA5l$}iDq7V5I!WxeV$Odr&H*7i75}IEQ#4o}G*p)7VEclT&$bL+Y`-64f7X^KJEOknHDY4}1I!+QRWrX=0FxS5oD(1j@}M={4i>zagtYuoU4sP*#PMC!0b z;*9A-hq^;;fMZTv<26_h%VKP(I;aWzthaNUQPW7nqs%SErmcXYv}pA3;|KhDf!~hs z{oBN%c{Td`t~SYWx=EVz=i5rmb(D%t7f|kJUOR91P4fqz(W=nLk3%kAl3^O|;V5n9EVp=zl#qieIxUUEQgsSB zkv%>qkzc-<)po2O8=jS1ukp^EMi1!3zWmqAWzMjPdg->XCoeIKUx#^L5~>e!yG=&c zYhz8t&1mK5*p7kU&(}%){rBIde_sr~?`KPi>dzNZF-a2|t!182dqXl}2)E#cFLi;?R6Ocu~Q8OS(v@=bJHGc0|rm zH8sn=mp!4V*orheJ5FoN^D{n9`#o+fY%t(%cGo8-wmW@!nY0~`XkeTn`w)a;N-cK& zI63S>-q?qUu|w?(qe>%#+BNJLT#&zu%vgnW$bPX?;~?CcdZD z1s`*vMT1G$@f{M?6HbV&?U6FcIrvj8qp5tBn6H!HOT)iW^ zBTH&7+{AvO!d01F58u;GPs4z_*_|GSg%xx3xIccuzkkjW-HS%MORn7&3zVx!ukb}P zVz~a2Q|xO{8VU5LwP89pn~qK5P1y(<+kBq0B-@-88}LS_<>EqpAU-vAW^CpR!S}Fe z9IRUJz?zr<6QcR`0>56T=1npCZrt|^AKo{Z$VhK5D?S*I$*~9Bn20cVPoK;6eygESF%&Vx&6~EJmix?f{igm^C&=rX9jdh^Cb=Gt6xSl8JA(Zu_H5Lz!4%2H_eT|hFo8ycf;X$jv2JZ${bYJqMA6Y^0 zSWV^;yMwPUQ^~}aFYw#%@aNN%eSh_a-OrpAQy0}?5`7wH0iQ+F{SZd}_<$eSw!RC* z+}K7$)d`*66Kl-F4R*5vV!Iv@KX(sZRo;&3&C&M7l-UARehcl9ffgE8LFk=F`#e?$ z(1o`4HLu+WZ0f=9cE@Gcs)YfMthuJEG~LXSCT0fQ&CE8u%TibRG%vf~e@wNfi@f90 zq6){9994MQV8xUQEqG%8BOQQZ{&NXEPxTNb52U@phVG4O!DyY)f zc^sCJTJph5CzoF@Q#XL$zQS*F_WhS%`5xxQPJNt@F#We@`1e~9oW>A)FB(uJcWff# zB?;{>c~c*RW$Kc~>oYRr5j1(36QO){JhN`?`+X@@+RN{Cc^td*Obwi(61L0AM$NIs zx+}aqaEiT(SC2`lDV_(hct+Qm_PcDoGvID!wrOA7M2vZTga7_HRSm*8*PgnRL@yyb z_9-gnAHgnMj%~coJ96Xp>bbe}ZgR@c!x{_xs`+nBMI}rT-1j8_CK*grT3ss5c#!RE^_`PsrJnIcylG#?7NL1fOx8`ezlFJ zv&Wz3-JvM=$Iuml%SXmn(30*3+|A6Oo?3Wz^EUbsvcF6++vI2Rx?3H|`md(&IN%0B zCC^4<7cr*2nmg&rYKiv7ukBN%dhl@GDvGdyXi?UOQB&}ND#xVCRdil;BaHEN?9TmD zl-l%EJwDZM6W13aTpPRm{56qhj`01DKc-U4BX&Pn+oo zwhXfU6CPl57W+bWcjeur@HUQ7Fez^=h~KJI%g#X%+PIXjWR2XfdTwRo_cPHdrWuH# zV|>;nfNuT_*Ba}nl?G?1?rb7>EKX=)rp1(p!=R)Y8*mZ}jN=)~eGFR+4Y-?qBFKJp z2~&4;n(6}o`C~#zI4iO{Cy?tPmmHMD7{qNX=sL7wKqf!bH@F`BjlC_|vC8ifVJa0k20tzm+(YZ7!A;VxS>M40B6z0%LyXwKn=!># zmx|S)LiXZvkXXk)kJ+rLRxd~_hM|kg3aJt&mrd8NnqfsPkmz52si`c4aUEcT7Jt1q z=%i-iK;3R_BlX?uS@}j~{Fy(qafo8~;!+acP`d$lvkwT_kI(hjxsTG6W&b`^0lGQ6 z=~(S)QihRO3hUC1Wrr8s;?Gb=>poYP55ppt(}Osv@QaPa3`ibo8y3GKFqefHu7L7A z8G5JX>Pr8?r6fs`;2jGj^yrILF4ijjKKJYW&tH?w(cgZ9|N08QX5zbT7PoKrBro#> zKQOUnkcCEWZv8_HhH%=IFCPt*!PT-R6tgF$)mKskYu#F#SdVibMUq?V07^_RB?tEx zuLwMl9xF}Pqul6q>WUnF8nRQ2h{GA)GL zZWy=z>YC7aQ%nXby6HXZSE-ox;a9y)DZ0*&*H|i%r3r;N2+;{pEh?}_;S z=O0tgrk~@) z(gtdBCs+I5cptx+u7gl=6E-^PK=o zRhQG9F0y@dt`Xk2=}`q4*LS|W!s`M4_y)iK4hNi=Gu{$Q6?=oJMD@pOxHZV|v=nIK z!aic=)09?^{1A$u->n+$etrW&g+c$AJeU*RdD=2!ln+kqM%=BLPAOvO7`Wsr;5SfZ z!OCqs^{XQTB=OqA42*0LV8r(uu--x2U**e@uaFGkhN}%99N@y5VJjmMX&?!FEwj;8 zC`^%y*sdH?C-Vnp((iX&2Hedqup?yuIum35@ApaS@d(+UadojA-6G~0GR~Z71G`Sm zvUav6Zr@|y6V)$3*%d8xe7v7rP6g;BZ7p7#3sO#$cY$QQbgD=0xl!O<4B~xIv_rZQ zf{$lH^%NZxbR$kGSmg*c{!EQL11!54r|a~#xk1=*ZvXKc{Q292-Ayu52kw5-;0xMkQ;yh1@EQf5y8Pg{5|jE>Y`iC<p560xp}CY7qm;pUsNg&g)PuGu z_qL?%3-N257fA!|W@jx)N8kL#O@*ib`{yL9hYYd6L$3e_%40(WLew?j9kN{+`4 zINm404yV^{y8S>!6yMD+jd>|vX5=JI*2zP;z&pyf1yDix(cwAVUh9Fkn}uEx9yRyY zKxIm!+%iNAzk145IDO@`*F`hreJ9^D!oU84udfqx<_J%JndXdU6Vv^90`3bvdZD(v zP&|O48a2DS7--fQe#g0?@|tL0+}rZ==7i{oavyLNji`+%J&&uleU@C0kG~YZ-!V7o zNJOVqxZhTr|%iT#v4O2lU) zCXX{x>a&*NW(xHN#EUw(CamPwq4XvZzQ^}uQqk2SsIxYy&W?wvXbKkH^hil;n!9Oa z7a0F_0n@u;Ykq#kfV*wTXpF`_Y4%s0}Mv%l(Tf&PdAHQ}= zek0M|5p!=+V*0^4GAR{coY7qpR2(kzrq9PKhsaDmhuxK<5_>uC+uvWSnTxXQeLdyc zBPiQmMyYaQ@EVIU)(ck~56S~FRAeHrG50 z^8&O`*0+(?rrq3EIz~gvTse^lm6uouNr>8cGT?4@iWmImrltHpKj7a#U>qj^H@F<; zI!xqL^y05W9k*qwEIsP%R97yit)%|hS^Rbs(Mf;bj3pxCOe+-S5rPl9mOR3VY2!_$ z_LDLS<(pm6ql&liAV@Mn$jCNyI(ot)F9@0-iRxo`Xi;t#AOi~J)lneN(9G2I9{%-x zV$S^j8~pJVep%6~TpX5WOh@2OkUGD_E-gP*rf5NS&k;-%7<(p0PDMS zdS-XGtETg}OS9pi1W`jS=nKq^4U^l{d z3A>$ut;x9yo)rm^=$N|p;lU}DEmWb^4K@zT3VF6$2u!61>V0ifkW59v4hdhmUM8)F zibR^(47i*1Ei2D%%B;W46{u4;rG*)0 z#yVGY6PkRTi&lSsn~PT61m7+7zKqqIhu?;&fx}^(l-C^}!#RwP_u7N3HkpCR5g-oH zbGv!wP@unOX!R^SehmbF_GUV8Mmwua_2|4qA}VW z84|_j>W-DBo{hyFo2U`b!m`xYi5g|vX)oLs*Pwhfq%H?!tiDGrz|RP{c|Mf|d!9CY zSS?a&=*)oDzmU6XV4OmzD^&8#%`h+4M@YI9tsW!T|N0yJ?HPVp>OFvr1Hf-z;9oyi zZ0%U}GloJ{lDj2Q{Sb&D&anFyJ8P~&kZ!vxDux9A2}|5(Asn6~q__y_ra6K1kN*Wa{rX5PEOFrzXEs zjtp%jn65&Ir#w0>0Vq%65b1YR)sP^KPBxMPYO#3GBDkkwbfTcX54StAZXzk)vtT3Z z6%fCl|-=DxACOZ3%U(*zRg1iEiS4n3654+XYvC^t-6TJc3 zcF*|Solj1!325UHx-iv*ARuEr?HJ*>z9L$LJy+k_aP6`H)h+~OrsP!Z8tnKJals0f zIN@oSO&WCE^PTtubH4&V!ax2AfBrsc&b;8ndjI6MB;Egbg6|FvK|RyW#ikUJ?p)?b zJgRO5?#K7UC+5-vm}Bg70kZB>E&QT; zl+>vN*0_pw!t0X)r$NeKMMTnh`Pf|cu?)Qmazc3@Nej1@dALCHsn^)w{)Fcv zU>%d{+~>3@>5lN{SNO+|6^qBEfGB0W$~t2V5~U6V-45saRC2W%B+)teGv3YQI&y)r#aaImJ^UBS5~w z@M8MJr70S+-Vwo5Wk8_vWR;b^q^*bdU9waPI5k`_iY$JokD&SwnJ*wl`%z0TNOLH3 z{W~trfV){SSDtVxLVbCK|NkevzDx_{6DsLm7er$?YEQc0O|=%>dQUqy5VP#r5$F`i z2;HquGq(X9A5l>(2C>^%UCQfna0?~u=?Duxq8gF`CMx0P5m2oLJLQx(L_RNt&38g- zqR9N~cpAzd(_Enwc}NukiPOPJ%Ok`+aJ&`kA%fj~D(j!XM95$Jw_-z*s>N z0i`B%_S`Nnj<9lUkO@LZNtsBbp(0m`MGsCY{B--ycJeTY@}8zdd66hd2?*X%0T^+} zM_d?C0_Ouz0d6pkMkBKr%kM(voI_m| zjV2USnWc>C{&-iLxzzNVjnvh_vs?)38j;cZZ^GHFDp%Mth@SQ>u=F z3A-PE`s=T$X!XxOU>K%~)lX}FmY4bS3;g|c8VaB!U+6+vs={E2;FW@2B&IkyQC}(> zBHZM>>dUzS5*+Owu(O_jEIx;>wFfkcqC6ej8SS3b2ZbhWQNgbJ34at;B znKtgn!B`23ut?(WlF+3lzVxSu3K{*HgLqFO2&7EGQ2rZR4n2b7u1#Tm7gxSw^*Low z`tWAJ-7MG_H~shhC;a0(jE4zUx&pO3#yaJlP~#hh%M$G<(>X5V!Zz9PJvpSf(7R0p zT!!xMMcKdujsgmGM;n&;hB8R;y#j-d<5uc)T_Dw|;C zJ{a(2Q|1@(#0H`nK!*xghwCVrP-TPk@|>}*{tbM#+K9N(M+xJ%cUSSpDmQ<@5;kCne;`Mk7cDefbptD4DpG4$YCkhh!uh8Y zzEN;~*lEP*g^SsNwv)55TwziT!j3`8)QYga`0>G6zJ*tG)OKBvsdi2Y`#1R4zu@&J z{OKn7RQi;u_A?I0jLrihL0}q0r`An%ed(AjDRl?KvEa5wUAV z@=YhMRX3q?Qd)8@M_z$7+xx;SC@o58`nRo076C7E1rpMeXU|U3DCUkmQ|(%UT^tri zrJlWb`4g9dAGR=h62-(6zR7WwKshLnfFm>76=}mrK_tH9KA}cA+YA+UIqe&KS;L# zlzfBkc~x>`sTgOTvL($6W>>xN9Q^Fp|N09K2l(?(c>R>LnJMW$vt_=$!pnheSoyW0 zS6_=f!$9LCN0ZI%h<9t7AdcycP?3Z0J$c@u73=sIb<{#J5|-L8DEGSv@=h1P^`|>D zD>k3O44r$*3HKoP-!6j@l@`udk{#4EBKOKbW<(lb-8zAF0w&fOG)e;z*NoRBz;9p7 zigj;@OsI#nf3pR%apbF_=XXTGr>3$n6@&t;kjiLVFwKDbXNBy?+y8Zd=OfPe3IF^) z$=gkdMko3>Wa8-SXHgT7snk}wuIyC{C1aD$j$7LB=jA6ZbOWwJf5eV6uiXGuhplm2(XtO#$AisW1*!^#RgFm0( z`++ss`!vhT)Q{;Ie!e9@6E%5|Rai#Uo{g~g6I~|b$Z-m|DguLrE)Z#v`8IZM->)K- z4q34Zio`Z*a_ssu&Xl1qhn^X3D8<0{l8J2hLE9I2DUw75(7Z-0y549>J%SMbI8CC3 zwAJ{=@LiSPQ31LtnSxrL9=B>3_PrN);#|5T(8s>>KPe$t8Dyi%d`i^*zwOg=n?K>_qRlK!_b<=z<%xADbZOF-ZpV9l-ik`W_)K}7>5fIS$?VbSg%oWz z4(ohWlGhi3T3|BjyuS}=!LuhRP<_C=?f+|)g!l_ zl|=p09N@Bw{3X9m7=B>HBq0WW_oPX|bSL>A$Wf)s@Nq*}na=&w|6}hx;4G=iwDIRu z-M*c>CkKWZm>C$d5(N|&6)>Acp(KUzN|GKVu)z7q_uI}m@mo-PC3M(Lz zBuPdFm|Atsa)j6l$^PJ~A@AI-8H^o|L6Q1(D zytPM9Sz+=FYfeQ_#^h>X2Yuie7h!=WfN5eXnqN3i)AJ~$t&1Xfhd0yUX&0s-NM+C} zSsAek)|<#32jk=Db*N6$jBl054x~_12Pxh6Oi7Is+ZtLzimJJgN|fcy^{r$p0mlja zHKDhLy10zRWCm*IT-yc|vO5wV7_Q!(Vm_!CNTZWwjMRINe9F1ZTZjg!O`qR25x1R4 zSB1&%l{d9!P*Qu-;1?I@_ITOGSuz0PWthd191pQ==N)e%w;s}6&-MBqtPu;QAYdz< z#YZ|WPs^j#m*_Co%r=cxmSTkj&F$WJxY}pArianv42L;MkEhH>T(Cit8({&sA4pSa z+48k9GZ>%tePbd}Xn^cF0H0A(QpoKw&F8U@$5s<{OqmwkSvU|9yn9lqGz!|0ruX71pGDYbqRP-P{lga!CQ9#yD_1UVw) zik;D!JTha*o6*BO#l>=VmdEirLGf2*g0!ziWNDd9-%&6==O1I-Wc+0{6@)W(Cb{;` zAm7@JeS}1lewO66#%}#_K@3s*&gF7lv;Tw|*cLv(wyV;#FDFkOiR zFw9IoHLysJX0N87%nYnts0dL;*~@H_wMDS5gags6&|*ymCfW6znf}_aHTG{1pWgy9 zZY8m(HP4K{Y4euR?mag2ba_^QwpjAjwJJs&4E1BMo3Q(V;}lu(uzL?G6GB&7zRHEG zmgL5wX&ebQ(wX2yv*(wd2p^(o(Q9$35CORP`Ar=^iq|bm+|c8Tb7iYXK+3dM3jH(@ zTiQGeWULdSQj`pmuWJ*b#?@eu)fv=|6zj=CsOCVmBFKYj$=l%X~n1%G+StAK>Xt!BWPsKB8Q0P$^BJ+;2SH zaCv^=CM}=wYF+7z7J&Qy4%xlV?zL$K8k;1d9Zuq@XN29^u8v62z*s4m$;?Nlp(xfM zeUmlC->~%Ozm<>|T&*jv1R6^DP4!CS3RX;(#~he2y#dc5w?P^xPzowuS|U}B?Iaj9c)^J0U^Fs@LN$*k?ih_Q&XM2#Ik z3@t_;#aRmx8Q-C-IuQ@?6o!Sh-cUT1SJF-Q5ouGQ6?=jVPv@-%c^bN9vPz!G%Qk4X z%RGH4Wt5S)jl3+4`Y5A9#*#s{@obj%CzgJx%*+NzjJxp$l|Q*DjRSdYkh0;h0NnR$ z)Lvrfu~DgFWCFEXV$IHsa6H=D3-OWhP4Q4w={&Rq+Oylc05B=*W7Frm_IOm z#gd!!LYnyl!vX64-PDSd2|=_WJc>(K7Q*fs3}|pdSHtnT;Y?U~i<4}|gQrwr)xwN> zKy*`;qrZoMd(vn;2^13PZb=!F;#s&O!JRk(lnawKi$G%N#uy;`U|_i6&mQ`3xYla; z2s45B;@m{2?`vx^#$_Hsu)Ji=7Q}%-w~M?Z?~F|(Ot>)TpYjLo>^E>(J;h{lLEHee z1jo-bzsNZk#Aoo+Ttl2jn5*o57}eei_0H0FNLb1RaMM>P(U@o6qnil~cuIqCZSlZT zGUZrGb=zz&V_iif+{*%R-%saD%XfRUIq`fGQ_=P@qNYZd}n%MW@L2{d!tncT6i20;@mxY0DOjgz9y|PTr82RCf%T64Y#Inr+ z=^mFDi+ho=1j;k3puLjTmz>KM>83PO6conH*`JwTop|i;7{yGcavUQW*5J1er0x&9_ydqeQ!-LmZi04S=`{t8 z6umDlV=rz}EV%8vRO6RIVJ zcsFAmrh*utfNPlYU83HGG3lJG1QFiWJft|Ih|ATjQDhS{E#;0ynQf5m1v*5u8;xUK zp=d>D$W~m#;+7y1vOw9C-xnz%29j zP}n>EZ(J5iXo5FnxroGOGJ2UOt`1$U4ZM93yR$U7$qiK_avoMX{Bnhru-lH{-|#&w z1+}A-(jDb0V;4@Qpmt`cVyn#BtoZCRCpbPo&d$K!4Y}t+zfW6{78*k6wLSPec3E|z70b=-}>u_!4rKn210w#y<&wEU2b5~NE z7#(K7Br=jA>NO^>t|MH=Skl+x@{ud`FO5`RT(Uma%mfTH7lM`M_qYG_T6}9v&7n`) zImdWaQV*3~6P}&{-wD_!&M&UEH<)MbU3AT$*KZQf&V@<^VLS6^$`At=H%v)J(uV^J z9>V+kv5=g)FVi6&M(?xW*06m96O%+oS?PFJ&(uuIL$&4i*g>_Xf_Od2#*0!sJ-lw) zuuJ|fxfRJ$qfe68vK6^9N6QA5g4z`@%GwlUnJEbJ7V=bLlT9hJtpli?X+3Mnzt3nu zBl<6jiHkO}+C=itOiLu??Pw?nR(G*8cSx#oda=yJRhC&vKqn)!2|O0Lyjy;SrqOYf zLHlO=E4}0fS*krrk6KZvfnc=Cc_R{+ONo74+WXMb8-#tsK%WyPWkVibX*+4!US5JV z#gaPvsmv+fh6+0+x_y_os^(`hos{N$*Y;2;ey=O{FxTqlv}euGsFa};NO_|1liUwu zElpbDCeQlMg`?p(-`9=>#(keXNYTzn&OR{{`W*8VYS1zvhOFoo{najx%oI|evBb&2 zirkl7D;r1A_)YKD{=BH0xzwgU`)iu45et~tY^E%IS*7_bqtG!=&74=_Cp{@ z_A-7wrrr{!YvDSFMVTH+Hl#m-0>O}Ffk<3MN2!* zl0s<^B=rX%LP|Cn;$|!;AXK83;x=OmE4}veipHX9052-T z9McVo;g6cex>z*nyN?L)-ZWNSi%pg(Ig8uwVWDZ z_mWFqu6#d@U4-3xBwsvR>r=^*9cuP)s0@|`F5F7kdI)uw0`f9`01_k=e+A33co)5E z7*Di441!|*fPpeW%C#E_IfB(o>#7oCy-C(F-aR9KlyxRT=12BiPMLtPs)S4jWJLIe zONE7F-#-=@_kC*GW4@x@gBN=zF*yz9L^h5rRrjJmRh9v}Sym0EY+MDwo;;}Z#C$!g zlsoSob$^N#E{SUbzWC1!0?XC**v%8z6fzbqXxWvr*hz7jjtOI6DuKZp$vIk_%N5Tu zz1Pwz(X=sXPm!p$Lc_s6`bT(S9NO` zA1A%LZDV4;ZVSMD-$Cu(yzb3;wJLT_qgth^sA{b> z4U3BpElY;$e=GPq(vZgO3YJ4z6uUav0bZF3hjYXVh3* zOHjlC(dBJRZ;kyi@)VKH4^q?oTouhm!|ya_tTuwwjH!ut#=*wrFsBF-pw$b^SOero z`BqB3>jJAFrh54WKiGc#NU#V@@YHXIrp;v<`sBhg)#yLNg=Mo_$LJ6&qR9VW^t9?{td&F6sGvm zwzMdhk-*vnSEGkJF4ya|L*yy_I4aXpjOCd|BbUjt^z~QH0XaIF!I+J&I9BjS|)8m2-;`~0CUysRy$OGNvT^q{MEP~69*a%iw1~tTm z^6pX+3|IuMqQa<5lt>GyD&n&le$-9$cs#OrR|`4G&mL#yk-49_Ko;svSA3i`c$m|D zTmi&^zq_1u+$mKr&p{1vlLDR_WvETf8s+~+;F5qPxM>)1UBry8-;tTA4Pz=G>1*n>n0ijH*(m(Nt1+3Oe+7TT@1^d*z(YIydVLe`Y5rm zND#MjO!6t+CpNMrH@H#oQ?Fw6dVKWf`G&NM_q+&qU5|3lzJ&HF4tl#WT}Q1R!7`u0 z4Tu1}_d_!i!BSQ%y%`JHEeKZbax7z!6obWVWwf2*##$*W;q28F8c!_Vxez@dI?Nnk zNJv78JVA=hNDWQTGB=q@%??iD+P^Sa52vlbTfuWu&01M1lPHwLngdKzNV0?=V2Vvb zjtkqjGB?Dl%^=H|amme+(u(0ChY4#@QzTI6DsTf&r(9BlC2Nzdy#U$n{JyL$X?{UIZqN$I>7vOJA^wm?JxC z82RQjx+0A(QUVa?DN!s%B%^FovZlaL+VUpu&xPn6H(b%0qslVd5>)RnmHM6?rc;M*uDlPx(IB;~ z4T}eE0(nt`yYa+oYMF#4V5yOxb-oT@XZuK=W%LoE&qVQb7HYki0nLkENuu1#$WL*( z-7-+SUV+$X2ABiWF97%X8VzlRZbn*m54AhBNQs;NXjvv~+EDv$Gsz9cA|(%TCDyaPKY=}+Y{N~PqSP9z+6O|``1Y%>E>rKp_!y=;c|i$>#Y)V3sX zCi506%x&Ze-0hkS(qM$N*vOI9lqQ~O_EDb#MEMLrdv>%*!~i_ZOla0knw}*L{*c#1&qrR7-ze1EdMt= zl+Rh>@;;K)u@)b>Xq!d7=BP^7%nYiId6}&&xX75luayhgXTX!9HY_9*eM;jwr zW|}(VI<s`J= zhWmVcjMQDNK17@@<65ccO4RU)v8FwXa<1wqI1ig5BRsK2xDcIWT$tQAtl7eT@wA#; zo0cr1bXBY=ns5f&_bMU0IaO4S^L#651 zd>8)kYss-H=b&Tz6q*-zfW-}Amkas&tiZs4ER}IJ$JN<<1 zq6*hyJBtJ!t{7A`NGjIB6+a$oMYM#347Rvo$VDRzYPeHYU`8`933yU?0b-Jipx_e0 zfQZGVEq7)AluKo9En&+}Pfr&abOo1(z>FJy4+tsma!aOgTMNK_o=s+6*Y?^(wC|oo zt>*6wGqu8k{-`h+wHt|fo5`-&EX48gD0ehjXKxv67GeDo43@+9Y#YPoU8GFy?~8!1 z{0KR21iqEn=lC-&Gu&_D#t^XCJ3NV0Vx}WS28-7JvE`Jdm^d~2Jo4zdqD_?`_*jX< z42zz|S_NmHhx6W;>zu#&5q^J}Z$rrn1gqx$I)4y66QFL!%$2cpiG#K)C*Si(C^ef6 zV${1c(?$W;tOE4exe1XE&-@#Mni>@E?73ozG1&w;R)fTE12^Yz7nl}Xm@gR1^4FK< zadE8GPHA^6?L~=J6m&*sSX(g8S zg=1ve!In{M8>Kh(b%!49b^pzd6FP4=5hdx$Poc}rGCOtA8LuID+jQ-5v=U8ljdqO% zs!cJqUQD~V>as-@~zY70SIP({^=`hta(=3GWE+l|^Zc4z0w)W|Xj?X+(4 zlW>@wg_uYxGoAPDrY8$O{w&2xeEv^fO1y1uvsBp`Q*y$s`LVcFHbRkN_Qgztt`n8` z6ub!8_g%~z4&ND9&JqxR$UO(J5=j<#LieT*N1j=(RZV{qR}oA$1mjs=!}>$4)ToxS zr)1GDmqjw7ORth4Ag%maQr9w0(BjbCUmqR#p{y~OP;4vStrFWub^l}w zz6mWzW1_FE7hr-5#4ScbL3RGggq7-eJz zkBrcA!o%y`C0{AvZ_K$7YLD@UxpFuRCQ4Fx=SA>TQ}aQ);1Of8OD^lk)$$Yz;rvu$ zT8$)RIG(fThJ0}k4KbiS`D@@IvGp+KtQgBOuL39 zoafp2F)9Z#f($n)%asMNYkI_HyWFWlIhp#A%j=L%RF#VT-JvD3#%M2oK$un=P7kDU z-E=Ns$Cx^aQ(c)x41uZY4lYyUW@~va`Q(c6R)X?es!0QY%-+KFgqR0(x_l4c7l zCo)q+X{Jp{n@Kt5Rz$tW8FE}+0oxW<4&(6USlS!@vcmD`2zE`-n|r$G4RKI#1k~?ZDFp(-KnA9qMV9Ys(?WAYq&{yg z1=8FPjK4P;P-ejQY&@2h3-0~iL1UGUu{@UII%2ct2j{+y-De#1b)j6Ml1z%lljFxG zTP$4Vb6R%b^AibX0Q6%5QYp+nmHO-iTQN3sry z_cxU9QZ7lHrgi_eSsLl_TL=}mjb=o3S`r0q;20P@d3Mo6mrEh>d4_6ek3tbbCt9G-65 z2a_g&XHLwDV3$Qskr~Xr5xa9!_XTM60EF+ZUrUv;RO?|oI4o4lgk58iTE_K%sWhYO z*SJ;PBv?}qATuENR{b2AOj|Yrb{SwU=WYy3ALO&zr#vfIHK+4t5#6pN0$H*eey-Rz zBPeubf`H{i`E9%&X@byrWlLnQWvPa8HM;o>(?BN|it#1g6h&rNI5QW-JbG(zIZY+* zepRW@3{yZxagr?LUT~t3zAQq^YVWx^v z-;6mHGd0ZSi6gk3{!UBS_OhZp)TCxO7siu6T$T^w@D*6uA3|qu4&6D0$3`$yM^A~Y zW5T@kh+p?!BG(>1|KhNAq69wK|54gwax)`YJ5ak~9PSDT&&{1UCAvPVymc!XIdTl) z0@2QL#}UR1TJ|K6#%O_-nR&R##IJ@~E( zwTo&X-pB%L&N`PRGKp;SyZnu#NX!-DV?JzF@Jx=t?TlZS1m=Dqf8*o2!+r zliUNr0Ue?rrPx_fMy5zDOLTI4!8*+hp>l$0^}~49NH8*7)4JZ7Ma zW+`vNo2uinaZ;Un(7d-qM0;Sa?0u@vX-*An+FjwnQz;fFtRfC!_f4rg$ldny>q-+T z75J1z5i5Se;AxjCtFe~iJClhSuDPBS@JnQglP1?p2H5^6oz7`IpC#P)ndj6mS&4!IJf8@ag?%D1Al`=Erg-5>=e!(}fa%w*iqA%v&6*C`Zx;)>|f zZYLsjqBO2piUvbo(px3J=Ef|Bg20x5aaAkQTrQ0(|6s|%Q{=g=WFj(D1n=}hlxvKP zLJH_R27Fe~d@Sv76-`K_?uczwSd>^IC4g!!UQDj>#DytdG;DzY`W3epsnKGU2vcQd z$@mf0K)i)^z`QAVoTRJj>N2L{errK0GgqBt`SKWVe%d)fwvQIis-6WCC=aPV?E{H8 zo`poa<@;w@0t?~D;;O-3BH9lgqE$pNAMBdM_6bZ?>HNK2;bPkRRLu!z)0k^dvQd>H z5spwLK6*+OqCG6G)aj;XN!-!PaWj@H1PATOc&fu!yErzTahI~MQY;KPH}Cr8sjL(% z<(;}OMQ|c8#}oR5`RRJLk4LRiUL99qMzJXX>Rood>JK)K-r=lD*NRdo#Orm`X6Sl` zmZNtFeZv@Dh9&DTyc&bU7+8V+#po)ds|%%Wl)C64s#X0jt)ViFnQ@Ho#ON+ejbPU! z*s~22qZr?Vv0ap6-qr0RBr6prO4AjS_Ju5#wUd?+5V8=DLznGcf4K((L+BqscR&5? z-BedEx_ao2T>tK7rsy>_f$_a?>vZp43$TvSm|i~y7gj1`#ZqisjZ!a`t;Vv0v1k#7 zS72xf1{Tq!dhKbK=xyFLdskblQSVnP*t3J0ePlQG?!@*-uxlqKMlj+1=ZMdbbkj%D zmQp5v1Azrm(af}4#vt=Snjpb zG7K$7|1b?vZ`65BHRgx467i!GO7M~77x~Gu3D!R+7 zGXPV)T%hND#tQ(RXzrzRa`WT7Z`CSRsw^vYSdG&B&_8~Gai8T!x{FaN>Qn_|u{ zahs$rvD6A3u|a!)+5^+Z1hu=uV*o0HdW0AKd&9rhI3An8jxqXdcPWzA@KD$8eKzFU z-LPtd%C+;5qmod&oa_=-A9OqXJTNKxh?Y!+m>w>y@?+UgyL?xy6q_@cwon3~nI@IC z1XC)@=Y3fwE$ty5?`8Q&$iuA555bbv7&-`piwPmwUFhybz2aAhoF)vkdkgkFid|a> z=~5A25Ja$S!13wVdKeIe*z9Z8jIHuQnXr|;YW62*F)HLKQ`ZiKi`0d|AfhL!oCEjx{{7| zGh=rXqo_aqvOPfT!D0{cE?SPmPQb>avGz!;T#cnGFz78;1`Hn=A0f22cLyGS7?0kA z2k*q)x6|Up>$?CKw&e)Gy0;+oR!2u2gN?^x;}dYup;&bYEuUIByvJnw!*ubR@5B9f z;LaQI&^?%$q=pU_D$v%(TqD}Ko0OFZF^wPy%->C%3$F0SMVFP>Wk7@Ml^OcUyX<35 z!HG}7Q77S$!?Ah;EoPc&^9nZKgZpp8oj2k7U*n;BDWsRXsTXDg%PLMCTrI`WGu{=koL<=p(U$kxkQP0xRH;Yf(08tdAGrd$5-soGL)= zTzsPZ~hL9~`^LlKX7i#78_5ad1i_eL6?Q-|Pb3KPtf0pM^vjMt9=ZU&ZuTvNnj3hj)*gPRA)Pz)8=? z;4<{|hktt8Q5bnV>lO&{Pt$F#KM_Ztjgy{>)rZoer9($`3VXNXj~C;nOYrAgF}fYy zeaY=`qc9^HrQUUJJOQ7*F4q@LjN%iozyr5nrlgLUY6UCT;HcAZ+Ou)|Q!%iZ5PZ?2 z=2P0YUWMx}#~r`NlYLBl}D*Ejbl#6+de_-inQxL^eC*%H)-zNiU;pX^-<|6+bb>mAaUT zpH~WafH1OmSRIWo86aI`A%n!ktwr@v3Ra39IUXGeg8cc824FOSCQ<*qCC`* zN#cZT&DuNSc$L-O z_-LG{n1&VlhH(1%xlVZRb-3p`4YG4orU*Me;hA(E549h(slY{cbUtNh{cltA~;Uhr<5`eITA zDD-Xiw+E2@lo#U}uftJi%!Wvy+=rFx@til)%R|*yd;{102$Q>Msl!;RO(buEdUP>9 zM(g2$5+>?CQgMi>U3nE@U2hbs!M1UQJO63N0v(80mB0Ngu&lsz=;=b?^I(-dpLz=oz0kirNsx*3YFK1f9^>4{3QK+Q#O z4~|%Yb;G_pvJcI-PhiJ5;c^kRbH6r9-3d{9oQ)cvkSkm}!W1fT*N;x+gaka}ZLVEn z{#j0tcZF)QE-xmP5&3{N@-$4=I3nNfXZ|=<9#U_x=4(q%c>&IO1CDum8+1P29KY#w zdY$vPxaNOw)z`4?UeZhlYG7tka#IoedfxL_r=D!u+lWgN`{9 zFa98o`HQ)E{0}>UUeA65e)ut5|3g^5VxE~c_Y>@1MB{GP$*^^0A9^ebGG6bT`v$!9 zLM&U=<{LTsWO|+bQhe{Txbbq@-^j0=2?*?GzXC705NkHfMG)@8Q=W&XJQvsf3Sa&Z z?))RIJ#5R6H_YAHyDILgsC{Y*r#uz!{w$6-c{VQKgs0*7Gw{97<0~Jgosh2b?7hhRik_*(I5!VjE!w7Cv^|14EVSJC4yhe|eMHb7u zUXnCrtO}hE6 zZo#Uy9d{SN{g-_V&wFd(>-XTkUB-*wk8|Haa-g|A)*p*^d<(yRI{xP)l-1hRt2R{8 zpf3(rr%Kqp*TSJk;%`2Llb+te8`*RM{_z|5@t5)4Px~#LWBZ~qja7%@)gQo_FPiJ1 z%y9biar9~U>ObR$U!&=-WE&9PY|asJZYB4h)-%q=$1lRr(phYh5?=96tUVkbejP^l zCfL2xZ6bPn8Rde79t2~3TQ1bIi)Aye;0JH~mN{qTIn2$%O#&M+Jy)Rv6xW?R4Ld)9 z{+#y(%j}~J!4gl;vS_WHt%a`XRDYK(no6fD*fB~|mz7>;J`LL?q#83QJz}Dr`7C?M zN9~psf=)L|zK(~^%3++i7OMwC?Z5AMaDDf(=eUtB4KJAOiy2i&U;p?1y_0~uE) z+7Y34*A7v;8{eH9h8Z@CZq=a+itsqGXr)oC+@VmT5m70}wgfZQWZ8!TNAHqo&%`B} z_><1V`+k8Z|78a~;FcVO*M1hS{|c$7Ym;g$L+;u!`r+0oKE3+?;`tXAzJ6~N;bF?Z z{yZ-Dr@2S%!C{y1tk)BKA6$Xjl%b)T9%Wu^8Q+6-C*i~2?ksALZ{+;9;=TWl?m=qj z2B>`sha8E2{MI}`?a?v34DbFT-uh7rbhWw}^Uc~3lP_LNuG@%z`R1&m_W1aV7vPDjBds1iEw}K|eG&_m8OiKXoXap1!cEy1ox3`(toy#0q*z7e%)!G=-`d>>*AICFZ zQydVu#Qnei|KW_6&%5|=?3sA`chJ8)$kg$r6u4)y>or!mU1IuR7Y2fr{VY=twjT7cvtt<>^x)pRY7L z&pnlAv?@zqEV1vI)XHcsqK|_;aDk}30WUSEXEbwY{++;TD?!u9)aLh_7r4)ea9aGpcLPp5lb|`8O zIFEWDjB%+LO3ev*_Yk#*<;~U7hVIZD`2q-1*A}kcegq;nG72I-V z>Qup6E@Pxmeg!6pBGc92qA(Tp8Lz{uJ{8)_%+9gtWW4cf7+OJoCi;q{Xv@ubxA1yA z>u-xcgPc_I&v|R!blyBC6zdkXemvm}yz;}6IVMXH-guUEaB z?BTs7B^SgbvqQB?{^CMKPoDBf7J_t4E0>{2z?nd!I6{h4!`q)V9y$+?3lkjI;k%pS zYL&sYv&?Ut!y?cbtPoHC0j5`Wr3hoy) z?rlA&9x5lj>4aYo)#3%5A{u%=LWV&WLY0dZl?Vw^@&nsP+vkY~x^dJhlE(zlv&OM~ z61yjSB~K}Ic^6Bf)}um8uA78NN!0E~wb1Y}GM`B}5;q*OtYgn4OW_rGZ1^ZpIJ{|( zv)Hh#VGW}k*RNy|xkc8?tl;XWe-UxsCq5sq{L~zb|4pajHJ``7y_(P!skWM(;p)@a zZ~|WPfu=Cf432y%&V5&tx8T9JZTH~Od$H|4Y=4j}%*S^TbL_!WDveYo3wdvGvS<~S zuP3XV)f=#4ec^98`_=g4CHTWn6GzMDAY)KD;jcf86?5e3d+uxS$E$F|<(j7p>42e9oyJboYUzYjYfC13gJagrT+(W&ga81*l~vgKHN1lApn4M*UxWBs&& zf`?tg+dqZ7ZorOhxy1S%1nv&0%$Kbx_Nm>E;_h3?aq_VTNuECH+wF5deSGl}3=YwX zZsTz{>g2rE@2d~Nlb(i)|C?Ha%aRheV=Rnh^B2X<*m;HtwYOOd(b(1K(zM8IX~bs+ z-#o8)XqJgqjYY>|WSPdt=ZW5I7FTyH_uKTGUE>A<6A+8B$RW>cM#Y04>1!UOtfP?9 z{#>rMD_`vbaBtIi@-TFdMMh&gr)js*7OIG~3$-IMDG%P`LG~^t`IHAf>v5IP#r-&X z6_)jeVR70a)IK^zf9kQr^91r3$2X7(%cIIwQ6Apy?7{fsm>KgcEY|2{b)lyRU40l>NWO7kvN&OPYKhpZRybHFd$mL+Zc#F7CVvkKK!jJ%s9l`Z!|Mo*=%u0S8~FB32%J zUw;Cgasf_yUJ-+HMtQw|yfhhI%@sVaPUERB!5J55Fr`kNyZvG8*os|`V`MMJ_L32P zr2@A?`H0?vp;RX4nU(9XdM(y$G}mKlJl;xp`8x>vRwgBrnR=b7dp`fQ#m?qk^KX8H z>o38Bf5Ogf@cMANhUq%d5P>yqQ2!|88tSO})7r8jY{FkbjK z_`(PLiWb4MZ_nPuVGC8v7A-IK*`Is`|Mh8X{xdPecH~cxaCH%fQU(q?4zGO|p8cv^ zr+xBs@U!osTd3p;%~`z7v!{k7xlpNx3x>jNtXHi-E3VDLkX;v9@voSLt>!}M8G4>8 zOUaDaEpE7MaA(YsHQso`k&`AzVJTRgrzF~@eXpCcu5eQlv3MildlSFUa6mE^4$H6@ zivC>y?(K*I9%T1``{*<#eWKmw#U4MFk0$T7YT6Drd=$q6lu6znXW)12*4+JzMbbb~sMh z-HsCynL&+(Am7@9+9kic7q7+>PRFUw!YOAL_VYgSL>zk>p=}Ykd#k~xJQvH0P{=o5 ziEn-k58M`3Y3=PLyT+xAGKIWH(st<;xLpNxFubK{kFVLAsp95qanm*U+1E+zalzje zD-rdK^YDW&W6v&Xic&YWKZNgpDUo}rgR_QHo{nQr&2{EK{|VPz>_1tizk1id^+Bqt zf#S7+ZoLK{y^wgKo?a>9DQM~- z!lPix97fxNm&?_F9<%K6Mr!QWUI=q5WtrQ;g0w5MhZhML%MZabULC^UE5D7azl$xm zqcToOghU}Tf)U;bA*jc)BGXR4;{A0O;jmNj!uQ~~B3>mc55@7%!Il3(z`Yq7vV>E-==+hut8cD(sN z@PxDTa@9|IK5o6tTlY6V>&F*7GlAcJ2fz6aHs67XF_ikSXc79mG4A^4yp-DALG;+Q z1()8B-+UiOo`nDN9#Y{KI?g^H*Iy=|n2`cL|M9DD;%omOZ6JtSB_8N3Ss3ib$V{}8 z#v&1FOvG|pczF2L8`wK{;uCKpw*I|eDj@@I! zPviyew_k@(zBhG__0HB;Mt6583)#KBz~A_DZ#!bvWV%wg38P6Zp#?!mb_k z;AaTLy)pUtL+C9hb*6bcP;6Uhc(KwdTG$A6O@t_ul?gFUvXDrI^dPSwerp!#_I3e% zWEf$d|UvEe#u=ZQ_b%OnuVBFzBf;nQL@f*tJ&XEB75f@V~l)l&YN zFTQiZexAj*$(q?AjXTaYmBGuuyOZu}YghZ|oaW2wNx`%~{A8MJ@x&G_K2u-ZqDYoX55Y z@cF;S?bp(IyzU+trU!Fk220E6D`CpX>TVV-mU;(ho$sCGpI?bLe;UttNr4O4bTa9h zsuN)mE~k!_2V-UKs-HJrhA+RLu0#|`PiAld$LB7L#=U^9g3bPtSo-P{? z-h;;<#_B_Jo%u;;$ba#Y3 z)!Fp?=5o+vLMAI?O@er%T)~pv-?;!=U0JOm=I<)WOY`51B|nSIWYV2$)0}bXlC~re z8<}NZ5;s}j@Dz1W8X$JH>&eivw~=M%ojH~8^8#>hswurL@3V^{+6 zbwbA&&Lze@etI0H%Gu+fUR3zlmJk+e+?8B!9vMN30E}Sm#ZrXVdCIf zj%7*mn}R;{qucSNSK)yh&^uIkD5|`OO?b3c#kc;Rs+JyiR^Ah?*+kZaBU@M6-71kbCpsnusEw29&`i7e6Zk2=g zai_Or`uS(^`Y&Z+wfH#b2rNDrkKeBX_d>_cNAR(i;=$V_yLt);4n6xr{is_p%Q=^&?`~ z^uGPkhjID;;MMQVb=F18@UK6@-G9V=H)G3Y?AeLYU6`7o#;jLEWfcA3YnHqpsuijL zSg%mdKp+LQeW8?XM+GZPQi>S*xUzeOJ1ZqAl+`j9SXQnSMQLqn(eIbZ?7Lq9T!oL8 zi4S&VE%?5O+Ks81ZpxJ5${%q}x|*D8Cw=(2!a9nl`)+X)BWBzZF-~^-=CJ_Wiw|@U z7Wdo40PUKfY)-4V8Iq-e(KOkD6{B{a;Ab(ojLIYh+j(9r9_S@`%)vvUaCyqXW8*Y) zcUgXPMo6W*JSvRpQfgOV_{ifzMZz#A-MoMH#1b)jo?<8&M>i{TALvFM@x&P2RA-L|1hQS8qbse`03|x{~w8E=h`5wRWNB$ zWEkZI&hK^i=pOv!t2pwMyy*?z!fEANlG_E^D6b>D;g?e=b=Qq}lxgV`KnCL4#Y2TkUz_*g_%rCGd|h>hc04?=UYVwtQ}wr`rY12tPAM+qqlEHzZ^O2S@$h}v z`VcBJsMgV4rgq~djuWzC#BDauzR3xf%V8>>E1CMIrm6RaG$)r$yP?H)mMI0{`$#R) zLSsCwSe2X7AYxOvrbcGz)VtmsDFY3~K#zRw@s76ItdX^c-rL_2Th@yLekF%%BO zEoByEl=>EjL1tmB?e>1NBruTa3yUI+*Ra)3MeVj}laxgf&_yU}uLm|VZdATO(8)mX zeB=r;_945Q^0bIa*-V3jtpu_p6h>beS8}z4(%CLId_kS^n6d-k2(Pb5ozzF~qCJ7;h`<;riYas+>h)03$m6+ydv|ZxQ^5+EIfXA{EEp$?bGWrZlmKtm|)LhMzVpFXf+K`M?*CW-lvMawDDI&#raW>QlWEW#Yda2ekP23!VfA)es%SP$7D?2Z(2UHnf=n+-D@S7uXX)buU4@)4fiZah7=HP2+4=T8T~ zu>jn256~bF6%O`JV5%w^AQp-{Ic*;U@eCQr_?1n=%V1$47?&q+TeXM`WQMvz3$U>Y zq4r9R43A4ud=1=V0+CEDN=1!XcEzck`=a)k(qIwC51#t87~Ns@e^ESOi7=WAd8k}a z_9uU8PTvwG-Nskhbm&)>G!{|`wzPYU>Gt@Sg|?(8cVqX1#Z0NWiDMHnvE`$R@m(0- zUEs8RL(P{f@|GXJ_zbT426w%v!M&x0 zx4_Hp1;?*JG1QH{)1d=Wz?is9-I$6WoT>2w&FHOs^b2rXM+PiR1hQBIMj-gL*Ju;t z_{f{_o1f!?H<5i!p)~7am*&f&`VPmzhvU3Ak`vK4KZ7fN>|5*DQXI2P6zQBz#8GV~ zMU}{#N=a(hT7sK$UKK%+(cka@#8GHeo@L=!0PbxYZ612=vxvhUne?ZbW{LKO*{C9> zw{|Zv~Hyksg$|_9&e+0Q!z^`{)McQDf9D6V-u~ zk6Tdzqi6=>O!j|FUmr7V`;4{bGb2vSQcjXGqX-OW{>aFL(jK9iW-C;Xc4j?whGpKP z0t%a{`cxu`g6p(&Bi!U5>r_dIoc{>CR+=~_$MMBi;m%)^k$fI6c_#ei)JPjp&W#!e z7UA*MrVA!m7zF}055nejk*7qIO1QiWN(V5jFqs*oY-W*FRZLD{cmQ=q@Hgj}q9Igd z-Q_jAm<>5InfHVJ1C&&nO_WlWs*C;-ddgIWspLQWH7D84b1gEZ4Yv(_#57byF*QDt zY+&lof;7^K?iE^5pYp7AY?&d1QXH|278L>ayr)9Cb`RNi zM_hYo9pejQ>XAYwC?CUhr*jm9%DHRV9CjM+y{-T~+z`IkD>&#_EX`NPG{~>D1&@ZJ zdlW-Usf5th2j~`D!5K-BetGMe$r%jvV6>hqbk*xrn`wAifh(cCi>SN3e$NlwHyne( z#Z<7iVRw7jeV|NxiR5E!hjA7C`!f*X~UNr4kNb zg$;}SS|q;ieCITFjS;Qx;rIZxbKeNrb;F{A)kqodYMze)?su6CK%E%U7ickK*6Ri0yPJ86L^kA;U>B}K=Lx0E{d1$gkI)ZIa@HWwUGAuP*hDwO^>P{LTf z@t0JlanzH@SSIIDuVL5r#2d%^Vef9rdhE`zdfaq8j(HNU{Z-@Sgqm;b9tdWFk`#&Y zD^G$zZ3b%&#nWC`pc!{O9M-{QCMKdS_%aDHDQ9%5QDX`&F5M-H{9Cu+;Vt2nl#rw? zA*$@rT_!%>YxeGL8VP0p)jNoxA*@=56P|*z&d>Wyo&RQBb1AOAf=uGMCic*C?&pv& z7Ttal+Xg}U$c(YNO(OV|eoi)ljmsWa3$w0VK#*%r4;kOJaLn!^aRIpR3;k4PBte<3 zU~JmQ%`7x*DZ0Cpv%jfsrGN60Zx0{T+oSs4!Q(C{WV|qa_)4r_6nap4Z`d(~-Qxt% zW4KQi?>v#V*PIZt2l5y$qIO>i<0>K zbae*1HW$Xo`v}-TLKrtUR=u98OyKCJ;<DE26tYQ$ckKUpaUF->N+nPp!E7mraNS{f@KHcWfvv| zSsSlF_EMG5SZeS6u=y_R-9e}^&+*Fl;ojS6#g(lF39?lCyU<(5Og*$GcLm|T_nT^s zzWr?P;i_c2PXwJhH({q6?aemOVP;*Wnp?#>@y#l4 zCANd|FGFh0ES`Ilb^*1|`ruN#mCe3LEcv*~n@&^)E@c(i_-nZV#m08v1$zr6DQ;)o*JgUP*k_!ijR zvm0A2Vp|{iQ?bR;dG7Ym*oA_!*@{g_6Jbc1o`u3IH9tbx98Nv|Is2%etA%7gIs&tYSc zI#!!+!|tt#?GG{Tk7Mh7d4cw=&7WGX>5F{Z{1W-^|N@5!1|WErsUiPw|Ru*yy>WOk-4 zE;PJB9cnYhqpt~>+^T8NkZXIS3&&i6_*p(88Px)C*B*&3pJ?~yu)Wiyr{s}mVp2zr z=jvMVk+WF?aL;@n@e-pVN_G@k9KVVR7nThkYCm!{4qX(+rWqI8r!YF{TSnSp07?vG zI2rT?-tB>$Mg-`t8`-o&Rl2t_OX*~TC40TMa)=p7AtDhN_nc8I#xYzli)_xJ66vLz z8!kU|1kX$b_nMnjhF9Ri@8YIk;>vH}!JDWglU1T=*s{WvO6+#eME5ryW(N*-2rs#vuNXTA#0d5gJ6ZhUgRJYYdIWQj1bECqU!NXFm(dMBS-$HlD$OqO7cODiT7{*x_;N^dh zbw?I!_A7p%4tnpafBPexe0JV59CIo@`D6UxOZfe-u=7#B(p)rL8543^d_&tV8~xoF zoAM*4ORLkF8T1d~S?A%^@4>OB7Q6U+Z^1pckg7*tb+@I=P>ji3MptW|k2&er*KBNj zwzY?mP0$xUh`po!{;I7u5rp^_xMWs^DbDwCBMD1<>$OMupE{2*|$Dp05BBDOBU95niloCt0_M(*| zLe&j#$^Exz5~`7GgDmA&kz$c^PK{HZ-_q4|l2gvb$>(Cr9k}lXD#`TdUD*2=iLgDO zS+7t6B6YeO4h&|632mhwVm+6x!LjGy_-A6%>CLpvbr-edY}52%cVYW|xbf$B#%qgx z&}*m@o`ZX@#jU@_y;oz`BeZU*PE$j<^{~2dz-xL-AhOKsCT_cb80${P$D%ka?cWT+A&2`kdDvD}a0$WC1MQ@r5K1e8yE5uWryJaii#xCM7#gZu8n=vM0P zpqgf_=6h0cOpjq`0IUmDe}k^42i=2Mxemua6{nnqBTg*b<`3MCTdqi!w56Z*rar)WS(wf-#nClb^iz}cWAYR#XXtHG*+he@ceAZmC0`9l;_g0~s6qvhEyZBgV3xp%Au zN+I3~2%64n>Liv-ljJg>OqZ>T7LZ(4-skTe50qd2|M0?hg_Tpi&#pU;UT6Oeopbj# z?AeNmU1a_}H3D9xl?!(|5)4|k5i1XAeh2x!Kj7YL=!A3fBwJm${NHfO z3ks0#G1ff#OnP~T*HAk)6MXmDYHE~#uh+25ruXy=VsJTzmt)zXSiPaiU4_aNF8Pw5 z|6P{5IN0dVU*(kH(l24n2AuNza2Rhmo?g#4{`5_`RS2PSr6bQkzEg$1w2yUSRz z9QA%mKwPs9ha5{>dy{Kv2jBh_*~u$g4c^*jWH-M51-$Ev#ZGweVf1?5Ybnq8kq5B- zQS9ALvJJ1ryhRlCZ<*XS2Zpd@5Q`5X2D*@(T^*~p;NtIucImqE*fLS4O_T0G7smSNRe9I~mfkL0e$ zX)%yZE%O}g?|h)%l`UB=1Zy7G*k&z}FF65yT4VA?xQ%PYo{BcIyP&Aa*RyGQCs)`Q zQPTEUis7{@)3^+V**tAmgu%S~CxEL3;2z|mS{Se?KWUH8L^`g@t+O1~Dwgi_l$l%@ z=x2fwOWlI)V_*d%USCf)j#`zV_K7;SPhh4>XRufZI=O(_1Fk*LwTqsQL2*G>Bd0m< z$m7AaNW@w@DdWjT0TV)VGd7N*{UU3UNaN||j}18?$QIy65Z}b%;mEuH7v(|x<$Db0 zT(*W@9X)C_{N&@99`$R2&c)HyjYsdsfBysC@a5)Dvh*N&;VGTE$e(@+_g_coN{!dS zAkW?VPMsL^Z~p_>BUt)AX~;~y`q^jclYD)C(^5P z$Mgg~_a5xogT6j#K2BpRTf}ob3Sx#q+lAj zAka(M&mZ}<%9U_w;*i!+vs=iCH(Kg&6PR;N8$sLzKeFlJg(JIb;sMMwpKCEtxF(v? zl?%qZNXpKLq8g^Lek>*6FgdHlKES&)XsaU+IH^A!|KF;ZjVhpa?pG?| zGL9tLkE?CcB4k$zJ~KfOR`hI4i)x{7qfl71iEY7HCEt3HRI4DjBz_}fa%Qj=uz7K! zuT;j*K91XdGdIuF#b3mquIOyBn1+Yb6eElPS3S)W+=&yemH(xm)d%2;o%qT>(n@U3o8_|aQ#sp)7BotMIY;=7)oj4;$Sf~&C1RN{ zF~=!1N;U;#k)YwTWjxM>SG-1YgkQSRh;`+8Lw6y;N`^eR9Up%?+h65P5bD#4bE>UqM53+l&x-a>4T;V~@ z=V8v|Ef1E1T@J`{LhYrf6M|w%^~6|!`Oc5W9291wddGO3bnVmCkZ6wwkhk8bJ7I0q zYCZC0R}5qjW~nAEkWw76xq!>GTpX6kE))RAEClOfiJ~CcsE~Ia(+ta+yI)J&%*y{5 ziS!TWjh$pz@kNPUCeMwp{Vndlan_OCcgb3j)FX2`X?u-U?#5651sDC(+#@07_{}%) zUl-DIXW6MyB7fu6YeXCO4dIU8;xn%%ZOp74*ZmUz_HGgpWq1~Oy)Ze3PreD){$hUh zg4bxDd?SANH8MMoC)c)wEIot;()M5%B{2MDrjGCL#Z|w+7v5922v?gI-rvF1myw1l ze^BL_dhYpy2*sqPApC~r$l}x>5bz0t=K>Yg;mF2K;L$?;*2xIPA8uDjpjn zE(9Xi?h9iAmYx2MQj}c5A0~Ei7e@+r%)^>ByXw`KiN+-QW|qZVl9YrM@``($hg;Pw z$pA)E42r8gu1(G&%Jd-LGMZ+0IO)qrAH(Ngjz3;9dk@s_zKd_YgJ6eZGCenwv_&lD z#h=C(UWqOD%!`0CvK`-iC%wETioq_+92*UfiBZf<)6Mqubpzh1CX->!BN(BE6P3%b zw6hBnL%9dv`5Zp}Cd$g4ljHXn^tVY0kU(8`my9KUM=?w=M6IARvjOIdPy4rgz;fFMa zUcW*noKS}oN&>6S-MI%Ka1YvOz{ZeGd0Jx?N(>56d)=3|hqScYSl4c3*6l_LIm@?? zC|g9gTXF30CFu@N{Mx&FaI~L|YWdeQTEn(6((^FCFlr1vYd*{FVfSj?N9{Zz62jG? zg4%g#F+ft^zB5fo_kvc5#}Ff8V0Pa91C> zK>pin@zYOYW~#H#)XXF<`Vju}O_afDcg>e4-CIADdvWtm@vkqW49>le&)Jn!rtte8 z;FB+)gj5S^6SWe9cR!loiM}B`_$Pe$#rW<&Q6Z`h9S`4we|Zi5^FtIvy2|;6Vws}r z_x=?hcnPk%nCyDy>UiuSeC=QGwsUd)m6VDdsF{tAFmE~Z86pgCz+qSx?NNOHtN6QT z;hJB~YRlATaM9=Ro|j{+(PGRvJGe5h0a=i3WH&K)*pX*W4P1!BfXaDsv_Pq}cDUNS zBWh;2R)p1+;U?48QM!bNr}Sys6Oo-++e!!Ve9sn>!McLVbW&UymP!(^q=`xqu85}+ zTglN?f^~sl z#)!k^bx1~Cq2|zS>*l^Oie*AehVY#gIEnK9rnf$g$e$It7x8-)jLuqfa2Kz#tA~*E z4?cw3e~TBrAIJVh0ZX{Na|y>CSK#NLBD+a%zMl_VyD|!U1~I+^-+4E#{5noOAE%v< z6^9h43EJYZXB+lW_LSaO&AuykeGm!CNXkaz8Hl z4ler<9)5tbW_$b8_$DGtmJ<4!Kx<5^;mNe_mI8}K*LKGZc-MJ&>ho~k8*#!Jq3KPB zj;V3{{!)DZi@5O`-~PYcbi7d;O>}%0eXotnnfaiJ7j>BNEd?sg#LY~mTG~>-sTCX# z6G&A&Papt#9qB6MuAYUF$CQSr)D|^fwpH-=$n;EPrmu_FFiN(lt9_lTS?n{D;ZHVy z&r_B(JRKLcMiv}Mz@6M<7zRrO(|KlunQ`w|X69mhTchn$FYMW_A(@T zgll$X@+iJTZd!`uB$b+r@J25Kruo4$6SK}V2g5WBEn22HzWp6f$rE$5wXW`8>1qle z$ZL#->p%tEGi~#Mr9fw%0;XM4d$N48E;K^q#^1B_#Xv!@bYKAYpi}#7a%!KcV6sX` zy&j3$-KY*Ci%K)(f#BkQX1jp12$9>qdqB5EtsVrjy5O)Lyr;X2qXVuzKrcY+^;mHzhL%z(A`d}!_vCVC zulZGPsxzogVsZrAw_y99@yH!i=xTHa>6F|$HBM}>lV<&?fHn_YdX0SfR~uKb@>XT{ zUKGS0!Ee=MD0HSwH?8UDy!j(THNBKo7aLCcva1_=Yf@SM4u$an1c__bJ zrcCRG2Nh|m&`_M3#K=C6_Uxi2_0FcOHw@L>OwYAK%zK^KojY-} zx6e;YwNki57GWZJ&JQzXZ8E9!e!lev+;AP1EycPGIO-%Ec>)eS3d;|ozVNQZYp4cI z#HoEM)5NS#j$zB6vH33Cc{4WOOCIohMubr5ynYCd{Q~ z9|^Qke3fG84u9stdzh5%8ds`jZH(}yk>#4!MV6qM7I83_msN3(SSi03-vC)>!h|js zAu>xZ9i=ZbVjC7q6Q;T;X494?jNy%FL^fOAHJ#{T{-SmJKWg_nb*PIUXSn8uHIm{fp})uH+K0jo);$$GI!X!|@8jK8 zNR+z%2Nl%LxrEwXCEPfThZIlQCTp5*hsl(*D2NwX5Ya`46~8L!ob4z(TvXVQQ5!Xz zgQ?Bn;A8OdKjiwBnMr)+CAj-)vmv901?yG1bPvj`It*)%!$C)2#d<7RjiJ>9n7k>x zT`T(}wjcxb%)rhPD+8FOV8%_#q8#N|M$8r6SFf-O! z;f;r?smPizkM#~?c(q?&X&8N8Q}k0SmHaxX-VfgWdN7?5QTz{1Phe^ZXmTe; zcha*Qcdqw-t7PtFef_39l0l_X{O9KP6 zlUG~#XOc2>C&w|phpJ_5eJqTnUTmy`YGyIp{BW^|b77g4 z6qUf`ed9?_BLJPv7Y4@zf5IOwr#nh}-eYm5@f0E{5Zo-|Ar4-=1WQ(7XbFbBLA#WC z&|4VO`o#Ab4Mu5YhC;{mILX#0_E1?R?=@3PAY(AF+lv>WIdUlNV++7e1Yz?w+fJIc zqU~-g!sQ$qNza74_G>b*S@ecCLQCnxMy&%b~^L)yR zikSyodspBs;Pd6Ry5t33E``~sfsk%*1zSfc-!$ObOMYOhyWwXmCe$7*LR6B#mAD*k zdaiVmgS9W-<*Cn{ht+0Lk?Nu>h2+%9%*;pA%K#K~a94L@wL9t@a96@*&4ZzSDawEq zF8Kr}c@#4G*Y&MYDPy}z7f_iZUO52kBoHs!1)SfHPGri& zC3~Mh*Tf>7L-6t*U0X(njhAFxBJCKPCnUD9+YIT7t*L@C6mHlHK_WjWE`t{zakf`%OYMmz; z|3MeW}^VuuhLfd9mD|NCF?5-vRnR07|Pilg0hvwt1o4B_(a9innpi~#VD?~HZX@Vn`W=t6vP6zg; zy)DSWx$jU}>YmrJf-=9$1x98X!ILot#6iPS42jYTp^G^Z2?kJ>f+iYRdJiLMO`xuc zDj~HKVWI<&BYRCZOL0u=Pw~yJ_E|SQ1%eC2Ki3ey zk@#@2{~h}&a1VNSz$RV0hmt2MsQBbWO<<|vO0!`8LEli+E~0kJN8a5&YA3QBAybk> zB~D!XVJoT1QV_?->!gsWREYHQrqYrh=Sb8ZmsoPb?Sk0V(G`M42-b6Z;~2M`nke_p zGgs}bg{~BpZYah~mR?GM2_6B2j7o=m-*ow%HR2Ga z4czAN0c7ft=j&o-%F{xQlUU;X>5`1FzeHim*_ZjKX$J${Vd-e^2EE|vI)%I? z{n5wW>zFP^#g#nNK2am~y5fWNniG1ZyS!Kh9nk^QV!2Se%_44@f50qyu(^9eK&GHi}kBkGSTFe#F;UKCI^{1d#j)@1qN8V|JsGR_L0F zR?geo;qq!Q*q`Kz>AURC4536TqW8xuI<65_oxbvRy))ZFk+n8p4zwf3ja&QSJ@;Bz z(nV_Wi5W~+iKwQRUmMj4FrSk^+lKNFF&t+XS7Ji=4xUO6wRf{{`_Bm!>Q1->56)b& zap*E^T;jin5o&*AFD7UFOjavI|2(pNoT>W?8J})<1g_mtbgpg|UQY|7#@ZmwJ#Wl3 z3}^!1pwZab|*gdA>dT*GEj1DvTamtYO5-jFxqY=wZC*m5z!uJunJ#CiJ z6B!}zC%8gk`F&`WBI@9o@%K!fJeZ)Ea)qRtJQ$A8vySGC*1DF~>C7}9=KSvX{CH&2 zM%VrZ+=I|ITq4x&q1(|4rfUS*YrX+X&3BR^p9Hr7tzyKW$RUs6QMOaawcF&^9tbEM zp9-RcFdjax#N1mrWC@O3PTSMoFQ@9*I)c$@`crp_7iOJ&cLqHeBV z6}8}6878ulx26o!tBCWa;-HkslDpS<%8VNblZqBwRbtTp&)%CTNs=VlVXEd4nRRqk z^)<6QOK_JTB9uaOzH&Z**F25ryGb=+{va=%N zbT?Of_U!31{mtJlvLf?~ZWol3-R| z+Hp{3+K^m(-zT+xxIX{8AK_pA&ULKbYxqwe;m8gENU>{Xcnmk;s2Tb0tq!$fM zyb(Ul<@H0N^O*y?8ZA$2*+yurxU!wqmfN0cc+C~~^yx$PAdeY9@UJ#siQQN3Y^o>+ zEm6M!x8ag2Bnlk87-RSthtBl(>-5pzPy)2a%CTUNxD=$)F(?IlB zqEOoGK(o{?rTGW5Iua&7SBqtD4TkBKXf#^B`;!T(d(t-+%nSqI`!}v}|LS0Ba@X#_ z4)mwa)>Mrhk8*8R7bvFqv=p+(1;Z3X&6@f2e%I-E;J|~;<(Sxn9y@M%JbJY!BZPkMVh1w<@R_WN$UllV$gf+ZNU6lkZ!+((@Mn> z!dZx7Fe!fGz@10=yP-fIO+>}7H}GXZ?Y0k<@vaW?nAvABtDKX5?Gg_uW#$HUUgz4% z4XKn8BR_wDfBk#g2WC4~|KTJ2@uMMQt~x^wX-l+o#1b>^n!KekxX>s$;7D(}da0O- zR=YQr=yp9Kq8N##&>I0Qzg(rVd?a&z=BTI|TG3Pm%%sc`%0EoS9N!|yoJ<}=_ZtIr zM~x4s?+}SNbr2|AB_50HJ&%5^Y2dy%NfGE%d`x}d;-=%g;x$?uFRcy)Y*;d9-K&-C z&xU3uIN1$V=PENa zE2{=eoRyApXB=hG^`;Se5zw>ygr0$TT@WRu^kUIE`H{nS0%53tF{*{6&NE~|P@*Z_ zWd^}-!$&O3g^<7+ge69tvN7E-7lk6|TR`lHM$^K8_^~33$hP7^?A4QK?TbhT0iQJE zK76AC!Vg#Q?qISuKHj>-jnmnQ+F1yT6ytkl;xm*J;nahbn5Y#*14qra@qNx=zkdz? z^Uv`9%27f8@Cp9uvw5)cZ`WIv-AH|`NJf(v$ylyEsaBklvs1OoyzQu%)fPcp*s#AD zdP&j0qQW&Ej(asK%_Bf3bQG2usV8p(Ivj~F8s5D!T)Vbn_k$`(cbcejtsU)=Dv?ElxS%f4dy17Mmq}3wzf;#d z>nMP%dLnJ*lQpWu?lPK3rA17`*wX8HV9uO&mBv$I5mNz|tyiP5gEk3mANaD}e(2`B z2&Oh=GUQRR-71|pgM(in7D24`v(Sw23sFw;LiKZ!SAcKdxDTIxm|A{5 z8j;MWlb6R>uKm=zK2#Uky#y!CC!51L(7rc(m=%r((+I^MulMkXpwzns&qWC=C7(a5&YtIZGgUkm-?;qKNSw^b7ql|$#vpfi#4HYFz%R!2ainc z*c;OQKqh_Ssgv%#O~Cm6jT536R;3%GW3=ZlweXxBnG~p~oFf+`>(@z|ipXU{*q3Wq z72~Q7igg_1SBGv{BrT=CXt9RLD&F%@d0F@n-X@eCC)tN80XsQqdvr&abWpEPkduC;50Z z-Kc;0oqL0S{sRBySBp@=nUu4Q%vn3b$DpsGG~0Yc9@ETwTZlGb50;vi8$4xh7yyfP z?ecQX7Pz>dp)Ah!$xgODY1XMJ|2iMgAFnN=TntgD&2Sric6XScltaucadAJbHipiT zs$}u{@YnwA2EX!lki*ltMO7Ug1m`cNl*MN%z7Yh)yp+>Of?o>@zis|A*eEPxEK%wi zS_ZO=U1+p`(VSi`T8`lUY&el84}bt}y*uQY1v54aPeDS4W!~FC?4C&78m%BzWmF}} z4x@Vv70=HY;_2Oaed1tlKy)|GEFGVFRrB`L_C5c}$5MNrqhvN36HSvj@x&WqG z17&m|p`4}4P<|ZV>CU+JlT?(<6~K3V(I~n*Q9wn(9p{)NuO=_iIXzSoua2 zUm<&6YHZnMHvbqFUD6x0*6>!IxU!@WA^q=v{lrlFPR#ox|)@Gw;V_@CkabA<2ZNdXak@?h63Luv<_(c^WB8Wp0ns6jeKF<58k zN97u_yDPgyhbaDI@a@W@hyImP5FPmAp{S5oDaRm?V(ebs^&zXR;v$$L}AiLBosc$3rIWqK= zhd^P_ou&{RA+^v=2bSyyBZyJ2i1m>$GB)H!0T%ab%1P47ba>UwYQVX>v zjNvMCfW!z6Tmd9#4peA}Df~A*JTcUMtxO;46~fKg%457u`k5Q9^sI zEQpt={Y-`7?g9SV1}(8H_1Am&4}UZp1^g_A=4|iSTga}(rin!DT32Rw#Cj9t(rP<` zvs--9WRb-c=Qvz!%UdwA#YUcdQSfA2SfcSx#O$({XF{-l;c6JI>dgOH>j(^5ry=3UI#)3tye9bZ;ne;KmyO4l&8kr%) z{aLGJpu+)juLvc1=-RR&5HU(l>nMWKB+^aGoQ8<(lihD>Zd8V&Ib;g?(cEL)e^{l-Cdf!C*r_R?IeG47Y%)c6cE zV?mjbi@4-m2NU;xhO1A0VURd5D6VH*ZyBm=jtTpwSomIF3HZ$#O0~$LMC&EJ zv+Fo@S;xM**@&)vMS z94G*U%5pZa{#cuYD2_eTTVPrWgG0R+$UiMAwPo~l z6?V*DP_850`3!1mnkdh#YXEV51s8>ol483ViR<~Qm{&zRF^#qKO?F&zAWwol$HlCPkX`xAqH2iz^KZXWL+oKSSy zxxBlMRg8L@_`$mA0F)JD36~J1nR{tASyo1V`&z(JpZ@B0kmk+9vk{rxot{48vF?z= z4D#Kz5m<861|OeuQ7s8liZP&Qs(ZSRpK-{PFk0;I<5=7hDc`_Ki_6qrociuHYIk5j zMQ4;Qq0cjNo0+pnqsFsB-xpg0N5e-wBK&-9xc2)qe6pU81781f zGVUv92DSa-i&N&?1+(yRB3TK%&X{rl<(<{rq1Ux%N%F%}e)k^!)$dK47ugx&-~So@ z@mJ&grMx+7?-eq=caQ0%A%EckKQiDTmCekTq+^4}r`haa^)+ev8EJLL(vrF+6?N;3 zcL>G=;yCKnEjtUdM#GWbuZudkLxbq03p4I9Daro=-kqIem9)=PGSHkNAFr%tCdkuS z>oPpXsA8;5Avc?vXMv;Dwcq05XDKgUM^Cy0`*w4uB|bF^a_oc6>m1UMrjXOLEAPJI z@K&waCog2x{wo&4wX)Q=kn!fubaOs+dzo0`U6hPOwBq+0%qs0ZV za@KsSGB#dKc{le+bG9cowYE-fMDveiB^GuridDa7=VP~iI%ol6!xl%u%gDqL3N?g8M$_@vopZja}rK$}uY>8D4}xWDb- z!x4^P6ycvwPSJkHHtithS6qe>gH#=7RH$m@?5vH98W4je&d(xGD`a+jcnkl_U%9JLT|tkVNT^boG$J!T6OYB{~6 zlV;9=8gJOm_B}=z_lKDsso2mT5$RrJitW67BQp#qjhS+I&NstgvQ`X5xa}Bbp zW|7D&d)QeDMv!v4;ms)jCnu+&I-LZUj326&tdab<2LnkIGub?InJ#{$ab(H9Z|`(^ z!WV+jhaFSqc?Dr9a?rY+T>b{~nVa80@=%%)?tP&cyl!f@@}I*A5$ zGisOX{^5V$y@CJjFX5+GE+gsx`4#@-pR8aPT>xs|JE9%U2bk$Ae`iKKJkjMVsTi(gIQWBG7zEOt*9O5^(isXVud`RK`IQ5kTpO!~?r5K4 zd3PuA?A@o5;ZU%LSrg4$3|D~BD3ws98&qSsVf!-73g4aeh3xP-aFZ-{AC`e1UOOal zrF(3Md>ej13u#i^D|kj1<-kn7kd$Tgxq)FDCCC@daNuPwmcA zVk3o~YBW5oUx`2A8&Lv&r~nL_8V<;^50L8Y4^}M>N8_Im$3`!$CApp)WFMahc$wsE zQRq=J?nWM?3~GOch8kf}`#qUvDI;p2f0&YZkY3R?+TcU@T!gIR%S(fEFQk zIzngHdm36!A+qUCl4P+yfAsEPOy8Aq2V7g(Om9tT%(E~m(40qPxQc_JWI+FY#QL$B zebuaxHP6wKfdp9-SgT$Ma*J;rx*{{jUPiW#kquJqPv*$KQSh;c=W)B$@a6#Dy)wc} zlXZP?X??n2yrPL7R?IQ7HIl9=WTq3iFt_vp+s4Z8rC4JoJm7)q()Nwmy;>p1rF|_y z{8wC+Wrtb|HIXi0y{gII>6@Y9M^08tat$M5@!2c4Eg@eU>By(Ctb(MsxG}FkO2++- zjYJ)O4tV{OrPzm3d&i=7u8-POG+f(<8U`-HwE1H|lL1f~x}9nA-U-vQt(;-9|J(23 zZ{EAd|GyvM-~Q3ef68VpX`g|r#eV^^Yb_XPszfkMUX7VW#tNv11&2gymF~+P>^JGw z_;?oL@}&#(nQIc9TCPB2aVP_;m!6&NT$IF|y8RXQq~ZOw5H#+<0(W#dO6uqvo*??T zqwtgAj#Vbw%`ZoX+Cc>SX`QIF8NM5ge)g< zISyH^zap^coSBKMWWOmk&V4mBVB}f(<&!>QIKp3U4bttN5jT0;!`o|PcB$QoRPfclZh$3?JaY<$P>Uw{GpRUX#@%hd;wcnpC-F|ZN7tp`p^^<-w(xlJvl97bo- zo!eW362^V^-d(xw!Q9mv{2##+_TJDY;x<9OyR`w#mb^@HgfowPnMKfgQ7qd}H`EhF z#>;Cs7_Se{W$W1F&=Ydk4kMeiFP zuY3b5b?HlBg%;I?zseROcAVfWyX_zCsKDZ|#r(vUwZIE(Tzi~fZo4n5s^Wf6_&gfa zJ|NxikMO-Ey*}L;qW!*yo0CtuV>^8s6WFyzRrr=noU18dht=F&3l0ue-Oi4UN%w~L zQ2YKB{Hx!=TN_;RZ~p}U$3L1?hw_HO1NJy;=OhE3Wv|94Y%jix97`xYTv@ED!U;N!E; zqgJk=+_33hC{jx77;vjARl;!=t&>Lz zTef?aZ{RFBS!#x-WOYoEMV7aBrmN?=dpt9#H#WUdb_Xk5}-wjCpY*_aD-o{gV5T@5I8CO&>6zp#ZRdoUkpN_;)*s`^Y zwePR5;FlZt=P&T*8?*cvuzn{a!Kji2aM4q~1t8MGt{p0{`-*qoLg^(YWfV<0H-b?V zD#@9ulDs*X60FhkJ=SZg_DDuvsyjk@i?1lBlbzlMRh(-lu*OhQg||PquP(HxOCxqU=Uxb zK(+VsAFq=yx0l;jSzl4bVN-qO3u!2nKV893M|0)eT7G>%?L#rW_3{`HRt)Im;ftBk zAdi`RiV8c(epdp$|Kq_PvXeJoPYh!Hk^OuJ|L_t1%dhbH#-Vm4^eVmFaHNVcMK#H6 z9W?^5SW_gc8wqlP=EXf$?G)yMbxNMHpr;l`*~%$9s-+8<5mttpi{r$WHQN@r#1al` zAFRv(*Xfz1_Am3_7=7#!NJDhr-GP33WWu|*`kC<4C74{`GBFOt5jpE_%*rZe0cOcyh{k=IK@E0J;;+L-d|!k4Ps03SD~r%Au98661^B zhLTA&u8XYVweY2?T}|0_#4DD&ld<_aJTELW9Q-?N+#!#hGa)!0ybpmW-6VPUcGd*e zR>c{Aq(nkZ{A=hyt({~HUN>zzDvS;Z{WqSgT>FQyuI8cil>D4&F8S~@FxKdH6ss&O z_?j1z`sH>Zj&(kcg?w;+J>X949&-(EIy1%ITGN5R3e2A(CcDmMbW)F;PU(4;sD!A*Fk$0q>92A(#X$#UF0V<^@xjBJ6S}Wr?xaw@S96IgtBM;WBG)x2f-+|}OR;R(bk*qDFQclIrT5|wLfrqxy;O5RI>mUs9xxpbXkT>wALtug&JkP>T-Ss44_A!&>D8v1f(^g2%>1hl2B_MjIp-&w>yK{@B6s-CkYJH3oe?~{q+Io zk*`)E6Z`DBc36^01fm1A1k;+L-I%n7KjJG6=7Ob z&kj1X#KrW9ibhhmBtAKlN2!)^9Heg%0qgW)I!4Z}C)Gu?qS3MRXNS?{5|J@IyG&AM z3gqQFM$dEdHNl#ihj^xFWT|6U^r8cY>GBC@pz10xqIsyOn!pN$1x=F~eU2@v{Ppkb zQ2F7tQ?z&9gup#Oxz?tj+w28?4HIe^YF0I$$%z0_TuAh)VhS81kFI=j6DAHbBq}z| zwi#WD<1-LnjxKC>|2#ICjc$0l>vR(g(-l!>!3j&|f|uLN4caw<3dMoKB>z=dZm6&D ziHG<6@n}%HvN?A5+Vr6^YCmiDaSvH((@W}$h+XJ#t&gE+K2+*as8dZLG-TO%I4f36 zB((o_Y?vciYWb$?I1-)!aKn(oRj7T1gXAvW;W5fSV<`7sC1-@$!cUl8vb*mQV*?jr zgA|0>I;h1Tf}DaS*g>*6BYc5Y^6 z=3bv&{3`flZ+4SpGM=B#Z^uG>r34NWiAzBv!S<1$oP>s7+^qyc8mlio+dX!1>H-fS zX>w~z76EL_1#uK$F`PBAqqYEZK#ad{=Ng|IQW?J5O%KN-ynE&F=<$%u9S6_N>y)_Z zt6nQ@2PX&}Q@nl-+i@sTmLS4+sJR#`65Ds-%nBXInOSh|B>?~Ja!*G^^FsdPG7 zyXUvmH8LVAPk3`0cC-Uaw>~jYyfpf15ZUzPcdA&$2iJmihK9M546fJAz!JGLHe@7o z&Jj0zg@#~S{!t|&3473c&0Z@yZp(e-B;5utWuw-L_|DFe9GN(hlegh`Nju2EPdjIH z9U-z(jxrAqX5~zP>Fx!T!_e9`v$|X)ipdE^1_RNuU7AR`9s`J-1`O*trIjIgP~EV@ zOlU=A0~|xiLkt-pOX?qvu8T1!bK-8pc}-oFqig1F-gFp~pbW}K63lpdI-X5XbZ-pZ zpCt!2VD|yIUmd*Iy)(SK@;zbv%bA4YD=k)Gj}&VMoEm2h#rYtQ;KPNQ?VIVs5(?ZJo@rWtj5KA$`n14Gc81>D)-lIM^}n$}3@d_ZZg|dX5V- zX3AZx61h%O^BC>oknrGn^v=1$qlNf^Vh?OR>*igy&e_3zC0k&XL+$)wbRVOa3_WjQ ztJB^D2T7Lf>u7qjv^@})?BpQM#oSPA3Ca-YvFecy+TgN(e-E#%lH~c3?!z2(qv3}) z&P>Lnc64qQ;0JW}JD*7eskX!3bwjb1y=f%KrSwHE2`IJRPeCGKGsboM391^}CNQFC zNy@UBX08Xm`kGA(J&asDOM8aC)|OTkM=h$H)c!~>w-@Z*xMUs>xWDh<2kZHGw(^+U z6Z~RP`+e`O^J8Z!=1{XtJ`v=`=ZjD~E_q6J$tkh(7+|!Xfn2MXA1x^#nKGN!);RJC zfi1OcCh!>H?dD|DI{doM0LO1zL+JuR>rVuxXYez4p@N)=F83nghy zA&b^gKYg7L&{50Y6 z^9!T0c!hQ3v?63}DA%arb@vQsN}~lLlacr18@I4Lc(FTM7VP;*gJ>s)p$ zR4Yc^V-a1?MtxC-u}jtM;9+7Ob%~0SC5>b|x@8WDv`LVD3DJn@@vZ!*cD}HvoHQfq zWG=PD#EFdlIkHYhT%=VKf-(41ZFl{$;jFNcx!(4o|C(_|1s@hG&B9; z;fc$a^;N7KL^9|VGJ5p6G!HN>r8rxDg!M%vNoTF@a z-pc$HovGC^25B0A{I8taTGP{42lToTVOrC1Iib;97J+0f4 zSy)~CqcCcJgN`Q~K>2{z|9opi?PQ1Nu`~S5mF3=sTG{vOFWn>|a^WVmOiMkW(56qp z+)G?Y(t2zosKr%2EqaYf#w;E>d&lS}vzaLYAsf|nkqLkn*3gWIit^A0oT4(}dpQ+V zO)&KGYtJPmp+nD3Tz-ytm$`Eml=A~*TPj<)ILpP}vG3%Wa$XNGA5ZM{F20+iy1k#e zv!e-VsUi2&^X1IMgSY6W@Z$aiM|QA_hLyaQaK@Bq&W=c1dc8^i%MKS`tFq2Yo4kGoYM%q&4TzS5?Te;8tz^Zs6&Fg24 z?8~--o7n!4+cwD-LVI0lSS!nw0b zh(_#T0TbwUwoZ30koV3z(%3`>WqFr4=<&_CG%AP4!CUx;lqIKAhv*OwL7VP_S25(L zs`%pQ)0$Y%!yuj;Qng zu|+j}$6gWIvkV8jFzYQ3HL?Py8Un-7dN{c}bDN5tH*?mxQL;|8aIl}a zBHKSq$aP47I5fIc%ipuCz^`Z-IY(Px?1l;+f|i}cgkD17 zBR;WgT|CC1=wVtk=aq@J4}jgVJsPRjNVzq%r4x&}ARM=MGHJ~Lr68QJIj_`tEOuTZ zudU0wXVA45!5bK@a~)Uc=y0m{vk!Q(QA!N@x&2go%D_c0*>_|?Ja}74^nhDym-Fh{ zXG1Vk?@eq1<4)fCT{$gHXo_7LO;Cp3PiA|~8Gcwy`OSjXDhM7v4Bz_hWIP7CXS!|A z&X2=9_4C`9sLEn@K5k}oaX%}#j;!iR9+%gOsv{)SXxef?o}JJtVSG_WaAZK1Ev@kQ zoZUw*Oe}DA87rR6@47(bSwIa42hTq3g2iI@TNit$lPL2=RI`rQ(lbCKevS2#fC}nT z1O3`^?Y&jM3>E*Z;qwW8ySGsnmM?gHfLAtLdYIczCj;DR^FiNoQz;EhGiw&kjroLy zTv{-^o8-^N&-6^Cdr7|H!oGM~ep0BmH;U^DI!4bv2UBRCU*5tmh-vcZ%o++JR&X`^ z+Wz57M5veRez zTCCa2_OC_;Red;3Rh8=I_|{ofr}C$#Q_gd&_t_}W z@Qs<|ag(!;aTQ8fA09z)FPDXxkb}g$h8ITdBre#j+{qy-9ci%WmZpoPTkKdxF=e%? z5F#Vd%VyRrDJ6#=>9)U02a;}B`oaspJ{y_LAy{GCKGo&Vg}TVWdZpmQ!BFf2B1h}f zeA^q~es72KLBXpdTpw(#$?&H;!{5-_@){5KLgRBx4};wPqp4?+C^z%FV0B7%j-hRz zuA-?T*PaOla0%sH$|7eTz={*js`I!yZAu_#K%{2^pZvJY&xlXZ^7O>n@C3L zE~ph9TihL7qbm6K)jkReeFu)qY4UgSTktwT*?)$E!eV#suMJ+7s*Ca%myV>@q!+JF zMSv+W#`xt~x%MevX1lN78|?n(YXomUBzC{)O(*pCZ(I%O>}u!W|E$=z(VEQkzRutb zUa2KTi@TSqd8*>w6vI|WhJj25-Iw_rpZor#wA`iI z>uA9TQR*eyWtlLA4hl8{%}0y5$Hsr{jFih}-FEoVqCY|2y3yL3;hfd1<)Z`c-*qMy z`{raSyRuknKk6sObJs8O#JIvhOn}@Cb?180VqGFL8TrPH_NQNe~%jMSR zB1Uayh>zP-t99isLbUVIq2!PCOxKhGzUw9Ij?A;5RlTHv&XH_lpm}&a?9Mh-3nez@ zwk+qeJSm7@jb{pUj)FW{Ec;T+rUdT-iCskJVdCQ7x&4$a*aHwmjGH7(U4w5|b9y-&<%A{{vNO16I=}N^T8GS3?K~neECVRnA8rZU_#-B-MCg z2rO%1Jk{=epp=`(DTFXGs2&Aye|Iphj$cluknzIh?hK!MV~)$H{hAFQ?4&rL_WSdi z@1Rm;%PL`oFmA`W2ee|lwgk0jXMK7~-dt7J6~0A=IayQAiW8w>@uI8F{e;82x8GtW zNz}75WwT~1IXPvJ{Q-C;EWV3Q_ibUsYI@PwW756%jJt9RDkEe+ct-r_p}h8AA05@r z`KiGLG8`+G$UE;v?<_g|3|UCry4v?Xze&d^*1nG$`e7Lm*?OJWw})2_!a39YYPSWP z!F=c3B*`+e0lPa-o1+a+70FX8PSgDAQjKjMDJ%-7-?w!y3Ad}$+4N{WOGEdJmiw#? z>Hf-UsEpWMMT1BdyYs`&l-RmUvbie%Yt39JSevNAl2koM2Juqy zf+==~G$=Z=e$S|SdB0>~D!~`<=ujusC^=}eu(|<2v0zdH3#MyfPf9$PvizBbfKxBz z)E>jF1lc3t8ymp7L~fbar>?oEWecRzSp>ydD37X|8m+iC-*A86&Ts#&GuwzC@60rL zurtI>4qA(&UwbM-MnpbaGj$;7{jhLY|iL7_;a+3jI~WUnjCFfQ#{(*C9ncSBX;dy zoT+!GQ&+CHHGCxJ1*xOLC%z-OwMWjiukz%}q-(3^ym6o}Vu5# z4H(t#e8kF10LpyU$ETlxQH4eeUQz8DmqMmedxJF+R~4_I3!lnND7DGzcl0YjI<6MM zfbudK*)GWbsna7?KA0LGjM7bv^59gZIDPSDTf10`mPu>J^&Y@In6(c-f4ehZ@s-`e z`*Ma``wgx-c+**X8M5X61h-Zpv#}eM*`p9$vBE)oDbb4sUxF(>_B=i#2tQ!e#zKw- zaX~$TwJ9)5X&X(sbN2StIf(Yw(7(8GuEH8>rxmLd$Y(FqXNF)^KVPeJER$%=M;7HLg~gkN|239?Uj!-1SzE^r5Gvf>cc_SGIL{Oz47 z?613Lu9h*@_1a8c19n%om~_@4lIIS^Al?pX6ECQniDr_gz+fj@^!~N}ai*h#-i|r?RQbSG87+N?b&4rZQt(x0lflad*=CToX^_W)^{5%Kk;j(|I~y|QIHN20n= zCl9X)ybF!c4KvHmyu16Ry_3o?>CPV}{8b$yf)AdO&h`|=ua5>&-}c7#arouBgDYFGPK?@n)1rFP zD?hK=1;~b>k88>|tR+Xw#o`FUD=7!u&;*84rY+Pi5VLZWU=3){V((aQAl;Mp6ltdB zZ4GuOX(-iM;XGQjx|&KXR%jnp&-|fS4Go#JhNStID>{PQ=}D}4V#sP?t;_J&?%>9p z0lQvD9!xXz$+7hz>lA`%3`Ic9hfevmfdkE)yL9jRR-N|UuLs!kk=b`f-s}v+!zO5T zoFFIQa&p=p*HCLO7`B|}Hr4>>D}`cJ_dHJ7jLz>*g>;*dyDe9PS+ec|-(NjvUr2fC z*ktCzE8D2*#qK=JgX%prs!9x+LDFowH7<6S56HE=%w(f$RBe?-=_7dw+*{$-MN3bX z)|BNg$-^Q^oXlCWO6@<7LABxfOML2}P*(>8tcqM%YKTncY!smIGbjOru3@dEtSE>X zR>JonP*Ft!i5@k_l!+y(xJt@+ta0d=sdRK2s#X0`nMz)5i!{b9z>3S}?>%HEOSGT*HGT_NlS8Ntm&$6c9bjb}CCoNQZ)svzp5ujk zSM!N#+@^=-j3n~DK-<|AsXW1S+9O!MFsPmvT+ZbuBpKE|Ha;kyR8kA7w%0kw-Yz?@ z?u+Q?ZqA6AQ&D5Eq7Pc?Equq$g)2p(S_!@!W7et5RXsHS>^P9NmoQn}A3`f_@ zlU1&|&Ma?VPR5Pk`@=H~Jd}i2W=FoY_?%g4W+u7Urwiqf_jFgylq~M$7 zmX72)3c(E8`^Wo*GTt5cMUYs*;sLd1HZtWFtF%%mmGRY*_`s#|qU8Pj4eFLLB^FlB zQrezD#=fzGmuYEQ5L{CJDvgw)_TCY;_YibVsZ#ACkce5=(gQPAI}5IoEx%Zs)2r!e zWuq__$1`*Ik#txu^zNKrw2SFJtp@JH8yj^a!f&@`5Agt|_w;}Um*3le^7itX48Pu6 z>Z`ZEuXahpb+lh?46VTK^6{F+a#iQRzBy7EmVgHz_tmJK7VgL3!g$wpJ3c7R;$A-M z0TF75)@-hQYL9K!Rvj4;(j?GFKA_NamV$>%AfcAEQ831$23T62tu+^Jbu6{Did zJNaf=wB!%d?dUsDBPhu7lLe2rP_2`vHA0F zaDNB4CqufcZzHF1`08JJV>0vRV0ftEC>^aSBzp>n?TfQ^z`Z=?d9TZ8;Z5R}JWxuO zbLdR8C_JX|isLSITXnaErX|Dc<^5%?t85(6SgEhR$TJ>zEg`Eeq~4Nc?}{mjQkJ?3 zt5gj=XIZ=%oeZgVT&Ebi9DcgcvGg7XOHyB_;&P~cDqSexq4vR`;s4Xu_;OWi*3ah6 z7Tcw3)^jsOO0#h6I>R!uX6>&5e!YeJ-hA}82RPa|J#FjP!Cplt8<^?@kzi4KzZGzx z@NVA@{TE&8kzvJ^#bTyY1c~0t5Cytvm9~W8qj?_EkU5lXK-+YInkz-R=&AjU^}U+4 zL^Un)Eb$Cf<}DNe?Glty)xr!@enmH$1XfHk@p>1VxO`{a`{wO95L$2v-@UI(5RnI# z9fdrGX>!*IiqZLz9b*Dn;5=lM!|tIcReNhl(n-mW+`Rof>dGw%_#=T|cm$6~DSztE zUMa*jkwKB)&%Kh%+?Gk!vqivHUOA0TmExH>=bEEr!EUI2JQ)(_l>!al#O+LQOYp;6 zI3652H-Z^-og2zSkTXTzy*wFY>3QW-_9zsqMmQ1qE^7HYs&sr8_K}$+8dI*6`M(_t zZYF5Ssu`r6tXacP&^IE~at&&m+P9*kZ$}&*o6VA{s9-u}*)wT778t!6`;BdmjM@Z$7D)@~YNWaxnrJRc_cS0CzC)o;+m3O< z2-l?6jGMO|90`88v6O>?4@aYAmsGmZ#&8z2U!$G0>pWXWlV|*pTIJnduKAXxkq0^r z7dnApu_T45IW%>DdNxFSCpYbI8cPobi3V>@<_F-$0&7Q}u<(j&Ej^T-Op zI&Yb59hjILKL~qN@&Q;lT~g7zv-CY!TjI1Lb9H1{yw(n~bK9#^z(bU>bO(Q>cu#kh%7EYQ=LT74(|&O4 z4R>VDu~|0rM{-D=#Qs3~eHWFE$%cw$hVG+m>l}HV8@B{EcZO;H{_0yvT}MkooxqyR zcm>q4GrT+3gpRj&7`vy!*`!yMSB#I92)V0-!n^aStn~LM(7zNuBO|h>DJ# zx>1bew?UfGd^ivIPwEeMO4raSh#4dn_B|u9*x_@Zb65sBYs0d5EVNyEwhDDu%JOIz*3uR?oAmqw$XPa(4da zK`Mjc9X+K=LPO7o#`Uu*=V%$aO2XcPyz<>~I4?dsdQ@e%2(?41Ps4WV)7T=xtI>wq zKFkF_TpM@uZv(oU!*XXAc*fk_-+5FnPE}Dn$bF%IqfDnR<^w9AcFw2MbPPKu&_U-` zr{!bRXxiFds6AsSGA>DqugZqqDuZ54RIQ?UfN!GXg4$D0={A9Bi>GQ&^wliVY@IJP zIXYb%=-MMew8>@+rWCB}c`$Dzj&w4nVD*@<_N!#mrNrn;_(<+^x|M^S7A&a+qh$CH z?+>OG=GQyJB^(s|@Cx2tTO(WLB)D z=W`;TK^^lh9D1;;{3BTo&OA4>?4e;aJkd3Viu6+_J?|VJ&ojM&;3xM) zEwUr{F`Vus-PVPR6C+UH7fDsDd|{IUeA{8y}Wu4I(=`CPR_$8M~LxSB2Ada!(pC zBBy_>)f$vLjavL2O+u3{)G~5TzeK%}`-d%xeWc=5IkmExbpzX}TP*UmDtk4mXyP8y0YR&uo4hZeX`Od`jx~8GuMI;k9ojluRua4QkeR$vp zI|css#Wb4^W#xCT;fL4em$Np8zQ&!MoD&v@x()Tq^s1g6H?y=XRz?FkvU~;7N`@(I z9SU3I7L%%j5Gkc_twZ8+&n()8zgKUA=(TU$j5rZ0rbOb|ZjD-9D4~oqoWJcrO}1%u z6UB;CfH0QcLREp;{4?fv;R4srDW~Ao?GAaLqU{eWSX^f(6Y5@?!a{RHCLY}94iXoa zy-Kk?z>w=+lViLZ&w>jNq#y}L8fjd^up46<6r*rnQ81404hc&d(xX_$!~Z#>`XJ%e zPW-dtoKhp(xLm8RSlQ+a$jR(gIby96>E_k|)*r6EInl!BGrYQjcdvY%vA~_XRKuKo z^4L9Qr#D&xrT+o7+}Rt&NOtvv4Myc-6LgKE#S1&T%Z$0K%FV8&w$8yo~!Q^!9 zo`ZLAJW$ap_Q~{Tcfax(rNK^dxU)YyOx&Lx6gJtb2j|)1vYgJ2`DV9x0N3prO=&uB zFt6e!UNniTN~1JqNrtV%E^1UT z%9@aX-S2Eb$B)-$YS7;d>CU$=+5q?0NB6}C$j%z~gO5|ylsmg;<_dvgpUgMK^dEtb zkO@1%SO&wJQi85j$|BKz^|n>zg1H$&B4L+>Ipr65h(Teaj zEc^+mDpDBbRZGoGDZpE|ZHo&ZvoXDO_0i63CCP6i;KCwY)mDUA!(Sb0`s@xb^r16B z8^7Hea{bj2{^C3M@Y+K5Gkm;-&-bxYSg|!c8OVNr_LA1Uq3xC<%~!Raw-upQebkvdJ7v4NUMrZ1lMSs`A3>44Ex$E3EW%VhN^^MP8rw5U29 zXL_dx$Q+@mg)1(srzH|}I`!T)t+Ig(k>|_7Db(3=5rQX`cCeV`=G{Sf#gHT5T~q1V z^WVxrXY}lNP{kO;Z^e5gJZHKtddxc$8}i&aId>X%uH?_=D0ZEi$*}TA#q9kXrXo2WLM%JoduMn+Qa<)6yWQ+=-yHO^Bf-RHpHk;o)0vOl2^bdAKomm_TpqN9b6 zp$#g46<~lG(kOOkXFenYJ6(UQ~H#4pkI{^H+PcjsC=WT|vt0WVo`g z4iDmej}_NEE?MSMt-E~Y(NJ;`g>GUiDd#zJr&NkN-jReYAPF?Tt-YbT$tdk_)sm7i z60BI>`S2a9B)-nlHr&c8P4?mSUPVKZ*k-$Q2JuX9v*JZrL=tM(Iini}_XDy&+x370;=NkPX27?rfg^m#@Ex6xHlz`nv#r z_ts2*90=W6wT!aZ-93i4Qqy?^3!ABtqL;V{2dbhtPppvP5ry_MfEaHKB@|vnv{3!< zA?qN^v>q?!Bu0GI-<=BQ_>7Ei1wW0z^s&$X^lA8!D_TNKRfF|gBD9~eORR1zS77<# zA!g2CbQILup(AtryUYo83blW^wWyuoyDRwH@8QF>dAU0cAMfC|dq2BdE{f}ZZ`qd& zwJ+^BEMq2d?RedO9b%1xUx$SB!tzIL6L*^Z(N}2tXRbA=SWnN~PmtLzVWeUzXu;JI z9Eg&wz~hE9N4RyyDs}B;7}Km{n7+{1Za`c3{s1&QHu#J+{-ip3L}C|*0(tv(>6z%@ zFA0#Xg+C+s7E;@{s^v?bz__YVQOYnkp#*zM;aM)@lZK*7953+mq zrBR;pSBFIM&d}d^R-PS~&yS3$TV6jiQX00a4d<6%wd6u}W{CDs48VPuW4=GaPuJg2 zi)y&tYv>jHWU)KhvUpT(|GD#fiQEH5ZH)>At_s(1D|viO*x(xe>-<(bRcs>n0_!D2 zj^U|dAZ9w%a@#?oaKH*R18puZvyz;T#aqjX=Rw2kQB`CsEUAnmy#!zWoNkz!?9CL( zM0z>{@esjG_KfCh8Pt9-sQvSuIc;x`@Ymm)Zq&0j-SofRz^9Yzp&8!w`rtY#4Gn*a zLeh2TPku;E>$}LysLOSmgOpvyxb@Ud1~5VD>>MQU2eZ+k2(m2hAR8hoOhAFpDkvnI`~UxhD+Cd>D`N~#!2#mz5hubRg-7L zm2*qvUt*J}KN<{%*ereDa$HY-=MuBFToTPUT5sG3pjkp0MOvUZg{nkn6^p6I^xh zht~$Perrni;Yi%}=4}4_Hp0^bQ(71eB8NkCE-0Yv?(AT$hW zxm(eETr0zvXa?6_eTA$oHP+19A_0ni){&R3t_S8{Q_po6f0Lg0yB)fvZQqEo$1j=s zFuaSzre?PSDKHV`73v?v%So@U%AX` z8P9FE-=_3!mU^vZy{)vNPjqHubr3-+xqzuHnycj|PvYFnv+m0RCd*TMay7-*uk2d$+5DliWnoUDV3pUl~j%xmlK7KBY>nu2I`%5XMI(gZpUc*n(1+eOap$&l{DFF#xv#^>9dxo>(S zaR2G8pGFlN?f5yUIJ*V0JB17;NVW$h!A3Q|zi`oIjZdh@&Kl=hC?5``FKO{nDgZ04 zN7x*_ElrDj9V`s;CDC5>+bus{>3ajvjE;IvH)^9Vs^Om(G(VGTo~1FyG?^h?YPvDp zUQ$yPxJ!l1=NnU2-e1Gt{a}9Hp5fCC{OOCq?)(w2ZTb>e$E%a&+E0BlES6bq2xK6? z+d7eqY`#%Yp*H8-nzrk7@jW0Z^B|f{tE{C8ut1+QHAbmM%B~pi!QwNt;qKzRPX2$~ z(je(=y&qRSB50e4$i@2NyZ)HQZt@6j-?%Kn_OcT;T$u6lk-<#mJwDKs-;aGEL!wsb zD0NuellSiA3P{3_H2tZak;tQ0!mu{I^Lfufs_yEh5`fz~(kM@OhS=BPzr)ch?@<`Y za0hMYV`8m0PH0=^w_v?HuUO`v4lEFS6-m!0(#m?+TJ6_^40U|F^VzgQ@q7Jz{q4@* zpL;Vc{_w^HAr0sE${x~Abd;X7H+LsT%3u++1dUx*ETo3ffL~c7W=dL{l8|q-k5Qsk z6q68{-BG*5>zO1y@aUxzZb^ri;D(^!;KR$-SdWriZ*lE7`qiE*0e^|mqGylPF^wgr zdHYu}0|ay59zA0Vtdg9{sQtsi`0{?bHUIqZ3jXd#gWA8`!Jlv8mwUsk4EG z?i~RAfZFeS%e5C~z%vEYn1;==X zZCNz}yKz)pk;T1Xtq3&z{sp4C_4!smTp1gKZ*#IYyt{_C*YMrZg;We<>0tHlolp#) zbfSc;uApG5p)fZZ@}?7nc}Z94h3%eYKVG*g-m9_{PvQ7Dk5Jmel;n4599iDq)P@NH zKI7oW6{Lx_xCq$@<#*gZVQCK%z2M@f3EW9=om4B~<0etL$9LzPWGg18IXRfVRZz(M zc55b>0k!|jAB_^`<_sUtMjmt5o5#HAjEVc3D+AU)pPcjKeGl`}+$UBrAmF1~>k3S% zu6=&CNOsfJj#65GvCZ-}qQs9mG;Tt}X=`!;fU}=6-@IbvV6KZkjar~x>F~q_Wy6V^ zTyx_Feqy|XDo-#OS)pBE0-*M)crW*T$+S^uU{%o#-7(x`QL;Cj;V;XrpD~6>JHrUp5&eom18Xa-&q{g@laPSmWnEqRsLSpriR(TI1qh8Nwz8bHF%^1|e>$Zxy z%PiHB$jHEV_L^}Frz-a3r6?Kd<-25SC;3JgT4;(FsS+_Q=vKmdd{Lr2wVO_pE@*}o z3Zhu}6`hl8HAZd7p27^3Jo!Thx3}=|#(b_H-@@PjWTGYRY+CAX)(&zgJ;Ob}`_9D0 z-JXqu``y{xf8qpkovhvU@}?-c1DLU}OF>mVtQ!|Q|JQ5Tifp#@gVF3`61pm3iEMqT z^LLh=Hjck>8&0i0F|OHgAN71WmH;<>;E}~)xTh5_M{Cz|m2?tlc2+%1qiWfOL!0Tk z_${;*7yM%_Dqcf-e@UBfGQ zTN`d&)xK+XctGz{oIuRtO#Cb5=yqo1*)p;_c*Dxhy(WL)U_#FxIIa}q%Ca_2^GqAd zU}~s0do`Zy^Vn zF-)skJL!u$T7+%CRWNyUklo{cRI$A^e8?cq;qUM8y|S`XCmid&X@Kui z+-FeA7QNQ^%u6Dr*C0+WhO<)7_5XB&Pj{|vzdIV<{hPg^?fdG{@L!5&W#!D>O>>10 zRqd^2COM3LnwMnx$lhidrV-qbKw^bfol)+}0;m|yY$-D>b6Z+Ip4S%^9ILij18d@= zU&!vWZ$zU-yxQ>ka@*_7K9UQ3u5n!OjUm_f;yN_^6hLYkF~%-UXLX?5pMSKQ#ecpr zrR4YD!N2^;be(>-X{lcZT#iPxH{AdIEA!}&xA2QiQ8f+ny%ouj+n8Q4i(?_C+|r(i zqf9w%4pCZg(i$g2&y%^UqV;&ra4)+XM@ah8$8f1{Ce4$@kB{tNgcS7da52>fp%?>~ zysD`I;%VI>@&bl38t`%=nVEb;NdYeYb{_s3hZa@b*+u0Hr3`WKjS0s@YZso%$lIt> z$eTrq%RzPV-MO{Y^`ZJVioLBqOVzz*2w^=X+w{!Vga3v5Q`J#qNFChAb7nHyMZ?nU z2vraWA1CuuYg_O*AK!p5DVtiEv)K+yHox4POKhlJSIT(He9L$Rt-1SfWPW}do21#? zyczrNdwZGjM;Ldw| zV2e)XJG)?#wo9XW{Al<2TPK zf)UId4`u=dzZ-sF(*@-`7}y{(V0TJSpZ2`Q_zFty;>H&LV%dfi7m4ww6>)VK?}5}S zW4p`y90#otqzlXCB}9oB9cl&@+2U6IlB_g}1=S>*mbK586?@z>{sq=Q+M7x{xv|X; z@}Hfmir3HVOyKhe<(1roUgS}VeVty1ba@5;!y7ng_~%ci^8V#J_}d>0EAZ=`$z2-I z`Kv4V`HgXp8Op)ulcD4d*Y1bc*}{KW`}K0VeUXXYM)Z%%wJ&uLxgij04lx<%F7`20 zWoP|z@Hc-^p_UvOTBr;eV-vlRPTz{T-aLhbf=;l^(SJ3L55H%|Pm6$8xo?|ILhw+T zf7JGthAm=uiUu+)j|r0WD4q$z7z?R61<5eqB8N3F@j-gdPgE9Xb2^eUuF)Rr`+id< z!nv!J#qJK@d)AygQ z2Af|zOWtb4Vy?>ZQ-dt8Y$;IwBBjylIN$$ZtxAuIVxQcCcno_KVNI(h@f%x^bt2)6 zFH9fiUDno?(S`F*Bd17@bnWm$w|5q`Yxu)E_#b~T##IAq|9A`c0Pn8h4{r@>AD;2) z1b?({GiQ&kw3W&bO{wT+EMms5oGmX{F7bJ$oV@<4`xve!;>y8i{kjKME@-aFU^!iDu%yGkNPJ+Mjoa_Fe>SIASt}5OGzZr`^70wui7O z56U-{0!7=zU@zm$7SGZ6JQy`PeLVS}x)}e#^xb;AFp}2iC^2Mw??#1k&7+|q)%miY zUGr=Br#i+^)y~_=^K;o`hTmFiw`SmXbRRx+%7y`{ViWD00)h+I>NKMVdUC0N(Tu(^ z0fUjb-`qJoI>7hW>V-aZ*!}t%etZ+To1=x`2XqYv19m^z`Bc|V2YQGf=dwmYCb1Gr zik_!fq|192OXpnP{Un-Q+PJVxL5--U6xx=%h&zKVtib)M<7D=c&>zDQ7t3&TViCsr z*Du4cWuc_U(Yf>$u{+`z2>FV}J6TgAj)F`X<%=b0*C^ab4K7UkZcNLMOXElz45Hw_ zem0w%e|Qi7{rBc?zug&Wd)L8VzJcGrHT7b6+NXQ?r_b>D)|HiB`<~R4?bpkXONop- z+~gz!f~3m@xZVw_)xXtZ$1_$K%Y52}SO@1#z1g^-^xMrTTjNrhDx$+x-(?4}1UT}^ z8E;eU2cSZQva!-h&$}$PaFBu{NfcKho0UoqqI>8Ny&6f)Rey))N9R^~nw$?MLb(zoBd zT1H~`SJ%ecA@J@8JJTJlOoeR4JChG)f{8d!YA^*#T!talF4)K@oS3j|cPU0igfYdvhE= zTBDfnUcnEq%`WEv+3x{s}v_XYjv7UpJb>~9+Nzke>Lz~Ht_c4}M%X|;1m|GY z^Y&p*ea?Bh+NoU3<<>c~cIO#?u=z@?oM8cv4NlT$C$J%(uIgG)EE;q6l%2D-M6b7@ z(9)`s=BA*TS#-dmcC}7k`&eT%Duih9nyLX7sl2$*usj3$yi!K#{-!fOHN8Zpo7+tf zZ(f;$_RFoMsBF;by|%#JTF{)y4YmVT2we&bZ>pRxs1YbmVkn5G*8&!K`GoW8B%hi2`s!fd~`^(%YDEeO?&kftfz12UE zjR$!oi201pbB3+lCLZiuS<*tug^WsaxCi(bA575F{RwVP z=JNjWJNWUH`Q^^q#r$>;zucG(8`iRummr_nu9&vAqGqI{UKSuYh9O1<(_AaY5v~08 z5kI9mC66g}?PJfhA_`fdi#`}Ff$Vw%3>}9i5}Ic(t2TIqWt9|X^bBpGqOrkGWBXw+ zYTmaLwG&;u{FS>dxUusg)Nvhux)NzIG%7LXl(%T~U7qfrofprbXWVTACHYQPVr+eM z4MUO|SDjBt<&|Xb{^S%d%308mT{9rKe}Wgp^ShAO(DTAT_wJK$@Dp$*)WN;DTbby& zS18O2W10!MDwf;nQ*`70cu6X^48A>?+2QrUs4kDzx%}=$EhBjMcdyM+`t8>8XSP?h zw@Kut`OIr(0(QqLPV&8~SOgSS9BI)txyC3~jEyn%vx&~)9U2Cps|)Wq&R&hbcjuw2 zpJWa@UY%=7i<|1ArK)j%fa<*)extfJX=F0WuzS@rt-5#d0LNrJG=tJ6Zk)lSG(n&s zCDC4(=M=I7CJS$7qTsu0!?J&2dCWWb{Tow6I2+>Edt)qfIvd7b3o4WeeAp(Ckmi(o zx=^(*MfAO%bJXqB?iQn+2KvmK!bqIJs=Y#5a@>|$?u1|Tju(vBPt4lpHdg9vzf$hd z?OXk+#!Y71&9sVfhnmUENcQSQYaABdmpeNGVY-y}L_0vVpp6+ukjQMpBe9D|iOnBb z)51IfJH{lk^}vmZ9#bAI4CooYvtWRYgRIK|B7_t?v=&rrM7 zXLeZbsvY3tohi6)ui&q~GpQL|IBt7$KYM%K_wKcr)pw{}?^ce(XXDe8X%nlbQPW2q8Cl)ps;B|?LA@NyCMj_>vX`}p;49m zP9?iHf_HLcuXnA5v11=WPc(A`*X_!_>@K;QJez)Yv9G!p*JC(+z5BrE<;go@m(oCX zgdB;V%0EC;MeI~&EO-!C5agHhjIrVsTI53{w&GkX=)<(T0$$;1^ZTMMw!ZjCk5LlvJh| zNF1?ONK?z!fcB17l}ZvdbqZ*7W#}ft+IH$pcddO-4G1ciE_3vtY-958=Y-~78xwxf zR+5gP$+Z*xse;srjilNka^*EME|SR$bvo||=@7gp(ak;Rds4|M;CY>33@ahF)jAIx zTVzd-QBcctesw|X4$0VqB*Md0Beq;Uj%X3N$Cvw457w&u+KSy@NcR%EfBza@9bD)v zJKuL!S=4#nog>LLP1uM{W;3aPifV1I(vU9y3$J@sLP8?U<>0dziqg*IQAH6gk{wp< zEU{Rz)WJi;7A$K*4OnFtz}i|!te7raj`%GHo&?PotXXCKgH0p+OXGDlo*8W0RE?kS zoKify;IePbS-YN8HbRhY@g!rF-2)W-?hX9y2Y7pM4;oPW$9sd?znskPy?+7|)puv3 zoY`I49@ZR*7=Jm8pvG|tWYSE{cT2;N<$!dk5SW!19Y?Vd6|1<6w7BS|Di+@;)9dRR zn&06_rpM0d*D1O9gVLSOo?`F(_0s!l*m*&@Fs_N|)7mM~UDTz;@r==X;Rp%B;-O+wI0GQh~Y&=SG zsOZ954QJMlVhrFV?PA8i4ixS7*tm#rN7Xw;{@clBlyi`jBfxceTKF!F;X{k6Ys>56 zKUqJct)+~k&(EHc*ADlyN2If$!Nhr8;(n6u?CAPX4GkYsrIbit^7}8?Exzt>yac6W z9tx+j=F4J2oiM>P(<4%)7uW5{Xe@_2Utbw}nK$Z1DpQ$djFuhX=kMU^;EH@_7db4R zQJCo6d#DEqAx2Y+s#_WsRERDyT%gh^B`ktz2G>Iy&P15>fT?-XxDw}ONk%g>n7-l) zu$APRgFi|m8b)%LYC02uI;*{Ih0}7SoD9IqPEclyGx_fFiB(_A^1zNXp4Y1 zRkYpkQx7`DIxUhtT3feA?I%&Q2a8QIG&D!W+T1}5Z2NqIU+xUu&boHZ5>I;s?@xwq z-;Ua=H9RabXv3jzO-n9M0p}9=ILa!y9yLr>%o|zQ$yJ1=i52s9mI5~f1GOAQ_NuWY zhA6*y@6}3xn;?PAwT_Ca!hSBg}l_fv^|$X*Q% zphk2~F@BYK@gy&a>GM-;Hf6BRoJSzz!$BS%7O2W-oaeDJc~2W>aRVY{DcC`t#bRT| z0l+0K1Y3py)!MDHdRu+u@cS@R+*|3IikHNs(S3WsR)T~&hY0uBTpP&^#1H1yRjp*`kCRcz1}(* zW22f#{IudVM|Od6dFTwygRpADDsU;T#YR8-%(cVJEqGk3Jdp`}JM!*S8@1W%YZ0ZS zi_Gu^71{5`%=gIO>)T~etR)lAYC4YkPL(m^7o{r*5@lC5im0IKFL4~P^KY+Q*&`pM z>Kc7QU{esuur@}=?o!^b1my(l9O1<99enN*^B+u~(>eA}5BGFkoMj`~*89Fyj5alq zvk#;tEx)V@Gr6UR5hfGv(3Q2UpY`Q=JQ7Ww5?z1`b}hd;b`hW8G; zql64b94VH^y;Qc z)9z0ldkRi$H9#Q|$r^bn?a-r97OzEVkFecUU5ZSLTe{GioNh+GLK#DQ3EHPh`*MyF zb>=@a5zsO!8EMSe9=ssDCr>+C$gccanq6h8Twa3!w@**?m;?`N4KU0N7Ax+cf=u%F5DF8Cz9FKAk*H!!-q z2X{#5ypN=I+87p~b6+Vz60yu0_tJ^Ax(H!wnnb;-V;n5MBOdZzTP#;Ry8v-X(ap$g zMx0KrP~w;7lwuF>&Are4u`hdtFa4>_1AC(l@BaID2D|rmo;8gD2Q#l9JQj~0k<^aR zqR1$<^zJB5v@QlQ;ux|gc9_A0gAb`_+Cz|TMmd_4IOF49=}EQ8xYUPc?3R}Yr2MC( zz)J~A$#%Cu`FIR1;uvnLiiKKVd}Qh=rT?w3aM7D$Cqwk6?CCWUGEM9IS1Gt=Eg6l@ zZKea26BU#b#$+77R@0E(N17-{ko;;DGMtAROk=ctGY-@+jM3&fo@z)=GO4R^FxGk{ z3Dyv(lSn!|ZVTf+Lh7Ty<<18qCAJq?%FH~txB<17Xoec!5tqn>=6vQ3lO@MGBf><4 z2T9-RCAjJ`MRjFs2Ro>*l|Q5ne$%n;DeJ~|ETXbP5Ah; z_ia>SkZ1#{xQ4oteLFT4j)}43g{M=0A8Pt<#^Ici0w4DSc zTM(x9g(Np1dqow=uY>HEG#)Acj@tjOX0+E=sn&ArJz4^O4xc@TjmEaYaT8=y5~NjX z(5s)Pnps;}o6R%VA9<-cdF@r{zg#r#GV_)!7^c@k^c(bjP$k5|+U!Ltr)*l%cAlnt zf69~+Nvj1mo}A{K0UB64$N{zgc5mb{XG^hz6?6{w-}er+lisHn6N`h$$4+ffDr1AQ zl;eKgCvVBz6)u}Q$6vPIs!Pej2C?baJ9%wvN8YsdELZo|xBE^ygeC$?h+-%SZMf`F zgcws{*R|t39S%jv%B0b8l2H_oc{0n$-74C<_-EIi##X7@ok*W>VA>1N$(zyy=OW$v zmLMV9S6xh3b)Y;XP*U=A^ZqA?)Uk`iKY%0nQK}ld1$BewHJesQviXyQA8aF)8Eb8+ z!G`(E*&Kco!(=UVuGLF>>IC^WVE0}b&CEgBIhT3&&dO%U^{Ni2{j8@AB3rC{a^f)B zl`It$hA;Hs%1lzSn!yrgAD$xLZNjwS_*e zI@vU3$+ud~jm5i+Pt^)tvWccVscX*l)Q> zuQ)lFTFFZPP{2K5N9hVm?F^>O8~CwpBCC2|=%#CM7Y+<$hWix-0ukHvrlH#-lP&7rU(D}hKcXo_A7=LL9s2+FIey422GKyJXAey zwQF{S%b>=K8)F%5Q2VuA+Z?S6LjU3}GkR)ndU$R1?*H|pQK&L@AJ&R@y>q+L)5~vW}~XiKuK27Y@=z!izz(P{({`J zfDQZrF?dHqWiLym%q)$7C;JL9z{mgmqD?ip8un%&{{ z^NxWL7p^;tx^>6#G(ghgeF>n9sSJCB1f7hv|GGDw?$YR*eS0aIqN(G*{cAZbVCUan zMfgrS`6$@s`^!vnaEmH~b*A1?IMt{_WaZ^p4=)~H4I?Fwym_#UpW;=Fe3%s}ou$TOSa!6S02n1cwW zs4fB_9aofjZ86bEQ%gxN6ef%mCjUvT7^N4cgfGFrEV>xWZkh5pOuA2k+-h#U(bpQu zsS<|9^)s~pbtGr-nE&Css~sSwX^zh+-MwtA1=$f3GqKVsuEbHzwkC{Of&BTjZ6LWJ z_>*;g{CpY!k20uTYxmMaEx2cqj79Uk7g+BllF6q5+|=T!rt(dT7n#^(Eq5fMsiejG7Rr{d(yX(7N8ue6 z+sbN&$5t8A@pv%D2p>$Nd~I1ecl%m>dc>t;deB7mG0`cjR?&9dXHADoUWbe)5RW{& z-cx=x_g>Os5A6f=+%HK@m^3TCpt4UrMcB`e5FX!_Jf974M|7?-XZ>OU1K-%S-*Q#59fFh`o(?NhMq zNe?&1MO0?ns?z2Yn!&`ytR*g_03Un!M9;en;KT9>L`rFybf zca$RJF-cUkXCWqEWCfcNE}rckmsnHCWJl(Src0KpF)Z$H*)-wi1H0@>Lm_0B?0b-} zXs>$#7oN&kKlrS(VBP)HP6?Ag5~Ec-_~ukMqJpiv5-v9jFWmVnYQ!doqTB1kY^%K` zp26Y*k2T*S^&2bkA8_I84*qoe0^Ao|Q1>?H==bm7pFSCb=HcLW1Ws(^skF2AEIQ(} zp@J^t7TH`(V&5`E)2mdvu5fDjS%gkrE*yrvDr(>)Loq^8KUzedB^Hf%#Z(0_FlB-+ zJ$XvmO!)yG!}?^7mHYP9n(|8NSdOytq;gt@wP({{rWUA#H4ReBfdgws+f-d>iA~xb z&Eov_47b`T*gKo>a8&TB8~!^uDtAEbL!BKSXW~)MuKh*tq>w4`Q;>fktlUCvVX_!F zyb2JE1kuYwTrPIEtP^H(%qpv=^WTM%UY1420aAl$oF~n19a5}$s;p=kAo02hdLXxr zDc?iDZ5iw)B9dElYRqt3ng#)e@EsBKh>X)U_F4bnkipXA>3wBp+ zZs4{x$vA|?LIl71NLJbX5>>1#Mo7EG29;kN+M7kut)KRXJD02KSYYvyO^?=Q4qgts z=OxqqbVf1W(lMCKa5HQ8#R=lWW{z)frLYC0{ZoAO5(F!EEfnyZ3+ZA**d^;X$^yK zr?{xkOyQ*6lV7V6zVrA8dYi#K@McDt!djGe4R4V3` zmeaZP=!IQ-?JqlH)vo&LREiBbR>_N01y_6CRNTN}NlXy5I6}Qkeo16DD%!DQSPY>5 ztMrXoZ6DkC`g71p=3i00y2qy(*;)frlK1S|xjh?9$rH~J;g;O1z1-%X^pn-R{_Y(d zKEtoK=FWrN$vOKZ0b?csHnz!P_Z51iEKy5_c7>Ugf*6bh)+uk-!q1FwHO_;1SNmO$jdhYYcs(jI)QRBcngl7d+Koq$d032DQ$b%oS6`+ zlWcDxTWr(lg{<1^f$htu$~V#VBhOv|#>`R0?A7QaiE*Sw;rluA_mPg?=@YMWXhmGW zN)oMs3-Z;J=QZvuaOWVQtImkBJ0C>ya+`l(ha>i>hYxSfKL+e>!oR>|tZHi(X+jdg zdBJhx-C;^?f^G1DDetZ+A|yVq;fXZST1xe<8FZa*|(@)AmF`}iTB?31J?@N zDdyU<sT~gVhTx;=MZsUvy5UEqV|zbySYIMZDJTlWz#So$vMwNW#z4AQtdc(^70rh zmVY{CFvXcna`1BPtGs50R+ga2A++y|IV<(B(b53vy25PXk|T+)jzD+T9_8h>3cG(k z!}~XeW&h=i8D`9^cNn*Sd!D=P2t3Rnbb!X@)4+e_T~(s8@curHj!EYc$)jV){W_rilSKrD&&o(iZMV-tFgiRn(qV|CD3GxYS z`-#XWR&wtWxYyx>_h^Oez0;*D`-jd7*%`8%;0w&>SwW5*tghXLRC9~!4oOR+Xe_zH z_a3YPtg41>g_NKyTf|Sh`4D)mffZ6*l{ev>G#q!hf5-?PmqL1 zB*flaTE4U^>67gZqjS!F)jw;|DJvEKRirvj!H(QtB6Y0cdo0!xSQ}B;aC2JSV!pMy zsI;F|V3&$iUAEn%%94$H8cTVd$r*Q&upgPBaYoZ>c=2IQxj%tA8o2qoyTBsjTf*+c zksGl4+iUatFE{4cDoYUd7OeMv^qttW)cU?pHhRXwQr(WjoGoUy$Vp$6pK50eOY|AT z#Cc>?2L=;+fHW4X*>XVN3z4tJnq@>N6#H6L3!3r+KPt^kHWgl?<&=sc1mw7O^kOZU z0=7T`fcb9r_$*95Mq0NO{M6`6)H;z&p1|3~^g0UY4^~WQ>|zc!a}DFPqtabl<@C}A z(~a8OGzZ!?%|LCHQ#u|}dluiwNCn@O0NKeKsw^#$GzBOV^FdmfpGt*^#rT(1+mG00 z_)axTkfjR%tj+fuu{)c|Xo_pxAjiTCfZ+}`1=i}$XPT(Q7x!Zk*ACrFf908L(~yf9|Hd*9fV|_Dr!IH7v?Ds-h$3UhfmTuNXZL@3c#xMbQbs!npxbD(qU(wBV zP*P+bh5T;%Omi@kz>14_SdT(xjjPULZ z|MVXI_JY}zp>4CSvsrQM}8a3@$_!L$>f z)$XZS%T+^({q-(U09z|;Q&Z+n@jAB@D^NGf2$`m6z+h;zh=j!bMwhJEIn!LUL-jBT zwy7iXkUEDW;Ou2q>>ETnMGO^5mW~=KDUQS(nK6sta|oW-n@C2Dh_Pi2=ocRiW}4;% zeCLU1lUWC$$h^CdEADoJ%c*O=m1rhn_7vbf&tVkCVejA zRd*~cQWSFvD9l>iW^@t!iA?88fU3PxLvx~|c&&<*Gx|#}WbN2TjTVHX*dKKI>Dh7H zweK=%=tiX@wCdfZublK0OzRDXdzeMsfYckrR&FQfO?D7Vd+|$pTPHKS(aOD-%OeMu zk=aPElmBiTav+kPbD^ah|$KeV5VM0vscQ12|~y+#7Y7Nc6azi^Jl}Yg}d?glq1bEpk^Wd zEF!-tWG~my#i|@XX90GBh?H@Q!AP{;2SoRj6K(Wv8radct%1l)Juxoq!W zOP3R{x`+={oS`|QT~TnS1|mgCf{YkZu&}{mr4u?z3KqPG3%hd37k2w@7Zo=>*7la| zske=r9D1F%W2eX+a)s`KVi3RdW=d#HD}2V^YwB!QeZsoZron$hJ-0YFeQO*RGEkn2 zi1=Z#@~N+>$w~o{SKd4?FmojwR=oKp6ALtBG_77jld?w{roAS&>E1p8eD|nU`d>cS zyE+J~5O;Nf)qXuW@5tFP!c&uz2W?CnC0mT36j(O4$O|f+IQr18Y^aE zR+C`aw)tZZtG&o({uY=%k>JBEOC}|=w{&KA!p-tL*uy@pb-F5fhsRZQDswaRL=|Jg zW1ny+%{D$Md&db{u`V37e}C!5jqK zYX-6PAd{S%zANLiSpwgeyFO}>o zC=l(7YMv}uN$ZA^HKw_y_6C?KnG~r_Dqlza0=RBWpZXORtqgqu_}e6#a-k;ZjUYSu zi->8hp`+QXIb<1YLCC&Z1VQCVlDL?hLY{`%n0f(~csjZfA@nG_H~K)~)VXz{O6Vau z&5FZdS@uv@RYw9oJ6uHqXLx@PKi%E9A_i9OHEgK4lVqy-!GI3P76(S?3QarMBnGOv zO5}wk7NILzzMMxPsr#a(y9$j&na=ZXWS6cR_*6-3-Qqh5b9109u?y3S1FPvfyS91d z9GdMj+`8+sOMKgouiB+^Y9^Aiy;L?0YLfR9-BGB6S;=>(=j!yql;W^Vo?i-jbe-n|EfiR7xx4WOuy5{S%a>olu}@r-XbBKmK~k%6I!OjRzddZC4;hm z{pkUIxPx!bYK%|!^Xa-PaPJvHUeL0RO5}F*(QRR{Dfrw`RO^1rwdA!+y?4!aCOEH4 zUn7b63cA`br+8tj#TdC!AT*PD^IMA9)J!Ew++O|DPly9rmYqk~vy3}YHCkP#GR)b9 z*}!8*;rn)e1u}xaR%C6~#<5mG1DB)WH-glAuA;WHlt;E0n|O8tmxd&_M=gU`Et1f< z7SEn|#{H!6;-?W#=R+rRlXf8`Mfky`tB%sbf(a#D!6qA!%W6G|`E=E^KneyX-fW-^ zXniwyk@7Hw%3$%mon%pHt?!Bbk4``Ml|i8JP@8qTZC#2E`yt zE~rx43c>zu!r41Y2)U=ee3F6eC*de|54%Nr8ba$~48Lxz*K^Hl{x|D0W;}wI*k0A%^~Y;WKn*GDbj#Zao{=F0fqEVUldu z)rGE#1%`@nifEs>YsV)+g5MC>O)O9-{g!r={XfAE71Lz1zV_Zt0CB0~wlS z-1Xde^}t21}v{F<67dNsng59(I`{ez8~24V3~!0t*qqiA?zbI}8FLg(}n zc1M4N>Wvt`XJ7&?Duei>ngp;)lZ0$?^J{&_8PbhMEMo5w5+!Qk^$aa>^?5;lL*+%B z|Nd$Vf%pByAtv51TG9lT6;lX>o=|)z?*_%Z;U0)Z84X&MT2VU9zG$V{#aSxdYgBzk zOR@W9NRAAT#lz|}SadOcaDV_6q)zyetlk*vU_c4kAK-_x@}g1YkfoYPO(_1L%B-ID zf0j5`UPE00o2+xO{39p(aG!6K)nOlt5j=GrEP*P{TG zc2HR)72S$U)QWE@5?Vcps_C@I4Bh)#_FBB29B8%k4{or?EYc7?K1EBkwS%chl);yx?g|G$f*{JRKi z6TnQSAk?SF>u8x2wdCmKhDP=K2!~+ihV4mLSN+R-`0Yvk8>LmY;9x^3(!T5lZCtgb z-GEUld1IF2X+nsB2q$F5c`l#TW}Ru1O3x(|>(fZ(;y986T>WuHSdvvs`yhdq&q%j} z??pUaOtDM0yAuST6mZ>(_uO=K=uVGpmNPa{3o`XDEs1=Rr`EV$G3SYxmpHBN-^#$g z85aDaNe9rh`omy_F@pzh|gJ`(z4yOlU&OFj@L}D3lL4O(DZRyuFRD`9F zrVuk^Q@?jj1?clV*xZw6Z(8uz&+H(v;xhClf;_C;oZLeqmxN(QE!!2mHDACMEv2>a zgX*Kqtd|#UlxCKLyTJ}OWh^ru==!#O??u8D;r*jp@_+uI9P5NZ$(qT#I;r}EP6p>_ zAuu&6%T3;Gf3t&rk68C-~!e8oZ}l%^HnPY_?FvLUlDl6u1EMq9P2@e{tC3 zW_?Z>YJ2;ICCc(y(1UaM7+G3_FG;;|X30VPx|8Q=sY|gtR=D_KRNQxFJ!w#l` zpCv}00(PT_artgTapM(VUH%BrVmN3nM4^QTTyYMsfY;kHp?p=V5m*!p`Wv^dABBrK zVpUcUe`7H&WYeMo?h{75(>ulIL2EO{!&v5(+O*Do998M7KYs^5{{c@gmb5ki{o?S7 z)G*o*=fZJ7iFT3N1arKZGeVj-iP$OvLZzi5-GlOb%l@5%o^J=&U&+}nHPPgu(VAUy z5Q8Qew5ce#(m%!%2B9ofTv}EVSyUD}TNAYx9S$&_vWWe!?~{!c(@SEEql?f+F=vn0 zv9KL#%-8+$8Z2UvX>Q$VjLF=Ns?$CU@VyqYe{)jmmkF;=(EK8;FXY)(TAiAv*x^4v zD%soVq~3oXULCj-1yn?<4wzDjJO*mIFRcc7SpTyv0gDTu)oeee4#5nOon8@xr{T(L zq!jaQ_bs8dnvr;s!q6EOJTG62F4b1b9AW)C}M{@%)%;cc?opRRLGFJq*hFr zb69yrUYVhzh7{1S?9*i$qx6g3eKO`tgYkAWc8w(!1E<(S?IaPhM0n_8MicmAt0vXt zq`YFje}MNV`EcF%Btj}yed-bUj-|IE6L z?ebMkGG8igMU)&6aqF^;bAPtNlGrdFR#{JWvZ{Gzbj_bZGGN+2hSSvb<(IQA;}+^L z1vgh_&A&ykI#zzm!W$z9Y$;NDoFc6?4F;;7mRIS5y6yTR91pQcSpk7z1o!u1<+1M0 z%gd&Eez*AhTW&N5&1=b~Fqf6f6+}zJHfS=Voi&)eW{l4#Q7(J;b04KuWth}1bC44r z0{2&K6F`3k`0gD%p5gBw;nT&%QF?dL*xM<#Pw(|#b@w|Vh>}ThRGP4&yBn~8pOQM4 zmKgzi4i@4|*M%zmBZ$f{HAduPGR)z|@Ouo-BwsfQua;0{MnJ%v3KM@n`;4#)452e{ zBzE=3zj`Wbtn2OY+b>#jx%>ci#ii?n1n=}} zGpGe`I)_v9fJeJUlTJ4Cr|;mmkBWNtTi+8nFy`)~e%nbC+tVv22V$rahf|Xxg}81P zmI~EbdkODIgQ@3CyK^F?p5GDRbE8N&q7A-YA5vsy(7EfK&_NiLoKI3ZvIC4QA~L)U zAob}2+Iz4V6C8YTkQsDU*&`LT#|ul-UuU=YI?1fKE2QF;pZ^dOr>XxUdc;MU{Y_Zc8A;;@l| z-Qur8ajNU~muFd0X)lYp12g@Yp< zy!&f+P9vN7@f&!&ga7;;E?29Ou-IKc&8yVnTC@@ZGY=;Pr+vKLFegQqXei_8u`nY+ zq>?0O6(4NVusp1&V|yCiLSn*5&o`5dGFkD>Q}X71N+>x(y8R0CyKu%q5POOXv675S zQa_>e2ry&203ydf#F=R`=~|6=Kr)W34cS#;BW;8#nMlDid9K1#)-PhkDmXZY}<(D^hHzkN`4uA@++ z_35PuflgUh-vHFGPuc9Z%%G1Qk8ClZD-ConO+_)C1}X~db?|gGY9V(Ud3D&3u$ygd zV>i^>K6z24n*Hiqw95^Tj!dksTjr|i)3Z{g!P=|f7O30%WC0gqb@Qi))Nfs|DdCTy zV~>r#aMVtvv{ae{^s=-u#SbMn&uq0K>NGofQZMh&c$0BKHt#p}1*g@BG<>`qQ2KL# zKSRAw$l$;Kpp4#sd$yhMtX03#iDwLUAKhN=;CYQoM{Vr72(Z<-YEfdec}{^aHb&rB zk#1sTtR?-JFql}NBUXtb^BL?|_>B1bb&!2tYl%E}DWWU4zW8X*FbG$Mee%JI8-s0* zwMZBN6*!vWrlQE0Qywr#wxmL%3>;Yt7vmD+&&|MPt6z6s>|C^Cp}C>8g^hLu2EUC0 zZ_Cm`?zBkVQ0({G5QcxXr|qYK_GwgL{pXJguU|*?Est9JPJ^oV^y{dCYN+1xQw7s3 zf99g;4a}dGU~aFXBM9U4&SzQCXGmY%r+nkA4P0$WmfkKGQ%a-%QRaSvu)MS?W|f$V z6y2ikgq7?l+&nXei5pWZ3`r?@fUDd#F-A@syGKIPMyn>J+-loM_}2C^Sb=vnG0cXn ziZ=v_as-2=u(Pd!LALEnYn^0@AzUrEs!n?ByKNH49QBY>9-wRfkz2IR!np(rINE1y zPdY{TPw(NIdu0~+>7q5edi!3fZ*|0lj>52x!+!8GUV|sWL!El}aGB!VR?6lm#B5IB zC0AVqR(}Frn~+@c?ld#rLLQ|Ab!U( z7%n&6(-X@`$zZpn6eG%*;PZd5m{p`hgGwdLnsi|J1$Cw%7|(KNBWAn`1}4*|kr|B( zo$#8W@M07mLIp~(mRVd(?(E={JfLOhsLi|q!;#S|h-9oLVb?{&0t`{yvRGEWnq}ER zhZu%f)ucqAA$XKU(VPj4Wv3=yS3litv}A#Un%>w^0CS2%hSWWRXK)`&r{O#ESr?Ui z)MWX)lg8^{b4<~x;ipr29u-WVAp5UR8n5fqn?Csc8Sd^>UwW4C`_%#Cu19dX$&Ao7 zHP5|+J5u!^4~j)Kd*KzTq%$Yrj5eF819OvDahBfrFL4gRRTwU@hFtd9lKU_1RPl62 zY!{I|P`G10-?u*=;}|;kh1|tqvoqFu&00(Iv}*~S-w3){3k9JTS{&3*{y1*o8eI2<91!p*}X@;kfO{}6iEaR`Ylq$0*w+CU~%~| zluX5yt$6I){|~FD`L77pD@xETtyQIhcl@ih)t^<)I3#MOS>Z@`vrAyh7-^tS6y>D( zcbc_ZI0)hO{UmIKsbuXSh{{{q+rETf=d+E-W~crc1+kav#mttVXzA@)l zk?yF**wjl>ktx?hEhIy=HpJ;BtOb9BMD*c9q_P}c{A{Rda|EL z@rD2V9ejL-|Nl3wlbO(oHd0izX*2Jc2i7UWAZwt??K6A_#pmK4=p zkowF_#{mkiscaSIEGjv#cW=%#{A&~2pU+hl73$Vq6z3Sxtyy-*ud6W0fpza4;kiH> z-8$+jchb1&oZ5Em++PJDU4*DPy}S;rrM{pMoW8OBo*XcN<4{Hl&V%Oajv7pF4ZdHb z`gebZzy1Wjep3I`>^In=_akb`&?!j_$2nkNZS9KV;5#xub-No(<(Yh7IYly)txIp- z$E;C;MUt1lmp~Afcs*D&xTs`NAPQfAUZw&Tj8aUU&`|D*TcTXTto|;yx5A7yOT1!o3~682u8zUenK`NR+NB0ePu;@=oL&+GaedPo zvpKjERsug%&M=R6$|z<6?hk`9$Qpz_<|vgI=JzLSzW)1F;q~bxAGGTI-C0>Wj=E6s z$Ixo7B}Ecfq2$G!tb z&U(IhWU)hfrU|qCPd}ZeOT3rM&w-#syW1s&FA?yI<^nVM>>FL@XI|WyFN!X@QcL+e zm!x%J-Hkvn5W_Q=i}tu)bzFe#rbd`6pTs5gL!5OQ7&sZ})=!~ zZNIV%F;`8F6i>8BXuNwNa= zJNK{CO$NW%7F%F;|#>e#U=`=rmh9nw$`@By^E|IpE2`bJLRk zbm5#Hz&hINJmxy>O@P-_z3&*iAM_^XQz43@<%Px?0E;Td?b{V@#qbF$5{O)IpM;vC zZNYRSwT!TAy4{f{*VUO4#_nH_j;^~pGT!uOm&Up=-loj&p`l;zp|LlD+oFj(mTd1D z6AQqmDyNddv}01Zj+&`&zg>0C-~Ao@^+)*SqgKwyXk8v%z&rsaiI%V!Dc(h=m{;5UXE9)mM(Qj6hu#^;?~3dK#=s`B~ar{F_Qc_W|x$TAy%^ zP7cp33nG^xIVwb=H}b!0UmfB~N5~$t=bl+(mW%aTBoYGw{iJA|F_UMgR$HCiuW2o7$YIcoO%5akPTA_HmDa_kVxI8e@ zjwR9*_cpF=hHf9-G~p7zNDqbp*>OGH&WZMXgD4k|VTJid==DnPAG}bnEJO7dlRpg@ z$=qiX%_D~#r*SvZcA-7ONh7Kej`nsNX}k9`!k^#650CJ-5Aes6OX$MDn_e~1?vxDCrG@+Aa-420DLm28WLW#Y?MPBKp z|0%}gP+2QeUoTuRxnb!6`HLZn9|TotJIIK3it)N6YiGnsdSogWfx&fgz)&E`8*H-qBW?*>aQOo8jC3;cRf%=$l`;2$pvzN_-jLUHgD#J@j* z&^e;dBYdRLhw(MMZdU>Kyeelt;HlnSiX)_RIl-9zNetBZPTY<}JCsD*MPi9pxnBoK z+xV$#ou(?GMP5a-q_|RId5)`eM^w_LLz9|a7d|Zo@qsGFNXxtQA?D#L;%*guMM>t4 z7)Xv?LT-#fb`Sf48G+GA4v`hx#Eo|+crr*elgg_j*RL$`OP|ef))v1MUNnLk^~)(- zy!zmh+69qXyF#(2U*t z1X<1l{LA<7bgybX{&9&TcCx~ELw_3gaU(<)7$ZDZ@H?7Agv02i?kE_@1AAso(>0t-Y}>Z&iEZ1qZQItwb~3ST+x8i2qA$;NfA9VUz3b>+wQ5!O zse&D`!c$prx+zV-id$cu?hHDRSTA~jC<$h5E$G+2GR4Jm(P zJyyT6BoQOXBU5=!D{G=+#!`VOJ-{E>c(1`Ui^wb&g6`aK(I5nZIvI(Glm|;w##T}@2X_Fo4em* zUIH(-z4OO7QNK92Qi%b{so%FMOLlp@T}-!cro2aho9>@z^WWF?zeK}_x!S;Pshu3! zK0lY4IDckW>Qvz=y0=aGAl-fzrn0!d+}6F^#>-b~El#pIsit!~u{(hUk5AFZdYw6z zmP+c9O=a*jTl%*Y0`G9~yOW0wiO+a%MMjvwr7C-a3ne>+Wylw-;pQH2Ieb}`jNrc%mi=T$>{7;Cm!7n(OaBs~ED#FJtj zIxR|;Tx0bWRrggt3}o*5HfzMX_I;Pdb2H*Po}MAsNDgT@EPL<;r7>#;sFwT9Rj=0q zvA}*a7^fXIna`%GLOdrf*BU3FaVnlvK*}i)g*Iv6CWlFnMCtQKeq?CYG@%&k{uhIDg3HG0AzRGBlSSD!b@t%zx&oc@&FHY{jnEM%Wl z94+@c2tCd_vGCiPv%K_c#ycCv>6@q)hDH1wx4}c8VD0#0W4RA>pG{Moj@iH%;rp4? zLl8|$G;AA;cmvK;`>oj39y1i!WXKE&V$*(+DP4Sr%)-mhXwZMhKLAywg8A7RO}y&w zt(KZZ?`3~moUGj2tuB?(nY<0rW-*;{<=>bO)^^(E8n^uK6BMO2mztLSd=T}@W2HtZ zgDAV3m8E{pz@+61vq`~KT7^Qhh221}(r?R19GEshNOH#Yg;BlTkWUkW`}fYpC=H`Y zqEIR1y?*=JDBfi9RmYgQm`g)Qye+BV{gXVPHC~XZPI-%3^Anfv9=;&GiTd`0(Zb;X zbK;LibnyJ$Xi@TLpB?!H6fnc3eE<$-6=}3}5ru;HlCjk#`5|tATjHC^yUGZew^-Ra z&qg}LE);((bk_G{P1p?q+T(sPjwLh;r&VX_ws(L5`}=DLRw5V*x{~5srp7eI14OY` ziG!WUq5r4|+eM~ejwHOMh}G?*rrmWCt=RA&5x~Y%CwaT9Ul>3+%)UiweEc>l+eeP~ z!RY>aVdODx5GnArH=zhuyP1=7cR-jU*h%FCYC5q-d59((S4qDxI9{45CqU4`2+peU z?Gfs~8uYZQw-=mNlbvTd_R3>RXslLE1^Q_llPkG9_nTLhfWZ!T$5(Vdd9O}9aiM%7 zGbUMEMw{=F-3>-@qZN!M=TfOp9pvDQ72FmvGlaNpzoQ;Ny5^tk4$Lh%z+)a3z;#=_ z*yen)a|*CgEIh=W+UO}*O4jM&RvDB6e}>;BriX^v#!ZeVyjo@mEY?5(M4(C zg+MRm_VWb;e0ToMHk(+MetIe4vhWBy9Jc>GiF*fj$Av_b+3Q8Th&HyR%gd}<%1%{t zDN4k2o@Sf>ju!|W|J53GioM})(Ppn~y7W`Ii4r{8I-R@LVd)4k{*c?IN}&$X&N7Gd zDdk}8*w}9$z4`G@4(xin58N8v4i+_z$_xv&dGTZmcMtL-zQ8AUip%z|nKjPBM(dAH ztS@0|;25J7hKbE3lW_!c9Mx}>EH!nuF_)G-bs3gz*sY2rRmu913|zy~=rTS8+x(F@ zFM|wQG$NEVvfa+Z1r1tTjbwkDpUUQ#{h-5`D^By)vzX-1X$b3q-EoQ2@7{7{TM5#a}Szo70yOo+~F6>Gd0~NE&!wiB4 zBS7Dy^8!2Vl;s2A`t|DpBDK{kb)PEPj2`VT`;45N{~3n3;wIj}R0X=Or32PVWBG(f zPDTc|$gJpJ$+OGV&WPYanHUA9=Ep?vhHg7rOLT|J=JbQYnM_tK?78l0N1dFk+>O!1uq`vh=ctcm(i>r=jQ?A+Ub zKYgc!AEjP3Wlxlv(+^#$@@ul+iM@>~)Y6Pg1v-OovvLOx~<%)f6dFW|Pnb+T@kGDGvULcKo2WI?#D zP@5EecbK17|LS-P%nn1n*du*`)yE%&-R|JMoY0AI=RK}u)`;cnx-mu4YI+=uuifD* zwJWs5eMsTt;&eGkI(WFIz0<)`4>fS5d@IQiU`nvg2ysxMB<_|rTmYxb9f%jvEnmD6 zI0(R9kHFiOieb&?AXpcSE3rIs`0*Fnh(4i`NAdYa;^(jGS{BGFa$z_hb23b|7F@)= zbu=PBbCx73|C`V+K5lZi(vmxY9bcg7Zshh`knBB~vZx`c<2-U7xHe;LA-ALJ>JP1_ z)QPA7;ST8Y25Hn~heXscqYs)fFUN0Gwl@>yg$CSIx2C|iI&CPPjSb0Q$b@a`>M<-h zG6P-rY4q|qrc0IPlS|lDZuHl}eRN-zY70i-p2ERER;>BRa%&QK$)B_-~ zr^O?Jj6&aFj2;RVi(M~GTDC24tRx|g#u@YkDHtL($S<&fB)Iv+UktzItl=WHFDRDV zP3Avm{Fe0S9Fp7BB5lLCmT$p{E%&%z<(`80k)}2xHyHdX_&oP}U}_?@UsZHDw(Et2 z)Rf%GqMSD}0_NZD8JZaIw?=9rx=LCHPqUnKO+-!f3*PMdT6^Dxk?G&y0wP;|6xHU{ltHJ{2#Ix z#yjK?+JvuH)$j!K9&g?o`5zqw3*+)Bk|^r+luyYaK+0ONBDPDa1>%Kf#Zs4o!BDRG zmPgV)IFklPMTyQ|`gyUZl*G$D5!n?=F$>igJ>?+0PW>^RRG{;mtXVNw5|`5R@iZ}J z$ANH);R^pbQJFfE;K27}qk~zqdnR07%74EBL!aG5d+^hbi-=#fni`XzdC~5%euvee z;uMWG>q`hnWP1j`v!CBrzrh83LHytG=rOLBNUnl=b&3c@Ead#U!j!3`ddi73X{glR zQB*B!@<1-hGn%J2xJYYw_~LI}i_%o8w$t5b4-46=uVV1Zr`uS3P{?L$Cd6!I0I237 zwvG!S{JM*JvxPQWtRhcr0a$-Y*<8y9>P}gGJ6B$&G|Bs$X+?>?I!F1$6rHEYlfhRm zm9C$QrPOL9-E?a(rB-oG&=2Q_KT5D78_O{>vq9BMWf$+8g{q)6Ax=J})?XepEqDEw zhOPa)SA@VIn5Kp7eR8TR@}*@&^e$5-nKc6_`{`9B`Ig4+ggbp9<~QZenqAek>hLu;i2 z+d3-$G;@<_ye8Cv5mu(f@k5_YmL}484BZFHEN)jZ$W;B)($vJ^ei5(&*F^!KXxd&S z5=%G-)LBkl)&!py8>TaR5gp0#T)d6})g=sGk9sYmWe^8{BA*Ee_P<{-UT2sE5}*+b7Tl+@Tc1;Myw` zepBKt<0P1<=Bzk&U*`a8z@H;t+)T7n-4ETC=e%Ro^EJ5dmH1i^4~eKyP0D zJk2G>6AM{uYkRA=Fr2;N)7Fdv!q)e}x!`FKE=^K7af7OWn%rpvUJ`&fPJ~+Cm8MGj zm3Avk3!Cvp3y<&rQqKYL37)$1FSFF+-fa`5kfI#cyqc)y;LW51+1B=jcK zjowtIuy4#0ol4_x5r<>^xw!*mAcdL{7?eX?SN((vvUcqcuHbmQDx4r&-h=by#oUNRrj!B^*OS)l)pE-6S9S( znqxePQ^%_?m2%(YFk6iHq~&Ztu7Rwq_Y9)zHE%y~IG6*`)F9Ey%!89{G1e;l`r!ro zLqs9@+jQX0S<`iL)aAGVaS;(03X!S7=nWC3=Vmc6FwRDNaZzJmJ>d%;+Uv1PxqKb6 z79DB=ag&*5l@_ktUeCx^emG0;Pg5Q?X^1;8{S+;bP6P33)4Uf`@-v|; z$`l>*5Tv3bAefUa(%k>5jWloWv++>-IJ6d3+U&x|sLfc!JgDG#DHJrbqEGIUtgiLK ztm6ry<3pqoid53#qoCodRJ&@yuU|+L9ro}_#NACX#^>rUR?c8CJPCzs;@EfKq75p6DRa|<0G^a$>>G@2i#kU&` zBAqrfP#FoxFo)rIYW1!&*Tq|afq%$2{gnN#%{0c`R_bFrH(K7ykx#Cv#TGlu^ZRy*){oqaWeu>hdHzj;2c-w;Jl| zz=6(mQmdEK9ufF%UX#n7JoV`KpiZ@0J^1hPm%E%ia*;eS$#Q4_$fX?Z@Jw|1x~QjW1*IESQJFKL9$ zw{E64BC-e^x^GO1ULaK1cvjd_AT>N*q~3ee+VjhLz{N94s};c>I`TT|vCYB7Yxi4d zr!j9Hb~mQ!)i>9v zjZ+B}OoF4!L43m$+C2Z<6&QGb513cg8&Lh^$sLeW(E3>D7Z*y~K&}e3_FG`Z2vK>H z=n-S?&LS8$(k8;!q^c&ACZpy_KV`IMCKyCRj`kt9!q7(B?i!$t5`z4C)B`8cFtRu- zyx$Oplu7FG%pz2?1EDgR9^BxA9&_`nho_0Qpj8yw1ga)UsNbII44eNTt@lkT(WS87 zI-K^rm%P_8qfx(#mRE$+Vd<9BXt3a61x!>P2?tXX3|YV#IGaAHDN;uh4^;Jx3xfVid_GeHf|7Sf@t9`%`p z`chF~Qmzpoxdy+$Z}0FAPjbwMcB$U|wy;BNj^D=@to-U8o+Lf9bh&2q$!H4DAs#AD ziSWfF-6>&JKoX(i@v+Y`_dtuIS2QkHLaHuidQ|~-2>q>-i|Z%r<6T9~k#D*o30AkP z3Z;i&i6@*<8D8+KFJ0?bBVO(n-HX=t!4ye$8~UYu)ap1$58r|>dE;OV?t7Fq{q@J= zGrL$a9Vhj=`%2FC3$QR|Fi=)Bk@u@2CE`(W>?UMUC3W6dGht*2ic^*4co#|HfR=Of zchK7QRD--%Pj_dye@C!C`Rg^5pJ$Lf2G~Z-a}3}5N~6VMKKlEambw(xjl-T`kW7izSx#<*g?vo5`8{X2osoi4NJ`a2GJD$5dB`6cnb+#M_~7-`&L7sc7!9Wkgg>VazZf1pqD19G?VWPj8?7 z$0xYB9r_o^uW743gpynn)Iai2J&MwKixC2;;*A1`F1sx{;;*BXs=e~fZ{{Q$WTyRG4c z4N{G2e%(7eIQHtGgxb(H>}C~5_}y#7!X&cEbW1E$Ou=$2S5bjN$u3}Sd^8V=ExH16 z<@lkP>EF2H1>u!CZ?dc^gVr-%4MrPAnw1IFrb+7)*od|8?gD%XlTtOCfz4`Jc+G(I zb#nX;q0qoK6n^;a7ert{P)zSF^^$dcwDO0<{}((X$N_in9=eF!j|vWCR~ zPn7WsT8UowN?{lfV$~4-v*|kf7q#?#887oAPe2;y)J#Y^DrAYO^=jwt;i1g9+cO4H z6LJ-AU14bocxO`5c#j-bz)FmM4cL!1?YA`W1+;|}ng1wu66bX_Pc;hmC z$g#UtMNEvRZ%@g{FITL|aMJZy+8!i(*bIbMzvc=S-pg?}&cS%|*K=(TKgH~e-d;+E ztVF1yvRYS1DC7xq1ubEBy)G!Gzx@t9$@7J3tad|DB(Nsls!OsrHDvHnx8u^b&O*62 zuj?GrWqw4_OXBCuN^Jxs6%j`ZlCqYQ{m~i+${k~r1XFbxxDQN zOL+ntybcVs%PM_{^MI)>x>2uBq`=fE71&Frc8{5F&kMMhvH<(M+S_w71H1=k=$l$& zSbo?@i3Us58wbbun^R^{nM%c0z_-|Pv_){#Z>7M{?E$h=#QGZAn|%du(1vSN$)b?` z;Y^Sd%K2;H9u{GG{E*jHTOTLX;F{PHd7QDvy?cD=9d%GB1!hh!HcD~<4preyM{g$7 z;)zR+f!}Y3C-ZXZq>_IXOqqk6sN%4c#Uut>3p_Xy;)u!A9%b>hGK);{>{Hn3?p?wJ zwg=-$bn2)BpIRwi%eg!ZwErLn+l+kR7L%=VF=A?xYBJ)PFJeJcE^@_6)^Oz|OXOv< z+z)f)mJn6m=fQ3!E+ik|OpZW|cn^$K%d{a?!Wnd9gK0I}uDP(V`~J<4rzsoin3vSY zpSdU#4I2=HWIzo;2nQU8^>q)oo@4PUftV}wZ0jeh);v=^B?^WI8&4z`)DF2B1z#LS z51gHZy1Pfk`?vQU52M?`&J-C_r|p+2YK&vwXv#V*?O0lzk>rb5b>Z=$nq%sC;bO$a zqq0iy>N^LPAwK(^)4t4UQnY+`ddM~uf~426CK@SI6cOP0wxwciJ6v+xQ?Vj5I$W;K z(=4-9%JB>*usK|>9TzU>XR!BQYEXj`U4m}O+R5d(>eATfDO0n|ri?y}9h?e6DJ9DK zhbkmvx+41*jVq~+{TAue6X(IcDJi0FDPlap^6LsF*s1s@OOUT>`d${j;dDy4j^z9%tQpdtl88B(TcXa%L9_ZJ0uW(wl%b<#z{V0xg;$}{D{_Y z+~k)6tss-}+|kcWHVKnytWf!9v}e0lSr$q53Ih{~+~)Cr+kZqZP6d4@0=^V`r#I$f z#OcpZK>+jEgXJ#@UE8)RQ%b?nPGmLS0)mPv>|ky$!hJIGS`^OyVc*YmKF(zw^91q} zwCJ_;(pm^$NlZ03>9|E+iA&GK>7BiTtpIi+PWM0yZE7a8bMAiUNsBPf8^bTNNc4jD6Xt&Vk+UTQa|Js=ktADyJsK7`bYg0y^?$IuIQObMh0tI z@D0JTtPn@2W+BOt_|2b)oUQZm7--+J<)5SOl_Xhv@7!9&c3$n0@)iAea(XoleZm#b z7qkI+sT0+Edlm5dY6e>(gpixasu%@R&$XgSVV%Z;G}J;?;>iJd|1h#I4_~XQ{6;0dQ{rZ5X zo-8RKHT1OiMQdJ{$ zeJQ7SO~`U{E>`+cA+Hn75f3LDG35r=PF+0FylI+h#*`x>Hc?DrXKj@^R;OKCV%Nh` zdd>Mf9(25eYwD<(i)w_LPxgay&Ka%ekSP>3fmg8-EipXFhJKS&Ty;QbHMX1&{bEkM z2yzni_(#Jm*LU^(MTXR>QJABBK z1;g`ke`Bm1S$Qq6zqX-v_{zULG7b7b5A;znJ+PkOyMocd>!r|#yg+mWS6J|KRoj6_ zDKiC$j3G!tBM>rau%BvJYg~S=vWm`b|1pjOXBp0vU2pH7g8@O zIW53bSLkfHbg~gHaF`Cf75T&uvWmF=tlTw3e{hr(6`ygJ^6OGUj>z4Echg8~(VRi) zvs0h~bAHJ%}}gCkx=Mp;FeCy8Gw0I`{^J*U;%D08MHrzoh=wwf!;D`GSs=xd4nr{CKhUmEdSdVitr9E2YGBOiP&Za4{ z4R$k*h@AmSejInkANJo6`d9Le(5AF2PoE7IdPn}Js zXY#^~W(i&d#zaRY36EHys$__@8N4_SwNE z>+Nf!`?f4Clj@)P{DpvOe>3CpcHP}0#mY$BDlsP9(<0e$1!+eD6C7{h^Ecse@}ngm zpSlMuIj>E?_dIG=`d*OCWMDqkWaWW zqeyt*qg}rEsKz)ErfR<3&NDqG8mCeyXjB*!(pI`l7aJIm8{uLOax`-G&k%8IVM_CB zE{M+HuD~=t>4(^Gzzvh^3I<_bZKQl!nl zLu#dXJK4mz79R*@p3)Sl!5=T64{#&)EjYBI`B3~@n#zQb5MFNi+Tecb8}5du6ITk__G) zog(+k2yksM42nv?>FLGKQ{_g=Yn5zDc)j{1Qh2-R97Smo6mpqZ?eRlBRiy?=5Ij_V06%;2Xupao_ zXj?K#@RC`@iRLeD$KNqU-6dupR?wDN#4%^@zyNHKfX$?PZ{@vKNg9tx`M)IIPf`%9 z0$Lz##;p3M(&(*;&-Q7}F~qV`$zxL*Vxr0F=$Q2+`C(@klm;U_6h%6(c-6bzYhkG1 z;sYZSv1cGp6}>2OFp6jJJh9MB{Cg;iR^*H1L|qr2eLm(+g`K2VrBSfS3YYN&*GAs= zBKZPWAX=~GB7EHvI*nUe`^1jak|aG&V!hO8iF^oT_6`bK541cY1;^`e0QwUzR(2`r zO3@tk3<3RD6hoqMuWP*pFmz~EZBt=wxf~Hvx#(S)VGsvKnagHg@Q~gongrJt;yfGv zczg8HP=-6&0jF%M(7sRTN5*?HCVyl*Htx;R**}njlc09x`#uMU|HWe)zGo;Kxd_Kv zo~DxP^Htd;Z1H`vLq%MY-T>3oYwNfa9VT?^=#|aLR%;BAbv;c)O9qwhE)iG469lO= zq(K1bB@16Yq-cI!yK1*>7f`}cwxfW1H!XWIE{-=B+|uZZ@2>vXNAPd_Eq^8~u4kff z_2DrCj;Z`hwEurA{oy@OZNfIH{nM!xNmKhT|4h>&HNc#iK9!piqW`Mp#wbNV9$*Qp z8CQ`up)J8g3y^@Hq2esnOSg%78!Tv@HInJZiz{>elTSJ|vuWqpJ!;K47E=K_=IxSc z7F&7*uj!}CFDH%G=*5S!IbYMM44Hm$cRM=bYf_#_lOD59Rvi9rSW}NK@3!D^ruo(s zvughE*VtO#HLh^s(>saFo72=-o7uG7B$*>h<@#BzTQiz$2)EmK64aC%YiRI62h9?`LDWju+ z?EN1jcP8653LbXlDfy1w_MWP+wZeH3MQEFAt+{1^Qrm8@M!e$Z+@ZLssEx1R^HNT& zn=|+1Fp1`$L)eD5=I0XE*VVb9LG%?jTX6w6QHSJr?N1N6B;Rt20mh^)<;!Vn|2p7)SbhkEZ)7Jk>=y z@CuntRLh#&t<0*=ZgSl9s_docx|_a|BBxE2Fg(;D)TbTp23lTqGp$P>sbQO%wojkl znYfOuNVb*xje@2v4fBvj+P*K2#|;Kl{;q|z7o;wV8KZEI`g~7syTYoo9UwzJqISmV zw0M>}5v%binoWo$W zf)S7pPWut*m{ukH%bxrYRH7)FYdj77b1Jqdy4i$X5K3p=8H>RS^cc#_s3nFfcl)Rf z0b+E|b0Kd9K7occUQuYh<`~yEbj=eHL)~+Y^UFp{oMI(S-_078(#R=$+ zwdfFoSW3I&0(mvu`~Cm6a?v%^774&)9KK~2XqX$A1WPSh1zoC?29bJpG+v$U{Cjiu z*8aO7&I$e8%4?I&$$bkP4`b$HB)eF+p^EM3%1A#LMq{6FwO~q9ss3zU4t7*{d+xJ| zck7ySlQa#Mli-~W%oCBK5|HsC>8L}&!YV&)F6(@kU3aPSgkQ6TqNC?+(Sm^1GZ8an z|EmV?=Grox8$Kd4tuE@-6bOLf`RDn+t-J}l)$SUjiDwFdD*RV#f%?p>G6f2R7W5CT zibST~$2G`D-M2cL`oG&^cT0QrI}V2_dPE8(5f>W(%Da{DQ0YuYvw5Z}llwhBS8Q#F z!YrVldrMgu7IHc17Z>^z!$qvR=BXV%NhnVjb^;XaFL!%}ox|!#YqM2{9+~YY~_98%ig?0sliYw6+JVl}n}$r&UT< zm&_WanfXeCzea}J(`%+w`>O~S@*tHHgM6V9)_XisB}Thrx-iLE*B@HtBC5~EUX=l` zS3o2^uq$+x*9s6{&pV+#T9w}=j%a*8Zf09)>GhH}1)|5^RDRA4H)#FStKpOpO21E{ zXPw{Pr-c)d^Gad29;D=nFOykubejvmKk1L2v=-~Q-y~S1?#4RlA4wR#3 zP+&lp>u%&d`>1}vG#W1$(mMZl`e*{)J6f_EzxzWc$(aHG=eUXk$Yo?t`;)aMnTBqO z9i>AYV#Hfl(3j076s=qHLhL4lRgh_`>;qyNsks!YNg}HiWj&CLkqTsE zJd0MFA~H@QBvvmA&qIn))aWM9eM0Slk!2ofY22`!X?yLiuVXG**5Y!1|GilP{PPKSNvW9k(n8y!9ojcs<)!TtzI8)c(3H@{1NUF1H zVGiRH8UuQ7%7Fb1%gAMSwmd^c&{UHZwirDZGJlx0+*2}!YwDJ4v{V_R39KP7c0uif zK`VtsI5Uv>+Eqbb6FSt7CAC@P*Mriq<@ z9_)ox1jG0F{V&Yfl(bQk1_U#mZzppr68Zy|4YOiB`_@3s#be(M4=UXw7|ahgaU10zF{tXed2VHTXyZ z>LMi#txVt=OGaGU;gj|VVs3{Pcd7r0tV?vDSb@x0JW1x85=QsK0TG*uC6Qe5Qw1GpApZ zJ+I>+{ZwD?Sdzbb_E5TpXD~vHlKvtbk~z?wr$^KbnI~T(n$AdIEJ4kAyqH+-^q@89cpguXZd;Dl@n_(S|V0W;$)M-v~QP$tEFZGm%sX6hma8&P-zC3 z!Oq@NIwAKQuNILbo{0MQ?KeM`Ru#5cg<^SYl#T zVlnVI{uuVYm+hLjO~K1+_J4ScXUp_kqy6HwWZPd#>CX;^MH`I|&N59lp@<%9EX!5U z0P2~TbO{e(UZu%fXtB0;=ix(01-SKa7S^j3cTVHzo2hTD_J^$!<5S^mSN1SUNw zG&9sl{kvYVWlD&td#-++CQ$1f!iQvs$RM9o`Y_uP`j%`gyq{O=A(9U8xJ^s+EywtfqS#Y&?Gwt+XDQKK6v-X&`u~w&@4&-2 z6f4IX~1pg>9r9{V@0C;I&q=$}>TPTOy zgRgOLY)%}{)m7~YuL~k>!?O7xs237cq*%~2ZA-D$0P9nlm505HNaWapZuJG-kG&yK3)BymnKjx?1S*t5)c(4MR$C~d|b%mIg z8Nv@nlDQm$7xVXr91i$<)Pp9eR^IReng0v&x?G^UW(Udc^94E5rJ$c+%; zT7P<$k3BHx)(fKtT5^#(Qw&0`uU6H$nUF-tgSH5LLk7e( z|F%nL*le~d^zJJNXq-)0y4jQHynfGsj)z1n*e4DnSb94kr;ZJ0Xu7LMG?Tk@Il z8|IM1D`qqK3Kf#9=(A?#Lh+B>e=M?SC7a9Q00`4Mbl&i}{bi%~w&&ov7XQH+DY(2J zLgmq4)z9ISc8?hw3twdtn`JW zzUomwv)|bV2JKh4X-g8NfD^y)X|fo)@MA`%AZ zN+h5@C#Jj?Sg0P}GGk#MbmK;bQmt1W7Ahe3vg>&tiObP+p1R{ulmvJ*YMu-swma8!4n9zF{TI5ZLG|?n9Iz zbZ<@3iKRkEG)zIA1pM^9c)v?w`lDeb$Og!8MR4EpdlSoX!}g2Tf`h#^Q#PMj7G+aW zt=~^_ovd32eO}(Bdp4_2SPNkj$H%jFvDr)vej$qE`?I05QGoZ@_Z%1Y2^1|{;?wT{ zo}5MwQp&Dggom38!Pen1x0Y@txsP|5GuB(iI+cmyx7zYJ#({V5HiA9P0aKZ47ntP1 zz?1*gGmbp%RN0l*!a;HqDN0ZvPm2k-FR(s*aZs!`q5(gC-*qcrwwOpcf*u*g=+z8Oelf_Kk^f@n=je0D0^b(5eB-wWzup75` zwx}Q>72`5rgUH3Gfd2?iV2aTQ_hzi3%O`xL`$IkC?G2PwlCJp>L7TN)-DBL8-iwx} z1Y6uVk7Pt=$U6<$uN?`$V*P=_O$8iA@FU`GAeT3CU4IOSYLM5{lHy<`5#NTz61s2 zI`gIRntY%#u;;@xHm;?h8PwIdJw$MV97LAovGyu!RH+@QkX@)s?MbtYNF8Xe8d-Q65A_Or%dz0bOm?)+JhRqf|}jnc~~1Sy+E$E)p< z<#TDwpa?IOj|-`L=NAEfpHg7||A}z>1%N~%wdAZoQ872Phh@m>EP*l!Pl7Lij3ZK; z@nBCsP*qTR`%EJC1Qfa~Y%FYQnOXt|X;yCC@_-vrfDX9}Obw={vgm~H|CoJ5w0Gxe zK-!UauNAt_s){v>*f-$`Q>YaOgx;&J-6^c}yBoPP5?gC}bQMfc?)6RDzt?Yb!{FR^g zSX)s&;B2&+_g}ttYp&_bT}#R3t~iAKLX`PAi<<5Gcx;&kU@^&ML6kenaTr1jKJt63 z6Gvm5l7B|f88q~<_P582?Kv{6`(6s4c9gokt?;@@i^mxlLwTwU+~NBj$62ULwU_YG zw+FmJZCXGdytNsdjBkZY(u=b}UkQ=nU>$?~tTJWMCWPvEJ4vsZV9sb$LM zH?hCK1s*PBl=XjfZLlqpQ4Oq;Rz(ekk^m5(#W#*%}VU_U1%NRT*uZ-pDemeyXk{vBd=$D}|6{y*J zjA0ur>2K6WPbsMi&7k4+sz_>MwxH7p=*}A`wO;|?zsrs>8+yaD8_09fIGDk@urdaB z45G@69ykdyT%jC^rp<+%Rj?EkB3CxFfu#v_dbC@J86*HNW3MqHA9v?<1^r+B_7d>K zUwW-{JKJVPfFG ziF7I%wmo&i>;r}oO9q@Y#z!0uOek{o4QAm8Ba%Fec?9(5&vxW?aB(7-P}M*%Xh_=#8H= zX?%K!7y_NKfs`uEGUA;j7PVlSxmhxMF?Uwy3;xLc&x~$PCKKk^TT^oq-<7 zRIrpzae5^*heXXK*Kig$MidE<*&zEIEN(;KY? za)?%2!g2SnKL$_AAM`qyKn!>oPeM$n zW4{Wt{bbdsam*n`4M(Krv{LfxifZ3SQzzZAUO35QLaef*L{wy-YtU1PUDh4lHhgvh z74XJbhMPaQjEWdm*(C=nXjMS)o#)(+M+2f*)^|xg1!C@iwyB||cKVs;8S3|DleG#v zDfPa9&|LhQlAOD?t_Ww$`pMC*)^EX`| Z5G{|H_ICc@Gtkc`DJmyYD`XJ#{{g=CGOqvt literal 0 HcmV?d00001 From 959c6d92439d0e30fab7e2effb5e50f77defb5e9 Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Wed, 21 Feb 2024 11:23:37 +0100 Subject: [PATCH 3/9] rebuild create_index to handle serverless --- composer.json | 4 +- composer.lock | 811 +++++++++--------- src/Client.php | 45 +- src/Factory.php | 12 +- src/Pinecone.php | 4 +- src/Requests/Control/ConfigureIndex.php | 5 +- src/Requests/Control/CreateCollection.php | 5 +- src/Requests/Control/CreateIndex.php | 128 +-- src/Requests/Control/DeleteCollection.php | 2 +- src/Requests/Control/DeleteIndex.php | 2 +- src/Requests/Control/DescribeCollection.php | 2 +- src/Requests/Control/DescribeIndex.php | 2 +- src/Requests/Control/ListCollections.php | 2 +- src/Requests/Control/ListIndexes.php | 2 +- .../Exceptions/MissingHostException.php | 9 + src/Resources/CollectionResource.php | 72 -- src/Resources/Control/CollectionResource.php | 35 + src/Resources/Control/IndexResource.php | 91 ++ src/Resources/ControlResource.php | 29 + src/Resources/{ => Data}/VectorResource.php | 50 +- src/Resources/DataResource.php | 20 + src/Resources/IndexResource.php | 136 --- src/Resources/Resource.php | 3 - 23 files changed, 714 insertions(+), 757 deletions(-) create mode 100644 src/Requests/Exceptions/MissingHostException.php delete mode 100644 src/Resources/CollectionResource.php create mode 100644 src/Resources/Control/CollectionResource.php create mode 100644 src/Resources/Control/IndexResource.php create mode 100644 src/Resources/ControlResource.php rename src/Resources/{ => Data}/VectorResource.php (66%) create mode 100644 src/Resources/DataResource.php delete mode 100644 src/Resources/IndexResource.php diff --git a/composer.json b/composer.json index 31355d2..df47832 100644 --- a/composer.json +++ b/composer.json @@ -18,8 +18,8 @@ } ], "require": { - "php": "^8.1", - "saloonphp/saloon": "^2.7" + "php": "^8.2", + "saloonphp/saloon": "^3.6" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index e85d5db..52ab634 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dadbe5fe8c95a8c88fa9a70a52531817", + "content-hash": "d3e4c848f51a21a184093fb36caabfa3", "packages": [ { "name": "guzzlehttp/guzzle", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "shasum": "" }, "require": { @@ -32,11 +32,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -114,7 +114,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" }, "funding": [ { @@ -130,28 +130,28 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:20:53+00:00" + "time": "2023-12-03T20:35:24+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "type": "library", "extra": { @@ -197,7 +197,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.1" + "source": "https://github.com/guzzle/promises/tree/2.0.2" }, "funding": [ { @@ -213,20 +213,20 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:11:55+00:00" + "time": "2023-12-03T20:19:20+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.1", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", "shasum": "" }, "require": { @@ -240,9 +240,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -313,7 +313,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.1" + "source": "https://github.com/guzzle/psr7/tree/2.6.2" }, "funding": [ { @@ -329,20 +329,20 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:13:57+00:00" + "time": "2023-12-03T20:05:35+00:00" }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { @@ -379,9 +379,9 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" + "source": "https://github.com/php-fig/http-client" }, - "time": "2023-04-10T20:12:12+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", @@ -537,36 +537,43 @@ }, { "name": "saloonphp/saloon", - "version": "v2.10.0", + "version": "v3.6.3", "source": { "type": "git", "url": "https://github.com/saloonphp/saloon.git", - "reference": "10801114dde877e3cd4cce7d92254ce768e983c9" + "reference": "e25139705fc93e89b72d24a516b63d6af1f47eab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/saloonphp/saloon/zipball/10801114dde877e3cd4cce7d92254ce768e983c9", - "reference": "10801114dde877e3cd4cce7d92254ce768e983c9", + "url": "https://api.github.com/repos/saloonphp/saloon/zipball/e25139705fc93e89b72d24a516b63d6af1f47eab", + "reference": "e25139705fc93e89b72d24a516b63d6af1f47eab", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^7.5", + "guzzlehttp/guzzle": "^7.6", "guzzlehttp/promises": "^1.5 || ^2.0", + "guzzlehttp/psr7": "^2.0", "php": "^8.1", + "psr/http-factory": "^1.0", "psr/http-message": "^1.1 || ^2.0" }, + "conflict": { + "sammyjo20/saloon": "*" + }, "require-dev": { "ext-simplexml": "*", "friendsofphp/php-cs-fixer": "^3.5", "illuminate/collections": "^9.39 || ^10.0", "league/flysystem": "^3.0", - "pestphp/pest": "^2.2.3", + "pestphp/pest": "^2.6", "phpstan/phpstan": "^1.9", + "saloonphp/xml-wrangler": "^1.1", "spatie/ray": "^1.33", "symfony/dom-crawler": "^6.0" }, "suggest": { "illuminate/collections": "Required for the response collect() method.", + "saloonphp/xml-wrangler": "Required for the response xmlReader() method.", "symfony/dom-crawler": "Required for the response dom() method." }, "type": "library", @@ -597,23 +604,19 @@ ], "support": { "issues": "https://github.com/saloonphp/saloon/issues", - "source": "https://github.com/saloonphp/saloon/tree/v2.10.0" + "source": "https://github.com/saloonphp/saloon/tree/v3.6.3" }, "funding": [ { "url": "https://github.com/sammyjo20", "type": "github" - }, - { - "url": "https://ko-fi.com/sammyjo20", - "type": "ko_fi" } ], - "time": "2023-09-03T21:48:46+00:00" + "time": "2024-02-14T13:28:05+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -660,7 +663,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -682,16 +685,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v7.2.6", + "version": "v7.4.3", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "7f372b5bb59b4271adedc67d3129df29b84c4173" + "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/7f372b5bb59b4271adedc67d3129df29b84c4173", - "reference": "7f372b5bb59b4271adedc67d3129df29b84c4173", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", + "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", "shasum": "" }, "require": { @@ -699,28 +702,27 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-simplexml": "*", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", + "fidry/cpu-core-counter": "^1.1.0", "jean85/pretty-package-versions": "^2.0.5", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0", - "phpunit/php-code-coverage": "^10.1.3", - "phpunit/php-file-iterator": "^4.0.2", - "phpunit/php-timer": "^6.0", - "phpunit/phpunit": "^10.3.2", - "sebastian/environment": "^6.0.1", - "symfony/console": "^6.3.4", - "symfony/process": "^6.3.4" + "php": "~8.2.0 || ~8.3.0", + "phpunit/php-code-coverage": "^10.1.11 || ^11.0.0", + "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0", + "phpunit/php-timer": "^6.0.0 || ^7.0.0", + "phpunit/phpunit": "^10.5.9 || ^11.0.3", + "sebastian/environment": "^6.0.1 || ^7.0.0", + "symfony/console": "^6.4.3 || ^7.0.3", + "symfony/process": "^6.4.3 || ^7.0.3" }, "require-dev": { "doctrine/coding-standard": "^12.0.0", "ext-pcov": "*", "ext-posix": "*", - "infection/infection": "^0.27.0", - "phpstan/phpstan": "^1.10.32", + "phpstan/phpstan": "^1.10.58", "phpstan/phpstan-deprecation-rules": "^1.1.4", - "phpstan/phpstan-phpunit": "^1.3.14", - "phpstan/phpstan-strict-rules": "^1.5.1", - "squizlabs/php_codesniffer": "^3.7.2", - "symfony/filesystem": "^6.3.1" + "phpstan/phpstan-phpunit": "^1.3.15", + "phpstan/phpstan-strict-rules": "^1.5.2", + "squizlabs/php_codesniffer": "^3.9.0", + "symfony/filesystem": "^6.4.3 || ^7.0.3" }, "bin": [ "bin/paratest", @@ -761,7 +763,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.2.6" + "source": "https://github.com/paratestphp/paratest/tree/v7.4.3" }, "funding": [ { @@ -773,20 +775,20 @@ "type": "paypal" } ], - "time": "2023-08-29T07:47:39+00:00" + "time": "2024-02-20T07:24:02+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.1.1", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -818,9 +820,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "time": "2023-06-03T09:27:29+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "evenement/evenement", @@ -871,16 +873,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { @@ -906,11 +908,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -933,22 +930,22 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2023-06-12T08:44:38+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "fidry/cpu-core-counter", - "version": "0.5.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", "shasum": "" }, "require": { @@ -956,13 +953,13 @@ }, "require-dev": { "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", "phpstan/phpstan": "^1.9.2", "phpstan/phpstan-deprecation-rules": "^1.0.0", "phpstan/phpstan-phpunit": "^1.2.2", "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.26 || ^8.5.31", - "theofidry/php-cs-fixer-config": "^1.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, "type": "library", @@ -988,7 +985,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" }, "funding": [ { @@ -996,20 +993,20 @@ "type": "github" } ], - "time": "2022-12-24T12:35:10+00:00" + "time": "2024-02-07T09:43:46+00:00" }, { "name": "filp/whoops", - "version": "2.15.3", + "version": "2.15.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", "shasum": "" }, "require": { @@ -1059,7 +1056,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.3" + "source": "https://github.com/filp/whoops/tree/2.15.4" }, "funding": [ { @@ -1067,28 +1064,28 @@ "type": "github" } ], - "time": "2023-07-13T12:00:00+00:00" + "time": "2023-11-03T12:00:00+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.1", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "autoload": { @@ -1117,7 +1114,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { @@ -1129,7 +1126,7 @@ "type": "tidelift" } ], - "time": "2023-02-25T20:23:15+00:00" + "time": "2023-11-12T22:16:48+00:00" }, { "name": "jean85/pretty-package-versions", @@ -1251,25 +1248,27 @@ }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v5.0.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc", + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -1277,7 +1276,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1301,43 +1300,44 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-01-07T17:17:35+00:00" }, { "name": "nunomaduro/collision", - "version": "v7.8.1", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "61553ad3260845d7e3e49121b7074619233d361b" + "reference": "0d655ffbf3edf9b366e0eea5ab9c7871e0ab3357" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/61553ad3260845d7e3e49121b7074619233d361b", - "reference": "61553ad3260845d7e3e49121b7074619233d361b", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0d655ffbf3edf9b366e0eea5ab9c7871e0ab3357", + "reference": "0d655ffbf3edf9b366e0eea5ab9c7871e0ab3357", "shasum": "" }, "require": { - "filp/whoops": "^2.15.3", - "nunomaduro/termwind": "^1.15.1", - "php": "^8.1.0", - "symfony/console": "^6.3.2" + "filp/whoops": "^2.15.4", + "nunomaduro/termwind": "^2.0.0", + "php": "^8.2.0", + "symfony/console": "^7.0.2" + }, + "conflict": { + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" }, "require-dev": { - "brianium/paratest": "^7.2.4", - "laravel/framework": "^10.17.1", - "laravel/pint": "^1.10.5", - "laravel/sail": "^1.23.1", - "laravel/sanctum": "^3.2.5", - "laravel/tinker": "^2.8.1", - "nunomaduro/larastan": "^2.6.4", - "orchestra/testbench-core": "^8.5.9", - "pestphp/pest": "^2.12.1", - "phpunit/phpunit": "^10.3.1", - "sebastian/environment": "^6.0.1", - "spatie/laravel-ignition": "^2.2.0" + "larastan/larastan": "^2.8.1", + "laravel/framework": "^11.0.0", + "laravel/pint": "^1.13.8", + "laravel/sail": "^1.27.0", + "laravel/sanctum": "^4.0.0", + "laravel/tinker": "^2.9.0", + "orchestra/testbench-core": "^9.0.0", + "pestphp/pest": "^2.31.0 || ^3.0.0", + "sebastian/environment": "^6.0.1 || ^7.0.0" }, "type": "library", "extra": { @@ -1345,6 +1345,9 @@ "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" } }, "autoload": { @@ -1396,37 +1399,36 @@ "type": "patreon" } ], - "time": "2023-08-07T08:03:21+00:00" + "time": "2024-01-12T13:38:24+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "e534f661e09b712e51971e2cf0f662f83116d5ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e534f661e09b712e51971e2cf0f662f83116d5ad", + "reference": "e534f661e09b712e51971e2cf0f662f83116d5ad", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.2", + "symfony/console": "^7.0.1" }, "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", + "ergebnis/phpstan-rules": "^2.1.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.13.7", + "mockery/mockery": "^1.6.6", + "pestphp/pest": "^2.28.0", + "phpstan/phpstan": "^1.10.48", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.0", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -1435,6 +1437,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1466,7 +1471,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.0" }, "funding": [ { @@ -1482,39 +1487,40 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2023-12-08T16:23:40+00:00" }, { "name": "pestphp/pest", - "version": "v2.18.0", + "version": "v2.34.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "2b0aa4b9c93138c033a6da27cbbd3bd9bbd2d218" + "reference": "602b696348efdf4da83c9719de3062462cc1d146" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/2b0aa4b9c93138c033a6da27cbbd3bd9bbd2d218", - "reference": "2b0aa4b9c93138c033a6da27cbbd3bd9bbd2d218", + "url": "https://api.github.com/repos/pestphp/pest/zipball/602b696348efdf4da83c9719de3062462cc1d146", + "reference": "602b696348efdf4da83c9719de3062462cc1d146", "shasum": "" }, "require": { - "brianium/paratest": "^7.2.6", - "nunomaduro/collision": "^7.8.1", - "nunomaduro/termwind": "^1.15.1", + "brianium/paratest": "^7.3.1", + "nunomaduro/collision": "^7.10.0|^8.1.0", + "nunomaduro/termwind": "^1.15.1|^2.0.0", "pestphp/pest-plugin": "^2.1.1", - "pestphp/pest-plugin-arch": "^2.3.3", + "pestphp/pest-plugin-arch": "^2.7.0", "php": "^8.1.0", - "phpunit/phpunit": "^10.3.3" + "phpunit/phpunit": "^10.5.10" }, "conflict": { - "phpunit/phpunit": ">10.3.3", + "phpunit/phpunit": ">10.5.10", + "sebastian/exporter": "<5.1.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^2.16.0", - "pestphp/pest-plugin-type-coverage": "^2.2.0", - "symfony/process": "^6.3.4" + "pestphp/pest-plugin-type-coverage": "^2.8.0", + "symfony/process": "^6.4.0|^7.0.3" }, "bin": [ "bin/pest" @@ -1540,6 +1546,11 @@ "Pest\\Plugins\\Version", "Pest\\Plugins\\Parallel" ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -1572,7 +1583,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v2.18.0" + "source": "https://github.com/pestphp/pest/tree/v2.34.0" }, "funding": [ { @@ -1584,7 +1595,7 @@ "type": "github" } ], - "time": "2023-09-07T18:00:46+00:00" + "time": "2024-02-17T10:06:53+00:00" }, { "name": "pestphp/pest-plugin", @@ -1658,29 +1669,36 @@ }, { "name": "pestphp/pest-plugin-arch", - "version": "v2.3.3", + "version": "v2.7.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest-plugin-arch.git", - "reference": "b758990e83f89daba3c45672398579cf8692213f" + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/b758990e83f89daba3c45672398579cf8692213f", - "reference": "b758990e83f89daba3c45672398579cf8692213f", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", "shasum": "" }, "require": { - "nunomaduro/collision": "^7.8.1", - "pestphp/pest-plugin": "^2.0.1", + "nunomaduro/collision": "^7.10.0|^8.1.0", + "pestphp/pest-plugin": "^2.1.1", "php": "^8.1", - "ta-tikoma/phpunit-architecture-test": "^0.7.4" + "ta-tikoma/phpunit-architecture-test": "^0.8.4" }, "require-dev": { - "pestphp/pest": "^2.16.0", + "pestphp/pest": "^2.33.0", "pestphp/pest-dev-tools": "^2.16.0" }, "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, "autoload": { "files": [ "src/Autoload.php" @@ -1706,7 +1724,7 @@ "unit" ], "support": { - "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.3.3" + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" }, "funding": [ { @@ -1718,7 +1736,7 @@ "type": "github" } ], - "time": "2023-08-21T16:06:30+00:00" + "time": "2024-01-26T09:46:42+00:00" }, { "name": "pestphp/pest-plugin-faker", @@ -1787,31 +1805,31 @@ }, { "name": "pestphp/pest-plugin-watch", - "version": "v2.0.1", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest-plugin-watch.git", - "reference": "6386f683ea95d7e0abce2004cf52ea1cf97546a9" + "reference": "fd1866fac88215b9dbf0242a857864c95c26042e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-watch/zipball/6386f683ea95d7e0abce2004cf52ea1cf97546a9", - "reference": "6386f683ea95d7e0abce2004cf52ea1cf97546a9", + "url": "https://api.github.com/repos/pestphp/pest-plugin-watch/zipball/fd1866fac88215b9dbf0242a857864c95c26042e", + "reference": "fd1866fac88215b9dbf0242a857864c95c26042e", "shasum": "" }, "require": { - "pestphp/pest-plugin": "^2.0.1", + "pestphp/pest-plugin": "^2.1.1", "php": "^8.1.0", "react/child-process": "^0.6.5", - "react/event-loop": "^1.4.0" + "react/event-loop": "^1.5.0" }, "conflict": { "evenement/evenement": "^1.0", - "pestphp/pest": "<1.0" + "pestphp/pest": "<2.33.0" }, "require-dev": { - "pestphp/pest": "^2.12.1", - "pestphp/pest-dev-tools": "^2.14.0" + "pestphp/pest": "^2.33.0", + "pestphp/pest-dev-tools": "^2.16.0" }, "type": "library", "extra": { @@ -1852,7 +1870,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest-plugin-watch/issues", - "source": "https://github.com/pestphp/pest-plugin-watch/tree/v2.0.1" + "source": "https://github.com/pestphp/pest-plugin-watch/tree/v2.1.0" }, "funding": [ { @@ -1864,7 +1882,7 @@ "type": "github" } ], - "time": "2023-08-04T10:52:49+00:00" + "time": "2024-01-26T09:18:46+00:00" }, { "name": "phar-io/manifest", @@ -2089,16 +2107,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "bc3dc91a5e9b14aa06d1d9e90647c5c5a2cc5353" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/bc3dc91a5e9b14aa06d1d9e90647c5c5a2cc5353", + "reference": "bc3dc91a5e9b14aa06d1d9e90647c5c5a2cc5353", "shasum": "" }, "require": { @@ -2141,22 +2159,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.1" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-01-18T19:15:27+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.1", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { @@ -2164,7 +2182,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { @@ -2206,7 +2224,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, "funding": [ { @@ -2218,20 +2236,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T19:38:58+00:00" + "time": "2023-11-12T21:59:55+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.0", + "version": "1.25.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "3510b0a6274cc42f7219367cb3abfc123ffa09d6" + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/3510b0a6274cc42f7219367cb3abfc123ffa09d6", - "reference": "3510b0a6274cc42f7219367cb3abfc123ffa09d6", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240", "shasum": "" }, "require": { @@ -2263,22 +2281,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0" }, - "time": "2023-09-07T20:46:32+00:00" + "time": "2024-01-04T17:06:16+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.33", + "version": "1.10.59", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "03b1cf9f814ba0863c4e9affea49a4d1ed9a2ed1" + "reference": "e607609388d3a6d418a50a49f7940e8086798281" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/03b1cf9f814ba0863c4e9affea49a4d1ed9a2ed1", - "reference": "03b1cf9f814ba0863c4e9affea49a4d1ed9a2ed1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281", + "reference": "e607609388d3a6d418a50a49f7940e8086798281", "shasum": "" }, "require": { @@ -2327,27 +2345,27 @@ "type": "tidelift" } ], - "time": "2023-09-04T12:20:53+00:00" + "time": "2024-02-20T13:59:13+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.4", + "version": "10.1.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "cd59bb34756a16ca8253ce9b2909039c227fff71" + "reference": "78c3b7625965c2513ee96569a4dbb62601784145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cd59bb34756a16ca8253ce9b2909039c227fff71", - "reference": "cd59bb34756a16ca8253ce9b2909039c227fff71", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1", "phpunit/php-file-iterator": "^4.0", "phpunit/php-text-template": "^3.0", @@ -2397,7 +2415,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.4" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" }, "funding": [ { @@ -2405,7 +2423,7 @@ "type": "github" } ], - "time": "2023-08-31T14:04:38+00:00" + "time": "2023-12-21T15:38:30+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2652,16 +2670,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.3.3", + "version": "10.5.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "241ed4dd0db1c096984e62d414c4e1ac8d5dbff4" + "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/241ed4dd0db1c096984e62d414c4e1ac8d5dbff4", - "reference": "241ed4dd0db1c096984e62d414c4e1ac8d5dbff4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50b8e314b6d0dd06521dc31d1abffa73f25f850c", + "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c", "shasum": "" }, "require": { @@ -2675,7 +2693,7 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.1", + "phpunit/php-code-coverage": "^10.1.5", "phpunit/php-file-iterator": "^4.0", "phpunit/php-invoker": "^4.0", "phpunit/php-text-template": "^3.0", @@ -2685,7 +2703,7 @@ "sebastian/comparator": "^5.0", "sebastian/diff": "^5.0", "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.0", + "sebastian/exporter": "^5.1", "sebastian/global-state": "^6.0.1", "sebastian/object-enumerator": "^5.0", "sebastian/recursion-context": "^5.0", @@ -2701,7 +2719,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.3-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -2733,7 +2751,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.3.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.10" }, "funding": [ { @@ -2749,7 +2767,7 @@ "type": "tidelift" } ], - "time": "2023-09-05T04:34:51+00:00" + "time": "2024-02-04T09:07:51+00:00" }, { "name": "psr/container", @@ -2935,16 +2953,16 @@ }, { "name": "react/event-loop", - "version": "v1.4.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", - "reference": "6e7e587714fff7a83dcc7025aee42ab3b265ae05" + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/6e7e587714fff7a83dcc7025aee42ab3b265ae05", - "reference": "6e7e587714fff7a83dcc7025aee42ab3b265ae05", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", "shasum": "" }, "require": { @@ -2995,7 +3013,7 @@ ], "support": { "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.4.0" + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" }, "funding": [ { @@ -3003,7 +3021,7 @@ "type": "open_collective" } ], - "time": "2023-05-05T10:11:24+00:00" + "time": "2023-11-13T13:48:05+00:00" }, { "name": "react/stream", @@ -3329,20 +3347,20 @@ }, { "name": "sebastian/complexity", - "version": "3.0.1", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c70b73893e10757af9c6a48929fa6a333b56a97a", - "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1" }, "require-dev": { @@ -3351,7 +3369,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -3375,7 +3393,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -3383,20 +3401,20 @@ "type": "github" } ], - "time": "2023-08-31T09:55:53+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "5.0.3", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", "shasum": "" }, "require": { @@ -3409,7 +3427,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -3442,7 +3460,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" }, "funding": [ { @@ -3450,7 +3468,7 @@ "type": "github" } ], - "time": "2023-05-01T07:48:21+00:00" + "time": "2023-12-22T10:55:06+00:00" }, { "name": "sebastian/environment", @@ -3518,16 +3536,16 @@ }, { "name": "sebastian/exporter", - "version": "5.0.1", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "32ff03d078fed1279c4ec9a407d08c5e9febb480" + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/32ff03d078fed1279c4ec9a407d08c5e9febb480", - "reference": "32ff03d078fed1279c4ec9a407d08c5e9febb480", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", "shasum": "" }, "require": { @@ -3541,7 +3559,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -3584,7 +3602,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" }, "funding": [ { @@ -3592,7 +3610,7 @@ "type": "github" } ], - "time": "2023-09-08T04:46:58+00:00" + "time": "2023-09-24T13:22:09+00:00" }, { "name": "sebastian/global-state", @@ -3658,20 +3676,20 @@ }, { "name": "sebastian/lines-of-code", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d", - "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1" }, "require-dev": { @@ -3704,7 +3722,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -3712,7 +3730,7 @@ "type": "github" } ], - "time": "2023-08-31T09:25:50+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", @@ -4000,43 +4018,46 @@ }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "c5010d50f1ee4b25cfa0201d9915cf1b14071456" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/c5010d50f1ee4b25cfa0201d9915cf1b14071456", + "reference": "c5010d50f1ee4b25cfa0201d9915cf1b14071456", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4070,7 +4091,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v7.0.3" }, "funding": [ { @@ -4086,27 +4107,27 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/finder", - "version": "v6.3.3", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4134,7 +4155,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.3" + "source": "https://github.com/symfony/finder/tree/v7.0.0" }, "funding": [ { @@ -4150,20 +4171,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T08:31:44+00:00" + "time": "2023-10-31T17:59:56+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -4177,9 +4198,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4216,7 +4234,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -4232,20 +4250,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -4256,9 +4274,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4297,7 +4312,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -4313,20 +4328,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -4337,9 +4352,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4381,7 +4393,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -4397,20 +4409,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -4424,9 +4436,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4464,7 +4473,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -4480,20 +4489,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -4501,9 +4510,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4547,7 +4553,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -4563,24 +4569,24 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "937a195147e0c27b2759ade834169ed006d0bc74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/937a195147e0c27b2759ade834169ed006d0bc74", + "reference": "937a195147e0c27b2759ade834169ed006d0bc74", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -4608,7 +4614,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v7.0.3" }, "funding": [ { @@ -4624,25 +4630,25 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4690,7 +4696,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -4706,24 +4712,24 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/string", - "version": "v6.3.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "53d1a83225002635bca3482fcbf963001313fb68" + "reference": "524aac4a280b90a4420d8d6a040718d0586505ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", - "reference": "53d1a83225002635bca3482fcbf963001313fb68", + "url": "https://api.github.com/repos/symfony/string/zipball/524aac4a280b90a4420d8d6a040718d0586505ac", + "reference": "524aac4a280b90a4420d8d6a040718d0586505ac", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4733,11 +4739,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4776,7 +4782,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.2" + "source": "https://github.com/symfony/string/tree/v7.0.3" }, "funding": [ { @@ -4792,20 +4798,20 @@ "type": "tidelift" } ], - "time": "2023-07-05T08:41:27+00:00" + "time": "2024-01-29T15:41:16+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.4", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" + "reference": "0435a08f69125535336177c29d56af3abc1f69da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", - "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0435a08f69125535336177c29d56af3abc1f69da", + "reference": "0435a08f69125535336177c29d56af3abc1f69da", "shasum": "" }, "require": { @@ -4818,10 +4824,11 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, "bin": [ @@ -4860,7 +4867,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.3" }, "funding": [ { @@ -4876,32 +4883,32 @@ "type": "tidelift" } ], - "time": "2023-08-24T14:51:05+00:00" + "time": "2024-01-23T14:53:30+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", - "version": "0.7.4", + "version": "0.8.4", "source": { "type": "git", "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", - "reference": "abe1f8a5f4635e7cbe0a8a37d6b8d20c687af0f2" + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/abe1f8a5f4635e7cbe0a8a37d6b8d20c687af0f2", - "reference": "abe1f8a5f4635e7cbe0a8a37d6b8d20c687af0f2", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", "shasum": "" }, "require": { - "nikic/php-parser": "^4.15.4", + "nikic/php-parser": "^4.18.0 || ^5.0.0", "php": "^8.1.0", "phpdocumentor/reflection-docblock": "^5.3.0", - "phpunit/phpunit": "^10.1.1", - "symfony/finder": "^6.2.7" + "phpunit/phpunit": "^10.5.5 || ^11.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0" }, "require-dev": { - "laravel/pint": "^1.9.0", - "phpstan/phpstan": "^1.10.13" + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" }, "type": "library", "autoload": { @@ -4933,22 +4940,22 @@ ], "support": { "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", - "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.7.4" + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" }, - "time": "2023-08-03T06:50:14+00:00" + "time": "2024-01-05T14:10:56+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -4977,7 +4984,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -4985,35 +4992,35 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -5025,7 +5032,7 @@ "forward-command": true }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -5057,7 +5064,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { @@ -5069,7 +5076,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { "name": "webmozart/assert", diff --git a/src/Client.php b/src/Client.php index f981270..3c4cceb 100644 --- a/src/Client.php +++ b/src/Client.php @@ -3,9 +3,10 @@ namespace Probots\Pinecone; use Probots\Pinecone\Contracts\ClientContract; +use Probots\Pinecone\Requests\Exceptions\MissingHostException; use Probots\Pinecone\Requests\Index\Vectors\FetchVectors; -use Probots\Pinecone\Resources\CollectionResource; -use Probots\Pinecone\Resources\IndexResource; +use Probots\Pinecone\Resources\ControlResource; +use Probots\Pinecone\Resources\DataResource; use Psr\Http\Message\RequestInterface; use Saloon\Http\Connector; use Saloon\Traits\Plugins\AcceptsJson; @@ -17,13 +18,11 @@ class Client extends Connector implements ClientContract protected ?string $response = Response::class; - /** - * @param string $apiKey - * @param string $environment - */ + protected string $baseUrl = 'https://api.pinecone.io'; + public function __construct( - public string $apiKey, - public string $environment, + public string $apiKey, + public ?string $indexHost = null, ) { // (Temporary) Workaround for https://github.com/probots-io/pinecone-php/issues/3 @@ -34,35 +33,31 @@ public function __construct( }); } - /** - * @return string - */ public function resolveBaseUrl(): string { - return 'https://controller.' . $this->environment . '.pinecone.io'; + return $this->baseUrl; } - /** - * @param string|null $name - * @return IndexResource - */ - public function index(?string $name = null): IndexResource + public function control(): ControlResource { - return new IndexResource($this, $name); + return new ControlResource($this); } /** - * @param string|null $name - * @return CollectionResource + * @throws MissingHostException */ - public function collections(?string $name = null): CollectionResource + public function data(): DataResource { - return new CollectionResource($this, $name); + $this->baseUrl = $this->indexHost; + + if (!$this->indexHost) { + throw new MissingHostException('Index host is missing'); + } + + return new DataResource($this); } - /** - * @return array - */ + protected function defaultHeaders(): array { return [ diff --git a/src/Factory.php b/src/Factory.php index 220f11d..971fa3d 100644 --- a/src/Factory.php +++ b/src/Factory.php @@ -10,9 +10,9 @@ final class Factory private ?string $apiKey = null; /** - * The environment for the requests. + * The host for the Data requests. */ - private ?string $environment = null; + private ?string $host = null; /** @@ -26,11 +26,11 @@ public function withApiKey(string $apiKey): self } /** - * Sets environment for the requests. + * Sets the index host for Data Operations */ - public function withEnvironment(?string $environment): self + public function withHost(?string $host): self { - $this->environment = $environment; + $this->host = $host; return $this; } @@ -41,7 +41,7 @@ public function withEnvironment(?string $environment): self */ public function make(): Client { - return new Client($this->apiKey, $this->environment); + return new Client($this->apiKey, $this->host); } } \ No newline at end of file diff --git a/src/Pinecone.php b/src/Pinecone.php index b5d5a3f..1169cae 100644 --- a/src/Pinecone.php +++ b/src/Pinecone.php @@ -8,11 +8,11 @@ final class Pinecone /** * Creates a new Open AI Client with the given API token. */ - public static function client(string $apiKey, string $environment = null): Client + public static function client(string $apiKey, string $indexHost = null): Client { return self::factory() ->withApiKey($apiKey) - ->withEnvironment($environment) + ->withHost($indexHost) ->make(); } diff --git a/src/Requests/Control/ConfigureIndex.php b/src/Requests/Control/ConfigureIndex.php index 5a7c675..4fbc7b3 100644 --- a/src/Requests/Control/ConfigureIndex.php +++ b/src/Requests/Control/ConfigureIndex.php @@ -2,10 +2,9 @@ namespace Probots\Pinecone\Requests\Index; -use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; /** @@ -23,7 +22,7 @@ * 404 | Index not found. * 500 | Internal error. Can be caused by invalid parameters. */ -class ConfigureIndex extends Request implements HasBody +class ConfigureIndex extends Request { use HasJsonBody; diff --git a/src/Requests/Control/CreateCollection.php b/src/Requests/Control/CreateCollection.php index e464de7..35fce49 100644 --- a/src/Requests/Control/CreateCollection.php +++ b/src/Requests/Control/CreateCollection.php @@ -2,10 +2,9 @@ namespace Probots\Pinecone\Requests\Collections; -use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; /** @@ -22,7 +21,7 @@ * 409 | A collection with the name provided already exists. * 500 | Internal error. Can be caused by invalid parameters. */ -class CreateCollection extends Request implements HasBody +class CreateCollection extends Request { use HasJsonBody; diff --git a/src/Requests/Control/CreateIndex.php b/src/Requests/Control/CreateIndex.php index 71bfdb0..a62e377 100644 --- a/src/Requests/Control/CreateIndex.php +++ b/src/Requests/Control/CreateIndex.php @@ -2,24 +2,14 @@ namespace Probots\Pinecone\Requests\Index; -use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; /** * @link https://docs.pinecone.io/reference/create_index * - * @param string $name - * @param int $dimension - * @param string|null $metric - * @param int|null $pods - * @param int|null $replicas - * @param string|null $pod_type - * @param array|null $metadataConfig - * @param string|null $sourceCollection - * * @response * string "" * @@ -28,73 +18,113 @@ * 409 | Index of given name already exists. * 500 | Internal error. Can be caused by invalid parameters. */ -class CreateIndex extends Request implements HasBody +class CreateIndex extends Request { use HasJsonBody; - /** - * @var Method - */ protected Method $method = Method::POST; - /** - * @param string $name - * @param int $dimension - * @param string|null $metric - * @param int|null $pods - * @param int|null $replicas - * @param string|null $pod_type - * @param array|null $metadataConfig - * @param string|null $sourceCollection - */ + protected string $mode = 'pod'; + + protected string $cloud; + private string $region; + protected ?string $environment; + private ?int $replicas; + private ?string $pod_type; + private ?int $pods; + private ?int $shards; + private ?array $metadataConfig; + private ?string $sourceCollection; + + public function __construct( protected string $name, protected int $dimension, protected ?string $metric = 'cosine', - protected ?int $pods = 1, - protected ?int $replicas = 1, - protected ?string $pod_type = 'p1.x1', - protected ?array $metadataConfig = null, - protected ?string $sourceCollection = null, ) {} - /** - * @return string - */ + public function serverless( + ?string $cloud = 'gcp', + ?string $region = 'us-west-2' + ): self + { + + $this->mode = 'serverless'; + + $this->cloud = $cloud; + $this->region = $region; + + return $this; + } + + public function pod( + ?string $environment = 'us-east1-gcp', + ?int $replicas = 1, + ?string $pod_type = 'p1.x1', + ?int $pods = 1, + ?int $shards = 1, + ?array $metadataConfig = null, + ?string $sourceCollection = null, + ): self + { + $this->mode = 'pod'; + + $this->environment = $environment; + $this->replicas = $replicas; + $this->pod_type = $pod_type; + $this->pods = $pods; + $this->shards = $shards; + $this->metadataConfig = $metadataConfig; + $this->sourceCollection = $sourceCollection; + + return $this; + + } + + public function resolveEndpoint(): string { - return '/databases'; + return '/indexes'; } - /** - * @return array - */ protected function defaultBody(): array { $payload = [ 'name' => $this->name, 'dimension' => $this->dimension, 'metric' => $this->metric, - 'pods' => $this->pods, - 'replicas' => $this->replicas, - 'pod_type' => $this->pod_type, + 'spec' => [], ]; - if ($this->metadataConfig !== null) { - $payload['metadata_config'] = $this->metadataConfig; + if ($this->mode === 'serverless') { + $payload['spec'] = [ + 'cloud' => $this->cloud, + 'region' => $this->region, + ]; } - if ($this->sourceCollection !== null) { - $payload['source_collection'] = $this->sourceCollection; + if ($this->mode === 'pod') { + $payload['spec'] = [ + 'environment' => $this->environment, + 'replicas' => $this->replicas, + 'pod_type' => $this->pod_type, + 'pods' => $this->pods, + 'shards' => $this->shards, + ]; + + if ($this->metadataConfig !== null) { + $payload['spec']['metadata_config'] = $this->metadataConfig; + } + + if ($this->sourceCollection !== null) { + $payload['spec']['source_collection'] = $this->sourceCollection; + } } + return $payload; } - /** - * @param Response $response - * @return bool|null - */ - public function hasRequestFailed(Response $response): ?bool + public function hasRequestFailed(Response|\Saloon\Contracts\Response $response): ?bool { return $response->status() !== 201; } diff --git a/src/Requests/Control/DeleteCollection.php b/src/Requests/Control/DeleteCollection.php index 9f18bd3..0d63db9 100644 --- a/src/Requests/Control/DeleteCollection.php +++ b/src/Requests/Control/DeleteCollection.php @@ -2,9 +2,9 @@ namespace Probots\Pinecone\Requests\Collections; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; /** * @link https://docs.pinecone.io/reference/delete_collection diff --git a/src/Requests/Control/DeleteIndex.php b/src/Requests/Control/DeleteIndex.php index 9f61116..262856f 100644 --- a/src/Requests/Control/DeleteIndex.php +++ b/src/Requests/Control/DeleteIndex.php @@ -2,9 +2,9 @@ namespace Probots\Pinecone\Requests\Index; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; /** * @link https://docs.pinecone.io/reference/delete_index diff --git a/src/Requests/Control/DescribeCollection.php b/src/Requests/Control/DescribeCollection.php index 83e71bd..2276fcc 100644 --- a/src/Requests/Control/DescribeCollection.php +++ b/src/Requests/Control/DescribeCollection.php @@ -2,9 +2,9 @@ namespace Probots\Pinecone\Requests\Collections; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; /** * @link https://docs.pinecone.io/reference/describe_collection diff --git a/src/Requests/Control/DescribeIndex.php b/src/Requests/Control/DescribeIndex.php index 294dc64..174dbcd 100644 --- a/src/Requests/Control/DescribeIndex.php +++ b/src/Requests/Control/DescribeIndex.php @@ -2,9 +2,9 @@ namespace Probots\Pinecone\Requests\Index; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; /** * @link https://docs.pinecone.io/reference/describe_index diff --git a/src/Requests/Control/ListCollections.php b/src/Requests/Control/ListCollections.php index cbc5288..449ec54 100644 --- a/src/Requests/Control/ListCollections.php +++ b/src/Requests/Control/ListCollections.php @@ -2,9 +2,9 @@ namespace Probots\Pinecone\Requests\Collections; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; /** * @link https://docs.pinecone.io/reference/list_collections diff --git a/src/Requests/Control/ListIndexes.php b/src/Requests/Control/ListIndexes.php index 5d239da..aa37f76 100644 --- a/src/Requests/Control/ListIndexes.php +++ b/src/Requests/Control/ListIndexes.php @@ -2,9 +2,9 @@ namespace Probots\Pinecone\Requests\Index; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; /** * @link https://docs.pinecone.io/reference/list_indexes diff --git a/src/Requests/Exceptions/MissingHostException.php b/src/Requests/Exceptions/MissingHostException.php new file mode 100644 index 0000000..248b6eb --- /dev/null +++ b/src/Requests/Exceptions/MissingHostException.php @@ -0,0 +1,9 @@ +name === null) { - throw new MissingNameException('Collection name is required'); - } - } - - /** - * @param string $name - * @param string $source - * @return Response - */ - public function create(string $name, string $source): Response - { - return $this->connector->send(new Collections\CreateCollection($name, $source)); - } - - - /** - * @return Response - * @throws MissingNameException - */ - public function describe(): Response - { - $this->validateName(); - - return $this->connector->send(new Collections\DescribeCollection($this->name)); - } - - /** - * @return Response - */ - public function list(): Response - { - return $this->connector->send(new Collections\ListCollections()); - } - - /** - * @return Response - * @throws MissingNameException - */ - public function delete(): Response - { - $this->validateName(); - - return $this->connector->send(new Collections\DeleteCollection($this->name)); - } -} diff --git a/src/Resources/Control/CollectionResource.php b/src/Resources/Control/CollectionResource.php new file mode 100644 index 0000000..81f8eef --- /dev/null +++ b/src/Resources/Control/CollectionResource.php @@ -0,0 +1,35 @@ +connector->send(new Collections\CreateCollection($name, $source)); + } + + public function describe(): Response + { + return $this->connector->send(new Collections\DescribeCollection()); + } + + public function list(): Response + { + return $this->connector->send(new Collections\ListCollections()); + } + + public function delete(): Response + { + return $this->connector->send(new Collections\DeleteCollection()); + } +} diff --git a/src/Resources/Control/IndexResource.php b/src/Resources/Control/IndexResource.php new file mode 100644 index 0000000..b4d7dce --- /dev/null +++ b/src/Resources/Control/IndexResource.php @@ -0,0 +1,91 @@ +connector->send(new Index\DescribeIndex()); + } + + public function createPod( + string $name, + int $dimension, + null|string $metric = null, + null|string $environment = null, + null|int $replicas = null, + null|string $pod_type = null, + null|int $pods = null, + null|int $shards = null, + null|array $metadataConfig = null, + null|string $sourceCollection = null + ) + { + $request = new Index\CreateIndex( + name: $name, + dimension: $dimension, + metric: $metric, + ); + + return $this->connector->send($request->pod( + environment: $environment, + replicas: $replicas, + pod_type: $pod_type, + pods: $pods, + shards: $shards, + metadataConfig: $metadataConfig, + sourceCollection: $sourceCollection + + )); + } + + public function createServerless( + string $name, + int $dimension, + null|string $metric = null, + null|string $cloud = null, + null|string $region = null + ) + { + + $request = new Index\CreateIndex( + name: $name, + dimension: $dimension, + metric: $metric, + ); + + return $this->connector->send($request->serverless( + cloud: $cloud, + region: $region + )); + + } + + public function list(): Response + { + return $this->connector->send(new Index\ListIndexes()); + } + + public function configure(string $pod_type, int $replicas): Response + { + return $this->connector->send(new Index\ConfigureIndex($replicas, $pod_type)); + } + + public function delete(): Response + { + return $this->connector->send(new Index\DeleteIndex()); + } +} \ No newline at end of file diff --git a/src/Resources/ControlResource.php b/src/Resources/ControlResource.php new file mode 100644 index 0000000..e25825c --- /dev/null +++ b/src/Resources/ControlResource.php @@ -0,0 +1,29 @@ +connector); + } + + public function collections(): CollectionResource + { + return new CollectionResource($this->connector); + } + + +} diff --git a/src/Resources/VectorResource.php b/src/Resources/Data/VectorResource.php similarity index 66% rename from src/Resources/VectorResource.php rename to src/Resources/Data/VectorResource.php index 18f1942..06895de 100644 --- a/src/Resources/VectorResource.php +++ b/src/Resources/Data/VectorResource.php @@ -6,67 +6,33 @@ use Saloon\Contracts\Connector; use Saloon\Contracts\Response; -/** - * - */ class VectorResource extends Resource { - /** - * @param Connector $connector - * @param array $index - */ - public function __construct(protected Connector $connector, protected array $index) + public function __construct(protected Connector $connector) { parent::__construct($connector); } - /** - * @return Response - */ public function stats(): Response { return $this->connector->send(new Vectors\DescribeIndexStats($this->index)); } - /** - * @param string $id - * @param array $values - * @param array $sparseValues - * @param array $setMetadata - * @param string|null $namespace - * @return Response - */ public function update(string $id, array $values = [], array $sparseValues = [], array $setMetadata = [], ?string $namespace = null): Response { - - return $this->connector->send(new Vectors\UpdateVector($this->index, id: $id, values: $values, sparseValues: $sparseValues, setMetadata: $setMetadata, namespace: $namespace)); } - /** - * @param array $vectors - * @param string|null $namespace - * @return Response - */ + public function upsert(array $vectors, ?string $namespace = null): Response { return $this->connector->send(new Vectors\UpsertVectors($this->index, $vectors, $namespace)); } - /** - * @param array $vector - * @param string|null $namespace - * @param array $filter - * @param int $topK - * @param bool $includeMetadata - * @param bool $includeVector - * @param string|null $id - * @return Response - */ public function query( array $vector = [], ?string $namespace = null, @@ -80,13 +46,6 @@ public function query( return $this->connector->send(new Vectors\QueryVectors($this->index, vector: $vector, namespace: $namespace, filter: $filter, topK: $topK, includeMetadata: $includeMetadata, includeVector: $includeVector, id: $id)); } - /** - * @param array $ids - * @param string|null $namespace - * @param bool $deleteAll - * @param array $filter - * @return Response - */ public function delete( array $ids = [], ?string $namespace = null, @@ -97,11 +56,6 @@ public function delete( return $this->connector->send(new Vectors\DeleteVectors($this->index, ids: $ids, namespace: $namespace, deleteAll: $deleteAll, filter: $filter)); } - /** - * @param array $ids - * @param string|null $namespace - * @return Response - */ public function fetch(array $ids, ?string $namespace = null): Response { return $this->connector->send(new Vectors\FetchVectors($this->index, ids: $ids, namespace: $namespace)); diff --git a/src/Resources/DataResource.php b/src/Resources/DataResource.php new file mode 100644 index 0000000..26039e8 --- /dev/null +++ b/src/Resources/DataResource.php @@ -0,0 +1,20 @@ +connector); + } + +} diff --git a/src/Resources/IndexResource.php b/src/Resources/IndexResource.php deleted file mode 100644 index 00d83a1..0000000 --- a/src/Resources/IndexResource.php +++ /dev/null @@ -1,136 +0,0 @@ -validateName(); - $this->maybeDescribeIndex(); - - return new VectorResource($this->connector, $this->index); - } - - /** - * @throws MissingNameException - */ - private function validateName() - { - if ($this->name === null) { - throw new MissingNameException('Index name is required'); - } - } - - /** - * @return void - * @throws MissingNameException - */ - private function maybeDescribeIndex(): void - { - if ($this->index === null) { - $this->index = $this->describe()->json(); - } - } - - /** - * @throws MissingNameException - */ - public function describe(): Response - { - $this->validateName(); - - return $this->connector->send(new Index\DescribeIndex($this->name)); - } - - /** - * @param string $name - * @param int $dimension - * @param string|null $metric - * @param int|null $pods - * @param int|null $replicas - * @param string|null $pod_type - * @param array|null $metadataConfig - * @param string|null $sourceCollection - * @return Response - */ - public function create( - string $name, - int $dimension, - null|string $metric = null, - null|int $pods = null, - null|int $replicas = null, - null|string $pod_type = null, - null|array $metadataConfig = null, - null|string $sourceCollection = null - ): Response - { - return $this->connector->send(new Index\CreateIndex( - name: $name, - dimension: $dimension, - metric: $metric, - pods: $pods, - replicas: $replicas, - pod_type: $pod_type, - metadataConfig: $metadataConfig, - sourceCollection: $sourceCollection - )); - } - - /** - * @return Response - */ - public function list(): Response - { - return $this->connector->send(new Index\ListIndexes()); - } - - /** - * @param string $pod_type - * @param int $replicas - * @return Response - * - * @throws MissingNameException - */ - public function configure(string $pod_type, int $replicas): Response - { - $this->validateName(); - - return $this->connector->send(new Index\ConfigureIndex($this->name, $replicas, $pod_type)); - } - - /** - * @return Response - * @throws MissingNameException - */ - public function delete(): Response - { - $this->validateName(); - - return $this->connector->send(new Index\DeleteIndex($this->name)); - } -} \ No newline at end of file diff --git a/src/Resources/Resource.php b/src/Resources/Resource.php index 08b4a29..db40daf 100644 --- a/src/Resources/Resource.php +++ b/src/Resources/Resource.php @@ -6,9 +6,6 @@ class Resource { - /** - * @param Connector $connector - */ public function __construct(protected Connector $connector) { // From cb3e2d80bc11174629716a3e5726150a45937baf Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Wed, 21 Feb 2024 11:30:36 +0100 Subject: [PATCH 4/9] rebuild other index functions --- src/Requests/Control/ConfigureIndex.php | 10 +++++++--- src/Requests/Control/DeleteIndex.php | 4 ++-- src/Requests/Control/DescribeIndex.php | 2 +- src/Requests/Control/ListIndexes.php | 14 +++----------- src/Resources/Control/IndexResource.php | 25 ++++++++++++++++--------- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/Requests/Control/ConfigureIndex.php b/src/Requests/Control/ConfigureIndex.php index 4fbc7b3..fa877c4 100644 --- a/src/Requests/Control/ConfigureIndex.php +++ b/src/Requests/Control/ConfigureIndex.php @@ -47,7 +47,7 @@ public function __construct( */ public function resolveEndpoint(): string { - return '/databases/' . $this->name; + return '/indexes/' . $this->name; } /** @@ -56,8 +56,12 @@ public function resolveEndpoint(): string protected function defaultBody(): array { return [ - 'replicas' => $this->replicas, - 'pod_type' => $this->pod_type, + 'spec' => [ + 'pod' => [ + 'replicas' => $this->replicas, + 'pod_type' => $this->pod_type, + ], + ] ]; } diff --git a/src/Requests/Control/DeleteIndex.php b/src/Requests/Control/DeleteIndex.php index 262856f..b604ab9 100644 --- a/src/Requests/Control/DeleteIndex.php +++ b/src/Requests/Control/DeleteIndex.php @@ -23,7 +23,7 @@ class DeleteIndex extends Request /** * @var Method */ - protected Method $method = Method::POST; + protected Method $method = Method::DELETE; /** * @param string $name @@ -37,7 +37,7 @@ public function __construct( */ public function resolveEndpoint(): string { - return '/databases/' . $this->name; + return '/indexes/' . $this->name; } /** diff --git a/src/Requests/Control/DescribeIndex.php b/src/Requests/Control/DescribeIndex.php index 174dbcd..cff1979 100644 --- a/src/Requests/Control/DescribeIndex.php +++ b/src/Requests/Control/DescribeIndex.php @@ -52,7 +52,7 @@ public function __construct( */ public function resolveEndpoint(): string { - return '/databases/' . $this->name; + return '/indexes/' . $this->name; } /** diff --git a/src/Requests/Control/ListIndexes.php b/src/Requests/Control/ListIndexes.php index aa37f76..31f1219 100644 --- a/src/Requests/Control/ListIndexes.php +++ b/src/Requests/Control/ListIndexes.php @@ -14,23 +14,15 @@ */ class ListIndexes extends Request { - /** - * @var Method - */ + protected Method $method = Method::GET; - /** - * @return string - */ + public function resolveEndpoint(): string { - return '/databases'; + return '/indexes'; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Resources/Control/IndexResource.php b/src/Resources/Control/IndexResource.php index b4d7dce..b68c9b4 100644 --- a/src/Resources/Control/IndexResource.php +++ b/src/Resources/Control/IndexResource.php @@ -15,10 +15,9 @@ public function __construct(protected Connector $connector) parent::__construct($connector); } - - public function describe(): Response + public function list(): Response { - return $this->connector->send(new Index\DescribeIndex()); + return $this->connector->send(new Index\ListIndexes()); } public function createPod( @@ -74,18 +73,26 @@ public function createServerless( } - public function list(): Response + + public function describe(string $name): Response { - return $this->connector->send(new Index\ListIndexes()); + return $this->connector->send(new Index\DescribeIndex( + name: $name + )); } - public function configure(string $pod_type, int $replicas): Response + public function configure(string $name, string $pod_type, int $replicas): Response { - return $this->connector->send(new Index\ConfigureIndex($replicas, $pod_type)); + return $this->connector->send(new Index\ConfigureIndex( + name: $name, + replicas: $replicas, + pod_type: $pod_type)); } - public function delete(): Response + public function delete(string $name): Response { - return $this->connector->send(new Index\DeleteIndex()); + return $this->connector->send(new Index\DeleteIndex( + name: $name + )); } } \ No newline at end of file From ac6dd2cf64cafd56c241769b605e4d1c03379b91 Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Wed, 21 Feb 2024 11:41:37 +0100 Subject: [PATCH 5/9] collections & rm doc blocks --- src/Requests/Control/ConfigureIndex.php | 20 ++------------------ src/Requests/Control/CreateCollection.php | 15 +-------------- src/Requests/Control/DeleteCollection.php | 14 +------------- src/Requests/Control/DeleteIndex.php | 13 ------------- src/Requests/Control/DescribeCollection.php | 16 +++------------- src/Requests/Control/DescribeIndex.php | 14 +------------- src/Requests/Control/ListCollections.php | 10 ---------- src/Requests/Control/ListIndexes.php | 1 - 8 files changed, 8 insertions(+), 95 deletions(-) diff --git a/src/Requests/Control/ConfigureIndex.php b/src/Requests/Control/ConfigureIndex.php index fa877c4..6a011e4 100644 --- a/src/Requests/Control/ConfigureIndex.php +++ b/src/Requests/Control/ConfigureIndex.php @@ -26,33 +26,21 @@ class ConfigureIndex extends Request { use HasJsonBody; - /** - * @var Method - */ protected Method $method = Method::PATCH; - /** - * @param string $name - * @param int $replicas - * @param string $pod_type - */ + public function __construct( protected string $name, protected int $replicas, protected string $pod_type ) {} - /** - * @return string - */ + public function resolveEndpoint(): string { return '/indexes/' . $this->name; } - /** - * @return array - */ protected function defaultBody(): array { return [ @@ -65,10 +53,6 @@ protected function defaultBody(): array ]; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 202; diff --git a/src/Requests/Control/CreateCollection.php b/src/Requests/Control/CreateCollection.php index 35fce49..0c4ad4a 100644 --- a/src/Requests/Control/CreateCollection.php +++ b/src/Requests/Control/CreateCollection.php @@ -30,26 +30,17 @@ class CreateCollection extends Request */ protected Method $method = Method::POST; - /** - * @param string $name - * @param string $source - */ + public function __construct( protected string $name, protected string $source, ) {} - /** - * @return string - */ public function resolveEndpoint(): string { return '/collections'; } - /** - * @return array - */ protected function defaultBody(): array { return [ @@ -58,10 +49,6 @@ protected function defaultBody(): array ]; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 201; diff --git a/src/Requests/Control/DeleteCollection.php b/src/Requests/Control/DeleteCollection.php index 0d63db9..9866495 100644 --- a/src/Requests/Control/DeleteCollection.php +++ b/src/Requests/Control/DeleteCollection.php @@ -20,30 +20,18 @@ */ class DeleteCollection extends Request { - /** - * @var Method - */ + protected Method $method = Method::DELETE; - /** - * @param string $name - */ public function __construct( protected string $name ) {} - /** - * @return string - */ public function resolveEndpoint(): string { return '/collections/' . $this->name; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 202; diff --git a/src/Requests/Control/DeleteIndex.php b/src/Requests/Control/DeleteIndex.php index b604ab9..7024cd1 100644 --- a/src/Requests/Control/DeleteIndex.php +++ b/src/Requests/Control/DeleteIndex.php @@ -20,30 +20,17 @@ */ class DeleteIndex extends Request { - /** - * @var Method - */ protected Method $method = Method::DELETE; - /** - * @param string $name - */ public function __construct( protected string $name, ) {} - /** - * @return string - */ public function resolveEndpoint(): string { return '/indexes/' . $this->name; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 202; diff --git a/src/Requests/Control/DescribeCollection.php b/src/Requests/Control/DescribeCollection.php index 2276fcc..c81fbc8 100644 --- a/src/Requests/Control/DescribeCollection.php +++ b/src/Requests/Control/DescribeCollection.php @@ -23,30 +23,20 @@ */ class DescribeCollection extends Request { - /** - * @var Method - */ + protected Method $method = Method::GET; - /** - * @param string $name - */ + public function __construct( protected string $name ) {} - /** - * @return string - */ + public function resolveEndpoint(): string { return '/collections/' . $this->name; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Requests/Control/DescribeIndex.php b/src/Requests/Control/DescribeIndex.php index cff1979..10851c1 100644 --- a/src/Requests/Control/DescribeIndex.php +++ b/src/Requests/Control/DescribeIndex.php @@ -35,30 +35,18 @@ */ class DescribeIndex extends Request { - /** - * @var Method - */ + protected Method $method = Method::GET; - /** - * @param string $name - */ public function __construct( protected string $name, ) {} - /** - * @return string - */ public function resolveEndpoint(): string { return '/indexes/' . $this->name; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Requests/Control/ListCollections.php b/src/Requests/Control/ListCollections.php index 449ec54..1aedaeb 100644 --- a/src/Requests/Control/ListCollections.php +++ b/src/Requests/Control/ListCollections.php @@ -14,23 +14,13 @@ */ class ListCollections extends Request { - /** - * @var Method - */ protected Method $method = Method::GET; - /** - * @return string - */ public function resolveEndpoint(): string { return '/collections'; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Requests/Control/ListIndexes.php b/src/Requests/Control/ListIndexes.php index 31f1219..59ba2ce 100644 --- a/src/Requests/Control/ListIndexes.php +++ b/src/Requests/Control/ListIndexes.php @@ -17,7 +17,6 @@ class ListIndexes extends Request protected Method $method = Method::GET; - public function resolveEndpoint(): string { return '/indexes'; From 261569a5417b63574764982c3f40b2190a906372 Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Wed, 21 Feb 2024 12:16:45 +0100 Subject: [PATCH 6/9] fixed src phpstan errors --- phpstan.neon | 2 +- src/Client.php | 1 + src/Requests/Control/ConfigureIndex.php | 12 --- src/Requests/Control/CreateCollection.php | 14 ---- src/Requests/Control/CreateIndex.php | 10 +-- src/Requests/Control/DeleteCollection.php | 9 --- src/Requests/Control/DeleteIndex.php | 9 --- src/Requests/Control/DescribeCollection.php | 12 --- src/Requests/Control/DescribeIndex.php | 24 ------ src/Requests/Control/ListCollections.php | 3 - src/Requests/Control/ListIndexes.php | 3 - src/Requests/Data/DeleteVectors.php | 42 +---------- src/Requests/Data/DescribeIndexStats.php | 77 -------------------- src/Requests/Data/FetchVectors.php | 43 +---------- src/Requests/Data/GetIndexStats.php | 40 ++++++++++ src/Requests/Data/QueryVectors.php | 62 +--------------- src/Requests/Data/UpdateVector.php | 38 +--------- src/Requests/Data/UpsertVectors.php | 34 +-------- src/Resources/Control/CollectionResource.php | 23 ++++-- src/Resources/Control/IndexResource.php | 6 +- src/Resources/ControlResource.php | 8 +- src/Resources/Data/VectorResource.php | 20 ++--- src/Resources/DataResource.php | 4 +- src/Resources/Resource.php | 4 +- 24 files changed, 89 insertions(+), 411 deletions(-) delete mode 100644 src/Requests/Data/DescribeIndexStats.php create mode 100644 src/Requests/Data/GetIndexStats.php diff --git a/phpstan.neon b/phpstan.neon index 13022a6..b866a03 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,4 +2,4 @@ parameters: level: 5 paths: - src - - tests \ No newline at end of file +# - tests \ No newline at end of file diff --git a/src/Client.php b/src/Client.php index 3c4cceb..d326f15 100644 --- a/src/Client.php +++ b/src/Client.php @@ -26,6 +26,7 @@ public function __construct( ) { // (Temporary) Workaround for https://github.com/probots-io/pinecone-php/issues/3 + /* @phpstan-ignore-next-line */ $this->sender()->addMiddleware(function (callable $handler) { return function (RequestInterface $request, array $options) use ($handler) { return $handler(FetchVectors::queryIdsWorkaround($request), $options); diff --git a/src/Requests/Control/ConfigureIndex.php b/src/Requests/Control/ConfigureIndex.php index 6a011e4..593c934 100644 --- a/src/Requests/Control/ConfigureIndex.php +++ b/src/Requests/Control/ConfigureIndex.php @@ -9,18 +9,6 @@ /** * @link https://docs.pinecone.io/reference/configure_index - * - * @param string $name - * @param int $replicas - * @param string $pod_type - * - * @response - * string "" - * - * @error_codes - * 400 | Bad request,not enough quota. - * 404 | Index not found. - * 500 | Internal error. Can be caused by invalid parameters. */ class ConfigureIndex extends Request { diff --git a/src/Requests/Control/CreateCollection.php b/src/Requests/Control/CreateCollection.php index 0c4ad4a..3ded92c 100644 --- a/src/Requests/Control/CreateCollection.php +++ b/src/Requests/Control/CreateCollection.php @@ -9,25 +9,11 @@ /** * @link https://docs.pinecone.io/reference/create_collection - * - * @param string $name - * @param string $source - * - * @response - * string "" - * - * @error_codes - * 400 | Bad request. Request exceeds quota or collection name is invalid. - * 409 | A collection with the name provided already exists. - * 500 | Internal error. Can be caused by invalid parameters. */ class CreateCollection extends Request { use HasJsonBody; - /** - * @var Method - */ protected Method $method = Method::POST; diff --git a/src/Requests/Control/CreateIndex.php b/src/Requests/Control/CreateIndex.php index a62e377..f7bc399 100644 --- a/src/Requests/Control/CreateIndex.php +++ b/src/Requests/Control/CreateIndex.php @@ -9,14 +9,6 @@ /** * @link https://docs.pinecone.io/reference/create_index - * - * @response - * string "" - * - * @error_codes - * 400 | Bad request. Encountered when request exceeds quota or an invalid index name. - * 409 | Index of given name already exists. - * 500 | Internal error. Can be caused by invalid parameters. */ class CreateIndex extends Request { @@ -124,7 +116,7 @@ protected function defaultBody(): array return $payload; } - public function hasRequestFailed(Response|\Saloon\Contracts\Response $response): ?bool + public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 201; } diff --git a/src/Requests/Control/DeleteCollection.php b/src/Requests/Control/DeleteCollection.php index 9866495..b3a9e71 100644 --- a/src/Requests/Control/DeleteCollection.php +++ b/src/Requests/Control/DeleteCollection.php @@ -8,15 +8,6 @@ /** * @link https://docs.pinecone.io/reference/delete_collection - * - * @param string $name - * - * @response - * string "" - * - * @error_codes - * 404 | Collection not found. - * 500 | Internal error. Can be caused by invalid parameters. */ class DeleteCollection extends Request { diff --git a/src/Requests/Control/DeleteIndex.php b/src/Requests/Control/DeleteIndex.php index 7024cd1..f1b8e0c 100644 --- a/src/Requests/Control/DeleteIndex.php +++ b/src/Requests/Control/DeleteIndex.php @@ -8,15 +8,6 @@ /** * @link https://docs.pinecone.io/reference/delete_index - * - * @param string $name - * - * @response - * string "" - * - * @error_codes - * 404 | Index not found. - * 500 | Internal error. Can be caused by invalid parameters. */ class DeleteIndex extends Request { diff --git a/src/Requests/Control/DescribeCollection.php b/src/Requests/Control/DescribeCollection.php index c81fbc8..021cfa7 100644 --- a/src/Requests/Control/DescribeCollection.php +++ b/src/Requests/Control/DescribeCollection.php @@ -8,18 +8,6 @@ /** * @link https://docs.pinecone.io/reference/describe_collection - * - * @param string $name - * - * @response - * object - * name | string - * size | integer - * status | string - * - * @error_codes - * 404 | Collection not found. - * 500 | Internal error. Can be caused by invalid parameters. */ class DescribeCollection extends Request { diff --git a/src/Requests/Control/DescribeIndex.php b/src/Requests/Control/DescribeIndex.php index 10851c1..8387904 100644 --- a/src/Requests/Control/DescribeIndex.php +++ b/src/Requests/Control/DescribeIndex.php @@ -8,30 +8,6 @@ /** * @link https://docs.pinecone.io/reference/describe_index - * - * @param string $name - * - * @response - * object - * database | object - * name | string - * dimension | string - * metric | string - * pods | integer - * replicas | integer - * shards | integer - * pod_type | string - * index_config | object - * k_bits | integer - * hybrid | boolean - * metadata_config | object - * status | object - * ready | boolean - * state | string | Initializing ScalingUp ScalingDown Terminating Ready - * - * @error_codes - * 404 | Index not found. - * 500 | Internal error. Can be caused by invalid parameters. */ class DescribeIndex extends Request { diff --git a/src/Requests/Control/ListCollections.php b/src/Requests/Control/ListCollections.php index 1aedaeb..44a04f1 100644 --- a/src/Requests/Control/ListCollections.php +++ b/src/Requests/Control/ListCollections.php @@ -8,9 +8,6 @@ /** * @link https://docs.pinecone.io/reference/list_collections - * - * @response - * array of strings "$collectionName" */ class ListCollections extends Request { diff --git a/src/Requests/Control/ListIndexes.php b/src/Requests/Control/ListIndexes.php index 59ba2ce..e5d3eb6 100644 --- a/src/Requests/Control/ListIndexes.php +++ b/src/Requests/Control/ListIndexes.php @@ -8,9 +8,6 @@ /** * @link https://docs.pinecone.io/reference/list_indexes - * - * @response - * array of strings "$indexName" */ class ListIndexes extends Request { diff --git a/src/Requests/Data/DeleteVectors.php b/src/Requests/Data/DeleteVectors.php index f340d24..57155c9 100644 --- a/src/Requests/Data/DeleteVectors.php +++ b/src/Requests/Data/DeleteVectors.php @@ -3,66 +3,32 @@ namespace Probots\Pinecone\Requests\Index\Vectors; use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; /** * @link https://docs.pinecone.io/reference/delete_post - * - * @param array $index - * @param array $ids - * @param string|null $namespace - * @param bool $deleteAll - * @param array $filter - * - * @response - * object (empty) - * - * @error_response - * object - * code | integer - * message | string - * details | array of objects - * typeUrl | string - * value | string */ class DeleteVectors extends Request implements HasBody { use HasJsonBody; - /** - * @var Method - */ protected Method $method = Method::DELETE; - /** - * @param array $index - * @param array $ids - * @param string|null $namespace - * @param bool $deleteAll - * @param array $filter - */ public function __construct( - protected array $index, protected array $ids = [], protected ?string $namespace = null, protected bool $deleteAll = false, protected array $filter = [] ) {} - /** - * @return string - */ public function resolveEndpoint(): string { - return 'https://' . $this->index['status']['host'] . '/vectors/delete'; + return '/vectors/delete'; } - /** - * @return bool[] - */ protected function defaultBody(): array { $payload = [ @@ -84,10 +50,6 @@ protected function defaultBody(): array return $payload; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Requests/Data/DescribeIndexStats.php b/src/Requests/Data/DescribeIndexStats.php deleted file mode 100644 index d4ace8c..0000000 --- a/src/Requests/Data/DescribeIndexStats.php +++ /dev/null @@ -1,77 +0,0 @@ -index['status']['host'] . '/describe_index_stats'; - } - - /** - * @return array - */ - protected function defaultBody(): array - { - $payload = []; - - if (count($this->filter) > 0) { - $payload['filter'] = $this->filter; - } - return $payload; - } - - /** - * @param Response $response - * @return bool|null - */ - public function hasRequestFailed(Response $response): ?bool - { - return $response->status() !== 200; - } -} diff --git a/src/Requests/Data/FetchVectors.php b/src/Requests/Data/FetchVectors.php index aef5f80..7ba3d06 100644 --- a/src/Requests/Data/FetchVectors.php +++ b/src/Requests/Data/FetchVectors.php @@ -4,54 +4,27 @@ use GuzzleHttp\Psr7\Query; use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; use Saloon\Traits\RequestProperties\HasQuery; /** * @link https://docs.pinecone.io/reference/fetch - * - * @param array $index - * @param array $ids - * @param string|null $namespace - * - * @response - * - * - * @error_response - * object - * code | integer - * message | string - * details | array of objects - * typeUrl | string - * value | string */ class FetchVectors extends Request implements HasBody { use HasJsonBody, HasQuery; - /** - * @var Method - */ protected Method $method = Method::GET; - /** - * @param array $index - * @param array $ids - * @param string|null $namespace - */ public function __construct( - protected array $index, protected array $ids, protected ?string $namespace = null, ) {} /** - * @param $request - * @return \GuzzleHttp\Psr7\Request - * * This is a workaround for https://github.com/probots-io/pinecone-php/issues/3 * It remaps ids[]=1&ids[]=2 to ids=1&ids=2 */ @@ -68,9 +41,6 @@ public static function queryIdsWorkaround($request): \GuzzleHttp\Psr7\Request return $request; } - /** - * @return array|mixed[] - */ protected function defaultQuery(): array { // $payload = [ @@ -85,23 +55,14 @@ protected function defaultQuery(): array $payload['namespace'] = $this->namespace; } -// dd(\GuzzleHttp\Psr7\Query::build(["ids" => $this->ids])); - return $payload; } - /** - * @return string - */ public function resolveEndpoint(): string { - return 'https://' . $this->index['status']['host'] . '/vectors/fetch'; + return '/vectors/fetch'; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Requests/Data/GetIndexStats.php b/src/Requests/Data/GetIndexStats.php new file mode 100644 index 0000000..0d73cd7 --- /dev/null +++ b/src/Requests/Data/GetIndexStats.php @@ -0,0 +1,40 @@ +filter) > 0) { + $payload['filter'] = $this->filter; + } + return $payload; + } + + + public function hasRequestFailed(Response $response): ?bool + { + return $response->status() !== 200; + } +} diff --git a/src/Requests/Data/QueryVectors.php b/src/Requests/Data/QueryVectors.php index 5809d84..06475e2 100644 --- a/src/Requests/Data/QueryVectors.php +++ b/src/Requests/Data/QueryVectors.php @@ -3,91 +3,41 @@ namespace Probots\Pinecone\Requests\Index\Vectors; use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; /** * @link https://docs.pinecone.io/reference/query - * - * @param array $index - * @param array $vector - * @param string|null $namespace - * @param array $filter - * @param int $topK - * @param bool $includeMetadata - * @param bool $includeVector - * @param string|null $id - * - * @response - * object - * matches | array of objects - * id | string - * score | float - * values | array of floats - * sparseValues | object - * indices | array of integers - * values | array of floats - * metadata | object - * namespace | string - * - * @error_response - * object - * code | integer - * message | string - * details | array of objects - * typeUrl | string - * value | string */ class QueryVectors extends Request implements HasBody { use HasJsonBody; - /** - * @var Method - */ protected Method $method = Method::POST; - - /** - * @param array $index - * @param array $vector - * @param string|null $namespace - * @param array $filter - * @param int $topK - * @param bool $includeMetadata - * @param bool $includeVector - * @param string|null $id - */ public function __construct( - protected array $index, protected array $vector = [], protected ?string $namespace = null, protected array $filter = [], protected int $topK = 10, protected bool $includeMetadata = true, - protected bool $includeVector = false, + protected bool $includeValues = false, protected ?string $id = null, ) {} - /** - * @return string - */ public function resolveEndpoint(): string { - return 'https://' . $this->index['status']['host'] . '/query'; + return '/query'; } - /** - * @return array - */ protected function defaultBody(): array { $payload = [ 'topK' => $this->topK, 'includeMetadata' => $this->includeMetadata, - 'includeVector' => $this->includeVector, + 'includeValues' => $this->includeValues, ]; if (count($this->vector) > 0) { @@ -110,10 +60,6 @@ protected function defaultBody(): array return $payload; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Requests/Data/UpdateVector.php b/src/Requests/Data/UpdateVector.php index 5322b4f..8d2f91e 100644 --- a/src/Requests/Data/UpdateVector.php +++ b/src/Requests/Data/UpdateVector.php @@ -3,44 +3,21 @@ namespace Probots\Pinecone\Requests\Index\Vectors; use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; /** * @link https://docs.pinecone.io/reference/update - * - * @response - * object (empty) - * - * @error_response - * object - * code | integer - * message | string - * details | array of objects - * typeUrl | string - * value | string */ class UpdateVector extends Request implements HasBody { use HasJsonBody; - /** - * @var Method - */ protected Method $method = Method::POST; - /** - * @param array $index - * @param string $id - * @param array $values - * @param array $sparseValues - * @param array $setMetadata - * @param string|null $namespace - */ public function __construct( - protected array $index, protected string $id, protected array $values = [], protected array $sparseValues = [], @@ -48,9 +25,6 @@ public function __construct( protected ?string $namespace = null, ) {} - /** - * @return string[] - */ protected function defaultBody(): array { $payload = [ @@ -76,19 +50,11 @@ protected function defaultBody(): array return $payload; } - - /** - * @return string - */ public function resolveEndpoint(): string { - return 'https://' . $this->index['status']['host'] . '/vectors/update'; + return '/vectors/update'; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Requests/Data/UpsertVectors.php b/src/Requests/Data/UpsertVectors.php index 1dbb08d..02416a9 100644 --- a/src/Requests/Data/UpsertVectors.php +++ b/src/Requests/Data/UpsertVectors.php @@ -3,56 +3,30 @@ namespace Probots\Pinecone\Requests\Index\Vectors; use Saloon\Contracts\Body\HasBody; -use Saloon\Contracts\Response; use Saloon\Enums\Method; use Saloon\Http\Request; +use Saloon\Http\Response; use Saloon\Traits\Body\HasJsonBody; /** * @link https://docs.pinecone.io/reference/upsert - * - * @response - * object (empty) - * - * @error_response - * object - * code | integer - * message | string - * details | array of objects - * typeUrl | string - * value | string */ class UpsertVectors extends Request implements HasBody { use HasJsonBody; - /** - * @var Method - */ protected Method $method = Method::POST; - /** - * @param array $index - * @param array $vectors - * @param string|null $namespace - */ public function __construct( - protected array $index, protected array $vectors = [], protected ?string $namespace = null, ) {} - /** - * @return string - */ public function resolveEndpoint(): string { - return 'https://' . $this->index['status']['host'] . '/vectors/upsert'; + return '/vectors/upsert'; } - /** - * @return array[] - */ protected function defaultBody(): array { @@ -66,10 +40,6 @@ protected function defaultBody(): array return $payload; } - /** - * @param Response $response - * @return bool|null - */ public function hasRequestFailed(Response $response): ?bool { return $response->status() !== 200; diff --git a/src/Resources/Control/CollectionResource.php b/src/Resources/Control/CollectionResource.php index 81f8eef..2ba87f9 100644 --- a/src/Resources/Control/CollectionResource.php +++ b/src/Resources/Control/CollectionResource.php @@ -2,25 +2,30 @@ namespace Probots\Pinecone\Resources; +use Probots\Pinecone\Client; use Probots\Pinecone\Requests\Collections; -use Saloon\Contracts\Connector; -use Saloon\Contracts\Response; +use Saloon\Http\Response; class CollectionResource extends Resource { - public function __construct(protected Connector $connector) + public function __construct(protected Client $connector) { parent::__construct($connector); } public function create(string $name, string $source): Response { - return $this->connector->send(new Collections\CreateCollection($name, $source)); + return $this->connector->send(new Collections\CreateCollection( + name: $name, + source: $source + )); } - public function describe(): Response + public function describe(string $name): Response { - return $this->connector->send(new Collections\DescribeCollection()); + return $this->connector->send(new Collections\DescribeCollection( + name: $name + )); } public function list(): Response @@ -28,8 +33,10 @@ public function list(): Response return $this->connector->send(new Collections\ListCollections()); } - public function delete(): Response + public function delete(string $name): Response { - return $this->connector->send(new Collections\DeleteCollection()); + return $this->connector->send(new Collections\DeleteCollection( + name: $name + )); } } diff --git a/src/Resources/Control/IndexResource.php b/src/Resources/Control/IndexResource.php index b68c9b4..39cbe32 100644 --- a/src/Resources/Control/IndexResource.php +++ b/src/Resources/Control/IndexResource.php @@ -2,15 +2,15 @@ namespace Probots\Pinecone\Resources; +use Probots\Pinecone\Client; use Probots\Pinecone\Requests\Index; -use Saloon\Contracts\Connector; -use Saloon\Contracts\Response; +use Saloon\Http\Response; class IndexResource extends Resource { protected ?array $index = null; - public function __construct(protected Connector $connector) + public function __construct(protected Client $connector) { parent::__construct($connector); } diff --git a/src/Resources/ControlResource.php b/src/Resources/ControlResource.php index e25825c..3e5af51 100644 --- a/src/Resources/ControlResource.php +++ b/src/Resources/ControlResource.php @@ -2,15 +2,11 @@ namespace Probots\Pinecone\Resources; -use Saloon\Contracts\Connector; +use Probots\Pinecone\Client; class ControlResource extends Resource { - /** - * @param Connector $connector - * @param string|null $name - */ - public function __construct(protected Connector $connector) + public function __construct(protected Client $connector) { parent::__construct($connector); } diff --git a/src/Resources/Data/VectorResource.php b/src/Resources/Data/VectorResource.php index 06895de..c8e6c32 100644 --- a/src/Resources/Data/VectorResource.php +++ b/src/Resources/Data/VectorResource.php @@ -2,20 +2,20 @@ namespace Probots\Pinecone\Resources; +use Probots\Pinecone\Client; use Probots\Pinecone\Requests\Index\Vectors; -use Saloon\Contracts\Connector; -use Saloon\Contracts\Response; +use Saloon\Http\Response; class VectorResource extends Resource { - public function __construct(protected Connector $connector) + public function __construct(protected Client $connector) { parent::__construct($connector); } public function stats(): Response { - return $this->connector->send(new Vectors\DescribeIndexStats($this->index)); + return $this->connector->send(new Vectors\GetIndexStats()); } public function update(string $id, @@ -24,13 +24,13 @@ public function update(string $id, array $setMetadata = [], ?string $namespace = null): Response { - return $this->connector->send(new Vectors\UpdateVector($this->index, id: $id, values: $values, sparseValues: $sparseValues, setMetadata: $setMetadata, namespace: $namespace)); + return $this->connector->send(new Vectors\UpdateVector(id: $id, values: $values, sparseValues: $sparseValues, setMetadata: $setMetadata, namespace: $namespace)); } public function upsert(array $vectors, ?string $namespace = null): Response { - return $this->connector->send(new Vectors\UpsertVectors($this->index, $vectors, $namespace)); + return $this->connector->send(new Vectors\UpsertVectors($vectors, $namespace)); } public function query( @@ -39,11 +39,11 @@ public function query( array $filter = [], int $topK = 3, bool $includeMetadata = true, - bool $includeVector = false, + bool $includeValues = false, ?string $id = null ): Response { - return $this->connector->send(new Vectors\QueryVectors($this->index, vector: $vector, namespace: $namespace, filter: $filter, topK: $topK, includeMetadata: $includeMetadata, includeVector: $includeVector, id: $id)); + return $this->connector->send(new Vectors\QueryVectors(vector: $vector, namespace: $namespace, filter: $filter, topK: $topK, includeMetadata: $includeMetadata, includeValues: $includeValues, id: $id)); } public function delete( @@ -53,11 +53,11 @@ public function delete( array $filter = [] ): Response { - return $this->connector->send(new Vectors\DeleteVectors($this->index, ids: $ids, namespace: $namespace, deleteAll: $deleteAll, filter: $filter)); + return $this->connector->send(new Vectors\DeleteVectors(ids: $ids, namespace: $namespace, deleteAll: $deleteAll, filter: $filter)); } public function fetch(array $ids, ?string $namespace = null): Response { - return $this->connector->send(new Vectors\FetchVectors($this->index, ids: $ids, namespace: $namespace)); + return $this->connector->send(new Vectors\FetchVectors(ids: $ids, namespace: $namespace)); } } \ No newline at end of file diff --git a/src/Resources/DataResource.php b/src/Resources/DataResource.php index 26039e8..6878a97 100644 --- a/src/Resources/DataResource.php +++ b/src/Resources/DataResource.php @@ -3,11 +3,11 @@ namespace Probots\Pinecone\Resources; -use Saloon\Contracts\Connector; +use Probots\Pinecone\Client; class DataResource extends Resource { - public function __construct(protected Connector $connector) + public function __construct(protected Client $connector) { parent::__construct($connector); } diff --git a/src/Resources/Resource.php b/src/Resources/Resource.php index db40daf..e4ae9f2 100644 --- a/src/Resources/Resource.php +++ b/src/Resources/Resource.php @@ -2,11 +2,11 @@ namespace Probots\Pinecone\Resources; -use Saloon\Contracts\Connector; +use Probots\Pinecone\Client; class Resource { - public function __construct(protected Connector $connector) + public function __construct(protected Client $connector) { // } From 31b019b1480591916e6cc5c20f539173e2998ee3 Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Wed, 21 Feb 2024 14:02:25 +0100 Subject: [PATCH 7/9] control tests --- src/Client.php | 2 +- src/Requests/Control/ConfigureIndex.php | 7 ++- src/Requests/Control/CreateCollection.php | 5 +- src/Requests/Control/CreateIndex.php | 62 +++++++++++-------- src/Requests/Control/DeleteCollection.php | 2 +- src/Requests/Control/DeleteIndex.php | 2 +- src/Requests/Control/DescribeCollection.php | 2 +- src/Requests/Control/DescribeIndex.php | 2 +- src/Requests/Control/ListCollections.php | 2 +- src/Requests/Control/ListIndexes.php | 2 +- src/Requests/Data/DeleteVectors.php | 2 +- src/Requests/Data/FetchVectors.php | 2 +- src/Requests/Data/GetIndexStats.php | 2 +- src/Requests/Data/QueryVectors.php | 2 +- src/Requests/Data/UpdateVector.php | 2 +- src/Requests/Data/UpsertVectors.php | 2 +- src/Resources/Control/CollectionResource.php | 27 ++++---- src/Resources/Control/IndexResource.php | 43 ++++++------- src/Resources/ControlResource.php | 8 +-- src/Resources/Data/VectorResource.php | 39 +++++++++--- src/Resources/DataResource.php | 4 +- tests/Feature/Collections/CreateTest.php | 13 ---- tests/Feature/Collections/DeleteTest.php | 20 ------ tests/Feature/Collections/DescribeTest.php | 21 ------- tests/Feature/Collections/ListTest.php | 12 ---- tests/Feature/Control/ConfigureIndexTest.php | 15 +++++ .../Feature/Control/CreateCollectionTest.php | 14 +++++ tests/Feature/Control/CreateIndexTest.php | 27 ++++++++ .../Feature/Control/DeleteCollectionTest.php | 12 ++++ tests/Feature/Control/DeleteIndexTest.php | 23 +++++++ .../Control/DescribeCollectionTest.php | 12 ++++ tests/Feature/Control/DescribeIndexTest.php | 13 ++++ tests/Feature/Control/ListCollectionsTest.php | 13 ++++ tests/Feature/Control/ListIndexesTest.php | 11 ++++ .../{Index/Vectors => Data}/DeleteTest.php | 0 .../Vectors => Data}/DescribeStatsTest.php | 0 .../{Index/Vectors => Data}/FetchTest.php | 0 .../{Index/Vectors => Data}/QueryTest.php | 0 .../{Index/Vectors => Data}/UpdateTest.php | 0 .../{Index/Vectors => Data}/UpsertTest.php | 0 tests/Feature/Index/ConfigureTest.php | 26 -------- tests/Feature/Index/CreateTest.php | 14 ----- tests/Feature/Index/DeleteTest.php | 20 ------ tests/Feature/Index/DescribeTest.php | 21 ------- tests/Feature/Index/ListTest.php | 11 ---- tests/Fixtures/Saloon/collections.all.json | 1 - tests/Fixtures/Saloon/collections.create.json | 1 - tests/Fixtures/Saloon/collections.delete.json | 1 - .../Fixtures/Saloon/collections.describe.json | 1 - .../Saloon/control.configureindex.json | 16 +++++ .../Saloon/control.createcollection.json | 16 +++++ .../Saloon/control.createindex.pod.json | 16 +++++ .../control.createindex.serverless.json | 16 +++++ .../Saloon/control.deletecollection.json | 16 +++++ .../Saloon/control.deleteindex.pod.json | 16 +++++ .../control.deleteindex.serverless.json | 16 +++++ .../Saloon/control.describecollection.json | 16 +++++ .../Saloon/control.describeindex.json | 16 +++++ .../Saloon/control.listcollections.json | 16 +++++ .../Fixtures/Saloon/control.listindexes.json | 16 +++++ tests/Fixtures/Saloon/index.all.json | 1 - tests/Fixtures/Saloon/index.configure.json | 1 - tests/Fixtures/Saloon/index.create.json | 1 - tests/Fixtures/Saloon/index.delete.json | 1 - tests/Fixtures/Saloon/index.describe.json | 1 - .../index.describemultiple-vectors.json | 1 - .../Saloon/index.describeone-vector.json | 1 - .../Fixtures/Saloon/index.vectors.delete.json | 1 - .../Saloon/index.vectors.describestats.json | 1 - .../Fixtures/Saloon/index.vectors.fetch.json | 1 - .../index.vectors.fetchmultiple-vectors.json | 1 - .../Saloon/index.vectors.fetchone-vector.json | 1 - .../Fixtures/Saloon/index.vectors.query.json | 1 - .../Fixtures/Saloon/index.vectors.update.json | 1 - .../Fixtures/Saloon/index.vectors.upsert.json | 1 - tests/Pest.php | 6 +- 76 files changed, 445 insertions(+), 275 deletions(-) delete mode 100644 tests/Feature/Collections/CreateTest.php delete mode 100644 tests/Feature/Collections/DeleteTest.php delete mode 100644 tests/Feature/Collections/DescribeTest.php delete mode 100644 tests/Feature/Collections/ListTest.php create mode 100644 tests/Feature/Control/ConfigureIndexTest.php create mode 100644 tests/Feature/Control/CreateCollectionTest.php create mode 100644 tests/Feature/Control/CreateIndexTest.php create mode 100644 tests/Feature/Control/DeleteCollectionTest.php create mode 100644 tests/Feature/Control/DeleteIndexTest.php create mode 100644 tests/Feature/Control/DescribeCollectionTest.php create mode 100644 tests/Feature/Control/DescribeIndexTest.php create mode 100644 tests/Feature/Control/ListCollectionsTest.php create mode 100644 tests/Feature/Control/ListIndexesTest.php rename tests/Feature/{Index/Vectors => Data}/DeleteTest.php (100%) rename tests/Feature/{Index/Vectors => Data}/DescribeStatsTest.php (100%) rename tests/Feature/{Index/Vectors => Data}/FetchTest.php (100%) rename tests/Feature/{Index/Vectors => Data}/QueryTest.php (100%) rename tests/Feature/{Index/Vectors => Data}/UpdateTest.php (100%) rename tests/Feature/{Index/Vectors => Data}/UpsertTest.php (100%) delete mode 100644 tests/Feature/Index/ConfigureTest.php delete mode 100644 tests/Feature/Index/CreateTest.php delete mode 100644 tests/Feature/Index/DeleteTest.php delete mode 100644 tests/Feature/Index/DescribeTest.php delete mode 100644 tests/Feature/Index/ListTest.php delete mode 100644 tests/Fixtures/Saloon/collections.all.json delete mode 100644 tests/Fixtures/Saloon/collections.create.json delete mode 100644 tests/Fixtures/Saloon/collections.delete.json delete mode 100644 tests/Fixtures/Saloon/collections.describe.json create mode 100644 tests/Fixtures/Saloon/control.configureindex.json create mode 100644 tests/Fixtures/Saloon/control.createcollection.json create mode 100644 tests/Fixtures/Saloon/control.createindex.pod.json create mode 100644 tests/Fixtures/Saloon/control.createindex.serverless.json create mode 100644 tests/Fixtures/Saloon/control.deletecollection.json create mode 100644 tests/Fixtures/Saloon/control.deleteindex.pod.json create mode 100644 tests/Fixtures/Saloon/control.deleteindex.serverless.json create mode 100644 tests/Fixtures/Saloon/control.describecollection.json create mode 100644 tests/Fixtures/Saloon/control.describeindex.json create mode 100644 tests/Fixtures/Saloon/control.listcollections.json create mode 100644 tests/Fixtures/Saloon/control.listindexes.json delete mode 100644 tests/Fixtures/Saloon/index.all.json delete mode 100644 tests/Fixtures/Saloon/index.configure.json delete mode 100644 tests/Fixtures/Saloon/index.create.json delete mode 100644 tests/Fixtures/Saloon/index.delete.json delete mode 100644 tests/Fixtures/Saloon/index.describe.json delete mode 100644 tests/Fixtures/Saloon/index.describemultiple-vectors.json delete mode 100644 tests/Fixtures/Saloon/index.describeone-vector.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.delete.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.describestats.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.fetch.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.fetchmultiple-vectors.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.fetchone-vector.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.query.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.update.json delete mode 100644 tests/Fixtures/Saloon/index.vectors.upsert.json diff --git a/src/Client.php b/src/Client.php index d326f15..0b51678 100644 --- a/src/Client.php +++ b/src/Client.php @@ -3,8 +3,8 @@ namespace Probots\Pinecone; use Probots\Pinecone\Contracts\ClientContract; +use Probots\Pinecone\Requests\Data\FetchVectors; use Probots\Pinecone\Requests\Exceptions\MissingHostException; -use Probots\Pinecone\Requests\Index\Vectors\FetchVectors; use Probots\Pinecone\Resources\ControlResource; use Probots\Pinecone\Resources\DataResource; use Psr\Http\Message\RequestInterface; diff --git a/src/Requests/Control/ConfigureIndex.php b/src/Requests/Control/ConfigureIndex.php index 593c934..2ab6087 100644 --- a/src/Requests/Control/ConfigureIndex.php +++ b/src/Requests/Control/ConfigureIndex.php @@ -1,7 +1,8 @@ status() !== 202; + return $response->status() >= 202; } } \ No newline at end of file diff --git a/src/Requests/Control/CreateCollection.php b/src/Requests/Control/CreateCollection.php index 3ded92c..51cde52 100644 --- a/src/Requests/Control/CreateCollection.php +++ b/src/Requests/Control/CreateCollection.php @@ -1,7 +1,8 @@ mode = 'pod'; @@ -84,35 +85,42 @@ protected function defaultBody(): array $payload = [ 'name' => $this->name, 'dimension' => $this->dimension, - 'metric' => $this->metric, - 'spec' => [], + 'metric' => $this->metric ?? 'cosine', ]; + $spec = []; + if ($this->mode === 'serverless') { - $payload['spec'] = [ - 'cloud' => $this->cloud, - 'region' => $this->region, + $spec = [ + 'serverless' => [ + 'cloud' => $this->cloud ?? 'aws', + 'region' => $this->region ?? 'us-west-2', + ] ]; } if ($this->mode === 'pod') { - $payload['spec'] = [ - 'environment' => $this->environment, - 'replicas' => $this->replicas, - 'pod_type' => $this->pod_type, - 'pods' => $this->pods, - 'shards' => $this->shards, + $spec = [ + 'pod' => [ + 'environment' => $this->environment ?? 'us-east1-gcp', + 'replicas' => $this->replicas ?? 1, + 'pod_type' => $this->pod_type ?? 'p1.x1', + 'pods' => $this->pods ?? 1, + 'shards' => $this->shards ?? 1, + ] ]; if ($this->metadataConfig !== null) { - $payload['spec']['metadata_config'] = $this->metadataConfig; + $spec['pod']['metadata_config'] = $this->metadataConfig; } if ($this->sourceCollection !== null) { - $payload['spec']['source_collection'] = $this->sourceCollection; + $spec['pod']['source_collection'] = $this->sourceCollection; } } + $payload['spec'] = $spec; + return $payload; } diff --git a/src/Requests/Control/DeleteCollection.php b/src/Requests/Control/DeleteCollection.php index b3a9e71..27ca717 100644 --- a/src/Requests/Control/DeleteCollection.php +++ b/src/Requests/Control/DeleteCollection.php @@ -1,6 +1,6 @@ connector->send(new Collections\CreateCollection( - name: $name, + return $this->connector->send(new Control\CreateCollection( + name: $this->name, source: $source )); } - public function describe(string $name): Response + public function describe(): Response { - return $this->connector->send(new Collections\DescribeCollection( - name: $name + return $this->connector->send(new Control\DescribeCollection( + name: $this->name )); } public function list(): Response { - return $this->connector->send(new Collections\ListCollections()); + return $this->connector->send(new Control\ListCollections()); } - public function delete(string $name): Response + public function delete(): Response { - return $this->connector->send(new Collections\DeleteCollection( - name: $name + return $this->connector->send(new Control\DeleteCollection( + name: $this->name )); } } diff --git a/src/Resources/Control/IndexResource.php b/src/Resources/Control/IndexResource.php index 39cbe32..f06a004 100644 --- a/src/Resources/Control/IndexResource.php +++ b/src/Resources/Control/IndexResource.php @@ -1,27 +1,27 @@ connector->send(new Index\ListIndexes()); + return $this->connector->send(new Control\ListIndexes()); } public function createPod( - string $name, int $dimension, null|string $metric = null, null|string $environment = null, @@ -31,10 +31,10 @@ public function createPod( null|int $shards = null, null|array $metadataConfig = null, null|string $sourceCollection = null - ) + ): Response { - $request = new Index\CreateIndex( - name: $name, + $request = new Control\CreateIndex( + name: $this->name, dimension: $dimension, metric: $metric, ); @@ -52,16 +52,15 @@ public function createPod( } public function createServerless( - string $name, int $dimension, null|string $metric = null, null|string $cloud = null, null|string $region = null - ) + ): Response { - $request = new Index\CreateIndex( - name: $name, + $request = new Control\CreateIndex( + name: $this->name, dimension: $dimension, metric: $metric, ); @@ -70,29 +69,27 @@ public function createServerless( cloud: $cloud, region: $region )); - } - - public function describe(string $name): Response + public function describe(): Response { - return $this->connector->send(new Index\DescribeIndex( - name: $name + return $this->connector->send(new Control\DescribeIndex( + name: $this->name )); } - public function configure(string $name, string $pod_type, int $replicas): Response + public function configure(string $pod_type, int $replicas): Response { - return $this->connector->send(new Index\ConfigureIndex( - name: $name, + return $this->connector->send(new Control\ConfigureIndex( + name: $this->name, replicas: $replicas, pod_type: $pod_type)); } - public function delete(string $name): Response + public function delete(): Response { - return $this->connector->send(new Index\DeleteIndex( - name: $name + return $this->connector->send(new Control\DeleteIndex( + name: $this->name )); } } \ No newline at end of file diff --git a/src/Resources/ControlResource.php b/src/Resources/ControlResource.php index 3e5af51..0316515 100644 --- a/src/Resources/ControlResource.php +++ b/src/Resources/ControlResource.php @@ -11,14 +11,14 @@ public function __construct(protected Client $connector) parent::__construct($connector); } - public function index(): IndexResource + public function index(?string $name = null): Control\IndexResource { - return new IndexResource($this->connector); + return new Control\IndexResource($this->connector, $name); } - public function collections(): CollectionResource + public function collection(?string $name = null): Control\CollectionResource { - return new CollectionResource($this->connector); + return new Control\CollectionResource($this->connector, $name); } diff --git a/src/Resources/Data/VectorResource.php b/src/Resources/Data/VectorResource.php index c8e6c32..9fc63fb 100644 --- a/src/Resources/Data/VectorResource.php +++ b/src/Resources/Data/VectorResource.php @@ -1,9 +1,10 @@ connector->send(new Vectors\GetIndexStats()); + return $this->connector->send(new Data\GetIndexStats()); } public function update(string $id, @@ -24,13 +25,19 @@ public function update(string $id, array $setMetadata = [], ?string $namespace = null): Response { - return $this->connector->send(new Vectors\UpdateVector(id: $id, values: $values, sparseValues: $sparseValues, setMetadata: $setMetadata, namespace: $namespace)); + return $this->connector->send(new Data\UpdateVector( + id: $id, + values: $values, + sparseValues: $sparseValues, + setMetadata: $setMetadata, + namespace: $namespace + )); } public function upsert(array $vectors, ?string $namespace = null): Response { - return $this->connector->send(new Vectors\UpsertVectors($vectors, $namespace)); + return $this->connector->send(new Data\UpsertVectors($vectors, $namespace)); } public function query( @@ -43,7 +50,15 @@ public function query( ?string $id = null ): Response { - return $this->connector->send(new Vectors\QueryVectors(vector: $vector, namespace: $namespace, filter: $filter, topK: $topK, includeMetadata: $includeMetadata, includeValues: $includeValues, id: $id)); + return $this->connector->send(new Data\QueryVectors( + vector: $vector, + namespace: $namespace, + filter: $filter, + topK: $topK, + includeMetadata: $includeMetadata, + includeValues: $includeValues, + id: $id + )); } public function delete( @@ -53,11 +68,19 @@ public function delete( array $filter = [] ): Response { - return $this->connector->send(new Vectors\DeleteVectors(ids: $ids, namespace: $namespace, deleteAll: $deleteAll, filter: $filter)); + return $this->connector->send(new Data\DeleteVectors( + ids: $ids, + namespace: $namespace, + deleteAll: $deleteAll, + filter: $filter + )); } public function fetch(array $ids, ?string $namespace = null): Response { - return $this->connector->send(new Vectors\FetchVectors(ids: $ids, namespace: $namespace)); + return $this->connector->send(new Data\FetchVectors( + ids: $ids, + namespace: $namespace + )); } } \ No newline at end of file diff --git a/src/Resources/DataResource.php b/src/Resources/DataResource.php index 6878a97..f2c91c4 100644 --- a/src/Resources/DataResource.php +++ b/src/Resources/DataResource.php @@ -12,9 +12,9 @@ public function __construct(protected Client $connector) parent::__construct($connector); } - public function vectors(): VectorResource + public function vectors(): Data\VectorResource { - return new VectorResource($this->connector); + return new Data\VectorResource($this->connector); } } diff --git a/tests/Feature/Collections/CreateTest.php b/tests/Feature/Collections/CreateTest.php deleted file mode 100644 index 9ed78d0..0000000 --- a/tests/Feature/Collections/CreateTest.php +++ /dev/null @@ -1,13 +0,0 @@ -collections()->create( - name: getCollectionName(), - source: getIndexName() - ); - - expect($response->status())->toBe(201); -}); \ No newline at end of file diff --git a/tests/Feature/Collections/DeleteTest.php b/tests/Feature/Collections/DeleteTest.php deleted file mode 100644 index 31397a2..0000000 --- a/tests/Feature/Collections/DeleteTest.php +++ /dev/null @@ -1,20 +0,0 @@ -collections(getCollectionName())->delete(); - - expect($response->status())->toBe(202); - -}); - -it('throws missing name exception', function () { - - $client = getClient(true); - $client->collections()->delete(); - -})->throws(MissingNameException::class); diff --git a/tests/Feature/Collections/DescribeTest.php b/tests/Feature/Collections/DescribeTest.php deleted file mode 100644 index a53dedf..0000000 --- a/tests/Feature/Collections/DescribeTest.php +++ /dev/null @@ -1,21 +0,0 @@ -collections(getCollectionName())->describe(); - - expect($response->status())->toBe(200) - ->and($response->json('name'))->toBe(getCollectionName()); - -}); - -it('throws missing name exception', function () { - - $client = getClient(true); - $client->collections()->describe(); - -})->throws(MissingNameException::class); diff --git a/tests/Feature/Collections/ListTest.php b/tests/Feature/Collections/ListTest.php deleted file mode 100644 index 68b1729..0000000 --- a/tests/Feature/Collections/ListTest.php +++ /dev/null @@ -1,12 +0,0 @@ -collections()->list(); - - expect($response->status())->toBe(200) - ->and($response->json('0'))->toBe(getCollectionName()); - -}); \ No newline at end of file diff --git a/tests/Feature/Control/ConfigureIndexTest.php b/tests/Feature/Control/ConfigureIndexTest.php new file mode 100644 index 0000000..0259c47 --- /dev/null +++ b/tests/Feature/Control/ConfigureIndexTest.php @@ -0,0 +1,15 @@ +control()->index($index)->configure( + pod_type: 'p1.x1', + replicas: 1 + ); + + expect($response->status())->toBe(200); + +}); \ No newline at end of file diff --git a/tests/Feature/Control/CreateCollectionTest.php b/tests/Feature/Control/CreateCollectionTest.php new file mode 100644 index 0000000..3046a3b --- /dev/null +++ b/tests/Feature/Control/CreateCollectionTest.php @@ -0,0 +1,14 @@ +control()->collection($collection)->create( + source: $index + ); + + expect($response->status())->toBe(201); +}); \ No newline at end of file diff --git a/tests/Feature/Control/CreateIndexTest.php b/tests/Feature/Control/CreateIndexTest.php new file mode 100644 index 0000000..c71c936 --- /dev/null +++ b/tests/Feature/Control/CreateIndexTest.php @@ -0,0 +1,27 @@ +control()->index($index)->createPod( + dimension: 128 + ); + + expect($response->status())->toBe(201); + +}); + +it('can create an index (serverless)', function () { + + $client = getClient(true, '.serverless'); + $index = getIndexName('-serverless'); + + $response = $client->control()->index($index)->createServerless( + dimension: 128 + ); + + expect($response->status())->toBe(201); + +}); \ No newline at end of file diff --git a/tests/Feature/Control/DeleteCollectionTest.php b/tests/Feature/Control/DeleteCollectionTest.php new file mode 100644 index 0000000..dcbb97c --- /dev/null +++ b/tests/Feature/Control/DeleteCollectionTest.php @@ -0,0 +1,12 @@ +control()->collection($collection)->delete(); + + expect($response->status())->toBe(202); + +}); \ No newline at end of file diff --git a/tests/Feature/Control/DeleteIndexTest.php b/tests/Feature/Control/DeleteIndexTest.php new file mode 100644 index 0000000..aa989ea --- /dev/null +++ b/tests/Feature/Control/DeleteIndexTest.php @@ -0,0 +1,23 @@ +control()->index($index)->delete(); + + expect($response->status())->toBe(202); + +}); + +it('can delete an index (serverless)', function () { + + $client = getClient(true, '.serverless'); + $index = getIndexName('-serverless'); + + $response = $client->control()->index($index)->delete(); + + expect($response->status())->toBe(202); + +}); \ No newline at end of file diff --git a/tests/Feature/Control/DescribeCollectionTest.php b/tests/Feature/Control/DescribeCollectionTest.php new file mode 100644 index 0000000..ac13f77 --- /dev/null +++ b/tests/Feature/Control/DescribeCollectionTest.php @@ -0,0 +1,12 @@ +control()->collection($collection)->describe(); + + expect($response->status())->toBe(200) + ->and($response->json('name'))->toBe($collection); + +}); diff --git a/tests/Feature/Control/DescribeIndexTest.php b/tests/Feature/Control/DescribeIndexTest.php new file mode 100644 index 0000000..de2e05f --- /dev/null +++ b/tests/Feature/Control/DescribeIndexTest.php @@ -0,0 +1,13 @@ +control()->index($index)->describe(); + + expect($response->status())->toBe(200) + ->and($response->json('name'))->toBe($index); + +}); \ No newline at end of file diff --git a/tests/Feature/Control/ListCollectionsTest.php b/tests/Feature/Control/ListCollectionsTest.php new file mode 100644 index 0000000..87c1714 --- /dev/null +++ b/tests/Feature/Control/ListCollectionsTest.php @@ -0,0 +1,13 @@ +control()->collection()->list(); + + expect($response->status())->toBe(200) + ->and($response->json('collections.0.name'))->toBe($collection); + +}); \ No newline at end of file diff --git a/tests/Feature/Control/ListIndexesTest.php b/tests/Feature/Control/ListIndexesTest.php new file mode 100644 index 0000000..188b014 --- /dev/null +++ b/tests/Feature/Control/ListIndexesTest.php @@ -0,0 +1,11 @@ +control()->index()->list(); + + expect($response->status())->toBe(200) + ->and($response->json('indexes.0.name'))->toBe($index); +}); \ No newline at end of file diff --git a/tests/Feature/Index/Vectors/DeleteTest.php b/tests/Feature/Data/DeleteTest.php similarity index 100% rename from tests/Feature/Index/Vectors/DeleteTest.php rename to tests/Feature/Data/DeleteTest.php diff --git a/tests/Feature/Index/Vectors/DescribeStatsTest.php b/tests/Feature/Data/DescribeStatsTest.php similarity index 100% rename from tests/Feature/Index/Vectors/DescribeStatsTest.php rename to tests/Feature/Data/DescribeStatsTest.php diff --git a/tests/Feature/Index/Vectors/FetchTest.php b/tests/Feature/Data/FetchTest.php similarity index 100% rename from tests/Feature/Index/Vectors/FetchTest.php rename to tests/Feature/Data/FetchTest.php diff --git a/tests/Feature/Index/Vectors/QueryTest.php b/tests/Feature/Data/QueryTest.php similarity index 100% rename from tests/Feature/Index/Vectors/QueryTest.php rename to tests/Feature/Data/QueryTest.php diff --git a/tests/Feature/Index/Vectors/UpdateTest.php b/tests/Feature/Data/UpdateTest.php similarity index 100% rename from tests/Feature/Index/Vectors/UpdateTest.php rename to tests/Feature/Data/UpdateTest.php diff --git a/tests/Feature/Index/Vectors/UpsertTest.php b/tests/Feature/Data/UpsertTest.php similarity index 100% rename from tests/Feature/Index/Vectors/UpsertTest.php rename to tests/Feature/Data/UpsertTest.php diff --git a/tests/Feature/Index/ConfigureTest.php b/tests/Feature/Index/ConfigureTest.php deleted file mode 100644 index 9fd971e..0000000 --- a/tests/Feature/Index/ConfigureTest.php +++ /dev/null @@ -1,26 +0,0 @@ -index(getIndexName())->configure( - pod_type: 'p1.x1', - replicas: 1 - ); - - expect($response->status())->toBe(202); - -}); - -it('throws missing name exception', function () { - - $client = getClient(true); - $client->index()->configure( - pod_type: 'p1.x1', - replicas: 1 - ); - -})->throws(MissingNameException::class); diff --git a/tests/Feature/Index/CreateTest.php b/tests/Feature/Index/CreateTest.php deleted file mode 100644 index b23e328..0000000 --- a/tests/Feature/Index/CreateTest.php +++ /dev/null @@ -1,14 +0,0 @@ -index()->create( - name: getIndexName(), - dimension: 128 - ); - - expect($response->status())->toBe(201); - -}); \ No newline at end of file diff --git a/tests/Feature/Index/DeleteTest.php b/tests/Feature/Index/DeleteTest.php deleted file mode 100644 index ec3e1c7..0000000 --- a/tests/Feature/Index/DeleteTest.php +++ /dev/null @@ -1,20 +0,0 @@ -index(getIndexName())->delete(); - - expect($response->status())->toBe(202); - -}); - -it('throws missing name exception', function () { - - $client = getClient(true); - $client->index()->delete(); - -})->throws(MissingNameException::class); diff --git a/tests/Feature/Index/DescribeTest.php b/tests/Feature/Index/DescribeTest.php deleted file mode 100644 index b3758e9..0000000 --- a/tests/Feature/Index/DescribeTest.php +++ /dev/null @@ -1,21 +0,0 @@ -index(getIndexName())->describe(); - - expect($response->status())->toBe(200) - ->and($response->json('database.name'))->toBe(getIndexName()); - -}); - -it('throws missing name exception', function () { - - $client = getClient(true); - $client->index()->describe(); - -})->throws(MissingNameException::class); diff --git a/tests/Feature/Index/ListTest.php b/tests/Feature/Index/ListTest.php deleted file mode 100644 index 0ab2a91..0000000 --- a/tests/Feature/Index/ListTest.php +++ /dev/null @@ -1,11 +0,0 @@ -index()->list(); - - expect($response->status())->toBe(200) - ->and($response->json('0'))->toBe(getIndexName()); -}); \ No newline at end of file diff --git a/tests/Fixtures/Saloon/collections.all.json b/tests/Fixtures/Saloon/collections.all.json deleted file mode 100644 index f7c15d8..0000000 --- a/tests/Fixtures/Saloon/collections.all.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json; charset=UTF-8","date":"Fri, 14 Apr 2023 19:43:19 GMT","x-envoy-upstream-service-time":"19","content-length":"25","server":"envoy"},"data":"[\"pinecone-collect-php\"]\n"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/collections.create.json b/tests/Fixtures/Saloon/collections.create.json deleted file mode 100644 index 8eaeebc..0000000 --- a/tests/Fixtures/Saloon/collections.create.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":201,"headers":{"date":"Fri, 14 Apr 2023 19:37:08 GMT","x-envoy-upstream-service-time":"69","content-length":"0","server":"envoy"},"data":""} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/collections.delete.json b/tests/Fixtures/Saloon/collections.delete.json deleted file mode 100644 index 45b413c..0000000 --- a/tests/Fixtures/Saloon/collections.delete.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":202,"headers":{"date":"Fri, 14 Apr 2023 19:44:42 GMT","x-envoy-upstream-service-time":"42","content-length":"0","server":"envoy"},"data":""} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/collections.describe.json b/tests/Fixtures/Saloon/collections.describe.json deleted file mode 100644 index b60fdd6..0000000 --- a/tests/Fixtures/Saloon/collections.describe.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json; charset=UTF-8","date":"Fri, 14 Apr 2023 19:42:12 GMT","x-envoy-upstream-service-time":"17","content-length":"79","server":"envoy"},"data":"{\"name\":\"pinecone-collect-php\",\"status\":\"Ready\",\"size\":3152292,\"dimension\":10}\n"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.configureindex.json b/tests/Fixtures/Saloon/control.configureindex.json new file mode 100644 index 0000000..aceb941 --- /dev/null +++ b/tests/Fixtures/Saloon/control.configureindex.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "33e8e6bfbed5c8d1fd933402d1451ed0", + "Date": "Wed, 21 Feb 2024 12:42:10 GMT", + "Server": "Google Frontend", + "Content-Length": "272", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-test-php-pod\",\"metric\":\"cosine\",\"dimension\":128,\"status\":{\"ready\":true,\"state\":\"Ready\"},\"host\":\"pinecone-test-php-pod-1eyib7n.svc.us-east1-gcp.pinecone.io\",\"spec\":{\"pod\":{\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"p1.x1\",\"environment\":\"us-east1-gcp\"}}}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.createcollection.json b/tests/Fixtures/Saloon/control.createcollection.json new file mode 100644 index 0000000..f1c707f --- /dev/null +++ b/tests/Fixtures/Saloon/control.createcollection.json @@ -0,0 +1,16 @@ +{ + "statusCode": 201, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "7f4e4520a2ae4769ab1fbfe6eabf146c", + "Date": "Wed, 21 Feb 2024 12:58:14 GMT", + "Server": "Google Frontend", + "Content-Length": "100", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-collect-php\",\"status\":\"Initializing\",\"dimension\":128,\"environment\":\"us-east1-gcp\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.createindex.pod.json b/tests/Fixtures/Saloon/control.createindex.pod.json new file mode 100644 index 0000000..1244013 --- /dev/null +++ b/tests/Fixtures/Saloon/control.createindex.pod.json @@ -0,0 +1,16 @@ +{ + "statusCode": 201, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "768db942908eaade97b7eb711db2f47e", + "Date": "Wed, 21 Feb 2024 12:41:09 GMT", + "Server": "Google Frontend", + "Content-Length": "280", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-test-php-pod\",\"metric\":\"cosine\",\"dimension\":128,\"status\":{\"ready\":false,\"state\":\"Initializing\"},\"host\":\"pinecone-test-php-pod-1eyib7n.svc.us-east1-gcp.pinecone.io\",\"spec\":{\"pod\":{\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"p1.x1\",\"environment\":\"us-east1-gcp\"}}}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.createindex.serverless.json b/tests/Fixtures/Saloon/control.createindex.serverless.json new file mode 100644 index 0000000..fbeea08 --- /dev/null +++ b/tests/Fixtures/Saloon/control.createindex.serverless.json @@ -0,0 +1,16 @@ +{ + "statusCode": 201, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "3a12fd99438e751d384b3ba3ece5e8d7", + "Date": "Wed, 21 Feb 2024 12:36:34 GMT", + "Server": "Google Frontend", + "Content-Length": "257", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-test-php-serverless\",\"metric\":\"cosine\",\"dimension\":128,\"status\":{\"ready\":false,\"state\":\"Initializing\"},\"host\":\"pinecone-test-php-serverless-1eyib7n.svc.apw5-4e34-81fa.pinecone.io\",\"spec\":{\"serverless\":{\"region\":\"us-west-2\",\"cloud\":\"aws\"}}}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.deletecollection.json b/tests/Fixtures/Saloon/control.deletecollection.json new file mode 100644 index 0000000..9c1dddd --- /dev/null +++ b/tests/Fixtures/Saloon/control.deletecollection.json @@ -0,0 +1,16 @@ +{ + "statusCode": 202, + "headers": { + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "afd45735b8a9b7770a481ae9fc0b359b", + "Date": "Wed, 21 Feb 2024 13:01:07 GMT", + "Content-Type": "text\/html", + "Server": "Google Frontend", + "Content-Length": "0", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.deleteindex.pod.json b/tests/Fixtures/Saloon/control.deleteindex.pod.json new file mode 100644 index 0000000..cedb1ca --- /dev/null +++ b/tests/Fixtures/Saloon/control.deleteindex.pod.json @@ -0,0 +1,16 @@ +{ + "statusCode": 202, + "headers": { + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "3bc4c27ae4963a5f23c5707e59780037", + "Date": "Wed, 21 Feb 2024 12:38:13 GMT", + "Content-Type": "text\/html", + "Server": "Google Frontend", + "Content-Length": "0", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.deleteindex.serverless.json b/tests/Fixtures/Saloon/control.deleteindex.serverless.json new file mode 100644 index 0000000..2926d5a --- /dev/null +++ b/tests/Fixtures/Saloon/control.deleteindex.serverless.json @@ -0,0 +1,16 @@ +{ + "statusCode": 202, + "headers": { + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "ec9168a56b44d9697d318974f1c9cd55", + "Date": "Wed, 21 Feb 2024 12:36:36 GMT", + "Content-Type": "text\/html", + "Server": "Google Frontend", + "Content-Length": "0", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.describecollection.json b/tests/Fixtures/Saloon/control.describecollection.json new file mode 100644 index 0000000..a97d165 --- /dev/null +++ b/tests/Fixtures/Saloon/control.describecollection.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "a0b654de73c70263a886e66862c3753e", + "Date": "Wed, 21 Feb 2024 12:59:08 GMT", + "Server": "Google Frontend", + "Content-Length": "84", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-collect-php\",\"status\":\"Initializing\",\"environment\":\"us-east1-gcp\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.describeindex.json b/tests/Fixtures/Saloon/control.describeindex.json new file mode 100644 index 0000000..624bc95 --- /dev/null +++ b/tests/Fixtures/Saloon/control.describeindex.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "f7101fcdfd4c206ed51c280d80738ad5", + "Date": "Wed, 21 Feb 2024 12:48:44 GMT", + "Server": "Google Frontend", + "Content-Length": "272", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-test-php-pod\",\"metric\":\"cosine\",\"dimension\":128,\"status\":{\"ready\":true,\"state\":\"Ready\"},\"host\":\"pinecone-test-php-pod-1eyib7n.svc.us-east1-gcp.pinecone.io\",\"spec\":{\"pod\":{\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"p1.x1\",\"environment\":\"us-east1-gcp\"}}}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.listcollections.json b/tests/Fixtures/Saloon/control.listcollections.json new file mode 100644 index 0000000..d2a9228 --- /dev/null +++ b/tests/Fixtures/Saloon/control.listcollections.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "a7ab6825d3b7fc59e64ce530a21a9099", + "Date": "Wed, 21 Feb 2024 12:59:47 GMT", + "Server": "Google Frontend", + "Content-Length": "126", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"collections\":[{\"name\":\"pinecone-collect-php\",\"size\":3100581,\"status\":\"Ready\",\"dimension\":128,\"environment\":\"us-east1-gcp\"}]}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.listindexes.json b/tests/Fixtures/Saloon/control.listindexes.json new file mode 100644 index 0000000..66062d2 --- /dev/null +++ b/tests/Fixtures/Saloon/control.listindexes.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "6dfd73a9df04763ec8559902b552283e", + "Date": "Wed, 21 Feb 2024 12:46:37 GMT", + "Server": "Google Frontend", + "Content-Length": "286", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"indexes\":[{\"name\":\"pinecone-test-php-pod\",\"metric\":\"cosine\",\"dimension\":128,\"status\":{\"ready\":true,\"state\":\"Ready\"},\"host\":\"pinecone-test-php-pod-1eyib7n.svc.us-east1-gcp.pinecone.io\",\"spec\":{\"pod\":{\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"p1.x1\",\"environment\":\"us-east1-gcp\"}}}]}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.all.json b/tests/Fixtures/Saloon/index.all.json deleted file mode 100644 index 8464d97..0000000 --- a/tests/Fixtures/Saloon/index.all.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json; charset=UTF-8","date":"Fri, 14 Apr 2023 10:21:15 GMT","x-envoy-upstream-service-time":"1069","content-length":"17","server":"envoy"},"data":"[\"pinecone-php\"]\n"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.configure.json b/tests/Fixtures/Saloon/index.configure.json deleted file mode 100644 index 62bc0fb..0000000 --- a/tests/Fixtures/Saloon/index.configure.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":202,"headers":{"date":"Fri, 14 Apr 2023 19:24:18 GMT","x-envoy-upstream-service-time":"1464","content-length":"0","server":"envoy"},"data":""} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.create.json b/tests/Fixtures/Saloon/index.create.json deleted file mode 100644 index d35f39a..0000000 --- a/tests/Fixtures/Saloon/index.create.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":201,"headers":{"date":"Fri, 14 Apr 2023 10:20:46 GMT","x-envoy-upstream-service-time":"1210","content-length":"0","server":"envoy"},"data":""} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.delete.json b/tests/Fixtures/Saloon/index.delete.json deleted file mode 100644 index e577f33..0000000 --- a/tests/Fixtures/Saloon/index.delete.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":202,"headers":{"date":"Fri, 14 Apr 2023 19:25:14 GMT","x-envoy-upstream-service-time":"15","content-length":"0","server":"envoy"},"data":""} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.describe.json b/tests/Fixtures/Saloon/index.describe.json deleted file mode 100644 index b841d13..0000000 --- a/tests/Fixtures/Saloon/index.describe.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json; charset=UTF-8","date":"Fri, 14 Apr 2023 10:21:51 GMT","x-envoy-upstream-service-time":"5","content-length":"277","server":"envoy"},"data":"{\"database\":{\"name\":\"pinecone-php\",\"metric\":\"cosine\",\"dimension\":128,\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"p1.x1\"},\"status\":{\"waiting\":[\"database\"],\"crashed\":[],\"host\":\"pinecone-php-4e07f0d.svc.us-east1-gcp.pinecone.io\",\"port\":433,\"state\":\"Initializing\",\"ready\":false}}\n"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.describemultiple-vectors.json b/tests/Fixtures/Saloon/index.describemultiple-vectors.json deleted file mode 100644 index 6c1617d..0000000 --- a/tests/Fixtures/Saloon/index.describemultiple-vectors.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json; charset=UTF-8","date":"Thu, 22 Jun 2023 15:58:22 GMT","x-envoy-upstream-service-time":"5","content-length":"259","server":"envoy"},"data":"{\"database\":{\"name\":\"pinecone-php\",\"metric\":\"cosine\",\"dimension\":512,\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"s1.x1\"},\"status\":{\"waiting\":[],\"crashed\":[],\"host\":\"pinecone-php-f19d399.svc.us-west4-gcp.pinecone.io\",\"port\":433,\"state\":\"Ready\",\"ready\":true}}\n"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.describeone-vector.json b/tests/Fixtures/Saloon/index.describeone-vector.json deleted file mode 100644 index 6dd3e6b..0000000 --- a/tests/Fixtures/Saloon/index.describeone-vector.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json; charset=UTF-8","date":"Thu, 22 Jun 2023 15:58:19 GMT","x-envoy-upstream-service-time":"5","content-length":"259","server":"envoy"},"data":"{\"database\":{\"name\":\"pinecone-php\",\"metric\":\"cosine\",\"dimension\":512,\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"s1.x1\"},\"status\":{\"waiting\":[],\"crashed\":[],\"host\":\"pinecone-php-f19d399.svc.us-west4-gcp.pinecone.io\",\"port\":433,\"state\":\"Ready\",\"ready\":true}}\n"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.delete.json b/tests/Fixtures/Saloon/index.vectors.delete.json deleted file mode 100644 index 85fab47..0000000 --- a/tests/Fixtures/Saloon/index.vectors.delete.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Fri, 14 Apr 2023 20:46:32 GMT","x-envoy-upstream-service-time":"10","grpc-status":"0","content-length":"2","server":"envoy"},"data":"{}"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.describestats.json b/tests/Fixtures/Saloon/index.vectors.describestats.json deleted file mode 100644 index f5e9df2..0000000 --- a/tests/Fixtures/Saloon/index.vectors.describestats.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Fri, 14 Apr 2023 20:32:46 GMT","x-envoy-upstream-service-time":"0","grpc-status":"0","content-length":"92","server":"envoy"},"data":"{\"namespaces\":{\"\":{\"vectorCount\":3}},\"dimension\":128,\"indexFullness\":0,\"totalVectorCount\":3}"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.fetch.json b/tests/Fixtures/Saloon/index.vectors.fetch.json deleted file mode 100644 index 955e2b9..0000000 --- a/tests/Fixtures/Saloon/index.vectors.fetch.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Mon, 17 Apr 2023 21:28:24 GMT","x-envoy-upstream-service-time":"2","grpc-status":"0","content-length":"324","server":"envoy"},"data":"{\"vectors\":{\"vector_1\":{\"id\":\"vector_1\",\"values\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},\"namespace\":\"\"}"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.fetchmultiple-vectors.json b/tests/Fixtures/Saloon/index.vectors.fetchmultiple-vectors.json deleted file mode 100644 index 9f7136f..0000000 --- a/tests/Fixtures/Saloon/index.vectors.fetchmultiple-vectors.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Thu, 22 Jun 2023 15:58:23 GMT","x-envoy-upstream-service-time":"3","grpc-status":"0","content-length":"2156","server":"envoy"},"data":"{\"vectors\":{\"vector_1\":{\"id\":\"vector_1\",\"values\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},\"vector_2\":{\"id\":\"vector_2\",\"values\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},\"namespace\":\"\"}"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.fetchone-vector.json b/tests/Fixtures/Saloon/index.vectors.fetchone-vector.json deleted file mode 100644 index 1109e4a..0000000 --- a/tests/Fixtures/Saloon/index.vectors.fetchone-vector.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Thu, 22 Jun 2023 15:58:20 GMT","x-envoy-upstream-service-time":"1","grpc-status":"0","content-length":"1092","server":"envoy"},"data":"{\"vectors\":{\"vector_1\":{\"id\":\"vector_1\",\"values\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},\"namespace\":\"\"}"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.query.json b/tests/Fixtures/Saloon/index.vectors.query.json deleted file mode 100644 index 503b8a4..0000000 --- a/tests/Fixtures/Saloon/index.vectors.query.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Fri, 14 Apr 2023 20:41:33 GMT","x-envoy-upstream-service-time":"2","grpc-status":"0","content-length":"148","server":"envoy"},"data":"{\"results\":[],\"matches\":[{\"id\":\"8805a452-cbf1-30f1-94f6-9aac028cb131\",\"score\":1.00000012,\"values\":[],\"metadata\":{\"meta1\":\"value1\"}}],\"namespace\":\"\"}"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.update.json b/tests/Fixtures/Saloon/index.vectors.update.json deleted file mode 100644 index e46cc8a..0000000 --- a/tests/Fixtures/Saloon/index.vectors.update.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Fri, 14 Apr 2023 20:31:28 GMT","x-envoy-upstream-service-time":"49","grpc-status":"0","content-length":"2","server":"envoy"},"data":"{}"} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/index.vectors.upsert.json b/tests/Fixtures/Saloon/index.vectors.upsert.json deleted file mode 100644 index 2e335bd..0000000 --- a/tests/Fixtures/Saloon/index.vectors.upsert.json +++ /dev/null @@ -1 +0,0 @@ -{"statusCode":200,"headers":{"content-type":"application\/json","date":"Fri, 14 Apr 2023 20:00:47 GMT","x-envoy-upstream-service-time":"50","grpc-status":"0","content-length":"19","server":"envoy"},"data":"{\"upsertedCount\":1}"} \ No newline at end of file diff --git a/tests/Pest.php b/tests/Pest.php index 3fee050..c209f77 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -28,9 +28,9 @@ function dd() } } -function getIndexName(): string +function getIndexName(string $suffix = ''): string { - return $_ENV['PINECONE_INDEX_NAME']; + return $_ENV['PINECONE_INDEX_NAME'] . $suffix; } function getCollectionName(): string @@ -53,7 +53,7 @@ function getClient(bool $mocked = false, string $fixtureSuffix = ''): Client }, ]); - $client = new Probots\Pinecone\Client($_ENV['PINECONE_API_KEY'], $_ENV['PINECONE_ENVIRONMENT']); + $client = new Probots\Pinecone\Client($_ENV['PINECONE_API_KEY']); if ($mocked) { $client->withMockClient($mock); From 0649db6fca4a9af80b4717085ce787d5b19c5b64 Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Wed, 21 Feb 2024 15:08:51 +0100 Subject: [PATCH 8/9] tests restructred2 --- src/Client.php | 23 +++++++---- src/Requests/Data/FetchVectors.php | 7 ++-- tests/Feature/Data/DeleteTest.php | 14 ------- tests/Feature/Data/DeleteVectorsTest.php | 17 +++++++++ tests/Feature/Data/DescribeStatsTest.php | 13 ------- tests/Feature/Data/FetchTest.php | 32 ---------------- tests/Feature/Data/FetchVectorsTest.php | 38 +++++++++++++++++++ tests/Feature/Data/GetIndexStatsTest.php | 16 ++++++++ .../{QueryTest.php => QueryVectorsTest.php} | 7 +++- .../{UpdateTest.php => UpdateVectorsTest.php} | 7 +++- tests/Feature/Data/UpsertTest.php | 19 ---------- tests/Feature/Data/UpsertVectorsTest.php | 33 ++++++++++++++++ ...ontrol.describeindex-multiple-vectors.json | 16 ++++++++ .../control.describeindex-one-vector.json | 16 ++++++++ tests/Fixtures/Saloon/data.deletevectors.json | 12 ++++++ .../data.fetchvectors-multiple-vectors.json | 12 ++++++ .../Saloon/data.fetchvectors-one-vector.json | 12 ++++++ tests/Fixtures/Saloon/data.getindexstats.json | 12 ++++++ tests/Fixtures/Saloon/data.queryvectors.json | 12 ++++++ tests/Fixtures/Saloon/data.updatevector.json | 12 ++++++ tests/Fixtures/Saloon/data.upsertvectors.json | 12 ++++++ tests/Pest.php | 17 ++++++++- 22 files changed, 264 insertions(+), 95 deletions(-) delete mode 100644 tests/Feature/Data/DeleteTest.php create mode 100644 tests/Feature/Data/DeleteVectorsTest.php delete mode 100644 tests/Feature/Data/DescribeStatsTest.php delete mode 100644 tests/Feature/Data/FetchTest.php create mode 100644 tests/Feature/Data/FetchVectorsTest.php create mode 100644 tests/Feature/Data/GetIndexStatsTest.php rename tests/Feature/Data/{QueryTest.php => QueryVectorsTest.php} (61%) rename tests/Feature/Data/{UpdateTest.php => UpdateVectorsTest.php} (56%) delete mode 100644 tests/Feature/Data/UpsertTest.php create mode 100644 tests/Feature/Data/UpsertVectorsTest.php create mode 100644 tests/Fixtures/Saloon/control.describeindex-multiple-vectors.json create mode 100644 tests/Fixtures/Saloon/control.describeindex-one-vector.json create mode 100644 tests/Fixtures/Saloon/data.deletevectors.json create mode 100644 tests/Fixtures/Saloon/data.fetchvectors-multiple-vectors.json create mode 100644 tests/Fixtures/Saloon/data.fetchvectors-one-vector.json create mode 100644 tests/Fixtures/Saloon/data.getindexstats.json create mode 100644 tests/Fixtures/Saloon/data.queryvectors.json create mode 100644 tests/Fixtures/Saloon/data.updatevector.json create mode 100644 tests/Fixtures/Saloon/data.upsertvectors.json diff --git a/src/Client.php b/src/Client.php index 0b51678..fb6a82c 100644 --- a/src/Client.php +++ b/src/Client.php @@ -9,6 +9,7 @@ use Probots\Pinecone\Resources\DataResource; use Psr\Http\Message\RequestInterface; use Saloon\Http\Connector; +use Saloon\Http\PendingRequest; use Saloon\Traits\Plugins\AcceptsJson; use Saloon\Traits\Plugins\AlwaysThrowOnErrors; @@ -23,15 +24,14 @@ class Client extends Connector implements ClientContract public function __construct( public string $apiKey, public ?string $indexHost = null, - ) + ) {} + + // (Temporary) Workaround for https://github.com/probots-io/pinecone-php/issues/3 + + /* @phpstan-ignore-next-line */ + public function handlePsrRequest(RequestInterface $request, PendingRequest $pendingRequest): RequestInterface { - // (Temporary) Workaround for https://github.com/probots-io/pinecone-php/issues/3 - /* @phpstan-ignore-next-line */ - $this->sender()->addMiddleware(function (callable $handler) { - return function (RequestInterface $request, array $options) use ($handler) { - return $handler(FetchVectors::queryIdsWorkaround($request), $options); - }; - }); + return FetchVectors::queryIdsWorkaround($request); } public function resolveBaseUrl(): string @@ -58,6 +58,13 @@ public function data(): DataResource return new DataResource($this); } + public function setIndexHost(string $indexHost): self + { + $this->indexHost = $indexHost; + + return $this; + } + protected function defaultHeaders(): array { diff --git a/src/Requests/Data/FetchVectors.php b/src/Requests/Data/FetchVectors.php index 8193a24..87077cb 100644 --- a/src/Requests/Data/FetchVectors.php +++ b/src/Requests/Data/FetchVectors.php @@ -3,19 +3,17 @@ namespace Probots\Pinecone\Requests\Data; use GuzzleHttp\Psr7\Query; -use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; use Saloon\Traits\RequestProperties\HasQuery; /** * @link https://docs.pinecone.io/reference/fetch */ -class FetchVectors extends Request implements HasBody +class FetchVectors extends Request { - use HasJsonBody, HasQuery; + use HasQuery; protected Method $method = Method::GET; @@ -35,6 +33,7 @@ public static function queryIdsWorkaround($request): \GuzzleHttp\Psr7\Request if ($requestUri->getPath() === '/vectors/fetch') { $queryString = $requestUri->getQuery(); parse_str(urldecode($queryString), $data); + return $request->withUri($requestUri->withQuery(Query::build($data))); } diff --git a/tests/Feature/Data/DeleteTest.php b/tests/Feature/Data/DeleteTest.php deleted file mode 100644 index b845309..0000000 --- a/tests/Feature/Data/DeleteTest.php +++ /dev/null @@ -1,14 +0,0 @@ -index(getIndexName()); - - $response = $index->vectors()->delete( - deleteAll: true, - ); - - expect($response->status())->toBe(200); - -}); \ No newline at end of file diff --git a/tests/Feature/Data/DeleteVectorsTest.php b/tests/Feature/Data/DeleteVectorsTest.php new file mode 100644 index 0000000..baffca1 --- /dev/null +++ b/tests/Feature/Data/DeleteVectorsTest.php @@ -0,0 +1,17 @@ +data()->vectors()->delete( + deleteAll: true, + ); + + expect($response->status())->toBe(200); + +}); \ No newline at end of file diff --git a/tests/Feature/Data/DescribeStatsTest.php b/tests/Feature/Data/DescribeStatsTest.php deleted file mode 100644 index a294adb..0000000 --- a/tests/Feature/Data/DescribeStatsTest.php +++ /dev/null @@ -1,13 +0,0 @@ -index(getIndexName()); - - $response = $index->vectors()->stats(); - - expect($response->status())->toBe(200) - ->and($response->json('dimension'))->toBe(128); - -}); \ No newline at end of file diff --git a/tests/Feature/Data/FetchTest.php b/tests/Feature/Data/FetchTest.php deleted file mode 100644 index 6ce7e32..0000000 --- a/tests/Feature/Data/FetchTest.php +++ /dev/null @@ -1,32 +0,0 @@ -index(getIndexName()); - - $response = $index->vectors()->fetch([ - 'vector_1' - ]); - - expect($response->status())->toBe(200) - ->and($response->json('vectors.vector_1.id'))->toBe('vector_1'); - - -}); - -it('can fetch multiple vectors', function () { - - $client = getClient(true, 'multiple-vectors'); - $index = $client->index(getIndexName()); - - $response = $index->vectors()->fetch([ - 'vector_1', 'vector_2' - ]); - - expect($response->status())->toBe(200) - ->and($response->json('vectors.vector_1.id'))->toBe('vector_1') - ->and($response->json('vectors.vector_2.id'))->toBe('vector_2'); - - -}); \ No newline at end of file diff --git a/tests/Feature/Data/FetchVectorsTest.php b/tests/Feature/Data/FetchVectorsTest.php new file mode 100644 index 0000000..6af8db0 --- /dev/null +++ b/tests/Feature/Data/FetchVectorsTest.php @@ -0,0 +1,38 @@ +data()->vectors()->fetch([ + 'vector_1' + ]); + + expect($response->status())->toBe(200) + ->and($response->json('vectors.vector_1.id'))->toBe('vector_1'); + + +}); + +it('can fetch multiple vectors', function () { + + $client = getClient(true, '-multiple-vectors'); + $index = getIndexName('-pod'); + + // This is not good. Since the test relies on Pinecone having the needed index. + setIndexHost($client, $index); + + $response = $client->data()->vectors()->fetch([ + 'vector_1', 'vector_2' + ]); + + expect($response->status())->toBe(200) + ->and($response->json('vectors.vector_1.id'))->toBe('vector_1') + ->and($response->json('vectors.vector_2.id'))->toBe('vector_2'); + + +}); \ No newline at end of file diff --git a/tests/Feature/Data/GetIndexStatsTest.php b/tests/Feature/Data/GetIndexStatsTest.php new file mode 100644 index 0000000..4f10e2a --- /dev/null +++ b/tests/Feature/Data/GetIndexStatsTest.php @@ -0,0 +1,16 @@ +data()->vectors()->stats(); + + expect($response->status())->toBe(200) + ->and($response->json('dimension'))->toBe(128); + +}); \ No newline at end of file diff --git a/tests/Feature/Data/QueryTest.php b/tests/Feature/Data/QueryVectorsTest.php similarity index 61% rename from tests/Feature/Data/QueryTest.php rename to tests/Feature/Data/QueryVectorsTest.php index e624133..51d19e9 100644 --- a/tests/Feature/Data/QueryTest.php +++ b/tests/Feature/Data/QueryVectorsTest.php @@ -3,9 +3,12 @@ it('can query vectors', function () { $client = getClient(true); - $index = $client->index(getIndexName()); + $index = getIndexName('-pod'); - $response = $index->vectors()->query( + // This is not good. Since the test relies on Pinecone having the needed index. + setIndexHost($client, $index); + + $response = $client->data()->vectors()->query( vector: array_fill(0, 128, 0.12), topK: 1, ); diff --git a/tests/Feature/Data/UpdateTest.php b/tests/Feature/Data/UpdateVectorsTest.php similarity index 56% rename from tests/Feature/Data/UpdateTest.php rename to tests/Feature/Data/UpdateVectorsTest.php index 31aaee9..7453757 100644 --- a/tests/Feature/Data/UpdateTest.php +++ b/tests/Feature/Data/UpdateVectorsTest.php @@ -3,9 +3,12 @@ it('can update vectors', function () { $client = getClient(true); - $index = $client->index(getIndexName()); + $index = getIndexName('-pod'); - $response = $index->vectors()->update( + // This is not good. Since the test relies on Pinecone having the needed index. + setIndexHost($client, $index); + + $response = $client->data()->vectors()->update( id: 'vector_1', values: array_fill(0, 128, 0.14), setMetadata: [ diff --git a/tests/Feature/Data/UpsertTest.php b/tests/Feature/Data/UpsertTest.php deleted file mode 100644 index bd681cc..0000000 --- a/tests/Feature/Data/UpsertTest.php +++ /dev/null @@ -1,19 +0,0 @@ -index(getIndexName()); - - $response = $index->vectors()->upsert(vectors: [ - 'id' => 'vector_1', - 'values' => array_fill(0, 128, 0.12), - 'metadata' => [ - 'meta1' => 'value1', - ] - ]); - - expect($response->status())->toBe(200) - ->and($response->json('upsertedCount'))->toBe(1); - -}); \ No newline at end of file diff --git a/tests/Feature/Data/UpsertVectorsTest.php b/tests/Feature/Data/UpsertVectorsTest.php new file mode 100644 index 0000000..fde1e14 --- /dev/null +++ b/tests/Feature/Data/UpsertVectorsTest.php @@ -0,0 +1,33 @@ +data()->vectors()->upsert( + vectors: [ + [ + 'id' => 'vector_1', + 'values' => array_fill(0, 128, 0.12), + 'metadata' => [ + 'meta1' => 'value1', + ] + ], + [ + 'id' => 'vector_2', + 'values' => array_fill(0, 128, 0.12), + 'metadata' => [ + 'meta1' => 'value2', + ] + ] + ] + ); + + expect($response->status())->toBe(200) + ->and($response->json('upsertedCount'))->toBe(2); + +}); \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.describeindex-multiple-vectors.json b/tests/Fixtures/Saloon/control.describeindex-multiple-vectors.json new file mode 100644 index 0000000..380fe6a --- /dev/null +++ b/tests/Fixtures/Saloon/control.describeindex-multiple-vectors.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "af370d1c13d48aafab7ce610fc9a708c", + "Date": "Wed, 21 Feb 2024 14:06:37 GMT", + "Server": "Google Frontend", + "Content-Length": "272", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-test-php-pod\",\"metric\":\"cosine\",\"dimension\":128,\"status\":{\"ready\":true,\"state\":\"Ready\"},\"host\":\"pinecone-test-php-pod-1eyib7n.svc.us-east1-gcp.pinecone.io\",\"spec\":{\"pod\":{\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"p1.x1\",\"environment\":\"us-east1-gcp\"}}}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/control.describeindex-one-vector.json b/tests/Fixtures/Saloon/control.describeindex-one-vector.json new file mode 100644 index 0000000..91979ae --- /dev/null +++ b/tests/Fixtures/Saloon/control.describeindex-one-vector.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "access-control-allow-origin": "*", + "vary": "origin,access-control-request-method,access-control-request-headers", + "access-control-expose-headers": "*", + "X-Cloud-Trace-Context": "b8dad3bb6f9cf147ed4d19f1ff063959", + "Date": "Wed, 21 Feb 2024 13:31:02 GMT", + "Server": "Google Frontend", + "Content-Length": "272", + "Via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + "data": "{\"name\":\"pinecone-test-php-pod\",\"metric\":\"cosine\",\"dimension\":128,\"status\":{\"ready\":true,\"state\":\"Ready\"},\"host\":\"pinecone-test-php-pod-1eyib7n.svc.us-east1-gcp.pinecone.io\",\"spec\":{\"pod\":{\"replicas\":1,\"shards\":1,\"pods\":1,\"pod_type\":\"p1.x1\",\"environment\":\"us-east1-gcp\"}}}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/data.deletevectors.json b/tests/Fixtures/Saloon/data.deletevectors.json new file mode 100644 index 0000000..24f3123 --- /dev/null +++ b/tests/Fixtures/Saloon/data.deletevectors.json @@ -0,0 +1,12 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "date": "Wed, 21 Feb 2024 14:08:21 GMT", + "x-envoy-upstream-service-time": "9", + "grpc-status": "0", + "content-length": "2", + "server": "envoy" + }, + "data": "{}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/data.fetchvectors-multiple-vectors.json b/tests/Fixtures/Saloon/data.fetchvectors-multiple-vectors.json new file mode 100644 index 0000000..1dfb018 --- /dev/null +++ b/tests/Fixtures/Saloon/data.fetchvectors-multiple-vectors.json @@ -0,0 +1,12 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "date": "Wed, 21 Feb 2024 14:06:38 GMT", + "x-envoy-upstream-service-time": "1", + "grpc-status": "0", + "content-length": "1448", + "server": "envoy" + }, + "data": "{\"vectors\":{\"vector_1\":{\"id\":\"vector_1\",\"values\":[0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12],\"metadata\":{\"meta1\":\"value1\"}},\"vector_2\":{\"id\":\"vector_2\",\"values\":[0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12,0.12],\"metadata\":{\"meta1\":\"value2\"}}},\"namespace\":\"\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/data.fetchvectors-one-vector.json b/tests/Fixtures/Saloon/data.fetchvectors-one-vector.json new file mode 100644 index 0000000..69e8d4e --- /dev/null +++ b/tests/Fixtures/Saloon/data.fetchvectors-one-vector.json @@ -0,0 +1,12 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "date": "Wed, 21 Feb 2024 14:01:44 GMT", + "x-envoy-upstream-service-time": "2", + "grpc-status": "0", + "content-length": "738", + "server": "envoy" + }, + "data": "{\"vectors\":{\"vector_1\":{\"id\":\"vector_1\",\"values\":[0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14,0.14],\"metadata\":{\"meta1\":\"value1\"}}},\"namespace\":\"\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/data.getindexstats.json b/tests/Fixtures/Saloon/data.getindexstats.json new file mode 100644 index 0000000..47cbea9 --- /dev/null +++ b/tests/Fixtures/Saloon/data.getindexstats.json @@ -0,0 +1,12 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "date": "Wed, 21 Feb 2024 13:12:09 GMT", + "x-envoy-upstream-service-time": "1", + "grpc-status": "0", + "content-length": "72", + "server": "envoy" + }, + "data": "{\"namespaces\":{},\"dimension\":128,\"indexFullness\":0,\"totalVectorCount\":0}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/data.queryvectors.json b/tests/Fixtures/Saloon/data.queryvectors.json new file mode 100644 index 0000000..74a53e8 --- /dev/null +++ b/tests/Fixtures/Saloon/data.queryvectors.json @@ -0,0 +1,12 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "date": "Wed, 21 Feb 2024 13:30:03 GMT", + "x-envoy-upstream-service-time": "1", + "grpc-status": "0", + "content-length": "111", + "server": "envoy" + }, + "data": "{\"results\":[],\"matches\":[{\"id\":\"vector_1\",\"score\":1,\"values\":[],\"metadata\":{\"meta1\":\"value1\"}}],\"namespace\":\"\"}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/data.updatevector.json b/tests/Fixtures/Saloon/data.updatevector.json new file mode 100644 index 0000000..4c3bbd3 --- /dev/null +++ b/tests/Fixtures/Saloon/data.updatevector.json @@ -0,0 +1,12 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "date": "Wed, 21 Feb 2024 13:29:29 GMT", + "x-envoy-upstream-service-time": "49", + "grpc-status": "0", + "content-length": "2", + "server": "envoy" + }, + "data": "{}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/data.upsertvectors.json b/tests/Fixtures/Saloon/data.upsertvectors.json new file mode 100644 index 0000000..ead150a --- /dev/null +++ b/tests/Fixtures/Saloon/data.upsertvectors.json @@ -0,0 +1,12 @@ +{ + "statusCode": 200, + "headers": { + "content-type": "application\/json", + "date": "Wed, 21 Feb 2024 14:05:06 GMT", + "x-envoy-upstream-service-time": "51", + "grpc-status": "0", + "content-length": "19", + "server": "envoy" + }, + "data": "{\"upsertedCount\":2}" +} \ No newline at end of file diff --git a/tests/Pest.php b/tests/Pest.php index c209f77..3a2e59e 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -16,6 +16,7 @@ use Saloon\Http\Faking\MockClient; use Saloon\Http\Faking\MockResponse; use Saloon\Http\PendingRequest; +use Saloon\Http\Response; uses(Tests\TestCase::class)->in('Feature'); @@ -38,6 +39,20 @@ function getCollectionName(): string return $_ENV['PINECONE_COLLECTION_NAME']; } +function describeIndex($client, $indexName): Response +{ + return $client->control()->index($indexName)->describe(); +} + + +function setIndexHost($client, $indexName): void +{ + $indexData = describeIndex($client, $indexName); + $host = $indexData->json('host'); + + $client->setIndexHost('https://' . $host); +} + function getClient(bool $mocked = false, string $fixtureSuffix = ''): Client { $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../'); @@ -53,7 +68,7 @@ function getClient(bool $mocked = false, string $fixtureSuffix = ''): Client }, ]); - $client = new Probots\Pinecone\Client($_ENV['PINECONE_API_KEY']); + $client = new Probots\Pinecone\Client($_ENV['PINECONE_API_KEY'], $_ENV['PINECONE_INDEX_HOST']); if ($mocked) { $client->withMockClient($mock); From 88d341573b1c6e4c0512735cc6afc8da7acc46eb Mon Sep 17 00:00:00 2001 From: Marcus Pohorely Date: Wed, 21 Feb 2024 15:09:47 +0100 Subject: [PATCH 9/9] phpstan --- phpstan.neon | 2 +- src/Client.php | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index b866a03..13022a6 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,4 +2,4 @@ parameters: level: 5 paths: - src -# - tests \ No newline at end of file + - tests \ No newline at end of file diff --git a/src/Client.php b/src/Client.php index fb6a82c..1407075 100644 --- a/src/Client.php +++ b/src/Client.php @@ -27,8 +27,6 @@ public function __construct( ) {} // (Temporary) Workaround for https://github.com/probots-io/pinecone-php/issues/3 - - /* @phpstan-ignore-next-line */ public function handlePsrRequest(RequestInterface $request, PendingRequest $pendingRequest): RequestInterface { return FetchVectors::queryIdsWorkaround($request);